From onboarding to reconciliation — every stage dsFatoora runs on your behalf, including the pitfalls we've built specific safeguards for.
Taxpayer onboarding, CSID request, and environment setup (sandbox → simulation → production) before any invoice is generated.
dsFatoora reads invoice data at the point of posting — from SAP, D365, Oracle, Sage, Odoo, or a legacy system — via API, OData, or staging tables.
Standard tax invoice vs. simplified invoice, and whether it's a credit or debit note, is resolved before any XML is generated.
Source data is mapped into the ZATCA invoice schema.
The XML is structured to the UBL 2.1 standard ZATCA requires, including all mandatory namespaces and extensions.
Rules covering VAT numbers, mandatory fields, totals, and tax breakdowns are checked before submission.
A unique invoice identifier is generated and embedded, distinct from the ERP's own invoice number.
A cryptographic hash of the invoice content is calculated for integrity verification.
Each invoice's hash chains to the hash of the one before it, forming an auditable, tamper-evident sequence.
The invoice is signed using the taxpayer's cryptographic certificate.
CSID, CCSID and PCSID lifecycle — issuance, renewal before expiry, and secure storage — is handled centrally.
A QR code encoding the mandatory invoice fields is generated for both B2B and B2C formats.
The signed invoice is submitted to the appropriate Clearance or Reporting endpoint depending on invoice type.
Responses are parsed into accepted, accepted-with-warnings, or rejected, each routed differently.
Clearance status, QR code, and any warnings are written back to the source ERP against the original transaction.
Failures are classified — data error, connectivity error, or authority-side error — and routed to the right remediation path.
Exponential backoff and a dead-letter queue prevent transient failures from becoming lost invoices.
Idempotency keys ensure a retried submission can never be cleared twice.
Every stage is logged immutably with timestamps, satisfying both internal audit and ZATCA's own record-keeping expectations.
A dashboard continuously matches ERP records against ZATCA's cleared records, surfacing any gap for resolution.