[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());
}
//============================================================================