lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [6431] Conditionalize compensation calculation


From: Greg Chicares
Subject: [lmi-commits] [6431] Conditionalize compensation calculation
Date: Mon, 07 Dec 2015 12:05:30 +0000

Revision: 6431
          http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=6431
Author:   chicares
Date:     2015-12-07 12:05:28 +0000 (Mon, 07 Dec 2015)
Log Message:
-----------
Conditionalize compensation calculation

Modified Paths:
--------------
    lmi/trunk/ChangeLog
    lmi/trunk/basic_values.hpp
    lmi/trunk/dbdict.cpp
    lmi/trunk/dbdict.hpp
    lmi/trunk/dbnames.hpp
    lmi/trunk/dbnames.xpp
    lmi/trunk/ihs_acctval.cpp
    lmi/trunk/ihs_basicval.cpp

Modified: lmi/trunk/ChangeLog
===================================================================
--- lmi/trunk/ChangeLog 2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/ChangeLog 2015-12-07 12:05:28 UTC (rev 6431)
@@ -37657,3 +37657,20 @@
   product_data.hpp
 Add 'InitMinPrem' and 'GrossPremiumFootnote' fields.
 
+20151207T1118Z <address@hidden> [458]
+
+  ihs_avmly.cpp
+  ihs_mortal.cpp
+Improve documentation.
+
+20151207T1205Z <address@hidden> [456]
+
+  basic_values.hpp
+  dbdict.cpp
+  dbdict.hpp
+  dbnames.hpp
+  dbnames.xpp
+  ihs_acctval.cpp
+  ihs_basicval.cpp
+Conditionalize compensation calculation.
+

Modified: lmi/trunk/basic_values.hpp
===================================================================
--- lmi/trunk/basic_values.hpp  2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/basic_values.hpp  2015-12-07 12:05:28 UTC (rev 6431)
@@ -362,6 +362,7 @@
     bool                    NoLapseAlwaysActive;
     std::vector<double>     DBDiscountRate;
 
+    bool                    CalculateComp;
     std::vector<double>     AssetComp;
     std::vector<double>     CompTarget;
     std::vector<double>     CompExcess;

Modified: lmi/trunk/dbdict.cpp
===================================================================
--- lmi/trunk/dbdict.cpp        2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/dbdict.cpp        2015-12-07 12:05:28 UTC (rev 6431)
@@ -380,6 +380,7 @@
     ascribe("EePremAcct"          , &DBDictionary::EePremAcct          );
     ascribe("ErPremMethod"        , &DBDictionary::ErPremMethod        );
     ascribe("ErPremAcct"          , &DBDictionary::ErPremAcct          );
+    ascribe("CalculateComp"       , &DBDictionary::CalculateComp       );
     ascribe("CompTarget"          , &DBDictionary::CompTarget          );
     ascribe("CompExcess"          , &DBDictionary::CompExcess          );
     ascribe("CompChargeback"      , &DBDictionary::CompChargeback      );
@@ -868,6 +869,7 @@
     Add(database_entity(DB_TaxVxQ              , 0.0));
     Add(database_entity(DB_DeficVxQ            , 0.0));
     Add(database_entity(DB_SnflQ               , 0.0));
+    Add(database_entity(DB_CalculateComp       , false));
     Add(database_entity(DB_CompTarget          , 0.0));
     Add(database_entity(DB_CompExcess          , 0.0));
     Add(database_entity(DB_CompChargeback      , 0.0));

Modified: lmi/trunk/dbdict.hpp
===================================================================
--- lmi/trunk/dbdict.hpp        2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/dbdict.hpp        2015-12-07 12:05:28 UTC (rev 6431)
@@ -356,6 +356,7 @@
     database_entity EePremAcct          ;
     database_entity ErPremMethod        ;
     database_entity ErPremAcct          ;
+    database_entity CalculateComp       ;
     database_entity CompTarget          ;
     database_entity CompExcess          ;
     database_entity CompChargeback      ;

Modified: lmi/trunk/dbnames.hpp
===================================================================
--- lmi/trunk/dbnames.hpp       2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/dbnames.hpp       2015-12-07 12:05:28 UTC (rev 6431)
@@ -474,6 +474,7 @@
 
     ,DB_Topic_Compensation
 
+        ,DB_CalculateComp
         ,DB_CompTarget
         ,DB_CompExcess
         ,DB_CompChargeback

