# Tarif Specification and implementation of a concrete contract
# Tarif and Contract Specification
An insurance contract is modelled by the abstract product specification
An insurance contract is modelled by the abstract product specification
(`InsuranceTarif` class) and the concrete (individualized) `InsuranceContract`.
(`InsuranceTarif` class) and the concrete (individualized) `InsuranceContract`.
...
@@ -483,23 +486,20 @@ parameters also in the contract's `new` call.
...
@@ -483,23 +486,20 @@ parameters also in the contract's `new` call.
The `InsuranceTarif` class provides a way to define an abstract insurance product.
The `InsuranceTarif` class provides a way to define an abstract insurance product.
The most important parameters to be passed in the `InsuranceTarif$new()` call are:
The most important parameters to be passed in the `InsuranceTarif$new()` call are:
**General settings for the Tariff**
| | |
|:-----|:----------|
* `name`, `tarif` and `desc` providing IDs and human-readable descriptions of the insurance product. They are just used as labels and array keys, but do not influence the calculations.
|**General settings for the Tariff** ||
* `type` is the most important parameter, defining the type of life insurance product (endowment, pure endowment, annuity, whole life insurance, dread-disease insurance, etc.)
| `name`, `tarif`, `desc` | IDs and human-readable descriptions of the insurance product. They are just used as labels and array keys, but do not influence the calculations.|
| `type` | the most important parameter, defining the type of life insurance product (endowment, pure endowment, annuity, whole life insurance, dread-disease insurance, etc.)|
**Actuarial Bases for the Tariff**
|**Actuarial Bases for the Tariff** ||
| `mortalityTable` | a `MortalityTable` Object (package "MortalityTables"), providing the transition probabilities (typically death probabilities, but potentially also morbidity in dread-disease insurances)|
* `mortalityTable` is a `MortalityTable` Object (package "MortalityTables"), providing the transition probabilities (typically death probabilities, but potentially also morbidity in dread-disease insurances)
| `i` | Guaranteed interest rate|
* `i` Guaranteed interest rate
| `costs`, `unitcosts` | passed a data structure for all cost parameters (see below)|
* `costs`, `unitcosts` are passed a data structure for all cost parameters (see below)
| `premiumFrequencyLoading` | surcharge for premium payments more often than yearly (as a named list)|
* `premiumFrequencyLoading` describes the surcharge for premium payments more often than yearly (as a named list)
| `premiumRefund` | how much of the (gross) premium paid is returned upon death (often provided e.g. in deferred annuities or pure endowments with no fixed death benefit)|
* `premiumRefund` describes how much of the (gross) premium paid is returned upon death (often provided e.g. in deferred annuities or pure endowments with no fixed death benefit)
| `tax` |insurance tax
* `tax` is the insurance tax
|**Benefit calculation** ||
| `surrenderValueCalculation` | can be passed a hook function that calculates the surrender value given the current reserves at each time step|
**Benefit calculation**
* `surrenderValueCalculation` can be passed a hook function that calculates the surrender value given the current reserves at each time step
...
@@ -508,7 +508,7 @@ refund upon death and a linearly decreasing surrender penalty:
...
@@ -508,7 +508,7 @@ refund upon death and a linearly decreasing surrender penalty:
While the tariff describes the general product features, the contract object
While the tariff describes the general product features, the contract object
holds the data of a concrete contract. All insurance parameters (see section
holds the data of a concrete contract. All insurance parameters (see section
...
@@ -684,33 +684,20 @@ tarif defaults.
...
@@ -684,33 +684,20 @@ tarif defaults.
However, the most important and often used parameters are:
However, the most important and often used parameters are:
**Information about insuree**
| | |
|:-----|:---------|
* `age` the age of the insured person at contract start
|**Information about insuree** |
* `YOB` the year of birth of the insured person (`age`, `YOB` and `contractClosing`
| `age` |the age of the insured person at contract start
are redundant, at most two need to be given). YOB is only relevant for
| `YOB` | the year of birth of the insured person (`age`, `YOB` and `contractClosing` are redundant, at most two need to be given). YOB is only relevant for cohort mortality tables. For period life tables (which are independent of the birth year of the person), this parameter is not needed. |
cohort mortality tables. For period life tables (which are independent of
| `sex` | relevant for sex-specific life tables (common in the past) |
the birth year of the person), this parameter is not needed.
|**Contract details** |
* `sex` is relevant for sex-specific life tables (common in the past)
| `sumInsured` | the benefit when the insured event happens. Typically the lump sum for whole life insurances or endowments, or the (yearly) payment for annuities |
| `policyPeriod` | the duration of the whole contract |
**Contract details**
| `premiumPeriod` | how long premiums are paid (1 for single-premiumcontracts, equal to `policyPeriod` (default) for regular premiums) |
| `premiumFrequency` | how often premiums are paid within a year (e.g.1 for yearly premiums, 4 for quarterly, 12 for monthly) |
* `sumInsured` describes the benefit when the insured event happens. Typically
| `contractClosing` | the starting date of the contract |
the lump sum for whole life insurances or endowments, or the (yearly) payment
| `deathBenefitProportion` | gives the factor of death benefit relative to thesurvival benefit of endowments (1 means equal death and survival probabilities) |
for annuities
| `noMedicalExam`, `noMedicalExamRelative`, `sumRebate`, `extraRebate`, `premiumRebate` | various types of rebates or charges. They can either be defined in general functional form in the tariff to apply to all contracts, or given individually for each contract. For the details, when each of these rebates are applied, check the formula reference document.|
* `policyPeriod` defines the duration of the whole contract
* `premiumPeriod` defines how long premiums are paid (1 for single-premium
contracts, equal to `policyPeriod` (default) for regular premiums)
* `premiumFrequency` defines how often premiums are paid within a year (e.g.
1 for yearly premiums, 4 for quarterly, 12 for monthly)
* `contractClosing` describes the starting date of the contract
* `deathBenefitProportion` gives the factor of death benefit relative to the
survival benefit of endowments (1 means equal death and survival probabilities)
The profit participation scheme of a tarif is represented by an object of the
`ProfitParticipation` class. While the `InsuranceContract.Parameters` list contains
elements for the profit rates, the implementation of the calculation of the
profit parts is done by functions defined in the `ProfitParticipation`
constructor.
This scheme is passed to the `InsuranceTarif` or `InsuranceContract` via the
`profitParticipationScheme` parameter.
`
There are different types of profit participation assignments, based on the type
of risks they are based upon:
* __Interest profit__: total credited rate (minus guarantee) applied to some kind of reserve
* __Risk profit__: risk profit rate applied to the risk premium, capital or the sum insured
* __Expense profit__: expense profit rate applied to the sum insured
* __Sum profit__: rate (depending on sum insured) applied to the sum insured
* __Terminal bonus__: yearly attributions are collected and paid out only on contract maturity
* __Terminal bonus fund__: Part of the ongoing profit allocation is not immediately attributed to the contract, but stored in a special reserve and paid out only on maturity.
The (default) parameters that can be passed to the `ProfitParticipation` constructor
are:
| | |
|:-----|:----------|
|**General profit setup** ||
| `waitingPeriod` | During the waiting period at the beginning of a contract, no profit participation is assigned |
| `profitComponents` | describes the different components of profit participation ("interest", "risk", "expense", "sum", "terminal") |
| `profitClass` | a profit ID used to identify the correct profit rates (rates are defined per profit class) |
| `profitRates` | a data frame containing company-wide profit rates. Key columns are year and profitClass |
|**Advance profit participation rates** ||
| `advanceProfitParticipation` | premium rebate (percentage discount on the gross premium) |
| `advanceProfitParticipationInclUnitCost` | premium rebate (percentage discount on the gross premium including unit costs) |
|**Regular profit participation rates** ||
| `guaranteedInterest` $i$ | Contract-specific override of the guaranteed intereste rate (only for profit participation purposes) |
| `interestProfitRate` $ip_t$ | Profit interest rate (added to the guaranteed interest rate to arrive at the total credited rate) |
| `totalInterest` $tcr_t$ | The total credited interest rate (sum of guaranteed interest and profit participation interest) |
| `terminalBonusFundRate` $tbf_t$ | Terminal bonus fund rate, i.e. which percentage of the assigned profits are withheld in a separate terminal bonus fund and only paid out at maturity. |
For the calculation of the profit participation, the `ProfitParticipation` class
holds a list of function pointers to calculate each component of profit participation.
For each of interest, risk, expense, sum, terminal and terminal bonus fund the
following three functions can be given:
* **Profit rate**: return the profit rate as a function from the values of the contract
Function signature: `function(rates, ...)`
* **Profit base**: The quantity on which to apply the rate. Typically this function
returns either the current reserve, the previous reserve (or some combination),
the sum insured or the current risk premium.
Function signature: `function(rates, params, values, ...)`
* **Calculation**: A function taking the rate and the base and calculate the
profit assigned for the specific profit component. Most common are a simple
multiplication of base and rate, but other formulas are possible, too.
Function signature: `function(base, rate, waiting, rates, params, values, ...) `
Thus, the constructor of the `ProfitParticipation` class also takes the following
parameters:
|Type of profit |Function for rate | Function for base | Function for calculation |
|terminal bonus fund |`getTerminalBonusFundRate` |`getTerminalBonusFundBase` |`calculateTerminalBonusFund` |
In addition, the following parameters define functions for reserves:
* `getTerminalBonusReserve` ... Calculate the reserve for the terminal bonus
from the bonus assignments (old tariffs often use some kind of discounting or
conditional reserving for the terminal bonus reserve)
Function signature: `function(profits, rates, terminalBonus, terminalBonusAccount, params, values)`
To calculate the actual benefits paid out from profit participation, the following
parameters take the corresponding functions (signature: `function(profits, rates, params, values, ...)` )
| | |
|:---|:---------|
|`calculateSurvivalBenefit` |Benefit from profit participation at maturity (in addition to the guaranteed payout) |
|`calculateDeathBenefitAccrued` |Benefit from profit participation upon death (in addition to the guaranteed payout) |
|`calculateDeathBenefitTerminal` |Benefit from terminal bonus upon death (in addition to the guaranteed payout and regular profit participation) |
|`calculateSurrenderBenefitAccrued` |Benefit from profit participation upon contract surrender (in addition to the surrender value) |
|`calculateSurrenderBenefitTerminal` |Benefit from terminal bonus upon contract surrender (in addition to the surrender value and regular profit participation) |
|`calculatePremiumWaiverBenefitAccrued` |Benefit from profit participation upon premium waiver (in addition to the surrender value) |
|`calculatePremiumWaiverBenefitTerminal` |Benefit from terminal bonus upon premium waiver surrender (in addition to the surrender value and regular profit participation) |
### Existing functions to use
While the details of a profit participation scheme are very specific and no two
profit schemes are exactly alike, the basic functionality to extract rates and
bases and the calculation functions are usually not so different. For this
reason, the `LifeInsuranceContracts` package provides several little helper functions
that provide the most common functionality for the definition of rates, bases and
the profit calculation. See `?ProfitParticipationFunctions` for the full list.