lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [6198] Convert optionally when term rider ends


From: Greg Chicares
Subject: [lmi-commits] [6198] Convert optionally when term rider ends
Date: Sun, 31 May 2015 14:43:34 +0000

Revision: 6198
          http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=6198
Author:   chicares
Date:     2015-05-31 14:43:33 +0000 (Sun, 31 May 2015)
Log Message:
-----------
Convert optionally when term rider ends

Modified Paths:
--------------
    lmi/trunk/account_value.hpp
    lmi/trunk/ihs_avmly.cpp

Modified: lmi/trunk/account_value.hpp
===================================================================
--- lmi/trunk/account_value.hpp 2015-05-31 02:59:14 UTC (rev 6197)
+++ lmi/trunk/account_value.hpp 2015-05-31 14:43:33 UTC (rev 6198)
@@ -297,7 +297,7 @@
     void   DebugPrintInit();
     void   DebugEndBasis();
 
-    void   EndTermRider();
+    void   EndTermRider(bool convert);
 
     void   CoordinateCounters();
 

Modified: lmi/trunk/ihs_avmly.cpp
===================================================================
--- lmi/trunk/ihs_avmly.cpp     2015-05-31 02:59:14 UTC (rev 6197)
+++ lmi/trunk/ihs_avmly.cpp     2015-05-31 14:43:33 UTC (rev 6198)
@@ -49,10 +49,9 @@
 #include "stratified_algorithms.hpp"
 #include "stratified_charges.hpp"
 
-#include <cmath>   // std::pow()
+#include <algorithm>                    // std::min(), std::max()
+#include <cmath>                        // std::pow()
 #include <limits>
-#include <stdexcept>
-#include <utility>
 
 // Each month, process all transactions in order.
 
@@ -789,7 +788,7 @@
         TermSpecAmt += delta * ProportionAppliedToTerm;
         if(TermSpecAmt < 0.0)
             {
-            EndTermRider();
+            EndTermRider(false);
             }
         else
             {
@@ -1720,7 +1719,7 @@
         && (TermForcedConvAge <= Year + BasicValues::GetIssueAge())
         )
         {
-        EndTermRider();
+        EndTermRider(true);
         return;
         }
 
@@ -1728,9 +1727,22 @@
     TermDB = round_death_benefit()(TermDB);
 }
 
-//============================================================================
-// Terminate the term rider
-void AccountValue::EndTermRider()
+/// Terminate the term rider, optionally converting it to base.
+///
+/// Conversion may be required in a state that imposes an age limit
+/// (e.g., attained age seventy) on term riders.
+///
+/// For at least one supported product, the term rider terminates if
+/// the AV is insufficient to pay the term charge. In that case:
+///  - the base policy might in principle continue for some time; and
+///  - the admin system would keep the term coverage in force until
+/// the next monthiversary by grace; therefore, it would not recognize
+/// a material change or adjustment event until the following month.
+/// Illustrations recognize the tax event immediately: they show no
+/// gratis continuation of benefits in the hope that charges may later
+/// be recouped.
+
+void AccountValue::EndTermRider(bool convert)
 {
     if(!TermRiderActive)
         {
@@ -1748,7 +1760,10 @@
     // the anniversary month only.
 
     TermRiderActive = false;
-    ChangeSpecAmtBy(TermSpecAmt);
+    if(convert)
+        {
+        ChangeSpecAmtBy(TermSpecAmt);
+        }
     TermSpecAmt = 0.0;
     TermDB = 0.0;
     // Carry the new term spec amt forward into all future years.
@@ -1917,9 +1932,12 @@
 {
     // Subtract mortality and rider deductions from unloaned account value.
     // Policy fee was already subtracted in NAAR calculation.
-    if(TermRiderActive && (AVGenAcct + AVSepAcct - CoiCharge) < TermCharge)
+    if(TermRiderActive && TermCanLapse && (AVGenAcct + AVSepAcct - CoiCharge) 
< TermCharge)
         {
-        EndTermRider();
+// Probably 'false' is intended. This can be changed later when it is
+// convenient to validate its effect on system testing.
+//        EndTermRider(false);
+        EndTermRider(true);
         TermCharge = 0.0;
         }
 




reply via email to

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