chore: nettoyage YAML base.yaml + corrections templates viewer
- base.yaml: suppression commentaires verbose, normalisation quotes YAML - Templates: corrections mineures cpam.html, detail.html, dim.html, index.html - admin_rules.html: ajustements interface admin règles - test_referentiels.py: mise à jour imports Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,10 +17,10 @@
|
||||
<div style="display:flex;align-items:baseline;gap:0.75rem;margin-bottom:1rem;flex-wrap:wrap;">
|
||||
<h2 style="margin:0;">{{ current_group | format_dossier_name if current_group else (dossier.source_file or filepath) }}</h2>
|
||||
{% if dossier.document_type %}
|
||||
<span class="badge" style="background:#e0e7ff;color:#3730a3;">{{ dossier.document_type }}</span>
|
||||
<span class="badge" style="background:#e0e7ff;color:#3730a3;" title="Type de document source (CRH, lettre de sortie, compte-rendu opératoire, etc.)">{{ dossier.document_type }}</span>
|
||||
{% endif %}
|
||||
{% if dossier.source_files %}
|
||||
<span class="badge" style="background:#ede9fe;color:#5b21b6;">fusionné</span>
|
||||
<span class="badge" style="background:#ede9fe;color:#5b21b6;" title="Ce dossier est le résultat de la fusion de plusieurs documents sources">fusionné</span>
|
||||
{% endif %}
|
||||
{% if dossier.processing_time_s is not none %}
|
||||
<span style="font-size:0.75rem;color:#94a3b8;">{{ dossier.processing_time_s|format_duration }}</span>
|
||||
@@ -83,22 +83,22 @@
|
||||
<code style="font-size:1.1rem;font-weight:700;letter-spacing:0.05em;">{{ ghm.ghm_approx }}</code>
|
||||
{% endif %}
|
||||
{% if ghm.type_ghm == 'C' %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;">C — Chirurgical</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;" title="GHM Chirurgical — séjour avec acte opératoire classant">C — Chirurgical</span>
|
||||
{% elif ghm.type_ghm == 'K' %}
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;">K — Interventionnel</span>
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;" title="GHM Interventionnel — séjour avec acte non chirurgical classant (endoscopie, cathétérisme, etc.)">K — Interventionnel</span>
|
||||
{% elif ghm.type_ghm == 'M' %}
|
||||
<span class="badge" style="background:#dbeafe;color:#1d4ed8;">M — Médical</span>
|
||||
<span class="badge" style="background:#dbeafe;color:#1d4ed8;" title="GHM Médical — séjour sans acte classant">M — Médical</span>
|
||||
{% endif %}
|
||||
{% if ghm.severite <= 1 %}
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;">Niv. {{ ghm.severite }}</span>
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;" title="Sévérité 1 — sans complication ni morbidité associée significative">Niv. {{ ghm.severite }}</span>
|
||||
{% elif ghm.severite == 2 %}
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;">Niv. {{ ghm.severite }}</span>
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;" title="Sévérité 2 — complication ou morbidité associée mineure">Niv. {{ ghm.severite }}</span>
|
||||
{% elif ghm.severite == 3 %}
|
||||
<span class="badge" style="background:#fed7aa;color:#9a3412;">Niv. {{ ghm.severite }}</span>
|
||||
<span class="badge" style="background:#fed7aa;color:#9a3412;" title="Sévérité 3 — complication ou morbidité associée majeure">Niv. {{ ghm.severite }}</span>
|
||||
{% else %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;">Niv. {{ ghm.severite }}</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;" title="Sévérité 4 — complication ou morbidité associée très sévère (réanimation, décès, etc.)">Niv. {{ ghm.severite }}</span>
|
||||
{% endif %}
|
||||
<span style="font-size:0.75rem;color:#64748b;">{{ ghm.cma_count }} CMA, {{ ghm.cms_count }} CMS</span>
|
||||
<span style="font-size:0.75rem;color:#64748b;" title="CMA = Comorbidités/Morbidités Associées (augmentent la sévérité), CMS = Comorbidités/Morbidités Sans effet sur la sévérité">{{ ghm.cma_count }} CMA, {{ ghm.cms_count }} CMS</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -112,16 +112,16 @@
|
||||
{% else %}{% set vr_color = '#ef4444' %}{% endif %}
|
||||
<div style="margin-top:0.2rem;display:flex;align-items:center;gap:0.5rem;">
|
||||
{% if vr.verdict == 'PASS' %}
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;font-weight:700;">CONFORME</span>
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;font-weight:700;" title="Le codage respecte les règles ATIH — défendable en cas de contrôle externe">CONFORME</span>
|
||||
{% elif vr.verdict == 'NEED_INFO' %}
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;font-weight:700;">À COMPLÉTER</span>
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;font-weight:700;" title="Le codage nécessite des informations complémentaires pour être pleinement validé">À COMPLÉTER</span>
|
||||
{% else %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-weight:700;">NON CONFORME</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-weight:700;" title="Le codage enfreint au moins une règle ATIH — risque de rejet ou pénalité en cas de contrôle">NON CONFORME</span>
|
||||
{% endif %}
|
||||
<div style="flex:1;height:6px;background:#e2e8f0;border-radius:3px;max-width:120px;">
|
||||
<div style="flex:1;height:6px;background:#e2e8f0;border-radius:3px;max-width:120px;" title="Barre de score de défendabilité (0=indéfendable, 100=parfaitement défendable)">
|
||||
<div style="width:{{ vr.score_contestabilite }}%;height:100%;background:{{ vr_color }};border-radius:3px;"></div>
|
||||
</div>
|
||||
<span style="font-size:0.8rem;font-weight:600;">{{ vr.score_contestabilite }}/100</span>
|
||||
<span style="font-size:0.8rem;font-weight:600;" title="Score de défendabilité du codage face à un contrôle externe (CPAM, ARS)">{{ vr.score_contestabilite }}/100</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -149,13 +149,13 @@
|
||||
<div style="display:flex;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap;">
|
||||
<h3 style="margin:0;">Complétude Documentaire DIM</h3>
|
||||
{% if compl.verdict_global == 'defendable' %}
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;font-weight:700;">DÉFENDABLE</span>
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;font-weight:700;" title="Dossier complet — toutes les pièces justificatives sont présentes pour étayer le codage en cas de contrôle">DÉFENDABLE</span>
|
||||
{% set compl_color = '#22c55e' %}
|
||||
{% elif compl.verdict_global == 'fragile' %}
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;font-weight:700;">FRAGILE</span>
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;font-weight:700;" title="Dossier incomplet — certaines pièces justificatives manquent, le codage pourrait être contesté">FRAGILE</span>
|
||||
{% set compl_color = '#f59e0b' %}
|
||||
{% else %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-weight:700;">INDÉFENDABLE</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-weight:700;" title="Dossier très incomplet — pièces essentielles absentes, le codage est indéfendable en cas de contrôle CPAM">INDÉFENDABLE</span>
|
||||
{% set compl_color = '#ef4444' %}
|
||||
{% endif %}
|
||||
<div style="display:flex;align-items:center;gap:0.5rem;">
|
||||
@@ -293,7 +293,7 @@
|
||||
<div class="card section">
|
||||
<h3>Diagnostics associés ({{ dossier.diagnostics_associes|length }})</h3>
|
||||
<table>
|
||||
<thead><tr><th>Code CIM-10</th><th>Libellé</th><th>CMA</th><th>Confiance</th><th>Source</th></tr></thead>
|
||||
<thead><tr><th title="Code CIM-10 attribué au diagnostic associé">Code CIM-10</th><th>Libellé</th><th title="Comorbidité/Morbidité Associée — indique si ce diagnostic augmente la sévérité GHM">CMA</th><th title="Niveau de confiance du pipeline IA sur ce code CIM-10">Confiance</th><th title="Source du diagnostic dans le document (page)">Source</th></tr></thead>
|
||||
<tbody>
|
||||
{% for das in dossier.diagnostics_associes %}
|
||||
<tr{% if das.status == 'ruled_out' %} style="opacity:0.5;text-decoration:line-through;"{% endif %}>
|
||||
@@ -318,7 +318,7 @@
|
||||
{% endif %}
|
||||
{% if das.status == 'needs_info' %}
|
||||
<div style="margin-top:0.2rem;">
|
||||
<span class="badge" style="background:#fff7ed;color:#c2410c;font-size:0.7rem;">Info requise</span>
|
||||
<span class="badge" style="background:#fff7ed;color:#c2410c;font-size:0.7rem;" title="Ce diagnostic nécessite des informations complémentaires pour être pleinement validé">Info requise</span>
|
||||
{% if das.cim10_decision and das.cim10_decision.needs_info %}
|
||||
<details style="margin-top:0.15rem;"><summary style="font-size:0.7rem;color:#c2410c;cursor:pointer;">détails</summary>
|
||||
<ul style="margin:0.1rem 0;padding-left:1rem;font-size:0.7rem;color:#9a3412;">
|
||||
@@ -351,7 +351,7 @@
|
||||
{% if das.niveau_cma and das.niveau_cma > 1 %}
|
||||
{{ das.niveau_cma | cma_level_badge }}
|
||||
{% elif das.est_cma %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-size:0.7rem;">CMA</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-size:0.7rem;" title="Comorbidité/Morbidité Associée — ce diagnostic augmente le niveau de sévérité du GHM">CMA</span>
|
||||
{% else %}
|
||||
—
|
||||
{% endif %}
|
||||
@@ -394,7 +394,7 @@
|
||||
<div class="card section">
|
||||
<h3>Actes CCAM ({{ dossier.actes_ccam|length }})</h3>
|
||||
<table>
|
||||
<thead><tr><th>Code CCAM</th><th>Libellé</th><th>Regroupement</th><th>Date</th><th>Validité</th><th>Source</th></tr></thead>
|
||||
<thead><tr><th title="Code de la Classification Commune des Actes Médicaux">Code CCAM</th><th>Libellé</th><th title="Code de regroupement GHM — détermine le classement du séjour en GHM chirurgical ou interventionnel">Regroupement</th><th>Date</th><th title="Validité du code CCAM dans la nomenclature en vigueur">Validité</th><th>Source</th></tr></thead>
|
||||
<tbody>
|
||||
{% for a in dossier.actes_ccam %}
|
||||
<tr>
|
||||
@@ -407,8 +407,8 @@
|
||||
</td>
|
||||
<td>{{ a.date or '' }}</td>
|
||||
<td>
|
||||
{% if a.validite == 'valide' %}<span class="badge" style="background:#d1fae5;color:#065f46;">Valide</span>
|
||||
{% elif a.validite == 'obsolete' %}<span class="badge" style="background:#fee2e2;color:#dc2626;">Obsolète</span>
|
||||
{% if a.validite == 'valide' %}<span class="badge" style="background:#d1fae5;color:#065f46;" title="Code CCAM en vigueur dans la nomenclature actuelle">Valide</span>
|
||||
{% elif a.validite == 'obsolete' %}<span class="badge" style="background:#fee2e2;color:#dc2626;" title="Code CCAM obsolète — à remplacer par le code en vigueur">Obsolète</span>
|
||||
{% else %}—{% endif %}
|
||||
{% for alerte in a.alertes %}<div style="font-size:0.7rem;color:#dc2626;">{{ alerte }}</div>{% endfor %}
|
||||
</td>
|
||||
@@ -491,9 +491,9 @@
|
||||
<tr>
|
||||
<td><code style="font-size:0.75rem;">{{ issue.veto }}</code></td>
|
||||
<td>
|
||||
{% if issue.severity == 'HARD' %}<span class="badge" style="background:#fee2e2;color:#dc2626;">Bloquant</span>
|
||||
{% elif issue.severity == 'MEDIUM' %}<span class="badge" style="background:#fef3c7;color:#92400e;">À vérifier</span>
|
||||
{% else %}<span class="badge" style="background:#f0fdf4;color:#166534;">Optimisation</span>{% endif %}
|
||||
{% if issue.severity == 'HARD' %}<span class="badge" style="background:#fee2e2;color:#dc2626;" title="Anomalie bloquante — enfreint une règle ATIH, le codage est rejeté si non corrigé">Bloquant</span>
|
||||
{% elif issue.severity == 'MEDIUM' %}<span class="badge" style="background:#fef3c7;color:#92400e;" title="Point à vérifier — possible incohérence nécessitant une relecture médicale">À vérifier</span>
|
||||
{% else %}<span class="badge" style="background:#f0fdf4;color:#166534;" title="Suggestion d'optimisation — amélioration possible du codage sans impact bloquant">Optimisation</span>{% endif %}
|
||||
</td>
|
||||
<td style="font-size:0.75rem;color:#64748b;">{{ issue.where|human_where }}</td>
|
||||
<td style="font-size:0.8rem;">{{ issue.message }}</td>
|
||||
@@ -539,11 +539,11 @@
|
||||
<span class="badge" style="background:#e0e7ff;color:#3730a3;">{{ ctrl.decision_ucr }}</span>
|
||||
{% endif %}
|
||||
{% if ctrl.quality_tier == 'A' %}
|
||||
<span class="badge" style="background:#2ecc71;color:#fff;font-weight:700;">Qualité A</span>
|
||||
<span class="badge" style="background:#2ecc71;color:#fff;font-weight:700;" title="Qualité A — contre-argumentation solide, bien documentée, preuves convergentes">Qualité A</span>
|
||||
{% elif ctrl.quality_tier == 'B' %}
|
||||
<span class="badge" style="background:#f39c12;color:#fff;font-weight:700;">Qualité B</span>
|
||||
<span class="badge" style="background:#f39c12;color:#fff;font-weight:700;" title="Qualité B — contre-argumentation acceptable mais certains points pourraient être renforcés">Qualité B</span>
|
||||
{% elif ctrl.quality_tier == 'C' %}
|
||||
<span class="badge" style="background:#e74c3c;color:#fff;font-weight:700;">Qualité C</span>
|
||||
<span class="badge" style="background:#e74c3c;color:#fff;font-weight:700;" title="Qualité C — contre-argumentation faible, preuves insuffisantes, révision recommandée">Qualité C</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -697,13 +697,13 @@
|
||||
<div style="display:flex;align-items:center;gap:0.5rem;flex-wrap:wrap;margin-bottom:0.5rem;">
|
||||
<span class="cpam-val-status">
|
||||
{% if ctrl.validation_dim == 'valide' %}
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;font-weight:700;">Validé</span>
|
||||
<span class="badge" style="background:#d1fae5;color:#065f46;font-weight:700;" title="Contre-argumentation validée par le médecin DIM — prête à être envoyée">Validé</span>
|
||||
{% elif ctrl.validation_dim == 'rejete' %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-weight:700;">Rejeté</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;font-weight:700;" title="Contre-argumentation rejetée par le médecin DIM — ne sera pas envoyée en l'état">Rejeté</span>
|
||||
{% elif ctrl.validation_dim == 'en_revision' %}
|
||||
<span class="badge" style="background:#fef3c7;color:#b45309;font-weight:700;">En révision</span>
|
||||
<span class="badge" style="background:#fef3c7;color:#b45309;font-weight:700;" title="Contre-argumentation en cours de révision par le médecin DIM">En révision</span>
|
||||
{% else %}
|
||||
<span class="badge" style="background:#f1f5f9;color:#64748b;">Non validé</span>
|
||||
<span class="badge" style="background:#f1f5f9;color:#64748b;" title="Contre-argumentation non encore examinée par le médecin DIM">Non validé</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
{% if ctrl.date_validation %}
|
||||
@@ -745,9 +745,9 @@
|
||||
<td>{{ b.valeur or '' }}</td>
|
||||
<td>
|
||||
{% if b.quality == 'suspect' %}
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;" title="{{ b.discard_reason or '' }}">Suspect</span>
|
||||
<span class="badge" style="background:#fef3c7;color:#92400e;" title="Valeur biologique suspecte (possible erreur d'extraction ou unité) — {{ b.discard_reason or 'raison non précisée' }}">Suspect</span>
|
||||
{% elif b.anomalie %}
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;">Oui</span>
|
||||
<span class="badge" style="background:#fee2e2;color:#dc2626;" title="Valeur hors normes — anomalie biologique pouvant justifier ou appuyer un diagnostic">Oui</span>
|
||||
{% if b.test in bio_normals and b.valeur_num is not none %}
|
||||
{% set lo, hi = bio_normals[b.test] %}
|
||||
{% if b.valeur_num > hi %}
|
||||
|
||||
Reference in New Issue
Block a user