tests/testthat/test-extendContract.R

test_that("Extend contract by $addExtension", {
    library(MortalityTables)
    mortalityTables.load("Austria_Census")

    Tarif.EndowmentA = InsuranceTarif$new(
        name = "Example Tariff - Endowment 1981",
        type = "endowment",
        tarif = "E1-RP81",
        desc = "An endowment with regular premiums (standard tariff)",

        mortalityTable = mort.AT.census.1981.male,
        cost = initializeCosts(alpha = 0.04, gamma.contract = 0.0005, unitcosts = 10),
        i = 0.03
    )
    Tarif.EndowmentB = Tarif.EndowmentA$createModification(
        name = "Example Tariff - Endowment 2001",
        tarif = "E1-RP01",
        mortalityTable = mort.AT.census.2001.male,
        cost = initializeCosts(alpha = 0.024, gamma.contract = 0.00075, unitcosts = 20),
        i = 0.01)

    ContractA = InsuranceContract$new(
        tarif = Tarif.EndowmentA,
        age = 40, policyPeriod = 20,
        sumInsured = 10000,
        contractClosing = as.Date("2000-07-01")
    )


    # premium-free extension
    ContractB = ContractA$clone()$addExtension(id = "Verlaengerung1", contractPeriod = 5, premiumPeriod = 0)
    expect_equal(ContractB$blocks$Verlaengerung1$Parameters$ContractData$sumInsured, 15117.03896)


    # extension with given sumInsured resulting in 0 premiums
    ContractC = ContractA$clone()$addExtension(id = "Verlaengerung1", contractPeriod = 5, sumInsured = 15117.03896)
    expect_equal(ContractC$blocks$Verlaengerung1$Values$premiums[["gross"]], 0, tolerance = 1e-06)

    # extension with increased sumInsured: real premiums are charged, reserves start from the existing reserve:
    ContractD = ContractA$clone()$addExtension(id = "Verlaengerung1", contractPeriod = 5, sumInsured = 20000)
    expect_equal(ContractD$blocks$Verlaengerung1$Values$premiums[["written"]], 315.109)
    expect_equal(ContractD$blocks$Verlaengerung1$Values$reserves[["0", "contractual"]], 10000)

    # extension with increased sumInsured and different tariff: check whether interest rate has really changed
    ContractE = ContractA$clone()$addExtension(id = "Verlaengerung1", 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))
})

Try the LifeInsureR package in your browser

Any scripts or data that you put into this service are public.

LifeInsureR documentation built on June 15, 2025, 1:08 a.m.