Ajoute source_page/source_excerpt à tous les types (biologie, imagerie,
traitements, actes CCAM, antécédents, complications). Convertit antecedents
et complications en types structurés (Antecedent/Complication) avec
validators backward-compat pour les vieux JSON. Étend _apply_source_tracking
à tous les éléments du dossier. Ajoute un endpoint /api/source-text/ et un
modal interactif dans le viewer avec surlignage du texte source.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- das_filter: regex anti-répétition gère les espaces entre mots concaténés
("VentilationVentilation Ventilation..." désormais rejeté)
- cim10_extractor: regex antécédents s'arrête à "Signes Vitaux" (ne capture
plus le tableau de surveillance)
- Nouveau _is_valid_antecedent() filtre noms de service, mots de surveillance
isolés, infos admin (RPPS), répétitions, Mode de vie
- 28 nouveaux tests (TestIsValidAntecedent + das_filter repetition)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Ajout threading.Lock sur _get_embed_model() pour empêcher les
chargements concurrents depuis ThreadPool(2) — élimine les erreurs
"meta tensor" et les doubles CUDA OOM
- Sentinelle _embed_failed évite les retries infinis après échec
- NotImplementedError ajouté aux exceptions capturées (meta tensor)
- Fallback CPU protégé par try/except avec _embed_failed
- QC: alertes_globales string wrappée en liste (évite itération par
caractère quand le LLM retourne une string au lieu d'une liste)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Le pipeline utilise désormais gemma3:12b (rapide) pour le codage CIM-10
et gemma3:27b (meilleur raisonnement) pour la contre-argumentation CPAM.
Configurable via OLLAMA_MODEL_CPAM et OLLAMA_TIMEOUT_CPAM.
Inclut aussi : traçabilité source/page DAS, niveaux CMA ATIH, sévérité,
page tracker PDF, améliorations fusion et filtres DAS.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- 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>
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>
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>
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>
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>