ZATCA Phase 2: häufige Ablehnungsfehler und ihre Lösung (SAP Business One)

Von Zain Abbas, Kodenova · Aktualisiert am

Kurz gesagtDie meisten Ablehnungen in ZATCA Phase 2 entstehen durch Stammdaten und Berechnungsregeln, nicht durch die Verbindung. Typische Ursachen sind fehlende Felder der Käuferadresse (BR-KSA-63), ein falsches Format der Umsatzsteuernummer des Käufers (BR-KSA-44), Positionssteuern oder Summen, die nicht aufgehen (BR-KSA-50, BR-CO-10), Gutschriften ohne Referenz und eine unterbrochene Hash-Kette der Rechnungen. Eine abgelehnte Rechnung wird nie bearbeitet und erneut gesendet: Sie beheben die Ursache und übermitteln einen neuen Beleg mit eigenem Zähler, eigener UUID und eigenem Hash.

Zuerst klären: Welcher Ablauf ist fehlgeschlagen?

Phase 2 kennt zwei Abläufe, und eine Ablehnung bedeutet in jedem etwas anderes.

ThemaStandardrechnung (B2B)Vereinfachte Rechnung (B2C)
ZATCA-VerfahrenFreigabe (Clearance, in Echtzeit)Meldung (Reporting, innerhalb von 24 Stunden)
Zeitpunkt der PrüfungBevor der Käufer die Rechnung erhältNach dem Verkauf
Wer stempeltDie ZATCA, die auch den QR-Code zurückgibtIhr System, mit seiner CSID
FehlerstatusNOT_CLEAREDNOT_REPORTED
Was eine Ablehnung bedeutetDie Rechnung darf in dieser Form nicht an den Käufer gehenDie Rechnung ist ungültig und muss als neuer Beleg erneut übermittelt werden

Die Antwort der ZATCA trennt Fehler (errors) von Warnungen (warnings). Ein Fehler führt zur Ablehnung des Belegs. Eine Warnung kommt zusammen mit einem angenommenen Beleg. In einer echten NOT_CLEARED-Antwort sehen Sie einen Block validationResults mit Code, Kategorie und Meldung, zum Beispiel:

BR-KSA-39: The invoice must contain the seller VAT registration number (BT-31) and/or seller group VAT registration number (KSA-18).

Der Regelcode am Anfang ist der Begriff, nach dem Sie suchen. Fast jede Ablehnung lässt sich auf eine der folgenden Gruppen zurückführen.

1. Felder der Käuferadresse (B2B)

Das ist der Fehler, den wir in SAP Business One am häufigsten sehen.

Der XML-Standard verlangt auf jeder Rechnung eine Postanschrift des Käufers, außer bei vereinfachten Rechnungen und den zugehörigen Gut- und Lastschriften (Regel BR-10). Zusätzlich legt BR-KSA-63 fest: Ist das Land des Käufers SA, sind folgende Felder Pflicht: Straße, Hausnummer, Postleitzahl, Ort, Stadtbezirk (District) und Land. Die Adressregeln erwarten außerdem eine 4-stellige Hausnummer und eine 5-stellige Postleitzahl.

In SAP B1 hat die Rechnungsadresse des Kunden oft Straße und Ort, aber keinen Stadtbezirk, oder die Hausnummer steht in der Straßenzeile. Welches SAP-Feld welchem ZATCA-Feld zugeordnet ist, hängt von Ihrer Schnittstelle ab. Prüfen Sie deshalb deren Mapping-Dokumentation.

Lösung: Bereinigen Sie die Rechnungsadressen aller saudischen Kunden vor dem Produktivstart und hinterlegen Sie in SAP B1 eine Prüfung, damit für einen saudischen B2B-Kunden keine Ausgangsrechnung mit leerem Stadtbezirk oder einer Postleitzahl, die nicht 5-stellig ist, angelegt werden kann.

2. Format der Umsatzsteuernummer

BR-KSA-44 prüft die Umsatzsteuernummer des Käufers, wenn sie angegeben ist und es sich nicht um eine Exportrechnung handelt: Sie muss 15 Ziffern lang sein und mit einer 3 beginnen und enden. In SAP B1 stammt sie meist aus der Steuernummer (Federal Tax ID) des Geschäftspartners. Leerzeichen, Bindestriche, eine fehlende Ziffer oder eine alte CR-Nummer in diesem Feld führen zur Ablehnung.

Bei Exportrechnungen gilt das Gegenteil: Nach BR-KSA-46 darf die Umsatzsteuernummer des Käufers nicht übermittelt werden.

Standardrechnungen brauchen auch dann eine Käuferkennung, wenn der Käufer keine Umsatzsteuernummer hat. Die ZATCA akzeptiert andere ID-Schemata wie die Handelsregisternummer (CRN) oder die nationale ID (NAT), wie unter BR-KSA-14 und BR-KSA-81 aufgeführt.

Lösung: Prüfen Sie das Format der Federal Tax ID im Geschäftspartnerstamm und kennzeichnen Sie Exportkunden eindeutig, damit die Schnittstelle weiß, dass sie die Nummer nicht senden darf.

