From feeb49e78a8f52d2714cd31830bedc36f0b6df4b Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold.kainhofer@at.ey.com> Date: Tue, 3 Nov 2020 17:34:15 +0100 Subject: [PATCH] Allow arbitrary balance sheet reserve interpolation method (by passing a function for the balanceSheetMethod parameter) --- R/InsuranceParameters.R | 6 +++++- R/InsuranceTarif.R | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/R/InsuranceParameters.R b/R/InsuranceParameters.R index 388ef50..2dd20cf 100644 --- a/R/InsuranceParameters.R +++ b/R/InsuranceParameters.R @@ -255,7 +255,11 @@ InsuranceContract.Values = list( #' month are relevant.} #' \item{\code{$balanceSheetMethod}}{How to interpolate the balance sheet #' reserves (at the balandeSheetDate) from the yearly contractual -#' reserves.} +#' reserves. Either a string "30/360", "act/act", "act/360", "act/365" +#' or a function with signature \code{balanceSheetMethod(params, contractDates, balanceDates)} +#' that returns a vector of coefficients for each year to +#' interpolate the reserves available at the given \code{contractDates} +#' for the desirec \code{balanceDates}}} #' \item{\code{$surrenderValueCalculation}}{A function describing the surrender #' value calculation.} #' \item{\code{$premiumFrequencyOrder}}{Order of the approximation for diff --git a/R/InsuranceTarif.R b/R/InsuranceTarif.R index c978c11..7f3a26b 100644 --- a/R/InsuranceTarif.R +++ b/R/InsuranceTarif.R @@ -1082,7 +1082,9 @@ InsuranceTarif = R6Class( contractDates = params$ContractData$contractClosing + years(1:years); balanceDates = balanceDate + years(1:years - 1); - if (params$ActuarialBases$balanceSheetMethod == "30/360") { + if (is.function(params$ActuarialBases$balanceSheetMethod)) { + baf = params$ActuarialBases$balanceSheetMethod(params = params, contractDates = contractDates, balanceDates = balanceDates) + } else if (params$ActuarialBases$balanceSheetMethod == "30/360") { baf = ((month(balanceDates + days(1)) - month(contractDates) - 1) %% 12 + 1) / 12 } else if (params$ActuarialBases$balanceSheetMethod == "act/act") { baf = as.numeric((balanceDates + days(1)) - contractDates, units = "days" ) / as.numeric(balanceDates - (balanceDates - years(1)), units = "days") -- GitLab