Skip to main content

Odoo Saudi Arabia 2026: ZATCA Phase 2, VAT & Fatoora Setup

Configure Odoo for Saudi compliance: l10n_sa_edi ZATCA Phase 2 clearance, Fatoora QR codes, VAT 15%, GOSI, bilingual Arabic invoices.

E
ECOSIRE Research and Development Team
|May 4, 202610 min read1.8k Words|

Saudi Arabia's Zakat, Tax and Customs Authority (ZATCA) operates one of the most rigorous e-invoicing programs in the world. The Fatoora platform, launched in December 2021, requires every VAT-registered business to issue electronic invoices through ZATCA-cleared systems.

Saudi Arabia's Zakat, Tax and Customs Authority (ZATCA) operates one of the most rigorous e-invoicing programs in the world. The Fatoora platform, launched in December 2021, requires every VAT-registered business to issue electronic invoices through ZATCA-cleared systems. Phase 2 (the integration phase) became mandatory for all VAT-registered taxpayers by mid-2024, with continuing wave-based onboarding through 2026 covering remaining taxpayers and new entities. Odoo's l10n_sa_edi module provides native ZATCA Phase 2 integration, making Saudi Arabia one of the strongest country-specific localizations in the platform.

Key Takeaways

  • ZATCA administers VAT (15%), Zakat (2.5% of zakatable base), corporate tax (20% on non-Saudi shareholders' share), and excise tax
  • Fatoora platform mandates Phase 2 e-invoicing with cryptographic signatures and real-time clearance for B2B
  • Odoo l10n_sa_edi provides native ZATCA Phase 2 integration including XAdES signing and CSID management
  • Phase 2 waves continue through 2026 for newly VAT-registered businesses; threshold-based onboarding
  • Standard invoices (B2B) require clearance before issuance; simplified invoices (B2C) require reporting within 24 hours
  • Arabic mandatory on invoice; bilingual (Arabic + English) common practice
  • Statutory reports: VAT return monthly/quarterly, Zakat annual via EXEM portal

Saudi Arabia Tax Framework Overview

ZATCA enforces three primary taxes relevant to Odoo:

  • VAT: 15% standard rate (raised from 5% in July 2020); zero-rated for exports, international transport, qualifying medicines and medical equipment; exempt for financial services and residential leases
  • Zakat: 2.5% of the zakatable base for Saudi/GCC-owned shares of companies (paid in lieu of corporate tax)
  • Corporate Tax: 20% on non-Saudi shareholders' share of profits in mixed-ownership companies, plus full 20% for non-GCC owned companies

The Fatoora e-invoicing program operates in two phases:

  • Phase 1 (Generation): Effective 4 December 2021. All VAT-registered taxpayers must issue e-invoices in a structured format (XML or PDF/A-3 with embedded XML). Manual handwritten/typed invoices banned.
  • Phase 2 (Integration): Effective 1 January 2023 in waves based on annual revenue. Mandates real-time integration with ZATCA's Fatoora platform: clearance for B2B standard invoices, reporting within 24 hours for B2C simplified invoices.

By 2026, Phase 2 continues onboarding smaller taxpayers and newly VAT-registered entities through ZATCA's wave announcements (typically every 3-6 months).

Required Odoo Localization Modules

ModulePurposeEdition
l10n_saSaudi chart of accounts and VAT taxesCommunity
l10n_sa_ediZATCA Phase 2 e-invoicing (clearance + reporting)Enterprise
l10n_sa_edi_posPOS-specific simplified invoice handlingEnterprise
l10n_sa_hr_payrollGOSI, ZATCA payroll complianceEnterprise / Custom
account_reportsVAT return templateEnterprise

The l10n_sa_edi module in Odoo Enterprise provides one of the most complete ZATCA Phase 2 implementations available in any ERP, including:

  • Compliance Cryptographic Stamp Identifier (CSID) provisioning
  • XAdES-B-LT signing
  • QR code generation per ZATCA specification
  • Clearance API integration for standard invoices
  • Reporting API integration for simplified invoices
  • Universally Unique Identifier (UUID) and ICV (Invoice Counter Value) management
  • Previous Invoice Hash (PIH) chaining

Chart of Accounts Setup

The Saudi chart of accounts follows IFRS as adopted by SOCPA (Saudi Organization for Chartered Public Accountants). The l10n_sa module installs:

  • 1xxx: Assets (cash, receivables, inventory, fixed assets)
  • 2xxx: Liabilities (payables, VAT payable/recoverable, Zakat payable, withholding tax payable)
  • 3xxx: Equity
  • 4xxx: Revenue
  • 5xxx: Cost of revenue
  • 6xxx-7xxx: Operating expenses
  • 8xxx-9xxx: Other income/expenses

Configure the company record with:

  • VAT registration number (15 digits)
  • Commercial Registration (CR) number
  • ZATCA Group VAT number if part of a tax group
  • Building number, street, district, city, postal code (separately, per ZATCA address requirements)

Saudi ZATCA invoices require structured address fields; combining them into a single field causes validation failures.

VAT Configuration

Configure VAT tax records:

Tax NameRateTypeNotes
VAT 15% Sales (Standard)15%SalesStandard supplies
VAT 0% Sales (Exports)0%SalesOutside KSA / GCC implementing states
VAT 0% Sales (Medicines)0%SalesQualifying medicines & medical equipment
VAT Exempt Sales0%SalesFinancial services, residential lease
VAT 15% Purchase15%PurchaseStandard input
VAT Reverse Charge15%PurchaseImports of services from outside KSA
<record id="account_tax_sa_15_sale" model="account.tax">
    <field name="name">VAT 15% Sales</field>
    <field name="amount">15</field>
    <field name="amount_type">percent</field>
    <field name="type_tax_use">sale</field>
    <field name="l10n_sa_zatca_tax_category">S</field>
    <field name="invoice_repartition_line_ids" eval="[
        (0,0,{'factor_percent': 100, 'repartition_type': 'base'}),
        (0,0,{'factor_percent': 100, 'repartition_type': 'tax', 'account_id': ref('vat_payable_account')})
    ]"/>
