AAuditPro Suite· HR manual
HR manual EOSB calculator

The two bands — visualised

Oman Labour Law Art. 39 — EOSB accrual rates by years of service Days / year 0 1 2 3 yrs 4 5 6 7 0 15 30 15 days / year FIRST BAND · 0–3 years 30 days / year SECOND BAND · 3+ years BAND CHANGE Daily rate = basic / 30 EOSB = days_accrued × daily_rate

Cumulative days accrued — sketch

Cumulative days as years of service grow (kink at year 3) 0 45 75 105 135 0y 1y 2y 3y 4y 5y 6y 7y 45 days @ year 3 7y → 165 days

The formula

years_of_service = (last_day - joining_date) / 365.25

if years_of_service <= 3:
    days_accrued = years_of_service * 15
else:
    first_band  = 3 * 15            # = 45 days
    second_band = (years_of_service - 3) * 30
    days_accrued = first_band + second_band

daily_rate = basic_salary / 30      # configurable

eosb = days_accrued * daily_rate

Configurable settings

SettingDefaultWhy configurable
m13.eosb.first_period_years3Most firms use 3; some firm-specific contracts use different break
m13.eosb.first_band_days15Statutory min; some firms enhance
m13.eosb.second_band_days30Statutory min
m13.eosb.daily_rate_divisor30Some firms use 26 (working days only) for higher EOSB

Worked example 1 — exactly 3 years

Employee joined 1-Jan-2023. Last day 31-Dec-2025. Basic salary OMR 950.

Worked example 2 — 4.25 years

Employee joined 1-Jan-2022. Last day 31-Mar-2026. Basic salary OMR 850.

Worked example 3 — under 1 year

Employee joined 1-Aug-2025. Last day 31-Jan-2026. Basic salary OMR 600.

(Some firms have a minimum-service-period before EOSB accrues — check the contract. The system supports both: default policy = pro-rate from day 1.)

The monthly snapshot table

employee_eosb_accruals stores one row per (employee × period_year × period_month) with:

UNIQUE (employee_id, period_year, period_month) makes the cron idempotent.

IAS 19 treatment

EOSB is a defined-benefit obligation per IAS 19. Treatment:

The aggregate of employee_eosb_accruals at any month-end IS the IAS 19 EOSB provision. M19 disclosure compliance flags this as a mandatory note.

Settlement (paid event)

When EOSB is paid (typically as part of final settlement):

  1. Final settlement record is created with EOSB component pulled from latest snapshot
  2. Approval → Payment
  3. Last snapshot row marked is_settlement=1
  4. Liability releases (Dr Provision Cr Cash)
  5. Employee's accrual stream stops (status flips to terminated)

Audit perspective — defending the number

An external auditor (TPL-AA) will test the EOSB provision. The defence:

Try this

Pick any active employee → Compensation → EOSB tab. The 4-tile hero shows the calculator output. Click Recompute to refresh against current employees.basic_salary. The monthly snapshot table below shows the historical liability evolution.

Watch out

Don't manually edit employee_eosb_accruals rows. They are computed snapshots; manual edits break the audit trail. If a salary correction is needed, post a salary revision (history row) and let the next month's cron pick it up. Past months stay frozen.

Tip — projection planning

For partner forecasting, project EOSB exposure 3-5 years out by extrapolating each employee's accrual. This is the firm's biggest single non-current liability. Audit firms are often surprised by EOSB exposure when major terminations bunch — having the projection helps.