From 8bdad999f437792fdc484fc7213e6460a880d35d Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Fri, 29 Apr 2016 01:14:06 +0200 Subject: [PATCH] Implement premium waiver (i.e. premium-free sum insured, calculated from the surrender value) --- R/InsuranceTarif.R | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/R/InsuranceTarif.R b/R/InsuranceTarif.R index 8484e1c..d0ab2af 100644 --- a/R/InsuranceTarif.R +++ b/R/InsuranceTarif.R @@ -217,7 +217,7 @@ InsuranceTarif = R6Class( premiumFrequencyCorrection = correctionPaymentFrequency(m = premiumFrequency, i = self$i, order = self$premiumFrequencyOrder); pvRefund = calculatePVDeath (q, cashflows$death_GrossPremium, v=self$v); - pvRefundPast = calculatePVDeath (q, cashflows$death_Refund_past, v=self$v) * cashflows[,"death_GrossPremium"]; + pvRefundPast = calculatePVDeath (q, cashflows$death_Refund_past, v=self$v) * (cashflows[,"death_GrossPremium"]-cashflows[,"premiums_advance"]); pv = cbind( premiums = calculatePVSurvival (q, cashflows$premiums_advance, cashflows$premiums_arrears, m=premiumFrequency, mCorrection=premiumFrequencyCorrection, v=self$v), @@ -479,33 +479,13 @@ InsuranceTarif = R6Class( # Calculate new sum insured after premium waiver Storno = 0; # TODO: Implement storno costs - newSI = (resReduction - presentValues[,"death_Refund_past"] * (1+self$loadings$security) - c(Storno)) / (presentValues[, "benefits"] * (1+self$loadings$security) + presentValues[, "gamma_nopremiums"]) * sumInsured; -# str(newSI); - - zaehler=(resReduction - presentValues[,"death_Refund_past"] * (1+self$loadings$security) - c(Storno)); - nenner=(presentValues[, "benefits"] * (1+self$loadings$security) + presentValues[, "gamma_nopremiums"]) / sumInsured; - - # str(resReduction); - # str(presentValues[,"death_Refund_past"] * cashflows$death_GrossPremium * (1+self$loadings$security) * premiums[["gross"]]); - # str(presentValues[,"death_Refund_past"]); - # str(cashflows$death_GrossPremium * (1+self$loadings$security) * premiums[["gross"]]); - str(cashflows$death_GrossPremium); - str(cashflows); - str((1+self$loadings$security)); - str(premiums[["gross"]]); - # str(presentValues[, "benefits"] * (1+self$loadings$security) + presentValues[, "gamma_nopremiums"]); - - - - # res.premiumfree = - # res.gamma.premiumfree = + newSI = (surrenderValue - presentValues[,"death_Refund_past"] * (1+self$loadings$security) - c(Storno)) / + (presentValues[, "benefits"] * (1+self$loadings$security) + presentValues[, "gamma_nopremiums"]) * sumInsured; cbind(res, "PremiumsPaid"=Reduce("+", cashflows$premiums_advance, accumulate = TRUE), "Surrender"=surrenderValue, - "PremiumFreeSumInsured" = newSI, - "RedWert_Zaehler" = zaehler, - "RedWert_Nenner" = nenner + "PremiumFreeSumInsured" = newSI ) }, -- GitLab