feat: Phase 5 – PDF/Bild-Beleg-Import (lokal, Tesseract-OCR)

Backend:
- services/ocr: PDF-Text via PyMuPDF, OCR (Tesseract) für Scans/Bilder,
  heuristischer Parser (Datum + Betrag je Zeile, CH/DE/US-Beträge).
- routers/documents: /documents/preview (Upload -> Text -> Kandidaten ->
  gemeinsame Prüf-/Buchungslogik des CSV-Imports). csv_import refaktoriert:
  detect_rows() von CSV und Beleg gemeinsam genutzt.
- requirements: PyMuPDF, pytesseract, pillow; install.sh installiert tesseract-ocr
  (+ deu). pytest: Heuristik-Parser und PDF-Vorschau.

Frontend:
- Import-Seite: CSV/PDF-Umschalter; PDF-Modus mit Beleg-Auslesen, extrahiertem
  Text zur Kontrolle und Best-Effort-Hinweis; gleiche Prüfansicht + Buchen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-19 20:25:32 +02:00
co-authored by Claude Opus 4.8
parent ddf4f1f5ed
commit 7461fddb7a
13 changed files with 353 additions and 41 deletions
+7 -2
View File
@@ -197,13 +197,18 @@
"targetAccount": "Zielkonto"
},
"import": {
"title": "CSV-Import",
"title": "Import",
"modeCsv": "CSV",
"modeDoc": "PDF · Bild",
"readDoc": "Beleg auslesen",
"docHint": "PDF-/Bild-Erkennung ist Best-Effort — bitte jede Zeile prüfen und ggf. korrigieren.",
"extractedText": "Extrahierter Text (zur Kontrolle)",
"step1": "1 · Konto & Datei",
"step2": "2 · Format",
"step3": "3 · Spalten zuordnen",
"step4": "4 · Prüfen & buchen",
"account": "Zielkonto",
"file": "CSV-Datei",
"file": "Datei",
"preset": "Bank-Vorlage (vorgefertigt)",
"template": "Eigene Vorlage",
"templateManual": "Manuell einstellen",