lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master 0e4c210 2/6: Mark experience-rating code for


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 0e4c210 2/6: Mark experience-rating code for expunction
Date: Sun, 31 Jan 2021 17:27:28 -0500 (EST)

branch: master
commit 0e4c2102bf6b4eaee75bc41a180656863279107c
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Mark experience-rating code for expunction
    
    Experience rating affects several parts of lmi; for now, though, marked
    only calculations. This has the effect of changing "NetCOICharge" in the
    ledger to zero, as it always should have been (but wasn't) for cases
    that don't use experience rating, because its definition:
    -    NetCoiCharge = CoiCharge - round_coi_charge().c(retention_charge);
    was "CoiCharge" (untouched) minus a "retention charge" that was
    meaningless in the absence of experience rating.
---
 account_value.hpp | 28 +++++++++++-----------
 group_values.cpp  | 70 ++++++++++++++++++++++++++++++++-----------------------
 ihs_acctval.cpp   | 22 ++++++++++-------
 ihs_avmly.cpp     |  9 +++----
 4 files changed, 73 insertions(+), 56 deletions(-)

diff --git a/account_value.hpp b/account_value.hpp
index c5888cc..ec54b96 100644
--- a/account_value.hpp
+++ b/account_value.hpp
@@ -164,13 +164,13 @@ class LMI_SO AccountValue final
     void   DebugPrint           ();
 
     void   SetClaims();
-    double GetCurtateNetClaimsInforce    () const;
-    double GetCurtateNetCoiChargeInforce () const;
-    void   SetProjectedCoiCharge         ();
-    double GetProjectedCoiChargeInforce  () const;
-    double ApportionNetMortalityReserve(double reserve_per_life_inforce);
-    double experience_rating_amortization_years() const;
-    double ibnr_as_months_of_mortality_charges() const;
+    double GetCurtateNetClaimsInforce    () const; // EXPUNGE
+    double GetCurtateNetCoiChargeInforce () const; // EXPUNGE
+    void   SetProjectedCoiCharge         (); // EXPUNGE
+    double GetProjectedCoiChargeInforce  () const; // EXPUNGE
+    double ApportionNetMortalityReserve(double reserve_per_life_inforce); // 
EXPUNGE
+    double experience_rating_amortization_years() const; // EXPUNGE
+    double ibnr_as_months_of_mortality_charges() const; // EXPUNGE
 
     // To support the notion of an M&E charge that depends on total case
     // assets, we provide these functions, which are designed to be
@@ -183,7 +183,7 @@ class LMI_SO AccountValue final
     currency IncrementBOM
         (int    year
         ,int    month
-        ,double a_case_k_factor
+        ,double a_case_k_factor // EXPUNGE
         );
     // Credit interest and process all subsequent monthly transactions
     void IncrementEOM
@@ -423,7 +423,7 @@ class LMI_SO AccountValue final
     currency NAAR;
     currency CoiCharge;
     currency RiderCharges;
-    currency NetCoiCharge;
+    currency NetCoiCharge; // EXPUNGE
     currency SpecAmtLoadBase;
     double   DacTaxRsv; // CURRENCY !! obsolete--always zero
 
@@ -590,11 +590,11 @@ class LMI_SO AccountValue final
     currency YearsTotalSepAcctLoad;
 
     // For experience rating.
-    double   CoiRetentionRate;
-    double   ExperienceRatingAmortizationYears;
-    double   IbnrAsMonthsOfMortalityCharges;
-    double   NextYearsProjectedCoiCharge;
-    double   YearsTotalNetCoiCharge;
+    double   CoiRetentionRate; // EXPUNGE
+    double   ExperienceRatingAmortizationYears; // EXPUNGE
+    double   IbnrAsMonthsOfMortalityCharges; // EXPUNGE
+    double   NextYearsProjectedCoiCharge; // EXPUNGE
+    double   YearsTotalNetCoiCharge; // EXPUNGE
 
     currency CumulativeSalesLoad;
 
diff --git a/group_values.cpp b/group_values.cpp
index 739b6d2..57f2dd5 100644
--- a/group_values.cpp
+++ b/group_values.cpp
@@ -165,7 +165,7 @@ census_run_result run_census_in_series::operator()
     return result;
 }
 
-/// Illustrations with group experience rating
+/// Illustrations with group experience rating // EXPUNGE
 ///
 /// Mortality profit,
 ///   accumulated (net mortality charges - net claims) - IBNR,
@@ -357,46 +357,50 @@ census_run_result run_census_in_parallel::operator()
             ,progress_meter_mode(emission)
             );
 
-        // Variables to support tiering and experience rating.
+#if 0 // EXPUNGE
+        // Variables to support tiering and experience rating. // EXPUNGE 
[nothing here for tiering]
 
