Zum Hauptinhalt springen

BeanCounter: Automatisierte Rechnungsverarbeitung mit KI

BeanCounter: Automatisierte Rechnungsverarbeitung mit KI

In vielen kleinen Unternehmen landen Rechnungen als PDF-Anhang im Postfach. Ob per Überweisung, Lastschrift oder PayPal bezahlt – ihre manuelle Verbuchung bleibt aufwendig und fehleranfällig. Dieses Projekt automatisiert den gesamten Prozess: Es sammelt Rechnungen aus E-Mails, analysiert sie mit KI und erstellt automatisch eine strukturierte Ausgabenübersicht in Excel. So wird Buchhaltung einfacher, schneller und verlässlicher.

BeanCounter ist ein intelligentes System zur extraktiven Rechnungsverarbeitung – von unstrukturierten E-Mails bis zu validierten Excel-Auswertungen. Entwickelt in Python, kombiniert es klassische Datenverarbeitung mit lokalen LLMs (Large Language Models) für mehrsprachige Dokumentanalyse.

BeanCounter in Action
BeanCounter in Action

Projektüberblick
#

Dieses Projekt automatisiert Export, Extraktion, Interpretation, Validierung und Aufbereitung von Rechnungsdaten aus E-Mails.
Ziel war es, manuelle Dateneingaben zu eliminieren und eine transparente, reproduzierbare Verarbeitungskette zu schaffen.

Eingehende E-Mails → Rechnungsanhänge → Dokument Scannung → KI-Analyse → validierte JSON-Daten → Excel-Ausgabe.

Motivation
#

Vor dem Projekt:

  • Rechnungen kamen in verschiedensten Sprachen, Layouts und Formaten (HTML, PDF, DOCX, Scan).
  • Manuelle Eingabe war fehleranfällig und extrem zeitintensiv.
  • Keine einheitliche Datengrundlage für Reporting und Buchhaltung.

Ziel:

  • Automatische Datenerkennung unabhängig von Sprache oder Layout.
  • Vollständige Nachvollziehbarkeit und Plausibilitätsprüfungen.
  • Export in strukturierte, weiter verarbeitbare Formate.

Systemarchitektur
#

flowchart TD
    A[E-Mail-Eingang]
    B[E-Mails und Anhaenge exportieren - kategorisierte Ordner]
    C[HTML in PDF umwandeln]
    D[Docling verarbeitet PDFs, DOCX, Bilder und Scans mit OCR in Markdown oder JSON]
    E[Lokal laufendes LLM extrahiert Rechnungsdaten]
    F[Validator prueft Plausibilitaet und Format]
    G[Excel-Exporter erstellt Ausgabenuebersicht]

    A --> B
    A --> C
    B --> D
    C --> D
    D --> E --> F --> G

    %% Rueckschleife bei Bedarf
    F -. Rueckmeldung / Parameteranpassung .-> E

Ablauf in Kürze:

  1. E-Mails werden automatisch mit ihren Anhängen in kategorisierte Ordner exportiert.
  2. HTML-Inhalte werden zur besseren Lesbarkeit in PDF-Dateien umgewandelt.
  3. Docling konvertiert PDFs, Bilder, Scans (mithilfe von OCR) und DOCX-Dateien in eine strukturierte Markdown/JSON-Darstellung. OCR wird nur bei Scans angewendet.
  4. Ein lokales LLM (z. B. LLaMA 3.1) extrahiert Rechnungsnummer, Datum, Beträge und weitere relevante Felder.
  5. Ein Validator prüft Plausibilität und Format (z. B. Brutto ≈ Netto + MwSt, Datumsformat).
  6. Der Excel-Exporter erzeugt eine definierbare tabellarische Ausgabe als Basis für die Weiterverarbeitung.

Technologie-Stack
#

KomponenteTechnologie
SprachePython 3.11
DokumentenparserDocling von IBM
KI-ModellOllama / llama.cpp (LLaMA 3.1, Granite3 Instruct)
Extraktion & ValidierungCustom LLM + Regex + Pydantic
ExportOpenPyXL (Excel), JSON
LoggingPython logging

Besondere Herausforderungen
#

  • Mehrsprachige Dokumente (Deutsch, Englisch, Französisch, Italienisch, …)
  • Unterschiedliche Layouts ohne feste Struktur
  • Schwankende OCR-Qualität und fehlerhafte Zeichenerkennung
  • Vermeidung von LLM-Halluzinationen
  • Konsistenzprüfung von Beträgen und Datumsangaben

Lösungsansatz:
Hybrid aus Layout-Analyse (Docling), regelbasierter Validierung und einem KI-Modell zur semantischen Erkennung, dessen Parameter durch gezieltes Training und Reinforcement Learning optimiert wurden.

Vom Prototyp zur Agentenarchitektur
#

Der ursprüngliche BeanCounter-Prototyp wurde vollständig in Python umgesetzt und diente der Evaluierung der Kernkomponenten –
insbesondere der Verarbeitungspipeline aus E-Mail-Export, Docling, LLM-Extraktion und Validierung.

BeanCounter: Stufe1
BeanCounter: Stufe1
BeanCounter: Stufe2
BeanCounter: Stufe2
BeanCounter: Stufe3
BeanCounter: Stufe3
BeanCounter: Stufe4
BeanCounter: Stufe4
BeanCounter: Excel Ausgabe
BeanCounter: Excel Ausgabe

Die finale Version basiert auf einem modularen Agentensystem, in dem spezialisierte Agenten die einzelnen Verarbeitungsschritte übernehmen:

  • Mail Agent: erkennt eingehende E-Mails, extrahiert Anhänge und ordnet sie in strukturierte Verzeichnisse ein.
  • Document Agent: konvertiert HTML, PDFs, Bilder und Scans (Docling) in Markdown/JSON-Strukturen.
  • Extraction Agent: nutzt lokale LLMs zur semantischen Feldextraktion (Rechnungsnummer, Datum, Beträge usw.).
  • Validation Agent: prüft Plausibilität, Betragskonsistenz und Datumsformate.
  • Export Agent: erstellt definierbare Excel- und JSON-Ausgaben für die Weiterverarbeitung.

Dieses System ist modular, erweiterbar und erlaubt die parallele Verarbeitung mehrerer E-Mails und Dokumente.
Damit wurde die ursprüngliche, lineare Pipeline zu einer ereignisgesteuerten, autonomen Agentenarchitektur weiterentwickelt.

Ergebnisse
#

  • 97–100 % korrekte Extraktion relevanter Felder (Rechnungsnummer, Datum, Beträge)
  • Sekundenschnelle Verarbeitung auch bei mehrseitigen Rechnungen
  • Automatisierte Reports im Excel-Format
  • Vollständig nachvollziehbare JSON-Outputs für Audits und Buchhaltung

Fazit
#

Dieses Projekt zeigt, wie KI-Modelle und klassische Python-Datenverarbeitung kombiniert werden können, um
mehrsprachige, unstrukturierte Rechnungen automatisch und verlässlich zu verarbeiten.
Besonders wertvoll erwies sich die Kombination aus Determinismus (Regeln) und Semantik (LLM) – sie verbindet Nachvollziehbarkeit mit Flexibilität.


© 2025 Oskar Kohler. Alle Rechte vorbehalten.
Hinweis: Der Text wurde manuell vom Autor verfasst. Stilistische Optimierungen, Übersetzungen sowie einzelne Tabellen, Diagramme und Abbildungen wurden mit Unterstützung von KI-Tools vorgenommen.