Skip to content
Azinove, Home
All insights

Odoo for VAT and e-invoicing in Bahrain and Saudi Arabia: what a compliant setup looks like

Bahrain’s 10 % VAT and NBR invoice rules, Saudi Arabia’s ZATCA Fatoora e-invoicing (phase 1 and the phase 2 integration waves), and how Odoo’s Bahrain and Saudi localizations handle them: taxes, bilingual invoices, QR codes, UBL XML, onboarding and go-live.

Azinove
Odoo team, Azinove W.L.L (Bahrain)
Odoo accounting screens used for VAT invoices in Bahrain and Saudi Arabia

A company that sells in Bahrain and Saudi Arabia runs two different tax regimes from one ERP. Bahrain applies VAT at 10 %, collected by the National Bureau for Revenue (NBR), with precise rules on what a tax invoice must show. Saudi Arabia applies VAT at 15 % and, on top of it, the ZATCA e-invoicing programme (Fatoora): invoices are generated in a structured format, stamped, and, for most businesses by now, cleared or reported to the authority in near real time. Odoo covers both with its fiscal localizations. This guide explains what the rules require, what the localizations do, and what an implementation has to settle before the first invoice leaves the system.

Bahrain: VAT at 10 % and the NBR invoice rules

Bahrain introduced VAT in 2019 and raised the standard rate from 5 % to 10 % on 1 January 2022. Registration is mandatory above the NBR threshold of BHD 37,500 of annual taxable supplies and voluntary from BHD 18,750; non-resident suppliers have no threshold. Returns are filed on the NBR portal, monthly or quarterly depending on the size of the business, with payment due by the end of the month that follows the period.

The day-to-day constraint is the tax invoice itself. A full tax invoice must carry the words “tax invoice”, the supplier’s name, address and VAT account number, a sequential number, the issue date and the date of supply when it differs, the customer’s details, a description of each supply with quantity and unit price, the rate and amount of VAT per line, the totals excluding and including VAT, and the exchange rate used if the invoice is not in dinars. A simplified tax invoice, with fewer fields, is allowed for customers who are not VAT-registered and for low-value supplies; check the current limit in the NBR’s VAT guides. Invoices and records are kept for the retention period the law sets, and the NBR has accepted electronically issued and stored invoices since November 2023.

As of October 2026, Bahrain has no mandatory e-invoicing: the NBR has not published a schema, a platform or a go-live date. The sensible position is to issue compliant PDF invoices from Odoo today while keeping the data structured, so that a future clearance or reporting model can be plugged in without rebuilding the invoicing flow.

Saudi Arabia: ZATCA Fatoora in two phases

ZATCA’s e-invoicing regulation applies to every VAT-registered resident taxpayer in the Kingdom and runs in two phases.

  • Phase 1, generation, enforced since 4 December 2021: invoices and credit or debit notes must be produced by a compliant electronic solution, in a structured electronic form, with the required fields. A scanned paper invoice does not count. Simplified (B2C) invoices carry a QR code.
  • Phase 2, integration, since 1 January 2023 and rolled out in waves: the invoicing solution is connected to ZATCA’s Fatoora platform. Each invoice is generated as UBL 2.1 XML (or PDF/A-3 with the XML embedded), carries a UUID and a cryptographic stamp, and is sent to the authority. Standard tax invoices (B2B) are cleared by ZATCA before they are shared with the customer; simplified tax invoices (B2C) are reported after issue. Rejected documents are not valid invoices.

The waves move down the revenue scale. Wave 24 reached businesses above SAR 375,000 of VAT-subject revenue, with a 30 June 2026 deadline. On 24 July 2026 ZATCA announced wave 25: taxpayers whose VAT-subject revenues exceeded SAR 187,500 in any of 2022, 2023, 2024 or 2025 must integrate with Fatoora by 1 February 2027. ZATCA notifies the targeted taxpayers at least six months before their integration date, so a company that has received a notice already knows its deadline, and one that has not should assume it is coming.

What Odoo’s localizations do

