Skip to main content
KSA ZATCA E-Invoicing for POS (Fatoora Phase 2) — A build-to-order ERPNext app that makes your point of sale issue ZATCA Phas — 1/1Illustrative preview

A build-to-order ERPNext app that makes your point of sale issue ZATCA Phase-2 compliant simplified tax invoices

— cryptographically stamped, TLV QR-coded, and reported to Fatoora in real time.

ECOSIRE builds, installs, and supports it for Saudi retailers and restaurants.

What is KSA ZATCA E-Invoicing for POS (Fatoora Phase 2)?

A build-to-order ERPNext app that makes your point of sale issue ZATCA Phase-2 compliant simplified tax invoices — cryptographically stamped, TLV QR-coded, and reported to Fatoora in real time. ECOSIRE builds, installs, and supports it for Saudi retailers and restaurants. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

ZATCA Phase-2 compliant UBL 2.1 invoice XML generated server-side on POS Invoice submit via a `hooks.py` doc event
ECDSA cryptographic stamp (digital signature) applied using the device certificate stored on the `ZATCA Device` DocType
Base64 TLV-encoded QR code built to ZATCA's tag specification (seller name, VRN, timestamp, total, VAT, hash, signature) and rendered on every simplified invoice
Real-time reporting of B2C simplified invoices and clearance of B2B standard invoices to the Fatoora API
Invoice hash chain (PIH / previous-invoice-hash and ICV counter) maintained per device so ZATCA's sequence validation passes
CSID onboarding — compliance CSID and production CSID requests driven from the `ZATCA Device` DocType via whitelisted methods, no server access needed
`ZATCA Settings` singleton DocType for seller identity, VAT registration number, address, and environment switch (sandbox / simulation / production)
`ZATCA Invoice Log` DocType capturing signed XML, QR payload, ZATCA request ID, clearance/reporting status, and validation warnings for audit
Bilingual Arabic/English tax invoice print formats with correct RTL layout, VAT breakdown, and embedded QR
Scheduler event that retries failed or queued ZATCA submissions instead of silently dropping them
Whitelisted Frappe REST endpoints so a headless or third-party POS front end can trigger the same signing and reporting pipeline
Permissions and role profiles that restrict certificate material and ZATCA settings to finance/admin roles while cashiers keep a clean POS
`before_cancel` doc event handling so cancellations are reflected correctly and never break the invoice hash chain
Built and tested for Frappe/ERPNext v15 and v16, validated end to end against ZATCA sandbox and simulation before production go-live

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your ERPNext.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

ERPNext Compatibility
—
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
MariaDB 10.6+

About this Product

Saudi retailers and restaurants running ERPNext POS face a hard regulatory wall: ZATCA's Fatoora Phase 2 (the Integration Phase) requires every simplified tax invoice issued at the counter to carry a cryptographic stamp, a TLV-encoded QR code, and to be reported to the ZATCA platform within 24 hours — with your device onboarded via a CSID (Cryptographic Stamp Identifier). ERPNext core gives you POS Invoices, VAT tax templates, and print formats, but it has no concept of a ZATCA CSID, no signed-XML generator, no UUID/PIH invoice hash chain, and no connection to the Fatoora reporting API. Teams try to bridge this with print-format hacks and manual QR strings, and end up with invoices that fail ZATCA validation and block go-live.

ECOSIRE builds a dedicated Frappe app that closes that gap end to end. The app ships as a proper Frappe module with its own DocTypes — a ZATCA Settings singleton for the seller identity, VAT registration, and environment (sandbox / simulation / production), a ZATCA Device DocType that stores each onboarded CSID and its private key, and a ZATCA Invoice Log that records the signed XML, the invoice hash (PIH/ICV chain), the QR payload, and the ZATCA clearance/reporting response for every document. We hook into the POS Invoice lifecycle through hooks.py doc events (on_submit, before_cancel): on submit, a server-side method builds the UBL 2.1 XML, applies the ECDSA cryptographic stamp using the device certificate, generates the Base64 TLV QR per ZATCA's tag specification, and calls the Fatoora reporting endpoint. Simplified invoices (B2C) are reported after issuance; standard tax invoices (B2B) go through the clearance flow. Bilingual Arabic/English tax invoice print formats render the seller/buyer data, VAT breakdown, and QR so the counter can hand over a compliant receipt immediately.

