v1.17+v1.18: Beleg-Auto-Zuordnung (Zaehlernummer/Adresse) + eigener OCR-Container (Tesseract)

This commit is contained in:
2026-10-04 13:05:55 +02:00
parent 4eab719550
commit c0cadd7451
10 changed files with 357 additions and 10 deletions
+25
View File
@@ -189,6 +189,31 @@ tar -czf mp-dist.tar.gz -C dist .
## 8. Verlauf / offene Punkte
**Erledigt 04.10. (v1.17 + v1.18):** Auto-Zuordnung der Belege + eigener
OCR-Container. ZUORDNUNGSREGEL (Vorgabe des Nutzers): PRIMÄR Stromzählernummer,
SEKUNDÄR Adresse. belege-Tabelle um unit_id/gebaude/zuordnung/rohtext erweitert
(ALTER ... ADD COLUMN IF NOT EXISTS). `belegAutoZuordnung(text)`: Stromzähler
aus meters (längste Nummer zuerst) als Substring im Volltext, dann Hausname/
Adresse aus buildings; WICHTIG: Umlaut-Normalisierung (ß↔ss, Umlaute↔Ae/Oe/Ue)
auf beiden Seiten – sonst findet „Hauptstrasse" nicht „Hauptstraße".
Webhook prüft zuerst den Event-Volltext (eventVolltext = rekursiv alle
String-/Zahlenwerte); ohne Treffer + datei_url → belegAnalysieren() asynchron
nach dem Response (fire-and-forget). `zuordnung='manuell'` wird bei Updates/
OCR NIEMALS überschrieben (CASE-Expressions im ON CONFLICT und im UPDATE).
E2E verifiziert: Zählernummer→rw-4, Adresse→Hauptstraße 12, Testdaten weg.
OCR-CONTAINER mp-ocr (v1.18): server/ocr/ (FastAPI + Tesseract deu + PyMuPDF;
PDF→200dpi-PNG→pytesseract; Bilder direkt; /ocr {url} und /ocr/upload;
data:-URLs werden lokal dekodiert (httpx kann keine data:-URLs); 20 MB Limit).
Compose-Service ohne öffentlichen Port, nur im npm_default-Netz; deploy.sh
baut ihn serverseitig mit (`compose up -d --build`). mp-api: OCR_URL env
(default http://mp-ocr:8081), belegAnalysieren(id) (OCR-Text → Zuordnung →
rohtext ersetzen; Fallback rohtext), POST /api/belege/:id/analysieren
(adminOnly). Frontend: Belege-Tabelle mit Zuordnungs-Spalte (Ziel + „erkannt
per Zählernummer/Adresse/Manuell"), „Analysieren"-Button pro Beleg
(analysiereBeleg im Store), KostenDialog-Vorbefüllung um unitId/building
erweitert. E2E verifiziert: OCR über data-URL-PDF (reportlab-Test-PDF mit
„Zaehler-Nr: ST-0815-4711") → hs-7 zugeordnet; mp-ocr healthy.
**Erledigt 04.10. (v1.16):** SparkReceipt-Schnittstelle für gescannte Belege.
SparkReceipt bietet Webhooks (Doku: sparkreceipt.com/integrations/webhooks)
– POST auf eine URL bei document created/updated/deleted, Standard-Verzögerung