lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 2f458a6 1/4: Refactor: one class per product


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 2f458a6 1/4: Refactor: one class per product
Date: Fri, 22 Feb 2019 08:10:33 -0500 (EST)

branch: master
commit 2f458a6779e07e0da3d299e94fc630f473857df4
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Refactor: one class per product
---
 dbdict.cpp | 488 ++++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 253 insertions(+), 235 deletions(-)

diff --git a/dbdict.cpp b/dbdict.cpp
index 1026d63..b258b04 100644
--- a/dbdict.cpp
+++ b/dbdict.cpp
@@ -610,58 +610,61 @@ void DBDictionary::InitDB()
     Add({DB_ExpSpecAmtLimit       , dbl_inf});
 }
 
-void DBDictionary::write_database_files()
+class sample : public DBDictionary {public: sample();};
+
+class sample2finra : public sample {public: sample2finra();};
+class sample2gpp   : public sample {public: sample2gpp  ();};
+class sample2ipp   : public sample {public: sample2ipp  ();};
+class sample2xyz   : public sample {public: sample2xyz  ();};
+
+sample::sample()
 {
-    DBDictionary z;
-
-    z.InitDB();
-
-    z.Add({DB_MinIssAge           , 15});
-    z.Add({DB_MaxIssAge           , 70});
-    z.Add({DB_MaxIncrAge          , 99});
-    z.Add({DB_AllowFullUw         , true});
-    z.Add({DB_AllowParamedUw      , true});
-    z.Add({DB_AllowNonmedUw       , true});
-    z.Add({DB_AllowSimpUw         , true});
-    z.Add({DB_AllowGuarUw         , true});
-    z.Add({DB_SmokeOrTobacco      , oe_tobacco_nontobacco});
-    z.Add({DB_AllowPreferredClass , true});
-    z.Add({DB_AllowUltraPrefClass , false});
+    Add({DB_MinIssAge           , 15});
+    Add({DB_MaxIssAge           , 70});
+    Add({DB_MaxIncrAge          , 99});
+    Add({DB_AllowFullUw         , true});
+    Add({DB_AllowParamedUw      , true});
+    Add({DB_AllowNonmedUw       , true});
+    Add({DB_AllowSimpUw         , true});
+    Add({DB_AllowGuarUw         , true});
+    Add({DB_SmokeOrTobacco      , oe_tobacco_nontobacco});
+    Add({DB_AllowPreferredClass , true});
+    Add({DB_AllowUltraPrefClass , false});
 
     // Forbid substandard table ratings with simplified or guaranteed issue.
     int uw_dims[e_number_of_axes] = {1, 1, 1, 1, 5, 1, 1};
     //                              med  para nonmed   SI     GI
     double allow_substd_table[] = {true, true, true, false, false};
-    z.Add({DB_AllowSubstdTable, e_number_of_axes, uw_dims, 
allow_substd_table});
-
-    z.Add({DB_AllowFlatExtras     , true});
-    z.Add({DB_AllowRatedWp        , false});
-    z.Add({DB_AllowRatedAdb       , false});
-    z.Add({DB_AllowRatedTerm      , true});
-    z.Add({DB_AllowRetirees       , true});
-    z.Add({DB_AllowUnisex         , true});
-    z.Add({DB_AllowSexDistinct    , true});
-    z.Add({DB_AllowUnismoke       , true});
-    z.Add({DB_AllowSmokeDistinct  , true});
-    z.Add({DB_StateApproved       , true});
-    z.Add({DB_AllowStateXX        , true});
-    z.Add({DB_AllowForeign        , true});
-    z.Add({DB_GroupIndivSelection , false});
-    z.Add({DB_Allowable           , true});
-    z.Add({DB_AllowCvat           , true});
-    z.Add({DB_AllowGpt            , true});
-    z.Add({DB_AllowNo7702         , false});
-    z.Add({DB_CorridorWhence      , 1});
-    z.Add({DB_Irc7702NspWhence    , 2});
-    z.Add({DB_SevenPayWhence      , 1});
+    Add({DB_AllowSubstdTable, e_number_of_axes, uw_dims, allow_substd_table});
+
+    Add({DB_AllowFlatExtras     , true});
+    Add({DB_AllowRatedWp        , false});
+    Add({DB_AllowRatedAdb       , false});
+    Add({DB_AllowRatedTerm      , true});
+    Add({DB_AllowRetirees       , true});
+    Add({DB_AllowUnisex         , true});
+    Add({DB_AllowSexDistinct    , true});
+    Add({DB_AllowUnismoke       , true});
+    Add({DB_AllowSmokeDistinct  , true});
+    Add({DB_StateApproved       , true});
+    Add({DB_AllowStateXX        , true});
+    Add({DB_AllowForeign        , true});
+    Add({DB_GroupIndivSelection , false});
+    Add({DB_Allowable           , true});
+    Add({DB_AllowCvat           , true});
+    Add({DB_AllowGpt            , true});
+    Add({DB_AllowNo7702         , false});
+    Add({DB_CorridorWhence      , 1});
+    Add({DB_Irc7702NspWhence    , 2});
+    Add({DB_SevenPayWhence      , 1});
 
     // This is just a sample product, so make do with plausible
     // all-male seven-pay premiums, and use GPT corridor factors for
     // CVAT. 'Irc7702NspWhence' specifies that NSP is calculated as
     // the reciprocal of corridor, so no NSP table is needed.
-    z.Add({DB_CorridorTable       , 7});
-    z.Add({DB_Irc7702NspTable     , 0});
-    z.Add({DB_SevenPayTable       , 10});
+    Add({DB_CorridorTable       , 7});
+    Add({DB_Irc7702NspTable     , 0});
+    Add({DB_SevenPayTable       , 10});
 
     // Following IRS Notice 88-128, use only the male and female
     // tables with no smoker distinction, and a unisex table where
@@ -672,13 +675,13 @@ void DBDictionary::write_database_files()
     // which contains a numerical error but was adopted by NAIC.
     int dims311[e_number_of_axes] = {3, 1, 1, 1, 1, 1, 1}; // gender
     double T7702q[9] = {35, 41, 107,}; // Female, male, unisex.
-    z.Add({DB_Irc7702QTable, e_number_of_axes, dims311, T7702q});
+    Add({DB_Irc7702QTable, e_number_of_axes, dims311, T7702q});
 
-    z.Add({DB_CvatMatChangeDefn   , 
mce_earlier_of_increase_or_unnecessary_premium});
-    z.Add({DB_GptMatChangeDefn    , 0});
-    z.Add({DB_Irc7702BftIsSpecAmt , 0});
-    z.Add({DB_TermIsQABOrDb7702   , oe_7702_term_is_db});
-    z.Add({DB_TermIsQABOrDb7702A  , oe_7702_term_is_db});
+    Add({DB_CvatMatChangeDefn   , 
mce_earlier_of_increase_or_unnecessary_premium});
+    Add({DB_GptMatChangeDefn    , 0});
+    Add({DB_Irc7702BftIsSpecAmt , 0});
+    Add({DB_TermIsQABOrDb7702   , oe_7702_term_is_db});
+    Add({DB_TermIsQABOrDb7702A  , oe_7702_term_is_db});
 
     // US 1980 CSO age last; unisex = table D.
     // Male uses table E, which is correct, as opposed to table F,
@@ -690,15 +693,15 @@ void DBDictionary::write_database_files()
          45,  57,  41, // male:   sm ns us
         111, 109, 107, // unisex: sm ns us
         };
