A ZATCA-compliant FATOORAH Phase-2 e-invoicing app for ERPNext that generates UBL 2.1 XML, applies the cryptographic stamp and XAdES signature, prints the TLV QR code, and handles real-time clearance (B2B) and reporting (B2C) against the ZATCA APIs. Built to your scope, installed on your bench, and supported by ECOSIRE. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $799.00 USD; request a quote for a scoped proposal.
Illustrative previewA ZATCA-compliant FATOORAH Phase-2 e-invoicing app for ERPNext that generates UBL 2.1 XML,
applies the cryptographic stamp and XAdES signature, prints the TLV QR code, and handles real-time clearance (B2B) and reporting (B2C) against the ZATCA APIs. Built to your scope, installed on your bench, and supported by ECOSIRE.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your ERPNext.
You go live in about 2–4 weeks, with a post-launch support window.
Saudi VAT-registered businesses running ERPNext hit a wall the moment ZATCA's Integration Phase (Phase 2 / FATOORAH) applies to them. ERPNext core produces a compliant tax invoice and can print a basic Phase-1 QR code, but it does not generate the mandatory ZATCA UBL 2.1 XML, does not apply the cryptographic stamp and XAdES digital signature, does not manage the CSID onboarding lifecycle, and has no path to clear B2B standard invoices or report B2C simplified invoices to ZATCA's APIs in real time. Miss the clearance step and the invoice is legally invalid; get the XML hash chain or the signed QR wrong and ZATCA rejects it. Bolting this onto a live Sales Invoice workflow by hand is exactly where teams lose weeks and risk penalties.
ECOSIRE builds a proper Frappe app that installs cleanly on your bench alongside ERPNext, so nothing in core is patched and every future bench update stays safe. The app adds its own DocTypes — a per-branch/device ZATCA Device holding the CSR configuration, private key, compliance CSID and production CSID, and a ZATCA Invoice Log that stores the generated XML, the invoice hash, the previous-invoice hash for the chain, the signed QR TLV, the ZATCA request/response payloads, and the clearance or reporting status. Custom fields on Sales Invoice surface the ZATCA UUID, ICV counter, QR image and clearance status directly on the document, and a role profile keeps signing keys and logs visible only to Accounts and Compliance roles.
Technically, the flow is driven by hooks.py document events. On Sales Invoice on_submit, a server-side handler builds the UBL 2.1 XML from the invoice, computes the SHA-256 hash, chains it to the previous invoice's hash, canonicalizes and signs the document with the device private key (ECDSA), and generates the TLV-encoded, Base64 QR per the ZATCA spec. Standard (B2B) invoices are POSTed to the clearance API and only marked valid once ZATCA returns the cleared, counter-signed XML; simplified (B2C) invoices are reported and queued. A scheduler event retries any documents left in a pending state (network blips, ZATCA maintenance) so nothing is silently dropped, and credit/debit notes carry the correct reference and reason codes. Onboarding — CSR generation, compliance checks and production CSID issuance — is exposed as whitelisted methods callable from a guided setup screen, and the whole thing is reachable over the Frappe REST API for POS or external systems.
Because this is build-to-order, ECOSIRE builds the version scoped to your exact setup — your ERPNext/Frappe v15 or v16 bench, your branches and devices, your B2B/B2C mix, POS or not, and any print-format branding. After a short scoping call we confirm scope in writing, then build, test on a staging bench against the ZATCA sandbox, run UAT with your finance team, and cut over to production CSIDs. Typical delivery is 2–4 weeks from confirmed scope. You receive the full source, a git repository handover, documentation and training, and a post-go-live support window — no instant download, because a compliance integration this consequential should be built and verified for your environment, not shipped blind.
Accountable for ZATCA compliance and audit-readiness. Needs every invoice cleared or reported correctly, a full audit trail of signed XML and ZATCA responses, and confidence that a rejection won't go unnoticed. Buys the certainty that invoices are legally valid, not a half-finished integration.
Runs the ERPNext v15/v16 bench and worries about upgrade safety. Wants a clean standalone app that doesn't patch core, survives `bench update`, uses proper DocTypes and `hooks.py` events, and hands over as a git repo the team can maintain.
Wants Phase-2 compliance handled before the ZATCA wave deadline without derailing the finance team. Values a fixed, scoped build with UAT and a rollback plan over an open-ended in-house project, and a support window that de-risks go-live.
Delivering ERPNext to Saudi clients and needing a reliable ZATCA layer to slot in per engagement. Needs source ownership, clean architecture, REST/whitelisted-method access for POS integrations, and documentation they can support downstream.
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| ZATCA Phase-2 clearance & reporting | Built-in for both B2B clearance and B2C reporting, validated on sandbox | Possible but you build the whole API integration yourself | Varies by app; often reporting-only or partial | Not supported — ERPNext core has no ZATCA API integration |
| UBL 2.1 XML + digital signing | Full UBL 2.1 generation, hash chaining and XAdES signing | Must implement canonicalization, hashing and signing from spec | Usually present but a black box you can't audit | Not generated by core |
| Fit to your setup | Scoped to your branches, devices, B2B/B2C mix and POS | Fully bespoke, but at full in-house build cost and time | Generic; you adapt your process to the app | Generic tax invoice only |
| Upgrade safety | Standalone app, no core patches, survives `bench update` | Depends on your team's discipline; core patches risk breakage | Depends on vendor's engineering quality | N/A — it is core |
| Source & ownership | Full source + git repo handover, you own and can extend it | You own it, but you also built and must maintain all of it | Typically closed-source or license-locked | Open source but no ZATCA layer to own |
| Delivery model | Build-to-order, 2–4 weeks from confirmed scope, with UAT | Open-ended internal project, months typical | Instant install, but integration/config still on you | Already installed, but non-compliant for Phase 2 |
| Support & spec updates | Post-go-live window + optional maintenance for FATOORAH changes | Your team tracks and implements every ZATCA revision | Vendor-dependent; may lag or charge per update | No ZATCA support |
| Audit trail & retention | `ZATCA Invoice Log` stores XML, hashes, QR, responses for retention | You design the logging and retention scheme | Often minimal logging | No ZATCA-specific audit trail |
This is a build-to-order product, not an instant download. After a short scoping call and written sign-off on scope, typical delivery is 2–4 weeks. The exact timeline depends on your branch/device count, B2B vs B2C mix, POS integration and print-format branding — we confirm it in writing before we start building.
No. We ship a standalone Frappe app that installs alongside ERPNext and uses custom fields, its own DocTypes, `hooks.py` document events and whitelisted methods. Nothing in core is modified, so your `bench update` and future ERPNext upgrades stay safe.
Every build includes a post-go-live support window for defect fixes and ZATCA-rejection triage. Because ZATCA occasionally revises its FATOORAH specification, we offer optional ongoing maintenance to keep your XML, signing and API integration aligned with the current standard. You receive the full git repository, so your team can also maintain and extend the code independently.
Yes. Standard (B2B) invoices go through the real-time clearance API and are only marked valid once ZATCA returns the counter-signed cleared XML. Simplified (B2C) invoices are reported to the reporting API, with a scheduler-based retry queue so nothing is dropped during outages. Credit and debit notes are handled with the correct reference and reason codes.
We build for Frappe/ERPNext v15 and v16. Tell us your exact version and edition (self-hosted, Frappe Cloud, or Frappe Cloud Private Bench) during scoping and we target that environment specifically, including any constraints your hosting imposes on custom apps.
Yes. Clearance and reporting are reachable through the Frappe REST API and whitelisted methods, so ERPNext POS, e-commerce checkouts or external billing systems can trigger ZATCA processing. We scope the specific integration points with you up front.
We generate the CSR, run the compliance checks against the ZATCA sandbox to obtain the compliance CSID, then issue the production CSID. Everything is validated on a staging bench with UAT by your team and a documented rollback plan before we cut over to production — so go-live is controlled, not a leap of faith.