-        double const case_ibnr_months =
+        double const case_ibnr_months = // EXPUNGE
             cell_values.front().ibnr_as_months_of_mortality_charges()
             ;
-        double const case_experience_rating_amortization_years =
+        double const case_experience_rating_amortization_years = // EXPUNGE
             cell_values.front().experience_rating_amortization_years()
             ;
 
-        double case_accum_net_mortchgs = 0.0;
-        double case_accum_net_claims   = 0.0;
-        double case_k_factor = 
cell_values.front().yare_input_.ExperienceRatingInitialKFactor;
+        double case_accum_net_mortchgs = 0.0; // EXPUNGE
+        double case_accum_net_claims   = 0.0; // EXPUNGE
+        double case_k_factor = 
cell_values.front().yare_input_.ExperienceRatingInitialKFactor; // EXPUNGE
 
-        // Experience rating as implemented here uses either a special
+        // Experience rating as implemented here uses either a special // 
EXPUNGE
         // scalar input rate, or the separate-account rate. Those
         // rates as entered might vary across cells, but there must be
         // only one rate: therefore, use the first cell's rate, and
         // extend its last element if it doesn't have enough values.
 
-        std::vector<double> experience_reserve_rate;
+        std::vector<double> experience_reserve_rate; // EXPUNGE
         std::copy
             (cell_values.front().yare_input_.SeparateAccountRate.begin()
             ,cell_values.front().yare_input_.SeparateAccountRate.end()
             ,std::back_inserter(experience_reserve_rate)
             );
         experience_reserve_rate.resize(MaxYr, experience_reserve_rate.back());
-        if(cell_values.front().yare_input_.OverrideExperienceReserveRate)
+        if(cell_values.front().yare_input_.OverrideExperienceReserveRate) // 
EXPUNGE
             {
             experience_reserve_rate.assign
                 (experience_reserve_rate.size()
-                ,cell_values.front().yare_input_.ExperienceReserveRate
+                ,cell_values.front().yare_input_.ExperienceReserveRate // 
EXPUNGE
                 );
             }
+#endif // EXPUNGE
 
         for(int year = first_cell_inforce_year; year < MaxYr; ++year)
             {
-            double experience_reserve_annual_u =
+#if 0 // EXPUNGE
+            double experience_reserve_annual_u = // EXPUNGE
                     1.0
                 +   experience_reserve_rate[year]
                 ;
+#endif // EXPUNGE
 
             for(auto& i : cell_values)
                 {
@@ -433,7 +437,7 @@ census_run_result run_census_in_parallel::operator()
                         }
                     i.Month = month;
                     i.CoordinateCounters();
-                    i.IncrementBOM(year, month, case_k_factor);
+                    i.IncrementBOM(year, month, 0.0); // EXPUNGE 
case_k_factor);
                     assets += i.GetSepAcctAssetsInforce();
                     }
 
@@ -460,9 +464,11 @@ census_run_result run_census_in_parallel::operator()
             // mortality.
 
             double eoy_inforce_lives      = 0.0;
-            double years_net_claims       = 0.0;
-            double years_net_mortchgs     = 0.0;
-            double projected_net_mortchgs = 0.0;
+#if 0 // EXPUNGE
+            double years_net_claims       = 0.0; // EXPUNGE
+            double years_net_mortchgs     = 0.0; // EXPUNGE
+            double projected_net_mortchgs = 0.0; // EXPUNGE
+#endif // EXPUNGE
             for(auto& i : cell_values)
                 {
                 if(i.PrecedesInforceDuration(year, 11))
@@ -470,15 +476,20 @@ census_run_result run_census_in_parallel::operator()
                     continue;
                     }
                 i.SetClaims();
-                i.SetProjectedCoiCharge();
+#if 0 // EXPUNGE
+                i.SetProjectedCoiCharge(); // EXPUNGE
+#endif // EXPUNGE
                 eoy_inforce_lives      += i.InforceLivesEoy();
                 i.IncrementEOY(year);
-                years_net_claims       += i.GetCurtateNetClaimsInforce();
-                years_net_mortchgs     += i.GetCurtateNetCoiChargeInforce();
-                projected_net_mortchgs += i.GetProjectedCoiChargeInforce();
+#if 0 // EXPUNGE
+                years_net_claims       += i.GetCurtateNetClaimsInforce(); // 
EXPUNGE
+                years_net_mortchgs     += i.GetCurtateNetCoiChargeInforce(); 
// EXPUNGE
+                projected_net_mortchgs += i.GetProjectedCoiChargeInforce(); // 
EXPUNGE
+#endif // EXPUNGE
                 }
 
