[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [5904] Split certain fields into "old" and "new" variants
From: |
Greg Chicares |
Subject: |
[lmi-commits] [5904] Split certain fields into "old" and "new" variants |
Date: |
Sat, 21 Jun 2014 00:59:20 +0000 |
Revision: 5904
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5904
Author: chicares
Date: 2014-06-21 00:59:19 +0000 (Sat, 21 Jun 2014)
Log Message:
-----------
Split certain fields into "old" and "new" variants
Modified Paths:
--------------
lmi/trunk/gpt_input.cpp
lmi/trunk/gpt_input.hpp
lmi/trunk/gpt_server.cpp
Modified: lmi/trunk/gpt_input.cpp
===================================================================
--- lmi/trunk/gpt_input.cpp 2014-06-20 15:41:21 UTC (rev 5903)
+++ lmi/trunk/gpt_input.cpp 2014-06-21 00:59:19 UTC (rev 5904)
@@ -79,11 +79,14 @@
gpt_input::gpt_input()
:Use7702ATables ("No")
,IssueAge ("45")
- ,Gender ("Male")
- ,Smoking ("Nonsmoker")
+ ,OldGender ("Male")
+ ,NewGender ("Male")
+ ,OldSmoking ("Nonsmoker")
+ ,NewSmoking ("Nonsmoker")
,UnderwritingClass ("Standard")
// ,DateOfBirth ("")
-// ,SubstandardTable ("")
+// ,OldSubstandardTable ("")
+// ,NewSubstandardTable ("")
// ,ProductName ("")
// ,External1035ExchangeAmount ("")
// ,External1035ExchangeFromMec ("")
@@ -110,7 +113,8 @@
,BenefitHistory ("1000000")
,StateOfJurisdiction ("CT")
,PremiumTaxState ("CT")
- ,FlatExtra ("0")
+ ,OldFlatExtra ("0")
+ ,NewFlatExtra ("0")
// ,UseDOB ("")
,Payment ("0")
,BenefitAmount ("1000000")
@@ -158,11 +162,14 @@
{
ascribe("Use7702ATables" ,
&gpt_input::Use7702ATables );
ascribe("IssueAge" , &gpt_input::IssueAge
);
- ascribe("Gender" , &gpt_input::Gender
);
- ascribe("Smoking" , &gpt_input::Smoking
);
+ ascribe("OldGender" , &gpt_input::OldGender
);
+ ascribe("NewGender" , &gpt_input::NewGender
);
+ ascribe("OldSmoking" , &gpt_input::OldSmoking
);
+ ascribe("NewSmoking" , &gpt_input::NewSmoking
);
ascribe("UnderwritingClass" ,
&gpt_input::UnderwritingClass );
ascribe("DateOfBirth" , &gpt_input::DateOfBirth
);
- ascribe("SubstandardTable" ,
&gpt_input::SubstandardTable );
+ ascribe("OldSubstandardTable" ,
&gpt_input::OldSubstandardTable );
+ ascribe("NewSubstandardTable" ,
&gpt_input::NewSubstandardTable );
ascribe("ProductName" , &gpt_input::ProductName
);
ascribe("External1035ExchangeAmount" ,
&gpt_input::External1035ExchangeAmount );
ascribe("External1035ExchangeFromMec" ,
&gpt_input::External1035ExchangeFromMec );
@@ -189,7 +196,8 @@
ascribe("BenefitHistory" ,
&gpt_input::BenefitHistory );
ascribe("StateOfJurisdiction" ,
&gpt_input::StateOfJurisdiction );
ascribe("PremiumTaxState" ,
&gpt_input::PremiumTaxState );
- ascribe("FlatExtra" , &gpt_input::FlatExtra
);
+ ascribe("OldFlatExtra" , &gpt_input::OldFlatExtra
);
+ ascribe("NewFlatExtra" , &gpt_input::NewFlatExtra
);
ascribe("UseDOB" , &gpt_input::UseDOB
);
ascribe("Payment" , &gpt_input::Payment
);
ascribe("BenefitAmount" ,
&gpt_input::BenefitAmount );
@@ -197,6 +205,9 @@
/// Reset database_ if necessary, i.e., if the product or any database
/// axis changed.
+///
+/// To avoid multiple database objects, presume that "Old" axes are
+/// valid, and set the database from "New" parameters.
void gpt_input::DoAdaptExternalities()
{
@@ -206,9 +217,9 @@
(
database_.get()
&& CachedProductName_ == ProductName
- && CachedGender_ == Gender
+ && CachedGender_ == NewGender
&& CachedUnderwritingClass_ == UnderwritingClass
- && CachedSmoking_ == Smoking
+ && CachedSmoking_ == NewSmoking
&& CachedIssueAge_ == IssueAge
&& CachedGroupUnderwritingType_ == GroupUnderwritingType
&& CachedStateOfJurisdiction_ == StateOfJurisdiction
@@ -218,9 +229,9 @@
}
CachedProductName_ = ProductName .value();
- CachedGender_ = Gender .value();
+ CachedGender_ = NewGender .value();
CachedUnderwritingClass_ = UnderwritingClass .value();
- CachedSmoking_ = Smoking .value();
+ CachedSmoking_ = NewSmoking .value();
CachedIssueAge_ = IssueAge .value();
CachedGroupUnderwritingType_ = GroupUnderwritingType.value();
CachedStateOfJurisdiction_ = StateOfJurisdiction .value();
@@ -438,20 +449,32 @@
UnderwritingClass.allow(mce_preferred ,
database_->Query(DB_AllowPreferredClass));
UnderwritingClass.allow(mce_rated, database_->Query(DB_AllowSubstdTable));
- SubstandardTable.enable(mce_rated == UnderwritingClass);
+ OldSubstandardTable.enable(mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_a, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_b, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_c, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_d, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_e, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_f, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_h, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_j, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_l, mce_rated == UnderwritingClass);
+ OldSubstandardTable.allow(mce_table_p, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_a, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_b, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_c, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_d, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_e, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_f, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_h, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_j, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_l, mce_rated == UnderwritingClass);
- SubstandardTable.allow(mce_table_p, mce_rated == UnderwritingClass);
+ NewSubstandardTable.enable(mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_a, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_b, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_c, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_d, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_e, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_f, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_h, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_j, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_l, mce_rated == UnderwritingClass);
+ NewSubstandardTable.allow(mce_table_p, mce_rated == UnderwritingClass);
- FlatExtra.enable(database_->Query(DB_AllowFlatExtras));
+ OldFlatExtra.enable(database_->Query(DB_AllowFlatExtras));
+ NewFlatExtra.enable(database_->Query(DB_AllowFlatExtras));
bool blend_mortality_by_gender = false;
bool blend_mortality_by_smoking = false;
@@ -459,16 +482,24 @@
bool allow_gender_distinct = database_->Query(DB_AllowSexDistinct);
bool allow_unisex = database_->Query(DB_AllowUnisex);
- Gender.allow(mce_female, !blend_mortality_by_gender &&
allow_gender_distinct);
- Gender.allow(mce_male , !blend_mortality_by_gender &&
allow_gender_distinct);
- Gender.allow(mce_unisex, blend_mortality_by_gender || allow_unisex);
+ OldGender.allow(mce_female, !blend_mortality_by_gender &&
allow_gender_distinct);
+ OldGender.allow(mce_male , !blend_mortality_by_gender &&
allow_gender_distinct);
+ OldGender.allow(mce_unisex, blend_mortality_by_gender || allow_unisex);
+ NewGender.allow(mce_female, !blend_mortality_by_gender &&
allow_gender_distinct);
+ NewGender.allow(mce_male , !blend_mortality_by_gender &&
allow_gender_distinct);
+ NewGender.allow(mce_unisex, blend_mortality_by_gender || allow_unisex);
+
bool allow_smoker_distinct = database_->Query(DB_AllowSmokeDistinct);
bool allow_unismoke = database_->Query(DB_AllowUnismoke);
- Smoking.allow(mce_smoker, !blend_mortality_by_smoking &&
allow_smoker_distinct);
- Smoking.allow(mce_nonsmoker, !blend_mortality_by_smoking &&
allow_smoker_distinct);
- Smoking.allow(mce_unismoke, blend_mortality_by_smoking ||
allow_unismoke);
+ OldSmoking.allow(mce_smoker, !blend_mortality_by_smoking &&
allow_smoker_distinct);
+ OldSmoking.allow(mce_nonsmoker, !blend_mortality_by_smoking &&
allow_smoker_distinct);
+ OldSmoking.allow(mce_unismoke, blend_mortality_by_smoking ||
allow_unismoke);
+
+ NewSmoking.allow(mce_smoker, !blend_mortality_by_smoking &&
allow_smoker_distinct);
+ NewSmoking.allow(mce_nonsmoker, !blend_mortality_by_smoking &&
allow_smoker_distinct);
+ NewSmoking.allow(mce_unismoke, blend_mortality_by_smoking ||
allow_unismoke);
}
/// Change values as required for consistency.
@@ -524,7 +555,8 @@
LMI_ASSERT(years_to_maturity() == database_->length());
std::vector<std::string> s;
- s.push_back(RealizeFlatExtra ());
+ s.push_back(RealizeOldFlatExtra ());
+ s.push_back(RealizeNewFlatExtra ());
s.push_back(RealizePaymentHistory ());
s.push_back(RealizeBenefitHistory ());
@@ -557,14 +589,14 @@
return s;
}
-std::string gpt_input::RealizeFlatExtra()
+std::string gpt_input::RealizeOldFlatExtra()
{
// We could enforce a maximum of the monthly equivalent of unity,
// and a minimum of zero; is that worth the bother though?
std::string s = realize_sequence_string
(*this
- ,FlatExtraRealized_
- ,FlatExtra
+ ,OldFlatExtraRealized_
+ ,OldFlatExtra
);
if(s.size())
{
@@ -576,7 +608,7 @@
return "";
}
- if(!each_equal(FlatExtraRealized_.begin(), FlatExtraRealized_.end(), 0.0))
+ if(!each_equal(OldFlatExtraRealized_.begin(), OldFlatExtraRealized_.end(),
0.0))
{
return "Flat extras may not be illustrated on this policy form.";
}
@@ -584,6 +616,33 @@
return "";
}
+std::string gpt_input::RealizeNewFlatExtra()
+{
+// We could enforce a maximum of the monthly equivalent of unity,
+// and a minimum of zero; is that worth the bother though?
+ std::string s = realize_sequence_string
+ (*this
+ ,NewFlatExtraRealized_
+ ,NewFlatExtra
+ );
+ if(s.size())
+ {
+ return s;
+ }
+
+ if(database_->Query(DB_AllowFlatExtras))
+ {
+ return "";
+ }
+
+ if(!each_equal(NewFlatExtraRealized_.begin(), NewFlatExtraRealized_.end(),
0.0))
+ {
+ return "Flat extras may not be illustrated on this policy form.";
+ }
+
+ return "";
+}
+
std::string gpt_input::RealizePaymentHistory()
{
return realize_sequence_string
@@ -660,11 +719,16 @@
RealizeAllSequenceInput(false);
}
-std::vector<double> gpt_input::FlatExtraRealized() const
+std::vector<double> gpt_input::OldFlatExtraRealized() const
{
- return convert_vector_type<double>(FlatExtraRealized_);
+ return convert_vector_type<double>(OldFlatExtraRealized_);
}
+std::vector<double> gpt_input::NewFlatExtraRealized() const
+{
+ return convert_vector_type<double>(NewFlatExtraRealized_);
+}
+
std::vector<double> gpt_input::PaymentHistoryRealized() const
{
return convert_vector_type<double>(PaymentHistoryRealized_);
Modified: lmi/trunk/gpt_input.hpp
===================================================================
--- lmi/trunk/gpt_input.hpp 2014-06-20 15:41:21 UTC (rev 5903)
+++ lmi/trunk/gpt_input.hpp 2014-06-21 00:59:19 UTC (rev 5904)
@@ -89,7 +89,8 @@
std::vector<std::string> RealizeAllSequenceInput(bool report_errors =
true);
- std::vector<double> FlatExtraRealized () const;
+ std::vector<double> OldFlatExtraRealized () const;
+ std::vector<double> NewFlatExtraRealized () const;
std::vector<double> PaymentHistoryRealized() const;
std::vector<double> BenefitHistoryRealized() const;
@@ -127,7 +128,8 @@
virtual void DoHarmonize();
virtual void DoTransmogrify();
- std::string RealizeFlatExtra ();
+ std::string RealizeOldFlatExtra ();
+ std::string RealizeNewFlatExtra ();
std::string RealizePaymentHistory();
std::string RealizeBenefitHistory();
@@ -148,11 +150,14 @@
mce_yes_or_no Use7702ATables ;
tnr_age IssueAge ;
- mce_gender Gender ;
- mce_smoking Smoking ;
+ mce_gender OldGender ;
+ mce_gender NewGender ;
+ mce_smoking OldSmoking ;
+ mce_smoking NewSmoking ;
mce_class UnderwritingClass ;
tnr_date DateOfBirth ;
- mce_table_rating SubstandardTable ;
+ mce_table_rating OldSubstandardTable ;
+ mce_table_rating NewSubstandardTable ;
ce_product_name ProductName ;
tnr_nonnegative_double External1035ExchangeAmount ;
mce_yes_or_no External1035ExchangeFromMec ;
@@ -179,12 +184,14 @@
numeric_sequence BenefitHistory ;
mce_state StateOfJurisdiction ;
mce_state PremiumTaxState ;
- numeric_sequence FlatExtra ;
+ numeric_sequence OldFlatExtra ;
+ numeric_sequence NewFlatExtra ;
mce_yes_or_no UseDOB ;
tnr_nonnegative_double Payment ;
tnr_nonnegative_double BenefitAmount ;
- std::vector<tnr_unrestricted_double> FlatExtraRealized_ ;
+ std::vector<tnr_unrestricted_double> OldFlatExtraRealized_ ;
+ std::vector<tnr_unrestricted_double> NewFlatExtraRealized_ ;
std::vector<tnr_unrestricted_double> PaymentHistoryRealized_;
std::vector<tnr_unrestricted_double> BenefitHistoryRealized_;
};
Modified: lmi/trunk/gpt_server.cpp
===================================================================
--- lmi/trunk/gpt_server.cpp 2014-06-20 15:41:21 UTC (rev 5903)
+++ lmi/trunk/gpt_server.cpp 2014-06-21 00:59:19 UTC (rev 5904)
@@ -73,11 +73,14 @@
{
bool Use7702ATables =
exact_cast<mce_yes_or_no >(input["Use7702ATables"
])->value();
// int IssueAge =
exact_cast<tnr_age >(input["IssueAge"
])->value();
- mcenum_gender Gender =
exact_cast<mce_gender >(input["Gender"
])->value();
- mcenum_smoking Smoking =
exact_cast<mce_smoking >(input["Smoking"
])->value();
+// mcenum_gender OldGender =
exact_cast<mce_gender >(input["OldGender"
])->value();
+ mcenum_gender NewGender =
exact_cast<mce_gender >(input["NewGender"
])->value();
+// mcenum_smoking OldSmoking =
exact_cast<mce_smoking >(input["OldSmoking"
])->value();
+ mcenum_smoking NewSmoking =
exact_cast<mce_smoking >(input["NewSmoking"
])->value();
mcenum_class UnderwritingClass =
exact_cast<mce_class >(input["UnderwritingClass"
])->value();
// calendar_date DateOfBirth =
exact_cast<tnr_date >(input["DateOfBirth"
])->value();
-// mcenum_table_rating SubstandardTable =
exact_cast<mce_table_rating >(input["SubstandardTable"
])->value();
+// mcenum_table_rating OldSubstandardTable =
exact_cast<mce_table_rating >(input["OldSubstandardTable"
])->value();
+// mcenum_table_rating NewSubstandardTable =
exact_cast<mce_table_rating >(input["NewSubstandardTable"
])->value();
std::string ProductName =
exact_cast<ce_product_name >(input["ProductName"
])->value();
double External1035ExchangeAmount =
exact_cast<tnr_nonnegative_double >(input["External1035ExchangeAmount"
])->value();
// bool External1035ExchangeFromMec =
exact_cast<mce_yes_or_no >(input["External1035ExchangeFromMec"
])->value();
@@ -102,7 +105,8 @@
double InforceLeastDeathBenefit =
exact_cast<tnr_nonnegative_double >(input["InforceLeastDeathBenefit"
])->value();
mcenum_state StateOfJurisdiction =
exact_cast<mce_state >(input["StateOfJurisdiction"
])->value();
mcenum_state PremiumTaxState =
exact_cast<mce_state >(input["PremiumTaxState"
])->value();
-// std::string FlatExtra =
exact_cast<numeric_sequence >(input["FlatExtra"
])->value();
+// std::string OldFlatExtra =
exact_cast<numeric_sequence >(input["OldFlatExtra"
])->value();
+// std::string NewFlatExtra =
exact_cast<numeric_sequence >(input["NewFlatExtra"
])->value();
// std::string PaymentHistory =
exact_cast<numeric_sequence >(input["PaymentHistory"
])->value();
// std::string BenefitHistory =
exact_cast<numeric_sequence >(input["BenefitHistory"
])->value();
// bool UseDOB =
exact_cast<mce_yes_or_no >(input["UseDOB"
])->value();
@@ -113,9 +117,9 @@
product_database database
(ProductName
- ,Gender
+ ,NewGender
,UnderwritingClass
- ,Smoking
+ ,NewSmoking
,input.issue_age()
,GroupUnderwritingType
,StateOfJurisdiction
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5904] Split certain fields into "old" and "new" variants,
Greg Chicares <=