On this page
Payroll in Bahrain is not complicated in the way payroll is complicated in France or the United States. There is no income tax to withhold. What makes it demanding is that four separate obligations meet on the same payslip: the Labour Law on hours, overtime and leave; the Social Insurance Organization (SIO, still called GOSI by most employers) on contributions; the Labour Market Regulatory Authority (LMRA) on work permits and on the monthly wage file of the Wage Protection System (WPS); and the end-of-service rules that changed in March 2024. Odoo holds all of that well, but not out of the box: Odoo ships no payroll localization for Bahrain, so the salary rules, the WPS export and the alerts are built in the project. This guide lists what the law requires, with the article or decision behind each figure, and what that means for an Odoo setup.
What Bahrain asks of an employer, and who asks it
| Obligation | Authority and basis | What your HR system must hold |
|---|---|---|
| Contract, hours, overtime, leave | Ministry of Labour; Labour Law No. 36 of 2012 | Contract terms, working schedule, leave balances, overtime at the legal rates |
| Social insurance | SIO; Social Insurance Law as amended by Law No. 14 of 2022 | Nationality, insured wage, the contribution rate of the current year |
| Work permits for expatriate staff | LMRA; Law No. 19 of 2006 and the fee edicts | Permit number and expiry, the monthly fee per worker |
| Monthly wage file | LMRA Wage Protection System; Resolution (68) of 2019 | Fixed and variable wage per employee, bank account or wallet, SIO registration |
| End of service | Labour Law article 116; Edict (109) of 2023 | Service dates, last basic wage plus social allowance, SIO contributions since March 2024 |
The employee file: CPR, passport, permit and expiry dates
Everything downstream depends on two facts about each employee: nationality and permit status. A Bahraini employee is insured for pension; an expatriate employee is covered for work injury, holds an LMRA work permit that expires, and since 2024 accrues end-of-service through the SIO. Odoo’s employee form carries the fields you need: Nationality, Identification No for the CPR number, Passport No, and a Visa and work permit section with Visa No, Work Permit No, a Visa Expiration Date and an Expires on date that appears once a permit number is entered, plus one attached document. Odoo’s documentation describes no automatic reminder on those dates, so the project adds one: a scheduled action that opens an activity for HR sixty days before each permit expires. Add the employee’s IBAN or wallet number under the bank account, because the WPS file is built from it, and record the SIO registration: the LMRA’s own FAQ states that an employee not registered with the Social Insurance Authority does not appear in the payroll file at all.
Contracts, working time and overtime
The Labour Law sets the frame the contract must respect. A worker may not actually work more than 48 hours a week (article 51) nor more than eight hours a day unless agreed otherwise, with an absolute maximum of ten (article 53); a Muslim worker may not work more than six hours a day or 36 a week during Ramadan (article 51). Overtime is paid at the hourly wage plus at least 25 % for daytime hours and at least 50 % for night hours (article 54). The weekly rest is at least 24 hours, Friday by default; a worker called in on the rest day receives the day’s wage plus 150 % of it, or another day off, at the worker’s choice (article 57). Wages are paid in Bahraini dinars and at least once a month (article 40).
In Odoo the contract holds the wage, the pay schedule and the work entry source: the working schedule, the Attendances app or Planning. For Bahrain we create a second working-hours calendar for Ramadan and switch the affected contracts to it for the month, and we define overtime as salary inputs at the 25 %, 50 % and 150 % rates so the payslip shows them as separate lines. That separation is not cosmetic: the WPS file asks for the fixed wage and the variable wage separately, and overtime belongs in the second.
Leave under the Labour Law
- Annual leave: 30 days on full pay after one year of service, accrued at two and a half days per month, pro rata below one year (article 58). The employer schedules it; the worker must take at least fifteen days a year including six consecutive ones; up to six days a year, two per occasion, may be taken as contingency leave counted against the balance; the balance must be settled at most every two years and paid out on termination (article 59).
- Sick leave, after three months of service and with a certificate from a government health centre or an approved clinic: fifteen days on full pay, twenty on half pay, twenty without pay per year; paid sick leave may accumulate up to 240 days (article 65).
- Maternity leave: sixty days on full pay, plus fifteen days without pay on request (article 32), with paid nursing breaks until the child is one (article 35).
- Basis of calculation: leave balances and the leaving indemnity are computed on the most recent basic wage plus the social allowance, if any (article 47).
Odoo’s Time Off app covers this with three configured types and one accrual plan: annual leave accruing at 2.5 days a month with a contingency sub-type, sick leave in three tiers (we use three linked types so the payslip pays 100 %, 50 % and 0 % without a manual step), and maternity leave. Public holidays are loaded for the year so that Odoo computes the right working days.
Payroll: social insurance contributions
For Bahraini employees, Law No. 14 of 2022, published on 18 April 2022, raised the employer’s pension contribution by two points in May 2022 and then by one point every January from 2023 to 2028, when it reaches 20 % of the wage, up to BHD 4,000 a month; the insured employee’s share rose by one point in January 2023. Because the employer rate moves every January, the SIO employer portal, not a blog post, is the reference for the rate of the current year. For expatriate employees the SIO collects a work-injury contribution paid by the employer alone, and, since March 2024, the end-of-service contributions described below.
Odoo’s payroll documentation lists its localizations, among them Saudi Arabia, the United Arab Emirates, Egypt and Jordan; Bahrain is not one of them, and the only Bahrain module in Odoo’s source, l10n_bh, is the accounting chart. So the Bahrain salary structure is built with Odoo’s salary rules: a basic wage, the allowances, then percentage rules for the employer and employee contributions with the wage ceiling, each conditioned on nationality through a Python expression, and the rate stored as a yearly parameter rather than typed into the rule. Odoo computes rules in sequence and groups them in categories, so the employer cost and the net pay fall out of the same payslip.
The Wage Protection System file
Resolution (68) of 2019, in force since 11 July 2019, requires every private-sector employer to pay wages through banks or payment service providers licensed by the Central Bank of Bahrain and registered with the LMRA; it applies to Bahraini and expatriate workers alike. The current version, WPS 2.0, runs inside the Expat Management System (EMS): the employer appoints a single Wages Responsible Person, who may assign up to five makers and five checkers, all with an advanced eKey; the maker uploads the salary file, the checker confirms it, and the bank executes the transfer. The LMRA guideline of October 2025 sets the mandatory period from January 2026 and, from February 2026, an administrative measure that blocks an employer’s LMRA transactions when it does not comply. The file must be submitted every month even when nothing changed, a previous month’s file cannot be reused, the transfer date must fall within fifteen days, and each wage is split into a fixed wage (basic salary and fixed allowances written in the contract) and a variable wage (overtime, commissions, bonuses, shift or holiday pay).
In Odoo, this is an export. Each payslip line is mapped to fixed or variable, the batch for the month produces the LMRA file with the CPR, the account and the two amounts per employee, and the same batch posts the accounting entries. We keep the file identical to the one the bank accepted so that a rejected account or a missing employee can be traced to one payslip, and we record the unpaid or partially paid cases that the WPS asks the employer to justify.
LMRA work permits and fees
Every expatriate employee works under an LMRA permit that the employer issues, renews before expiry and cancels when the employee leaves. Edict (79) of 2025, announced on 29 December 2025, raised the fees from 1 January 2026 in yearly steps to 2029: the issuance and renewal fee, the health-care fee and a monthly contribution per worker that depends on headcount, BHD 7.5 a month for each of the first five expatriate workers and BHD 12.5 from the sixth in 2026, both reaching BHD 30 in 2029; domestic workers are excluded. These fees are an employer cost, not a payslip deduction, so in Odoo they live in accounting and in the employer-cost view of the contract, and the permit expiry drives the renewal activity described above.
End of service
Article 116 of the Labour Law gives a worker who is not covered by the Social Insurance Law a leaving indemnity of half a month’s wage for each of the first three years of service and one month’s wage for each year after, pro rata for fractions of a year, computed on the last basic wage plus the social allowance. Edict (109) of 2023 changed how that is funded for expatriates: from 1 March 2024 the employer pays the SIO a monthly contribution of 4.2 % of the wage during an employee’s first three years and 8.4 % afterwards, due within the first fifteen days of each month, and the SIO pays the benefit earned after that date; the employer remains liable, directly, for service before 1 March 2024. An Odoo setup therefore needs two things: a contribution rule whose rate switches at the third anniversary, and a provision for the pre-2024 portion, still accrued on the article 116 formula, that is released when the employee leaves.
What Odoo covers, and what is built for Bahrain
- Standard: Employees with the identification, passport and permit fields; Contracts; Time Off with accrual plans and public holidays; Attendances; the Payroll engine with structures, rules, batches and accounting; the l10n_bh chart of accounts and tax reports.
- Built in the project: the Bahrain salary structure and its contribution rules, the end-of-service rules and provision, the WPS export in the LMRA format, the Ramadan calendar, permit-expiry alerts, and bilingual Arabic and English payslips.
A typical implementation
- Collect the employee master data: CPR, passport, permit numbers and expiry, nationality, bank account, SIO number, hire date and the last basic wage plus social allowance.
- Configure contracts and the two working-hours calendars, then the three leave types and the accrual plan, and load the public holidays.
- Build the salary structure and the contribution rules, with the current year’s rates as parameters, and test them against the last three months of payslips produced by the previous system.
- Build the WPS export and validate one file with the bank in the LMRA format before go-live.
- Set the end-of-service rules and book the opening provision for service before March 2024.
- Run one month in parallel with the old process, reconcile net pay, contributions and the WPS totals to the dinar, then switch.
Pitfalls
- Treating allowances as variable wage in the WPS file: a housing or transport allowance written in the contract is fixed wage.
- Hard-coding the GOSI rate in a salary rule: it changes every January until 2028.
- Computing the leaving indemnity on the basic wage alone when a social allowance exists: article 47 includes it.
- Paying an employee outside the WPS because the account was rejected: the LMRA expects a justification, and from February 2026 non-compliance blocks the employer’s transactions.
- Forgetting the pre-March-2024 part of an expatriate’s indemnity: the SIO pays only what accrued after that date.
Frequently asked questions
Does Odoo have a Bahrain payroll localization?
No. Odoo’s documentation lists payroll localizations for Saudi Arabia, the United Arab Emirates, Egypt and Jordan, among others, but not Bahrain, and the Bahrain module in Odoo’s source is the accounting chart. The salary structure is built with the standard payroll engine.
Can Odoo produce the Wage Protection System file?
Yes, as an export built in the project from the monthly payslip batch, in the format the LMRA and your bank accept, with the fixed and variable wage per employee. It is validated with the bank before go-live.
Which contribution rates should we configure?
The ones published by the SIO for the current year. The employer rate for Bahraini employees rises by one point every January until 2028 under Law No. 14 of 2022, so we store it as a yearly parameter and review it each January.
How is end of service handled for expatriates hired before March 2024?
In two parts: the service before 1 March 2024 is still owed by the employer on the article 116 formula and provisioned in Odoo, and the service after that date is funded by the monthly 4.2 % or 8.4 % contribution to the SIO, which pays that portion.
Does the Ramadan schedule change payroll?
It changes the working-hours calendar, not the wage: Muslim workers may not work more than six hours a day or 36 a week during the month, so overtime is computed from that shorter schedule.
Can payslips be in Arabic and English?
Yes. Odoo keeps a payslip language per employee, and the payslip report is translated so that each employee receives it in the language on file.
Working with Azinove in Bahrain
Azinove W.L.L is the group’s Bahrain company, based in Isa Town (CR 190436-1), and an official Odoo Partner; the group has delivered more than 45 projects. We implement Odoo for companies in Bahrain, HR and payroll included, with the finance side described in our guide to Odoo for VAT and e-invoicing in Bahrain and Saudi Arabia, and we explain how to compare partners in our guide to choosing an Odoo partner. Send us your headcount by nationality and your current payslip template, and we will come back with a written scope, starting with a 30-minute call.
Sources
- Labour Market Regulatory Authority (LMRA) — Law No. 36 of 2012 promulgating the Labour Law for the Private Sector, articles 32, 40, 47, 51, 53, 54, 57, 58, 59, 65 and 116 (read on 22 October 2026) — https://www.lmra.gov.bh/files/cms/shared/file/labour%20law.pdf
- LMRA — Wage Protection Guideline, issue October 2025: obligations, roles, fixed and variable wage, mandatory period and administrative measure (read on 22 October 2026) — https://lmra.gov.bh/files/cms/shared/wps-guideline-en.pdf
- LMRA — General questions about the Wage Protection System: Resolution (68) of 2019, scope, registration via the Expat Management System (read on 22 October 2026) — https://lmra.gov.bh/en/faq/category/12
- Crown Prince and Prime Minister of Bahrain — Edict (109) of 2023 putting into force the end-of-service gratuity system for non-Bahrainis in the private sector, effective 1 March 2024 — https://www.crownprince.bh/en/news/12800/
- Lockton — Bahrain implements new end-of-service gratuity for expatriates: 4.2 % and 8.4 % monthly contributions to the SIO (read on 22 October 2026) — https://global.lockton.com/us/en/news-insights/bahrain-implements-new-end-of-service-gratuity-for-expatriates
- Lockton — Bahrain introduces social insurance pension reforms: Law No. 14 of 2022, employer and insured contribution schedule to 2028 (read on 22 October 2026) — https://global.lockton.com/us/en/news-insights/bahrain-introduces-social-insurance-pension-reforms
- EY — Bahrain hikes visa issuance fees, health care fees and monthly contributions for work permits, effective 1 January 2026 (Edict 79 of 2025) — https://taxnews.ey.com/news/2026-0212-bahrain-hikes-visa-issuance-fees-health-care-fees-and-monthly-contributions-for-work-permits-effective-1-january-2026
- Odoo — Documentation 19.0: Payroll, with the list of payroll localizations (read on 22 October 2026) — https://www.odoo.com/documentation/19.0/applications/hr/payroll.html
- Odoo — Documentation 19.0: Salary rules (structures, sequence, categories, conditions, computation) — https://www.odoo.com/documentation/19.0/applications/hr/payroll/salary_rules.html
- Odoo — Documentation 19.0: New employees, citizenship and visa and work permit fields — https://www.odoo.com/documentation/19.0/applications/hr/employees/new_employee.html
- Odoo — Source code: Bahrain – Accounting module (l10n_bh), chart of accounts, taxes and tax reports, LGPL-3 — https://github.com/odoo/odoo/tree/19.0/addons/l10n_bh
