diff --git a/R/InsuranceContract.R b/R/InsuranceContract.R index acf4e7475db58953f85582719a5b001d1cd35c5e..492353a096ed45b34d6c5e5ef675aabb468e158f 100644 --- a/R/InsuranceContract.R +++ b/R/InsuranceContract.R @@ -856,8 +856,10 @@ InsuranceContract = R6Class( colIntR = rep(NA_real_, rows) colDur = rep(NA_real_, rows) colPrem = rep(NA_real_, rows) + polPeriod = self$Parameters$ContractData$policyPeriod for (b in self$blocks) { start = b$Parameters$ContractData$blockStart + polPeriod = max(polPeriod, b$Parameters$ContractData$policyPeriod + start) colDt = coalesce(colDt, pad0(b$Values$reservesBalanceSheet[,"date"], start = start, value = as.Date(NA), value.start = as.Date(NA), l = rows)) colTime = coalesce(colTime, pad0(b$Values$reservesBalanceSheet[,"time"] + start, start = start, value = NA, value.start = NA, l = rows)) @@ -865,6 +867,7 @@ InsuranceContract = R6Class( colDur = coalesce(colDur, pad0(b$Values$basicData[,"PolicyDuration"], start = start, value = NA, value.start = NA, l = rows)) colPrem = coalesce(colPrem, pad0(b$Values$basicData[,"PremiumPeriod"], start = start, value = NA, value.start = NA, l = rows)) } + self$Parameters$ContractData$policyPeriod = polPeriod; self$Values$reservesBalanceSheet[,"date"] = colDt; self$Values$reservesBalanceSheet[,"time"] = colTime; self$Values$basicData[,"InterestRate"] = colIntR diff --git a/tests/testthat/test-CF-Annuity.R b/tests/testthat/test-CF-Annuity.R index ed4a930e8c8c4b87ae637a02da9443c9823f6ace..90ab57962c03a25ca6501a40b1e8a6f9222c4a21 100644 --- a/tests/testthat/test-CF-Annuity.R +++ b/tests/testthat/test-CF-Annuity.R @@ -33,3 +33,36 @@ test_that("Annuity Cash Flows", { expect_equal(Contract.Annuity$Values$cashFlows$survival_advance, c(rep(1, 55), 0)) }) +Tarif.Annuity = InsuranceTarif$new( + name = "Example Tariff - Immediate Annuity", + type = "annuity", + tarif = "Ann1", + desc = "An annuity with single-premium", + premiumPeriod = 1, + + mortalityTable = AVOe2005R.unisex, + i = 0.005 +) +Contract.Annuity = InsuranceContract$new( + tarif = Tarif.Annuity, + age = 65, YOB = 1955, + sumInsured = 1200, + policyPeriod = 55, + contractClosing = as.Date("2020-09-01") +) + +Contract.Annuity$Parameters$ContractData$sumInsured +Contract.Annuity$Values$premiums + + +Contract.Annuity1 = InsuranceContract$new( + tarif = Tarif.Annuity, + age = 65, YOB = 1955, + premium = 32004.67817, + # sumInsured = NULL, + policyPeriod = 55, + contractClosing = as.Date("2020-09-01") +) +Contract.Annuity1$Parameters$ContractData$sumInsured + +Contract.Annuity1$Values$premiums diff --git a/tests/testthat/test-extendContract.R b/tests/testthat/test-extendContract.R index 59e0413774ddb60a1b9e7d6fb7dc02519732ea19..e0a9f0f287e7c3dbdb37666ba541753e59d6a2e8 100644 --- a/tests/testthat/test-extendContract.R +++ b/tests/testthat/test-extendContract.R @@ -40,4 +40,8 @@ test_that("Extend contract by $addExtension", { ContractD = ContractA$clone()$addExtension(id = "Verlängerung1", contractPeriod = 5, sumInsured = 20000) expect_equal(ContractD$blocks$Verlängerung1$Values$premiums[["written"]], 315.109) expect_equal(ContractD$blocks$Verlängerung1$Values$reserves[["0", "contractual"]], 10000) + + # extension with increased sumInsured and different tariff: check whether interest rate has really changed + ContractE = ContractA$clone()$addExtension(id = "Verlängerung1", contractPeriod = 5, sumInsured = 20000, tarif = Tarif.EndowmentB) + expect_equal(unname(ContractE$Values$basicData[c(1,20,30,40), "InterestRate"]), c(0.03, 0.03, 0.01, 0.01)) })