lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [5393] Improve layout and documentation, marking some taxa


From: Greg Chicares
Subject: [lmi-commits] [5393] Improve layout and documentation, marking some taxation issues
Date: Wed, 08 Feb 2012 14:53:54 +0000

Revision: 5393
          http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5393
Author:   chicares
Date:     2012-02-08 14:53:53 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
Improve layout and documentation, marking some taxation issues

Modified Paths:
--------------
    lmi/trunk/ihs_acctval.cpp
    lmi/trunk/ihs_avmly.cpp

Modified: lmi/trunk/ihs_acctval.cpp
===================================================================
--- lmi/trunk/ihs_acctval.cpp   2012-02-06 13:42:46 UTC (rev 5392)
+++ lmi/trunk/ihs_acctval.cpp   2012-02-08 14:53:53 UTC (rev 5393)
@@ -276,9 +276,10 @@
     double z = 0.0;
 
     // TODO ?? Normally, running on the current basis determines the
-    // overriding values for all components of outlay--premiums,
-    // loans, and withdrawals. For a solve on any basis other than
-    // current, the overriding values could be determined two ways:
+    // overriding values for all components of outlay--e.g., premiums,
+    // forceouts, loans, and withdrawals. For a solve on any basis
+    // other than current, the overriding values could be determined
+    // in two ways:
     //
     // (1) on the current basis--but then the solve won't be right;
     //
@@ -429,8 +430,10 @@
     InvariantValues().Init(this);
 
     OldDBOpt = InvariantValues().DBOpt[0].value();
+    // TAXATION !! 'OldSA' and 'OldDB' need to be distinguished for 7702 and 
7702A,
+    // with inclusion of term dependent on 'TermIsDbFor7702' and 
'TermIsDbFor7702A'.
     OldSA = InvariantValues().SpecAmt[0] + InvariantValues().TermSpecAmt[0];
-    // TODO ?? Shouldn't we increase initial SA if contract in corridor at 
issue?
+    // TODO ?? TAXATION !! Shouldn't we increase initial SA if contract in 
corridor at issue?
     OldDB = OldSA;
 
     SurrChg_.assign(BasicValues::GetLength(), 0.0);
@@ -461,6 +464,8 @@
         );
     // It is at best superfluous to do this for every basis.
     // TAXATION !! Don't do that then.