-    z.Add({DB_GuarCoiTable, e_number_of_axes, dims313, TgCOI});
+    Add({DB_GuarCoiTable, e_number_of_axes, dims313, TgCOI});
 
-    z.Add({DB_GuarCoiIsAnnual     , true});
+    Add({DB_GuarCoiIsAnnual     , true});
 
     // For now at least, just use (a multiple of) guaranteed COI rates
     // as current.
-    z.Add({DB_CurrCoiTable, e_number_of_axes, dims313, TgCOI});
+    Add({DB_CurrCoiTable, e_number_of_axes, dims313, TgCOI});
 
-    z.Add({DB_CurrCoiIsAnnual     , true});
+    Add({DB_CurrCoiIsAnnual     , true});
 
     double coimult[9] =
         {
@@ -706,100 +709,100 @@ void DBDictionary::write_database_files()
         0.60, 0.50, 0.55, // male:   sm ns us
         0.50, 0.40, 0.45, // unisex: sm ns us
         };
-    z.Add({DB_CurrCoiMultiplier, e_number_of_axes, dims313, coimult});
-
-    z.Add({DB_MdptCoiIsAnnual     , true});
-    z.Add({DB_UseNyCoiFloor       , 0.0});
-    z.Add({DB_GuarCoiCeiling      , false});
-    z.Add({DB_CoiGuarIsMin        , false});
-    z.Add({DB_AllowMortBlendSex   , true});
-    z.Add({DB_AllowMortBlendSmoke , true});
-    z.Add({DB_GuarInt             , 0.03});
-    z.Add({DB_NaarDiscount        , 0.00246627});
-    z.Add({DB_GuarMandE           , 0.009});
-    z.Add({DB_CurrIntSpread       , 0.01});
-    z.Add({DB_CurrMandE           , 0.009});
-    z.Add({DB_GenAcctIntBonus     , 0.0});
-    z.Add({DB_BonusInt            , 0.0});
-    z.Add({DB_IntFloor            , 0.0});
-    z.Add({DB_AllowGenAcct        , true});
-    z.Add({DB_AllowSepAcct        , true});
-    z.Add({DB_AllowGenAcctEarnRate, true});
-    z.Add({DB_AllowSepAcctNetRate , true});
-    z.Add({DB_MaxGenAcctRate      , 0.06});
-    z.Add({DB_MaxSepAcctRate      , 0.12});
-    z.Add({DB_SepAcctSpreadMethod , mce_spread_is_effective_annual});
-    z.Add({DB_IntSpreadMode       , mce_spread_daily});
-    z.Add({DB_DynamicMandE        , false});
-    z.Add({DB_AllowAmortPremLoad  , false});
-    z.Add({DB_LoadAmortFundCharge , 0.0030});
-    z.Add({DB_AllowImfOverride    , false});
-    z.Add({DB_AssetChargeType     , oe_asset_charge_spread});
-    z.Add({DB_StableValFundCharge , 0.0});
-    z.Add({DB_GuarFundAdminChg    , 0.0});
-    z.Add({DB_CurrFundAdminChg    , 0.0});
-    z.Add({DB_FundCharge          , 0.0});
-    z.Add({DB_GuarMonthlyPolFee   , 8.00});
-    z.Add({DB_GuarAnnualPolFee    , 0.0});
-    z.Add({DB_GuarPremLoadTgt     , 0.07});
-    z.Add({DB_GuarPremLoadExc     , 0.04});
-    z.Add({DB_GuarPremLoadTgtRfd  , 0.00});
-    z.Add({DB_GuarPremLoadExcRfd  , 0.00});
-    z.Add({DB_GuarSpecAmtLoad     , 0.0});
-    z.Add({DB_GuarAcctValLoad     , 0.0});
-    z.Add({DB_CurrMonthlyPolFee   , 5.00});
-    z.Add({DB_CurrAnnualPolFee    , 0.0});
-    z.Add({DB_CurrPremLoadTgt     , 0.05});
-    z.Add({DB_CurrPremLoadExc     , 0.02});
-    z.Add({DB_CurrPremLoadTgtRfd  , 0.00});
-    z.Add({DB_CurrPremLoadExcRfd  , 0.00});
-    z.Add({DB_CurrSpecAmtLoad     , 0.0});
-    z.Add({DB_CurrAcctValLoad     , 0.0});
-    z.Add({DB_TgtPremMonthlyPolFee, 0.0});
-    z.Add({DB_LoadRfdProportion   , 0.0});
-    z.Add({DB_SpecAmtLoadLimit    , 10000000.0});
-    z.Add({DB_DynamicSepAcctLoad  , false});
-    z.Add({DB_DacTaxFundCharge    , 0.0});
-    z.Add({DB_DacTaxPremLoad      , 0.01});
-    z.Add({DB_PremTaxFundCharge   , 0.0});
+    Add({DB_CurrCoiMultiplier, e_number_of_axes, dims313, coimult});
+
+    Add({DB_MdptCoiIsAnnual     , true});
+    Add({DB_UseNyCoiFloor       , 0.0});
+    Add({DB_GuarCoiCeiling      , false});
+    Add({DB_CoiGuarIsMin        , false});
+    Add({DB_AllowMortBlendSex   , true});
+    Add({DB_AllowMortBlendSmoke , true});
+    Add({DB_GuarInt             , 0.03});
+    Add({DB_NaarDiscount        , 0.00246627});
+    Add({DB_GuarMandE           , 0.009});
+    Add({DB_CurrIntSpread       , 0.01});
+    Add({DB_CurrMandE           , 0.009});
+    Add({DB_GenAcctIntBonus     , 0.0});
+    Add({DB_BonusInt            , 0.0});
+    Add({DB_IntFloor            , 0.0});
+    Add({DB_AllowGenAcct        , true});
+    Add({DB_AllowSepAcct        , true});
+    Add({DB_AllowGenAcctEarnRate, true});
+    Add({DB_AllowSepAcctNetRate , true});
+    Add({DB_MaxGenAcctRate      , 0.06});
+    Add({DB_MaxSepAcctRate      , 0.12});
+    Add({DB_SepAcctSpreadMethod , mce_spread_is_effective_annual});
+    Add({DB_IntSpreadMode       , mce_spread_daily});
+    Add({DB_DynamicMandE        , false});
+    Add({DB_AllowAmortPremLoad  , false});
+    Add({DB_LoadAmortFundCharge , 0.0030});
+    Add({DB_AllowImfOverride    , false});
+    Add({DB_AssetChargeType     , oe_asset_charge_spread});
+    Add({DB_StableValFundCharge , 0.0});
+    Add({DB_GuarFundAdminChg    , 0.0});
+    Add({DB_CurrFundAdminChg    , 0.0});
+    Add({DB_FundCharge          , 0.0});
+    Add({DB_GuarMonthlyPolFee   , 8.00});
+    Add({DB_GuarAnnualPolFee    , 0.0});
+    Add({DB_GuarPremLoadTgt     , 0.07});
+    Add({DB_GuarPremLoadExc     , 0.04});
+    Add({DB_GuarPremLoadTgtRfd  , 0.00});
+    Add({DB_GuarPremLoadExcRfd  , 0.00});
+    Add({DB_GuarSpecAmtLoad     , 0.0});
+    Add({DB_GuarAcctValLoad     , 0.0});
+    Add({DB_CurrMonthlyPolFee   , 5.00});
+    Add({DB_CurrAnnualPolFee    , 0.0});
+    Add({DB_CurrPremLoadTgt     , 0.05});
+    Add({DB_CurrPremLoadExc     , 0.02});
+    Add({DB_CurrPremLoadTgtRfd  , 0.00});
+    Add({DB_CurrPremLoadExcRfd  , 0.00});
+    Add({DB_CurrSpecAmtLoad     , 0.0});
+    Add({DB_CurrAcctValLoad     , 0.0});
+    Add({DB_TgtPremMonthlyPolFee, 0.0});
+    Add({DB_LoadRfdProportion   , 0.0});
+    Add({DB_SpecAmtLoadLimit    , 10000000.0});
+    Add({DB_DynamicSepAcctLoad  , false});
+    Add({DB_DacTaxFundCharge    , 0.0});
+    Add({DB_DacTaxPremLoad      , 0.01});
+    Add({DB_PremTaxFundCharge   , 0.0});
 
     // Pass through premium tax.
     int ptd[e_number_of_axes] = {1, 1, 1, 1, 1, e_max_dim_state, 1};
     std::vector<int> premium_tax_dimensions(ptd, ptd + e_number_of_axes);
