Projektdokumentation

BelegLotse

KI-Beleg-Extraktor mit DATEV-Export — Rechnungen/Mahnungen strukturiert erfassen, fachlich prüfen und exportieren. Optional 100 % lokal.

1. Umfeld & Ziel

Buchhaltung und Steuerbüros tippen Rechnungen von Hand ab. Ziel: aus PDF/Bild strukturierte Daten extrahieren, sie fachlich validieren und in ein echtes Buchhaltungsformat (DATEV) exportieren — nachvollziehbar und optional ohne Datenabfluss.

2. Architektur

Clean Architecture (Abhängigkeiten nach innen). Server-rendered (Jinja2/HTMX) + schlankes Vanilla-JS (SSE-Schritte, Upload, Export-Download). Kein DB — flüchtige Verarbeitung.

SchichtAufgabe
domainBeleg, Position, ValidationFlag, ExtractionResult + LLMPort + OcrPort
applicationBelegExtractor (Use-Case) + Validierungsregeln (UStG/BGB)
infrastructuredocument (pypdf/OCR), extractor (LLM structured output), export (DATEV/CSV/JSON), Mistral/Ollama, Tesseract
apiFastAPI: Extraktor, /extract (SSE), /export/{fmt}

3. Pipeline

Upload PDF/Bild OCR / pypdf LLM-Extraktion Validierung DATEV / CSV / JSON

PDFs liefern Text über pypdf, Bilder über Tesseract-OCR (lokal). Die Extraktion nutzt structured output (typisierte Felder + Positionen + Confidence). Darüber laufen deterministische Validierungsregeln — das „Enterprise"-Muster: die KI schlägt vor, harte Regeln prüfen.

4. Validierung (Differenzierer)

PrüfungRegel
MwSt rechnerischNetto + MwSt = Brutto (±0,02) und MwSt = Netto × Satz (19/7 %)
§ 14 UStG PflichtangabenRechnungsnr, Datum, Lieferant, USt-IdNr, Netto, MwSt, Brutto vorhanden
Fälligkeit / § 288 BGBüberfällig? → Hinweis auf Verzugszinsen (B2B: 9 %-Pkt. über Basiszinssatz) — kein erfundener Betrag
IBAN plausibelFormat + Prüfsumme (mod 97)
USt-IdNr plausibelFormat (DE + 9 Ziffern)

Jede Prüfung erzeugt ein Flag (✅/⚠️/❌) mit Begründung — Erklärbarkeit (EU-AI-Act).

5. Evaluation

Gegen ein synthetisches Golden-Set (10 Belege, inkl. 2 mit absichtlichem MwSt-Fehler):

MetrikWert
Feld-Genauigkeit gesamt100 % (67/67)
Exact-Match-Rate10/10
Validation-Catch-Rate (MwSt-Fehler erkannt)2/2
Latenz p50 / p951,7 / 1,8 s

Ehrliche Einordnung: kleines, sauber etikettiertes Set — der Wert liegt im feld-genauen, reproduzierbaren Harness (python eval/run_eval.py), nicht in der reinen Zahl.

6. Datenschutz & Recht

EU-LLM (Mistral) oder 100 % lokal (Ollama + Tesseract) — Belege verlassen das Gerät nicht. Keine Speicherung (Datenminimierung). DATEV-EXTF ist ein vereinfachtes Mapping. Keine Steuerberatung (StBerG) — die fachliche Verbuchung bleibt beim Menschen.

7. Qualität & Sicherheit

CI: ruff + mypy --strict + pytest (35 Tests, offline via FakeLLM/FakeOcr). Validierungsregeln deterministisch unit-getestet. Sicherheit: server-seitiges Escaping (kein XSS, Regressionstest), Eingabe-Limit + Rate-Limit pro IP, Prompt-Injection-Härtung (Beleg-Text = Daten).

Teil des Portfolios von Limber Martinez · Live: beleglotse.limbermartinez.com · Stand: 2026-06.