[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master fee9d55 02/15: Support tabular minimum premiu
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master fee9d55 02/15: Support tabular minimum premiums |
Date: |
Tue, 27 Aug 2019 13:50:17 -0400 (EDT) |
branch: master
commit fee9d552446d026e43a4455f8c7de768f18689af
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Support tabular minimum premiums
---
basic_values.hpp | 6 ++++++
ihs_basicval.cpp | 34 ++++++++++++++++++++++++++++++++++
mortality_rates.hpp | 7 +++++++
mortality_rates_fetch.cpp | 1 +
4 files changed, 48 insertions(+)
diff --git a/basic_values.hpp b/basic_values.hpp
index 5bc9342..8e153f0 100644
--- a/basic_values.hpp
+++ b/basic_values.hpp
@@ -161,6 +161,7 @@ class LMI_SO BasicValues
std::vector<double> GetGuaranteedTermRates() const;
std::vector<double> GetGroupProxyRates() const;
std::vector<double> GetSevenPayRates() const;
+ std::vector<double> GetMinPremRates() const;
std::vector<double> GetTgtPremRates() const;
std::vector<double> GetIrc7702QRates() const;
std::vector<double> GetPartialMortalityRates() const;
@@ -206,6 +207,11 @@ class LMI_SO BasicValues
,mcenum_mode a_mode
,double a_specamt
) const;
+ double GetModalPremMinFromTable
+ (int a_year
+ ,mcenum_mode a_mode
+ ,double a_specamt
+ ) const;
double GetModalPremTgtFromTable
(int a_year
,mcenum_mode a_mode
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 79b8bf0..4e7d683 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -909,6 +909,31 @@ double BasicValues::GetModalPremMaxNonMec
return round_max_premium()(ldbl_eps_plus_one_times(temp * a_specamt /
a_mode));
}
+/// Calculate premium using a minimum-premium ratio.
+///
+/// Only the initial minimum-premium rate is used here, because that's
+/// generally fixed at issue. This calculation remains naive in that
+/// the initial specified amount may also be fixed at issue, but that
+/// choice is left to the caller.
+///
+/// As the GetModalSpecAmt() documentation for 'oe_modal_table' says,
+/// target and minimum premiums really ought to distinguished.
+
+double BasicValues::GetModalPremMinFromTable
+ (int // a_year // Unused.
+ ,mcenum_mode a_mode
+ ,double a_specamt
+ ) const
+{
+ return round_max_premium()
+ (ldbl_eps_plus_one_times
+ (
+ (a_specamt * MortalityRates_->MinimumPremiumRates()[0])
+ / a_mode
+ )
+ );
+}
+
/// Calculate premium using a target-premium ratio.
///
/// Only the initial target-premium rate is used here, because that's
@@ -2022,6 +2047,15 @@ std::vector<double> BasicValues::GetSevenPayRates() const
);
}
+std::vector<double> BasicValues::GetMinPremRates() const
+{
+ return GetTable
+ (product().datum("MinPremFilename")
+ ,DB_MinPremTable
+ ,oe_modal_table == MinPremType
+ );
+}
+
std::vector<double> BasicValues::GetTgtPremRates() const
{
return GetTable
diff --git a/mortality_rates.hpp b/mortality_rates.hpp
index 0df4231..16d7b8c 100644
--- a/mortality_rates.hpp
+++ b/mortality_rates.hpp
@@ -71,6 +71,7 @@ class MortalityRates
std::vector<double> const& ChildRiderRates () const;
std::vector<double> const& SpouseRiderRates (mcenum_gen_basis) const;
+ std::vector<double> const& MinimumPremiumRates () const;
std::vector<double> const& TargetPremiumRates () const;
std::vector<double> const& Irc7702Q () const;
@@ -152,6 +153,7 @@ class MortalityRates
std::vector<double> CurrentSpouseRiderRates_;
std::vector<double> MidpointSpouseRiderRates_;
+ std::vector<double> MinimumPremiumRates_;
std::vector<double> TargetPremiumRates_;
std::vector<double> Irc7702Q_;
@@ -177,6 +179,11 @@ inline std::vector<double> const&
MortalityRates::ChildRiderRates() const
return ChildRiderRates_;
}
+inline std::vector<double> const& MortalityRates::MinimumPremiumRates() const
+{
+ return MinimumPremiumRates_;
+}
+
inline std::vector<double> const& MortalityRates::TargetPremiumRates() const
{
return TargetPremiumRates_;
diff --git a/mortality_rates_fetch.cpp b/mortality_rates_fetch.cpp
index b9c6e91..659cdd8 100644
--- a/mortality_rates_fetch.cpp
+++ b/mortality_rates_fetch.cpp
@@ -104,6 +104,7 @@ void MortalityRates::fetch_parameters(BasicValues const&
basic_values)
ChildRiderRates_ = basic_values.GetChildRiderRates();
GuaranteedSpouseRiderRates_ =
basic_values.GetGuaranteedSpouseRiderRates();
CurrentSpouseRiderRates_ = basic_values.GetCurrentSpouseRiderRates();
+ MinimumPremiumRates_ = basic_values.GetMinPremRates();
TargetPremiumRates_ = basic_values.GetTgtPremRates();
Irc7702Q_ = basic_values.GetIrc7702QRates();
- [lmi-commits] [lmi] master updated (e0bf6c4 -> 80e47f2), Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master fee9d55 02/15: Support tabular minimum premiums,
Greg Chicares <=
- [lmi-commits] [lmi] master a1d772b 03/15: Prefer 'switch' to if...else_if...else, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master 3d6e389 07/15: Simplify single-premium logic, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master a74799d 06/15: Add a 'GuarCoiWhence' database entity, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master e010c8f 04/15: Distinguish tabular minimum and target premiums, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master 3e7a753 05/15: Resolve and document the policy-fee issue noted in the last commit, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master 6b1abc0 11/15: Rework {flexible, single}-premium footnotes, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master b2e4af3 08/15: Make 'IsSinglePremium' enumerative, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master 6596a29 12/15: Reformat to highlight similarity, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master 80e47f2 15/15: Substitute product-database strings for literal text, Greg Chicares, 2019/08/27
- [lmi-commits] [lmi] master 2994f27 13/15: Simplify and condense, Greg Chicares, 2019/08/27