lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master f2a0fce 6/6: Fix defect introduced 20050114T1


From: Greg Chicares
Subject: [lmi-commits] [lmi] master f2a0fce 6/6: Fix defect introduced 20050114T1947Z: wrong DCV NAAR discount
Date: Tue, 16 Mar 2021 20:20:11 -0400 (EDT)

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

    Fix defect introduced 20050114T1947Z: wrong DCV NAAR discount
    
    The DCV death benefit must be discounted at a rate that takes the
    statutory rate into account. The SOA textbook (on page 52 of the first
    edition) offers a questionable rationale for treating it as "not an
    interest rate guaranteed on issue of the contract" (i.e., not subject
    to the rule in ยง7702(b)(2)(A)), yet it is clearly an interest rate,
    and it is clearly guaranteed in the contract.
    
    Although this defect was introduced 20050114T1947Z into CVS, it comes
    from an original file predating the lmi epoch.
---
 basic_values.hpp | 1 +
 ihs_avmly.cpp    | 4 ++--
 ihs_basicval.cpp | 4 ++++
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/basic_values.hpp b/basic_values.hpp
index 637bde8..13d2381 100644
--- a/basic_values.hpp
+++ b/basic_values.hpp
@@ -369,6 +369,7 @@ class LMI_SO BasicValues
     bool                    AllowSAIncr;
     bool                    NoLapseAlwaysActive;
     std::vector<double>     DBDiscountRate;
+    std::vector<double>     DcvDBDiscountRate;
 
     bool                    UseUnusualCOIBanding;
 
diff --git a/ihs_avmly.cpp b/ihs_avmly.cpp
index cd94fd6..9b8dc7c 100644
--- a/ihs_avmly.cpp
+++ b/ihs_avmly.cpp
@@ -1783,7 +1783,7 @@ void AccountValue::TxSetCoiCharge()
 // TAXATION !! Should this be handled at the same time as GPT forceouts?
 
     DcvNaar = round_naar().c
-        ( std::max(DcvDeathBft, DBIgnoringCorr) * DBDiscountRate[Year]
+        ( std::max(DcvDeathBft, DBIgnoringCorr) * DcvDBDiscountRate[Year]
         - dblize(std::max(C0, Dcv))
         );
     DcvNaar = std::max(C0, DcvNaar);
@@ -1837,7 +1837,7 @@ void AccountValue::TxSetRiderDed()
         // TAXATION !! Use a distinct discount rate for taxation? Or
         // the policy's rate, as used for DcvNaar?
         DcvTermCharge = round_rider_charges().c
-            (YearsDcvCoiRate * TermDB * DBDiscountRate[Year]
+            (YearsDcvCoiRate * TermDB * DcvDBDiscountRate[Year]
             );
         }
 
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 82f7453..1b94fc1 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -600,6 +600,10 @@ void BasicValues::SetPermanentInvariants()
     LMI_ASSERT(!contains(DBDiscountRate, -1.0));
     assign(DBDiscountRate, 1.0 / (1.0 + DBDiscountRate));
 
+    DcvDBDiscountRate = i7702_->ig_usual();
+    LMI_ASSERT(!contains(DcvDBDiscountRate, -1.0));
+    assign(DcvDBDiscountRate, 1.0 / (1.0 + DcvDBDiscountRate));
+
     database().query_into(DB_DynamicMandE         , MandEIsDynamic);
     database().query_into(DB_DynamicSepAcctLoad   , SepAcctLoadIsDynamic);
 



reply via email to

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