BR-S-08: Steuerbasis (BT-116) je Steuersatz stimmt nicht
Je Steuersatz muss die Bemessungsgrundlage der Summe der Positionen mit diesem Satz entsprechen.
Steckbrief
- Regel
BR-S-08- Schweregrad
- Fehler – die Rechnung ist ungültig
- Regelwerk
- EN 16931 – gilt für XRechnung und ZUGFeRD/Factur-X
- Betroffene Felder
- BT-116, BT-119, BG-23, BT-131
- Syntax
- CII & UBL
Rechnung jetzt prüfen
PDF oder XML hochladen – kostenlos, ohne Anmeldung, gegen die offiziellen Regelwerke.
Zum Online-ValidatorOffizieller Wortlaut
[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).
Quelle: offizielle Schematron zur EN 16931 (CEN), wie sie auch in XRechnung und ZUGFeRD/Factur-X geprüft wird.
Was die Regel verlangt
Für jeden Steuersatz der Kategorie S (Normalsatz – in Deutschland 19 % und 7 %) braucht
die Rechnung eine eigene Umsatzsteuer-Aufschlüsselung (BG-23). Deren
Bemessungsgrundlage (BT-116) muss genau stimmen:
Summe der Positionsnettobeträge mit diesem Satz
+ Zuschläge auf Belegebene mit diesem Satz
− Nachlässe auf Belegebene mit diesem Satz
Die Regel gehört zur EN 16931 und gilt für XRechnung, ZUGFeRD und Factur-X. Für die anderen Kategorien gibt es gleichartige Regeln, etwa BR-Z-08 (Nullsatz), BR-E-08 (steuerbefreit) und BR-AE-08 (Reverse Charge).
Typische Ursachen
- Positionen mit 19 % und 7 % wurden in einer Aufschlüsselung zusammengefasst.
- Ein Rabatt auf die ganze Rechnung wurde in der Aufschlüsselung abgezogen, aber nicht als Nachlass (BG-20) mit Steuersatz angegeben – oder umgekehrt.
- Ein Nachlass ohne Steuersatz wird bei gemischten Sätzen keinem Satz zugeordnet.
- Die Basis wurde aus ungerundeten Positionswerten gebildet.
So sieht es im XML aus
<!-- Positionen: 300.00 zu 19 %, 50.00 zu 7 % -->
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>66.50</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>350.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>57.00</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>300.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>3.50</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>50.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>7</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
In UBL entspricht jede Aufschlüsselung einem cac:TaxSubtotal mit cbc:TaxableAmount.
Lösung in C#
Gruppieren Sie die Positionen nach Steuersatz und legen Sie je Gruppe eine Aufschlüsselung an. Mit dem Facturexa Creator (ohne Nachlässe und Zuschläge auf Belegebene):
// Je Steuersatz eine Aufschlüsselung: Basis = Summe der Positionen mit diesem Satz
foreach (var satz in rechnung.TradeLineItems.GroupBy(p => p.TaxPercent))
{
var basis = satz.Sum(p => p.LineTotalAmount);
var steuer = Math.Round(basis * satz.Key / 100m, 2, MidpointRounding.AwayFromZero);
rechnung.AddApplicableTradeTax(basis, satz.Key, steuer, TaxTypeCode.VAT, TaxCategoryCode.S);
}