BT-131 ist der Zeilennettobetrag – der Nettobetrag einer einzelnen Rechnungsposition. In csv2zugferd ist das kein einfaches Eingabefeld: Der Wert wird in der Regel aus netUnitPrice, billedQuantity und der Rabattlogik abgeleitet, nicht direkt aus einer CSV-Spalte übernommen.
Was ist BT-131?#
BT-131 (Invoiced item net amount) ist der Nettobetrag der Position vor Umsatzsteuer, nach Abzug positionsbezogener Rabatte. Er ist die Grundlage für die Steuerbasis und damit für die Gesamtsummen der Rechnung. Fachlich gilt:
Zeilennettobetrag (BT-131) = rabattierter Netto-Einzelpreis × MengePflicht oder optional?#
Pflicht. Jede Rechnungsposition braucht einen Zeilennettobetrag. Anders als bei Name oder Bestellnummer geben Sie den Wert in csv2zugferd aber nicht selbst ein, sondern lassen ihn berechnen.
YAML-Key in csv2zugferd#
Es gibt keinen direkten Key lineTotalAmount je Position. BT-131 entsteht aus den Positionsfeldern und der Summenlogik:
lineItems:
fields:
netUnitPrice:
column: "PRODUCT_PRICE"
billedQuantity:
column: "PRODUCT_QUANTITY"
discountPercent:
column: "PRODUCT_DISCOUNT"
totals:
mode: "auto"Bei totals.mode: auto berechnet csv2zugferd den Zeilennettobetrag aus netUnitPrice, billedQuantity und – falls vorhanden – discountPercent.
CSV-Beispiel#
| PRODUCT_PRICE_0 | PRODUCT_QUANTITY_0 | PRODUCT_DISCOUNT_0 |
|---|---|---|
| 357,00 | 2 | 10 % |
Rechnung: rabattierter Einzelpreis = 357,00 × (1 − 0,10) = 321,30; Zeilennettobetrag BT-131 = 321,30 × 2 = 642,60. Eine eigene Spalte für den Zeilenbetrag ist nicht nötig.
auto vs. manual#
auto(empfohlen): Zeilennetto, Rabatte, Steuerbasis, MwSt-Gruppen und Gesamtbetrag werden vollständig aus den Positionsdaten berechnet. Die Werte sind per Konstruktion konsistent.manual: Summen kommen aus geprüften CSV-Spalten (lineTotalAmount,taxBasisAmount,grandTotalAmount…). Nur sinnvoll, wenn die CSV fachlich abgesicherte Summen liefert – sonst drohen Widersprüche.
Rabatte und BT-131#
discountPercent akzeptiert 10, 10.00 oder 10%. csv2zugferd bildet den Rabatt validierungsfreundlich als rabattierten Netto-Einzelpreis ab:
- Brutto-Listenpreis →
GrossPriceProductTradePrice - rabattierter Netto-Einzelpreis →
NetPriceProductTradePrice - Zeilennettobetrag
BT-131= rabattierter Einzelpreis × Menge
Für discountPercent-Positionsrabatte wird kein AppliedTradeAllowanceCharge erzeugt, damit EN-16931-Regeln wie BR-S-08 konsistent bleiben.
So landet der Wert im ZUGFeRD-XML#
Der berechnete Betrag wird je Position als Zeilennettobetrag (SpecifiedLineTradeSettlement → LineTotalAmount) geschrieben und fließt in die Steuerbasis und die Gesamtsummen der Rechnung ein.
Typischer Fehler#
- Manuell gelieferte Summen passen nicht zu Menge und Preis – die häufigste Ursache für abgelehnte Rechnungen.
- Rabatt nur textlich erwähnt, aber nicht strukturiert über
discountPercentberücksichtigt. - Zeilenbeträge und Steuersummen widersprechen sich, weil Teile manuell und Teile automatisch berechnet werden.
Praxishinweis für csv2zugferd#
Verwenden Sie totals.mode: auto, sobald Preis, Menge und Steuersatz vollständig aus der CSV kommen. Genau hier liegt ein inhaltlicher Vorteil gegenüber generischen Vorlagen: konsistente Summen ohne manuelles Nachrechnen.