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": "Target account"
},
"import": {
"title": "CSV import",
"title": "Import",
"modeCsv": "CSV",
"modeDoc": "PDF · Image",
"readDoc": "Read document",
"docHint": "PDF/image recognition is best-effort — please check and fix every row.",
"extractedText": "Extracted text (for reference)",
"step1": "1 · Account & file",
"step2": "2 · Format",
"step3": "3 · Map columns",
"step4": "4 · Review & import",
"account": "Target account",
"file": "CSV file",
"file": "File",
"preset": "Bank preset",
"template": "My template",
"templateManual": "Configure manually",