[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [5171] Eradicate a SD premium-tax calculation superseded 2
From: |
Greg Chicares |
Subject: |
[lmi-commits] [5171] Eradicate a SD premium-tax calculation superseded 2008-02-19 |
Date: |
Fri, 13 May 2011 17:01:43 +0000 |
Revision: 5171
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5171
Author: chicares
Date: 2011-05-13 17:01:42 +0000 (Fri, 13 May 2011)
Log Message:
-----------
Eradicate a SD premium-tax calculation superseded 2008-02-19
Modified Paths:
--------------
lmi/trunk/ChangeLog
lmi/trunk/account_value.hpp
lmi/trunk/accountvalue.cpp
lmi/trunk/basic_values.hpp
lmi/trunk/dbdict.cpp
lmi/trunk/dbnames.xpp
lmi/trunk/group_values.cpp
lmi/trunk/ihs_acctval.cpp
lmi/trunk/ihs_avdebug.cpp
lmi/trunk/ihs_avmly.cpp
lmi/trunk/ihs_basicval.cpp
Modified: lmi/trunk/ChangeLog
===================================================================
--- lmi/trunk/ChangeLog 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/ChangeLog 2011-05-13 17:01:42 UTC (rev 5171)
@@ -27746,3 +27746,43 @@
Fix defect introduced 20100721T2315Z: StateOfDomicile_ was used before
its value was set in the proper context.
+20110509T1252Z <address@hidden> [654]
+
+ ihs_acctval.cpp
+ ihs_avmly.cpp
+Remove a marker for a defect already resolved.
+
+20110509T1257Z <address@hidden> [653]
+
+ ihs_acctval.cpp
+Remove a marker for a defect already resolved.
+
+20110512T2026Z <address@hidden> [653]
+
+ stratified_charges.cpp
+Document tiered UT premium tax.
+
+20110513T1045Z <address@hidden> [653]
+
+ ihs_avmly.cpp
+Recognize reciprocal premium-tax nonretaliation.
+
+20110513T1613Z <address@hidden> [653]
+
+ ihs_avmly.cpp
+Prepare to simplify.
+
+20110513T1701Z <address@hidden> [651]
+
+ account_value.hpp
+ accountvalue.cpp
+ basic_values.hpp
+ dbdict.cpp
+ dbnames.xpp
+ group_values.cpp
+ ihs_acctval.cpp
+ ihs_avdebug.cpp
+ ihs_avmly.cpp
+ ihs_basicval.cpp
+Eradicate a SD premium-tax calculation superseded 2008-02-19.
+
Modified: lmi/trunk/account_value.hpp
===================================================================
--- lmi/trunk/account_value.hpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/account_value.hpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -155,7 +155,6 @@
void SolveSetWD (double a_CandidateValue);
void DebugPrint ();
- void DebugRestart (std::string const& reason);
void SetClaims();
double GetCurtateNetClaimsInforce () const;
@@ -168,9 +167,6 @@
double experience_rating_amortization_years() const;
double ibnr_as_months_of_mortality_charges() const;
- void GuessWhetherFirstYearPremiumExceedsRetaliationLimit();
- bool TestWhetherFirstYearPremiumExceededRetaliationLimit();
-
// To support the notion of an M&E charge that depends on total case
// assets, we provide these functions, which are designed to be
// called by a distant module that has a pointer to an object of this
@@ -305,18 +301,6 @@
void CoordinateCounters();
- // First-year premium determines whether SD waives premium tax
- // retaliation, although SD isn't hardcoded anywhere and this
- // is a generic rule expressed in data files. This function tells
- // us up front whether the minimum premium for tiering may be met.
- // Used with 'FirstYearPremiumExceedsRetaliationLimit'. This
- // is a naive lookahead: GPT limitations or MEC avoidance may
- // reduce the premium below the threshold, so it's useful only as
- // a hint. Premium exempt from premium tax (e.g. internal 1035
- // exchanges when the database makes them so exempt) is excluded.
- // SOMEDAY !! Expunge this because SD 10-44-2(2) repealed it.
- double TaxableFirstYearPlannedPremium() const;
-
// Detailed monthly trace.
std::string DebugFilename;
std::ofstream DebugStream;
@@ -602,7 +586,6 @@
double YearsTotalNetCoiCharge;
double CumulativeSalesLoad;
- bool FirstYearPremiumExceedsRetaliationLimit;
// Illustrated outlay must be the same for current, guaranteed,
// and all other bases. Outlay components are set on whichever
Modified: lmi/trunk/accountvalue.cpp
===================================================================
--- lmi/trunk/accountvalue.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/accountvalue.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -1040,8 +1040,6 @@
{return;}
void AccountValue::DebugPrintInit()
{return;}
-void AccountValue::DebugRestart(std::string const&)
- {return;}
void AccountValue::FinalizeLife(mcenum_run_basis)
{return;}
void AccountValue::FinalizeLifeAllBases()
@@ -1054,8 +1052,6 @@
{return 0.0;}
double AccountValue::GetSepAcctAssetsInforce() const
{return 0.0;}
-void AccountValue::GuessWhetherFirstYearPremiumExceedsRetaliationLimit()
- {return;}
double AccountValue::IncrementBOM(int, int, double)
{return 0.0;}
void AccountValue::IncrementEOM(int, int, double, double)
@@ -1076,6 +1072,4 @@
{return;}
void AccountValue::SetProjectedCoiCharge()
{return;}
-bool AccountValue::TestWhetherFirstYearPremiumExceededRetaliationLimit()
- {return false;}
Modified: lmi/trunk/basic_values.hpp
===================================================================
--- lmi/trunk/basic_values.hpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/basic_values.hpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -370,7 +370,6 @@
std::vector<double> TieredMEBands;
std::vector<double> TieredMECharges;
- double FirstYearPremiumRetaliationLimit_;
bool PremiumTaxLoadIsTieredInStateOfDomicile_;
bool PremiumTaxLoadIsTieredInPremiumTaxState_;
Modified: lmi/trunk/dbdict.cpp
===================================================================
--- lmi/trunk/dbdict.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/dbdict.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -519,40 +519,6 @@
Add(database_entity(DB_DynSepAcctLoadLimit , dbl_inf));
Add(database_entity(DB_AdbLimit , dbl_inf));
Add(database_entity(DB_ExpSpecAmtLimit , dbl_inf));
-
- // SD Chapter 260 (HB 1200), signed 2008-02-19, amended 58-6-70
- // by removing the former million-dollar threshold.
- //
- // TODO ?? For now, only the threshold here is changed. Much
- // complex code elsewhere can be removed when time permits.
-
- int premium_tax_dimensions[e_number_of_axes] = {1, 1, 1, 1, 1, 53, 1};
- double premium_tax_retaliation_threshold[53] =
- // AL AK AZ AR CA CO CT
- {dbl_inf, 0.0, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf
- // DE DC FL GA HI ID
- ,dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf
- // IL IN IA KS KY LA ME
- ,dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf
- // MD MA MI MN MS MO
- ,dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf
- // MT NE NV NH NJ NM NY
- ,dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf
- // NC ND OH OK OR PA
- ,dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf
- // PR RI SC SD TN TX UT
- ,dbl_inf, dbl_inf, dbl_inf, 0.0, dbl_inf, dbl_inf, dbl_inf
- // VT VA WA WV WI WY XX
- ,dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, dbl_inf, 0.0
- };
- Add
- (database_entity
- (DB_PremTaxRetalLimit
- ,e_number_of_axes
- ,premium_tax_dimensions
- ,premium_tax_retaliation_threshold
- )
- );
}
void DBDictionary::WriteSampleDBFile()
Modified: lmi/trunk/dbnames.xpp
===================================================================
--- lmi/trunk/dbnames.xpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/dbnames.xpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -136,7 +136,7 @@
{DB_PremTaxFundCharge,DB_Topic_DacAndPremiumTax,"PremTaxFundCharge","Premium
tax fund charge [not supported yet]",}, \
{DB_PremTaxLoad,DB_Topic_DacAndPremiumTax,"PremTaxLoad","Scalar premium load
due to premium tax",}, \
{DB_WaivePremTaxInt1035,DB_Topic_DacAndPremiumTax,"WaivePremTaxInt1035","Waive
premium tax charge on internal 1035 exchanges: 0=no, 1=yes",}, \
-{DB_PremTaxRetalLimit,DB_Topic_DacAndPremiumTax,"PremTaxRetalLimit","Premium
tax: first-year premium threshold to waive retaliation",}, \
+{DB_PremTaxRetalLimit,DB_Topic_DacAndPremiumTax,"PremTaxRetalLimit","[Obsolete]",},
\
{DB_PremTaxTierGroup,DB_Topic_DacAndPremiumTax,"PremTaxTierGroup","Apply
tiered premium tax to all contracts in a group aggregated together: 0=no, 1=yes
[not supported yet]",}, \
{DB_PremTaxTierPeriod,DB_Topic_DacAndPremiumTax,"PremTaxTierPeriod","Apply
tiered premium tax to premiums aggregated by: 0=policy year, 1=calendar year
[not supported yet]",}, \
{DB_PremTaxTierNonDecr,DB_Topic_DacAndPremiumTax,"PremTaxTierNonDecr","Tiered
premium tax effective rate constrained not to decrease from one year to the
next: 0=no, 1=yes [not supported yet]",}, \
Modified: lmi/trunk/group_values.cpp
===================================================================
--- lmi/trunk/group_values.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/group_values.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -318,11 +318,6 @@
// progress meter used earlier in this function.
{ // Begin fenv_guard scope.
fenv_guard fg;
- for(i = cell_values.begin(); i != cell_values.end(); ++i)
- {
- (*i)->GuessWhetherFirstYearPremiumExceedsRetaliationLimit();
- }
- restart:
mcenum_gen_basis expense_and_general_account_basis;
mcenum_sep_basis separate_account_basis;
set_cloven_bases_from_run_basis
@@ -436,30 +431,6 @@
}
}
- bool need_to_restart = false;
- for(i = cell_values.begin(); i != cell_values.end(); ++i)
- {
-
if(!(*i)->TestWhetherFirstYearPremiumExceededRetaliationLimit())
- {
- need_to_restart = true;
- }
- }
- if(need_to_restart)
- {
- // To satisfy the popular 'zero-tolerance' attitude toward
- // the goto statement, we could instead reinitialize
- // everything explicitly and decrement the loop counter,
- // but that would be more unnatural.
- for(i = cell_values.begin(); i != cell_values.end(); ++i)
- {
- (*i)->DebugRestart
- ("First-year premium did not meet retaliation limit"
- " for at least one cell in the group."
- );
- }
- goto restart;
- }
-
// Perform end of year calculations.
// Project claims using the partial-mortality rate:
Modified: lmi/trunk/ihs_acctval.cpp
===================================================================
--- lmi/trunk/ihs_acctval.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/ihs_acctval.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -107,7 +107,6 @@
,SepBasis_ (mce_sep_full)
,OldDBOpt (mce_option1)
,YearsDBOpt (mce_option1)
- ,FirstYearPremiumExceedsRetaliationLimit(true)
{
InvariantValues().Init(this);
// TODO ?? What are the values of the last two arguments here?
@@ -336,8 +335,6 @@
double AccountValue::RunOneCell(mcenum_run_basis a_Basis)
{
- GuessWhetherFirstYearPremiumExceedsRetaliationLimit();
- restart:
InitializeLife(a_Basis);
for(int year = InforceYear; year < BasicValues::GetLength(); ++year)
@@ -367,17 +364,6 @@
);
}
- if(!TestWhetherFirstYearPremiumExceededRetaliationLimit())
- {
- // We could do this instead:
- // InitializeLife(a_Basis);
- // --year;
- // to satisfy the popular 'zero-tolerance' attitude toward
- // the goto statement, but that would be more unnatural.
- DebugRestart("First-year premium did not meet retaliation limit.");
- goto restart;
- }
-
SetClaims();
SetProjectedCoiCharge();
IncrementEOY(year);
@@ -1554,57 +1540,6 @@
}
//============================================================================
-double AccountValue::TaxableFirstYearPlannedPremium() const
-{
- double z =
- PerformEePmtStrategy() * InvariantValues().EeMode[0].value()
- + PerformErPmtStrategy() * InvariantValues().ErMode[0].value()
- + Outlay_->dumpin()
- + Outlay_->external_1035_amount()
- ;
- if(!WaivePmTxInt1035)
- {
- z += Outlay_->internal_1035_amount();
- }
- return z;
-}
-
-//============================================================================
-void AccountValue::GuessWhetherFirstYearPremiumExceedsRetaliationLimit()
-{
- // TODO ?? For inforce, we really need the admin system to say
- // - whether the first-year retaliation limit was exceeded; and
- // - how much premium has already been paid for inforce
- // contracts that are still in the first policy year.
-
- Year = yare_input_.InforceYear;
- Month = yare_input_.InforceMonth;
- CoordinateCounters();
- FirstYearPremiumExceedsRetaliationLimit =
- FirstYearPremiumRetaliationLimit_
- <= TaxableFirstYearPlannedPremium()
- ;
-}
-
-//============================================================================
-bool AccountValue::TestWhetherFirstYearPremiumExceededRetaliationLimit()
-{
- if
- ( 0 == Year
- && FirstYearPremiumExceedsRetaliationLimit
- && CumPmts < FirstYearPremiumRetaliationLimit_
- )
- {
- FirstYearPremiumExceedsRetaliationLimit = false;
- return false;
- }
- else
- {
- return true;
- }
-}
-
-//============================================================================
double AccountValue::GetPartMortQ(int a_year) const
{
HOPEFULLY(a_year <= BasicValues::GetLength());
Modified: lmi/trunk/ihs_avdebug.cpp
===================================================================
--- lmi/trunk/ihs_avdebug.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/ihs_avdebug.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -295,16 +295,6 @@
}
//============================================================================
-void AccountValue::DebugRestart(std::string const& reason)
-{
- if(!Debugging || Solving || SolvingForGuarPremium)
- {
- return;
- }
- DebugStream << reason << '\n';
-}
-
-//============================================================================
// To add a new column, see ihs_dbughdr.hpp .
void AccountValue::DebugPrint()
{
Modified: lmi/trunk/ihs_avmly.cpp
===================================================================
--- lmi/trunk/ihs_avmly.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/ihs_avmly.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -1524,17 +1524,12 @@
&& contains(reciprocal_nonretaliation_states, GetPremiumTaxState())
;
- // Override this unconditionally for the moment. This is the value
- // it must have as long as 'PremTaxRetalLimit' is never overridden.
- bool fyperl =
+ // Obviously this determination should be made only once, and not here.
+ bool FirstYearPremiumExceedsRetaliationLimit =
mce_s_AK == GetPremiumTaxState()
|| mce_s_SD == GetPremiumTaxState()
|| mce_s_XX == GetPremiumTaxState()
;
- // Temporarily assert equivalence to obsolete SD calculation,
- // before removing it, to make assurance doubly sure.
- LMI_ASSERT(FirstYearPremiumExceedsRetaliationLimit == fyperl);
- FirstYearPremiumExceedsRetaliationLimit = fyperl;
double tax_in_state_of_domicile = 0.0;
if(!FirstYearPremiumExceedsRetaliationLimit && !forbear_retaliation)
Modified: lmi/trunk/ihs_basicval.cpp
===================================================================
--- lmi/trunk/ihs_basicval.cpp 2011-05-13 16:13:39 UTC (rev 5170)
+++ lmi/trunk/ihs_basicval.cpp 2011-05-13 17:01:42 UTC (rev 5171)
@@ -806,7 +806,6 @@
/// These database entities should be looked up by tax state:
/// - DB_PremTaxLoad
/// - DB_PremTaxRate
-/// - DB_PremTaxRetalLimit
/// These probably (for inchoate amortization) shouldn't:
/// - DB_PremTaxAmortPeriod
/// - DB_PremTaxAmortIntRate
@@ -838,7 +837,6 @@
database_index index = Database_->index().state(GetPremiumTaxState());
PremiumTaxRate_ = Database_->Query(DB_PremTaxRate ,
index);
PremiumTaxLoad_ = Database_->Query(DB_PremTaxLoad ,
index);
- FirstYearPremiumRetaliationLimit_ = Database_->Query(DB_PremTaxRetalLimit,
index);
{
database_index index = Database_->index().state(GetStateOfDomicile());
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5171] Eradicate a SD premium-tax calculation superseded 2008-02-19,
Greg Chicares <=