[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master f9ddc04 5/6: Do not depict a scalar as a vect
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master f9ddc04 5/6: Do not depict a scalar as a vector |
Date: |
Sun, 30 Sep 2018 17:07:13 -0400 (EDT) |
branch: master
commit f9ddc04ef380f3163d66494f03eef3bfd718f0f3
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Do not depict a scalar as a vector
The rate of interest due on loans can vary by year. The old XSL-FO
system depicted it in a column that actually suppressed any variation,
replicating the initial value instead. That error is fixed by this
commit, only for the new PDF code (the old will soon be expunged). See:
https://lists.nongnu.org/archive/html/lmi/2018-02/msg00100.html
---
ledger_evaluator.cpp | 13 ++++---------
ledger_invariant.cpp | 23 ++++++++++++++++++-----
ledger_invariant.hpp | 1 +
ledger_pdf_generator_wx.cpp | 4 ++--
4 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/ledger_evaluator.cpp b/ledger_evaluator.cpp
index 450bb3f..deed0aa 100644
--- a/ledger_evaluator.cpp
+++ b/ledger_evaluator.cpp
@@ -46,7 +46,7 @@
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/path.hpp>
-#include <algorithm> // fill(), transform()
+#include <algorithm> // transform()
#include <functional> // minus
#include <map>
#include <unordered_map>
@@ -186,6 +186,7 @@ ledger_evaluator Ledger::make_evaluator() const
title_map["AnnGAIntRate_Guaranteed" ] = "Guar Ann\nGen Acct\nInt
Rate";
title_map["AnnHoneymoonValueRate_Current" ] = "Curr
Ann\nHoneymoon\nValue Rate";
title_map["AnnHoneymoonValueRate_Guaranteed"] = "Guar
Ann\nHoneymoon\nValue Rate";
+ title_map["AnnLoanDueRate" ] = "Loan\nInt Rate";
title_map["AnnPostHoneymoonRate_Current" ] = "Curr
Post\nHoneymoon\nRate";
title_map["AnnPostHoneymoonRate_Guaranteed" ] = "Guar
Post\nHoneymoon\nRate";
title_map["AnnSAIntRate_Current" ] = "Curr Ann\nSep Acct\nInt
Rate";
@@ -322,6 +323,7 @@ ledger_evaluator Ledger::make_evaluator() const
mask_map ["AnnGAIntRate_Guaranteed" ] = "99.99%";
mask_map ["AnnHoneymoonValueRate_Current" ] = "99.99%";
mask_map ["AnnHoneymoonValueRate_Guaranteed"] = "99.99%";
+ mask_map ["AnnLoanDueRate" ] = "99.99%";
mask_map ["AnnPostHoneymoonRate_Current" ] = "99.99%";
mask_map ["AnnPostHoneymoonRate_Guaranteed" ] = "99.99%";
mask_map ["AnnSAIntRate_Current" ] = "99.99%";
@@ -573,6 +575,7 @@ ledger_evaluator Ledger::make_evaluator() const
// >
format_map["AnnGAIntRate" ] = f4;
format_map["AnnHoneymoonValueRate" ] = f4;
+ format_map["AnnLoanDueRate" ] = f4;
format_map["AnnPostHoneymoonRate" ] = f4;
format_map["AnnSAIntRate" ] = f4;
format_map["CorpTaxBracket" ] = f4;
@@ -732,14 +735,6 @@ ledger_evaluator Ledger::make_evaluator() const
vectors["AttainedAge"] = &AttainedAge;
vectors["PolicyYear" ] = &PolicyYear ;
- std::vector<double> InitAnnLoanDueRate(max_duration);
- std::fill
- (InitAnnLoanDueRate.begin()
- ,InitAnnLoanDueRate.end()
- ,ledger_invariant_->GetInitAnnLoanDueRate()
- );
- vectors["InitAnnLoanDueRate"] = &InitAnnLoanDueRate;
-
vectors["InforceLives"] = &ledger_invariant_->InforceLives;
vectors["FundNumbers" ] = &ledger_invariant_->FundNumbers ;
diff --git a/ledger_invariant.cpp b/ledger_invariant.cpp
index 0c1bfc3..1ddd5ba 100644
--- a/ledger_invariant.cpp
+++ b/ledger_invariant.cpp
@@ -123,6 +123,7 @@ void LedgerInvariant::Alloc(int len)
OtherVectors ["AddonCompOnAssets" ] = &AddonCompOnAssets ;
OtherVectors ["AddonCompOnPremium" ] = &AddonCompOnPremium ;
OtherVectors ["CorridorFactor" ] = &CorridorFactor ;
+ OtherVectors ["AnnLoanDueRate" ] = &AnnLoanDueRate ;
OtherVectors ["CurrMandE" ] = &CurrMandE ;
OtherVectors ["TotalIMF" ] = &TotalIMF ;
OtherVectors ["RefundableSalesLoad" ] = &RefundableSalesLoad ;
@@ -538,6 +539,11 @@ void LedgerInvariant::Init(BasicValues const* b)
AddonCompOnAssets = b->yare_input_.ExtraCompensationOnAssets ;
AddonCompOnPremium = b->yare_input_.ExtraCompensationOnPremium;
CorridorFactor = b->GetCorridorFactor();
+ AnnLoanDueRate = b->InterestRates_->RegLnDueRate
+ (mce_gen_curr
+ ,mce_annual_rate
+ );
+ InitAnnLoanDueRate = AnnLoanDueRate[0];
CurrMandE = b->InterestRates_->MAndERate(mce_gen_curr);
TotalIMF = b->InterestRates_->InvestmentManagementFee();
RefundableSalesLoad = b->Loads_->refundable_sales_load_proportion();
@@ -903,11 +909,6 @@ void LedgerInvariant::Init(BasicValues const* b)
StatePostalAbbrev = mc_str(b->GetStateOfJurisdiction());
PremiumTaxState = mc_str(b->GetPremiumTaxState());
- InitAnnLoanDueRate = b->InterestRates_->RegLnDueRate
- (mce_gen_curr
- ,mce_annual_rate
- )[0];
-
IsInforce = b->yare_input_.EffectiveDate != b->yare_input_.InforceAsOfDate;
// This test is probably redundant because it is already performed
@@ -1180,6 +1181,18 @@ LedgerInvariant& LedgerInvariant::PlusEq(LedgerInvariant
const& a_Addend)
TotalIMF = a_Addend.TotalIMF;
RefundableSalesLoad = a_Addend.RefundableSalesLoad;
+ // PDF !! This is the logic used in the variant ledger class.
+ // It's not a very good idea, but until it can be replaced
+ // everywhere, at least it ensures that the composite value
+ // isn't zero. (In some other cases, zero might be a sensible
+ // answer--e.g., for ratios like 'CorridorFactor', where an
+ // average weighted by number of lives would be inaccurate,
+ // and any aggregate value could be misleading.)
+ for(int j = 0; j < a_Addend.Length; ++j)
+ {
+ AnnLoanDueRate[j] = a_Addend.AnnLoanDueRate[j];
+ }
+
IsMec = a_Addend.IsMec || IsMec;
InforceIsMec = a_Addend.InforceIsMec || InforceIsMec;
diff --git a/ledger_invariant.hpp b/ledger_invariant.hpp
index 0937a11..a18737e 100644
--- a/ledger_invariant.hpp
+++ b/ledger_invariant.hpp
@@ -103,6 +103,7 @@ class LMI_SO LedgerInvariant
std::vector<double> AddonCompOnAssets;
std::vector<double> AddonCompOnPremium;
std::vector<double> CorridorFactor;
+ std::vector<double> AnnLoanDueRate;
// TODO ?? M&E varies by basis (cf. 'GuarMaxMandE' below), so it
// belongs in the variant ledger.
std::vector<double> CurrMandE;
diff --git a/ledger_pdf_generator_wx.cpp b/ledger_pdf_generator_wx.cpp
index a3b95b3..713b277 100644
--- a/ledger_pdf_generator_wx.cpp
+++ b/ledger_pdf_generator_wx.cpp
@@ -2666,7 +2666,7 @@ class finra_assumption_detail : public
page_with_tabular_report
illustration_table_columns const& get_table_columns() const override
{
- // PDF !! InitAnnLoanDueRate: "Loan\nInt Rate" would be a better
+ // PDF !! AnnLoanDueRate: "Loan\nInt Rate" would be a better
// heading. "Assumed\nLoan Interest" suggests a dollar amount,
// but this column is actually an annual rate. Because VLR is not
// implemented, this is just the contractual fixed loan rate, for
@@ -2679,7 +2679,7 @@ class finra_assumption_detail : public
page_with_tabular_report
,{ "CurrMandE" , "M&E" ,
"99.99%" }
,{ "EeMode" , "Indiv\nPmt Mode" ,
"Semiannual" }
,{ "ErMode" , "Corp\nPmt Mode" ,
"Semiannual" }
- ,{ "InitAnnLoanDueRate" , "Assumed\nLoan Interest" ,
"99.99%" }
+ ,{ "AnnLoanDueRate" , "Assumed\nLoan Interest" ,
"99.99%" }
};
return columns;
- [lmi-commits] [lmi] master updated (5e45c3d -> f1af0f9), Greg Chicares, 2018/09/30
- [lmi-commits] [lmi] master f9ddc04 5/6: Do not depict a scalar as a vector,
Greg Chicares <=
- [lmi-commits] [lmi] master f1af0f9 6/6: Remove some obsolete comments, Greg Chicares, 2018/09/30
- [lmi-commits] [lmi] master 788def5 3/6: Rename an MST variable, Greg Chicares, 2018/09/30
- [lmi-commits] [lmi] master 7bfe072 2/6: Replace an assertion with a more elaborate alarum, Greg Chicares, 2018/09/30
- [lmi-commits] [lmi] master d077bc5 1/6: Note a future improvement to a column heading, Greg Chicares, 2018/09/30
- [lmi-commits] [lmi] master ac17f79 4/6: Add and remove defect markers [380], Greg Chicares, 2018/09/30