
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.

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:
- E-Mails werden automatisch mit ihren Anhängen in kategorisierte Ordner exportiert.
- HTML-Inhalte werden zur besseren Lesbarkeit in PDF-Dateien umgewandelt.
- Docling konvertiert PDFs, Bilder, Scans (mithilfe von OCR) und DOCX-Dateien in eine strukturierte Markdown/JSON-Darstellung. OCR wird nur bei Scans angewendet.
- Ein lokales LLM (z. B. LLaMA 3.1) extrahiert Rechnungsnummer, Datum, Beträge und weitere relevante Felder.
- Ein Validator prüft Plausibilität und Format (z. B. Brutto ≈ Netto + MwSt, Datumsformat).
- Der Excel-Exporter erzeugt eine definierbare tabellarische Ausgabe als Basis für die Weiterverarbeitung.
Technologie-Stack#
| Komponente | Technologie |
|---|---|
| Sprache | Python 3.11 |
| Dokumentenparser | Docling von IBM |
| KI-Modell | Ollama / llama.cpp (LLaMA 3.1, Granite3 Instruct) |
| Extraktion & Validierung | Custom LLM + Regex + Pydantic |
| Export | OpenPyXL (Excel), JSON |
| Logging | Python 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.





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.