A build-to-order 2Checkout (Verifone) payment integration for ERPNext, giving global digital-goods sellers card acceptance, 45+ local payment methods, multi-currency checkout, and reconciled invoices. ECOSIRE scopes, builds, installs, and supports it on your ERPNext v15/v16 instance.

A build-to-order ERPNext application for anonymous 360-degree reviews — configurable peer, manager, report and self rater groups, weighted competency scoring, and aggregated gap-analysis and heatmap reports. ECOSIRE scopes, builds, installs and supports it on your Frappe/ERPNext v15/v16 instance.

A build-to-order ERPNext app that detects abandoned webshop and POS carts, then runs multi-channel WhatsApp, email, and SMS recovery and win-back sequences with dynamic cart content and coupon injection. ECOSIRE scopes, builds, installs, and supports it for your v15/v16 instance.

A build-to-order ERPNext app for running B2B account-based campaigns: define target-account lists, sequence outreach calls, auto-distribute them to agents, and score account engagement across every contact. ECOSIRE designs, builds, installs and supports it after you confirm scope.
A ZATCA-compliant FATOORAH Phase-2 e-invoicing app for ERPNext that generates UBL 2.1 XML, applies the cryptographic stamp and XAdES signature, prints the TLV QR code, and handles real-time clearance (B2B) and reporting (B2C) against the ZATCA APIs. Built to your scope, installed on your bench, and supported by ECOSIRE.