# Prompts LLM — Pipeline T2A Ce document récapitule les 7 prompts externalisés dans `src/prompts/templates.py`. Chaque template utilise `str.format(**kwargs)` — les accolades JSON sont échappées via `{{` / `}}`. --- ## 1. CODING_CIM10 — Codage CIM-10 (DP / DAS) | Paramètre | Valeur | |-----------|--------| | **Rôle** | `coding` | | **Température** | 0.1 | | **Max tokens** | 2 500 | | **Appelé par** | `rag_search.py → _build_prompt()` | **Variables** : `texte`, `type_diag`, `ctx_str`, `sources_text` **Fonction** : Code un diagnostic en CIM-10 à partir des sources RAG. Le LLM joue un médecin DIM et doit discriminer entre codes candidats en citant les règles d'inclusion/exclusion. **Sortie JSON** : `analyse_clinique`, `codes_candidats`, `discrimination`, `regle_pmsi`, `code`, `confidence`, `justification`, `preuves_cliniques[]` --- ## 2. CODING_CCAM — Codage CCAM (actes) | Paramètre | Valeur | |-----------|--------| | **Rôle** | `coding` | | **Température** | 0.1 | | **Max tokens** | 2 500 | | **Appelé par** | `rag_search.py → _build_prompt_ccam()` | **Variables** : `texte`, `ctx_str`, `sources_text` **Fonction** : Code un acte chirurgical/médical en CCAM (4 lettres + 3 chiffres). Vérifie activité, regroupement, et tarif secteur 1. **Sortie JSON** : `analyse_acte`, `codes_candidats`, `discrimination`, `code`, `confidence`, `justification` --- ## 3. DAS_EXTRACTION — Extraction DAS supplémentaires | Paramètre | Valeur | |-----------|--------| | **Rôle** | `coding` | | **Température** | 0.1 | | **Max tokens** | 2 000 | | **Appelé par** | `rag_search.py → _build_prompt_das_extraction()` | **Variables** : `dp_texte`, `existing_str`, `ctx_str`, `text_medical` **Fonction** : Identifie les DAS non encore codés dans le texte médical. Exclut les doublons, les symptômes expliqués par un diagnostic précis, et les antécédents non pertinents. Attention aux valeurs biologiques normales. **Sortie JSON** : `diagnostics_supplementaires[{texte, code_cim10, justification}]` --- ## 4. QC_VALIDATION — Validation qualité post-codage | Paramètre | Valeur | |-----------|--------| | **Rôle** | `qc` | | **Température** | 0.1 | | **Max tokens** | 2 500 | | **Appelé par** | `cim10_extractor.py → _validate_justifications()` | **Variables** : `ctx_str`, `codes_section` **Fonction** : Contrôle qualité du codage complet. Vérifie pour chaque code : preuve clinique, spécificité, conflits/redondances. Peut recommander de maintenir, reclasser ou supprimer un code. **Sortie JSON** : `validations[{numero, code, verdict, confidence_recommandee, commentaire}]`, `alertes_globales[]` --- ## 5. CPAM_EXTRACTION — Passe 1 : extraction structurée | Paramètre | Valeur | |-----------|--------| | **Rôle** | `cpam` | | **Température** | 0.0 | | **Max tokens** | 1 500 | | **Appelé par** | `cpam_response.py → _extraction_pass()` | **Variables** : `dp_str`, `das_str`, `tagged_text`, `titre`, `arg_ucr`, `decision_ucr`, `dp_ucr_line`, `da_ucr_line` **Fonction** : Comprend la contestation CPAM sans argumenter. Extrait les éléments cliniques pertinents, les points d'accord potentiels, et identifie les codes en jeu. **Sortie JSON** : `comprehension_contestation`, `elements_cliniques_pertinents[{tag, pertinence}]`, `points_accord_potentiels[]`, `codes_en_jeu{dp_etablissement, dp_ucr, difference_cle}` --- ## 6. CPAM_ARGUMENTATION — Passe 2 : contre-argumentation (3 axes) | Paramètre | Valeur | |-----------|--------| | **Rôle** | `cpam` | | **Température** | 0.1 | | **Max tokens** | 4 000 | | **Appelé par** | `cpam_response.py → _build_cpam_prompt()` | **Variables** : `dossier_str`, `asymetrie_str`, `tagged_str`, `titre`, `arg_ucr`, `decision_ucr`, `codes_str`, `definitions_str`, `sources_text`, `extraction_str` **Fonction** : Produit la contre-argumentation CPAM complète selon 3 axes : 1. **Axe médical** — bien-fondé clinique avec citations exactes du dossier (tags `[XX-N]`) 2. **Axe asymétrie d'information** — éléments que la CPAM n'avait pas (biologie, imagerie, traitements) 3. **Axe réglementaire** — erreurs d'interprétation avec citations verbatim des sources **Contraintes clés** : - Doit reconnaître au moins un point valide de la CPAM (crédibilité) - Codes CIM-10 toujours cités explicitement avec libellé - Références au format `[Document - page N]` + citation verbatim - Prend en compte âge, mode d'entrée, durée de séjour **Sortie JSON** : `analyse_contestation`, `points_accord`, `contre_arguments_medicaux`, `preuves_dossier[{ref, element, valeur, signification}]`, `contre_arguments_asymetrie`, `contre_arguments_reglementaires`, `references[{document, page, citation}]`, `conclusion` --- ## 7. CPAM_ADVERSARIAL — Passe 3 : validation adversariale | Paramètre | Valeur | |-----------|--------| | **Rôle** | `validation` | | **Température** | 0.0 | | **Max tokens** | 800 | | **Appelé par** | `cpam_response.py → _validate_adversarial()` | **Variables** : `response_json`, `factual_section`, `normes_section`, `dp_ucr_line`, `da_ucr_line` **Fonction** : Relecture critique de la contre-argumentation générée. Vérifie : 1. Les valeurs citées existent dans les éléments factuels 2. Les qualifications bio (élevée/basse) respectent les normes de référence 3. La conclusion est cohérente avec l'argumentation 4. Les points d'accord ne contredisent pas les contre-arguments 5. Les codes CIM-10 de la conclusion sont cohérents **Point architectural** : ce prompt utilise le rôle `validation` (modèle **différent** du générateur) pour garantir une vérification indépendante. **Sortie JSON** : `coherent` (bool), `erreurs[]`, `score_confiance` (0-10) --- ## Architecture multi-modèles Les rôles LLM sont définis dans `src/config.py` : | Rôle | Modèle par défaut | Variable d'env | |------|-------------------|----------------| | `coding` | `gemma3:27b-cloud` | `T2A_MODEL_CODING` | | `cpam` | `deepseek-v3.2:cloud` | `T2A_MODEL_CPAM` | | `validation` | `deepseek-v3.2:cloud` | `T2A_MODEL_VALIDATION` | | `qc` | `gemma3:12b` | `T2A_MODEL_QC` | Le rôle `validation` utilise volontairement un modèle différent du `cpam` pour éviter l'auto-validation.