BG-23VAT breakdownBT-92Document level allowance amountBT-95Document level allowance VAT category codeBT-96Document level allowance VAT rateBT-99Document level charge amountBT-102Document level charge VAT category codeBT-103Document level charge VAT rateBT-116VAT category taxable amountBT-118VAT category codeBT-119VAT category rateBT-131Invoice line net amountBT-151Invoiced item VAT category codeBT-152Invoiced item VAT rate
Offizieller Regeltext
[BR-S-08] For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
Der normative Text ist Englisch und wird unverändert zitiert.
Warum dieser Fehler auftritt
Für jede Steueraufschlüsselung zum Regelsteuersatz (Kategorie S, bestimmter Satz) muss die Bemessungsgrundlage (BT-116) der Summe der Positionsnettobeträge (BT-131) mit Kategorie S und diesem Satz plus Zuschlägen (BT-99) minus Nachlässen (BT-92) auf Dokumentebene mit gleicher Kategorie und gleichem Satz entsprechen. Die Regel liest cac:TaxSubtotal/cbc:TaxableAmount und vergleicht mit cac:InvoiceLine/cbc:LineExtensionAmount und cac:AllowanceCharge/cbc:Amount, gefiltert nach cac:ClassifiedTaxCategory / cac:TaxCategory (UBL), bzw. ram:BasisAmount mit ram:LineTotalAmount und ram:ActualAmount, gefiltert nach ram:ApplicableTradeTax / ram:CategoryTradeTax (CII). Typische Ursachen: eine 7%-Position in der 19%-Basis, nochmals abgezogene Positionsnachlässe oder eine S-Position mit anderem Percent-Wert als die Aufschlüsselung.
So beheben Sie den Fehler
Formel je (S, Satz): BT-116 = Σ BT-131[S, Satz] + Σ BT-99[S, Satz] - Σ BT-92[S, Satz], auf 2 Nachkommastellen gerundet. Je verwendetem Satz ein cac:TaxSubtotal / ram:ApplicableTradeTax anlegen (19 und 7 brauchen zwei). Sicherstellen, dass jede Position und jeder Dokumentnachlass/-zuschlag Kategoriecode und exakten Satz trägt, damit die Zuordnung stimmt. Positionsnachlässe stecken bereits in BT-131 und dürfen nicht nochmals abgezogen werden.
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/cac:TaxCategory[normalize-space(cbc:ID) = 'S'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']Test (XPath):
every $rate in xs:decimal(cbc:Percent) satisfies (((exists(//cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))))) or (exists(//cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount))))))CII
//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.='S']Test (XPath):
every $rate in ../ram:RateApplicablePercent/xs:decimal(.) satisfies (../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'S' and ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate]/ram:SpecifiedTradeSettlementLineMonetarySummation/xs:decimal(ram:LineTotalAmount)) * 10 * 10) div 100 + round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='S' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate]/xs:decimal(ram:ActualAmount)) * 10 * 10) div 100 - round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='S' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate]/xs:decimal(ram:ActualAmount)) * 10 * 10) div 100))
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.
Dieselbe Prüfung per API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateVerwandte Regeln
BR-AF-08For each different value of VAT category rate where the VAT category code is "IGIC",…BR-AG-08For each different value of VAT category rate where the VAT category code is "IPSI",…BR-AE-08In a VAT breakdown where the VAT category code is "Reverse charge" the VAT category…BR-E-08In a VAT breakdown where the VAT category code is "Exempt from VAT" the VAT category…BR-G-08In a VAT breakdown where the VAT category code is "Export outside the EU" the VAT…BR-IC-08In a VAT breakdown where the VAT category code is "Intra-community supply" the VAT…BR-O-08In a VAT breakdown where the VAT category code is " Not subject to VAT" the VAT…BR-Z-08In a VAT breakdown where VAT category code is "Zero rated" the VAT category taxable…
Häufige Fragen
Was bedeutet BR-S-08?
BR-S-08 ist eine EN-16931-Kernregel: For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
Wird meine Rechnung wegen BR-S-08 abgelehnt?
Ja. BR-S-08 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-S-08?
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.