Community Tutorials ZATCA Technical ZATCA Self-Billing and B2C Receipts — Edge Cases Most Vendors Miss
ZATCA Self-Billing and B2C Receipts — Edge Cases Most Vendors Miss
ZATCA TECHNICAL

ZATCA Self-Billing and B2C Receipts — Edge Cases Most Vendors Miss

SKYLINE Knowledge Base
Photo by Scott Graham on Unsplash

A practitioner-grade walk-through of ZATCA Self-Billing and B2C Receipts — Edge Cases Most Vendors Miss. Scope, controls, implementation phases and audit-ready evidence — with sample policies and configs you can adapt for ZATCA Technical.

Overview

ZATCA Phase 2 introduced two parallel flows: clearance for standard tax invoices (B2B) and reporting for simplified tax invoices (B2C). The common path is straightforward; the edge cases are where most ERPs and POSes fail in production. This guide is a practitioner's catalogue of those edge cases — self-billing, reverse charge, exports, refunds, partial returns, returnable packaging, and the timing of when an invoice is considered "issued".

Who this applies to

  • Every taxpayer using the simplified invoice / B2C flow.
  • ERPs, POS vendors, billing platforms.

Edge case 1: Self-billing

When the buyer issues the invoice on behalf of the seller (common in agriculture and freelancers). Three rules:

  • A written self-billing agreement must exist with each supplier.
  • The invoice must be marked with the self-billing indicator (InvoiceTypeCode 0211000).
  • The supplier's VAT number, not the buyer's, is the issuer for ZATCA purposes; but the buyer's CSID signs.
<cbc:InvoiceTypeCode name="0211000">388</cbc:InvoiceTypeCode>
<!-- name attribute: 02=self-billed, 1=tax invoice -->

Edge case 2: Reverse charge

For B2B services received from non-resident suppliers, the Saudi buyer self-assesses VAT under reverse charge.

  • Issue a self-assessed invoice with tax category code "O" (Services outside scope of tax — RC) and zero VAT rate at the line level.
  • Record the reverse-charge VAT in a parallel internal journal.
  • Reverse-charge invoices follow the clearance flow if you're a wave-included taxpayer.

Edge case 3: Exports (zero-rated)

Goods exported outside KSA are zero-rated. Watch for:

  • Tax category code "Z" (Zero-rated).
  • Customs export declaration number stored in AdditionalDocumentReference.
  • Proof-of-export must be retained 6 years.
<cac:ClassifiedTaxCategory>
  <cbc:ID>Z</cbc:ID>
  <cbc:Percent>0</cbc:Percent>
  <cac:TaxScheme>
    <cbc:ID>VAT</cbc:ID>
  </cac:TaxScheme>
</cac:ClassifiedTaxCategory>

Edge case 4: B2C receipt timing

A simplified invoice must be issued at the moment of sale. ZATCA reporting can lag up to 24 hours but the on-device receipt time and the reported time must match within reasonable drift (NTP-synchronised devices). Common errors:

  • Receipt printed but reporting deferred to end-of-day batch — fine if within 24h.
  • POS terminal offline for 26 hours and you batch-report — that batch contains late entries; ZATCA flags them.

Edge case 5: Foreign currency

If the invoice is in USD but VAT must be reported in SAR:

<cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>SAR</cbc:TaxCurrencyCode>
<cac:TaxExchangeRate>
  <cbc:SourceCurrencyCode>USD</cbc:SourceCurrencyCode>
  <cbc:TargetCurrencyCode>SAR</cbc:TargetCurrencyCode>
  <cbc:CalculationRate>3.7500</cbc:CalculationRate>
</cac:TaxExchangeRate>

The exchange rate must come from a published, reproducible source (SAMA reference rate is preferred).

Edge case 6: Partial returns and credit notes

A credit note for a partial return:

  • Reference the original invoice's cbc:ID and cbc:UUID in cac:BillingReference.
  • Tax category and rate must match the original line.
  • ICV continues to increment (credit notes are still invoices for the counter).
  • PIH points to the immediately preceding invoice (not the original).
<cac:BillingReference>
  <cac:InvoiceDocumentReference>
    <cbc:ID>INV-2026-00187</cbc:ID>
    <cbc:UUID>3cf5ee18-ee25-44ea-a444-2c37ba7f28be</cbc:UUID>
  </cac:InvoiceDocumentReference>
</cac:BillingReference>
<cbc:InvoiceTypeCode name="0200000">381</cbc:InvoiceTypeCode>

Edge case 7: Returnable packaging

VAT applies to the goods value not the deposit on returnable packaging. Two-line invoice approach:

  • Line 1: goods, 15% VAT.
  • Line 2: packaging deposit, code "O" (out-of-scope), refunded on return.

When packaging is returned, issue a credit note for the deposit line only — not the goods.

Edge case 8: Tips and service charges

  • Service charge (e.g., 10% in restaurants): VAT applies.
  • Voluntary tip via card: out-of-scope (no VAT).
  • Voluntary tip in cash and not passed through the till: not on invoice at all.

Edge case 9: Bundled services with mixed VAT rates

If a single line item bundles a zero-rated good with a standard-rated service, split it into separate lines and apply the correct VAT to each. Never apportion at the line level; ZATCA validation rejects mixed rates.

Edge case 10: Issued vs. delivered

For ZATCA the invoice is "issued" when:

  • B2B: when the cleared XML has been returned by ZATCA with status SUCCESS.
  • B2C: when the receipt is printed and reportable.

If your delivery slip predates the cleared invoice, that is fine; if you delivered without an invoice and later issued one, you risk a finding.

Common gotchas

  • Reverse charge invoices treated as out-of-scope on the wrong tax category code.
  • Credit note PIH pointing at the original invoice rather than the immediately preceding one.
  • Foreign-currency invoices submitting both currencies but no exchange-rate element.
  • POS terminals using device-local time without NTP, drifting outside reasonable tolerance.

Verification

  • Test suite covering all edge cases above.
  • ICV/PIH chain audit including credit notes.
  • NTP synchronisation evidenced on every POS device.
  • 6-year archive index by VAT period for quick auditor retrieval.

Conclusion

The B2C path looks simple until you ship to production. Catalogue the edge cases up front, write a regression test for each, and your ZATCA integration becomes boring — which is the highest praise an integration can earn.

Related guides

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship ZATCA Technical for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.