Backdated Pay Awards
You must configure backdated pay awards to calculate Monthly Contributions Reconciliation (MCR) contributions using the "when paid" (BK) method.
The steps to do this include the configuration of:
- Salary action or actions for a pay award and the predefined Pay Award action reason.
- New formula to identify the pay award salary change.
- Pension scheme balance and calculator formula changes.
The setup steps for the above and advice on how to process your backdated pay awards to meet TP requirements are described below.
Associate Salary Action with Pay Award Action Reason
Using the Configure Actions tasks, identify a salary action as pay award-related by associating it with the predefined Pay Award action reason:
- Search for and select a salary-related action, for example, 'Change Salary'.
- Associate the salary action with the predefined action reason code 'Pay Award'.
Create Pay Award Formula
Using the Fast Formulas task, create and compile a new formula to identify the salary change due to a pay award. The formula type must be Oracle Payroll.
See attached file PS_BACK_DT_PAY_AWARD_EARN_RETRO_PROCESS_FORMULA.txt.
FORMULA NAME: TPS_BACK_DT_PAY_AWARD_EARN_RETRO_PROCESS
/* Database Item Defaults */
DEFAULT FOR HRX_GB_TPS_ACT_REASON_CD_PAY_AWARD_DBI is 0
DEFAULT FOR GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_RUN is 0
DEFAULT FOR GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_PTD is 0
/* Inputs */
INPUTS ARE amount (number),
pay_value(number)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBEARN)Initializing the Pay Award Formula ')
l_amount = amount
l_value = 0
l_value_info_element = 0
l_value = pay_value
l_asg_nocb_run = GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_RUN
l_asg_nocb_ptd = GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_PTD
/* Key Variable values retrival*/
l_element_entry_id = GET_CONTEXT(ELEMENT_ENTRY_ID, 0)
l_log = PAY_INTERNAL_LOG_WRITE(' Retro Formula step 0 l_value : '||to_char(l_value ))
l_log = PAY_INTERNAL_LOG_WRITE(' Retro Formula step 0 l_asg_nocb_run : '||to_char(l_asg_nocb_run ))
l_log = PAY_INTERNAL_LOG_WRITE(' Retro Formula step 0 l_asg_nocb_ptd : '||to_char(l_asg_nocb_ptd ))
l_log = PAY_INTERNAL_LOG_WRITE(' Retro Formula step 0 element_entry_id : '||to_char(l_element_entry_id))
IF (l_asg_nocb_run <> l_asg_nocb_ptd) THEN
(
l_value_info_element = 0
l_log = PAY_INTERNAL_LOG_WRITE('Retro Formula step 1 l_value_info_element : '||to_char(l_value_info_element ))
)
ELSE IF HRX_GB_TPS_ACT_REASON_CD_PAY_AWARD_DBI WAS NOT DEFAULTED THEN
(
l_value_info_element = l_value
l_log = PAY_INTERNAL_LOG_WRITE('Retro Formula step 2 l_value_info_element : '||to_char(l_value_info_element ))
)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBEARN) Derived value : '||TO_CHAR(l_value))
RETURN l_value ,
l_value_info_element
/* End Formula Text */
Status Processing Rule
- Create Status Processing Rule of Earning Retro Element with new formula created
previously and configure earning retro element as below:
- Result Returned = L_VALUE_INFO_ELEMENT
- Result Rule = Indirect Result
- Target Element Name = Backdated Pay Award Information TPS (predefined element)
- Target Input Value = Pay Value
- Unit of Measure = Money
Pension Scheme Balance and Formula Changes
The following balance dimensions must exist in the qualifying pension scheme element balance as they are required by the pension scheme’s calculator formula.- If your pension scheme element was created prior to 22B, add the balance
dimension Assignment NoCB Period to Date to the balances shown:
- TPS Earnings Retroactive
- <Element name> Permanent Pensionable Pa
- <Element name> Eligible Compensation
- <Element name> Employees Contribution
- <Element name> Employers Contribution
- <Element name> Assumed Pensionable Pay
If you created your qualifying pension scheme element in 22B, you only need to create the balance dimension for the <Element name> Assumed Pensionable Pay balance.
- If your pension scheme element was created prior to 22B, add the balance
dimension Assignment NoCB Run to the balances shown:
- <Element name> Employees Contribution
- <Element name> Employers Contribution
If you created this element in 22B, the element template adds these dimensions.
- Next, you will need to update your qualifying pension scheme element calculator
formula. Ensure you keep a backup of your existing TPS pension scheme calculator
formula. Then, update that formula as described here.
Our formula example is based on a pension scheme element name “TPS Pension Element CARE”. Rename the relevant variable text to reflect your own pension scheme element name as shown in your existing pension scheme calculator formula. Note that formulas convert element names to upper case and any spaces are converted to underscores (for example, TPS_PENSION_ELEMENT_CARE).
- If your qualifying pension scheme element was created prior to 22B, insert the
highlighted text as shown after the formula line shown. If you create this
element in 22B, you need only add the last line (relating to assumed pensionable
pay) in the position shown; the other lines are added by the element
template.
DEFAULT FOR ORA_HRX_GB_PS_CSP_EPA_PENS_SUSP_START IS '0001/01/01 00:00:00' (date) DEFAULT FOR GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_RUN is 0 DEFAULT FOR GB_TPS_EARN_RETRO_ASG_NOCB_PTD is 0 /*Pay Award*/ DEFAULT FOR TPS_PENSION_ELEMENT_CARE_PERMANENT_PENSIONABLE_PAY_ASG_NOCB_PTD is 0 /*Pay Award*/ DEFAULT FOR TPS_PENSION_ELEMENT_CARE_EMPLOYEES_CONTRIBUTION_ASG_NOCB_PTD is 0 /*Pay Award*/ DEFAULT FOR TPS_PENSION_ELEMENT_CARE_EMPLOYERS_CONTRIBUTION_ASG_NOCB_PTD is 0 /*Pay Award*/ DEFAULT FOR TPS_PENSION_ELEMENT_CARE_ELIGIBLE_COMPENSATION_ASG_NOCB_PTD is 0 /*Pay Award*/ DEFAULT FOR TPS_PENSION_ELEMENT_CARE_ASSUMED_PENSIONABLE_PAY_ASG_NOCB_PTD is 0
- 5. Define pay award related variables. If your qualifying pension scheme element
was created prior to 22B, insert the highlighted text as shown after the formula
line shown. If you create this element in 22B, these lines are added by the
element template.
l_gb_ee_cont_tier = 0 l_tps_add_retro_earnings_ptd = 0 /*Pay Award*/ l_gb_ee_cont_asg_nocb_ptd = 0 /*Pay Award*/ l_gb_er_cont_asg_nocb_ptd = 0 /*Pay Award*/ l_gb_elg_com_asg_nocb_run = 0 /*Pay Award*/ l_gb_elg_com_asg_nocb_ptd = 0 /*Pay Award*/ l_gb_elg_com_asg_nocb_ptd_pen_earn = 0 /*Pay Award*/
- Modify the code shown below. If your qualifying pension scheme element was
created prior to 22B, insert the highlighted text as shown after the formula
line shown. If you create it in 22B, these lines are added by the element
template.
/* eligible_compensation = eligible_compensation + TPS_PENSION_ELEMENT_CARE_ELIGIBLE_COMPENSATION_ASG_NOCB_RUN */ l_final_pensionable_pay = l_final_pensionable_pay + TPS_PENSION_ELEMENT_CARE_FINAL_PENSIONABLE_PAY_ASG_NOCB_RUN /* Pay Award-Start*/ IF l_gb_pen_emp_type = 'TPSCHAC' THEN ( eligible_compensation = eligible_compensation + TPS_PENSION_ELEMENT_CARE_ELIGIBLE_COMPENSATION_ASG_NOCB_PTD l_gb_elg_com_asg_nocb_ptd = eligible_compensation l_gb_ee_cont_asg_nocb_ptd = TPS_PENSION_ELEMENT_CARE_EMPLOYEES_CONTRIBUTION_ASG_NOCB_PTD l_gb_er_cont_asg_nocb_ptd = TPS_PENSION_ELEMENT_CARE_EMPLOYERS_CONTRIBUTION_ASG_NOCB_PTD l_gb_elg_com_asg_nocb_run = TPS_PENSION_ELEMENT_CARE_ELIGIBLE_COMPENSATION_ASG_NOCB_RUN dummy = PAY_INTERNAL_LOG_WRITE('GB 0 eligible_compensation = ' || to_char(eligible_compensation)) dummy = PAY_INTERNAL_LOG_WRITE('GB 0 l_gb_elg_com_asg_nocb_run = ' || dummy = PAY_INTERNAL_LOG_WRITE('GB 0 l_gb_elg_com_asg_nocb_ptd = ' || to_char(l_gb_elg_com_asg_nocb_ptd)) dummy = PAY_INTERNAL_LOG_WRITE('GB 0 l_gb_ee_cont_asg_nocb_ptd = ' || to_char(l_gb_ee_cont_asg_nocb_ptd)) dummy = PAY_INTERNAL_LOG_WRITE('GB 0 l_gb_er_cont_asg_nocb_ptd = ' || to_char(l_gb_er_cont_asg_nocb_ptd)) )/* Pay Award-End*/ ELSE (eligible_compensation = eligible_compensation + TPS_PENSION_ELEMENT_CARE_ELIGIBLE_COMPENSATION_ASG_NOCB_RUN ) dummy = PAY_INTERNAL_LOG_WRITE('ASG Final Pensionable Pay set to ' || to_char(l_final_pensionable_pay))
- Modify the code shown below. If your qualifying pension scheme element was
created prior to 22B, insert the formula lines as
shown:
IF l_gb_pen_category <> 'NA' THEN ( IF l_gb_pen_emp_type = 'TPSCHAC' THEN ( /* Get Assignment Category Extended code */ l_hr_asg_id = ASG_HR_ASG_ID SET_INPUT ('hr_id', l_hr_asg_id) SET_INPUT ('eff_date', PAY_EARN_PERIOD_END) SET_INPUT ('mode', 'ORA_HRX_GB_ASG_EMP_CAT_EXTENDED') EXECUTE('ORA_HRX_GB_PAY_ACCESS_HR') l_tps_emp_cat_ext_code = GET_OUTPUT('X_OUTPUT_TEXT', 'FT' ) temp = PAY_INTERNAL_LOG_WRITE('$$$%%%% l_tps_emp_cat_ext_code : ' +l_tps_emp_cat_ext_code) l_tps_add_retro_earnings = GB_TPS_EARN_RETRO_ASG_NOCB_RUN l_tps_add_retro_earnings_ptd = GB_TPS_EARN_RETRO_ASG_NOCB_PTD dummy = PAY_INTERNAL_LOG_WRITE('[TPS] - l_tps_add_retro_earnings = ' || to_char(l_tps_add_retro_earnings)) dummy = PAY_INTERNAL_LOG_WRITE('[TPS] - l_tps_add_retro_earnings_ptd = ' || to_char(l_tps_add_retro_earnings_ptd )) l_log = PAY_INTERNAL_LOG_WRITE('[TPS] - GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_RUN : '||to_char(GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_RUN)) If l_tps_add_retro_earnings >0 then ( if GB_TPS_BACK_DT_PAY_AWARD_ASG_NOCB_RUN >0 then ( l_tps_add_retro_earnings = l_tps_add_retro_earnings_ptd - l_tps_add_retro_earnings l_log = PAY_INTERNAL_LOG_WRITE('[TPS] - l_tps_add_retro_earnings : '||to_char(l_tps_add_retro_earnings )) ) ) IF l_tps_app_flag = 'Y' THEN ( l_gb_permanent_earnings = l_gb_permanent_earnings + TPS_PENSION_ELEMENT_CARE_ASSUMED_PENSIONABLE_PAY_ASG_NOCB_PTD + l_tps_add_retro_earnings dummy = PAY_INTERNAL_LOG_WRITE('[TPS APP] - l_gb_permanent_earnings = ' || to_char(l_gb_permanent_earnings)) IF l_tps_prorate_days > 0 and l_tps_days_in_period > 0 THEN (l_gb_permanent_earnings = l_gb_permanent_earnings * (l_tps_prorate_days/l_tps_days_in_period) dummy = PAY_INTERNAL_LOG_WRITE('[TPS APP] - Prorated l_gb_permanent_earnings = ' || to_char(l_gb_permanent_earnings)) ) ) ELSE /*(l_gb_permanent_earnings = l_gb_permanent_earnings + TPS_PENSION_ELEMENT_CARE_PERMANENT_PENSIONABLE_PAY_ASG_NOCB_RUN + l_tps_add_retro_earnings */ (l_gb_permanent_earnings = l_gb_permanent_earnings + TPS_PENSION_ELEMENT_CARE_PERMANENT_PENSIONABLE_PAY_ASG_NOCB_PTD + l_tps_add_retro_earnings /*Pay Award*/ dummy = PAY_INTERNAL_LOG_WRITE('[TPS] - l_gb_permanent_earnings = ' || to_char(l_gb_permanent_earnings)) If you create your qualifying pension scheme element in 22B, of the changes shown above, you need to add only these 2 lines: l_gb_permanent_earnings = l_gb_permanent_earnings + TPS_PENSION_ELEMENT_CARE_ASSUMED_PENSIONABLE_PAY_ASG_NOCB_PTD + l_tps_add_retro_earnings
The other lines are created by the element template.
- Modify the code shown below. If your qualifying pension scheme element was
created prior to 22B, insert the highlighted text before and after the formula
lines shown. If you create this element in 22B, these lines are added by the
element
template.
i = ALL_ASGS_LINK_TO_DEDUCTION_COMPONENT.next(i, -1) ) dummy = PAY_INTERNAL_LOG_WRITE('[PEN_CALC: 502] - eligible_compensation = ' || to_char(eligible_compensation)) /*Added to adjust eligible comp.Pay Award-Start*/ IF l_gb_pen_emp_type = 'TPSCHAC' THEN ( l_gb_elg_com_asg_nocb_ptd_pen_earn = eligible_compensation eligible_compensation = eligible_compensation - (l_gb_elg_com_asg_nocb_ptd - l_gb_elg_com_asg_nocb_run ) dummy = PAY_INTERNAL_LOG_WRITE('[PEN_CALC: TPS eligible_compensation Adjusted = ' || to_char(eligible_compensation)) ) /*Added to adjust eligible comp.Pay Award-End*/ ) IF (TPS_PENSION_ELEMENT_CARE_SECONDARY_CLASSIFICATION <> 'GB_PRE_STATUTORY_DEDUCTIONS_ADDITIONAL_PENSION_CONTRIBUTIONS_PRE_STATUTORY') THEN ( IF (PAY_DIR_COMP_CONTEXT_VALUE1 WAS NOT DEFAULTED) THEN ( l_gb_reference_code = PAY_DIR_COMP_CONTEXT_VALUE1 ) ) ) if l_final_pensionable_pay = 0 then (l_final_pensionable_pay = TPS_PENSION_ELEMENT_CARE_FINAL_PENSIONABLE_PAY_REL_NOCB_RUN dummy = PAY_INTERNAL_LOG_WRITE('REL Final Pensionable Pay set to ' || to_char(l_final_pensionable_pay)) ) /* if eligible_compensation = 0 then */ /*Pay Award*/ if ((eligible_compensation = 0) and l_gb_pen_emp_type <>'TPSCHAC') then /*Pay Award*/ (eligible_compensation = TPS_PENSION_ELEMENT_CARE_ELIGIBLE_COMPENSATION_REL_NOCB_RUN
- Modify the code shown below. If your qualifying pension scheme element was
created prior to 22B, insert the highlighted text before and after the formula
lines shown. If you create this element in 22B, these lines are added by the
element template.
IF (l_gb_pen_emp_type = 'TPSCHAC') THEN (dummy = PAY_INTERNAL_LOG_WRITE('In Emp Type = TPSCHAC l_gb_pen_category = ' ||l_gb_pen_category ) l_gb_reference_code = PAY_DIR_COMP_CONTEXT_VALUE1 dummy = PAY_INTERNAL_LOG_WRITE('[TPS]: DEDUCTION_CARD_BY_EE = ' || to_char(DEDUCTION_CARD_BY_EE) +' l_gb_reference_code = ' || l_gb_reference_code) /* Code change due to Pay Award-Start*/ /* l_gb_pen_earnings = eligible_compensation*/ l_gb_pen_earnings = l_gb_elg_com_asg_nocb_ptd_pen_earn /* Code change due to Pay Award-End*/
- Modify the code shown below. If your qualifying pension scheme element was
created prior to 22B, insert the highlighted text before and after the formula
lines shown. If you create this element in 22B, these lines are added by the
element template.
call_formula('RATE_CONVERTER', l_gb_permanent_earnings > 'SOURCE_AMOUNT', l_gb_payperiod > 'SOURCE_PERIODICITY', 'Year' > 'TARGET_PERIODICITY', l_gb_annual_pen_earnings < 'TARGET_AMOUNT' default 0 ) dummy = PAY_INTERNAL_LOG_WRITE('[TPS 01]: Permanent Pensionable earnings = ' || to_char(l_gb_permanent_earnings)) dummy = PAY_INTERNAL_LOG_WRITE('[TPS 01]: Annual Permanent Pensionable earnings = ' || to_char(l_gb_annual_pen_earnings)) CHANGE_CONTEXTS(PART_NAME = 'GB_PS_TPS_EE_PENSION_RATES') ( call_formula('CALL_CALC_VALUE', FLOOR(l_gb_annual_pen_earnings) > 'base', l_gb_ee_pen_rate < 'ded_amount' default 0 ) l_log = PAY_INTERNAL_LOG_WRITE('[TPS 10]: l_gb_ee_cont_asg_nocb_ptd : '||to_char(l_gb_ee_cont_asg_nocb_ptd)) l_gb_pen_ee_cont_derived = (l_gb_pen_earnings * (l_gb_ee_pen_rate)/100) - l_gb_ee_cont_asg_nocb_ptd /*Pay Award -l_gb_ee_cont_asg_nocb_ptd*/ temp = PAY_INTERNAL_LOG_WRITE('[TPS ] Permanent Pensionable earnings = ' +to_char(l_gb_permanent_earnings)) temp = PAY_INTERNAL_LOG_WRITE('[TPS 11] l_gb_pen_ee_cont_derived : ' +to_char(l_gb_pen_ee_cont_derived)+' l_gb_ee_pen_rate : ' +to_char(l_gb_ee_pen_rate)) ) CHANGE_CONTEXTS(PART_NAME = 'GB_PS_TPS_ER_PENSION_RATES') ( call_formula('CALL_CALC_VALUE', FLOOR(l_gb_annual_pen_earnings) > 'base', l_gb_er_tps_pen_rate < 'ded_amount' default 0 ) l_log = PAY_INTERNAL_LOG_WRITE('[TPS 10]: l_gb_er_cont_asg_nocb_ptd : '||to_char(l_gb_er_cont_asg_nocb_ptd)) l_gb_pen_er_tps_cont_derived = (l_gb_pen_earnings * l_gb_er_tps_pen_rate/100) - l_gb_er_cont_asg_nocb_ptd /*Pay Award -l_gb_er_cont_asg_nocb_ptd*/ temp = PAY_INTERNAL_LOG_WRITE('[TPS ] Permanent Pensionable earnings = ' +to_char(l_gb_permanent_earnings)) temp = PAY_INTERNAL_LOG_WRITE('[TPS 11] l_gb_er_tps_pen_rate : ' +to_char(l_gb_er_tps_pen_rate)+' l_gb_pen_er_tps_cont_derived : ' +to_char(l_gb_pen_er_tps_cont_derived))
- Modify the code shown below. If your qualifying pension scheme element was
created prior to 22B, insert the highlighted text before and after the formula
lines shown. If you create this element in 22B, these lines are added by the
element
template.
CHANGE_CONTEXTS(PART_NAME = 'GB_PS_TPS_EE_PENSION_RATE_TIER') ( call_formula('CALL_CALC_VALUE', FLOOR(l_gb_annual_pen_earnings) > 'base', l_gb_ee_cont_tier < 'ded_amount' default 0 ) temp = PAY_INTERNAL_LOG_WRITE('[TPS ] Employee Contribution Tier = ' +to_char(l_gb_ee_cont_tier)) ) WSA_SET('GB_PEN_TPS_EE_TIER'||'_'||to_char(DEDUCTION_COMPONENT_BY_EE),l_gb_ee_cont_tier) /* Added for TPS to reset parmanent earning if run elg comp. is zero -- Start */ IF l_gb_elg_com_asg_nocb_run = 0 THEN ( l_gb_permanent_earnings = 0 ) /* Added for TPS to reset parmanent earning if run elg comp. is zero -- End */ WSA_SET('GB_PEN_TPS_PPP'||'_'||to_char(DEDUCTION_COMPONENT_BY_EE),l_gb_permanent_earnings) WSA_SET('GB_PEN_TPS_FPP'||'_'||to_char(DEDUCTION_COMPONENT_BY_EE),l_final_pensionable_pay)
Processing and Reporting Backdated Pay Awards
When a retroactive calculation is performed and the action reason for a salary increase is Pay Award, any arrears calculated are excluded when the process is calculating the contribution tier.
The Pay Value input value of the predefined nonrecurring information element, Backdated Pay Award Information TPS feeds the predefined information balance Backdated Pay Award Information TPS to manage the tier calculation. If the value of the balance is not zero, then the calculation of the tier excludes this amount.
Teachers’ Pension requires you to report U lines for corrections and then U lines for the backdated pay awards (in that sequence). You must perform your payroll and other processes in a specific sequence to achieve this – first do your MCR corrections as one process and payroll run, then your backdated pay awards as a separate process and payroll run.
The suggested sequence is therefore:
- Regular monthly payroll activities including corrections, completed.
- HCM Rates run.
- Retroactive processing for corrections run.
- Payroll run for corrections.
- Backdated pay awards applied.
- HCM rates run.
- Retroactive processing for pay awards run.
- Payroll run for pay awards.
- Other processes.
Some considerations:
- Don’t do further corrections in the same period after the BK changes and payroll run.
- If you update a salary record with a backdated pay award and then run the MCR before the payroll run, the MCR will not reflect the payroll results.
- You must process the Generate HCM Rates process prior to the payroll run, ideally combined in a process flow. Do not submit the MCR flow if you’ve run Generate HCM Rates without a corresponding payroll run.
- A backdated pay award when there are no other pensionable earnings must be reported on a 'When Earned' basis.