GoBD-Export mit Python: Ein Guide für Entwickler und offene ERP-Systeme
In der Welt der deutschen Finanz-Compliance ist der Begriff „GoBD-Export“ (oft synonym mit GDPdU-Export verwendet) für Entwickler von Finanz- und ERP-Software eine ständige Herausforderung. Ob für Odoo, Tryton oder maßgeschneiderte Eigenentwicklungen – das Ziel bleibt gleich: Steuerrelevante Daten müssen so exportiert werden, dass sie von der Prüfsoftware der Finanzverwaltung (IDEA) maschinell ausgewertet werden können.
In diesem Beitrag erfährst du, wie du eine universelle Export-Engine mit Python aufbaust, die den Anforderungen der Datenträgerüberlassung (Z3-Zugriff) entspricht.
Die Anatomie eines GoBD-Exports
Ein valider Export ist kein bloßer CSV-Dump. Er besteht aus drei unverzichtbaren Komponenten, die in einem ZIP-Archiv zusammengefasst werden:
-
Datendateien: Meist CSV- oder ASCII-Dateien mit festen Feldlängen, die die eigentlichen Buchungs- und Stammdaten enthalten.
-
Die Indexdatei (
index.xml): Das „Gehirn“ des Exports. Sie beschreibt die Struktur, Feldtypen und Relationen der Datendateien. -
Die Strukturdefinition (
gdpdu-01-08-2002.dtd): Eine offizielle Datei der Finanzverwaltung, gegen die dieindex.xmlvalidiert wird.
Schritt 1: Datenextraktion mit Pandas
Der erste Schritt ist die Aufbereitung der Daten. Da steuerlich relevante Daten (Journal, Kontenplan, Debitoren/Kreditoren) oft in relationalen Datenbanken liegen, ist pandas in Kombination mit SQLAlchemy das Werkzeug der Wahl.
Pro-Tipp: Achte auf die Formatierung. Wenn in der index.xml ein Komma als Dezimaltrenner definiert ist, muss die CSV-Ausgabe exakt so erfolgen.
import pandas as pd
def export_table_to_csv(df, filepath):
# GoBD-Vorgabe: Keine Header in der CSV, da diese in der index.xml stehen
df.to_csv(
filepath,
sep=';',
index=False,
header=False,
decimal=',',
quoting=1 # Schützt AlphaNumeric-Felder
)
Schritt 2: Dynamische Generierung der index.xml
Die index.xml muss jedes Feld präzise beschreiben. Besonders kritisch sind die numerischen Typen. Hier nutzt man Bibliotheken wie lxml für eine saubere XML-Struktur.
| Datentyp | Bedeutung | Wichtiges Attribut |
| AlphaNumeric | Textfelder |
|
| Numeric | Beträge/Mengen |
|
| Date | Datumsangaben |
|
Ein technischer Fallstrick ist die Accuracy. Ein Wert von 1000,25 bei einer definierten Accuracy von 0 führt zu Fehlern oder Datenverlust beim Import in IDEA.
Schritt 3: Compliance durch Audit-Logs
Ein Export ist nur so gut wie die Integrität der Quelldaten. Die GoBD fordern Unveränderbarkeit und Lückenlosigkeit. In Python-Systemen wie Audipy, Odoo oder Tryton sollte jede Änderung über einen Audit Trail protokolliert werden.
Modernere Ansätze nutzen kryptographische Hash-Ketten, um die Unveränderbarkeit der Logs mathematisch nachweisbar zu machen. Dabei wird jeder Log-Eintrag mit dem Hash des vorherigen verknüpft.
Schritt 4: Validierung und Konsistenzprüfung
Bevor der Export an den Prüfer geht, solltest du eine technische Plausibilitätsprüfung durchführen. Ein einfacher, aber effektiver Check für jedes Konto im Exportzeitraum ist die Saldenprüfung:
Stimmt diese Gleichung nicht, fehlen entweder Datensätze im Export oder die Extraktionslogik ist fehlerhaft.
Update 2025: Was hat sich geändert?
Seit Juli 2025 gelten aktualisierte GoBD-Regeln, die vor allem die E-Rechnungspflicht berücksichtigen. Für Entwickler wichtig:
-
Bei hybriden Formaten (wie ZUGFeRD) reicht es nun oft aus, nur den strukturierten XML-Teil zu archivieren.
-
Die Aufbewahrungsfrist für Rechnungen wurde in einigen Bereichen von 10 auf 8 Jahre verkürzt.
Fazit
Python bietet mit seinem Ökosystem aus pandas, lxml und mächtigen ORMs die perfekte Basis für GoBD-konforme Systeme. Wer die Trennung von Daten (CSV) und Metadaten (XML) sauber implementiert und die neuen Anforderungen von 2025 im Blick behält, kann Prüfungen gelassen entgegensehen.