lmi-commits
[Top][All Lists]
Advanced

[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());




reply via email to

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