[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master d39bbb8 3/5: Use new 7702 interest rates for
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master d39bbb8 3/5: Use new 7702 interest rates for guideline premiums |
Date: |
Mon, 15 Mar 2021 11:03:45 -0400 (EDT) |
branch: master
commit d39bbb8bc0a6a809f78484f88b4e1b05400be541
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Use new 7702 interest rates for guideline premiums
Replaced old interest rates with new. Removed old code that set 'ig'
to 'ic' (unless uniformly zero) in class Irc7702. No regressions are
observed, as is reasonable because the old and new rates do match.
A regression could arise if the contractual NAAR discount rate,
i7702::Em_, had been rounded up to a slightly higher value than 'ic',
and the general-account guaranteed rate were the same as the 7702
statutory rate, which probably hasn't happened since the 1990s.
---
gpt_test.cpp | 7 ++++---
ihs_basicval.cpp | 7 ++++---
ihs_irc7702.cpp | 58 ++++++++++++++------------------------------------------
ihs_irc7702.hpp | 14 ++++++++------
4 files changed, 30 insertions(+), 56 deletions(-)
diff --git a/gpt_test.cpp b/gpt_test.cpp
index 502e45b..fa40733 100644
--- a/gpt_test.cpp
+++ b/gpt_test.cpp
@@ -443,9 +443,10 @@ Irc7702& gpt_test::instantiate_old(int issue_age)
,issue_age // a_IssueAge
,issue_age + length // a_EndtAge
,q_m // a_Qc
- ,glp_ic // a_GLPic
- ,gsp_ic // a_GSPic
- ,glp_ic // a_Ig [ignored here, in effect]
+ ,glp_ic // ic_glp
+ ,gsp_ic // ic_gsp
+ ,glp_ig // ig_glp
+ ,gsp_ig // ig_gsp
,0.0 // a_PresentBftAmt
,0.0 // a_PresentSpecAmt
,0.0 // a_LeastBftAmtEver
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index b55cbee..82f7453 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -458,9 +458,10 @@ void BasicValues::Init7702()
,yare_input_.IssueAge
,EndtAge
,Mly7702qc
- ,i7702_->net_glp()
- ,i7702_->net_gsp()
- ,i7702_->ig()
+ ,i7702_->ic_glp()
+ ,i7702_->ic_gsp()
+ ,i7702_->ig_glp()
+ ,i7702_->ig_gsp()
,yare_input_.SpecifiedAmount[0] + yare_input_.TermRiderAmount
,yare_input_.SpecifiedAmount[0] + yare_input_.TermRiderAmount
,yare_input_.SpecifiedAmount[0] + yare_input_.TermRiderAmount
diff --git a/ihs_irc7702.cpp b/ihs_irc7702.cpp
index 2a9c476..30c84a8 100644
--- a/ihs_irc7702.cpp
+++ b/ihs_irc7702.cpp
@@ -74,10 +74,6 @@ namespace
static std::vector<double> const v(d, d + n);
return v;
}
-
- // Use 7702 int rate for DB discount in NAAR. TAXATION !! Does it
- // make sense to retain this?
- bool g_UseIcForIg = true;
} // Unnamed namespace.
// TAXATION !! General concerns
@@ -111,9 +107,10 @@ Irc7702::Irc7702
,int a_IssueAge
,int a_EndtAge
,std::vector<double> const& a_Qc
- ,std::vector<double> const& a_GLPic
- ,std::vector<double> const& a_GSPic
- ,std::vector<double> const& a_Ig
+ ,std::vector<double> const& ic_glp
+ ,std::vector<double> const& ic_gsp
+ ,std::vector<double> const& ig_glp
+ ,std::vector<double> const& ig_gsp
,double a_PresentBftAmt
,double a_PresentSpecAmt
,double a_LeastBftAmtEver
@@ -142,9 +139,10 @@ Irc7702::Irc7702
,IssueAge {a_IssueAge}
,EndtAge {a_EndtAge}
,Qc {a_Qc}
- ,GLPic {a_GLPic}
- ,GSPic {a_GSPic}
- ,Ig {a_Ig}
+ ,ic_glp_ {ic_glp}
+ ,ic_gsp_ {ic_gsp}
+ ,ig_glp_ {ig_glp}
+ ,ig_gsp_ {ig_gsp}
,PresentBftAmt {a_PresentBftAmt}
,PriorBftAmt {a_PresentBftAmt}
,PresentSpecAmt {a_PresentSpecAmt}
@@ -408,40 +406,12 @@ void Irc7702::Init()
//============================================================================
void Irc7702::InitCommFns()
{
- std::vector<double> glp_naar_disc_rate;
- std::vector<double> gsp_naar_disc_rate;
- std::vector<double> const zero(Length, 0.0);
-
- // g_UseIcForIg indicates whether the 7702 rates should be used for the
NAAR
- // discount factor. We interpret a guar rate (IG) of zero in all years as
- // no NAAR discount factor.
-
- if(!g_UseIcForIg)
- {
- // if the flag is not set, use guar rates for NAAR discount factor
- glp_naar_disc_rate = Ig;
- gsp_naar_disc_rate = Ig;
- }
- else if(zero == Ig)
- {
- // if guar rate is zero, we will always use it for the NAAR discount
factor
- glp_naar_disc_rate = Ig;
- gsp_naar_disc_rate = Ig;
- }
- else
- {
- // if the flag is true, and the guar rate !=0, use the 7702 rates for
- // the NAAR discount factor
- glp_naar_disc_rate = GLPic;
- gsp_naar_disc_rate = GSPic;
- }
-
// Commutation functions using min i = iglp(): both options 1 and 2
CommFns[Opt1Int4Pct].reset
(::new ULCommFns
(Qc
- ,GLPic
- ,glp_naar_disc_rate
+ ,ic_glp_
+ ,ig_glp_
,mce_option1_for_7702
,mce_monthly
)
@@ -451,8 +421,8 @@ void Irc7702::InitCommFns()
CommFns[Opt2Int4Pct].reset
(::new ULCommFns
(Qc
- ,GLPic
- ,glp_naar_disc_rate
+ ,ic_glp_
+ ,ig_glp_
,mce_option2_for_7702
,mce_monthly
)
@@ -463,8 +433,8 @@ void Irc7702::InitCommFns()
CommFns[Opt1Int6Pct].reset
(::new ULCommFns
(Qc
- ,GSPic
- ,gsp_naar_disc_rate
+ ,ic_gsp_
+ ,ig_gsp_
,mce_option1_for_7702
,mce_monthly
)
diff --git a/ihs_irc7702.hpp b/ihs_irc7702.hpp
index bf4ee85..ea866bf 100644
--- a/ihs_irc7702.hpp
+++ b/ihs_irc7702.hpp
@@ -60,9 +60,10 @@ class Irc7702 final
,int a_IssueAge
,int a_EndtAge
,std::vector<double> const& a_Qc
- ,std::vector<double> const& a_GLPic
- ,std::vector<double> const& a_GSPic
- ,std::vector<double> const& a_Ig
+ ,std::vector<double> const& ic_glp
+ ,std::vector<double> const& ic_gsp
+ ,std::vector<double> const& ig_glp
+ ,std::vector<double> const& ig_gsp
,double a_PresentBftAmt
,double a_PresentSpecAmt
,double a_LeastBftAmtEver
@@ -175,9 +176,10 @@ class Irc7702 final
int const EndtAge; // Endowment age
std::vector<double> const& Qc; // 7702 mortality rate
- std::vector<double> const& GLPic; // 7702 GLP interest rate
- std::vector<double> const& GSPic; // 7702 GSP interest rate
- std::vector<double> const& Ig; // Death benefit discount rate
+ std::vector<double> const& ic_glp_;
+ std::vector<double> const& ic_gsp_;
+ std::vector<double> const& ig_glp_;
+ std::vector<double> const& ig_gsp_;
double PresentBftAmt;
double PriorBftAmt;