[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [5177] Refine and move retaliation criteria
From: |
Greg Chicares |
Subject: |
[lmi-commits] [5177] Refine and move retaliation criteria |
Date: |
Mon, 23 May 2011 13:11:16 +0000 |
Revision: 5177
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5177
Author: chicares
Date: 2011-05-23 13:11:15 +0000 (Mon, 23 May 2011)
Log Message:
-----------
Refine and move retaliation criteria
Modified Paths:
--------------
lmi/trunk/basic_values.hpp
lmi/trunk/ihs_avmly.cpp
lmi/trunk/ihs_basicval.cpp
Modified: lmi/trunk/basic_values.hpp
===================================================================
--- lmi/trunk/basic_values.hpp 2011-05-23 10:58:40 UTC (rev 5176)
+++ lmi/trunk/basic_values.hpp 2011-05-23 13:11:15 UTC (rev 5177)
@@ -372,6 +372,7 @@
bool PremiumTaxLoadIsTieredInStateOfDomicile_;
bool PremiumTaxLoadIsTieredInPremiumTaxState_;
+ bool premium_tax_is_retaliatory_;
private:
void SetPremiumTaxParameters();
@@ -532,6 +533,11 @@
return IsSubjectToIllustrationReg_;
}
+bool premium_tax_is_retaliatory
+ (mcenum_state premium_tax_state
+ ,mcenum_state state_of_domicile
+ );
+
double lowest_premium_tax_load
(product_database const& db
,stratified_charges const& stratified
Modified: lmi/trunk/ihs_avmly.cpp
===================================================================
--- lmi/trunk/ihs_avmly.cpp 2011-05-23 10:58:40 UTC (rev 5176)
+++ lmi/trunk/ihs_avmly.cpp 2011-05-23 13:11:15 UTC (rev 5177)
@@ -1515,28 +1515,8 @@
}
YearsTotalPremTaxLoadInPremiumTaxState += tax_in_premium_tax_state;
- // Obviously this determination should be made only once, and not here.
- //
http://leg2.state.va.us/dls/h&sdocs.nsf/fc86c2b17a1cf388852570f9006f1299/461afa310d4d3d528525646500562282/$FILE/HD78_1997.pdf
- std::vector<mcenum_state> reciprocal_nonretaliation_states;
- reciprocal_nonretaliation_states.push_back(mce_s_HI);
- reciprocal_nonretaliation_states.push_back(mce_s_MA);
- reciprocal_nonretaliation_states.push_back(mce_s_MN);
- reciprocal_nonretaliation_states.push_back(mce_s_NY);
- reciprocal_nonretaliation_states.push_back(mce_s_RI);
- bool forbear_retaliation =
- contains(reciprocal_nonretaliation_states, GetStateOfDomicile())
- && contains(reciprocal_nonretaliation_states, GetPremiumTaxState())
- ;
-
- // 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()
- ;
-
double tax_in_state_of_domicile = 0.0;
- if(!FirstYearPremiumExceedsRetaliationLimit && !forbear_retaliation)
+ if(premium_tax_is_retaliatory_)
{
tax_in_state_of_domicile = DomiciliaryPremiumTaxLoad() * payment;
if(PremiumTaxLoadIsTieredInStateOfDomicile_)
Modified: lmi/trunk/ihs_basicval.cpp
===================================================================
--- lmi/trunk/ihs_basicval.cpp 2011-05-23 10:58:40 UTC (rev 5176)
+++ lmi/trunk/ihs_basicval.cpp 2011-05-23 13:11:15 UTC (rev 5177)
@@ -824,6 +824,11 @@
PremiumTaxLoadIsTieredInStateOfDomicile_ =
StratifiedCharges_->premium_tax_is_tiered(GetStateOfDomicile());
PremiumTaxLoadIsTieredInPremiumTaxState_ =
StratifiedCharges_->premium_tax_is_tiered(GetPremiumTaxState());
+ premium_tax_is_retaliatory_ = premium_tax_is_retaliatory
+ (GetPremiumTaxState()
+ ,GetStateOfDomicile()
+ );
+
LowestPremiumTaxLoad_ = lowest_premium_tax_load
(*Database_
,*StratifiedCharges_
@@ -850,6 +855,40 @@
TestPremiumTaxLoadConsistency();
}
+/// Determine whether premium tax is retaliatory.
+///
+/// Here's a general discussion:
+///
http://leg2.state.va.us/dls/h&sdocs.nsf/fc86c2b17a1cf388852570f9006f1299/461afa310d4d3d528525646500562282/$FILE/HD78_1997.pdf
+///
+/// Premium tax is retaliatory in most states. Exceptions:
+/// - MA, MN, NY, and RI are mutually nonretaliatory.
+/// - HI never retaliates; neither does fictitious state XX.
+/// - AK and SD retaliate only on the bottom tier; this is best
+/// implemented by adjusting that tier's rate and treating them
+/// as otherwise nonretaliatory.
+
+bool premium_tax_is_retaliatory
+ (mcenum_state premium_tax_state
+ ,mcenum_state state_of_domicile
+ )
+{
+ static int const n = 4;
+ static mcenum_state const d[n] = {mce_s_MA, mce_s_MN, mce_s_NY, mce_s_RI};
+ static std::vector<mcenum_state> const reciprocal_nonretaliation_states(d,
d + n);
+ bool const reciprocally_nonretaliatory =
+ contains(reciprocal_nonretaliation_states, state_of_domicile)
+ && contains(reciprocal_nonretaliation_states, premium_tax_state)
+ ;
+ bool const nonretaliatory =
+ reciprocally_nonretaliatory
+ || mce_s_HI == premium_tax_state
+ || mce_s_XX == premium_tax_state
+ || mce_s_AK == premium_tax_state
+ || mce_s_SD == premium_tax_state
+ ;
+ return !nonretaliatory;
+}
+
/// Lowest premium-tax load, for 7702 and 7702A purposes.
double lowest_premium_tax_load
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5177] Refine and move retaliation criteria,
Greg Chicares <=