-    z.Add({DB_PremTaxLoad, premium_tax_dimensions, 
premium_tax_rates_for_life_insurance()});
-
-    z.Add({DB_WaivePremTaxInt1035 , true});
-    z.Add({DB_PremTaxAmortPeriod  , 0});
-    z.Add({DB_PremTaxAmortIntRate , 0.0});
-
-    z.Add({DB_PremTaxRate, premium_tax_dimensions, 
premium_tax_rates_for_life_insurance()});
-
-    z.Add({DB_PremTaxState        , oe_ee_state});
-    z.Add({DB_AllowSpecAmtIncr    , true});
-    z.Add({DB_MinSpecAmtIncr      , 0.0});
-    z.Add({DB_EnforceNaarLimit    , true});
-    z.Add({DB_MinSpecAmt          , 100000.0});
-    z.Add({DB_MinIssSpecAmt       , 50000.0});
-    z.Add({DB_MinIssBaseSpecAmt   , 50000.0});
-    z.Add({DB_MinRenlSpecAmt      , 50000.0});
-    z.Add({DB_MinRenlBaseSpecAmt  , 50000.0});
-    z.Add({DB_AllowDboLvl         , true});
-    z.Add({DB_AllowDboInc         , true});
-    z.Add({DB_AllowDboRop         , true});
-    z.Add({DB_AllowDboMdb         , true});
-    z.Add({DB_DboLvlChangeToWhat  , 0b1111});
-    z.Add({DB_DboLvlChangeMethod  , 0b1111});
-    z.Add({DB_DboIncChangeToWhat  , 0b1111});
-    z.Add({DB_DboIncChangeMethod  , 0b1111});
-    z.Add({DB_DboRopChangeToWhat  , 0b1111});
-    z.Add({DB_DboRopChangeMethod  , 0b1111});
-    z.Add({DB_DboMdbChangeToWhat  , 0b1111});
-    z.Add({DB_DboMdbChangeMethod  , 0b1111});
-    z.Add({DB_AllowChangeToDbo2   , true});
-    z.Add({DB_DboChgCanIncrSpecAmt, true});
-    z.Add({DB_DboChgCanDecrSpecAmt, true});
-    z.Add({DB_AllowExtEndt        , true});
-    z.Add({DB_AllowTerm           , true});
+    Add({DB_PremTaxLoad, premium_tax_dimensions, 
premium_tax_rates_for_life_insurance()});
+
+    Add({DB_WaivePremTaxInt1035 , true});
+    Add({DB_PremTaxAmortPeriod  , 0});
+    Add({DB_PremTaxAmortIntRate , 0.0});
+
+    Add({DB_PremTaxRate, premium_tax_dimensions, 
premium_tax_rates_for_life_insurance()});
+
+    Add({DB_PremTaxState        , oe_ee_state});
+    Add({DB_AllowSpecAmtIncr    , true});
+    Add({DB_MinSpecAmtIncr      , 0.0});
+    Add({DB_EnforceNaarLimit    , true});
+    Add({DB_MinSpecAmt          , 100000.0});
+    Add({DB_MinIssSpecAmt       , 50000.0});
+    Add({DB_MinIssBaseSpecAmt   , 50000.0});
+    Add({DB_MinRenlSpecAmt      , 50000.0});
+    Add({DB_MinRenlBaseSpecAmt  , 50000.0});
+    Add({DB_AllowDboLvl         , true});
+    Add({DB_AllowDboInc         , true});
+    Add({DB_AllowDboRop         , true});
+    Add({DB_AllowDboMdb         , true});
+    Add({DB_DboLvlChangeToWhat  , 0b1111});
+    Add({DB_DboLvlChangeMethod  , 0b1111});
+    Add({DB_DboIncChangeToWhat  , 0b1111});
+    Add({DB_DboIncChangeMethod  , 0b1111});
+    Add({DB_DboRopChangeToWhat  , 0b1111});
+    Add({DB_DboRopChangeMethod  , 0b1111});
+    Add({DB_DboMdbChangeToWhat  , 0b1111});
+    Add({DB_DboMdbChangeMethod  , 0b1111});
+    Add({DB_AllowChangeToDbo2   , true});
+    Add({DB_DboChgCanIncrSpecAmt, true});
+    Add({DB_DboChgCanDecrSpecAmt, true});
+    Add({DB_AllowExtEndt        , true});
+    Add({DB_AllowTerm           , true});
 
     int dims143[e_number_of_axes] = {1, 4, 3, 1, 1, 1, 1}; // uw_class, smoker
     double TtCOI[12] =