Odoo modules for Bahrain and Saudi Arabia
ModuleCountryWhat it installs
l10n_bh (Bahrain – Accounting)BahrainChart of accounts, VAT taxes, the NBR tax report (full and simplified), fiscal positions, governorates, and an invoice layout with the Bahraini fields.
l10n_sa (Saudi Arabia – Accounting)Saudi ArabiaChart of accounts, 15 % VAT and the other rates, fiscal positions, and the phase 1 QR code on invoices.
l10n_sa_edi (Saudi Arabia – E-invoicing)Saudi ArabiaPhase 2: UBL 2.1 XML generation, cryptographic stamp, journal onboarding with a Fatoora OTP, clearance of B2B invoices, reporting of B2C invoices, ZATCA response in the chatter.
l10n_sa_edi_pos and l10n_sa_posSaudi ArabiaThe same for Point of Sale receipts: compliance fields, QR code on the printed receipt, reporting of simplified invoices.

Both the Bahrain module and the Saudi e-invoicing module live in Odoo’s community code base under the LGPL-3 licence, so ZATCA integration is not an Enterprise-only feature. What stays with Enterprise is the full Accounting app (bank reconciliation, financial reports, budgets); Community ships the Invoicing app. Check the edition requirements of the Odoo version you plan to run, because dependencies move between versions.

Bilingual invoices, Arabic layout and dates

Both countries expect invoices readable in Arabic. Odoo prints the invoice in the customer’s language, and the Saudi layout renders the mandatory fields in Arabic and English side by side. For Bahrain the same bilingual layout is a small customization of the report template. Hijri dates are not required on the invoice itself (ZATCA works with Gregorian dates in the XML), but companies that want them on printed documents can add them in the report.

ZATCA onboarding in Odoo, step by step

  1. Complete the company record: VAT number, commercial registration, full address with building number and district, and a company name under 63 characters. ZATCA rejects onboarding on incomplete data.
  2. Start in the sandbox, ZATCA’s shared test environment, to validate the configuration without touching real data.
  3. Move to simulation on a copy of the production database, with a one-time password (OTP) from the Fatoora simulation portal. Invoices issued there are not legally valid, which is the point: this is the rehearsal.
  4. Onboard each sales journal with its own OTP. The OTP expires after 60 minutes; each journal gets its own certificate (CSID).
  5. Switch to production with an OTP from the production portal. Once a real invoice has been submitted, the mode cannot be reverted.
  6. Submit and read the response: accepted, accepted with warnings, or rejected. A rejected invoice stays rejected until the cause is fixed and it is retried.

What an implementation covers

  • Chart of accounts and taxes: the localized chart, the VAT rates (standard, zero-rated, exempt, reverse charge on imports), and the fiscal positions that switch them for Gulf and foreign customers.
  • Document numbering: one uninterrupted sequence per journal, as both authorities require, and ZATCA-approved reasons on credit and debit notes.
  • Customer and product master data: VAT numbers validated, addresses complete, product categories mapped to the right tax, discounts handled the ZATCA way (a global discount line carries the 15 % tax).
  • Multi-company: a Bahrain company and a Saudi company in one database, each with its own localization, currency and journals, with consolidated reporting for the group.
  • Testing: a scripted run through the sandbox and simulation modes with real document types (invoice, credit note, down payment, retention), checked with ZATCA’s QR verification app.
  • Go-live and support: production onboarding on a set date, a first-week watch on rejected documents, and a plan for the next Odoo version so the certificates survive the upgrade.

Common pitfalls

  • Treating the sandbox as a formality and discovering address or VAT-number errors in production, where a rejected invoice cannot simply be reset.
  • Issuing B2B invoices without a complete customer record: without an invoicing address Odoo treats the document as B2C and reports it instead of clearing it.
  • Breaking the sequence by deleting draft invoices or using several journals without onboarding each one.
  • Running Bahrain and Saudi sales through one company and one chart of accounts, which makes both tax reports wrong.
  • Upgrading Odoo without re-checking the e-invoicing module, the certificates and the journal settings.

Frequently asked questions

Does Odoo Community support ZATCA phase 2?

The e-invoicing module (l10n_sa_edi) is published under LGPL-3 in Odoo’s community repository, with dependencies that are also community modules, so the integration itself does not require Enterprise. Full Accounting does. Confirm the requirements for your Odoo version before deciding on the edition.

