feat: Phase 4 — viewer enrichi, non-cumul CCAM, fusion multi-PDFs + rebuild FAISS (21 141 vecteurs)

- 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>
This commit is contained in:
dom
2026-02-11 12:43:34 +01:00
parent 7e69f994b0
commit 9d07894c6f
12 changed files with 1013 additions and 26 deletions

View File

@@ -243,14 +243,32 @@ def main(input_path: str | None = None) -> None:
if subdir:
logger.info("--- Dossier %s (%d PDFs) ---", subdir, len(pdfs))
group_dossiers: list[DossierMedical] = []
for pdf_path in pdfs:
try:
anonymized_text, dossier, report = process_pdf(pdf_path)
stem = pdf_path.stem.replace(" ", "_")
write_outputs(stem, anonymized_text, dossier, report, subdir=subdir)
group_dossiers.append(dossier)
except Exception:
logger.exception("Erreur lors du traitement de %s", pdf_path.name)
# Fusion multi-PDFs si plusieurs documents dans le même groupe
if len(group_dossiers) > 1 and subdir:
try:
from .medical.fusion import merge_dossiers
merged = merge_dossiers(group_dossiers)
struct_dir = STRUCTURED_DIR / subdir
struct_dir.mkdir(parents=True, exist_ok=True)
merged_path = struct_dir / f"{subdir}_fusionne_cim10.json"
merged_path.write_text(
merged.model_dump_json(indent=2, exclude_none=True),
encoding="utf-8",
)
logger.info(" → Dossier fusionné : %s", merged_path)
except Exception:
logger.exception("Erreur lors de la fusion du groupe %s", subdir)
logger.info("Terminé.")