-            // Calculate next year's k factor. Do this only for
+#if 0 // EXPUNGE
+            // Calculate next year's k factor. Do this only for // EXPUNGE
             // current-expense bases, not as a speed optimization,
             // but rather because experience rating on other bases
             // is undefined.
@@ -507,7 +518,7 @@ census_run_result run_census_in_parallel::operator()
             // charge is captured separately for adjusting IBNR, it
             // would be incorrect to add it here.
 
-            if(first_cell_inforce_year == year)
+            if(first_cell_inforce_year == year) // EXPUNGE
                 {
                 case_accum_net_mortchgs += 
cell_values.front().yare_input_.InforceNetExperienceReserve;
                 }
@@ -521,7 +532,7 @@ census_run_result run_census_in_parallel::operator()
             // is summed across cells and asserted materially to
             // equal the original total reserve.
 
-            if
+            if // EXPUNGE
                 (   cell_values.front().yare_input_.UseExperienceRating
                 &&  mce_gen_curr == expense_and_general_account_basis
                 &&  0.0 != eoy_inforce_lives
@@ -531,12 +542,12 @@ census_run_result run_census_in_parallel::operator()
                     {
                     years_net_mortchgs += 
cell_values.front().yare_input_.InforceYtdNetCoiCharge;
                     }
-                double case_ibnr =
+                double case_ibnr = // EXPUNGE
                         years_net_mortchgs
                     *   case_ibnr_months
                     /   12.0
                     ;
-                double case_net_mortality_reserve =
+                double case_net_mortality_reserve = // EXPUNGE
                         case_accum_net_mortchgs
                     -   case_accum_net_claims
                     -   case_ibnr
@@ -560,20 +571,20 @@ census_run_result run_census_in_parallel::operator()
                         );
                     }
 
-                double case_net_mortality_reserve_checksum = 0.0;
+                double case_net_mortality_reserve_checksum = 0.0; // EXPUNGE
                 for(auto& i : cell_values)
                     {
                     if(i.PrecedesInforceDuration(year, 11))
                         {
                         continue;
                         }
-                    case_net_mortality_reserve_checksum +=
-                        i.ApportionNetMortalityReserve
+                    case_net_mortality_reserve_checksum += // EXPUNGE
+                        i.ApportionNetMortalityReserve // EXPUNGE
                             (   case_net_mortality_reserve
                             /   eoy_inforce_lives
                             );
                     }
-                if
+                if // EXPUNGE
                     (!materially_equal
                         (case_net_mortality_reserve
                         ,case_net_mortality_reserve_checksum
@@ -591,6 +602,7 @@ census_run_result run_census_in_parallel::operator()
                         ;
                     }
                 }
+#endif // EXPUNGE
 
             if(!meter->reflect_progress())
                 {
diff --git a/ihs_acctval.cpp b/ihs_acctval.cpp
index bc747de..7c4ddcd 100644
--- a/ihs_acctval.cpp
+++ b/ihs_acctval.cpp
@@ -378,7 +378,7 @@ void AccountValue::RunOneCell(mcenum_run_basis a_Basis)
             }
 
         SetClaims();
-        SetProjectedCoiCharge();
+//      SetProjectedCoiCharge(); // EXPUNGE
         IncrementEOY(year);
         }
 
@@ -670,7 +670,7 @@ void AccountValue::SetInitialValues()
 
     CoiCharge                   = C0;
     RiderCharges                = C0;
-    NetCoiCharge                = C0;
+    NetCoiCharge                = C0; // EXPUNGE
     MlyDed                      = C0;
     CumulativeSalesLoad         = 
round_minutiae().c(yare_input_.InforceCumulativeSalesLoad);
 
@@ -864,7 +864,7 @@ void AccountValue::InitializeYear()
     YearsTotalNetIntCredited    = C0;
     YearsTotalGrossIntCredited  = C0;
     YearsTotalLoanIntAccrued    = C0;
-    YearsTotalNetCoiCharge      = 0.0;
+    YearsTotalNetCoiCharge      = 0.0; // EXPUNGE
     YearsTotalPolicyFee         = C0;
     YearsTotalDacTaxLoad        = 0.0;
     YearsTotalSpecAmtLoad       = C0;
@@ -1110,9 +1110,10 @@ void AccountValue::SetClaims()
         );
 }
 
+#if 0 // EXPUNGE
 //============================================================================
 // Proxy for next year's COI charge, used only for experience rating.
