Skip to main content
iVentureTeam
E-Invoicing

ZATCA Wave 25 in Odoo: Scope Test, Version Check and Plan to Feb 2027

ZATCA Wave 25 covers VAT revenue above SAR 187,500 with Fatoora integration due 1 Feb 2027. Scope test, Odoo version check, data fixes and a dated plan.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
October 26, 2026Updated October 25, 202615 min read2 views
ZATCA Wave 25 in Odoo: Scope Test, Version Check and Plan to Feb 2027 cover

Wave 25 is the widest integration wave ZATCA has announced. The threshold is half of Wave 24, so shops, cafes, clinics, contractors and small distributors are now inside. Our Odoo implementation services team wrote this guide for them.

It is for owners, finance managers and IT leads who run Odoo in Saudi Arabia or plan to move to it before the deadline. If you also trade in the UAE or the wider Gulf, read our guide on Odoo for UAE VAT, FTA e-invoicing and GCC compliance alongside it.

What is ZATCA Wave 25 and who does it cover?

ZATCA Wave 25 is the 25th group of taxpayers required to integrate their e-invoicing system with the Fatoora platform, and it covers VAT-subject revenue above SAR 187,500 in 2022, 2023, 2024 or 2025. The integration deadline is 1 February 2027.

ZATCA published the Wave 25 criteria on 24 July 2026. Targeted taxpayers must integrate "no later than February 1, 2027", and ZATCA will notify every business in the wave. Two details set it apart:

  • A lower threshold: Wave 24 covered revenue above SAR 375,000 and ran from 1 April to 30 June 2026. Wave 25 halves the line to SAR 187,500, roughly US$50,000 a year.
  • A new test year: 2025 revenue counts for the first time, so a company founded in 2025 can be in scope.

The test is "any one year", not an average. If your 2022 return shows SAR 200,000 of taxable sales and every year since has been lower, you are still in Wave 25.

How do you run the Wave 25 scope test on your own numbers?

Run the scope test from your filed VAT returns, not your management accounts, because ZATCA tests the revenue you declared as subject to VAT. It takes an afternoon.

  1. Pull the returns: download every VAT return filed for 2022 to 2025 from the ZATCA portal.
  2. Add the taxable boxes: sum standard-rated and zero-rated sales per calendar year. Exempt and out-of-scope sales do not count.
  3. Compare each year: if any single year exceeds SAR 187,500, you are in Wave 25.
  4. Check each VAT registration: a group tests each VAT number separately; branches under one VAT number are tested together.

Do not wait for the notification. ZATCA notifies taxpayers at least six months before their integration date, and Wave 25 was announced just over six months before 1 February 2027. The notice is confirmation, not the starting gun.

If a revenue line is borderline, label it "check with ZATCA" and ask your tax advisor. Treating yourself as in scope is the safer default, because the work is the same either way.

What does Phase 2 integration actually require from Odoo?

Phase 2 means your Odoo database talks to ZATCA directly: it signs each invoice, sends B2B tax invoices for clearance before you share them, and reports B2C receipts within 24 hours. Phase 1, which began on 4 December 2021, only required a compliant invoice with a QR code.

ZATCA's detailed e-invoicing guideline sets the integration phase rules. For an Odoo user they come down to this:

RequirementStandard tax invoice (B2B)Simplified tax invoice (B2C)
FormatUBL 2.1 XML with ZATCA fieldsUBL 2.1 XML with ZATCA fields
FlowClearance: ZATCA validates before you share itReporting: sent to ZATCA within 24 hours
StampApplied by Fatoora during clearanceApplied by Odoo with your CSID certificate
QR codeGenerated, then updated by ZATCA at clearanceMandatory, with extra security fields
UUID, hash, counterIn every invoice; the counter can never resetSame
LanguageArabic mandatory, English optionalArabic mandatory, English optional

The key shift: a rejected invoice is not legally valid. Under Phase 2 it never clears, the customer cannot claim input VAT on it, and you must fix and resubmit.

The Odoo 20 Saudi Arabia documentation describes both flows: clearance for B2B invoices, QR generation plus reporting for B2C, with ZATCA's response written into the invoice chatter.

Which Odoo version is ready for ZATCA Wave 25?

ZATCA Wave 25 on Odoo: Which Odoo version is ready?

Odoo 19 and Odoo 20 ship the current Saudi localization with Phase 2 clearance, POS reporting, withholding tax and retention handling; Odoo 18 works but is one step behind, and Odoo 17 or older needs an upgrade first. Here is how the versions compare.

