feat: évaluation force probante dossier + seuils qualité relaxés pour dossiers faibles

Score 0-10 basé sur les preuves objectives (bio/img/trt/actes).
Dossier faible (score < 3) : prompt LLM adapté + seuil adversarial
abaissé (score 2-3 → Tier B au lieu de C). Les éléments contextuels
(âge, IMC, urgence) restent dans le prompt mais hors du scoring car
ils ne constituent pas des preuves opposables à un contrôleur CPAM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dom
2026-02-23 09:19:43 +01:00
parent 1844d1be7e
commit d192af74ec
4 changed files with 266 additions and 3 deletions

View File

@@ -17,6 +17,7 @@ from ..prompts import CPAM_EXTRACTION
# --- Imports depuis les sous-modules ---
from .cpam_rag import _search_rag_for_control
from .cpam_context import (
_assess_dossier_strength,
_build_cpam_prompt,
_build_tagged_context,
)
@@ -37,6 +38,7 @@ from .cpam_context import ( # noqa: F401
_get_code_label,
_get_cim10_definitions,
_BIO_INTERPRETATION,
_assess_dossier_strength,
_build_bio_summary,
_check_das_bio_coherence,
)
@@ -229,9 +231,16 @@ def generate_cpam_response(
all_warnings = ref_warnings + grounding_warnings + code_warnings + adversarial_warnings
# 8c. Classification qualité (A/B/C)
# 8c. Évaluation force probante du dossier
strength = _assess_dossier_strength(dossier)
if strength["is_weak"]:
logger.info(" Dossier à preuves limitées (score %d/10) : %s",
strength["score"], ", ".join(strength["missing"]))
# 8d. Classification qualité (A/B/C) — seuils relaxés si dossier faible
tier, needs_review, cat_warnings = _assess_quality_tier(
result, ref_warnings, grounding_warnings, code_warnings, validation,
is_weak_dossier=strength["is_weak"],
)
controle.quality_tier = tier
controle.requires_review = needs_review