1. Champ source sur Diagnostic : trackare/edsnlp/regex/llm_das
- Renseigné dans les 8 constructeurs de cim10_extractor.py
- Permet l'audit de provenance des DAS dans le JSON de sortie
2. Fallback code parent pour les codes LLM halluccinés :
- fallback_parent_code() dans cim10_dict.py (D71.9→D71, R69.8→R69)
- Intégré dans _apply_llm_result_diagnostic() de rag_search.py
- Récupère les codes rejetés dont le parent 3-char est valide
3. Règle 12 filtre DAS : en-têtes anatomiques + catégories vagues
- Rejette "Musculaire", "Digestif", "Hépatique" (mots isolés)
- Rejette "Musculaire - masse musculaire" (catégorie + description)
- 13 nouveaux tests unitaires au total
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Nouveau singleton _get_reranker() : CrossEncoder ms-marco-MiniLM-L-6-v2
forcé sur CPU pour ne pas interférer avec Ollama sur GPU
- Fonction _rerank() : re-classe les résultats FAISS via cross-encoder,
conserve le score FAISS original dans score_faiss
- Intégré dans search_similar_cpam() après déduplication, avant priorisation
- Config RERANKER_MODEL externalisée via T2A_RERANKER_MODEL (.env)
- Fix fallback CUDA OOM : rattrapage de torch.AcceleratorError en plus
de torch.OutOfMemoryError
Latence : ~7-12s (incluant chargement one-time du modèle ~80Mo).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Externalise 13 variables de config via python-dotenv (chemins PDF,
modèles Ollama/embedding/NER, FINESS, seuils) avec défauts identiques
- Centralise EMBEDDING_MODEL dans config.py (était hardcodé en 3 endroits)
- Ajoute .env.example documenté et .env au .gitignore
- Ajoute openpyxl et pandas manquants au requirements.txt
- Ajoute data/referentiels au mkdir de run.sh
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajout d'une section listant les 6 sources built-in (CIM-10, CCAM, Guide Métho,
dictionnaires) avec compteurs de chunks et statut. Séparation claire entre
référentiels intégrés et référentiels utilisateur uploadés.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajout d'un dashboard global (distribution confiance DP, top 15 codes CIM-10,
types GHM, sévérité) et d'une page listant tous les contrôles CPAM agrégés.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Filtre DAS identique au DP (violation règle PMSI) dans extracteur et fusion
- Correction automatique D55.9 → D64.9 pour "Anémie" non qualifiée (70 cas)
- 17 codes ajoutés aux supplements (K59.0, Z93.1, H92.0, A87.0, D64.9, etc.)
- 436 tests OK (+14 nouveaux)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SentenceTransformer : fallback CPU si CUDA OOM (Ollama peut occuper la VRAM)
- Bloc CPAM dans main.py : try/except pour éviter crash fatal du pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Piste 1 : ajout de cim10_supplements.json (40 sous-codes E10/E11/E13/F10)
fusionné au chargement par load_dict() — E11.9 et autres ne sont plus rejetés.
Piste 2 : export BIO_NORMALS depuis cim10_extractor, inclusion des plages
de référence [N: min-max] dans le contexte LLM et règle explicite dans le
prompt DAS pour éviter les hallucinations sur valeurs biologiques normales.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Plus besoin du flag --control-cpam : si un .xlsx est présent dans
input/Control_cpam/, il est chargé automatiquement. Le flag reste
disponible comme override.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajoute une étape de splitting entre extraction texte et parsing. Chaque chunk
est traité indépendamment par le pipeline existant, avec suffixe _partN en sortie.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Détection automatique GPU/CPU avec fallback. Index FAISS reconstruit
en 1min (GPU) au lieu de 16min (CPU).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CLI accepte plusieurs chemins en entrée (nargs="*")
- Un dossier patient passé directement utilise son nom comme subdir
- Filtres Jinja format_dossier_name (15_23096332 → Dossier 23096332)
et format_doc_name (CRO_xxx_cim10 → CRO, Trackare, Fusionné)
- Sidebar : noms lisibles, fusionné mis en avant (★)
- NER CamemBERT en local_files_only (aucun appel réseau)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Nouveau module das_filter.py avec 7 règles de rejet (trop court, chiffres,
lettre+chiffres OCR, mots concaténés/répétés, fragments non-médicaux) +
nettoyage newlines/ponctuation. Filtrage appliqué aux 3 sources de DAS :
trackare, regex et edsnlp. 31 tests unitaires.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Le block Jinja2 {% block scripts %} était à l'intérieur d'une balise
<script> parente, causant des scripts imbriqués invalides qui cassaient
le chargement des modèles Ollama et le bouton reprocess.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Filtre format_duration : affiche les temps en min/s au lieu de secondes brutes
- Bouton reprocess : spinner animé, compteur temps réel, confirmation immédiate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajout des règles d'exclusion symptôme (R00-R99) vs diagnostic précis (Chapitres I-XIV),
détection heuristique de sévérité CMA sur 25 racines CIM-10, et affichage des alertes
de codage dans le viewer Flask. 153 tests, 0 régression.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajoute une interface web Flask pour visualiser les dossiers médicaux CIM-10,
avec temps de traitement par PDF, sélecteur de modèle Ollama, et centralisation
de la config Ollama dans src/config.py.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Permet d'organiser les PDFs en sous-répertoires (un niveau) dans le
dossier d'entrée. Les sorties reflètent cette structure dans output/.
Les PDFs à la racine continuent de fonctionner comme avant.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pipeline complet de traitement de documents médicaux PDF :
- Extraction texte (pdfplumber) et classification (Trackare/CRH)
- Anonymisation multi-couche (regex + NER CamemBERT + sweep)
- Extraction médicale CIM-10 hybride : edsnlp (AP-HP) enrichit les
diagnostics, médicaments (codes ATC via Romedi) et négation,
avec fallback regex pour les patterns spécifiques
- Fix sentencepiece pinné à <0.2.0 pour compatibilité CamemBERT
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>