@@ -809,120 +812,135 @@ void DBDictionary::write_database_files()
         6, 5, 4, // rated: sm ns us [same as std]
         0, 0, 0, // ultra: sm ns us [zero: error message--no ultrapref class]
         };
-    z.Add({DB_GuarTermTable, e_number_of_axes, dims143, TtCOI});
-    z.Add({DB_TermTable    , e_number_of_axes, dims143, TtCOI});
-
-    z.Add({DB_TermMinIssAge       , 15});
-    z.Add({DB_TermMaxIssAge       , 65});
-    z.Add({DB_TermForcedConvAge   , 70});
-    z.Add({DB_TermForcedConvDur   , 10});
-    z.Add({DB_MaxTermProportion   , 0.0});
-    z.Add({DB_AllowWp             , true});
-    z.Add({DB_WpTable             , 8});
-    z.Add({DB_WpMinIssAge         , 18});
-    z.Add({DB_WpMaxIssAge         , 64});
-    z.Add({DB_AllowAdb            , true});
-    z.Add({DB_AdbTable            , 708});   // 70-75 US ADB experience
-    z.Add({DB_AdbMinIssAge        , 15});
-    z.Add({DB_AdbMaxIssAge        , 70});
-    z.Add({DB_AdbLimit            , 1000000.0});
-    z.Add({DB_AllowSpouseRider    , true});
-    z.Add({DB_SpouseRiderMinAmt   , 10000});
-    z.Add({DB_SpouseRiderMaxAmt   , 1000000});
-    z.Add({DB_SpouseRiderMinIssAge, 20});
-    z.Add({DB_SpouseRiderMaxIssAge, 65});
-    z.Add({DB_SpouseRiderGuarTable, 305});   // arbitrarily use 1960 CSG
-    z.Add({DB_SpouseRiderTable    , 305});   // arbitrarily use 1960 CSG
-    z.Add({DB_AllowChildRider     , true});
-    z.Add({DB_ChildRiderMinAmt    , 25000}); // for testing, min==max
-    z.Add({DB_ChildRiderMaxAmt    , 25000}); // for testing, min==max
-    z.Add({DB_ChildRiderTable     , 305});   // arbitrarily use 1960 CSG
-    z.Add({DB_AllowWd             , true});
-    z.Add({DB_WdFee               , 25.0});
-    z.Add({DB_WdFeeRate           , 0.02});
-    z.Add({DB_MinWd               , 100.0});
-    z.Add({DB_MaxWdDed            , mce_to_next_anniversary});
-    z.Add({DB_WdDecrSpecAmtDboLvl , true});
-    z.Add({DB_WdDecrSpecAmtDboInc , true});
-    z.Add({DB_WdDecrSpecAmtDboRop , true});
-    z.Add({DB_FirstWdMonth        , 0.0});
-    z.Add({DB_AllowLoan           , true});
-    z.Add({DB_AllowPrefLoan       , false});
-    z.Add({DB_AllowFixedLoan      , true});
-    z.Add({DB_AllowVlr            , true});
-    z.Add({DB_FixedLoanRate       , 0.06});
-    z.Add({DB_MinVlrRate          , 0.04});
-    z.Add({DB_MaxLoanAcctValMult  , 1.0});
-    z.Add({DB_MaxLoanDed          , mce_to_next_anniversary});
-    z.Add({DB_GuarPrefLoanSpread  , 0.0});
-    z.Add({DB_GuarRegLoanSpread   , 0.04});
-    z.Add({DB_CurrPrefLoanSpread  , 0.0});
-    z.Add({DB_CurrRegLoanSpread   , 0.02});
-    z.Add({DB_FirstLoanMonth      , 0.0});
-    z.Add({DB_MinPremType         , oe_monthly_deduction});
-    z.Add({DB_TgtPremType         , oe_modal_nonmec});
-    z.Add({DB_TgtPremTable        , 10});    // use seven-pay as target
-    z.Add({DB_TgtPremFixedAtIssue , false});
-    z.Add({DB_TgtPremIgnoreSubstd , true});
-    z.Add({DB_MinPmt              , 0.0});
-    z.Add({DB_NoLapseMinDur       , 0.0});
-    z.Add({DB_NoLapseMinAge       , 0.0});
-    z.Add({DB_NoLapseUnratedOnly  , false});
-    z.Add({DB_NoLapseDboLvlOnly   , false});
-    z.Add({DB_NoLapseAlwaysActive , false});
-    z.Add({DB_AllowHoneymoon      , true});
-    z.Add({DB_AllowExtraAssetComp , true});
-    z.Add({DB_AllowExtraPremComp  , true});
-    z.Add({DB_AllowExpRating      , false});
-    z.Add({DB_AllowExpRating      , true});
-    z.Add({DB_ExpRatStdDevMult    , 0.0});
-    z.Add({DB_ExpRatIbnrMult      , 0.0});
-    z.Add({DB_ExpRatIbnrMult      , 6.0});
-    z.Add({DB_ExpRatCoiRetention  , 0.0});
-    z.Add({DB_ExpRatRiskCoiMult   , 0});
-    z.Add({DB_ExpRatAmortPeriod   , 4.0});
-    z.Add({DB_LedgerType          , mce_ill_reg});
-    z.Add({DB_AgeLastOrNearest    , oe_age_last_birthday});
-    z.Add({DB_MaturityAge         , 100});
-    z.Add({DB_GroupProxyRateTable , 305});   // 1960 CSG (gender-indistinct)
+    Add({DB_GuarTermTable, e_number_of_axes, dims143, TtCOI});
+    Add({DB_TermTable    , e_number_of_axes, dims143, TtCOI});
+
+    Add({DB_TermMinIssAge       , 15});
+    Add({DB_TermMaxIssAge       , 65});
+    Add({DB_TermForcedConvAge   , 70});
+    Add({DB_TermForcedConvDur   , 10});
+    Add({DB_MaxTermProportion   , 0.0});
+    Add({DB_AllowWp             , true});
+    Add({DB_WpTable             , 8});
+    Add({DB_WpMinIssAge         , 18});
+    Add({DB_WpMaxIssAge         , 64});
+    Add({DB_AllowAdb            , true});
+    Add({DB_AdbTable            , 708});   // 70-75 US ADB experience
+    Add({DB_AdbMinIssAge        , 15});
+    Add({DB_AdbMaxIssAge        , 70});
+    Add({DB_AdbLimit            , 1000000.0});
+    Add({DB_AllowSpouseRider    , true});
+    Add({DB_SpouseRiderMinAmt   , 10000});
+    Add({DB_SpouseRiderMaxAmt   , 1000000});
+    Add({DB_SpouseRiderMinIssAge, 20});
+    Add({DB_SpouseRiderMaxIssAge, 65});
+    Add({DB_SpouseRiderGuarTable, 305});   // arbitrarily use 1960 CSG
+    Add({DB_SpouseRiderTable    , 305});   // arbitrarily use 1960 CSG
+    Add({DB_AllowChildRider     , true});
+    Add({DB_ChildRiderMinAmt    , 25000}); // for testing, min==max
+    Add({DB_ChildRiderMaxAmt    , 25000}); // for testing, min==max
+    Add({DB_ChildRiderTable     , 305});   // arbitrarily use 1960 CSG
+    Add({DB_AllowWd             , true});
+    Add({DB_WdFee               , 25.0});
+    Add({DB_WdFeeRate           , 0.02});
+    Add({DB_MinWd               , 100.0});
+    Add({DB_MaxWdDed            , mce_to_next_anniversary});
+    Add({DB_WdDecrSpecAmtDboLvl , true});
+    Add({DB_WdDecrSpecAmtDboInc , true});
+    Add({DB_WdDecrSpecAmtDboRop , true});
+    Add({DB_FirstWdMonth        , 0.0});
+    Add({DB_AllowLoan           , true});
+    Add({DB_AllowPrefLoan       , false});
+    Add({DB_AllowFixedLoan      , true});
+    Add({DB_AllowVlr            , true});
+    Add({DB_FixedLoanRate       , 0.06});
+    Add({DB_MinVlrRate          , 0.04});
+    Add({DB_MaxLoanAcctValMult  , 1.0});
+    Add({DB_MaxLoanDed          , mce_to_next_anniversary});
+    Add({DB_GuarPrefLoanSpread  , 0.0});
+    Add({DB_GuarRegLoanSpread   , 0.04});
+    Add({DB_CurrPrefLoanSpread  , 0.0});
+    Add({DB_CurrRegLoanSpread   , 0.02});
+    Add({DB_FirstLoanMonth      , 0.0});
+    Add({DB_MinPremType         , oe_monthly_deduction});
+    Add({DB_TgtPremType         , oe_modal_nonmec});
+    Add({DB_TgtPremTable        , 10});    // use seven-pay as target
+    Add({DB_TgtPremFixedAtIssue , false});
+    Add({DB_TgtPremIgnoreSubstd , true});
+    Add({DB_MinPmt              , 0.0});
+    Add({DB_NoLapseMinDur       , 0.0});
+    Add({DB_NoLapseMinAge       , 0.0});
+    Add({DB_NoLapseUnratedOnly  , false});
+    Add({DB_NoLapseDboLvlOnly   , false});
+    Add({DB_NoLapseAlwaysActive , false});
+    Add({DB_AllowHoneymoon      , true});
+    Add({DB_AllowExtraAssetComp , true});
+    Add({DB_AllowExtraPremComp  , true});
+    Add({DB_AllowExpRating      , false});
+    Add({DB_AllowExpRating      , true});
+    Add({DB_ExpRatStdDevMult    , 0.0});
+    Add({DB_ExpRatIbnrMult      , 0.0});
+    Add({DB_ExpRatIbnrMult      , 6.0});
+    Add({DB_ExpRatCoiRetention  , 0.0});
+    Add({DB_ExpRatRiskCoiMult   , 0});
+    Add({DB_ExpRatAmortPeriod   , 4.0});
+    Add({DB_LedgerType          , mce_ill_reg});
+    Add({DB_AgeLastOrNearest    , oe_age_last_birthday});
+    Add({DB_MaturityAge         , 100});
+    Add({DB_GroupProxyRateTable , 305});   // 1960 CSG (gender-indistinct)
 
     // 1983 GAM; unisex=male because no unisex table was published.
     double T83Gam[3] = {825, 826, 826,}; // f, m, u