Modified: lmi/trunk/dbnames.xpp
===================================================================
--- lmi/trunk/dbnames.xpp       2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/dbnames.xpp       2015-12-07 12:05:28 UTC (rev 6431)
@@ -301,6 +301,7 @@
 {DB_ErPremMethod,DB_Topic_Allocations,"ErPremMethod","Apportionment of 
employer premiums between general and separate accounts: 0=follow input fund 
allocation, 1=credit 'preferred' account",}, \
 {DB_ErPremAcct,DB_Topic_Allocations,"ErPremAcct","Preferred account for 
employer premiums if input overridden: 0=general account, 1=separate 
account",}, \
 {DB_Topic_Compensation,DB_FIRST,"Compensation","Commissions, asset-based 
compensation, and chargebacks",}, \
+{DB_CalculateComp,DB_Topic_Compensation,"CalculateComp","Calculate 
compensation [not fully implemented]",}, \
 {DB_CompTarget,DB_Topic_Compensation,"CompTarget","Producer-only compensation 
on premium up to target",}, \
 {DB_CompExcess,DB_Topic_Compensation,"CompExcess","Producer-only compensation 
on premium in excess of target",}, \
 {DB_CompChargeback,DB_Topic_Compensation,"CompChargeback","Compensation 
chargeback for early termination",}, \

Modified: lmi/trunk/ihs_acctval.cpp
===================================================================
--- lmi/trunk/ihs_acctval.cpp   2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/ihs_acctval.cpp   2015-12-07 12:05:28 UTC (rev 6431)
@@ -1644,24 +1644,32 @@
 // TODO ?? Not yet implemented.
 //        InvariantValues().NaarForceout[Year] = 
InvariantValues().ErGrossPmt[Year];
 
-        // TODO ?? This should also incorporate:
-        //   asset-tiered compensation
-        //   input 'extra' compensation (on premium and assets)
-        double commission =
-                InvariantValues().GrossPmt[Year]
-            -   TieredGrossToNet
-                    (InvariantValues().GrossPmt[Year]
-                    ,AnnualTargetPrem
-                    ,CompTarget[Year]
-                    ,CompExcess[Year]
-                    )
-            ;
-        InvariantValues().ProducerCompensation[Year] =
-//                AssetComp[Year] * AVSepAcct // original
-                AssetComp[Year] * (AVSepAcct + AVGenAcct) // workaround
-// TODO ?? Rethink this.
-            +   commission
-            ;
+        // Producer compensation is complicated, and generally varies
+        // by producer type (which is unknown to lmi). It was probably
+        // a mistake to attempt to calculate it in "simple" situations
+        // because the result is incorrect otherwise.
+        if(CalculateComp && yare_input_.EffectiveDate == 
yare_input_.InforceAsOfDate)
+            {
+            // This should also incorporate:
+            //   asset-tiered compensation
+            //   input 'extra' compensation (on premium and assets)
+            double commission =
+                    InvariantValues().GrossPmt[Year]
+                -   TieredGrossToNet
+                        (InvariantValues().GrossPmt[Year]
+                        ,AnnualTargetPrem
+                        ,CompTarget[Year]
+                        ,CompExcess[Year]
+                        )
+                ;
+            InvariantValues().ProducerCompensation[Year] =
+// This would normally be expected:
+//                  AssetComp[Year] * AVSepAcct
+// but some obsolete product needed this instead:
+                    AssetComp[Year] * (AVSepAcct + AVGenAcct)
+                +   commission
+                ;
+            }
         }
 }
 

Modified: lmi/trunk/ihs_basicval.cpp
===================================================================
--- lmi/trunk/ihs_basicval.cpp  2015-12-07 11:18:31 UTC (rev 6430)
+++ lmi/trunk/ihs_basicval.cpp  2015-12-07 12:05:28 UTC (rev 6431)
@@ -703,6 +703,7 @@
     assign(DBDiscountRate, 1.0 + DBDiscountRate);
     assign(DBDiscountRate, 1.0 / DBDiscountRate);
 
+    CalculateComp       = Database_->Query(DB_CalculateComp        );
     Database_->Query(AssetComp , DB_AssetComp);
     Database_->Query(CompTarget, DB_CompTarget);
     Database_->Query(CompExcess, DB_CompExcess);




reply via email to

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