Absence Rate for Reducing Pensionable Pay to Exclude Non-Pensionable Allowances
An absence rate that includes nonpensionable allowances (for example, subsistence) requires a second absence rate definition.
This is to ensure that the pensionable earnings are reduced correctly, in cases where an employee is receiving reduced absence pay. This additional rate ensures that their pensionable pay is reduced using the pensionable elements of their absence payment only.
Follow the steps described here to create an additional absence rate that excludes nonpensionable allowance rate definitions as contributors.
Prerequisites
- Element and rate definition for (pensionable) salary element
- Element and rate definition for pensionable elements
- Element and rate definition for non-pensionable elements
- Element and rate definition for absence payment/deduction
- Absence element processing priority must be later than that of the salary and allowance elements
- Rate definition category: Derived rate
- Contributors: Rate definitions for salary, non-pensionable and pensionable elements
Reduced Pensionable Pay Rate Setup
- Create a rate definition for the reduced pensionable pay rate:
- Category: Derived rate
- Periodicity: Annual
- Live rates: Checked by default
- Contributors: Salary and pensionable allowance rate definitions
- Create calculation value definition:
- Calculation type: Rate definition
- Retrieval date: Date earned
- Calculation values: Rate definition created in Step 1
- Add a calculation factor to the Entitlement Result absence element.
- Calculation type: Rate amount
- Calculation value definition: Select the definition created in Step 2.
- Edit the Entitlement Result element formula to fetch the pensionable pay value, convert it to a daily value and return the daily reducing pensionable pay. Refer to the Reduced Pensionable Pay Entitlement Result_ff_May2025.txt file attached to Document ID 2687236.1.
- Add the following code in the absence entitlement result
formula:
IF (Absence_Type = 'ORA_HRX_GB_SM') OR (Absence_Type = 'ORA_HRX_GB_SPA') OR (Absence_Type = 'ORA_HRX_GB_SPB') OR (Absence_Type = 'ORA_HRX_GB_SA') OR (Absence_Type = 'ORA_HRX_GB_SPLA') OR (Absence_Type = 'ORA_HRX_GB_SPLB') OR (Absence_Type = 'ORA_HRX_GB_SS') OR(Absence_Type = 'ORA_HRX_GB_SDM') THEN ( … … ) ELSE ( …. …. net_pay = pay_value + deduction /*Code for reducing pensionable pay*/ l_amount = 0 l_daily_amount = 0 l_reduce_pp = 0 l_reporting_uom = 'ND' l_src_periodicity = 'DAILY' l_np_daily_adj_val = 0 l_calc_daily_adj_val = 0 l_rate_formula = 'ANNUALIZED RATE CONVERSION' CHANGE_CONTEXTS(PART_NAME = 'ORA_RATE_FORMULA') ( IF (CALC_DIR_EXISTS() = 'Y') THEN ( l_rate_formula = CALC_DIR_TEXT_VALUE(0) l_log = PAY_INTERNAL_LOG_WRITE('AP_RATE_PP_REDUCTION - Rate Conversion Formula ::::' || l_rate_formula ) ) ) CHANGE_CONTEXTS(PART_NAME = 'ORA_RESULT_REPORTING_UOM') ( IF (CALC_DIR_EXISTS() = 'Y') THEN ( l_reporting_uom = CALC_DIR_TEXT_VALUE(0) l_log = PAY_INTERNAL_LOG_WRITE('AP_RATE_PP_REDUCTION - Reporting UOM ::::' || l_reporting_uom ) ) ) change_contexts(PART_NAME = 'ORA_RATE_AMOUNT') ( SET_INPUT('BASE',0) EXECUTE('CALL_CALC_VALUE') l_amount = GET_OUTPUT('DED_AMOUNT',0) l_src_periodicity = GET_OUTPUT('PERIODICITY','DAILY') ) l_log = PAY_INTERNAL_LOG_WRITE('[AP_OSP_DED_ENTITLEMENT_RESULT] - AP_RATE_PP_REDUCTION OUTPUT : '|| to_char(l_amount)) IF (l_amount > 0) THEN ( CALL_FORMULA('ORA_RATE_CALCULATOR', 'RATE' > 'in_calc_type', l_reporting_uom > 'in_reporting_uom', l_rate_formula>'in_method', l_amount > 'in_rate' , l_src_periodicity > 'in_src_periodicity' , l_daily_amount < 'out_calc_amount' DEFAULT -1 ) l_log = PAY_INTERNAL_LOG_WRITE('[AP_OSP_DED_ENTITLEMENT_RESULT] - AP_RATE_PP_REDUCTION DAILY OUTPUT : '|| to_char(l_daily_amount)) l_reduce_pp = l_daily_amount * (1 - factor) l_log = PAY_INTERNAL_LOG_WRITE('[AP_OSP_DED_ENTITLEMENT_RESULT] - AP_RATE_PP_REDUCTION Reduced PP OUTPUT : '|| to_char(l_reduce_pp)) l_calc_daily_adj_val = l_daily_amount - ded_amount_rate l_log = PAY_INTERNAL_LOG_WRITE('[AP_OSP_DED_ENTITLEMENT_RESULT] - AP_RATE_PP_REDUCTION l_calc_daily_adj_val : '|| to_char(l_calc_daily_adj_val)) IF l_calc_daily_adj_val <> 0 THEN ( l_np_daily_adj_val = -(net_pay + l_reduce_pp) ) l_log = PAY_INTERNAL_LOG_WRITE('[AP_OSP_DED_ENTITLEMENT_RESULT] - AP_RATE_PP_REDUCTION NP Daily Adj Value OUTPUT : '|| to_char(l_np_daily_adj_val)) ) /*return l_reduce_pp as direct or indirect result*/ … … RETURN unit ,reduce_type ,……………. ,l_reduce_pp, l_np_daily_adj_val
- Edit the Entitlement Result element and create new input values to return direct result of daily reduction of pensionable pay and daily adjusted value.
- Alternatively, create a separate element for returning the daily reduced pensionable pay as an indirect result.
- Add a new formula result rule on the Entitlement Result element for
returning the reduced pensionable pay value:
- Result returned: L_REDUCE_PP
- Result rule: Direct result (using the Entitlement Result element)
- Target input value: New input value (e.g. Reduced Pensionable Pay)
- Alternatively, create a separate element for returning the daily adjusted value as an indirect result.
- Add a new formula result rule on the Entitlement Result element for
returning the daily adjusted value:
- Result returned: L_NP_DAILY_ADJ_VAL
- Result rule: Direct result (using the Entitlement Result element) / indirect result (using a separate element)
- Target input value: New input value (e.g. Daily Adjusted Amount/Amount)