FactorOdoo 19 or 20Odoo 18Odoo 17 or older
Phase 2 modulesl10n_sa_edi, l10n_sa_edi_pos, reports, withholding taxl10n_sa_edi, l10n_sa_pos, l10n_sa_edi_posSame modules, no fixes after September 2026
Standard support19 to September 2028; 20 just releasedTo September 202717 ended September 2026
Legacy surchargeNoneNone25% of the annual subscription, once a year
Upgrade target todayAlready thereCan move to 19Can move to 17, 18 or 19; 20 not yet offered
Onboarding modesSandbox, Simulation, ProductionSimulation and ProductionSimulation and Production
Our adviceConfigure and testTest now, plan 19 after Wave 25Upgrade to 19, then onboard

Three facts behind the table shape your plan:

  • Support: each major version gets three years under Odoo's support policy, so Odoo 17 left standard support in September 2026. Our Odoo version support timeline lists every date.
  • Surcharge: databases older than the three most recent majors pay a 25% legacy surcharge. With Odoo 20 out, that means 17 and older; see our guide to the Odoo 25% legacy surcharge.
  • Upgrade target: as of 25 October 2026, Odoo's upgrade platform offers 17.0, 18.0 and 19.0 as targets. Odoo 20 is not yet available for existing databases, so an Odoo 16 or 17 company should plan for 19.

Version bugs are real. One Odoo 17 user reported that invoices posted after midnight Riyadh time got a ZATCA issue date one day ahead, causing rejections. A supported version gets that fixed.

Which company, branch and customer data does ZATCA reject?

ZATCA rejects invoices when the seller or buyer record is incomplete, so data clean-up is where most of the Wave 25 effort goes. Odoo's documentation lists what the company record needs before onboarding:

  • Company name of 63 characters or fewer, the ZATCA field limit.
  • Full address including District, Building Number and Plot Identification.
  • Identification scheme and number: Commercial Registration Number is the usual choice; Momra, MLSD, 700 Number and Sagia licenses are also accepted.
  • VAT number and currency set to SAR.

Branches need the same care: enter the parent company's VAT number and the branch's own CRN on the branch contact. You can bill from the parent's sales journal, or onboard a journal per branch so each submits in parallel.

Customers matter for B2B clearance. A tax invoice needs the buyer's VAT number and structured address. If 400 customers have "Riyadh" as their whole address, fix that in November, not on go-live day.

Two configuration rules catch people out. A global discount line must carry the 15% tax or ZATCA rejects the invoice. And every credit or debit note needs a ZATCA reason code, such as "goods or services refund".

How does ZATCA onboarding work in Odoo, step by step?

Odoo onboards each sales journal to ZATCA with a one-time password from the Fatoora portal, and offers three API modes so you can test before anything becomes legally binding. The modes are Sandbox, Simulation (Pre-Production) and Production.

  1. Sandbox: a shared test environment. Set the ZATCA API mode to Sandbox, use the test VAT number from Odoo's docs, onboard the sales journal with the pre-filled OTP and submit a few invoices.
  2. Simulation: duplicate your production database, switch the mode to Simulation, and onboard each sales journal with a six-digit OTP from the Fatoora Simulation Portal. Submit every invoice type you really use. These invoices are not legally valid, which is the point.
  3. Production: in the live database, set the mode to Production and onboard every sales journal again with a production OTP. Confirm an invoice, click Process now, and check for "Action Successful" in the chatter.

Three warnings from the documentation belong in your runbook. OTPs expire after 60 minutes. Each sales journal is onboarded separately, so count your journals first. And once Production mode has submitted one invoice, you cannot switch back.

Read the response codes in the chatter. A 200 is accepted, a 400 is rejected and needs a fix plus Retry, and a 202 is accepted with warnings that Odoo's documentation says "may become rejections in the future". Use simulation to reach zero warnings on every invoice type.

Production invoices cannot be reset to draft, and their XML and PDF stay attached permanently. A user who had cleared an invoice with a wrong customer address asked how to fix it; the answer, matching ZATCA's own advice, was to issue a credit note, not edit the invoice.

How do you make Odoo POS receipts ZATCA Phase 2 compliant?

Odoo POS reports simplified tax invoices to ZATCA once the Saudi Arabia E-invoicing (Simplified) module is installed and the POS invoice journal is onboarded. This is the piece small retailers and restaurants most often miss.

The documented steps are short. Install l10n_sa_edi_pos, open the POS settings, find the default Invoices journal, and click Onboard on its ZATCA tab with a production OTP. Assign a customer to each order before finalizing it. The Phase 2 QR code then prints on the receipt and the PDF.

