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:

 

  1. Datendateien: Meist CSV- oder ASCII-Dateien mit festen Feldlängen, die die eigentlichen Buchungs- und Stammdaten enthalten.

  2. Die Indexdatei (index.xml): Das „Gehirn“ des Exports. Sie beschreibt die Struktur, Feldtypen und Relationen der Datendateien.

  3. Die Strukturdefinition (gdpdu-01-08-2002.dtd): Eine offizielle Datei der Finanzverwaltung, gegen die die index.xml validiert 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.

 

Python-Code
 
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

MaxLength (optimiert den Import).

 

Numeric Beträge/Mengen

Accuracy (Nachkommastellen).

 

Date Datumsangaben

Format (z. B. DD.MM.YYYY).

 

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:

 

Anfangsbestand zzgl. Bewegungen = Endbestand

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.


powered by social2s