Seit Version 1.1.0 schreibt csv2zugferd die Bankverbindung des Verkäufers und SEPA-Lastschriftdaten in die ZUGFeRD-Rechnung. Konfiguriert wird das im YAML-Abschnitt paymentMeans. Die Werte kommen entweder fest aus der Konfiguration (typisch für die eigene IBAN) oder pro Rechnung aus einer CSV-Spalte (typisch für Mandat und Kunden-IBAN).
| Zahlungsart | typeCode | Pflichtangaben |
|---|---|---|
| SEPA-Überweisung | 58 | IBAN des Verkäufers (BT-84) |
| Überweisung (nicht SEPA) | 30 | IBAN bzw. Kontonummer des Verkäufers (BT-84) |
| SEPA-Lastschrift | 59 | Gläubiger-ID (BT-90), Mandatsreferenz (BT-89), IBAN des Käufers (BT-91) |
Beispiel 1: SEPA-Überweisung mit fester IBAN#
Die eigene Bankverbindung ändert sich selten und steht deshalb direkt in der YAML-Datei. Als Verwendungszweck wird die Rechnungsnummer aus der CSV übernommen.
mapping:
paymentMeans:
typeCode:
value: "58"
information:
value: "SEPA-Überweisung"
paymentReference:
column: "INVOICE_NO"
sellerAccounts:
- iban:
value: "DE02 1203 0000 0000 2020 51"
bic:
value: "BYLADEM1001"
name:
value: "Muster GmbH"Leerzeichen in IBAN und BIC werden entfernt. Mehrere Konten sind möglich, dafür weitere Einträge unter sellerAccounts anlegen.
Ergebnis im ZUGFeRD-XML:
<ram:ApplicableHeaderTradeSettlement>
<ram:PaymentReference>2026-0001</ram:PaymentReference>
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
<ram:SpecifiedTradeSettlementPaymentMeans>
<ram:TypeCode>58</ram:TypeCode>
<ram:Information>SEPA-Überweisung</ram:Information>
<ram:PayeePartyCreditorFinancialAccount>
<ram:IBANID>DE02120300000000202051</ram:IBANID>
<ram:AccountName>Muster GmbH</ram:AccountName>
</ram:PayeePartyCreditorFinancialAccount>
<ram:PayeeSpecifiedCreditorFinancialInstitution>
<ram:BICID>BYLADEM1001</ram:BICID>
</ram:PayeeSpecifiedCreditorFinancialInstitution>
</ram:SpecifiedTradeSettlementPaymentMeans>
…Beispiel 2: SEPA-Lastschrift mit Mandat aus der CSV#
Bei einer Lastschrift zieht der Verkäufer den Betrag ein. Mandatsreferenz und Kunden-IBAN sind pro Kunde verschieden und kommen deshalb aus der CSV:
INVOICE_NO;INVOICE_DATE;...;MANDATE_ID;CUSTOMER_IBAN;CUSTOMER_BIC
2026-0002;28.09.2026;...;MANDAT-2026-001;DE89 3704 0044 0532 0130 00;COBADEFFXXXmapping:
paymentMeans:
typeCode:
value: "59"
information:
value: "SEPA-Lastschrift"
paymentReference:
column: "INVOICE_NO"
directDebit:
creditorId:
value: "DE98ZZZ09999999999"
mandateReference:
column: "MANDATE_ID"
buyerIban:
column: "CUSTOMER_IBAN"
buyerBic:
column: "CUSTOMER_BIC"Ergebnis im ZUGFeRD-XML (gekürzt):
<ram:ApplicableHeaderTradeSettlement>
<ram:CreditorReferenceID>DE98ZZZ09999999999</ram:CreditorReferenceID>
<ram:PaymentReference>2026-0002</ram:PaymentReference>
…
<ram:SpecifiedTradeSettlementPaymentMeans>
<ram:TypeCode>59</ram:TypeCode>
<ram:Information>SEPA-Lastschrift</ram:Information>
<ram:PayerPartyDebtorFinancialAccount>
<ram:IBANID>DE89370400440532013000</ram:IBANID>
</ram:PayerPartyDebtorFinancialAccount>
</ram:SpecifiedTradeSettlementPaymentMeans>
<ram:SpecifiedTradePaymentTerms>
…
<ram:DirectDebitMandateID>MANDAT-2026-001</ram:DirectDebitMandateID>
</ram:SpecifiedTradePaymentTerms>Die Kunden-IBAN erscheint im Log von csv2zugferd nur maskiert, zum Beispiel DE89**************3000.
Beispiel 3: Überweisung und Lastschrift in einer CSV#
Viele CRM- und ERP-Exporte enthalten Kunden mit und ohne Lastschriftmandat. Über eine Regel wählt csv2zugferd die Zahlungsart pro Rechnung:
mapping:
paymentMeans:
typeCode:
default: "58"
rules:
- when:
column: "PAYMENT_METHOD"
regex: "(?i)^lastschrift$"
value: "59"
paymentReference:
column: "INVOICE_NO"
sellerAccounts:
- iban:
value: "DE02120300000000202051"
directDebit:
creditorId:
value: "DE98ZZZ09999999999"
mandateReference:
column: "MANDATE_ID"
buyerIban:
column: "CUSTOMER_IBAN"directDebit wird nur ausgewertet, wenn die Zahlungsart 59 (oder 49) ist. Bei einer Überweisung bleiben Mandat und Kunden-IBAN deshalb automatisch weg.
Aufruf#
.\csv2zugferd-win-x64.exe --csv .\rechnungen.csv --pdf .\rechnung.pdf --config .\config.yml --output .\outWarnungen statt Abbruch#
Fehlen Pflichtangaben, bricht csv2zugferd nicht ab, sondern schreibt eine Warnung ins Log:
[WRN] Zahlungsart 58 (Überweisung) ohne IBAN des Verkäufers (BR-61)
[WRN] SEPA-Lastschrift ohne Mandatsreferenz (BT-89)Geprüft werden außerdem die IBAN-Prüfsumme und fehlende Zahlungsanweisungen im Profil XRechnung (BR-DE-1). Ein unbekannter typeCode führt dagegen zu einem Fehler, weil die Konfiguration dann nicht stimmt.
Alle Felder im Überblick: YAML-Konfiguration – Zahlungsmittel und Bankverbindung · BT-Felder in ZUGFeRD