From c2d20d57343eaec06245660e30775169332b2451 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Fri, 15 Apr 2016 18:24:39 +0200 Subject: [PATCH] Set tariff-wide default for premiumPeriod If not explicitly given in the contract, premiumPeriod is taken from the Tarif. --- R/.gitignore | 1 + R/InsuranceContract.R | 6 +++++- R/InsuranceTarif.R | 9 ++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 R/.gitignore diff --git a/R/.gitignore b/R/.gitignore new file mode 100644 index 0000000..53c4b98 --- /dev/null +++ b/R/.gitignore @@ -0,0 +1 @@ +TODO.txt diff --git a/R/InsuranceContract.R b/R/InsuranceContract.R index 79f0b41..07dc9df 100644 --- a/R/InsuranceContract.R +++ b/R/InsuranceContract.R @@ -49,7 +49,11 @@ InsuranceContract = R6Class( self$tarif = tarif; self$age = age; self$policyPeriod = policyPeriod; - self$premiumPeriod = premiumPeriod; + if (missing(premiumPeriod) && !is.na(self$tarif$premiumPeriod)) { + self$premiumPeriod = self$tarif$premiumPeriod; + } else { + self$premiumPeriod = premiumPeriod; + } self$sumInsured = sumInsured; if (!missing(deferral)) self$deferral = deferral; if (!missing(YOB)) self$YOB = YOB; diff --git a/R/InsuranceTarif.R b/R/InsuranceTarif.R index b43c8cb..034cdab 100644 --- a/R/InsuranceTarif.R +++ b/R/InsuranceTarif.R @@ -9,9 +9,9 @@ PaymentTimeEnum = setSingleEnum("PaymentTime", levels = c("in advance", "in arre # Initialize a cost matrix with dimensions: [CostType, Basis, Period], with: -# CostType: alpha, Zillmer, beta, gamma +# CostType: alpha, Zillmer, beta, gamma, gamma_nopremiums # Basis: SumInsured, SumPremiums, GrossPremium -# Period: once, premiumPeriod, policyPeriod +# Period: once, PremiumPeriod, PremiumFree, PolicyPeriod # TODO: gamma an Erlebensleistungen? initializeCosts = function() { dimnm=list( @@ -46,6 +46,7 @@ InsuranceTarif = R6Class( benefitFrequencyOrder = 0, widowFactor = 0, + premiumPeriod = NA, premiumRefund = 0, premiumRefundLoading = 0, # Mindesttodesfallrisiko soll damit erreicht werden, z.B. 105% der einbezahlten Prämien @@ -67,7 +68,7 @@ InsuranceTarif = R6Class( ), - initialize = function(name = NA, mortalityTable = NA, i = NA, type = "wholelife", ..., premiumFrequencyOrder = 0, benefitFrequencyOrder = 0, costs) { + initialize = function(name = NA, mortalityTable = NA, i = NA, type = "wholelife", ..., premiumPeriod = NA, premiumFrequencyOrder = 0, benefitFrequencyOrder = 0, costs) { if (!missing(name)) self$name = name; if (!missing(mortalityTable)) self$mortalityTable = mortalityTable; if (!missing(i)) self$i = i; @@ -75,6 +76,8 @@ InsuranceTarif = R6Class( self$costs = if (!missing(costs)) costs else initializeCosts(); if (!missing(benefitFrequencyOrder)) self$benefitFrequencyOrder = benefitFrequencyOrder; if (!missing(premiumFrequencyOrder)) self$premiumFrequencyOrder = premiumFrequencyOrder; + # Set default premiumPeriod, e.g. single premium, to be used when the contract has no explicit premium period + if (!missing(premiumPeriod)) self$premiumPeriod = premiumPeriod; self$v = 1/(1+self$i); -- GitLab