lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master 37944d8 5/6: Add database entities for a mini


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 37944d8 5/6: Add database entities for a minimum single premium
Date: Thu, 22 Apr 2021 11:57:26 -0400 (EDT)

branch: master
commit 37944d89d144f37f574c6447244d4615684c4e2a
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Add database entities for a minimum single premium
    
    Single-premium sales almost always involve a chosen dollar amount of
    premium, and a specified amount calculated as a function of that chosen
    premium: the corresponding CVAT corridor, or perhaps some percentage
    such as 95% of corridor.
    
    For example, if the premium is $10000 and the corridor factor is 2.02,
    then the specified amount would be entered as "corridor" and lmi would
    realize that strategy as $20200.
    
    But what happens if the minimum specified amount is, say, $50000? In the
    example above, lmi increases the specified amount to $50000...and leaves
    the customer's premium alone, because it would be astonishing to demand
    $20200 when only $10000 was offered. However, this means that the single
    premium is inadequate for the (forced) minimum specified amount, so the
    illustration lapses early. It would be reasonable to conclude that the
    minimum policy size should be stated in terms of premium rather than
    specified amount, and amend the policy specifications accordingly.
    
    If policy specifications are deemed to be immutable, the only reasonable
    thing lmi can do is refuse to produce an illustration. Therefore, added
    two database entities to support such a refusal.
    
    Some multipliers default to unity because zero would be perilous: e.g.,
    setting DB_GuarCoiMultiplier to anything less than one is probably a
    mistake; to zero, a catastrophe. However, for DB_MinSinglePremiumMult,
    the default is zero because there is no higher a priori minimum.
---
 db_sort.sed                | 2 ++
 dbdict.cpp                 | 3 +++
 dbdict.hpp                 | 2 ++
 dbnames.hpp                | 2 ++
 dbnames.xpp                | 2 ++
 oecumenic_enumerations.hpp | 4 ++++
 6 files changed, 15 insertions(+)

diff --git a/db_sort.sed b/db_sort.sed
index 74d4848..96735d7 100644
--- a/db_sort.sed
+++ b/db_sort.sed
@@ -307,6 +307,8 @@
 /DB_TgtPremIgnoreSubstd\>/       s/^/M010/
 /DB_MinPmt\>/                    s/^/M011/
 /DB_IsSinglePremium\>/           s/^/M012/
+/DB_MinSinglePremiumType\>/      s/^/M013/
+/DB_MinSinglePremiumMult\>/      s/^/M014/
 # DB_Topic_SecondaryGuarantees
 /DB_NoLapseMinDur\>/             s/^/N001/
 /DB_NoLapseMinAge\>/             s/^/N002/
diff --git a/dbdict.cpp b/dbdict.cpp
index b6d5737..8bd7635 100644
--- a/dbdict.cpp
+++ b/dbdict.cpp
@@ -381,6 +381,8 @@ void DBDictionary::ascribe_members()
     ascribe("TgtPremIgnoreSubstd"       , &DBDictionary::TgtPremIgnoreSubstd   
    );
     ascribe("MinPmt"                    , &DBDictionary::MinPmt                
    );
     ascribe("IsSinglePremium"           , &DBDictionary::IsSinglePremium       
    );
+    ascribe("MinSinglePremiumType"      , &DBDictionary::MinSinglePremiumType  
    );
+    ascribe("MinSinglePremiumMult"      , &DBDictionary::MinSinglePremiumMult  
    );
     ascribe("NoLapseMinDur"             , &DBDictionary::NoLapseMinDur         
    );
     ascribe("NoLapseMinAge"             , &DBDictionary::NoLapseMinAge         
    );
     ascribe("NoLapseUnratedOnly"        , &DBDictionary::NoLapseUnratedOnly    
    );
@@ -733,6 +735,7 @@ void DBDictionary::InitDB()
     Add({DB_MinPremType         , oe_monthly_deduction});
     Add({DB_TgtPremType         , oe_monthly_deduction});
     Add({DB_IsSinglePremium     , oe_flexible_premium});
+    Add({DB_MinSinglePremiumType, oe_no_min_single_premium});
     Add({DB_DeductionMethod     , oe_proportional});
     Add({DB_DeductionAcct       , oe_prefer_general_account});
     Add({DB_DistributionMethod  , oe_proportional});
diff --git a/dbdict.hpp b/dbdict.hpp
index 54d8c3a..1bdd844 100644
--- a/dbdict.hpp
+++ b/dbdict.hpp
@@ -362,6 +362,8 @@ class LMI_SO DBDictionary
     database_entity TgtPremIgnoreSubstd       ;
     database_entity MinPmt                    ;
     database_entity IsSinglePremium           ;
+    database_entity MinSinglePremiumType      ;
+    database_entity MinSinglePremiumMult      ;
     database_entity NoLapseMinDur             ;
     database_entity NoLapseMinAge             ;
     database_entity NoLapseUnratedOnly        ;
diff --git a/dbnames.hpp b/dbnames.hpp
index ec29017..776afdb 100644
--- a/dbnames.hpp
+++ b/dbnames.hpp
@@ -469,6 +469,8 @@ enum e_database_key
         ,DB_TgtPremIgnoreSubstd
         ,DB_MinPmt
         ,DB_IsSinglePremium
+        ,DB_MinSinglePremiumType
+        ,DB_MinSinglePremiumMult
 
     ,DB_Topic_SecondaryGuarantees
 
diff --git a/dbnames.xpp b/dbnames.xpp
index 36b2ad2..10d20bb 100644
--- a/dbnames.xpp
+++ b/dbnames.xpp
@@ -313,6 +313,8 @@
 {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","Premium flexibility: 
0=flexible, 1=single, 2=modified single premium, 3=limited flexible premium",}, 
\
+{DB_MinSinglePremiumType,DB_Topic_Premiums,"MinSinglePremiumType","Minimum 
single premium: 0=none, 1=multiple of corridor AV",}, \
+{DB_MinSinglePremiumMult,DB_Topic_Premiums,"MinSinglePremiumMult","Minimum 
single premium as a multiple of corridor: e.g., 1.0 for 100% of corridor AV",}, 
\
 {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/oecumenic_enumerations.hpp b/oecumenic_enumerations.hpp
index 7cff113..81f1b43 100644
--- a/oecumenic_enumerations.hpp
+++ b/oecumenic_enumerations.hpp
@@ -153,6 +153,10 @@ enum oenum_premium_flexibility
     ,oe_limited_flexible_premium
     };
 
+enum oenum_min_single_prem_type
+    {oe_no_min_single_premium
+    ,oe_min_single_premium_corr_mult
+    };
 /// Used only for backward compatibility with old versions that didn't
 /// distinguish state of jurisdiction from premium-tax state.
 



reply via email to

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