Is e-invoicing mandatory in Bahrain?

Not as of October 2026. The NBR has not published a mandate, a format or a date. VAT invoices must still meet the NBR content rules, and they may be issued and stored electronically.

My Saudi company has not received a ZATCA notice. Do I need to prepare?

Yes. Wave 25 covers revenues above SAR 187,500 in any year from 2022 to 2025, with integration by 1 February 2027, and ZATCA gives at least six months’ notice. Preparing the data and the sandbox run before the notice arrives turns the deadline into a scheduling question.

Can one Odoo database serve both Bahrain and Saudi Arabia?

Yes, as two companies in one database. Each keeps its own chart of accounts, taxes, currency, journals and e-invoicing settings; the group gets consolidated reports and shared contacts, products and users.

What happens when ZATCA rejects an invoice?

Odoo records the response in the invoice chatter with the reason. The invoice stays in a rejected state and is not legally valid until the cause (a missing field, an invalid VAT number, a wrong tax) is corrected and the document is resubmitted.

How long does a Gulf Odoo implementation take?

It depends on the scope: a single company on invoicing and accounting is a matter of weeks; a multi-company group with sales, purchases, inventory and point of sale takes longer. The ZATCA onboarding itself is a few days once the data is clean. We size it after a short scoping session.

Working with Azinove in the Gulf

Azinove W.L.L is the group’s Bahrain company, based in Isa Town (CR 190436-1), and an official Odoo Partner with more than 45 delivered projects across the group. We implement Odoo for companies in Bahrain and serve Riyadh and the rest of Saudi Arabia remotely from Bahrain, with on-site sessions on request. Describe your entities, your sales channels and your ZATCA status, and we will come back with a first scope and the decisions to take before any estimate. The quickest way is a 30-minute call.

Sources

  1. ZATCA — E-invoicing: introduction, phase 1 (generation) and phase 2 (integration) (read on 20 October 2026) — https://zatca.gov.sa/en/E-Invoicing/Introduction/Pages/What-is-e-invoicing.aspx
  2. ZATCA — Wave 25 of the integration phase, criteria and deadline (24 July 2026) — https://zatca.gov.sa/en/MediaCenter/News/Pages/Wave25-E-invoicing.aspx
  3. National Bureau for Revenue (Bahrain) — VAT: law, regulations and guides — https://www.nbr.gov.bh/vat
  4. Odoo — Documentation 19.0: Saudi Arabia fiscal localization and ZATCA e-invoicing (read on 20 October 2026) — https://www.odoo.com/documentation/19.0/applications/finance/fiscal_localizations/saudi_arabia.html
  5. Odoo — Source code: Bahrain – Accounting module (l10n_bh), LGPL-3 — https://github.com/odoo/odoo/tree/18.0/addons/l10n_bh
  6. Odoo — Source code: Saudi Arabia – E-invoicing module (l10n_sa_edi), LGPL-3 — https://github.com/odoo/odoo/tree/18.0/addons/l10n_sa_edi
Share this analysis
Cover card, in French: “Impulsion IA 2027 — train before you deploy” (Azinove)
5 min read

Impulsion IA 2027: training, SMEs and the world of work

AI adoption is rising, training is lagging. Impulsion IA 2027 targets that gap — and small businesses first.

Read the analysis
GPT-5.6 Sol, Terra, Luna : les nouveaux modeles d'OpenAI
6 min read

GPT-5.6 Sol, Terra, Luna: OpenAI’s New Model Family

OpenAI launches GPT-5.6 in three tiers: Sol (flagship), Terra (balanced), and Luna (fast and affordable). New naming, new pricing, new government oversight: here’s what changes.

Read the analysis
Cover card, in French: “SOTEU 2026 — AI in the factory, not just on the screen” (Azinove)
5 min read

SOTEU 2026: Europe wants AI in the factory, not just on the screen

On 16 September 2026, Ursula von der Leyen named artificial intelligence as one of the “tipping points” of our time. The message for the leaders of SMEs and mid-sized companies: the value lies in industrial application — health, transport, agri-food, advanced manufacturing, defence and space — with one clear red line: AI must keep humans in control.

Read the analysis