lmi-commits
[Top][All Lists]
Advanced

[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




reply via email to

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