Umsatzsteuer-Kategorien

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-Validator

Offizieller 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

✗ CII – falsch (beide Sätze in einer Aufschlüsselung)
<!-- 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>
✓ CII – korrekt
<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):

C#
// 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);
}

Verwandte Regeln

Alle erklärten Prüfregeln