Check these points before you trust it:

  • Arabic on the slip: enable the Gulf Cooperation Council Format in POS settings, because ZATCA requires simplified tax invoices in Arabic. English alongside is allowed.
  • Every till, every branch: each POS billing through a different journal needs its own onboarding, and each branch needs its CRN on the branch record.
  • Offline periods: ZATCA requires a failure notification through its web form when a device cannot generate e-invoices, and a second notice when it is fixed. Agree who does that.
  • Hardware receipts: reprint on every thermal printer and scan the QR code with ZATCA's app.

Our Odoo POS implementation guide covers the wider retail setup around these steps.

What should your month-by-month plan to 1 February 2027 look like?

With about 14 weeks left, a realistic plan runs sandbox in November, simulation in December, production onboarding in the first half of January and a two-week buffer before the deadline. Add a parallel upgrade track if you are on Odoo 17 or older.

WhenConfigure-only track (Odoo 18, 19 or 20)Upgrade track (Odoo 17 or older)
Late October 2026Scope test from VAT returns; list journals, branches, POS tillsSame, plus request a test upgrade to Odoo 19
November 2026Fix company, branch and customer data; sandbox submissionsTest upgrade, fix custom modules, re-run month-end
December 2026Simulation onboarding; every invoice type, credit notes, POSProduction upgrade to 19 by mid-December; then simulation
1 to 15 January 2027Production onboarding, journal by journal; first live invoicesProduction onboarding on the upgraded database
16 to 31 January 2027Daily review of 202s and 400s; train the team on Retry and credit notesSame, with upgrade fixes still fresh
From 1 February 2027Monitor; keep the failure-notification process readySame

The upgrade track is tight but workable: in our experience a lightly customized Odoo 17 to 19 upgrade takes four to eight weeks, mostly testing. Our Odoo upgrade services team runs the test upgrade and the ZATCA simulation on the same database copy, so both tracks share one test cycle.

Whatever the track, test what breaks in practice: credit notes, advance payments, retention lines, foreign-currency invoices and receipts printed after midnight. The last weeks before every wave are the busiest for ZATCA's platform and every implementer, so aim to be live by mid-January.

What does ZATCA Wave 25 readiness cost on Odoo?

For a company already on Odoo 18, 19 or 20, Wave 25 is mostly configuration and data work; for a company on Odoo 17 or older, the upgrade is the larger cost. These are industry estimates, not quotes.

  • Odoo licenses: the Saudi localization modules are included in your subscription; we know of no ZATCA charge for Fatoora onboarding, but confirm with ZATCA.
  • Configuration and onboarding: data clean-up, journal and POS onboarding, simulation and go-live support usually fit our small-project range of US$3,000 to US$9,000 over four to eight weeks, depending on branches, tills and invoice types.
  • Version upgrade: our Odoo upgrade cost guide puts a 17 to 19 upgrade at about US$3,500 to US$10,000 as an industry estimate, more with heavy customization.

To size your own case, run the free Odoo health check: it asks for your version, modules and customizations and returns the risks to fix first. Our Odoo implementation cost page explains the ranges above.

Which industries does ZATCA Wave 25 hit hardest?

Wave 25 reaches the sectors earlier waves largely skipped: small retail, food service, trades and professional services, each with its own invoice edge cases. The table shows where the risk sits and how Odoo handles it.

IndustryPain or cost driverOdoo approachHow iVentureTeam helps
Retail and small chainsMany tills, Arabic receipts, 24-hour reportingl10n_sa_edi_pos, GCC receipt format, per-branch CRNOnboard every till, test reprints and midnight orders
Restaurants and cafesHigh receipt volume, combos, delivery platformsPOS reporting with customer on order, kit productsMap third-party orders into onboarded journals
Contractors and constructionRetention, advance payments, progress invoicesRetention tax group, 0% not-subject line, down paymentsModel retention so VAT stays on the full amount
Wholesale and distributionB2B clearance, credit notes, customer master dataClearance flow, ZATCA reason codes, structured addressesClean customer records before simulation
Professional servicesWithholding tax on fees, non-resident clientsl10n_sa_withholding_tax, zero-rated exportsSet fiscal positions and WHT rules correctly

How iVentureTeam helps with ZATCA Wave 25 on Odoo

On Odoo 17 or older? Check your risks first

iVentureTeam takes a Saudi Odoo database from scope test to cleared invoices, including the version upgrade when one is needed. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.

  • Scope and readiness review: your VAT returns against the SAR 187,500 test, plus an audit of your Odoo version, journals, branches and POS.
  • Upgrade when required: Odoo 15, 16 or 17 databases moved to Odoo 19 with custom-module fixes and a full test cycle.
  • Configuration and data: company, branch and customer records, Arabic templates, discount and retention taxes, credit-note reasons.
  • Onboarding and testing: sandbox, simulation and production onboarding for every sales journal and POS, tested to zero warnings.
  • Go-live support: our Odoo ERP support team watches the chatter for 202s and 400s through February and trains your finance staff on Retry and credit notes.

