Past and Future Service Calculations
In most actuarial work in the UK it is typically to require the present value of future liabilities to be calculated in two parts: one part representing member service accrued to date; one part representing some period of member service in the future eg 1 year.
Mantle implements this by storing and calculating all numbers with an additional *future service component* that represents the proportion of the total number. For example, during a valuation run, Mantle determines benefit payments to make split between past and future service as follows
Past service pension = 100.00
Future service pension = 25.00
Mantle passes this through all calculations as a single number, and future service proportion.
Pension = 125.00
Pension future service proportion = 0.2
Let us denote, for a calculated pension amount A, the total, past, future components and future service proportion as A, Ap, Af and Afsp respectively. The future service proportion can be defined as
If A = Ap + Af = 0 Then Afsp = 1.0
If A = Ap + Af = 0 Then Afsp = Af / ( Ap + Af )
The future service proportion then passes through most calculations logically as follows
C == A x B => Cfsp = ( ( A x Afsp ) x ( B x Bfsp ) ) / ( A x B )
C == A + B => Cfsp = ( ( A x Afsp ) + ( B x Bfsp ) ) / ( A + B )
C == A - B => Cfsp = ( ( A x Afsp ) - ( B x Bfsp ) ) / ( A - B )
Division is a little more complex and mantle does the following
If B <> 0.0 AND Bfsp <> 0.0 Then
C == A / B => Cfsp = ( ( A x Afsp ) / ( B x Bfsp ) ) / ( A / B )
If B <> 0.0 AND Bfsp = 0.0 Then
C == A / B => Cfsp = 0.0 ( depending on circumstance and benefit calculations )
If B = 0.0 Then
C = A / B => C,Cfsp = undefined / error / 0.0 ( depending on circumstance and benefit calculations )
Minimums, Maximums and other conditional statements might also have unexpected results.
If A > B Then
C = Min( A , B ) => Cfsp = Bfsp
C = Max( A , B ) => Cfsp = Afsp
Initial calculation of future service proportion
Generally speaking fsp is generated during a service or accrual calculation. For example the fServiceFullTime and fServicePartTime return number of years of service between two dates (one using part time hours data to pro-rate the result and the other ignoring it) and chooosing automatic for the actuarial past/future method parameter will calculate the splits sensibly as follows when evaluating member benefits at exit from active service. Note the service parameters parameters allow more granular selection of service and the arbitrary multiplier simply scale the result and so are ignored here for brevity.
Note also that the service dates for the member override the start date and end date parameters where relevent and the allow prospective service sets future service proportion to zero and should be used with caution.
If force end date the member dates and tranche end date are ignored completely which is used in conjunction with allow prospective service.
vdate
1/1/2010
control period
1 year
member start date
1/1/1995
member date of exit
1/1/2025
member nrd
1/1/2030
Parameter Name
Example 1
Example 2
Example 3
Example 4
start date
1/1/1900
1/1/1997
1/1/1900
1/1/1900
end date
1/1/1997
1/1/2150
1/1/2150
1/1/2150
force end date (linked to exit)
1/1/2025
1/1/2025
1/1/2025
1/1/2030
allow prospective service
False
False
False
True
actuarial past/future method
automatic
automatic
automatic
automatic
result total
2.0
14.0
16.0
35.0
result future service proportion
0.0
1.0/14.0
1.0/16.0
0.0
Note the effect of the control period
vdate
1/1/2010
control period
100 years
member start date
1/1/1995
member date of exit
1/1/2025
member nrd
1/1/2030
Parameter Name
Example 5
Example 6
Example 7
Example 8
start date
1/1/1900
1/1/1997
1/1/1900
1/1/1900
end date
1/1/1997
1/1/2150
1/1/2150
1/1/2150
force end date (linked to exit)
1/1/2025
1/1/2025
1/1/2025
1/1/2030
allow prospective service
False
False
False
True
actuarial past/future method
automatic
automatic
automatic
automatic
result total
2.0
28.0
30.0
35.0
result future service proportion
0.0
13.0/28.0
15.0/30.0
0.0
These future service splits would filter through the rest of the calculations ultimately resulting in the correct split between past and future service liability.
The other settings for actuarial past/future method allow the results of the past future split to be manipulated.
vdate
1/1/2010
control period
1 year
member start date
1/1/1995
member date of exit
1/1/2025
member nrd
1/1/2030
Parameter Name
Example 9
Example 10
Example 11
Example 12
start date
1/1/1900
1/1/1900
1/1/1900
1/1/1900
end date
1/1/2150
1/1/2150
1/1/2150
1/1/2150
force end date (linked to exit)
1/1/2025
1/1/2025
1/1/2025
1/1/2025
allow prospective service
False
False
False
False
actuarial past/future method
automatic
past only
future control period
future to exit
result total
16.0
15.0
1.0
15.0
result future service proportion
1.0/16.0
0.0
1.0
1.0
Future service proportion for raw data, constants and members not active at the valuation date
For members not active at the valuation date, the result of all calculations will have future service proportion overriden with zero and the whole value treated as past service. Generally speaking the future service proportion coming from all service calculations will be zero anyway, but the following discussion highlights Mantle benefit functions that can manipulate the normal automated processes. This also applies to all raw member and constants within benefit definitions.
For active members, raw data and constants within benefit definitions at initiated with fsp = 0.0 if the data existed prior to the valuation date, and fsp = 1.0 if it was generated afterward. This generally ensures things like fixed PUPs are treated as past service out of the box, while avoiding the fsp being zeroed out when multiplying by accrual rates or salary for example.
Custom manipulation of future service cost
Many Mantle benefit functions manipulate the past an future service proportions to ensure sensible outputs. For example all built in final pensionable saalry calculations automatically set future service proportion to 1.0 to ensure they combine correctly with service calculations.
Note before reading the following that benefit items on member events that occurred before the valuation date will always inherit future service proportion of 0.0.
The two arithmetic benefit functions Combine Past and Future and fArithmeticExpressionPastFuture allow direct user manipulation of the past/future split.
fArithmeticExpressionPastFuture takes two parameters and treats the whole of one as future and the whole of the other as past thus allowing any previous results to be switched entirely from past to future if required.
C = fArithmeticExpressionPastFuture( A , B ) => C = A + B, Cfsp = B / ( A + B )
Combine Past and Future allows two expressions to be built from up to ten real number inputs and then treats one as past and one as future similar to Combine Past and Future.
Worked example
Consider an example where a prospective service enhancement is made on death in service, and we want to treat some aspect of the prospective part as an accrued past service liability at the valuation date in the typical n/ns fashion. The pension will be based on 50% of 40ths of FPS.
vdate
1/1/2010
control period
1 year
member start date
1/1/1995
member date of death
1/1/2025
member nrd
1/1/2030
FPS at exit
20,000
The total benefit for a death at 1/1/2030 will be based on ns = 35 years service. We want a past service reserve equal to for the past service of n = 15 years plus n/ns of the remaining prospective part ns - n = 20 years service. The future service cost will be based on the additional accrued service required to reach n = 16 at the end of the control period. The immediate pension on death allowed for in the past and future service present value calculations, is therefore.
let future service = f ( in this case 1 year control period )
past service pension = 0.5 x FPS x 0.025 x ( n + n / ns x ( ns - n ) ) = 0.5 x FPS x 0.025 x ( 2n - n x n / ns )
future service pension = 0.5 x FPS x 0.025 x ( 2 x ( n + f ) - ( n + f ) x ( n + f ) / ns - 2n + n x n / ns )
Benefit items to add to *Join Scheme* Event
The following items should be added to calculate service on the Join Scheme event. By adding to the join scheme event they can be used for multiple exit types. They will show as no result until an event is added that causes an exit date to be evaluated.
n,ns,f,FPS
Item
Type
Function
Parameters
result total
result fsp
last_day
Date
event_final_day
n/a automatically gets date of exit
1/1/2025
n/a
FPS
FPS at Exit
Real
fps_at_date_from_series
as required
20000
1.0
Benefit items to add to *Active Death* Event
These are the main calculations to add to evaluate each type of service and the final pension.
n,ns,f,FPS
Item
Type
Function
Parameters
result total
result fsp
n
Accrued Service at Exit (Past)
Real
fServiceFullTime
start:1/1/1900,end:1/1/2150,force_end:last_day,propective:false,actuarial:past only
15.0
0.0
f
Accrued Service at Exit (Future)
Real
fServiceFullTime
start:1/1/1900,end:1/1/2150,force_end:last_day,propective:false,actuarial:future control period
1.0
1.0
ns
Prospective Service at Exit
Real
fServiceFullTime
start:1/1/1900,end:1/1/2030,force_end:1/1/2030,propective:true ,actuarial:automatic
35.0
0.0
Pension at death
Real
fArithmeticExpressionPastFuture
see below
6171.43
278.57 / 6171.43
Pension Payments
Real Series
penincs_index_series_start, penincs_index_series
as required to for example create a monthly non indexed pension
6171.43/12.0
278.57 / 6171.43
fArithmeticExpressionPastFuture can accept an expression for past service, future service and up to ten real numbers called param 1 to param 10. Set param 1 to 4 to point at the benefit items added to the Join Scheme Event:
param 1 = FPS at Exit
param 2 = Accrued Service at Exit (Past)
param 3 = Accrued Service at Exit (Future)
param 4 = Prospective Service at Exit
Then the expressions for past and future seevice pension can be added exactly as expected.
Past
0.5 * param(1) * 0.025 * ( 2 * param(2) - param(2) * param(2) / param(4) )
Future
0.5 * param(1) * 0.025 * ( 2 * ( param(2) + param(3) ) - ( param(2) + param(3) ) * ( param(2) + param(3) ) / param(4) - 2 * param(2) + param(2) * param(2) / param(4) )