BT-152 ist der Umsatzsteuersatz je Position – der Prozentsatz, mit dem eine einzelne Rechnungsposition besteuert wird. In csv2zugferd mappen Sie ihn auf lineItems.fields.taxPercent. Er ist die Grundlage für korrekte Steuersummen und MwSt-Gruppen.
Was ist BT-152?#
BT-152 (Invoiced item VAT rate) gibt den Umsatzsteuersatz der Position als Prozentzahl an, etwa 19 oder 7. Zusammen mit der Steuerkategorie (taxCategoryCode, z. B. S für den Standardsatz) bestimmt er, wie die Position in den Steuergruppen der Rechnung verrechnet wird.
Pflicht oder optional?#
Faktisch erforderlich. Für steuerpflichtige Positionen (Kategorie S) muss ein Steuersatz angegeben sein, damit Steuerbasis und MwSt-Beträge berechnet werden können. Fehlt BT-152, sind die Summen nicht ableitbar und die Rechnung nicht konform.
YAML-Key in csv2zugferd#
lineItems:
fields:
taxPercent:
column: "INVOICE_TAX"
fixedFields:
taxType:
value: "VAT"
taxCategoryCode:
value: "S"taxPercent entspricht BT-152. taxCategoryCode (Steuerkategorie) und taxType ergänzen den Satz fachlich konsistent.
CSV-Beispiel#
| PRODUCT_NAME_0 | INVOICE_TAX |
|---|---|
| Demo Software 9 Light Lizenz | 19.00 |
INVOICE_TAX (19.00) wird auf BT-152 gemappt. Im Beispiel ist es eine globale Spalte: Der Wert steht einmal in der CSV und gilt für jede erzeugte Position.
So landet der Wert im ZUGFeRD-XML#
taxPercent wird je Position als anzuwendender Steuersatz (ApplicableTradeTax → RateApplicablePercent) geschrieben und steuert die Zuordnung zu den MwSt-Gruppen sowie die Berechnung der Steuerbeträge.
Typischer Fehler#
- Globaler Steuersatz fälschlich positionsbezogen erwartet – oder umgekehrt: ein positionsbezogener Satz wird global gesetzt, obwohl Positionen unterschiedlich besteuert sind.
- Falsches Dezimalformat – etwa
0,19statt19, wodurch die Steuersummen um den Faktor 100 daneben liegen. - Steuerkategorie und Steuersatz inkonsistent – z. B. Kategorie
Z(Nullsatz) mit einem Satz von19.
Praxishinweis für csv2zugferd#
Haben alle Positionen denselben Satz, genügt eine globale Spalte wie INVOICE_TAX in fields.taxPercent. Bei gemischten Sätzen muss taxPercent aus einer positionsbezogenen Spalte (TAX_0, TAX_1, …) kommen und zur jeweiligen taxCategoryCode passen.