</record>

The l10n_sa_zatca_tax_category field maps to ZATCA's UN/EDIFACT tax category codes (S=standard, Z=zero-rated, E=exempt, O=out-of-scope).

ZATCA Phase 2 Integration

The Phase 2 onboarding process in Odoo:

  1. Generate CSR: From Odoo's l10n_sa_edi settings, generate a Certificate Signing Request with company details
  2. OTP from Fatoora portal: Log into ZATCA's Fatoora portal, generate a one-time password, enter into Odoo
  3. Compliance CSID: Odoo exchanges the CSR + OTP for a Compliance CSID (sandbox certificate)
  4. Compliance simulation: Send 6 sample invoices (3 standard, 3 simplified, plus credit/debit notes) through the compliance API
  5. Production CSID: After successful compliance, request the production CSID
  6. Live operation: Standard invoices route through the Clearance API (real-time clearance before customer delivery); simplified invoices through the Reporting API (within 24 hours)

Each invoice cryptographically references the previous one through the PIH (Previous Invoice Hash), creating a tamper-evident chain. The ICV is a sequential counter incremented per invoice.

The QR code embedded in invoices contains TLV-encoded fields: seller name, VAT number, timestamp, total with VAT, VAT amount, hash, signature, and public key.

Bilingual Invoice Requirements

ZATCA requires Arabic on the invoice. Common patterns:

  • Field labels in both Arabic and English
  • Item descriptions in Arabic (with optional English alongside)
  • Numerical values in standard Arabic-Indic or Western digits

Odoo invoice templates can be customized via QWeb to render dual-language layouts. Right-to-left (RTL) page layout for Arabic-primary invoices needs CSS adjustments.

Withholding Tax

Saudi Arabia applies WHT on payments to non-residents:

Payment TypeRate
Royalties15%
Management/Technical/Consulting fees5%-15%
Dividends5%
Interest (loans)5%
Insurance/reinsurance premiums5%
Telecommunications5%

Configure WHT taxes in Odoo as purchase taxes negatively impacting the payable. Monthly WHT returns are filed via the ERAD portal.

Payroll Considerations

Saudi payroll components:

ItemSaudi NationalNon-SaudiNotes
GOSI Pension9% (employee) + 9% (employer)N/ASaudi nationals only
GOSI Occupational HazardsN/A2% (employer)All employees
GOSI SANED (unemployment insurance)0.75% (employee) + 0.75% (employer)N/ASaudi nationals
Housing AllowanceN/AN/ACommon practice; 25% of basic salary typical
Income TaxNoneNoneNo personal income tax in Saudi Arabia

