[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 71d750e 14/24: Make two member functions almo
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 71d750e 14/24: Make two member functions almost identical |
Date: |
Wed, 30 Dec 2020 18:46:59 -0500 (EST) |
branch: master
commit 71d750e91ae8435865ce9fbb5a280be59696df52
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Make two member functions almost identical
Made BasicValues::GPTServerInit() and BasicValues::Init() identical
except for BasicValues::InitialTargetPremium, which will next be
handled separately.
Originally, the "server" variant avoided initializing several things
that it does not need, to make it faster. The server never having been
deployed, its speed is not important enough to justify maintaining two
nearly identical initialization functions. Such maintenance always risks
unwitting divergence; for example, code to throw an exception in
jurisdictions that have not approved a product ought to have been added
to the server (and is, hereby).
Similarly, it seems apparent that '.gpt' input has never been tested for
products that offer a "supplemental" specified amount.
---
ihs_basicval.cpp | 40 ++++++++++++++++++++++++++++++++--------
1 file changed, 32 insertions(+), 8 deletions(-)
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 27faf92..6b0eb11 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -138,6 +138,10 @@ BasicValues::BasicValues
int const db_len = database().length();
yare_input_.SpecifiedAmount .assign(db_len, a_FaceAmount);
+ // The tax law recognizes no "supplemental" amount, but
+ // class death_benefits expects SupplementalAmount to have
+ // the same length as SpecifiedAmount.
+ yare_input_.SupplementalAmount .assign(db_len, 0.0);
// Cf. effective_dbopt_7702()
mce_dbopt const z
@@ -272,6 +276,22 @@ void BasicValues::GPTServerInit()
StateOfJurisdiction_ = yare_input_.StateOfJurisdiction;
PremiumTaxState_ = yare_input_.PremiumTaxState ;
+ if
+ ( !database().query<bool>(DB_StateApproved)
+ && !global_settings::instance().ash_nazg()
+ && !global_settings::instance().regression_testing()
+ )
+ {
+ alarum()
+ << "Product "
+ << yare_input_.ProductName
+ << " not approved in state "
+ << mc_str(GetStateOfJurisdiction())
+ << "."
+ << LMI_FLUSH
+ ;
+ }
+
IssueAge = yare_input_.IssueAge;
RetAge = yare_input_.RetirementAge;
LMI_ASSERT(IssueAge < 100);
@@ -311,8 +331,8 @@ void BasicValues::GPTServerInit()
<< LMI_FLUSH
;
}
-// lingo_.reset(new lingo(AddDataDir(product().datum("LingoFilename"))));
-// FundData_.reset(new FundData(AddDataDir(product().datum("FundFilename"))));
+ lingo_ =
lingo::read_via_cache(AddDataDir(product().datum("LingoFilename")));
+ FundData_.reset(new FundData(AddDataDir(product().datum("FundFilename"))));
RoundingRules_.reset
(new rounding_rules(AddDataDir(product().datum("RoundingFilename")))
);
@@ -325,20 +345,24 @@ void BasicValues::GPTServerInit()
,StratifiedCharges_->minimum_tiered_spread_for_7702()
);
- // Requires database.
- MortalityRates_.reset(new MortalityRates (*this)); // Used by certain
target-premium calculations.
-// InterestRates_ .reset(new InterestRates (*this));
-// DeathBfts_ .reset(new death_benefits (GetLength(), yare_input_,
round_specamt_));
+ // Multilife contracts will need a vector of mortality-rate objects.
+
+ // Mortality and interest rates require database and rounding.
+ // Interest rates require tiered data and 7702 spread.
+ MortalityRates_.reset(new MortalityRates (*this));
+ InterestRates_ .reset(new InterestRates (*this));
+ DeathBfts_ .reset(new death_benefits (GetLength(), yare_input_,
round_specamt_));
// Outlay requires only input and rounding; it might someday use
// interest rates.
-// Outlay_ .reset(new modal_outlay (yare_input_,
round_gross_premium_, round_withdrawal_, round_loan_));
+ Outlay_ .reset(new modal_outlay (yare_input_,
round_gross_premium_, round_withdrawal_, round_loan_));
PremiumTax_ .reset(new premium_tax (PremiumTaxState_,
StateOfDomicile_, yare_input_.AmortizePremiumLoad, database(),
*StratifiedCharges_));
Loads_ .reset(new Loads (*this));
SetMaxSurvivalDur();
-// set_partial_mortality(); // Not needed here.
+ set_partial_mortality();
Init7702();
+ Init7702A();
}
//============================================================================
- [lmi-commits] [lmi] master 30412af 04/24: Report a range error when a range error is caught [336], (continued)
- [lmi-commits] [lmi] master 30412af 04/24: Report a range error when a range error is caught [336], Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master e7c9da0 08/24: Prepare to move a block of code, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 55a3eb0 12/24: Note an apparent defect [327], Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 53e98ab 13/24: Fix defect introduced 20100723T2339Z: wrong jurisdiction [326], Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master e4c790a 18/24: Expunge a defect marker [324], Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master d89a676 22/24: Refactor to avoid a header-only implementation, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 3121c90 23/24: Conditionally use H.R. 6800's 7702 transitional rates, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 3ee0c70 15/24: Make two member functions identical, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master d7f3337 09/24: Move a block of code as just announced, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master d4e0291 10/24: Refactor, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 71d750e 14/24: Make two member functions almost identical,
Greg Chicares <=
- [lmi-commits] [lmi] master a473a82 17/24: Expunge a duplicative member function [325], Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 2bc3d08 02/24: Move an enum, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master b3cbe37 11/24: Move another block of code, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 9180696 16/24: Change a member's type-specifier, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 3ee62a7 19/24: Read product data files earlier, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master 7930f69 20/24: Set 7702 and 7702A interest rates OAOO, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master d6701e8 21/24: Split a unit-test TU in twain, Greg Chicares, 2020/12/30
- [lmi-commits] [lmi] master e1047b3 24/24: Record speed measurements, Greg Chicares, 2020/12/30