From 752dbb8519c089a0d9bd6f28c7ae41226379d5e4 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Sun, 22 Jan 2023 21:47:09 +0100 Subject: [PATCH] Fixes for sumInsured calculation, addExtension * Fix sumInsured calcualtion from given premium * unittest for addExtension with different tariff * Fix policyPeriod for main contract with multiple blocks (e.g. addExtension) * Clean up unit tests --- R/InsuranceContract.R | 3 +++ tests/testthat/test-CF-Annuity.R | 33 ++++++++++++++++++++++++++++ tests/testthat/test-extendContract.R | 4 ++++ 3 files changed, 40 insertions(+) diff --git a/R/InsuranceContract.R b/R/InsuranceContract.R index acf4e74..492353a 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 ed4a930..90ab579 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 59e0413..e0a9f0f 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)) }) -- GitLab