Payroll

WPS & Mudad Payroll Integration with Odoo (Saudi Arabia)

How KSA employers run a clean WPS cycle every month — generating Mudad-ready SIF files from Odoo HR, reconciling against GOSI, and clearing bank rejections same-day.

iWesabe Editorial TeamMay 26, 20268 min read

WPS — the Wage Protection System — is how every Saudi employer above the GOSI registration threshold pays salaries. The mechanism is a Salary Information File (SIF) lodged through Mudad, validated by SAMA, and disbursed by employee banks. When the SIF lines up cleanly with the contracts on Qiwa and the contributions on GOSI, payroll is a 15-minute monthly task. When it doesn't, it becomes the most expensive HR fire-drill in the calendar.

This guide walks through how iWesabe configures Odoo HR + Payroll so that the Mudad SIF is generated natively from the same employee dataset used by Nitaqat and GOSI — no bridging spreadsheets, no re-keyed IBANs, and a same-day path for the inevitable bank rejection that arrives at 09:00 on transfer day.

What is WPS and how does Mudad sit on top of it?

WPS is the regulatory framework — employers must pay employees electronically to a Saudi bank account within a specified window each month. Mudad is the operational platform run under HRSD that delivers the SIF to participating banks via SAMA's settlement layer. Inside Odoo, the work is producing a SIF that conforms to the current Mudad schema and matches the employee + contract records on Qiwa, to the riyal.

Already hitting rejections every cycle?

iWesabe runs a Mudad/WPS audit on your current Odoo HR + Payroll setup and delivers a written cleanup plan inside two weeks.

Talk to an Odoo payroll expert

How is Odoo Payroll configured to generate a Mudad-ready SIF?

Odoo Payroll ships with a configurable rules engine — earnings, deductions, GOSI bases, end-of-service accrual — but the Mudad SIF schema is KSA-specific. The configuration work is encoding the SIF column structure, mapping each Odoo payslip line to its SIF position, and adding validation rules that block the file from generating if any required field is missing.

1. Make IBAN a validated, single-source field

Every employee's IBAN must pass the Saudi IBAN check-digit validation before the record can be saved. We add the validator at the employee form level so a wrong IBAN can never enter payroll in the first place. This single rule eliminates the most common rejection reason at the bank.

2. Encode the SIF-aligned salary structure

Mudad's SIF expects specific components — basic salary, housing allowance, other allowances, deductions, and net pay — in fixed positions. We build the Odoo salary structure so payslip lines map 1:1 to SIF columns. Anything earned outside the structure (one-off bonuses, leave encashment) routes through a deliberate SIF mapping rule, never an ad-hoc adjustment.

3. Add the Mudad-format SIF export action

A single button on the payroll cycle closes the period, generates the SIF in Mudad's expected character set + line terminator + column order, and locks the cycle against further edits. We sign the file with a checksum line so any manual tampering between Odoo export and Mudad upload is detectable on the lodgement screen.

How does Odoo reconcile WPS against GOSI in the same cycle?

GOSI contributions are calculated on a defined base — generally basic salary + housing allowance — and the employer share + employee share must match what was actually paid through Mudad. A mismatch surfaces as a GOSI portal warning that takes weeks to resolve once it has built into a backlog. Odoo runs the reconciliation inside the same close cycle, before the SIF is even exported.

  1. Eligible-base calculation: Odoo derives the GOSI base per employee from the salary structure — the same fields that produce the SIF amounts. One source, two outputs, zero drift.
  2. Contribution register: a per-employee register lists the employer share + employee share + total contribution, summed at the establishment level. The total must reconcile against the GOSI portal balance for the period before close.
  3. WPS-vs-GOSI delta report: a single Odoo report shows any per-employee gap between the SIF gross and the GOSI eligible base — typically zero, but instantly visible when a one-off payment was routed incorrectly.

Spreadsheet payroll vs Odoo + Mudad — what is the operational difference?

Many KSA SMEs still build payroll in Excel and export a SIF by hand each month. That works at 10 employees and breaks at 50. The table below compares spreadsheet-based payroll against an Odoo HR + Payroll setup configured the way iWesabe deploys it for KSA clients.

Spreadsheet payroll vs iWesabe Odoo + Mudad setup
DimensionSpreadsheet / manualOdoo + Mudad (iWesabe)
SIF generation time1–2 days per cycleSingle click at cycle close
IBAN validationVisual check onlyCheck-digit blocked at save
GOSI reconciliationSeparate file, end of monthIn-cycle, before SIF export
Bank rejection turnaround2–5 working daysSame-day correction + re-lodge
Audit trail per payslipEmail + file archiveFull Odoo audit log
End-of-service accrualAnnual catch-up calcMonthly accrual on payslip
Time to onboard new bank1–2 weeksSame cycle (IBAN-driven)

The operational lever is consistency. A spreadsheet payroll works until the cycle that does not — and the absence of an audit trail makes the next month's cleanup expensive. Odoo's value is that every cycle looks the same, every variance is visible, and every correction is logged against the named user who made it.

