No description
Find a file
linussunderdiek edede6d56d Update main.py
Changes processing for type, FRST now on 'Erstabbuchung'
2026-03-24 17:50:06 +00:00
.gitignore Added retrieval of missing BICs, IBAN checking changed output format to pain.008.001.08 2025-09-17 14:22:48 +02:00
config_example.json added replacing root header, set static value for "endtoendid" 2025-09-21 13:25:14 +02:00
LICENSE Initial commit 2025-09-17 12:23:34 +02:00
main.py Update main.py 2026-03-24 17:50:06 +00:00
README.md Update README.md 2026-03-24 17:37:16 +00:00

EasyVerein2PAIN

Python-Script zur Konvertierung von EasyVerein-Export (CSV, UTF-8) zur Erstellung einer SEPA-XML-Datei (SEPA PAIN.008.001.08).

Die Konvertierung erfolgt mithilfe der sepaxml-Library (https://github.com/raphaelm/python-sepaxml, https://pypi.org/project/sepaxml).

Das Hinzufügen von fehlenden BICs erfolgt mithilfe der schwifty-Library (https://pypi.org/project/schwifty). Diese überprüft auch die Prüfsumme der IBANs auf Gültigkeit.

Die entsprechenden Abhängigkeiten können via pip installiert werden.

To-Do

[] Doc

create_single_payment_json

[] Implementierung letzte Abbuchung bei Konvertierung normalisierter CSV zu single_payment_JSON

Formatbeispiele

input_csv.csv

"Vorname";"Nachname";"Zahlungsart";"IBAN";"BIC";"Betrag";"Mandatsreferenz";"Mandatsdatum";"Typ";"Datum der Belastung";"Verwendungszweck"
"Max";"Mustermann";"Lastschrift";"DE1234567890";"BIC";"10,00 €";"00000000";"01.01.00";"Folgelastschrift";"01.01.00";"Buchungstext"

config.json

{
"name": "Test von Testenstein",
"IBAN": "NL50BANK1234567890",
"BIC": "BANKNL2A",
"batch": true,
"creditor_id": "DE26ZZZ00000000000",
"currency": "EUR",
"instrument": "B2C"
}

single_payment_json

{
"name": "Vorname Nachname",
"IBAN": "IBAN",
"BIC": "BIC",
"amount": "Betrag in cents (Betrag * 100)",
"type": "Typ", # if value in CSV "erstmalige Abbuchung" = FRST, if "Folgelastschrift" = RCUR
"collection_date": "Datum der Belastung",
"mandate_id": "Mandatsreferenz",
"mandate_date": "Mandatsdatum",
"description": "Test Verwendungszweck"
}

Vorbereitugen

config.json

Die Datei confg.json muss vor Ausführung mit den entsprechenden Werten gefüllt werden. Hierzu kann die config_example.json kopiert werden.

Die Verwendung von Umlauten, Sonderzeichen (Nicht-ASCII) o. Ä. ist nicht vorgesehen und sollte vermieden werden.

Input-Datei

Die Input-Datei muss im CSV-Format vorliegen. Codierung: UTF-8, Trennzeichen: Semikolon. Alle Felder sollen mit Anführungszeichen versehen sein.

Die erste Zeile enthält die Überschriften, nachfolgend die Daten. Die Reihenfolge der Spalten hat dem Formatbeispiel für "input_csv.csv" zu entsprechen.

Auf folgende Formatierung ist besonders zu achten:

Datum: "TT.MM.JJJJ"

Betrag: "00,00 €"

Verwendung

Das Skript setzt zwei Argumente vorraus:

python main.py /path/to/input/file.csv /path/to/output/file.xml

Normalisierung

Die Input-Datei wird an die technischen Voraussetzungen angepasst:

ä -> ae
ö -> oe
ü -> ue
/ -> Leerzeichen

Sonstige Nicht-ASCII-Zeichen werden entfernt.

Die normalisierte Datei wird im Programmordner als "normalized_csv.csv" zwischengespeichert.