lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master 143d4c8 1/2: Begin to separate positive from


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 143d4c8 1/2: Begin to separate positive from "negative" surrender charges
Date: Wed, 31 Oct 2018 08:56:18 -0400 (EDT)

branch: master
commit 143d4c85473b36dc0432b96847f07be352afecea
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Begin to separate positive from "negative" surrender charges
---
 account_value.hpp |  6 ++++--
 ihs_acctval.cpp   | 24 ++++++++++++++++++++----
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/account_value.hpp b/account_value.hpp
index 4e3631f..f774f81 100644
--- a/account_value.hpp
+++ b/account_value.hpp
@@ -282,7 +282,9 @@ class LMI_SO AccountValue
     double minimum_specified_amount(bool issuing_now, bool term_rider) const;
     void   ChangeSpecAmtBy         (double delta);
     void   ChangeSupplAmtBy        (double delta);
-    double SurrChg                 ();
+
+    double SurrChg                 () const;
+    double CSVBoost                () const;
 
     double MinInitDumpin() const;
     double MinInitPrem() const;
@@ -611,7 +613,7 @@ class LMI_SO AccountValue
     std::vector<double> OverridingLoan;
     std::vector<double> OverridingWD;
 
-    std::vector<double> SurrChg_;
+    std::vector<double> SurrChg_; // Of uncertain utility.
 };
 
 //============================================================================
diff --git a/ihs_acctval.cpp b/ihs_acctval.cpp
index efa321f..eeeaec6 100644
--- a/ihs_acctval.cpp
+++ b/ihs_acctval.cpp
@@ -1196,11 +1196,27 @@ void AccountValue::set_list_bill_premium()
 ///
 /// SOMEDAY !! Table support and UL model reg formulas should be added.
 
-double AccountValue::SurrChg()
+double AccountValue::SurrChg() const
 {
-    double const x = CashValueEnhMult[Year];
-    double const y = yare_input_.CashValueEnhancementRate[Year];
-    return SurrChg_[Year] - (x + y) * std::max(0.0, TotalAccountValue());
+    LMI_ASSERT(0.0 <= SurrChg_[Year]);
+    // For the nonce, CSVBoost() is netted against surrender charge.
+    // This class's implementation should be revised to distinguish
+    // these additive and subtractive components of CSV.
+    return SurrChg_[Year] - CSVBoost();
+}
+
+/// Cash value augmentation--like a negative surrender charge.
+///
+/// Probably the input field should be expunged.
+
+double AccountValue::CSVBoost() const
+{
+    double const z =
+          CashValueEnhMult[Year]
+        + yare_input_.CashValueEnhancementRate[Year]
+        ;
+    LMI_ASSERT(0.0 <= z);
+    return z * std::max(0.0, TotalAccountValue());
 }
 
 //============================================================================



reply via email to

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