OMERS Calculation Logic in HRP
GOAL: To provide a wholistic and technical overview of how OMERS contributions are calculated within the Pay Engine of HRP.
This framework will explain the calculation, process flow, and considerations for boards looking to inquire about the composition of such generated values.
Purpose:
This article explains how HRP calculates the OMERS (Ontario Municipal Employees Retirement System) benefit pension plan deductions during payroll processing.
Applies To:
Payroll Administrators, HR Specialist, and Financial Officers managing employee pensions and deductions.
Component:
OMERS Calculation Engine – integrated within HRP Payrolls Processing Service.
Overview
What is OMERS?
OMERS (Ontario Municipal Employees Retirement System) is a defined benefit pension plan for employees of Ontario municipalities, school boards, and other local government entities. In the HRP payroll system, OMERS calculations determine pensionable earnings (OMERS Gross) and calculate employee and employer (board) contribution amounts based on established rates and thresholds.
Role of OMERS in Payroll
During each pay run, the system:
- Calculates the OMERS Gross (pensionable earnings) for the pay period
- Applies adjustments based on Days Not Paid (DNP) entries and their reduced pay reason codes
- Determines employee and board contribution amounts
- Generates pay records for OMERS deductions and gross amounts
Core Calculation Logic
How Pensionable Earnings are Determined
The OMERS Gross calculation begins by invoking the Subject Entity routine to determine the current OMERS gross amount. The Subject Entity configuration defines which earnings components are included in the OMERS calculation.
Key Inputs Affecting OMERS Gross:
Input | Description |
Salary | Base salary earnings for the pay period |
FTE (Full-Time Equivalent) | Employee's FTE factor affects proration |
Pay Frequency | Number of pays per year (e.g., 26 for bi-weekly) |
Vacation Paid on Each Pay | When enabled, vacation pay percentage is included in OMERS Gross |
Allowances | May be included based on Subject Entity configuration |
Shift Payments | May be included based on Subject Entity configuration |
Subject Entity Configuration
The Subject Entity Maintenance screen defines how OMERS Gross is calculated. Key subject entities include:
- OMERS - Defines which entity types (SALARY, ALLOWANCE, OTHER_PAYMENT) contribute to OMERS Gross
- VACPAY - Defines which entity types are included in vacation pay calculations, which impacts OMERS Gross when vacation is paid on each pay
YMPE (Year's Maximum Pensionable Earnings)
The system calculates the current YMPE based on:
- Board Data CPP YMPE value
- Employee's Pension FTE
- Equivalent Pay Count for the period
- Number of pays per year
Current YMPE = (CPP YMPE × Pension FTE × Equivalent Pay Count) / Number of Pays
Maximum Annual Gross
If a Maximum Annual Gross is configured in the Pensions setup, the system caps the OMERS Gross accordingly:
- If Max Annual Gross = 0, a high threshold (9,999,999) is used
- The proration is applied similarly to YMPE
Pay Inputs and Adjustments
How Days Not Paid (DNP) Impact OMERS Calculations
Days Not Paid entries directly affect the OMERS Gross calculation. The system processes each DNP record and adjusts OMERS Gross based on the Reduced Pay Reason Code assigned.
Reduced Pay Reason Codes
Code | Name | Impact on OMERS Gross | Impact on Vacation Pay Adjustment |
N0 | No OMERS Credit, Reduced Pay | OMERS Gross is reduced by the full DNP amount AND the prorated daily rate deduction | Vacation pay is recalculated on reduced gross |
N1 | No OMERS Credit, Full Pay | OMERS Gross is adjusted by adding the full daily rate DNP amount | Vacation pay on full earnings maintained |
N2 | Full OMERS Credit, Reduced Pay | OMERS Gross remains full; only contributions are affected | Employee pays extra to maintain full credit |
RP | Reduced Pay | Treated similar to N1 for OMERS calculations | See special scenarios below |
N0 Processing Logic
When a DNP with Reduced Pay Reason Code = N0 is processed:
- Insert informational pay record for salary DNP (full daily rate × days not paid)
- Insert adjustment pay record (daily rate FTE × -1 × credit/loss factor)
- If vacation pay is enabled:
- Accumulate DNP amounts and allowances
- Reduce gross by daily rate plus allowance plus shift amounts
- If no vacation pay:
- Directly reduce OMERS Gross
- Process allowance and shift adjustments separately
N1 Processing Logic
When a DNP with Reduced Pay Reason Code = N1 is processed:
- Insert informational pay record for salary DNP (full daily rate × days not paid)
- If vacation pay is enabled:
- Accumulate DNP amounts including shift and allowance
- These amounts are added back when recalculating OMERS Gross
- If no vacation pay:
- Add DNP amount to replaced OMERS Gross
- Include allowance and shift DNP amounts
N2 Processing Logic
When a DNP with Reduced Pay Reason Code = N2 is processed:
- OMERS Gross remains at full value
- Employee contribution is calculated to cover both employee and board portions for DNP days
- Board contribution is calculated on reduced gross only
- This allows employees to "buy back" the full OMERS credit
Deduct Over Pays Logic
When DNP entries span multiple pay periods (Deduct Over Pays > 1):
- The system validates whether to deduct the full DNP in the current pay
- Vacation adjustments are accumulated and applied appropriately
- N2 with deduct over pays is treated as N1 for calculation purposes
Calculation Flow
High-Level Step-by-Step Process
┌─────────────────────────────────────────────────────────────────┐
│ Pay Run OMERS Process │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 1. INITIALIZE │
│ • Find processing group by cheque date │
│ • Load board data (CPP YMPE values) │
│ • Load pension configuration (OMERS rates) │
│ • Load employee pension deductions record │
│ • Check pension waiver dates │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 2. CALCULATE BASE OMERS GROSS │
│ • Invoke Subject Entity routine for OMERS │
│ • Get initial OMERS Gross from subject entity │
│ • Check for pension waiver adjustments │
│ • Check if allowances are included in OMERS │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 3. PROCESS DAYS NOT PAID (DNP) │
│ For each DNP record: │
│ • Get daily rate (FTE and Full FTE) │
│ • Determine if catch-up DNP │
│ • Check deduct over pays settings │
│ • Apply N0/N1/N2 logic based on reason code │
│ • Calculate allowance and shift DNP amounts │
│ • Accumulate vacation pay adjustments │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 4. RECALCULATE OMERS GROSS WITH VACATION PAY │
│ • Apply accumulated N0 and N1 adjustments │
│ • Calculate replaced vacation pay OMERS Gross │
│ • Apply subject entity adjustments for allowance/salary │
│ • Calculate difference from original OMERS Gross │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 5. PROCESS SKIP PAY DNP │
│ • Handle deferred DNP from previous periods │
│ • Apply N2/N1 adjustments with vacation percentage │
│ • Update replaced OMERS Gross │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 6. APPLY RETRO DNP ADJUSTMENTS │
│ • Get retro DNP amounts from pay input │
│ • Add to replaced OMERS Gross │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 7. CALCULATE YMPE AND MAX GROSS │
│ • Calculate current YMPE prorated for pay period │
│ • Calculate current max gross prorated for pay period │
│ • Handle ADDITION run type (no YMPE) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 8. CALCULATE CONTRIBUTIONS │
│ • Split OMERS Gross into Gross1 (≤YMPE) and Gross2 (>YMPE) │
│ • Calculate employee deduction using pension rates │
│ • Calculate board deduction (matches employee) │
│ • Apply N2 adjustments if applicable │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 9. APPLY OVERRIDES │
│ • Check employee pension deductions for overrides │
│ • Apply R (Replace), A (Add), or F (Factor) overrides │
│ • Override employee amount, gross, and/or board amount │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 10. PRODUCE PAY RECORDS │
│ • Create OMERS employee deduction record │
│ • Create OMERS board share record │
│ • Create OMERS_GROSS record │
│ • Apply pension class for reporting │
└─────────────────────────────────────────────────────────────────┘
When Recalculation Occurs
Process Stage | Recalculation Trigger |
Pay Run Debug | OMERS is calculated for each selected employee |
Schedule Groups | Prepares employee data for OMERS calculation |
Pay Register Generation | Final OMERS values are committed to pay records |
Retro Pay Processing | Adjustments are applied based on retro DNP amounts |
Expected Behavior and Validation
What Constitutes Expected OMERS Results
Normal Scenario (No DNP):
- OMERS Gross = Subject Entity calculated gross
- If vacation paid on each pay: OMERS Gross includes vacation percentage
With DNP (N0 - No Credit, Reduced Pay):
- OMERS Gross is reduced proportionally
- Vacation pay is recalculated on the reduced gross
With DNP (N1 - No Credit, Full Pay):
- OMERS Gross includes full earnings for the period
- Employee receives no OMERS credit for DNP days despite full pay
With DNP (N2 - Full Credit, Reduced Pay):
- OMERS Gross remains at full value
- Employee contribution is increased to cover board portion for DNP days
- Board contribution is on reduced amount only
Validating OMERS Gross Against Regular Earnings
To validate OMERS Gross:
- Check Subject Entity Setup
- Navigate to: Payroll → Group Data → Subject Entity Maintenance
- Filter by "OMERS" to see included entity types
- Compare with Pay Register
- Regular Earnings should align with OMERS Gross (adjusted for DNP)
- Vacation pay should be included if configured
- Verify DNP Impact
- Check DNP entries for the employee
- Verify reduced pay reason codes are appropriate
- Confirm daily rate calculations
Known Scenarios Requiring Closer Review
Scenario | Why Review is Needed |
DNP with RP reason code + Vacation on each pay | OMERS Gross may appear inflated due to vacation component interactions |
Multiple DNP entries with different reason codes | Mixed N0/N1/N2 can produce complex adjustments |
Deduct Over Pays > 1 | DNP spanning multiple periods affects current period OMERS differently |
Subject Entity with allowance-only VACPAY | Salary portion excluded from vacation affects OMERS Gross calculation |
Pension waiver dates overlapping pay period | Partial waiver reduces OMERS Gross proportionally |
Reference Scenario
Scenario: OMERS Gross Appears Inflated After DNP Entry (HRP-1869)
Background:
A customer reported that OMERS Gross nearly doubled after entering Days Not Paid with Reduced Pay Reason Code = RP (Reduced Pay) for a permanent group employee with vacation paid on each pay.
Configuration:
- Employee ID: 15759
- Schedule Group: EDASST
- Pay Period: 202503
- FTE: 1.0
- Vacation Paid on Each Pay: Yes
- DNP Reduced Pay Reason Code: RP
Observed Behavior:
- Pre-DNP OMERS Gross: $2,442.14
- Post-DNP OMERS Gross: $4,552.35
Expected Behavior:
- OMERS Gross should be approximately $2,441.99
Analysis:
The RP (Reduced Pay) reason code is treated similarly to N1 in the OMERS calculation logic. When vacation is paid on each pay, the system:
- Adds the full daily rate × DNP days to the replaced OMERS Gross
- Includes vacation pay adjustments on the accumulated DNP amounts
- The original OMERS Gross already includes vacation pay calculated on full earnings
This can result in the vacation component being counted twice when:
- The Subject Entity configuration includes both salary and vacation in OMERS
- A union agreement specifies that vacation is not reduced by DNP
Current System Behavior:
The system is functioning as originally designed. However, the original design did not account for union agreements where vacation pay is not reduced proportionally when DNP is entered.
Workaround:
For customers with such union agreements, the OMERS Gross override functionality in Employee Pension Deductions can be used to manually adjust the OMERS Gross to the correct value.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article