Under the hood the integration is designed to be operable, not a black box. CSID onboarding is driven from the ZATCA Device DocType via whitelisted methods that call ZATCA's compliance and production CSID APIs, so a store manager can onboard a new till without touching the server. Failed reports are queued and retried through a Frappe scheduler event rather than lost, and every attempt is written to the invoice log with the ZATCA request ID and any validation warnings. Role profiles and permissions keep certificate material and settings restricted to your finance/admin roles while cashiers only see the POS. The whole thing exposes clean whitelisted REST endpoints so a headless POS front end or a second location can trigger the same signing pipeline.

The app is built for the ERPNext/Frappe version you run — v15 or the current v16 — and tested against ZATCA's sandbox and simulation environments before it ever touches production. Because this is a build-to-order engagement, we start from your actual chart of accounts, VAT setup, POS profiles, and receipt layout rather than a generic template: the QR tags, invoice numbering, and clearance rules are wired to how your business actually issues invoices.

Delivery works as a scoped project, not a download. After a short scoping call we confirm exactly which invoice types, locations, and devices are in scope, then build, install on your staging site, and run UAT against the ZATCA sandbox. Typical delivery is one working week from confirmed scope. You receive the full source repository, install and configuration docs, a training session for your finance team, and a post-go-live support window so any ZATCA validation edge cases are handled while your first real invoices flow.

What you get

  • Installable source code for your version — the complete Frappe app repository built for your ERPNext v15/v16 site
  • Installation and configuration on your staging site, including ZATCA Settings, VAT setup, and print-format wiring
  • CSID onboarding walkthrough for each POS device against ZATCA compliance and production endpoints
  • Technical documentation covering DocTypes, hooks, whitelisted methods, scheduler jobs, and the signing pipeline
  • User guide plus a live training session for your finance and store-operations team
  • UAT on staging against the ZATCA sandbox/simulation environment, with a documented rollback plan
  • Post-go-live support window to handle ZATCA validation edge cases as your first real invoices are issued
  • Git repository handover with full commit history so your team or another vendor can maintain it

Who this is for

Saudi retail chain operations lead

Runs multiple ERPNext POS tills across stores and must ensure every counter issues a ZATCA-compliant simplified invoice with a valid QR before the Fatoora deadline, without slowing down checkout.

Restaurant / F&B finance manager

Needs bilingual Arabic/English tax invoices, correct VAT breakdown, and real-time reporting to ZATCA for high-volume B2C sales, plus a clean audit trail of what was reported and when.

ERPNext implementation partner in KSA

Delivering ERPNext to a Saudi client and needs a proven, source-available ZATCA Phase-2 POS integration they can install, extend, and support rather than building the cryptographic stamping and Fatoora API from scratch.

IT / systems administrator at a KSA SME

Responsible for onboarding CSIDs, managing device certificates, and keeping submissions flowing; wants retries, logging, and role-based access so cashiers never touch sensitive settings.

How KSA ZATCA E-Invoicing for POS (Fatoora Phase 2) Compares

