diff --git a/R/.gitignore b/R/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..53c4b989bb955233675eb0d973b175dcadd9e5e8 --- /dev/null +++ b/R/.gitignore @@ -0,0 +1 @@ +TODO.txt diff --git a/R/InsuranceContract.R b/R/InsuranceContract.R index 79f0b41dc38556cead1b4e5694c2e63746d7f9d1..07dc9df0d315c9bddd88565f63737f5b2716dba3 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 b43c8cb3b909519c54f091f11ae222f98b3bd733..034cdab8b3b1fb4e680a8d641f6e07939a32bc23 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);