lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master d018628 5/6: Do guaranteed-premium solves in


From: Greg Chicares
Subject: [lmi-commits] [lmi] master d018628 5/6: Do guaranteed-premium solves in first year only [276]
Date: Thu, 24 Jun 2021 20:09:17 -0400 (EDT)

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

    Do guaranteed-premium solves in first year only [276]
    
    If the first anniversary has already been reached, this costly solve is
    not required, and not performing it reduces run time dramatically.
    
    Removed an old defect marker. As this commit and the last few preceding
    it explain, guaranteed premium may legitimately be zero.
---
 ihs_acctval.cpp | 28 ++++++++++++++++++++++++----
 ihs_avsolve.cpp | 18 +++++++++++-------
 2 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/ihs_acctval.cpp b/ihs_acctval.cpp
index 6cf09ea..16d8695 100644
--- a/ihs_acctval.cpp
+++ b/ihs_acctval.cpp
@@ -239,13 +239,33 @@ Then run other bases.
     FinalizeLifeAllBases();
 }
 
-//============================================================================
-// TODO ?? Perhaps commutation functions could be used to speed up
-// this rather expensive function.
+/// Guaranteed premium for NAIC illustration reg, section 7B(2).
+///
+/// Section 7B(2) requires "basic" illustrations to show "the premium
+/// outlay that must be paid to guarantee coverage for the term of the
+/// contract".
+///
+/// Section 4H(1) distinguishes "basic" from "in force" illustrations;
+/// the latter category applies when the contract has been "in force
+/// for one year or more". Thus, an illustration depicting values six
+/// months after issue is still "basic"; in normal industry parlance,
+/// it's an inforce illustration, but it's not "in force" for the
+/// purpose of complying with this regulation.
+///
+/// Section 10C says "in force" illustrations must comply with
+///   "Section 6A, 6B, 7A and 7E"
+/// which excludes 7B.
+///
+/// Therefore, this premium must be calculated only during the first
+/// year, and of course only for contracts subject to this regulation.
+///
+/// TODO ?? Perhaps commutation functions could be used to speed up
+/// this rather expensive function.
+
 void AccountValue::SetGuarPrem()
 {
     GuarPremium = C0;
-    if(BasicValues::IsSubjectToIllustrationReg())
+    if(BasicValues::IsSubjectToIllustrationReg() && 0 == InforceYear)
         {
         GuarPremium = SolveGuarPremium();
         }
diff --git a/ihs_avsolve.cpp b/ihs_avsolve.cpp
index cc7439c..67d41a9 100644
--- a/ihs_avsolve.cpp
+++ b/ihs_avsolve.cpp
@@ -334,8 +334,7 @@ currency AccountValue::SolveGuarPremium()
     Solving               = true;
     SolvingForGuarPremium = true;
 
-    // Run the solve using guaranteed assumptions.
-    currency guar_premium = Solve
+    return Solve
         (mce_solve_ee_prem
         ,0
         ,BasicValues::GetLength()
@@ -345,8 +344,6 @@ currency AccountValue::SolveGuarPremium()
         ,mce_gen_guar
         ,mce_sep_full
         );
-
-    return guar_premium;
 }
 
 currency AccountValue::Solve
@@ -490,11 +487,18 @@ currency AccountValue::Solve
         case root_not_bracketed:
             {
             LMI_ASSERT(C0 == solution_cents);
-            // Don't want this firing continually in census runs.
-            if(!SolvingForGuarPremium)
+            if(SolvingForGuarPremium)
+                {
+                // This solve should be done only in the first year.
+                LMI_ASSERT(0 == InforceYear);
+                // A solve for guaranteed premium can legitimately
+                // yield zero, when the contract is at least one day
+                // old and a large-enough initial premium has already
+                // been booked. No warning is wanted in this case.
+                }
+            else
                 {
                 warning() << "Solution not found: using zero instead." << 
LMI_FLUSH;
-                // TODO ?? What can we do when no solution exists for guar 
prem?
                 }
             }
             break;



reply via email to

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