3. Summen und Rundung

Die ZATCA rechnet Ihre Rechnung nach. Stimmen ihre Zahlen nicht mit Ihren überein, schlägt der Beleg fehl. Diese Regeln fangen die meisten Fälle aus SAP B1 ab:

  • BR-KSA-50: Der Steuerbetrag einer Position muss dem Nettobetrag der Position × (Steuersatz / 100) entsprechen.
  • BR-KSA-51: Der Positionsbetrag inklusive Umsatzsteuer muss dem Nettobetrag der Position + Steuerbetrag der Position entsprechen.
  • BR-CO-10: Die Summe der Positions-Nettobeträge muss der Rechnungssumme der Positions-Nettobeträge entsprechen.
  • BR-CO-17: Die Umsatzsteuer je Kategorie muss dem steuerpflichtigen Betrag × Steuersatz entsprechen, auf zwei Nachkommastellen gerundet.

Der XML-Standard schreibt kaufmännisches Runden (half-up) vor, und die Umsatzsteuersumme des Belegs wird auf Belegebene berechnet, nicht durch Addition gerundeter Positionssteuern. SAP B1 kann hier kleine Abweichungen erzeugen, vor allem bei Rabatten auf Belegebene, Preisen mit vielen Nachkommastellen oder Rundungseinstellungen im Beleg. Eine Differenz von 0,01 SAR reicht für eine Ablehnung.

Lösung: Lassen Sie die Schnittstelle die Beträge im XML nach den Formeln der ZATCA aufbauen und testen Sie Rechnungen mit Rabatten, gebrochenen Mengen und gemischten Steuersätzen in der Simulationsumgebung. Unser Rechner für die saudische Umsatzsteuer hilft, wenn Sie eine einzelne Position von Hand prüfen.

4. Gutschriften und Belastungsanzeigen

Ausgangsgutschriften werden in SAP B1 oft ohne Basisbeleg angelegt, zum Beispiel bei einer manuellen Preiskorrektur. Das akzeptiert die ZATCA nicht. Solche Positionen haben RIN1.BaseType = -1; unter der Tabelle ORIN (Ausgangsgutschrift) finden Sie eine Abfrage, die sie auflistet.

  • BR-KSA-56: Gutschriften (Code 381) und Belastungsanzeigen (Code 383) müssen die Rechnungsreferenz der ursprünglichen Rechnung enthalten.
  • BR-KSA-17: Gut- und Lastschriften müssen den Grund ihrer Ausstellung angeben.

Lösung: Machen Sie auf jeder Ausgangsgutschrift, die an die ZATCA geht, eine Basis-Ausgangsrechnung (oder zumindest ein Referenzfeld) und einen Grund zur Pflicht.

5. Hash-Kette, ICV und PIH

Jede Rechnungseinheit (invoicing unit) führt genau eine Kette. Jeder Beleg trägt einen Invoice Counter Value (ICV), der um eins steigt, und einen Previous Invoice Hash (PIH), der auf den vorherigen Beleg verweist. BR-KSA-61 macht den PIH zur Pflicht.

Die Leitfäden der ZATCA sind hier streng:

  • Der Zähler darf nicht zurückgesetzt werden, und weder im Zähler noch in der Hash-Folge darf es Lücken geben.
  • Ein ICV darf nicht wiederverwendet werden.
  • Abgelehnte Belege zählen mit. Ihr Hash und ihr Zähler werden nicht geändert, und der PIH des nächsten Belegs verweist auf den unmittelbar vorhergehenden Beleg, auch wenn dieser abgelehnt wurde.

Kettenfehler entstehen in SAP B1 meist, weil zwei Benutzer oder zwei Dienste im selben Moment senden, eine Datenbank aus einer Sicherung wiederhergestellt wurde oder ein Testmandant samt Zähler in die Produktion kopiert wurde.

Lösung: Vergeben Sie Zähler und Hash pro Rechnungseinheit an einer einzigen Stelle, sperren Sie diese während der Übermittlung und setzen Sie den Zähler nach einer Wiederherstellung nie zurück, ohne den letzten Wert zu prüfen, den die ZATCA erhalten hat.

6. Signatur, Hash und QR-Code

Bei vereinfachten Rechnungen signiert Ihr System das XML. Stimmt der Hash in der Signatur nicht mit dem XML überein, das bei der ZATCA ankommt, schlägt die Rechnung fehl. Der Sicherheitsstandard der ZATCA definiert den Hash als SHA-256 über ein kanonisiertes XML ohne die UBL-Extensions, den Signaturblock und das QR-Element. Jede Änderung nach dem Signieren, selbst eine neue Formatierung der Leerzeichen oder eine geänderte Reihenfolge der Elemente, macht ihn ungültig.

Der QR-Code für B2C muss alle 9 Tags im Base64-TLV-Format enthalten, mit höchstens 700 Zeichen. Dekodieren Sie ein Beispiel mit unserem ZATCA-QR-Code-Decoder, um die Felder zu prüfen, und lesen Sie in unserem Leitfaden zum QR-Code, was jedes Tag enthält.

