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