OMERS Calculation Logic in HRP

Modified on Tue, 13 Jan at 4:11 PM

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:

  1. Insert informational pay record for salary DNP (full daily rate × days not paid)
  2. Insert adjustment pay record (daily rate FTE × -1 × credit/loss factor)
  3. If vacation pay is enabled:
    • Accumulate DNP amounts and allowances
    • Reduce gross by daily rate plus allowance plus shift amounts
  4. 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:

  1. Insert informational pay record for salary DNP (full daily rate × days not paid)
  2. If vacation pay is enabled:
    • Accumulate DNP amounts including shift and allowance
    • These amounts are added back when recalculating OMERS Gross
  3. 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:

  1. OMERS Gross remains at full value
  2. Employee contribution is calculated to cover both employee and board portions for DNP days
  3. Board contribution is calculated on reduced gross only
  4. 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:

  1. Check Subject Entity Setup
    • Navigate to: Payroll → Group Data → Subject Entity Maintenance
    • Filter by "OMERS" to see included entity types
  2. Compare with Pay Register
    • Regular Earnings should align with OMERS Gross (adjusted for DNP)
    • Vacation pay should be included if configured
  3. 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:

  1. Adds the full daily rate × DNP days to the replaced OMERS Gross
  2. Includes vacation pay adjustments on the accumulated DNP amounts
  3. 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

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article