
Payroll is approved. The file is uploaded. An hour later the bank sends it back. Not one line — the whole batch. Somewhere in a long column, a labour card number has two digits swapped.
That is how the Wage Protection System works. It does not accept a file that is mostly right. The format is rigid, and one bad field is enough to stop every salary in the batch.
If you are new to WPS itself, start with our complete guide to WPS payroll. This post covers the other half: why files get rejected, and how to stop the same rejection coming back next month.
What a Rejection Actually Costs
A rejected file is more than a resubmission. While it sits, salaries do not move, and late wages are exactly what WPS exists to catch. Let it happen repeatedly and the consequences grow: the company can face warnings, slower processing, and work permit approvals put on hold.
Our WPS payroll guide covers the wider compliance picture. The point here is narrower. The goal is not a faster fix. It is fewer rejections in the first place.
The Five Causes Behind Most Rejections
The list is short, and none of it is exotic. Each one is a data problem that only shows up when the file is built.
1. Employer Identifiers That Don't Match
The establishment code your company holds with MOHRE has to agree with the employer profile your bank holds for you. When one record is updated and the other is not, every file built on top of them fails.
2. Outdated or Wrong Routing Codes
Each employee line names the bank or exchange house receiving the salary, through a routing code that is typically nine digits. A code copied from an old template, or keyed in wrong when an employee changed banks, is enough to send the batch back.
3. Transposed Labour Card Numbers
Each employee's labour card (MOL personal) number, typically 14 digits, must match the ministry's record exactly. Transposition is the classic manual-entry slip. It is easy to make and almost impossible to spot by eye in a long column of similar numbers.
4. Deductions Beyond the Legal Limit
Article 25 of Federal Decree-Law No. 33 of 2021 limits what an employer may deduct from a worker's wage. When several deductions land in the same month, the total can cross that line without anyone noticing, and the payment line fails. Check the limit against the law itself, not a figure someone remembers.
5. Stray Spaces and Formatting Characters
A SIF is a structured text file. An extra space, an unexpected character or a misplaced column divider breaks that structure. This is common when the file passes through a spreadsheet on its way to the bank. The data can be perfect and the file still fails.
Working Through a Rejection
When a file does come back, resist the urge to re-check everything. Work in this order:
- Read the rejection log first. Your bank's response points to the field that failed. Start there.
- Fix the source record, not the file. Editing the text file by hand gets this month through and leaves the same error waiting for next month.
- Regenerate and resubmit. Build a fresh file from the corrected record and upload it through your bank or exchange house's WPS upload portal.
- Note the cause. If the same kind of error keeps returning, the problem is how data gets entered, not the file.
Prevention Starts Upstream
Most rejections are decided long before payday. They happen when a number is first typed in, or copied from one place to another.
Keep One Record, Not Three Copies
When a labour card number lives in HR's file, payroll's spreadsheet and a bank template, each copy is a chance to disagree. Files assembled by hand from spreadsheets, or from software that was never built for WPS, tend to repeat the same formatting mistakes month after month. We compare the two approaches in HR software vs Excel.
Generating the SIF from the same employee and payroll records removes the re-keying step where most typos and mismatches begin. It will not rescue a number that was wrong at onboarding. But it does mean you correct it once, in one place.
Check Identifiers When They Change
The cheapest moment to verify a routing code or labour card number is when it is entered: on joining, or when an employee moves banks. At month-end, the same check costs a rejected batch.
Keep Off-Cycle Pay in the Same System
Commissions and bonuses paid outside the monthly run are where side spreadsheets creep back in. Recording them as payroll adjustments in the same system keeps month-end reconciliation honest, and keeps the next SIF built from one set of numbers.
After the Transfer: Show People What They Were Paid
A clean upload is only part of payday. Employees want to see how their pay was built: basic salary, overtime and approved allowances, line by line.
Payslips that arrive on time, in a language each employee reads comfortably, answer most questions before they reach HR. Fewer "why is my salary different?" messages is a quiet sign the payroll behind them is in order.
How HRHub Fits
HRHub builds the SIF file from the same employee and payroll records your HR team already maintains. That is what reduces the typo and mismatch class of errors. There is no separate spreadsheet to drift out of step.
Off-cycle items go in as payroll adjustments. Each run produces payslip PDFs that employees open in the self-service portal, in English or Arabic, from a phone browser. When a bank does reject a line, you fix the employee record once and regenerate. See how it works on the payroll features page.
Frequently Asked Questions
What Should I Do If My SIF File Is Rejected?
Start with the field your bank flagged. Put it right in the employee or payroll record, then build a fresh file from that record and upload it again.
Can Bonuses and Commissions Run Outside the Monthly Payroll?
Yes. In HRHub they are recorded as payroll adjustments, so off-cycle payments stay in the same records as the regular monthly run.
Is There a Free Option for Small Teams?
HRHub's Essential HR plan is free for up to five employees and covers core HR — records, documents, leave and attendance. Payroll and WPS SIF generation are part of the paid Growth & Payroll plan. The details are on the pricing page.
The Takeaway
A SIF rejection is rarely a file problem. It is a record problem that the file exposes. Keep identifiers right where they are entered, build every file from one source, and fix errors at the record rather than in the text. Do that, and the bank upload becomes the least eventful part of payday.


