- Viewer : badges compteurs (DAS, actes, alertes, CMA), raisonnement LLM pliable, regroupement CCAM, navigation patient, alertes NON-CUMUL en rouge - Non-cumul CCAM : 3 règles heuristiques (même base, même regroupement/jour, paires incompatibles) - Fusion multi-PDFs : merge_dossiers() avec priorité Trackare, spécificité CIM-10, déduplication, champ source_files - Index FAISS reconstruit : 21 141 vecteurs (CCAM dict 8 257 + CIM-10 alpha 306) - 192 tests unitaires passent Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
97 lines
4.4 KiB
HTML
97 lines
4.4 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Accueil{% endblock %}
|
|
|
|
{% block sidebar %}
|
|
{% for group_name, items in groups.items() %}
|
|
<div class="group-title">{{ group_name }}</div>
|
|
{% for item in items %}
|
|
<a href="/dossier/{{ item.path_rel }}">{{ item.name }}</a>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<h2>Dossiers médicaux traités</h2>
|
|
|
|
{% if not groups %}
|
|
<div class="card">
|
|
<p>Aucun dossier trouvé dans <code>output/structured/</code>.</p>
|
|
<p style="margin-top:0.5rem;font-size:0.85rem;color:#64748b">
|
|
Lancez le pipeline avec <code>python -m src.main</code> pour générer des fichiers.
|
|
</p>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% for group_name, items in groups.items() %}
|
|
<div class="section">
|
|
{% set ns = namespace(total=0.0, count=0) %}
|
|
{% for item in items %}
|
|
{% if item.dossier.processing_time_s is not none %}
|
|
{% set ns.total = ns.total + item.dossier.processing_time_s %}
|
|
{% set ns.count = ns.count + 1 %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% set stats = group_stats.get(group_name, {}) %}
|
|
<h3 style="display:flex;align-items:baseline;gap:0.75rem;flex-wrap:wrap;">
|
|
{{ group_name }}
|
|
<span style="font-size:0.75rem;font-weight:400;color:#64748b;">
|
|
{{ items|length }} fichier(s){% if ns.count %} — total : {{ ns.total|round(1) }}s{% endif %}
|
|
</span>
|
|
{% if stats %}
|
|
<span class="badge-count badge-das">{{ stats.das_count }} DAS</span>
|
|
<span class="badge-count badge-actes">{{ stats.actes_count }} actes</span>
|
|
{% if stats.alertes_count %}<span class="badge-count badge-alertes">{{ stats.alertes_count }} alertes</span>{% endif %}
|
|
{% if stats.cma_count %}<span class="badge-count badge-cma">{{ stats.cma_count }} CMA</span>{% endif %}
|
|
{% endif %}
|
|
</h3>
|
|
{% if items|length > 1 %}
|
|
{% for item in items if 'fusionne' in item.name %}
|
|
{% if loop.first %}
|
|
<div style="margin-bottom:0.75rem;">
|
|
<a href="/dossier/{{ item.path_rel }}" class="badge-count badge-fusion" style="text-decoration:none;font-size:0.8rem;padding:4px 12px;">
|
|
Vue patient fusionnée
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
<div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem;">
|
|
{% for item in items %}
|
|
<a href="/dossier/{{ item.path_rel }}" style="text-decoration:none;color:inherit;">
|
|
<div class="card" style="cursor:pointer;transition:box-shadow 0.15s;">
|
|
<div style="font-weight:600;font-size:0.9rem;margin-bottom:0.4rem;color:#0f172a;">
|
|
{{ item.name }}
|
|
</div>
|
|
<div style="display:flex;flex-wrap:wrap;gap:0.3rem;margin-bottom:0.4rem;">
|
|
{% if item.dossier.document_type %}
|
|
<span class="badge" style="background:#e0e7ff;color:#3730a3;">{{ item.dossier.document_type }}</span>
|
|
{% endif %}
|
|
{% if item.dossier.source_files %}<span class="badge badge-fusion">fusionné</span>{% endif %}
|
|
{% if item.dossier.diagnostics_associes %}<span class="badge-count badge-das">{{ item.dossier.diagnostics_associes|length }} DAS</span>{% endif %}
|
|
{% if item.dossier.actes_ccam %}<span class="badge-count badge-actes">{{ item.dossier.actes_ccam|length }} actes</span>{% endif %}
|
|
{% if item.dossier.alertes_codage %}<span class="badge-count badge-alertes">{{ item.dossier.alertes_codage|length }} alertes</span>{% endif %}
|
|
</div>
|
|
{% if item.dossier.diagnostic_principal %}
|
|
<div style="margin-top:0.5rem;font-size:0.8rem;color:#334155;">
|
|
<strong>DP :</strong> {{ item.dossier.diagnostic_principal.texte[:80] }}{% if item.dossier.diagnostic_principal.texte|length > 80 %}…{% endif %}
|
|
</div>
|
|
{% if item.dossier.diagnostic_principal.cim10_suggestion %}
|
|
<div style="margin-top:0.25rem;">
|
|
<span class="badge" style="background:#dbeafe;color:#1d4ed8;">{{ item.dossier.diagnostic_principal.cim10_suggestion }}</span>
|
|
{{ item.dossier.diagnostic_principal.cim10_confidence | confidence_badge }}
|
|
</div>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if item.dossier.processing_time_s is not none %}
|
|
<div style="margin-top:0.5rem;font-size:0.75rem;color:#64748b;">
|
|
Traitement : {{ item.dossier.processing_time_s }}s
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</a>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
{% endblock %}
|