[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [6431] Conditionalize compensation calculation,
Greg Chicares <=