fix(replay): réactivation pré-check OCR avec calibrage chirurgical

- Flag RPA_ENABLE_TEXT_PRECHECK défaut true (vs false pendant prépa démo)
- radius_px 200 → 280 (englobe textes longs type "Synthèse Urgences")
- min_token_ratio 0.60 → 0.50 (tolère onglets fragmentés par OCR)
- Commentaire historique restructuré avec procédure troubleshooting
- Docstring synchronisée avec valeur effective

Audit complet : docs/AUDIT_CONTROLES_DEBRANCHES_2026-05-08.md
Réactive contrôle #3 sur 5 identifiés (les 4 autres restent désactivés
pour aujourd'hui — décision chirurgicale 1 par 1).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-05-08 14:27:21 +02:00
parent 8648e375fe
commit 731b5bcae2
2 changed files with 21 additions and 11 deletions

View File

@@ -2243,10 +2243,10 @@ def _validate_text_at_position(
expected_text: str,
screen_width: int,
screen_height: int,
radius_px: int = 200,
radius_px: int = 280,
) -> tuple:
"""Pré-check sémantique : OCR sur une zone autour de (x_pct, y_pct) et
vérifie que `expected_text` y est présent (substring ou fuzzy 60%).
vérifie que `expected_text` y est présent (substring ou fuzzy 50%).
Retourne (is_valid: bool, observed_text: str, elapsed_ms: float).
@@ -2282,7 +2282,7 @@ def _validate_text_at_position(
results = reader.readtext(np.array(crop))
observed = " ".join(r[1] for r in results if r and len(r) >= 2)
elapsed_ms = (time.time() - t0) * 1000
is_valid = _text_match_fuzzy(expected_text, observed, min_token_ratio=0.60)
is_valid = _text_match_fuzzy(expected_text, observed, min_token_ratio=0.50)
return is_valid, observed, elapsed_ms
except Exception as e:
logger.warning("[REPLAY] _validate_text_at_position erreur (%s) — pas de blocage", e)