+    // TAXATION !! This assumes the term rider can be treated as death benefit;
+    // use 'TermIsDbFor7702'.
     Irc7702_->Initialize7702
         (InvariantValues().SpecAmt[0] + InvariantValues().TermSpecAmt[0]
         ,InvariantValues().SpecAmt[0] + InvariantValues().TermSpecAmt[0]
@@ -506,7 +511,7 @@
         {
         // No need to initialize 'pmts_7702a' in this case.
         // TAXATION !! This assumes the term rider can be treated as death 
benefit.
-        // TAXATION !! DATABASE !! That should be a database flag.
+        // TAXATION !! DATABASE !! That should be a database flag. Wait...it 
already is.
         bfts_7702a.push_back
             (   InvariantValues().SpecAmt[0]
             +   InvariantValues().TermSpecAmt[0]
@@ -595,7 +600,7 @@
 {
     // These inforce things belong in input struct.
     // TODO ?? The list is not complete; others will be required:
-    // payment history; surrender charges; DCV history? TAXATION !! Resolve 
this.
+    // payment history; surrender charges; DCV history? TAXATION !! INPUT !! 
Resolve this.
     InforceYear                 = yare_input_.InforceYear                    ;
     InforceMonth                = yare_input_.InforceMonth                   ;
     InforceAVGenAcct            = yare_input_.InforceGeneralAccountValue     ;
@@ -683,7 +688,7 @@
 
     // Assume by default that the policy never lapses or becomes a MEC,
     // so that the lapse and MEC durations are the last possible month.
-    // TODO ?? Last possible month? Why? In that month, it doesn't quite
+    // TODO ?? TAXATION !! Last possible month? Why? In that month, it doesn't 
quite
     // lapse, and it's certainly wrong to assume it becomes a MEC then.
     ItLapsed                    = false;
     VariantValues().LapseMonth  = 11;
@@ -1355,7 +1360,7 @@
         InvariantValues().EeGrossPmt[Year]  = 0.0;
         InvariantValues().ErGrossPmt[Year]  = 0.0;
 
-        // TODO ?? This is a temporary workaround until we do it right.
+        // TODO ?? TAXATION !! This is a temporary workaround until we do it 
right.
         // Forceouts should be a distinct component, passed separately
         // to ledger values. Probably we should treat 1035 exchanges
         // and NAAR 'forceouts' the same way.

Modified: lmi/trunk/ihs_avmly.cpp
===================================================================
--- lmi/trunk/ihs_avmly.cpp     2012-02-06 13:42:46 UTC (rev 5392)
+++ lmi/trunk/ihs_avmly.cpp     2012-02-08 14:53:53 UTC (rev 5393)
@@ -129,6 +129,8 @@
         ,DBReflectingCorr + TermDB // DB7702A
         ,OldDB // prior_db_7702A
         ,DBReflectingCorr == DBIgnoringCorr
+        // TAXATION !! This assumes the term rider can be treated as death 
benefit;
+        // use 'TermIsDbFor7702A'.
         ,ActualSpecAmt + TermSpecAmt
         ,OldSA // prior_sa_7702A
         ,CashValueFor7702()
@@ -137,7 +139,7 @@
     NetPmts[Month]   = 0.0; // TODO ?? expunge as being unnecessary
     GrossPmts[Month] = 0.0; // TODO ?? expunge as being unnecessary
     TxExch1035();
-    // TODO ?? Is this where spec amt should be increased by GPT?
+    // TODO ?? TAXATION !! Is this where spec amt should be increased by GPT?
 
     double kludge_account_value = std::max(TotalAccountValue(), 
HoneymoonValue);
     if(0 == Year && 0 == Month)
@@ -555,7 +557,7 @@
     // Policy issue date is always a modal payment date.
     GrossPmts[Month] = External1035Amount + Internal1035Amount;
 
-// TODO ?? This looks like a good idea, but it would prevent the
+// TODO ?? TAXATION !! This looks like a good idea, but it would prevent the
 // initial seven-pay premium from being set.
 //    if(0.0 == GrossPmts[Month])
 //        {
@@ -615,6 +617,8 @@
     Irc7702A_->Update1035Exch7702A
         (Dcv
         ,NetPmts[Month]
+        // TAXATION !! This assumes the term rider can be treated as death 
benefit;
+        // use 'TermIsDbFor7702A'.
         ,ActualSpecAmt + TermSpecAmt
 //        ,DBReflectingCorr + TermDB // TAXATION !! Alternate if 7702A benefit 
is DB?
         );
@@ -853,11 +857,11 @@
 //============================================================================
 void AccountValue::InitializeMonth()
 {
-    // TODO ?? GPT--perform only if current basis?
+    // TODO ?? TAXATION !! GPT--perform only if current basis?
     TxSetDeathBft();
     TxSetTermAmt();
 
-// TODO ?? Resolve this issue.
+// TODO ?? TAXATION !! Resolve this issue.
 /* Jacob--you said: <jacob>
     // It seems that these calls cause problems if
     // we have both SA and DBO change at the same
@@ -887,6 +891,8 @@
     sales_load_       = 0.0;
     premium_tax_load_ = 0.0;
     dac_tax_load_     = 0.0;
+    // TAXATION !! 'OldSA' and 'OldDB' need to be distinguished for 7702 and 
7702A,
+    // with inclusion of term dependent on 'TermIsDbFor7702' and 
'TermIsDbFor7702A'.
     OldSA = ActualSpecAmt + TermSpecAmt;
     OldDB = DBReflectingCorr + TermDB;
 
@@ -1076,7 +1082,7 @@
 //============================================================================
 void AccountValue::TxTestGPT()
 {
-/* TODO ?? Is is sufficient to calculate forceouts on curr basis only?
+/* TODO ?? TAXATION !! Is is sufficient to calculate forceouts on curr basis 
only?
 100000 SA
  30000 AV curr
  20000 AV guar
@@ -1103,7 +1109,7 @@
     // DB option.
     //
     // Illustrations allow no adjustable events at issue.
-    // TODO ?? If this assumption is not valid, then OldSA, OldDB, and
+    // TODO ?? TAXATION !! If this assumption is not valid, then OldSA, OldDB, 
and
     // OldDBOpt need to be initialized more carefully.
     if(0 == Year && 0 == Month)
         {
@@ -1128,7 +1134,7 @@
     // effect cannot be combined with other adjustable events because
     // the premium in question must first be tested against the
     // guideline premium limit. We should probably ignore any effect
-    // of ROP premium unless a forceout is required. TODO ?? Confirm this.
+    // of ROP premium unless a forceout is required. TODO ?? TAXATION !! 
Confirm this.
     //
     TxSetDeathBft();
     TxSetTermAmt();
@@ -1143,6 +1149,8 @@
     mcenum_dbopt_7702 const new_dbopt(effective_dbopt_7702(YearsDBOpt, 
Equiv7702DBO3));
     mcenum_dbopt_7702 const old_dbopt(effective_dbopt_7702(OldDBOpt  , 
Equiv7702DBO3));
     // TAXATION !! This may require revision if DB is treated as the 7702 
benefit.
+    // TAXATION !! This assumes the term rider can be treated as death benefit;
+    // use 'TermIsDbFor7702'.
     bool adj_event =
             (
                 !materially_equal(OldSA, ActualSpecAmt + TermSpecAmt)
@@ -1158,6 +1166,8 @@
             (Year
             ,DBReflectingCorr + TermDB
             ,OldDB
+            // TAXATION !! This assumes the term rider can be treated as death 
benefit;
+            // use 'TermIsDbFor7702'.
             ,ActualSpecAmt + TermSpecAmt
             ,OldSA
             ,new_dbopt
@@ -1191,7 +1201,7 @@
 //============================================================================
 // All payments must be made here.
 // Process premium payment reflecting premium load.
-// TODO ?? Contains hooks for guideline premium test; they need to be
+// TODO ?? TAXATION !! Contains hooks for guideline premium test; they need to 
be
 //   fleshed out.
 // Ignores strategies such as pay guideline premium, which are handled
 //   in PerformE[er]PmtStrategy().
@@ -1558,7 +1568,7 @@
 // TODO ?? ActualLoan should be eliminated. It's used only in two functions,
 // one that takes a loan, and one that repays a loan.
 
-    // TODO ?? This idiom seems too cute.
+    // TODO ?? This idiom seems too cute. And it can return -0.0 .
     // Maximum repayment is total debt.
     ActualLoan = -std::min(-RequestedLoan, RegLnBal);
 
@@ -1642,6 +1652,7 @@
     // Total account value is unloaned plus loaned.
     // TODO ?? Should we use CSV here?
     double AV = TotalAccountValue();
+// TAXATION !! Revisit this--it affects 'DB7702A':
 // > TxSetDeathBft() needs to be called every time a new solve-spec amt
 // > is applied to determine the death benefit. But you don't really want to
 // > add the sales load (actually a percent of the sales load) to the AV
@@ -1655,21 +1666,21 @@
         case mce_option1:
             {
             DBIgnoringCorr = ActualSpecAmt;
-            DB7702A = ActualSpecAmt;
+            DB7702A        = ActualSpecAmt;
             }
             break;
         case mce_option2:
             {
             // Negative AV doesn't decrease death benefit.
             DBIgnoringCorr = ActualSpecAmt + std::max(0.0, AV);
-            DB7702A = ActualSpecAmt;
+            DB7702A        = ActualSpecAmt;
             }
             break;
         case mce_rop:
             {
             // SA + sum of premiums less withdrawals, but not < SA.
             DBIgnoringCorr = ActualSpecAmt + std::max(0.0, CumPmts);
-            DB7702A = ActualSpecAmt + std::max(0.0, CumPmts);
+            DB7702A        = ActualSpecAmt + std::max(0.0, CumPmts);
             }
             break;
         default:
@@ -1821,6 +1832,7 @@
 // TODO ?? This doesn't work. We need to reconsider the basic transactions.
 //  double naar_forceout = std::max(0.0, NAAR - MaxNAAR);
 //  process_distribution(naar_forceout);
+// TAXATION !! Should this be handled at the same time as GPT forceouts?
 
     DcvNaar = material_difference
         (std::max(DcvDeathBft, DBIgnoringCorr) * DBDiscountRate[Year]




reply via email to

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