# SRC-10 – Prüfprotokoll: Spracherkennung & OCR-Qualitätsbewertung Voraussetzung SRC-07 (Fertig). ## Umsetzung - `mail/internal/ocr/language.go` — `RecognizeWithLanguageAndConfidence`: Tesseract erkennt bei kombinierten Sprachpaketen (`deu+eng`) nicht, WELCHE Sprache vorlag — daher wird das Bild bewusst EINZELN mit jedem Kandidaten (`deu`, `eng`) im TSV-Ausgabemodus erkannt; die Sprache mit dem höheren durchschnittlichen Worterkennungs-Konfidenzwert gewinnt (Akzeptanzkriterium 1). Derselbe Tesseract-TSV-Lauf liefert den Konfidenzwert direkt mit (Akzeptanzkriterium 2, 0–100, Mittelwert über alle erkannten Wörter) — keine zweite externe Bibliothek nötig. - `mail/internal/search`: neue Felder `ocr_language`/`ocr_confidence` (Migrationen 0006/0007, gleiches ALTER-Muster wie SRC-05), in `Document`/`Result` gespiegelt (Akzeptanzkriterium 1: für Anzeige nutzbar). Neue Methode `Client.AttachmentsBelowConfidence(ctx, tenantSlug, threshold)` (Akzeptanzkriterium 3: gezielt für manuelle Nachbearbeitung auffindbar) — filtert `ocr_confidence < threshold`, schließt Dokumente ohne OCR-Anhang (`ocr_confidence` bleibt 0) explizit aus. - Echten Regressionsbug beim eigenen Testlauf gefunden und behoben: `reindex.go`s `buildCreateTableSQL` (SRC-09) kannte die neuen OCR-Spalten nicht — ein Reindex nach dieser Kachel wäre mit "unknown column" fehlgeschlagen. Jetzt ergänzt, mit Wartungshinweis im Quelltext für künftige Schema-Erweiterungen. - Kein Umbau: `Search`/`Facets`/`SearchWithFilters`/`Index`/`Delete`- Verhalten sonst unverändert, `mail/internal/dedup`/`indexworker`/ `storage`/`crypto`/`encstorage`/`savedsearch` unverändert. ## Prüfungen | # | Prüfung | Ergebnis | |---|---|---| | 1 | Test mit mehrsprachigem Testkorpus bestätigt korrekte Spracherkennung | **bestanden** – `TestRecognizeWithLanguageAndConfidence_MultilingualCorpus`: reales deutsches Testbild ("Rechnung ueber Lieferung...") real als `deu` erkannt, reales englisches Testbild ("Invoice for delivery...") real als `eng` erkannt | | 2 | Test: künstlich verschlechtertes Bild erzeugt niedrigeren Konfidenzwert | **bestanden** – `TestRecognizeWithLanguageAndConfidence_DegradedImageLowersConfidence`: reproduzierbare Pixelierung + Kontrastreduktion (reiner Go-Standardbibliothekscode, kein externes Werkzeug) senkt den real gemessenen Konfidenzwert von 91,76 auf 28,21 | | 3 | Abfrage aller Anhänge unterhalb einer Konfidenzschwelle liefert erwartete Treffer | **bestanden** – `TestAttachmentsBelowConfidence_QueryReturnsExpectedResults`: 4 Dokumente (2 niedrig-, 1 hoch-konfident, 1 ohne OCR-Anhang), Abfrage mit Schwelle 50 liefert real genau die 2 niedrig-konfidenten, weder den hoch-konfidenten noch den ohne OCR-Anhang | ## Build/Test-Ergebnis (192.168.1.131) ``` go build ./... -> clean go vet ./... -> clean golangci-lint run ./... -> 0 issues go test ./internal/ocr/... -v -run 'Language|Degraded' -> 2/2 bestanden TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./... -p 1 -> alle Pakete bestanden (Regressionsbug in reindex.go vor diesem Protokoll gefunden und behoben, danach vollständig grün) ``` ## Gesamtergebnis **Bestanden.** Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen real erfüllt. Entsperrt QA-03 (gemeinsam mit ARC-08, SRC-02, SRC-04, SRC-05, SRC-08, SRC-09 — alle jetzt Fertig, letzte fehlende Abhängigkeit).