CriterionECOSIRECustom BuildCompetitorERPNext Native
ZATCA Phase-2 cryptographic stampingBuilt in — ECDSA signing on POS submit via doc eventPossible but you build the crypto and XML yourselfVaries; many only cover Phase-1 QRNot supported at all
TLV QR code on simplified invoicesBase64 TLV per ZATCA tag spec, embedded in print formatHand-coded QR string, easy to get wrongOften a basic QR, not always full TLV specNo ZATCA-aware QR generation
CSID onboarding & certificate managementDriven from a `ZATCA Device` DocType, no server access neededManual scripting per deviceSometimes present, often config-file basedNo concept of CSID or certificates
Real-time Fatoora reporting/clearanceWired to the Fatoora API with scheduler retries and loggingYou build the API client and retry logicMay report but limited retry/audit handlingNo integration with ZATCA platform
Fit to your ERPNext setupBuilt to your CoA, VAT, POS profiles and receipt layoutFully bespoke but slow and costly to buildGeneric; you adapt your process to the appGeneric core, no KSA specialization
Source code & maintainabilityFull git repository handed over at deliveryYou own it but carry the whole buildOften closed-source or license-lockedCore only, nothing ZATCA to own
Delivery timeone working week from confirmed scope, with staging UATMonths of in-house development and testingFast install but generic fit and gapsImmediate but non-compliant
Support & spec-change updatesPost-go-live support window + optional update agreementYour team maintains it aloneVendor support quality variesNo ZATCA support path

Frequently Asked Questions about KSA ZATCA E-Invoicing for POS

How long does delivery take?

This is a build-to-order engagement, not an instant download. After a short scoping call to confirm invoice types, locations, and devices, typical delivery is one working week from confirmed scope — including build, install on your staging site, and UAT against the ZATCA sandbox before production go-live.

How do support and updates work after go-live?

Every engagement includes a post-go-live support window to handle ZATCA validation edge cases as your first real invoices flow. Because you receive the full git repository, your team can maintain and extend it, and we offer ongoing support or update agreements — including adapting to ZATCA specification changes — as a separate arrangement.

Is this a ready-made app I can download from the Frappe marketplace?

No. ECOSIRE builds, installs, and supports this app specifically for your ERPNext setup — your chart of accounts, VAT configuration, POS profiles, and receipt layout. You get the source code and repository at handover, but the app is delivered as a scoped project, not a self-service download.

Which ERPNext versions and ZATCA phases are supported?

The app is built and tested for Frappe/ERPNext v15 and the current v16, and targets ZATCA Fatoora Phase 2 (the Integration Phase): cryptographic stamping, TLV QR codes, CSID onboarding, and real-time reporting/clearance via the Fatoora API.

Does it handle CSID onboarding and multiple POS devices?

Yes. Each till is represented by a `ZATCA Device` DocType that stores its CSID and certificate. Compliance and production CSID requests are driven through whitelisted methods, and the per-device invoice hash chain (PIH/ICV) is maintained so multi-location, multi-device setups pass ZATCA's sequence validation.

What happens if a submission to ZATCA fails or the connection drops?

Failed or queued submissions are retried automatically through a Frappe scheduler event rather than being lost. Every attempt — including the ZATCA request ID and any validation warnings — is recorded in the `ZATCA Invoice Log` DocType, so you always have an auditable trail of what was reported.

Will the tax invoices be bilingual and QR-coded correctly?

Yes. The app ships Arabic/English print formats with proper RTL layout, VAT breakdown, and an embedded Base64 TLV QR code built to ZATCA's tag specification, so the cashier can hand over a compliant simplified tax invoice at the counter immediately.

Request a quote

KSA ZATCA E-Invoicing for POS

A build-to-order ERPNext app that makes your point of sale issue ZATCA Phase-2 compliant simplified tax invoices — cryptographically stamped, TLV QR-coded, and reported to Fatoora in real time. ECOSIRE builds, installs, and supports it for Saudi retailers and restaurants.

  • ZATCA Phase-2 compliant UBL 2.1 invoice XML generated server-side on POS Invoice submit via a `hooks.py` doc event
  • ECDSA cryptographic stamp (digital signature) applied using the device certificate stored on the `ZATCA Device` DocType
  • Base64 TLV-encoded QR code built to ZATCA's tag specification (seller name, VRN, timestamp, total, VAT, hash, signature) and rendered on every simplified invoice
  • Real-time reporting of B2C simplified invoices and clearance of B2B standard invoices to the Fatoora API

Request a Quotation

Tell us about your KSA ZATCA E-Invoicing for POS requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.