lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master be19add 4/6: Block all other payments for gua


From: Greg Chicares
Subject: [lmi-commits] [lmi] master be19add 4/6: Block all other payments for guaranteed-premium solves
Date: Thu, 24 Jun 2021 20:09:16 -0400 (EDT)

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

    Block all other payments for guaranteed-premium solves
---
 ihs_avsolve.cpp | 14 ++++++++++++--
 outlay.cpp      | 15 +++++++++++++++
 outlay.hpp      |  4 ++++
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/ihs_avsolve.cpp b/ihs_avsolve.cpp
index d74365f..cc7439c 100644
--- a/ihs_avsolve.cpp
+++ b/ihs_avsolve.cpp
@@ -306,10 +306,18 @@ void AccountValue::SolveSetWD(currency a_CandidateValue)
 
 /// Ascertain guaranteed premium for NAIC illustration reg.
 ///
-/// Zero out all payments [not yet], and solve for level ee premium
+/// Zero out all payments, even 1035s, and solve for level ee premium
 /// to keep the contract in force until normal maturity. (It would be
 /// equally good to solve for er premium--the choice is arbitrary.)
 ///
+/// A large dumpin or 1035 exchange might suffice to keep the contract
+/// in force until normal maturity. However, showing the guaranteed
+/// premium as zero on a new-business illustration could be construed
+/// as implying that no premium at all is required, not even the lump
+/// sum (which has not been received prior to issue); yet for inforce
+/// contracts, the lump sum has been booked, and may result in a
+/// guaranteed (future) premium of zero.
+///
 /// This is necessarily the last step in producing an illustration,
 /// so that the guaranteed premium reflects any parameters that have
 /// been adjusted dynamically. It's okay that it overwrites payments
@@ -319,7 +327,9 @@ void AccountValue::SolveSetWD(currency a_CandidateValue)
 currency AccountValue::SolveGuarPremium()
 {
     Outlay_->set_er_modal_premiums(C0, 0, BasicValues::GetLength());
-    // other payments, like 1035 exchanges, to be zeroed out soon
+    Outlay_->block_dumpin              ();
+    Outlay_->block_external_1035_amount();
+    Outlay_->block_internal_1035_amount();
 
     Solving               = true;
     SolvingForGuarPremium = true;
diff --git a/outlay.cpp b/outlay.cpp
index 4d42eba..530a001 100644
--- a/outlay.cpp
+++ b/outlay.cpp
@@ -49,6 +49,21 @@ modal_outlay::modal_outlay
 {
 }
 
+void modal_outlay::block_dumpin()
+{
+    dumpin_ = C0;
+}
+
+void modal_outlay::block_external_1035_amount()
+{
+    external_1035_amount_ = C0;
+}
+
+void modal_outlay::block_internal_1035_amount()
+{
+    internal_1035_amount_ = C0;
+}
+
 void modal_outlay::set_ee_modal_premiums(currency z, int from_year, int 
to_year)
 {
     z = round_gross_premium_.c(z); // CURRENCY !! already rounded?
diff --git a/outlay.hpp b/outlay.hpp
index fac512c..5fc0c2c 100644
--- a/outlay.hpp
+++ b/outlay.hpp
@@ -59,6 +59,10 @@ class modal_outlay final
     modal_outlay(modal_outlay const&) = delete;
     modal_outlay& operator=(modal_outlay const&) = delete;
 
+    void block_dumpin              ();
+    void block_external_1035_amount();
+    void block_internal_1035_amount();
+
     void set_ee_modal_premiums(currency z, int from_year, int to_year);
     void set_er_modal_premiums(currency z, int from_year, int to_year);
     void set_withdrawals      (currency z, int from_year, int to_year);



reply via email to

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