[Top][All Lists]
[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]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5393] Improve layout and documentation, marking some taxation issues,
Greg Chicares <=