ZATCA e-invoicing in brief
Saudi Arabia introduced electronic invoicing, known as Fatoora, in two phases. Phase 1, the generation phase, has applied since 4 December 2021 and requires taxpayers to issue and store invoices electronically with the required fields. Phase 2, the integration phase, began on 1 January 2023 and is being rolled out in waves, with ZATCA notifying each group of taxpayers in advance.
In Phase 2, invoicing systems must connect to ZATCA. Standard tax invoices, typically business to business, are cleared by ZATCA before they are shared with the buyer. Simplified tax invoices, typically business to consumer, are reported to ZATCA within 24 hours.
What a compliant invoice needs
- Invoices generated in the required XML format, or PDF/A-3 with embedded XML
- A QR code on the invoice
- A unique identifier and an invoice counter
- A cryptographic stamp and a hash linking each invoice to the previous one
- Arabic invoice content as required by the regulations
- Tamper-resistant storage of issued invoices
What we deliver
We configure Saudi VAT in Odoo, set up the company and device onboarding with ZATCA, and connect Odoo invoicing and Point of Sale to the Fatoora platform. We test credit notes, debit notes, rejected invoices and offline POS scenarios in the ZATCA sandbox before switching to production.
Working with Saudi companies from Islamabad
Our team is based in Islamabad and delivers ZATCA projects remotely. We do not have an office in Saudi Arabia. Project meetings are scheduled within the Saudi working week, and your accountant or tax adviser confirms the compliance decisions while we implement them.
Frequently asked questions
Which phase applies to my company?
Phase 1 applies to all VAT-registered taxpayers who issue invoices. Phase 2 applies from the date ZATCA notifies you for your wave.
Does Odoo support ZATCA e-invoicing?
Odoo provides Saudi localization and e-invoicing features, which we configure, extend where needed and test against the ZATCA sandbox.
What happens when ZATCA rejects an invoice?
The rejection reason is shown to the user so the invoice can be corrected and resubmitted. We set up this workflow during implementation.
