lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [5907] Convert between old and new GPT input


From: Greg Chicares
Subject: [lmi-commits] [5907] Convert between old and new GPT input
Date: Sun, 22 Jun 2014 13:52:16 +0000

Revision: 5907
          http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5907
Author:   chicares
Date:     2014-06-22 13:52:14 +0000 (Sun, 22 Jun 2014)
Log Message:
-----------
Convert between old and new GPT input

Modified Paths:
--------------
    lmi/trunk/ihs_server7702io.cpp
    lmi/trunk/ihs_server7702io.hpp

Modified: lmi/trunk/ihs_server7702io.cpp
===================================================================
--- lmi/trunk/ihs_server7702io.cpp      2014-06-21 16:19:26 UTC (rev 5906)
+++ lmi/trunk/ihs_server7702io.cpp      2014-06-22 13:52:14 UTC (rev 5907)
@@ -28,6 +28,9 @@
 
 #include "ihs_server7702io.hpp"
 
+#include "assert_lmi.hpp"
+#include "value_cast.hpp"
+
 #include <iomanip>
 #include <ios>
 #include <istream>
@@ -208,6 +211,129 @@
     return os;
 }
 
+Server7702Input::Server7702Input()
+{
+    // Do nothing.
+}
+
+Server7702Input::Server7702Input(gpt_input const& z)
+{
+    UniqueIdentifier           = z["ContractNumber"].str();
+    Duration                   = 
exact_cast<tnr_duration>(z["InforceYear"])->value();
+    IsIssuedToday              = 0 == Duration; // Casual, but strictly 
correct for all testdeck cases.
+    GrossNontaxableWithdrawal  = 
exact_cast<tnr_nonnegative_double>(z["PremsPaidDecrement"])->value();
+    Premium                    = 
exact_cast<tnr_nonnegative_double>(z["Payment"])->value();
+    DecreaseRequiredByContract = 0.0;
+    ProductName                = z["ProductName"].str();
+    UnderwritingBasis          = 
exact_cast<mce_uw_basis>(z["GroupUnderwritingType"])->value();
+    PremTaxLoadRate            = 0.0;
+    TieredAssetChargeRate      = 0.0;
+    LeastBenefitAmountEver     = 0.0;
+    OldGuidelineLevelPremium   = 
exact_cast<tnr_unrestricted_double>(z["InforceGlp"])->value();
+    OldGuidelineSinglePremium  = 
exact_cast<tnr_unrestricted_double>(z["InforceGsp"])->value();
+    NewIssueAge                = exact_cast<tnr_age>(z["IssueAge"])->value();
+    OldIssueAge                = NewIssueAge;
+    NewGender                  = 
exact_cast<mce_gender>(z["NewGender"])->value();
+    OldGender                  = 
exact_cast<mce_gender>(z["OldGender"])->value();
+    NewSmoker                  = 
exact_cast<mce_smoking>(z["NewSmoking"])->value();
+    OldSmoker                  = 
exact_cast<mce_smoking>(z["OldSmoking"])->value();
+    NewUnderwritingClass       = 
exact_cast<mce_class>(z["UnderwritingClass"])->value();
+    OldUnderwritingClass       = NewUnderwritingClass;
+    NewStateOfJurisdiction     = 
exact_cast<mce_state>(z["StateOfJurisdiction"])->value();
+    OldStateOfJurisdiction     = NewStateOfJurisdiction;
+    NewDeathBenefitOption      = 
exact_cast<mce_dbopt_7702>(z["NewDbo"])->value();
+    OldDeathBenefitOption      = 
exact_cast<mce_dbopt_7702>(z["OldDbo"])->value();
+    NewBenefitAmount           = 
exact_cast<tnr_nonnegative_double>(z["NewDeathBft"])->value();
+    OldBenefitAmount           = 
exact_cast<tnr_nonnegative_double>(z["OldDeathBft"])->value();
+    NewSpecifiedAmount         = 
exact_cast<tnr_nonnegative_double>(z["NewSpecAmt"])->value();
+    OldSpecifiedAmount         = 
exact_cast<tnr_nonnegative_double>(z["OldSpecAmt"])->value();
+    NewTermAmount              = 
exact_cast<tnr_nonnegative_double>(z["NewQabTermAmt"])->value();
+    OldTermAmount              = 
exact_cast<tnr_nonnegative_double>(z["OldQabTermAmt"])->value();
+    NewWaiverOfPremiumInForce  = false;
+    OldWaiverOfPremiumInForce  = false;
+    NewPremiumsWaived          = false;
+    OldPremiumsWaived          = false;
+    NewWaiverOfPremiumRating   = "None";
+    OldWaiverOfPremiumRating   = "None";
+    NewAccidentalDeathInForce  = false;
+    OldAccidentalDeathInForce  = false;
+    NewAccidentalDeathRating   = "None";
+    OldAccidentalDeathRating   = "None";
+    NewTableRating             = 
exact_cast<mce_table_rating>(z["NewSubstandardTable"])->value();
+    OldTableRating             = 
exact_cast<mce_table_rating>(z["OldSubstandardTable"])->value();
+    NewPermanentFlatAmount0    = 0.0;
+    OldPermanentFlatAmount0    = 0.0;
+    NewPermanentFlatAmount1    = 0.0;
+    OldPermanentFlatAmount1    = 0.0;
+    NewPermanentFlatAmount2    = 0.0;
+    OldPermanentFlatAmount2    = 0.0;
+    NewTemporaryFlatAmount0    = 0.0;
+    OldTemporaryFlatAmount0    = 0.0;
+    NewTemporaryFlatAmount1    = 0.0;
+    OldTemporaryFlatAmount1    = 0.0;
+    NewTemporaryFlatAmount2    = 0.0;
+    OldTemporaryFlatAmount2    = 0.0;
+    NewTemporaryFlatDuration0  = 0;
+    OldTemporaryFlatDuration0  = 0;
+    NewTemporaryFlatDuration1  = 0;
+    OldTemporaryFlatDuration1  = 0;
+    NewTemporaryFlatDuration2  = 0;
+    OldTemporaryFlatDuration2  = 0;
+    LMI_ASSERT(z["OldTarget"] == z["NewTarget"]);
+    TargetPremium              = 
exact_cast<tnr_nonnegative_double>(z["NewTarget"])->value();
+}
+
+Server7702Input::operator gpt_input() const
+{
+    gpt_input z;
+
+    z["ContractNumber"]        = UniqueIdentifier;
+    z["InforceYear"]           = value_cast<std::string>(Duration);
+    // For class gpt_input, 'InforceAsOfDate' is primary by default,
+    // so it needs to be set here.
+    calendar_date d = add_years
+        (exact_cast<tnr_date>(z["EffectiveDate"])->value()
+        ,exact_cast<tnr_duration>(z["InforceYear"])->value()
+        ,true
+        );
+    z["InforceAsOfDate"] = value_cast<std::string>(d);
+    z["PremsPaidDecrement"]    = 
value_cast<std::string>(GrossNontaxableWithdrawal);
+    z["Payment"]               = value_cast<std::string>(Premium);
+    z["ProductName"]           = ProductName;
+    z["GroupUnderwritingType"] = UnderwritingBasis.str();
+    z["InforceGlp"]            = 
value_cast<std::string>(OldGuidelineLevelPremium);
+    z["InforceGsp"]            = 
value_cast<std::string>(OldGuidelineSinglePremium);
+    z["IssueAge"]              = value_cast<std::string>(NewIssueAge);
+    LMI_ASSERT(OldIssueAge == NewIssueAge);
+    z["NewGender"]             = NewGender.str();
+    z["OldGender"]             = OldGender.str();
+    z["NewSmoking"]            = NewSmoker.str();
+    z["OldSmoking"]            = OldSmoker.str();
+    z["UnderwritingClass"]     = NewUnderwritingClass.str();
+    LMI_ASSERT(OldUnderwritingClass == NewUnderwritingClass);
+    z["StateOfJurisdiction"]   = NewStateOfJurisdiction.str();
+    LMI_ASSERT(OldStateOfJurisdiction == NewStateOfJurisdiction);
+    z["NewDbo"]                = NewDeathBenefitOption.str();
+    z["OldDbo"]                = OldDeathBenefitOption.str();
+    z["NewDeathBft"]           = value_cast<std::string>(NewBenefitAmount);
+    z["OldDeathBft"]           = value_cast<std::string>(OldBenefitAmount);
+    z["NewSpecAmt"]            = value_cast<std::string>(NewSpecifiedAmount);
+    z["OldSpecAmt"]            = value_cast<std::string>(OldSpecifiedAmount);
+    // It's unclear whether Server7702Input's [Old|New]TermAmount
+    // members were intended to represent an integrated term rider or
+    // a QAB. That doesn't really matter, because these amounts were
+    // never used in the old GPT calculations.
+    z["NewQabTermAmt"]         = value_cast<std::string>(NewTermAmount);
+    z["OldQabTermAmt"]         = value_cast<std::string>(OldTermAmount);
+    z["NewSubstandardTable"]   = NewTableRating.str();
+    z["OldSubstandardTable"]   = OldTableRating.str();
+    // 'TargetPremium' should have had "old" and "new" variants.
+    z["OldTarget"]             = value_cast<std::string>(TargetPremium);
+    z["NewTarget"]             = value_cast<std::string>(TargetPremium);
+
+    return z;
+}
+
 //============================================================================
 std::istream& operator>> (std::istream& is, Server7702Output& z)
 {

Modified: lmi/trunk/ihs_server7702io.hpp
===================================================================
--- lmi/trunk/ihs_server7702io.hpp      2014-06-21 16:19:26 UTC (rev 5906)
+++ lmi/trunk/ihs_server7702io.hpp      2014-06-22 13:52:14 UTC (rev 5907)
@@ -26,6 +26,7 @@
 
 #include "config.hpp"
 
+#include "gpt_input.hpp"
 #include "mc_enum.hpp"
 #include "mc_enum_types.hpp"
 
@@ -34,6 +35,10 @@
 
 struct Server7702Input
 {
+    Server7702Input();
+    Server7702Input(gpt_input const&);
+    operator gpt_input() const;
+
     std::string      UniqueIdentifier;           //  an arbitrary string that 
identifies the contract uniquely. The contract number may be used, but remember 
that the server maintains no database of actual contracts.
     bool             IsIssuedToday;              //  true if the contract is 
issued or reissued today. Used to prevent adjustable events at issue, which 
must not occur.
     int              Duration;                   //  number of policy years 
completed since issue (so it starts at 0).




reply via email to

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