AAuditPro Suite· HR manual
HR manual Wave 2d · Compensation
Oman Labour Law Art. 39 IAS 19 — Employee Benefits WPS · MOLP

The 4 sub-tabs

Bank accounts

Employees may have multiple bank accounts (primary salary + secondary for transfers home). Fields:

Allowances (10 types)

TypeFrequencyTaxable / PASI
HousingMonthlyPASI subject (Omani only)
TransportMonthlyNot PASI
CommunicationMonthlyNot PASI
EducationAnnualNot PASI
FuelMonthlyNot PASI
MealMonthlyNot PASI
SpecialMonthly / one-offConfigurable
OvertimeMonthlyConfigurable
BonusOne-off / annualConfigurable
OtherConfigurableConfigurable

Deductions

Active deductions reduce monthly net pay. Loan-style deductions track principal + balance so the employee's debt is visible:

Salary revision history (append-only)

Every salary change creates a row in employee_salary_history:

EOSB — the calculator

End of Service Benefit per Oman Labour Law Art. 39:

Worked example

Employee: EMP0042 · Basic salary OMR 850 · Joined 1-Jan-2022 · Last day 31-Mar-2026 Service period: 4 years 3 months = 4.25 years First band (years 1-3, 15 days/year): 3.0 years × 15 days = 45.0 days Second band (years > 3, 30 days/year): 1.25 years × 30 days = 37.5 days Total accrued days = 82.5 Daily rate = 850 / 30 = 28.333 OMR EOSB = 82.5 × 28.333 = 2,337.49 OMR

Monthly snapshot cron

bin/cron-m13-eosb-accrual.php runs on the last day of every month at 23:30. For each active employee:

  1. Compute EOSB at end-of-month
  2. Insert / update row in employee_eosb_accruals for (employee × period_year × period_month)
  3. UNIQUE constraint = idempotent on re-run
  4. Audit-log entry

The cumulative accrued amount is the firm's IAS 19 provision liability. Roll-up across all active employees = the total provision shown on SFP. Audit firms that don't accrue monthly get a lumpy December P&L hit.

Step-by-step — record a salary revision

  1. Open employee → Salary History tab

    Existing revisions in reverse-chronological order with colour-coded % column (green for increase, red for decrease).

  2. Click "+ Record revision"

    Form: effective_date · new_basic · reason · approver_id (employee picker, must be partner).

  3. System captures old_basic + computes %

    old_basic auto-pulled from current employees.basic_salary. Δ% computed. Append to history. If effective today or earlier, employees.basic_salary updated live.

  4. EOSB recomputes on next month-end

    The EOSB cron uses the live basic_salary, so the snapshot reflects the new rate going forward. Past months' snapshots are immutable.

Try this

Open HR → Employee → EOSB tab. The hero card shows: Years of Service · Days Accrued · Daily Rate · Accrued Amount. The two-band formula is laid out below with the actual numbers. Click Recompute to refresh after a salary revision.

Watch out

Salary history is append-only by policy. If you mistakenly entered the wrong figure, post a correction revision (reason = "correction") with the right value, not a delete. The audit log preserves both events. If you really need to expunge a row, only super_admin via DB-level intervention — and that gets captured in M16 vault audit log.

Tip — bank account WPS check

WPS (Wage Protection System) requires salary deposit into an Oman-licensed bank's local account. Before marking is_wps_eligible=1, confirm the bank is on MOLP's list. Foreign banks (e.g. ICICI, HSBC) without an Oman branch are NOT WPS-eligible.