-    z.Add({DB_PartialMortTable, e_number_of_axes, dims311, T83Gam});
+    Add({DB_PartialMortTable, e_number_of_axes, dims311, T83Gam});
 
     // Use alternative policy form name in states beginning with "K".
     std::vector<double> alt_form(e_max_dim_state);
     alt_form[mce_s_KS] = true;
     alt_form[mce_s_KY] = true;
-    z.Add({DB_UsePolicyFormAlt, premium_tax_dimensions, alt_form});
-
-    z.WriteDB(AddDataDir("sample.database"));
+    Add({DB_UsePolicyFormAlt, premium_tax_dimensions, alt_form});
+}
 
-    z.Add({DB_LedgerType          , mce_finra});
-    z.WriteDB(AddDataDir("sample2finra.database"));
+sample2finra::sample2finra()
+{
+    Add({DB_LedgerType          , mce_finra});
+}
 
-    z.Add({DB_LedgerType          , mce_group_private_placement});
-    z.WriteDB(AddDataDir("sample2gpp.database"));
+sample2gpp::sample2gpp()
+{
+    Add({DB_LedgerType          , mce_group_private_placement});
+}
 
-    z.Add({DB_LedgerType          , mce_individual_private_placement});
-    z.WriteDB(AddDataDir("sample2ipp.database"));
+sample2ipp::sample2ipp()
+{
+    Add({DB_LedgerType          , mce_individual_private_placement});
+}
 
