QR fattura elettronica ZATCA (Saudi FATOORA)
ZATCA (Autorità per la Zakat, le imposte e le dogane) dell'Arabia Saudita impone un QR su ogni fattura fiscale emessa nel Regno. La Fase 1 è TLV semplificato; la Fase 2 aggiunge la sigillatura crittografica tramite integrazione con la piattaforma FATOORA. Le fatture non conformi vengono rifiutate dal software contabile dell'acquirente e non sono valide per il rimborso IVA.
Fase 1 (Generazione): in vigore dal 4 dicembre 2021. Tutte le imprese registrate IVA devono emettere fatture digitali con QR.
Fase 2 (Integrazione): implementazione a ondate per dimensione aziendale dal 1° gennaio 2023. Aggiunge firma digitale + validazione ZATCA per fatture standard e reporting in tempo reale per fatture semplificate.
Cos'è
Il QR codifica una stringa Base64. Decodificando il Base64 si ottiene una sequenza binaria TLV con 5 campi obbligatori in ordine fisso:
| Tag | Campo | Tipo | Note |
|---|---|---|---|
01 | Nome venditore | Stringa UTF-8 | Nome commerciale del venditore. Arabo e latino entrambi accettati. |
02 | Numero di partita IVA | 15 cifre | Inizia con 3 per entità saudite. Formato: 3XXXXXXXXXXXXX3. |
03 | Timestamp fattura | ISO 8601 | Es. 2026-04-18T10:30:00Z. Deve includere fuso orario. |
04 | Totale fattura (IVA inclusa) | Stringa decimale | Es. 115.00. La valuta è implicitamente SAR. |
05 | Importo IVA | Stringa decimale | Es. 15.00. Aliquota standard attuale del 15%. |
06 | Hash fattura (Fase 2) | Base64 SHA-256 | SHA-256 dell'XML della fattura canonica. |
07 | Firma digitale (Fase 2) | Base64 | ECDSA sull'hash della fattura utilizzando il certificato CSID del venditore. |
08 | Chiave pubblica (Fase 2) | Base64 X.509 | Chiave pubblica ECDSA del venditore (dal CSID). |
09 | Timbro ZATCA (Fase 2) | Base64 | Controfirma di ZATCA. Presente solo dopo la validazione ZATCA. |
Ogni record TLV è 1 byte tag + 1 byte lunghezza + <lunghezza> byte valore. L'intera sequenza viene poi codificata in Base64 per diventare il payload del QR.
Fase 1 (semplificata) vs Fase 2 (integrazione)
| Aspetto | Fase 1 | Fase 2 |
|---|---|---|
| Contenuto QR | Solo tag 01–05 | Tag 01–05 più 06, 07, 08, opzionalmente 09 |
| Integrazione ZATCA | Nessuna, offline | API in tempo reale per fatture semplificate, flusso di validazione per fatture standard |
| Certificati richiesti | No | Sì, CSID (Identificatore Timbro Crittografico) emesso da ZATCA |
| Data di vigenza | 2021-12-04 (tutte le imprese) | 2023-01-01 (ondate progressive per fatturato) |
| Ambito fattura | B2C (semplificato) + B2B (standard) | B2C semplificato: report in tempo reale. B2B standard: validazione preliminare prima dell'emissione. |
Vettori di test canonici
Esempio TLV (prima di Base64):
01 0A "Acme Saudi" 02 0F "300000000000003" 03 14 "2026-04-18T10:30:00Z" 04 06 "115.00" 05 05 "15.00"Dopo codifica Base64:
AQpBY21lIFNhdWRpAg8zMDAwMDAwMDAwMDAwMDMDFDIwMjYtMDQtMThUMTA6MzA6MDBaBAYxMTUuMDAFBTE1LjAw| Caso | Input | Prefisso Base64 |
|---|---|---|
| Fase 1, semplificato minimo | seller=Acme Saudi | AQpBY21lIFNhdWRp... |
| Nome venditore in arabo | seller=شركة أكمي | Nome del venditore codificato UTF-8 dentro TLV prima di Base64. |
| Fattura standard Fase 2 | Tutto quanto sopra più hash=<SHA-256 Base64> | Base64 molto più lungo. I decodificatori devono tollerare tag extra oltre al 05. |
Errori comuni
- Lunghezza numero IVA. I numeri IVA ZATCA sono esattamente 15 cifre, iniziano e finiscono con
3. Qualsiasi altro valore non supera la validazione all'ingresso della fattura. - Timestamp senza fuso orario. La specifica richiede ISO 8601 con zona esplicita (
Zo+03:00). I timestamp locali senza zona vengono rifiutati. - Ordine di codifica. I campi TLV devono apparire nell'ordine del numero di tag (01, 02, 03, 04, 05, …). Il riordinamento fa sì che il QR venga decodificato correttamente, ma alcuni validatori lo segnalano come non canonico.
- Formattazione decimale. Il totale della fattura e l'importo IVA usano il punto decimale (
115.00), non la virgola (115,00). Nessun separatore delle migliaia. - La valuta è implicitamente SAR. Le fatture in valuta estera vengono comunque convertite in SAR per il campo QR. L'XML sottostante può portare la valuta originale; il QR no.
- Errori di validazione Fase 2. Una fattura standard inviata all'API di validazione di ZATCA può essere rifiutata (CSID errato, XML malformato, errore nel calcolo fiscale). La fattura è legalmente invalida finché non viene validata. Implementare un loop di tentativi con backoff esponenziale; non emettere la fattura finché la validazione non ha successo.
- Rotazione certificato CSID. I CSID di Fase 2 scadono (tipicamente 1 anno). Incorporare un controllo di rinnovo nel sistema di fatturazione elettronica o si cesserà improvvisamente di poter emettere fatture.
Compatibilità scanner
| Lettore | Supporto | Note |
|---|---|---|
| ZATCA FATOORA app | Nativo | App ufficiale del Ministero; verifica le firme Fase 2 contro il PKI di ZATCA. |
| Software contabile saudita (SAP B1, Oracle, Microsoft Dynamics) | Nativo (post-2023) | Le versioni localizzate per l'Arabia Saudita hanno il parsing ZATCA nella pipeline AP. |
| iOS Fotocamera | Base64 grezzo | Non riconosciuto come fattura fiscale. L'utente deve aprire l'app FATOORA. |
| Android Fotocamera / Google Lens | Base64 grezzo | Stesso, nessun parsing nativo. |
| Strumenti di audit di terze parti (PwC, KPMG, Deloitte unità saudite) | Nativo | Le suite tecnologiche di audit analizzano e verificano le firme Fase 2. |
Vedi anche
- /zatca-saudi-einvoice-qr-code/, il generatore.
- /standards/, torna all'indice degli standard.
- ZATCA Portale Sviluppatori, risorse ufficiali e il sandbox FATOORA.