tests/testthat/test-premiumRefundPeriod.R

test_that("premiumRefundPeriod", {
    library(MortalityTables)
    mortalityTables.load("Austria_Annuities_AVOe2005R")

    #--------------------------------------------------------------------------- -
    # For deferred contracts, premium refund applies during deferral only by default
    #--------------------------------------------------------------------------- -
    Tarif.DefAnnuity = InsuranceTarif$new(
        type = "annuity",

        policyPeriod = function(params, values) { 120 - params$ContractData$age},
        deferralPeriod = function(params, values) { 65 - params$ContractData$age},
        premiumPeriod = function(params, values) { 65 - params$ContractData$age},
        premiumRefund = 1,
        mortalityTable = AVOe2005R.unisex
    )
    Contract.DefAnnuity = InsuranceContract$new(
        tarif = Tarif.DefAnnuity,
        age = 40, YOB = 1980,
        sumInsured = 1200,
        contractClosing = as.Date("2020-09-01"),
        calculate = "cashflows"
    )
    expect_equal(Contract.DefAnnuity$Parameters$ContractData$policyPeriod, 80)
    expect_equal(Contract.DefAnnuity$Parameters$ContractData$deferralPeriod, 25)
    expect_equal(Contract.DefAnnuity$Parameters$ContractData$premiumPeriod, 25)
    expect_equal(Contract.DefAnnuity$Parameters$ContractData$premiumRefundPeriod, 25)

    # premium refund only during the frist 25 years (linearly increasing), then 0
    expect_equal(Contract.DefAnnuity$Values$cashFlows[,"death_GrossPremium"], c(1:25, rep(0, 81-25)))
    expect_equal(Contract.DefAnnuity$Values$cashFlows[,"death_Refund_past"], c(rep(1, 25), rep(0, 81-25)))



    #--------------------------------------------------------------------------- -
    # For all other contracts without deferral period, refund period is whole contract
    #--------------------------------------------------------------------------- -
    Tarif.PureEnd = InsuranceTarif$new(
        type = "pureendowment",

        policyPeriod = 25,
        premiumRefund = 1,
        mortalityTable = AVOe2005R.unisex
    )
    Contract.PureEnd = InsuranceContract$new(
        tarif = Tarif.PureEnd,
        age = 40, YOB = 1980,
        sumInsured = 10000,
        contractClosing = as.Date("2020-09-01"),
        calculate = "cashflows"
    )
    # premium refund during the whole contract (25 years), the last year is the survival date without any death benefits
    expect_equal(Contract.PureEnd$Values$cashFlows[,"death_GrossPremium"], c(1:25, 0))
    expect_equal(Contract.PureEnd$Values$cashFlows[,"death_Refund_past"], c(rep(1, 25), 0))
})

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.