-void AccountValue::SetProjectedCoiCharge()
+void AccountValue::SetProjectedCoiCharge() // EXPUNGE
 {
     if
         (   ItLapsed
@@ -1151,6 +1152,7 @@ void AccountValue::SetProjectedCoiCharge()
         *   next_years_coi_rate
         ;
 }
+#endif // EXPUNGE
 
 /// Post year-end results to ledger.
 ///
@@ -1283,7 +1285,7 @@ void AccountValue::FinalizeYear()
     VariantValues().NetIntCredited    [Year] = 
dblize(YearsTotalNetIntCredited);
     VariantValues().GrossIntCredited  [Year] = 
dblize(YearsTotalGrossIntCredited);
     VariantValues().LoanIntAccrued    [Year] = 
dblize(YearsTotalLoanIntAccrued);
-    VariantValues().NetCOICharge      [Year] = YearsTotalNetCoiCharge         ;
+    VariantValues().NetCOICharge      [Year] = YearsTotalNetCoiCharge         
; // EXPUNGE
     VariantValues().PolicyFee         [Year] = dblize(YearsTotalPolicyFee)    ;
     VariantValues().DacTaxLoad        [Year] = YearsTotalDacTaxLoad           ;
     VariantValues().SpecAmtLoad       [Year] = dblize(YearsTotalSpecAmtLoad)  ;
@@ -1491,8 +1493,9 @@ currency AccountValue::GetSepAcctAssetsInforce() const
     return round_minutiae().c(SepAcctValueAfterDeduction * 
partial_mortality_lx()[Year]);
 }
 
+#if 0 // EXPUNGE
 //============================================================================
-double AccountValue::GetCurtateNetCoiChargeInforce() const
+double AccountValue::GetCurtateNetCoiChargeInforce() const // EXPUNGE
 {
     if
         (   ItLapsed
@@ -1510,7 +1513,7 @@ double AccountValue::GetCurtateNetCoiChargeInforce() const
 }
 
 //============================================================================
-double AccountValue::GetCurtateNetClaimsInforce() const
+double AccountValue::GetCurtateNetClaimsInforce() const // EXPUNGE
 {
     if
         (   ItLapsed
@@ -1528,7 +1531,7 @@ double AccountValue::GetCurtateNetClaimsInforce() const
 }
 
 //============================================================================
-double AccountValue::GetProjectedCoiChargeInforce() const
+double AccountValue::GetProjectedCoiChargeInforce() const // EXPUNGE
 {
     if
         (   ItLapsed
@@ -1554,7 +1557,7 @@ double AccountValue::GetProjectedCoiChargeInforce() const
 // The return value, added across cells, should reproduce the total
 // total reserve at the case level, as the caller may assert.
 //
-double AccountValue::ApportionNetMortalityReserve
+double AccountValue::ApportionNetMortalityReserve // EXPUNGE
     (double reserve_per_life_inforce
     )
 {
@@ -1587,6 +1590,7 @@ double AccountValue::ApportionNetMortalityReserve
 
     return apportioned_reserve * yare_input_.NumberOfIdenticalLives;
 }
+#endif // EXPUNGE
 
 /// Beginning of year inforce lives, reflecting lapses and survivorship.
 
diff --git a/ihs_avmly.cpp b/ihs_avmly.cpp
index b8713ae..9be6163 100644
--- a/ihs_avmly.cpp
+++ b/ihs_avmly.cpp
@@ -1813,7 +1813,8 @@ void AccountValue::TxSetCoiCharge()
     // DCV need not be rounded.
     DcvNaar = std::max(0.0, DcvNaar);
 
-    double retention_charge = 0.0;
+    double retention_charge = 0.0; // EXPUNGE
+stifle_warning_for_unused_value(retention_charge); // EXPUNGE
     double coi_rate = GetBandedCoiRates(GenBasis_, ActualSpecAmt)[Year];
     ActualCoiRate = coi_rate;
 
@@ -1837,11 +1838,11 @@ void AccountValue::TxSetCoiCharge()
                 )
             );
         double retention_rate = round_coi_rate()(coi_rate * CoiRetentionRate);
-        retention_charge = NAAR * retention_rate;
+        retention_charge = 0.0 * NAAR * retention_rate; // EXPUNGE
         }
 
     CoiCharge    = round_coi_charge().c(NAAR * ActualCoiRate);
-    NetCoiCharge = CoiCharge - round_coi_charge().c(retention_charge);
+//  NetCoiCharge = CoiCharge - round_coi_charge().c(retention_charge); // 
EXPUNGE
     YearsTotalCoiCharge += CoiCharge;
 
     // DCV need not be rounded.
@@ -1980,7 +1981,7 @@ void AccountValue::TxDoMlyDed()
     // determined.
     MlyDed += MonthsPolicyFees + SpecAmtLoad;
 
-    YearsTotalNetCoiCharge += dblize(NetCoiCharge);
+//  YearsTotalNetCoiCharge += dblize(NetCoiCharge); // EXPUNGE
 
     SepAcctValueAfterDeduction = AVSepAcct;
 }



reply via email to

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