F: Warum meldet der Validator BR-S-08, BR-S-09 und BR-CO-17, wenn die Rechnung einen Rabatt hat?

Thema
Fragen und Antworten
SDK-Mitglieder
AddProduct_Comfort() AddTradeAllowanceCharge() AddTradeTax() WriteTotals()
Business Terms
BT-116 Kategoriespezifischer Steuerbasisbetrag BT-117 Kategoriespezifischer Steuerbetrag BT-92 Betrag des Abschlags auf Dokumentenebene BT-106 Summe der Nettobeträge aller Rechnungspositionen BT-107 Summe der Abschläge auf Dokumentenebene BT-109 Rechnungsgesamtbetrag ohne Umsatzsteuer BT-110 Gesamtbetrag der Umsatzsteuer BT-112 Rechnungsgesamtbetrag einschließlich Umsatzsteuer
Veröffentlicht

Kurz: Die drei Regeln BR-S-08, BR-S-09 und BR-CO-17 melden zusammen fast immer denselben Fehler: In der Umsatzsteuer-Aufschlüsselung (BG-23) steht als Basisbetrag (BT-116) die Summe der Positionen statt des Nettobetrags nach Rabatt. Richtig ist: Summe der Positionen dieses Steuersatzes − Rabatte + Zuschläge dieses Steuersatzes. Darauf wird die Steuer (BT-117) berechnet.

Die drei Regeln

  • BR-S-08: Der Basisbetrag je Steuersatz (BT-116) muss gleich der Summe der Positionsbeträge mit diesem Satz minus der Rabatte (BT-92) plus der Zuschläge (BT-99) mit diesem Satz sein.
  • BR-S-09: Der Steuerbetrag (BT-117) muss Basisbetrag × Steuersatz (BT-119) sein, kaufmännisch auf 2 Stellen gerundet.
  • BR-CO-17: dieselbe Rechnung (Basis × Satz = Steuer) als allgemeine Regel für alle Steuerkategorien.

Steht als Basis die Summe der Positionen, passt die Basis nicht zum Rabatt (BR-S-08) – und der eigentlich richtige Steuerbetrag passt nicht mehr zur falschen Basis (BR-S-09, BR-CO-17). Deshalb kommen die drei Meldungen immer zusammen.

Beispiel: 20 % Rabatt auf zwei von drei Positionen

FeldFalschRichtig
Summe der Positionen (BT-106)105.05105.05 (67,23 + 16,81 + 21,01)
Rabatt (BT-92 / BT-107)16.8116.81 (20 % von 84,04)
Nettobetrag (BT-109)88.2488.24
Basisbetrag der Aufschlüsselung (BT-116)105.0588.24
Steuer (BT-117 / BT-110)16.7716.77 (88,24 × 19 %)
Bruttobetrag (BT-112)105.01105.01
Rundungsbetrag (BT-114)-0.01-0.01
Zahlbetrag (BT-115)105.00105.00

Nur ein einziger Wert ist falsch – und genau der erzeugt alle drei Meldungen. Bei nur einem Steuersatz ist der Basisbetrag der Aufschlüsselung immer gleich dem Nettobetrag (BT-109).

Im Aloaha ZUGFeRD SDK

' Positionen (Positionsbeträge bereits auf 2 Stellen gerundet)
alo.AddProduct_Comfort("1", "", "A-1", "1", "H87", "Miete Gerät", "", "", "EUR", "", "H87", _
                       False, "", "", "", "67.23", "EUR", "1", "H87", "VAT", "S", "19.00", "", "67.23", "EUR", "", "")
alo.AddProduct_Comfort("2", "", "A-2", "1", "H87", "Miete Monitor", "", "", "EUR", "", "H87", _
                       False, "", "", "", "16.81", "EUR", "1", "H87", "VAT", "S", "19.00", "", "16.81", "EUR", "", "")
alo.AddProduct_Comfort("3", "nicht rabattfähig", "A-3", "1", "H87", "Zusatzmodul", "", "", "EUR", "", "H87", _
                       False, "", "", "", "21.01", "EUR", "1", "H87", "VAT", "S", "19.00", "", "21.01", "EUR", "", "")

