Konto
Deutsch

BR-CO-17: Steuerbetrag je Kategorie (BT-117) entspricht nicht Basis mal Satz

EN-16931-Kernregel · Fehler · UBL / CII

StandardEN 16931-1 (europäisches Datenmodell der E-Rechnung)SchweregradFehler: die Rechnung wird abgelehntSyntaxUBL, CIIGeschäftsbegriffe
  • BT-116 VAT category taxable amount
  • BT-117 VAT category tax amount
  • BT-119 VAT category rate
Gilt fürJede EN-16931-Rechnung: XRechnung, ZUGFeRD 2.x / Factur-X (Profile EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0 sowie nationale CIUS.

Offizieller Regeltext

[BR-CO-17] VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.

Der normative Text ist Englisch und wird unverändert zitiert.

Warum dieser Fehler auftritt

In jeder Steueraufschlüsselung muss der Steuerbetrag (BT-117) der Bemessungsgrundlage (BT-116) mal Steuersatz (BT-119) geteilt durch 100 entsprechen, auf zwei Nachkommastellen gerundet; das Schematron toleriert eine Abweichung unter 1.00, um positionsweise Rundung zuzulassen. Ist der Satz 0, muss der Steuerbetrag 0 sein. Die Regel liest cac:TaxSubtotal/cbc:TaxAmount, cbc:TaxableAmount und cac:TaxCategory/cbc:Percent (UBL) bzw. ram:ApplicableTradeTax/ram:CalculatedAmount, ram:BasisAmount und ram:RateApplicablePercent (CII). Sie schlägt an, wenn der Prozentsatz als Bruch (0.19) geschrieben wird, Kategorien mit verschiedenen Sätzen in einem Subtotal zusammengefasst sind oder die Basis nach der Steuerberechnung verändert wurde.

So beheben Sie den Fehler

Formel: BT-117 = round(BT-116 x BT-119 / 100, 2). Den Satz als Prozentzahl schreiben (19, 7, 0), nicht 0.19. Je Kombination aus Kategoriecode und Satz ein cac:TaxSubtotal (ram:ApplicableTradeTax) bilden, die zugehörigen Positionsnettobeträge und Dokumentnachlässe/-zuschläge in cbc:TaxableAmount / ram:BasisAmount summieren und cbc:TaxAmount / ram:CalculatedAmount aus dieser Basis berechnen. Bei den Kategorien E, AE, K, G, O und Z ist der Satz 0 und der Steuerbetrag muss 0.00 sein.

Beispiel (gültig)

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="EUR">245.90</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="EUR">46.72</cbc:TaxAmount>
  <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
</cac:TaxSubtotal>

Was der Validator prüft

Geprüftes Element (Kontext):

UBL

cac:TaxTotal/cac:TaxSubtotal

Test (XPath):

(round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) = 0 and (round(xs:decimal(cbc:TaxAmount)) = 0)) or (round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) != 0 and ((abs(xs:decimal(cbc:TaxAmount)) - 1 < round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(cbc:TaxAmount)) + 1 > round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 )))  or (not(exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent))) and (round(xs:decimal(cbc:TaxAmount)) = 0))

CII

//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax

Test (XPath):

(round(.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent)) = 0 and (round(xs:decimal(ram:CalculatedAmount)) = 0)) or (round(.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent)) != 0 and ((abs(xs:decimal(ram:CalculatedAmount)) - 1 <= round(abs(xs:decimal(ram:BasisAmount)) * (.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(ram:CalculatedAmount)) + 1 >= round(abs(xs:decimal(ram:BasisAmount)) * (.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent) div 100) * 10 * 10) div 100 ))) or (not(exists(.[normalize-space(upper-case(ram:TypeCode))='VAT']/xs:decimal(ram:RateApplicablePercent))) and (round(xs:decimal(ram:CalculatedAmount)) = 0))

Rechnung prüfen

Legen Sie Ihre XML- oder PDF-Datei im Validator ab; jede verletzte Regel ist mit ihrer Seite hier verlinkt. Kostenlos, ohne Konto, die Datei wird nicht gespeichert.

Rechnung prüfen →

Dieselbe Prüfung per API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Verwandte Regeln

Häufige Fragen

Was bedeutet BR-CO-17?

BR-CO-17 ist eine EN-16931-Kernregel: VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.

Wird meine Rechnung wegen BR-CO-17 abgelehnt?

Ja. BR-CO-17 ist als „fatal“ eingestuft; Validatoren (KoSIT, Peppol Access Points, ZRE/OZG-RE) weisen die Rechnung zurück, bis der Fehler behoben ist.

Für welche Formate gilt BR-CO-17?

Jede EN-16931-Rechnung: XRechnung, ZUGFeRD 2.x / Factur-X (Profile EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0 sowie nationale CIUS. Syntax: UBL und CII.

Quelle: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Katalog erzeugt aus dem offiziellen Schematron am 2026-10-14.