Lösung: Signieren Sie das endgültige XML, speichern Sie genau das, was gesendet wurde, und bauen Sie das XML für den Druck nie neu auf.

7. Probleme mit der CSID

Ihre produktive CSID ist ein Zertifikat mit Ablaufdatum. Der Sicherheitsstandard der ZATCA erlaubt eine Laufzeit von bis zu 60 Monaten, und das Portal schickt vor dem Ablauf eine Erinnerung. Bei der Erneuerung wird das alte Zertifikat widerrufen und ein neues ausgestellt. Das Zertifikat muss außerdem vor dem Stempeln geprüft werden. Eine abgelaufene oder widerrufene CSID stoppt daher die Übermittlungen dieser Rechnungseinheit.

Eine Compliance-CSID funktioniert nur mit den Compliance-APIs. Für Freigabe und Meldung brauchen Sie die produktive CSID.

Lösung: Erfassen Sie das Ablaufdatum jeder CSID und planen Sie die Erneuerung rechtzeitig vorher.

So behandeln Sie eine abgelehnte Rechnung in SAP Business One

  1. Code lesen. Notieren Sie Regel-ID und Meldung aus der Antwort, nicht nur „abgelehnt“.
  2. Ursache finden. Stammdaten (Adresse, Umsatzsteuernummer), Belegdaten (Referenz, Grund) oder Berechnung (Rundung).
  3. An der Quelle korrigieren. Korrigieren Sie den Geschäftspartner oder die Einrichtung, nicht nur das XML.
  4. Den abgelehnten Beleg nicht bearbeiten. Er bleibt mit seinem Zähler und seinem Hash in der Kette.
  5. Einen neuen Beleg übermitteln. Er erhält einen neuen ICV, eine neue UUID, einen neuen Hash und einen neuen Zeitstempel. Bei B2B muss er freigegeben sein, bevor er an den Kunden geht.
  6. Die Warteschlange im Blick behalten. Prüfen Sie abgelehnte und ausstehende Belege täglich, nicht erst zur Umsatzsteuererklärung.

Unsere Seite zur ZATCA-E-Rechnung beschreibt die gesamte Einrichtung, und die Checkliste zu Welle 25 hilft, wenn Ihr Produktivstart 2027 ansteht. Werden Ihre Rechnungen aus SAP Business One immer wieder abgelehnt, senden Sie uns die Fehlercodes, und wir sagen Ihnen, wo die Lösung ansetzen muss. Siehe auch unsere Leistung Integration der E-Rechnung.

Quellen

Passende Leistungen

FAQ

Häufige Fragen

Was ist der Unterschied zwischen einem Fehler und einer Warnung bei der ZATCA?

Laut technischem Leitfaden der ZATCA ist ein Fehler eine fehlgeschlagene Validierung, die zur Ablehnung des Belegs führt. Eine Warnung hängt an einem Beleg, der dennoch angenommen wurde. Warnungen sollten Sie für künftige Rechnungen beheben, die betroffene Rechnung selbst bleibt aber gültig.

Kann ich eine abgelehnte ZATCA-Rechnung korrigieren und erneut senden?

Nicht als denselben Beleg. Nach den Vorgaben der ZATCA wird die korrigierte Rechnung wie eine neue Rechnung übermittelt, mit eigenem Rechnungszählerwert, eigener UUID, eigenem Hash und eigenem Zeitstempel. Hash und Zähler des abgelehnten Belegs werden weder geändert noch wiederverwendet.

Darf ich eine B2B-Rechnung vor der Freigabe an den Kunden senden?

Nein. Standardrechnungen müssen von der ZATCA freigegeben werden, bevor sie an den Käufer gehen. Die Leitfäden der ZATCA erlauben eine Ausnahme nur, wenn die Plattform nicht erreichbar ist; die Rechnung muss dann freigegeben werden, sobald die Verbindung wieder steht.

Wie lange ist eine ZATCA-CSID gültig?

Der Sicherheitsstandard der ZATCA erlaubt eine Zertifikatslaufzeit von bis zu 60 Monaten. Das tatsächliche Ablaufdatum steht in Ihrem Zertifikat, und das Steuerzahlerportal schickt vor dem Ablauf eine Erinnerung. Bei der Erneuerung wird das alte Zertifikat widerrufen und ein neues ausgestellt.

Was passiert, wenn eine vereinfachte Rechnung (B2C) abgelehnt wird?

Beheben Sie den Fehler und übermitteln Sie einen neuen Beleg zur Meldung. Laut technischem Leitfaden der ZATCA wird die Rechnung dem Kunden nicht neu ausgestellt, und der Umsatz wird trotzdem in der regelmäßigen Umsatzsteuererklärung angegeben.

Bereit für den Start?

Sagen Sie uns, was Sie brauchen. Sie erhalten eine klare technische Antwort, einen festen Leistungsumfang und einen Preis, in der Regel innerhalb von 24 Stunden.