Wages Protection System (WPS) compliance is mandatory — employee salaries must be paid through SAMA-licensed banks with payroll files matching MOL records.

Reporting Requirements

A Saudi Odoo deployment must produce:

  • VAT Return: Monthly (annual turnover > SAR 40M) or quarterly (otherwise)
  • VAT Audit File (FAF): ZATCA-prescribed XML extract on demand
  • Zakat Return: Annual, filed via ZATCA online portal
  • Withholding Tax Return: Monthly, via ERAD portal
  • GOSI Wage File: Monthly, via GOSI online
  • Country-by-Country Report: For multinationals meeting threshold

Implementation Checklist

  1. Confirm VAT registration, CR number, and Fatoora portal access
  2. Install l10n_sa and l10n_sa_edi; configure TRN, CR, structured address
  3. Generate CSR from Odoo, obtain OTP from Fatoora portal
  4. Run Phase 2 compliance simulation with 6 sample invoices
  5. Obtain production CSID; configure live clearance/reporting endpoints
  6. Configure VAT 15% and special-rate taxes; map to ZATCA categories
  7. Customize bilingual (Arabic + English) invoice layouts
  8. Set up GOSI-compliant payroll for Saudi and non-Saudi employees
  9. Build VAT return report aligned to ZATCA template
  10. Schedule monthly VAT and WHT filings; annual Zakat

Common Pitfalls

CSID expiry not monitored: CSIDs have validity periods. Expired CSIDs cause clearance failures and invoice backlog.

Address fields combined: ZATCA requires structured address (building number, street, district, city, postal code). Free-text address blocks fail XML validation.

Standard vs simplified misclassification: B2B invoices must be cleared (real-time); B2C simplified invoices reported within 24 hours. Routing all to clearance overwhelms the seller's API quota.

Missing PIH chain integrity: If the previous invoice hash is broken (e.g., manual data manipulation in DB), all subsequent invoices fail validation. Treat the e-invoice tables as append-only.

Arabic font rendering: PDF/A-3 outputs without proper Arabic font embedding produce illegible exports. Use embedded fonts in the Odoo PDF generation pipeline.

ECOSIRE delivers Odoo localization for Saudi Arabia, including ZATCA Phase 2 integration, bilingual invoice templates, and GOSI payroll. Contact us for implementation or explore our Odoo customization services.

Frequently Asked Questions

Does Odoo Community support ZATCA Phase 2?

Native ZATCA Phase 2 (l10n_sa_edi) is in Odoo Enterprise. Community deployments require either upgrading to Enterprise or building a custom Phase 2 connector. Given the cryptographic complexity (XAdES signing, CSID management, hash chaining), most clients choose Enterprise — the cost of Enterprise is far below the cost of building and maintaining a compliant Phase 2 module from scratch.

What happens if a B2B invoice fails clearance?

If the Clearance API returns a rejection (validation errors, signature issues, etc.), the seller cannot legally issue the invoice to the buyer. Odoo's l10n_sa_edi puts such invoices in an error state with detailed error codes from ZATCA. The seller must fix the issue (correct data, regenerate signature, retry submission) before delivery.

Are simplified invoices (B2C) issued in real-time?

No, simplified invoices are reported within 24 hours of issuance. The seller can issue and deliver the invoice immediately (with QR code), and the reporting to ZATCA happens asynchronously. Most retail/POS scenarios use simplified invoices to avoid latency at checkout.

Can we issue credit notes through ZATCA?

Yes. Credit notes (and debit notes) are issued through the same Phase 2 flow as their invoice type (clearance for B2B-equivalent, reporting for B2C). They must reference the original invoice's UUID and ICV. The amount adjustments propagate through the next VAT return.

How do we handle Zakat calculation in Odoo?

Zakat is computed annually on the zakatable base (typically equity-related items: capital, retained earnings, certain provisions, less long-term investments and fixed assets). Odoo doesn't compute Zakat automatically — standard practice is a year-end worksheet pulling balance sheet figures from Odoo trial balance, applying SOCPA/ZATCA Zakat rules, and posting a manual provision journal. The Zakat return is filed via ZATCA's portal.

E

Written by

ECOSIRE Team

Technical Writing

The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.

ECOSIRE

Transform Your Business with Odoo ERP

Expert Odoo implementation, customization, and support to streamline your operations.