BT-153 ist die Positionsbezeichnung – der lesbare Name eines Rechnungspostens. In csv2zugferd mappen Sie ihn auf lineItems.fields.name. Er ist nicht identisch mit der internen Artikelnummer.
Was ist BT-153?#
BT-153 (Item name) ist die menschenlesbare Bezeichnung der Rechnungsposition, etwa „Demo Software 9 Light Einzelplatz-Lizenz". Es beschreibt, was abgerechnet wird, in einer für den Empfänger verständlichen Form – im Unterschied zu technischen Codes oder Artikelnummern.
Pflicht oder optional?#
Pflicht. Jede Rechnungsposition (BG-25) muss eine Positionsbezeichnung BT-153 enthalten. Fehlt der Name, ist die Position nicht EN-16931-konform und die Validierung schlägt fehl.
YAML-Key in csv2zugferd#
lineItems:
mode: "columns"
fields:
name:
column: "PRODUCT_NAME"
sellerAssignedId:
column: "PRODUCT_CODE"name entspricht BT-153. Daneben hält sellerAssignedId (BT-155) die Verkäufer-Artikelnummer – beide Felder sind getrennt zu mappen.
CSV-Beispiel#
| PRODUCT_NAME_0 | PRODUCT_CODE_0 |
|---|---|
| Demo Software 9 Light Lizenz | 00110 |
PRODUCT_NAME_0 ist der lesbare Positionsname und wird auf BT-153 gemappt. PRODUCT_CODE_0 ist der interne Artikelcode und gehört in sellerAssignedId, nicht in den Namen.
So landet der Wert im ZUGFeRD-XML#
lineItems.fields.name wird je Position als Artikelname (SpecifiedTradeProduct → Name) geschrieben. Im columns-Modus löst csv2zugferd die Spalte positionsbezogen auf: Position 0 liest PRODUCT_NAME_0, Position 1 PRODUCT_NAME_1 usw. Die Iteration stoppt, sobald die Namensspalte leer ist.
Typischer Fehler#
- Produktcode statt Positionsname – eine reine Nummer als
name, die der Empfänger nicht lesen kann. - Technische Kürzel ohne lesbare Beschreibung, etwa
SW9-LIC-Lstatt eines verständlichen Namens. - Leere Namensspalte, obwohl Preis und Menge vorhanden sind – im
columns-Modus bricht die Positionserkennung dann an dieser Stelle ab.
Praxishinweis für csv2zugferd#
Im columns-Modus dient der konfigurierte Spaltenname als Fragment für nummerierte Spalten (PRODUCT_NAME_0, PRODUCT_NAME_1, …). Achten Sie darauf, dass die Namensspalte lückenlos befüllt ist, weil ein leerer Name die Iteration über die Positionen beendet.