lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master b2e4af3 08/15: Make 'IsSinglePremium' enumera


From: Greg Chicares
Subject: [lmi-commits] [lmi] master b2e4af3 08/15: Make 'IsSinglePremium' enumerative
Date: Tue, 27 Aug 2019 13:50:19 -0400 (EDT)

branch: master
commit b2e4af394c23f676840cf18bc6f3ace741b8641f
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Make 'IsSinglePremium' enumerative
---
 dbdict.cpp                 |  1 +
 dbnames.xpp                |  2 +-
 ledger_invariant.cpp       |  6 ++++--
 oecumenic_enumerations.hpp | 20 ++++++++++++++++++++
 pdf_command_wx.cpp         |  3 ++-
 5 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/dbdict.cpp b/dbdict.cpp
index a093124..c1c7821 100644
--- a/dbdict.cpp
+++ b/dbdict.cpp
@@ -566,6 +566,7 @@ void DBDictionary::InitDB()
     Add({DB_MaxWdDed            , mce_twelve_times_last});
     Add({DB_MinPremType         , oe_monthly_deduction});
     Add({DB_TgtPremType         , oe_monthly_deduction});
+    Add({DB_IsSinglePremium     , oe_flexible_premium});
     Add({DB_DeductionMethod     , oe_proportional});
     Add({DB_DeductionAcct       , oe_prefer_general_account});
     Add({DB_DistributionMethod  , oe_proportional});
diff --git a/dbnames.xpp b/dbnames.xpp
index 8df7b12..8123921 100644
--- a/dbnames.xpp
+++ b/dbnames.xpp
@@ -311,7 +311,7 @@
 {DB_TgtPremFixedAtIssue,DB_Topic_Premiums,"TgtPremFixedAtIssue","Target 
premium set forever at issue: 0=no, 1=yes",}, \
 {DB_TgtPremIgnoreSubstd,DB_Topic_Premiums,"TgtPremIgnoreSubstd","Target 
premium ignores substandard rating: 0=no, 1=yes",}, \
 {DB_MinPmt,DB_Topic_Premiums,"MinPmt","Minimum initial payment [not 
implemented]",}, \
-{DB_IsSinglePremium,DB_Topic_Premiums,"IsSinglePremium","Single-premium 
product: 0=no, 1=yes",}, \
+{DB_IsSinglePremium,DB_Topic_Premiums,"IsSinglePremium","Premium flexibility: 
0=flexible, 1=single, 2=modified single premium",}, \
 {DB_Topic_SecondaryGuarantees,DB_FIRST,"Secondary 
guarantees","Secondary-guarantee options and parameters",}, \
 {DB_NoLapseMinDur,DB_Topic_SecondaryGuarantees,"NoLapseMinDur","Minimum number 
of years no-lapse guarantee remains in effect if premium requirement 
satisfied",}, \
 {DB_NoLapseMinAge,DB_Topic_SecondaryGuarantees,"NoLapseMinAge","Minimum age to 
which no-lapse guarantee remains in effect if premium requirement satisfied",}, 
\
diff --git a/ledger_invariant.cpp b/ledger_invariant.cpp
index 9b3b332..2291ba3 100644
--- a/ledger_invariant.cpp
+++ b/ledger_invariant.cpp
@@ -31,6 +31,7 @@
 #include "ledger.hpp"                   // for CalculateIrrs()
 #include "ledger_variant.hpp"           // for CalculateIrrs()
 #include "mc_enum_aux.hpp"              // mc_e_vector_to_string_vector()
+#include "oecumenic_enumerations.hpp"
 
 #include <algorithm>                    // max(), min()
 #include <ostream>
@@ -481,7 +482,7 @@ void LedgerInvariant::Init()
     SupplementalReport  = true;
     NoLongerIssued      = false;
     AllowGroupQuote     = true;
-    IsSinglePremium     = true;
+    IsSinglePremium     = oe_flexible_premium;
 
     irr_precision_      = 0;
     irr_initialized_    = false;
@@ -820,7 +821,8 @@ LedgerInvariant& LedgerInvariant::PlusEq(LedgerInvariant 
const& a_Addend)
     SplitMinPrem       = SplitMinPrem || a_Addend.SplitMinPrem ;
 
     ErNotionallyPaysTerm = ErNotionallyPaysTerm || 
a_Addend.ErNotionallyPaysTerm;
-    IsSinglePremium    = IsSinglePremium && a_Addend.IsSinglePremium;
+
+    IsSinglePremium        = std::max(a_Addend.IsSinglePremium      , 
IsSinglePremium      );
 
     MaxAnnGuarLoanSpread   = std::max(a_Addend.MaxAnnGuarLoanSpread , 
MaxAnnGuarLoanSpread );
     MaxAnnCurrLoanDueRate  = std::max(a_Addend.MaxAnnCurrLoanDueRate, 
MaxAnnCurrLoanDueRate);
diff --git a/oecumenic_enumerations.hpp b/oecumenic_enumerations.hpp
index ba19cbc..4691c11 100644
--- a/oecumenic_enumerations.hpp
+++ b/oecumenic_enumerations.hpp
@@ -126,6 +126,26 @@ enum oenum_mvc_dv_rc
     ,oe_mvc_dv_changed
     };
 
+/// A regulatory association defines various types of life insurance here:
+///   
https://www.insurancecompact.org/rulemaking_records/adopted_uniform_standards.pdf
+/// and "modified single premium" in particular here:
+///   
https://www.insurancecompact.org/rulemaking_records/070930_mod_sp_adjustable.pdf
+/// but lists no non-"modified" category for single-premium UL.
+///
+/// At least one state apparently concludes that all single-premium UL
+/// must be captioned as "Modified". Use
+///   oe_modified_single_premium
+/// for states that require this "Modified" caption, and
+///   oe_plain_single_premium
+/// for states that allow captioning UL as "Single Premium" without
+/// the word "Modified".
+
+enum oenum_premium_flexibility
+    {oe_flexible_premium
+    ,oe_plain_single_premium
+    ,oe_modified_single_premium
+    };
+
 /// Used only for backward compatibility with old versions that didn't
 /// distinguish state of jurisdiction from premium-tax state.
 
diff --git a/pdf_command_wx.cpp b/pdf_command_wx.cpp
index b14801d..5da5b6e 100644
--- a/pdf_command_wx.cpp
+++ b/pdf_command_wx.cpp
@@ -2243,7 +2243,8 @@ class pdf_illustration_naic : public pdf_illustration
 
         add_variable
             ("SinglePremium"
-            ,bourn_cast<bool>(invar.IsSinglePremium)
+            ,     oe_plain_single_premium    == invar.IsSinglePremium
+               || oe_modified_single_premium == invar.IsSinglePremium
             );
 
         // Variable representing the premium payment frequency with the



reply via email to

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