' 20 % Rabatt auf die Positionen 1 und 2 (Basis 84,04) – BG-20
alo.AddTradeAllowanceCharge(False, "84.04", "EUR", "16.81", "EUR", "VAT", "S", "19.00", "Rabatt", "20", "95")

' Umsatzsteuer-Aufschlüsselung: Basis = 105,05 - 16,81 = 88,24 (NICHT 105,05)
alo.AddTradeTax("16.77", "EUR", "88.24", "EUR", "VAT", "S", "19.00")

' Summen: Positionen, Brutto, Zahlbetrag, Netto, Steuer, Rabatte, gezahlt, Rundung, Zuschläge
alo.WriteTotals("105.05", "105.01", "105.00", "88.24", "16.77", "16.81", "0.00", "-0.01", "0.00")

Der dritte Parameter von AddTradeTax ist der Basisbetrag (BT-116), der erste der Steuerbetrag (BT-117). Wir haben beide Varianten mit dem SDK erzeugt und mit dem KoSIT-Validator (XRechnung-Konfiguration 3.0.2) geprüft: Mit 105,05 als Basis meldet er genau BR-CO-17, BR-S-08 und BR-S-09; mit 88,24 wird die Rechnung ohne Fehler und Warnungen angenommen (Stand 15.10.2026).

Mehrere Steuersätze

Die Regel gilt je Steuersatz: Für jeden Satz ein eigener AddTradeTax-Aufruf, Basis = Positionen mit diesem Satz − Rabatte mit diesem Satz + Zuschläge mit diesem Satz. Ein Rabatt oder Zuschlag auf Rechnungsebene muss deshalb immer eine Steuerkategorie und einen Steuersatz haben (siehe Abschläge und Zuschläge mit Prozentsatz und Grundcode). Die Summe aller Basisbeträge ergibt den Nettobetrag (BT-109), die Summe aller Steuerbeträge die Umsatzsteuer (BT-110).

Verwandte Fehler

  • BR-CO-10: Die Summe der Positionen (BT-106) muss aus den gerundeten Positionsbeträgen gebildet werden – nicht aus ungerundeten Preisen.
  • BR-CO-15 / BR-CO-16: Rundung nur auf den Zahlbetrag, nie auf den Bruttobetrag: BR-CO-15 und BR-CO-16 beim Rundungsbetrag.
  • Rabatte gehören in einen Rabatt auf Rechnungsebene (BG-20), nicht in den Rundungsbetrag.

Ihre Rechnung prüfen: Wie prüfe ich meine XRechnung vor dem Versand?

Häufige Fragen

Was bedeutet BR-S-08?

Der Basisbetrag einer Steuerkategorie S (BT-116) muss gleich der Summe der Positionsbeträge mit diesem Steuersatz minus Rabatte plus Zuschläge mit diesem Steuersatz sein.

Was bedeuten BR-S-09 und BR-CO-17?

Der Steuerbetrag der Aufschlüsselung (BT-117) muss Basisbetrag (BT-116) × Steuersatz sein, auf 2 Stellen gerundet. Ist die Basis falsch, passt die Steuer nicht mehr – deshalb erscheinen die Meldungen meist zusammen mit BR-S-08.

Ist die Steuerbasis die Summe der Positionen oder der Betrag nach Rabatt?

Der Betrag nach Rabatt (und nach Zuschlägen). Bei nur einem Steuersatz ist sie gleich dem Nettobetrag der Rechnung (BT-109).

Welcher Parameter von AddTradeTax ist die Steuerbasis?

Der dritte Parameter (BasisAmount, BT-116). Der erste Parameter ist der Steuerbetrag (CalculatedAmount, BT-117).

Business Terms in diesem Artikel: BT-116 BT-117 BT-92 BT-106 BT-107 BT-109 BT-110 BT-112 BT-114 BT-115 BT-119 BG-20 BG-23