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:

  1. Search for and select a salary-related action, for example, 'Change Salary'.
  2. 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.
  1. 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.

  2. 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.

  3. 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).

  4. 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. 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*/
    
  6. 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))   
    
  7. 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.

  8. 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
    
    
  9. 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*/  	
    
  10. 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))  
    
  11. 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.