+sample2xyz::sample2xyz()
+{
     // Exotica.
-    z.Add({DB_LedgerType          , mce_finra});
+    Add({DB_LedgerType          , mce_finra});
     // Certain group-quote columns are available only when these two
     // entities are 'true':
-    z.Add({DB_SplitMinPrem        , true});
-    z.Add({DB_TermIsNotRider      , true});
+    Add({DB_SplitMinPrem        , true});
+    Add({DB_TermIsNotRider      , true});
     // Certain illustration columns are controlled by this:
-    z.Add({DB_ErNotionallyPaysTerm, true});
-    z.Add({DB_TxCallsGuarUwSubstd , true});
+    Add({DB_ErNotionallyPaysTerm, true});
+    Add({DB_TxCallsGuarUwSubstd , true});
     // This fixed loan rate varies by duration.
     int dims_1111113[e_number_of_axes] = {1, 1, 1, 1, 1, 1, 3};
     double loanrate[3] = {0.06, 0.05, 0.04};
-    z.Add({DB_FixedLoanRate, e_number_of_axes, dims_1111113, loanrate});
+    Add({DB_FixedLoanRate, e_number_of_axes, dims_1111113, loanrate});
     double cv_enh[3] = {0.10, 0.05, 0.00};
-    z.Add({DB_CashValueEnhMult, e_number_of_axes, dims_1111113, cv_enh});
-    z.WriteDB(AddDataDir("sample2xyz.database"));
+    Add({DB_CashValueEnhMult, e_number_of_axes, dims_1111113, cv_enh});
+}
+
+void DBDictionary::write_database_files()
+{
+    sample      ().WriteDB(AddDataDir("sample.database"));
+    sample2finra().WriteDB(AddDataDir("sample2finra.database"));
+    sample2gpp  ().WriteDB(AddDataDir("sample2gpp.database"));
+    sample2ipp  ().WriteDB(AddDataDir("sample2ipp.database"));
+    sample2xyz  ().WriteDB(AddDataDir("sample2xyz.database"));
 }
 
 /// Initialize the built-in database for the antediluvian branch.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]