[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [5698] Calculate maximum premium tax
From: |
Greg Chicares |
Subject: |
[lmi-commits] [5698] Calculate maximum premium tax |
Date: |
Thu, 18 Apr 2013 15:04:23 +0000 |
Revision: 5698
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5698
Author: chicares
Date: 2013-04-18 15:04:22 +0000 (Thu, 18 Apr 2013)
Log Message:
-----------
Calculate maximum premium tax
Modified Paths:
--------------
lmi/trunk/antediluvian_stubs.cpp
lmi/trunk/premium_tax.cpp
lmi/trunk/premium_tax.hpp
lmi/trunk/premium_tax_test.cpp
lmi/trunk/stratified_charges.cpp
lmi/trunk/stratified_charges.hpp
Modified: lmi/trunk/antediluvian_stubs.cpp
===================================================================
--- lmi/trunk/antediluvian_stubs.cpp 2013-04-18 13:50:16 UTC (rev 5697)
+++ lmi/trunk/antediluvian_stubs.cpp 2013-04-18 15:04:22 UTC (rev 5698)
@@ -26,7 +26,7 @@
# pragma hdrstop
#endif // __BORLANDC__
-#include "lmi.hpp" // is_antediluvian_fork()
+#include "lmi.hpp" // is_antediluvian_fork()
#include "mec_server.hpp"
#include "product_data.hpp"
#include "stratified_charges.hpp"
@@ -158,6 +158,11 @@
return empty_string;
}
+double stratified_charges::maximum_tiered_premium_tax_rate(mcenum_state) const
+{
+ return 0.0;
+}
+
double stratified_charges::minimum_tiered_premium_tax_rate(mcenum_state) const
{
return 0.0;
Modified: lmi/trunk/premium_tax.cpp
===================================================================
--- lmi/trunk/premium_tax.cpp 2013-04-18 13:50:16 UTC (rev 5697)
+++ lmi/trunk/premium_tax.cpp 2013-04-18 15:04:22 UTC (rev 5698)
@@ -100,6 +100,7 @@
,amortize_premium_load_ (amortize_premium_load)
,levy_rate_ (0.0) // Reset below.
,load_rate_ (0.0) // Reset below.
+ ,maximum_load_rate_ (0.0) // Reset below.
,minimum_load_rate_ (0.0) // Reset below.
,domiciliary_load_rate_ (0.0) // Reset below.
,is_tiered_in_tax_state_ (false) // Reset below.
@@ -140,6 +141,7 @@
}
}
+ maximum_load_rate_ = ascertain_maximum_load_rate(strata);
minimum_load_rate_ = ascertain_minimum_load_rate(strata);
test_consistency();
@@ -156,6 +158,7 @@
,amortize_premium_load_ (false)
,levy_rate_ (0.0) // Reset below.
,load_rate_ (0.0)
+ ,maximum_load_rate_ (0.0)
,minimum_load_rate_ (0.0)
,domiciliary_load_rate_ (0.0)
,is_tiered_in_tax_state_ (false)
@@ -423,8 +426,30 @@
}
#endif // 0
-/// Lowest premium-tax load, for 7702 and 7702A purposes.
+/// Highest premium-tax load, for calculating pay-as-you-go premium.
+double premium_tax::ascertain_maximum_load_rate(stratified_charges const&
strata) const
+{
+ if(amortize_premium_load_)
+ {
+ return 0.0;
+ }
+ else if(!varies_by_state_)
+ {
+ return load_rate_;
+ }
+ else if(is_tiered_in_tax_state_)
+ {
+ return strata.maximum_tiered_premium_tax_rate(tax_state_);
+ }
+ else
+ {
+ return load_rate_;
+ }
+}
+
+/// Lowest premium-tax load, for conservative 7702 and 7702A calculations.
+
double premium_tax::ascertain_minimum_load_rate(stratified_charges const&
strata) const
{
if(amortize_premium_load_)
@@ -460,6 +485,11 @@
return load_rate_;
}
+double premium_tax::maximum_load_rate() const
+{
+ return maximum_load_rate_;
+}
+
double premium_tax::minimum_load_rate() const
{
return minimum_load_rate_;
Modified: lmi/trunk/premium_tax.hpp
===================================================================
--- lmi/trunk/premium_tax.hpp 2013-04-18 13:50:16 UTC (rev 5697)
+++ lmi/trunk/premium_tax.hpp 2013-04-18 15:04:22 UTC (rev 5698)
@@ -88,11 +88,6 @@
/// and SD contracts is not supported, so premium tax is understated
/// for a few domiciles.
///
-/// A greatest-premium-tax-load function is wanted for the approximate
-/// "pay as you go" modal premium (BasicValues::GetModalPremMlyDed()).
-/// At present, that premium is insufficient to prevent instant lapse
-/// in AK and SD when premium tax is passed through as a load.
-///
/// start_new_year() should be improved as noted in its documentation.
///
/// premium_tax_rates_for_annuities() should be implemented.
@@ -121,12 +116,14 @@
double levy_rate () const;
double load_rate () const;
+ double maximum_load_rate () const;
double minimum_load_rate () const;
bool is_tiered () const;
private:
void test_consistency() const;
+ double ascertain_maximum_load_rate(stratified_charges const& strata) const;
double ascertain_minimum_load_rate(stratified_charges const& strata) const;
// Ctor value-arguments.
@@ -136,6 +133,7 @@
double levy_rate_;
double load_rate_;
+ double maximum_load_rate_;
double minimum_load_rate_;
double domiciliary_load_rate_;
bool is_tiered_in_tax_state_;
Modified: lmi/trunk/premium_tax_test.cpp
===================================================================
--- lmi/trunk/premium_tax_test.cpp 2013-04-18 13:50:16 UTC (rev 5697)
+++ lmi/trunk/premium_tax_test.cpp 2013-04-18 15:04:22 UTC (rev 5698)
@@ -75,6 +75,7 @@
premium_tax z(mce_s_CT, mce_s_CT, false, db, strata);
BOOST_TEST_EQUAL(z.levy_rate (), 0.0175);
BOOST_TEST_EQUAL(z.load_rate (), 0.0175);
+ BOOST_TEST_EQUAL(z.maximum_load_rate (), 0.0175);
BOOST_TEST_EQUAL(z.minimum_load_rate (), 0.0175);
BOOST_TEST_EQUAL(z.is_tiered (), false );
BOOST_TEST_EQUAL(z.calculate_load(1.0, strata), 0.0175);
@@ -85,6 +86,7 @@
premium_tax z(mce_s_CT, mce_s_MA, false, db, strata);
BOOST_TEST_EQUAL(z.levy_rate (), 0.0200);
BOOST_TEST_EQUAL(z.load_rate (), 0.0200);
+ BOOST_TEST_EQUAL(z.maximum_load_rate (), 0.0200);
BOOST_TEST_EQUAL(z.minimum_load_rate (), 0.0200);
BOOST_TEST_EQUAL(z.is_tiered (), false );
BOOST_TEST_EQUAL(z.calculate_load(1.0, strata), 0.0200);
@@ -95,6 +97,7 @@
premium_tax z(mce_s_AK, mce_s_CT, false, db, strata);
BOOST_TEST_EQUAL(z.levy_rate (), 0.0000);
BOOST_TEST_EQUAL(z.load_rate (), 0.0000);
+ BOOST_TEST_EQUAL(z.maximum_load_rate (), 0.0270);
BOOST_TEST_EQUAL(z.minimum_load_rate (), 0.0010);
BOOST_TEST_EQUAL(z.is_tiered (), true );
BOOST_TEST_EQUAL(z.calculate_load(1.0, strata), 0.0270);
@@ -112,6 +115,7 @@
premium_tax z(mce_s_AK, mce_s_CT, false, db, strata);
BOOST_TEST_EQUAL(z.levy_rate (), 0.0000);
BOOST_TEST_EQUAL(z.load_rate (), 0.0000);
+ BOOST_TEST_EQUAL(z.maximum_load_rate (), 0.0000);
BOOST_TEST_EQUAL(z.minimum_load_rate (), 0.0000);
BOOST_TEST_EQUAL(z.is_tiered (), true );
// TODO ?? This is a pitfall--at least it should be diagnosed.
@@ -129,6 +133,7 @@
// TODO ?? Don't the suppressed tests indicate a defect?
// BOOST_TEST_EQUAL(z.levy_rate (), 0.0000);
// BOOST_TEST_EQUAL(z.load_rate (), 0.0000);
+ BOOST_TEST_EQUAL(z.maximum_load_rate (), 0.0000);
BOOST_TEST_EQUAL(z.minimum_load_rate (), 0.0000);
BOOST_TEST_EQUAL(z.is_tiered (), false );
// BOOST_TEST_EQUAL(z.calculate_load(1.0, strata), 0.0000);
Modified: lmi/trunk/stratified_charges.cpp
===================================================================
--- lmi/trunk/stratified_charges.cpp 2013-04-18 13:50:16 UTC (rev 5697)
+++ lmi/trunk/stratified_charges.cpp 2013-04-18 15:04:22 UTC (rev 5698)
@@ -518,6 +518,25 @@
return !premium_tax_table(state).empty();
}
+/// Highest rate, for calculating pay-as-you-go premium.
+
+double stratified_charges::maximum_tiered_premium_tax_rate(mcenum_state state)
const
+{
+ std::string const table = premium_tax_table(state);
+ if(table.empty())
+ {
+ return 0.0;
+ }
+ else
+ {
+ stratified_entity const& z = datum(table);
+ LMI_ASSERT(!z.values().empty());
+ return *std::max_element(z.values().begin(), z.values().end());
+ }
+}
+
+/// Lowest rate, for conservative 7702 and 7702A calculations.
+
double stratified_charges::minimum_tiered_premium_tax_rate(mcenum_state state)
const
{
std::string const table = premium_tax_table(state);
Modified: lmi/trunk/stratified_charges.hpp
===================================================================
--- lmi/trunk/stratified_charges.hpp 2013-04-18 13:50:16 UTC (rev 5697)
+++ lmi/trunk/stratified_charges.hpp 2013-04-18 15:04:22 UTC (rev 5698)
@@ -62,7 +62,9 @@
,e_stratified_last
};
-// Implicitly-declared special member functions do the right thing.
+/// A tiered or banded datum.
+///
+/// Implicitly-declared special member functions do the right thing.
class LMI_SO stratified_entity
:virtual private obstruct_slicing<stratified_entity>
@@ -143,8 +145,7 @@
) const;
bool premium_tax_is_tiered(mcenum_state) const;
- // Lowest rate for conservatism in complicated formulas that
- // don't yet reflect tiering.
+ double maximum_tiered_premium_tax_rate(mcenum_state) const;
double minimum_tiered_premium_tax_rate(mcenum_state) const;
static void write_stratified_files();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5698] Calculate maximum premium tax,
Greg Chicares <=