[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [5549] Initialize base for specified-amount load from new
From: |
Greg Chicares |
Subject: |
[lmi-commits] [5549] Initialize base for specified-amount load from new input field |
Date: |
Wed, 22 Aug 2012 11:38:17 +0000 |
Revision: 5549
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5549
Author: chicares
Date: 2012-08-22 11:38:16 +0000 (Wed, 22 Aug 2012)
Log Message:
-----------
Initialize base for specified-amount load from new input field
Modified Paths:
--------------
lmi/trunk/cell.rnc
lmi/trunk/cell.xsd
lmi/trunk/ihs_avmly.cpp
lmi/trunk/input_xml_io.cpp
Modified: lmi/trunk/cell.rnc
===================================================================
--- lmi/trunk/cell.rnc 2012-08-21 13:07:14 UTC (rev 5548)
+++ lmi/trunk/cell.rnc 2012-08-22 11:38:16 UTC (rev 5549)
@@ -253,7 +253,8 @@
element InforceSeparateAccountValue {nonnegative_double}
,## Inforce 7702A seven-pay premium.
element InforceSevenPayPremium {nonnegative_double}
- ,## Amount on which specified-amount load is charged.
+ ,## Amount on which specified-amount load is charged, with due
+ ## regard to term rider.
element InforceSpecAmtLoadBase {nonnegative_double}
,## Inforce tax basis.
element InforceTaxBasis {xsd:double}
@@ -398,8 +399,7 @@
,## Parameter to be solved for.
element SolveType {solve_type}
,## Specified amount for each policy year since issue. Inforce
- ## extracts require only a scalar representing the current
- ## specified amount.
+ ## extracts require only the current scalar value.
element SpecifiedAmount {specamt_sequence}
,## [obsolete]
element SpecifiedAmountFromIssue {nonnegative_double}
Modified: lmi/trunk/cell.xsd
===================================================================
--- lmi/trunk/cell.xsd 2012-08-21 13:07:14 UTC (rev 5548)
+++ lmi/trunk/cell.xsd 2012-08-22 11:38:16 UTC (rev 5549)
@@ -770,7 +770,8 @@
</xs:element>
<xs:element name="InforceSpecAmtLoadBase" type="nonnegative_double">
<xs:annotation>
- <xs:documentation>Amount on which specified-amount load is
charged.</xs:documentation>
+ <xs:documentation>Amount on which specified-amount load is charged, with
due
+regard to term rider.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="InforceTaxBasis" type="xs:double">
@@ -1104,8 +1105,7 @@
<xs:element name="SpecifiedAmount" type="xs:string">
<xs:annotation>
<xs:documentation>Specified amount for each policy year since issue.
Inforce
-extracts require only a scalar representing the current
-specified amount.</xs:documentation>
+extracts require only the current scalar value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SpecifiedAmountFromIssue" type="nonnegative_double">
Modified: lmi/trunk/ihs_avmly.cpp
===================================================================
--- lmi/trunk/ihs_avmly.cpp 2012-08-21 13:07:14 UTC (rev 5548)
+++ lmi/trunk/ihs_avmly.cpp 2012-08-22 11:38:16 UTC (rev 5549)
@@ -1552,38 +1552,26 @@
{
// Subtract monthly policy fee and per K charge from account value.
- // These assignments must happen every month.
-
- // Set base for per K load at issue. Other approaches could be imagined.
+ // Set base for specified-amount load. Usually, this represents
+ // the cost of underwriting, so the amount is determined at issue
+ // and includes term rider.
if(Year == InforceYear && Month == InforceMonth)
{
if(!yare_input_.TermRider)
{
- HOPEFULLY(0.0 == InvariantValues().TermSpecAmt[0]);
+ LMI_ASSERT(0.0 == InvariantValues().TermSpecAmt[0]);
}
- double z;
- if(0 == Year && 0 == Month)
- {
- z = InvariantValues().TermSpecAmt[0] +
InvariantValues().SpecAmt[0];
- }
- else
- {
- // TAXATION !! We could at least change this in xrc help elements:
- // USER !! User documentation should explain that this
- // includes any 7702-integrated term rider.
- //
- // Some products have loads that depend on the initial
- // specified amount, which probably includes term; if it
- // doesn't, then a new input field would need to be added.
- //
- // TAXATION !! Is this really desirable? INPUT !! Should we
- // instead capture specamt as of issue date for this purpose?
- z = yare_input_.SpecifiedAmount.front();
- }
- SpecAmtLoadBase = std::max(z, NetPmts[Month] * YearsCorridorFactor);
+ SpecAmtLoadBase =
+ (0 == Year && 0 == Month)
+ ? InvariantValues().TermSpecAmt[0] + InvariantValues().SpecAmt[0]
+ : yare_input_.InforceSpecAmtLoadBase
+ ;
+ SpecAmtLoadBase = std::max(SpecAmtLoadBase, NetPmts[Month] *
YearsCorridorFactor);
SpecAmtLoadBase = std::min(SpecAmtLoadBase, SpecAmtLoadLimit);
}
+ // These assignments must happen every month.
+
MonthsPolicyFees = YearsMonthlyPolicyFee;
if(0 == Month)
{
Modified: lmi/trunk/input_xml_io.cpp
===================================================================
--- lmi/trunk/input_xml_io.cpp 2012-08-21 13:07:14 UTC (rev 5548)
+++ lmi/trunk/input_xml_io.cpp 2012-08-22 11:38:16 UTC (rev 5549)
@@ -525,8 +525,10 @@
if(file_version < 7)
{
// Prior to version 7, 'InforceCumulativePayments' was used
- // for no-lapse, GPT, and ROP, so set them all equal here for
- // backward compatibility.
+ // for no-lapse, GPT, and ROP, so set them all equal here
+ // for backward compatibility. This matters little for new
+ // business, but is so cheap that it may as well be done
+ // unconditionally.
InforceCumulativeGptPremiumsPaid =
InforceCumulativeNoLapsePayments.value();
InforceCumulativeRopPayments =
InforceCumulativeNoLapsePayments.value();
}
@@ -573,6 +575,15 @@
}
}
}
+
+ if(file_version < 7 && EffectiveDate.value() != InforceAsOfDate.value())
+ {
+ // Version 7 introduced 'InforceSpecAmtLoadBase'; previously,
+ // the first element of 'SpecamtHistory' had been used in its
+ // place, which would have disregarded any term rider.
+ RealizeSpecifiedAmount();
+ InforceSpecAmtLoadBase = TermRiderAmount.value() +
SpecifiedAmountRealized_[0].value();
+ }
}
void Input::redintegrate_ad_terminum()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5549] Initialize base for specified-amount load from new input field,
Greg Chicares <=