Which WPS KPIs should the payroll lead see every cycle?

Once Odoo is generating the SIF natively, four KPIs are enough to keep the payroll cycle inside a safe operating envelope month after month.

100%
Mudad first-pass acceptance
≤ 1%
Bank rejection rate per cycle
0 SAR
WPS-vs-GOSI delta at close
≤ 1 day
Cycle close to bank-lodgement gap

The fifth KPI we maintain — not in the stat block but on the payroll dashboard — is rejection recurrence by employee. The same IBAN failing two cycles in a row points to a stale bank record, not a one-off — and the cheapest moment to fix it is before the third cycle compounds the backlog.

Migrating from a spreadsheet or another payroll tool?

iWesabe handles the migration cycle-by-cycle so live salary payments never miss a date during the cutover.

Request a payroll migration plan

What are the most common WPS/Mudad failure modes Odoo prevents?

Five failure modes account for nearly every WPS issue iWesabe has remediated in Saudi Arabia. Each is preventable when payroll is run from a configured Odoo instance instead of a spreadsheet + ad-hoc SIF generator.

  • Invalid IBAN at the bank. Manual entry without a check-digit validator routinely produces typos that pass Mudad validation but fail at the bank. The fix is upstream — never let an invalid IBAN save in the first place.
  • Mismatched name between SIF and bank record. The bank rejects when the employee name on the SIF differs even slightly from the registered account name. Odoo enforces a single canonical name field used by Qiwa, Mudad, and the contract.
  • Out-of-period salary corrections. A correction processed after the SIF has been lodged creates a GOSI mismatch in the next cycle. Odoo blocks payslip edits after cycle close so corrections always route through a properly dated next-period adjustment.
  • One-off bonuses outside the salary structure. Routed through a free-text adjustment they break the WPS-vs-GOSI reconciliation. Routed through a configured rule with explicit GOSI treatment, they don't.
  • Late lodgement past the Mudad window. Delayed cycles trigger HRSD penalties and visible compliance flags. Odoo schedules the close + lodge sequence as a calendar item so the cycle never runs ad-hoc.

A clean WPS cycle is the most boring thing in a Saudi payroll calendar. That is the goal.

iWesabe Payroll Practice

WPS is not a monthly emergency — it is a 15-minute regulatory event when the underlying data is clean and the cycle order is right. Odoo HR + Payroll, configured for KSA the way iWesabe deploys it, converts payroll from a recurring fire to a routine cycle the CFO can ignore on every normal month.

iWesabe has configured this Odoo setup for KSA establishments across construction, retail, manufacturing, healthcare, hospitality, and services. If you are running payroll in a spreadsheet today, or fighting recurring bank rejections, a 60-minute call is enough to scope the migration.

Book the 60-minute WPS readiness call

We will review your current cycle, your rejection patterns, and the top three actions on the Odoo side.

Contact iWesabe

Frequently Asked Questions

Does Odoo Payroll generate the Mudad SIF natively?
Yes — with KSA-specific configuration. Odoo's payroll module is a configurable rules engine; iWesabe adds the Mudad SIF schema, the salary-structure mapping, and the validation rules so the file generates at cycle close with one click. No external tool, no manual reformatting.
What happens when a bank rejects a payment after Mudad accepted the file?
Two paths. If it is a record issue (wrong IBAN, name mismatch, closed account), Odoo isolates the affected employees, lets you correct in-place, regenerate a delta SIF for those records only, and re-lodge same-day. If it is a system issue at the bank, Mudad's reconciliation reflects the failure and the bank handles re-processing — Odoo records the failure on the payslip audit log so it shows up in the rejection-by-employee KPI.
Can Odoo handle multi-bank payroll where employees use different Saudi banks?
Yes — Mudad routes the SIF to the correct bank based on each employee's IBAN, so Odoo only needs to generate one file per cycle regardless of how many banks the workforce uses. Adding a new bank requires no Odoo change — the first employee with an IBAN at that bank simply appears in the next cycle's SIF.
How does GOSI reconciliation work when an employee resigns mid-cycle?
Odoo prorates both the WPS payment and the GOSI base to the resignation date inside the same cycle. The contribution register reflects the partial month, the SIF pays the partial salary, and the WPS-vs-GOSI delta stays at zero. End-of-service accrual settles on the final payslip alongside any leave encashment, all in one cycle close.
What ongoing support is needed after the Odoo WPS setup is live?
Three streams: Mudad/SIF schema updates as the platform evolves, GOSI rule changes affecting the eligible base, and Odoo version upgrades on a 12–24 month cycle. iWesabe maintains all three under standard support so the payroll lead is not absorbing regulatory tracking work that distracts from the monthly cycle.
iWesabe Editorial Team

iWesabe Editorial Team

Practitioner insights on Odoo ERP, ZATCA compliance, and Saudi enterprise digital operations — written by iWesabe's consulting, finance, and engineering teams.

About iWesabe

Related Articles