Die sieben Regeln mit dem Wortlaut des EN-16931-Schematron (validation-1.3.17). Alle sind fatal:
| Regel | Kategorie | Text |
|---|---|---|
| BR-E-10 | E, befreit | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120). |
| BR-AE-10 | AE, Reverse Charge | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language). |
| BR-IC-10 | K, innergemeinschaftlich | A VAT breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language). |
| BR-G-10 | G, Export | A VAT breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language). |
| BR-O-10 | O, außerhalb des Anwendungsbereichs | A VAT breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language). |
| BR-S-10 | S, Regelsatz | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120). |
| BR-Z-10 | Z, Nullsatz | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120). |
Der Grund kann als Code (BT-121, aus der VATEX-Liste) oder als Text (BT-120) angegeben werden. Für E genügt eines von beiden; für AE, K, G und O muss der Code oder der Text genau das bedeuten: „Reverse charge“, „Intra-community supply“ … Die übrigen Regeln jeder Familie (BR-E-08, BR-AE-08 und folgende) betreffen die Beträge; hier geht es nur um den Grund.

Wie Odoo die Kategorie bestimmt
Hier unterscheiden sich die Versionen:
- Odoo 17 und 18: Standardmäßig hat die Steuer kein Kategoriefeld, und Odoo leitet die Kategorie ab: Bei einem spanischen Kunden mit Postleitzahl, die mit 35 oder 38 beginnt (Kanaren), L, und mit 51 oder 52 (Ceuta und Melilla), M; E, wenn die Steuer 0 % beträgt und Verkäufer und Kunde im selben Land sind; AE bei der Reverse-Charge-Selbstfakturierung eines belgischen Vertragspartners oder bei einer Selbstfaktura mit Reverse-Charge-Steuer; bei USt-IdNr. des Verkäufers und einer Steuer von 0 % K, wenn beide im EWR sind, und G, wenn nur einer es ist; sonst S, wenn die Steuer einen Satz hat, und E, wenn sie 0 % beträgt. Das Standardmodul account_edi_ubl_cii_tax_extension (Tax extension for UBL/CII), das nicht automatisch installiert wird, ergänzt an der Steuer Tax Category Code und Tax Exemption Reason Code: Ist die Kategorie gesetzt, verwendet Odoo sie statt sie abzuleiten.
- Odoo 19: Jede Steuer hat Tax Category Code (AE, E, S, Z, G, O, K, L, M, B) und Tax Exemption Reason Code, mit der VATEX-Liste.
- Odoo 20: Dieselben beiden Felder sowie Tax Exemption Reason, ein Freitext.
- In allen vier Versionen: Bleibt eine E-Kategorie ohne Grund, schreibt Odoo den Text „Exempt from tax“, der BR-E-10 erfüllt.
Die typische Falle bei Odoo 17 und 18 ohne dieses Modul ist eine Steuer von 0 % für eine Leistung außerhalb des Umsatzsteuer-Anwendungsbereichs, die die Ableitung nie als O kennzeichnet, oder ein Inlandsverkauf mit Reverse Charge: Die Kategorie weicht von dem ab, was Ihr Steuerberater erwartet.
Mit unserem Modul für XRechnung und ZUGFeRD
Der Generator des veröffentlichten Moduls kennt nur zwei Kategorien, S und Z. In XRechnung UBL schreibt er S, wenn die Steuer einen Satz hat, und Z, wenn sie 0 % beträgt. In XRechnung CII, dem Standardformat, erscheint jede Zeile als S, auch bei einer Steuer von 0 %, und der KoSIT-Validator weist sie mit BR-S-05 zurück (wir haben das geprüft). Eine Rechnung mit Reverse Charge, innergemeinschaftlicher Lieferung, Export oder Befreiung wird nicht als AE, K, G oder E ausgegeben. Bei Odoo 18, 19 und 20 validiert das Modul mit dem FlexigoTech-Cloud-Abonnement das Ergebnis mit den KoSIT-Regeln und zeigt jede fehlgeschlagene Regel unter Validation Errors an. Für solche Rechnungen kennt heute der eigene Export von Odoo die Kategorien. Bei Odoo 17 validiert die veröffentlichte Version nicht.

So beheben Sie es
- Ermitteln Sie die Kategorie in der USt-Aufschlüsselung des XML (BT-118) und vergleichen Sie sie mit dem tatsächlichen Geschäftsvorfall.
- Bei Odoo 19 und 20 öffnen Sie die Steuer und setzen Tax Category Code und, bei E, AE, K, G oder O, den Tax Exemption Reason Code.
- Bei Odoo 17 und 18 installieren Sie account_edi_ubl_cii_tax_extension und setzen an jeder Steuer die Kategorie und, wenn diese Kategorie einen Grund verlangt, den Grund. Ohne dieses Modul prüfen Sie Land, Postleitzahl, USt-IdNr. des Kunden und die Steuerposition: Daraus leitet Odoo die Kategorie ab.
- Ein Befreiungsgrund auf einer Zeile zum Regelsatz löst BR-S-10 aus: Entfernen Sie ihn von der Steuer.
- Erzeugen Sie die Datei erneut.
Weiterlesen
Geprüft im Quellcode des Moduls (Version 17.0 und 20.0) und in den verlinkten Quellen
Quellen
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- Quellcode des Moduls: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/cii_generator.py
- Quellcode des Moduls: flexigo_germany_xrechnung 20.0 (446f2f68): models/res_company.py
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- Quellcode des Moduls: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- Quellcode des Moduls: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Quellcode des Moduls: flexigo_germany_xrechnung 17.0 (ad05de8f): __manifest__.py
- github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
