feat: quality_tier CPAM (A/B/C) + requires_review + warnings catégorisés
- ControleCPAM enrichi : quality_tier, requires_review, quality_warnings - _assess_quality_tier() : classification basée sur score adversarial + warnings - Tier C (requires_review) : score <4, code hors périmètre, >2 preuves non traçables - Tier B : score 4-6, warnings mineurs - Tier A : score >=7, 0 critique - _format_response() : bandeau "REVUE MANUELLE REQUISE" pour tier C, sections CRITIQUES/MINEURS séparées - Badge qualité dans le viewer CPAM (vert A / orange B / rouge C) - 17 tests : tier A/B/C, bandeau, séparation warnings, backward compat Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ from .cpam_validation import (
|
||||
_validate_codes_in_response,
|
||||
_build_correction_prompt,
|
||||
_format_response,
|
||||
_assess_quality_tier,
|
||||
)
|
||||
|
||||
# Backward compat — sera retiré dans un commit futur
|
||||
@@ -38,7 +39,7 @@ from .cpam_context import ( # noqa: F401
|
||||
_build_bio_summary,
|
||||
_check_das_bio_coherence,
|
||||
)
|
||||
from .cpam_validation import _CIM10_CODE_RE, _validate_adversarial as _validate_adversarial # noqa: F401
|
||||
from .cpam_validation import _CIM10_CODE_RE, _validate_adversarial as _validate_adversarial, _assess_quality_tier as _assess_quality_tier # noqa: F401
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -220,8 +221,23 @@ def generate_cpam_response(
|
||||
|
||||
all_warnings = ref_warnings + grounding_warnings + code_warnings + adversarial_warnings
|
||||
|
||||
# 8c. Classification qualité (A/B/C)
|
||||
tier, needs_review, cat_warnings = _assess_quality_tier(
|
||||
result, ref_warnings, grounding_warnings, code_warnings, validation,
|
||||
)
|
||||
controle.quality_tier = tier
|
||||
controle.requires_review = needs_review
|
||||
controle.quality_warnings = cat_warnings
|
||||
logger.info(" Qualité CPAM : tier %s, requires_review=%s, %d warnings",
|
||||
tier, needs_review, len(cat_warnings))
|
||||
|
||||
# 9. Formater la réponse
|
||||
text = _format_response(result, all_warnings)
|
||||
text = _format_response(
|
||||
result,
|
||||
ref_warnings=all_warnings,
|
||||
quality_tier=tier,
|
||||
categorized_warnings=cat_warnings,
|
||||
)
|
||||
logger.info(" Contre-argumentation générée (%d caractères)", len(text))
|
||||
|
||||
return text, result, rag_sources
|
||||
|
||||
Reference in New Issue
Block a user