Saudi-ready Odoo receipts case study: a Middle East retailer

A Middle East retail business needed every POS receipt to read correctly in Arabic and English, with taxable and non-taxable amounts itemized, without changing the cashier's workflow. The project ran on Odoo 11 and predates Phase 2, but the receipt-level work is what Wave 25 retailers face now.

The stock Odoo POS slip printed in one language. Arabic-speaking customers could not read it, and auditors wanted English line items alongside Arabic. Product name, taxable and non-taxable amounts, subtotal and total had to render correctly in both scripts, right to left included.

iVentureTeam rebuilt the receipt template so six elements render in both languages on one slip, and routed printing through a Raspberry Pi per POS station so the output stayed legible on standard thermal printers. Delivery took three weeks.

Every sale now produces one receipt the customer and the accountant can both read, and later changes such as VAT fields are template edits rather than projects. Read the bilingual Arabic-English POS receipts case study.

The bottom line on ZATCA Wave 25 in Odoo

If your VAT-subject revenue passed SAR 187,500 in any year from 2022 to 2025, you have until 1 February 2027 to integrate Odoo with Fatoora; the software is ready, so the question is whether your version and your data are. Odoo 19 or 20 with clean records can be onboarded in weeks.

Run the scope test this week, settle the version question in November, and spend December in simulation with every invoice type you really issue. Companies that reach production in mid-January spend February reviewing warnings, not explaining rejections to customers.

Ready to get your Odoo cleared with ZATCA before 1 February 2027?

Book a free readiness review

Get a dated Wave 25 plan for your Odoo version, journals and tills. Request a ZATCA Wave 25 readiness review, call +91-90235-15208, or email business@iventureteam.com.

Frequently Asked Questions

Who is covered by ZATCA Wave 25?

+

Resident VAT taxpayers in Saudi Arabia whose revenue subject to VAT exceeded SAR 187,500 in 2022, 2023, 2024 or 2025. Any single year over the line puts you in scope, even if current revenue is lower. ZATCA notifies affected businesses directly.

What is the ZATCA Wave 25 deadline?

+

Wave 25 taxpayers must integrate their e-invoicing solution with the Fatoora platform no later than 1 February 2027. ZATCA announced the criteria on 24 July 2026, giving just over six months of notice, as its guidelines require.

Does Odoo support ZATCA Phase 2 integration?

+

Yes. Odoo's Saudi Arabia localization includes the l10n_sa_edi module for clearance and reporting of UBL 2.1 invoices, plus l10n_sa_edi_pos for POS receipts. It onboards each sales journal to Fatoora with an OTP and shows ZATCA's response in the invoice chatter.

Which Odoo version do I need for ZATCA Wave 25?

+

Odoo 19 or 20 carry the current localization and are in standard support. Odoo 18 works until September 2027. Odoo 17 and older left standard support in September 2026 and pay a 25% legacy surcharge, so upgrade to 19 as part of the Wave 25 project.

Can I do ZATCA e-invoicing on Odoo Online?

+

Yes. Odoo's standard Saudi modules run on Odoo Online, Odoo.sh and on-premise. You only need Odoo.sh or your own server when custom modules are involved, because Odoo Online does not allow custom code.

How do I test ZATCA integration in Odoo before going live?

+

Use Sandbox mode first, then duplicate your database and onboard it in Simulation (Pre-Production) mode with an OTP from the Fatoora Simulation Portal. Submit every invoice type, credit notes and POS receipts. Simulation invoices are not legally valid.

Can I edit an invoice after ZATCA has cleared it?

+

No. Once an invoice is successfully submitted in Production mode it cannot be reset to draft, and its XML and PDF stay attached permanently. Issue a credit note with a ZATCA reason code and a corrected invoice instead.

How long does it take to make Odoo ZATCA compliant?

+

On Odoo 18, 19 or 20 with clean data, four to eight weeks covers configuration, simulation and production onboarding. Add four to eight weeks if an upgrade from Odoo 17 or older is needed, so start in October or November for the 1 February 2027 deadline.

What happens if I miss the ZATCA Wave 25 deadline?

+

ZATCA states it can levy penalties for non-compliance with the e-invoicing regulation, and invoices that are not cleared are not legally valid, which affects your customers' input VAT. Check the current penalty schedule with ZATCA and aim to be live before the deadline.

Ready to put this into action?

Talk to iVentureTeam about Odoo, AI automation, or custom development — get a free, no-obligation consultation.