Files
rpa_vision_v3/docs/HANDOFF_SESSION_20260506.md
2026-05-09 11:32:52 +02:00

12 KiB

Handoff session 2026-05-06 — démo GHT Sud 95 (J-2)

Auteur : Claude (session précédente, contexte saturé) Pour : Claude (nouvelle session) Démo : dans ~2 jours, pour DSI Carvella + DIM/TIM/DG GHT Sud 95 Branche git : feature/feedback-bus


🎯 Objectif de la nouvelle session

Finir la prep démo : terminer corrections data.js + structurer onglet Imagerie + accompagner Dom sur l'enregistrement workflow Urgence_unit + tests E2E.


📊 État actuel — ce qui est FAIT

Code & infrastructure

  • Maquette aiva-vision déployée : https://urgence.labs.laurinebazin.design/codage.html?id=XXX + service systemd rpa-mockup-easily (Flask, port 8765)
  • Backend /api/analyse branché sur core.llm.t2a_decision.analyze_dpi (qwen2.5:7b par défaut)
  • Maquette codage.html refondue avec layout aiva-vision 2 colonnes + auto-trigger paste
  • 5e onglet "Imagerie" ajouté côté UI (HTML + JS) — mais data.js pas encore alimenté (sauf le champ vide qui est traité comme "Aucun examen")
  • Pipeline Léa orchestrateur dans agent_chat/urgences_orchestrator.py (NLP gemma3:1b + thread + boucle + synthèse) — fonctionne en bout-en-bout, validé matin du 2026-05-05
  • extract_table backend dans core/llm/ocr_extractor.py + agent_v0/server_v1/replay_engine.py (regex IPP ^25\d{6}$) — testé OK 11/11 sur capture liste patients
  • Préchargement EasyOCR au boot du streaming server (3.8s, log confirmé) — fini le cold start qui bloquait 2 min
  • Templating {{patient_id}} sur by_text dans replay_engine + variables runtime initiales via ReplayRequest.variables
  • Agent V1 mis à jour sur PC Windows (32 fichiers .py, hashes vérifiés, compile clean) — 2026-05-04
  • Catalogue de réflexes (gesture_catalog.py) utilisé par l'orchestrateur (composition réflexes + workflows appris, pas de hardcode)

Bench LLM — 18 modèles testés

  • Rapport complet : docs/BENCH_T2A_DECISION_11DOSSIERS.md
  • 🥇 gemma3:27b-cloud : 8/11 (73%) sur vérité-terrain corrigée — recommandé démo
  • 🥈 qwen3:8b : 7/11 (64%) — backup local, 7.6s/dossier, 5 GB → tient large dans 12 GB GPU
  • ⚠️ Bench fait sur DPI partiellement fictifs (cf. revue Pauline) → ré-évaluer après corrections data.js

Documentation produite

  • docs/BENCH_T2A_DECISION_11DOSSIERS.md — bench 18 modèles
  • docs/BENCH_MINI_LLM_NLP.md — bench gemma3:1b vainqueur (NLP commande chat)
  • docs/REVUE_DOSSIERS_PAULINE.md — revue 11 dossiers vs captures (fait par sous-agent, avec quelques inexactitudes : "médecins du sport 0559447669" remonté comme inventé, en réalité présent dans la capture)
  • docs/POINTS_SUSPECTS_PAULINE.md — synthèse pour visio Pauline (méthodo : on ne signale PAS les noms anonymisés, on focus hallucinations cliniques + constantes + imagerie)
  • docs/MAIL_PAULINE_AVANT_VISIO.md — mail-template à adapter

Mémoires importantes (~/.claude/.../memory/)

  • feedback_anonymisation_stricte.md — règle absolue : anonymiser = remplacement chirurgical des identités, JAMAIS réécrire le contenu clinique. Erreur historique : "anhydrose" vs "ankylose" sur 25003475
  • feedback_lea_reflexes_catalog.md — utiliser gesture_catalog.py, ne pas hardcoder Win+R+type+Enter
  • feedback_auth_dialogs_runtime.md — Windows Hello / Basic Auth bloquent le replay, anticiper avant chaque démo client
    • toutes les feedbacks existantes dans MEMORY.md

Corrections data.js DÉJÀ FAITES

  1. 25003475 (UHCD aura migraineuse) — 3 hallucinations cliniques graves corrigées :
    • symptomes_orientation : "Migraines de membre" → "Faiblesse de membre"
    • notes_paramedicales[0] (03:09) : "Pansement compressif possible si perfusé" → "--> RAD possible. dé perfusé"
    • notes_medicales[1] (Histoire maladie) : "anhydrose au talon supérieur" → "ankylose du membre supérieur gauche"
  2. 25151530 (Forfait colique néphrétique) :
    • "TDM sans injection" → "TDM avec injection" (2 occurrences)
    • Histoire de la maladie enrichie avec ATCD RGO + TTT ESOMEPRAZOLE
  3. server.py VERITES_TERRAIN : 25003284 reclassé FORFAIT_URGENCE (sortie domicile en 3h37, J12.1 VRS)
  4. app.js signes_vitaux : adapté pour itérer sur N colonnes dynamiquement (au lieu de v1/v2 fixe). MAIS data.js a toujours 2 cols partout → rétrocompatible.

Ce qui RESTE à faire (priorité décroissante)

🔴 PRIORITÉ 1 — corrections data.js (1-2h)

Constantes vitales tronquées (4 dossiers)

Captures Pauline source : /home/dom/Téléchargements/Exemples Dossiers UHCD - Forfaits (1)/Exemples Dossiers UHCD - Forfaits/[UHCD|FORFAITS]/<IPP>/

IPP Actuel data.js Capture Cols à ajouter Priorité
25003364 2 cols (21:02 + 14:45) 4 cols 19:45 (volume miction 700) + 18:44 (T 71, FC 87, PA 168/92, débit O2 2L) 🟠
25005866 2 cols (10:56 + 23:01) 5 cols 08:20, 06:25, 02:00 (surveillance neuro post-trauma) 🔴 grave
25048485 2 cols (12:09 + 10:52) 5 cols 10:58, 10:54, 10:53 + ligne PA Latéralité 🔴 grave
25151530 2 cols (06:41 + 03:25) 7 cols 08:15, 07:37, 06:00, 04:45, 04:01 (évolution douleur EN: 7→0→5→10→6→4) 🔴 très grave

Format à adopter : passer de {item, v1, v2} à {item, v1, v2, v3, v4, ...}. app.js itère déjà dynamiquement sur N cols.

Imagerie à structurer (7 dossiers)

Le champ imagerie: [{date, type, par, role, horodatage, contenu}, ...] est lu par renderImagerie() dans app.js (déjà branché).

IPP CR à déplacer Source actuelle data.js
25003284 RX thorax (signé Dr LAURENT Charles) notes_medicales[3]
25003364 RX pulmonaire (foyer condensation lobaire D) notes_medicales[0]
25003475 Scanner cérébral sans injection (normal) notes_medicales[0]
25005866 3 examens : TDMc 01:53 + RX thorax 01:54 + TDMc contrôle 10:18 notes_medicales[1, 2]
25012257 TDM AP sans injection (allergie iode) + ECG notes_medicales[0]
25056615 Scanner AP avec injection (CR complet) notes_medicales[0]
25151530 Scanner AP avec injection notes_medicales[1]

Règle : extraire le CR du notes_medicales (ou autre source), le placer dans imagerie mot pour mot (procédure stricte). Le retirer de notes_medicales si entièrement déplacé OU laisser une mention "voir onglet Imagerie".

Enrichir 25048485 (2 motifs CTCG)

Captures montrent 2 motifs distincts le même jour 28/02/2025 : 1ère CTCG le matin 9h15, 2e CTCG l'après-midi (récidive). data.js modélise UN seul passage 10:40→17:30 → cohérent (le patient a été gardé entre les 2). Action : enrichir l'histoire de la maladie pour mentionner explicitement les 2 épisodes (matin + après-midi). Pas une question Pauline — juste clarification de présentation.

🟠 PRIORITÉ 2 — re-bench T2A après corrections (30 min)

Après corrections data.js, relancer bench_t2a_cloud.py (top 5 modèles seulement) pour avoir les chiffres réels. Les scripts existent dans /tmp/bench_t2a*.py. Mettre à jour BENCH_T2A_DECISION_11DOSSIERS.md.

🟠 PRIORITÉ 3 — workflow Urgence_unit (Dom, sur PC Windows)

Dom enregistre le workflow VWB qui traite 1 dossier de bout-en-bout :

  1. Click sur lien IPP {{patient_id}} (variabilisé)
  2. Navigation dans les onglets dossier (Motif, Examens, Imagerie, Notes médicales, Synthèse)
  3. extract_text par onglet → DPI consolidé
  4. Click "Coder >" → arrive sur aiva-vision
  5. type_text DPI dans #dpi-input (auto-trigger analyse)
  6. Wait + extract_text décision aiva-vision
  7. Click "Liste patients" pour revenir

Tu peux le faire MAINTENANT (data.js stable, aiva-vision opérationnelle, agent V1 à jour). Mais attendre que les corrections data.js soient finies est plus sûr (sinon les anchors visuels peuvent se déplacer si la table signes vitaux gagne des colonnes).

🟡 PRIORITÉ 4 — visio Pauline (pour les questions ouvertes)

Pauline doit répondre à 4-5 questions critiques :

  1. 25048485 : confirmer 2 épisodes le même jour ✓ (pas urgent, je gère seul)
  2. 25005866 : "médecins du sport 0559447669" — Pauline avait dit inventé, le sous-agent a vu présent → contradiction à trancher
  3. 25003284 étiquette workflow : "UHCD asthme" → "Pneumopathie VRS" ?
  4. Onglet Imagerie : niveau de détail attendu

Mail-template prêt : docs/MAIL_PAULINE_AVANT_VISIO.md

🟡 PRIORITÉ 5 — Tests E2E (J-1, dernier jour)

10 répétitions du scénario démo complet (chat Léa "traite-moi 3 dossiers" → orchestration → boucle → synthèse).


🚨 Contraintes critiques

  1. Procédure d'anonymisation stricte (cf. feedback_anonymisation_stricte.md) : pour toute correction data.js, NE JAMAIS reformuler/synthétiser le contenu clinique. Remplacer chirurgicalement les identités/dates uniquement. Erreur historique grave : "anhydrose"/"ankylose".

  2. Catalogue de réflexes (cf. feedback_lea_reflexes_catalog.md) : utiliser gesture_catalog.py pour les raccourcis natifs (Win+R, etc.), ne pas hardcoder.

  3. Pas de cloud LLM dans le projet sauf pour la démo (Ollama Cloud via clés Dom). Prod 100% local.

  4. Captures Pauline = source de vérité : /home/dom/Téléchargements/Exemples Dossiers UHCD - Forfaits (1)/... (8 dossiers) + /tmp/captures_pauline_3manquants/ (3 dossiers extraits du docx). En cas de conflit avec rapport revue, la capture prime.

  5. Noms substitués = anonymisation volontaire : ne pas signaler comme erreur, ne pas chercher à les réaligner avec captures.


📁 Fichiers clés à connaître

  • /home/dom/ai/rpa_vision_v3/docs/clients/ght_sud_95/mockup_easily_assure/data.js — base 11 dossiers (~2100 lignes)
  • /home/dom/ai/rpa_vision_v3/docs/clients/ght_sud_95/mockup_easily_assure/server.py — backend Flask + /api/analyse + VERITES_TERRAIN
  • /home/dom/ai/rpa_vision_v3/docs/clients/ght_sud_95/mockup_easily_assure/app.js — rendering frontend (signes_vitaux dynamique appliqué)
  • /home/dom/ai/rpa_vision_v3/agent_v0/server_v1/api_stream.py — streaming server (boot avec préchargement EasyOCR)
  • /home/dom/ai/rpa_vision_v3/agent_chat/urgences_orchestrator.py — orchestrateur démo
  • /home/dom/ai/rpa_vision_v3/core/llm/t2a_decision.py — décision T2A LLM
  • /home/dom/ai/rpa_vision_v3/core/llm/ocr_extractor.pyextract_text_from_image + extract_table_from_image

🔧 Commandes utiles

# Vérifier syntaxe data.js
node -e "var fs=require('fs'); var c=fs.readFileSync('docs/clients/ght_sud_95/mockup_easily_assure/data.js','utf-8'); c=c.replace(/^const /gm, 'var '); var s={}; require('vm').runInContext(c, require('vm').createContext(s)); console.log('OK', Object.keys(s.DOSSIERS).length);"

# Restart streaming server
cd /home/dom/ai/rpa_vision_v3 && ./svc.sh restart streaming

# Restart maquette
sudo systemctl restart rpa-mockup-easily

# Re-bench T2A (après corrections data.js)
node /tmp/extract_dpi.js > /tmp/dpis.json
/home/dom/ai/rpa_vision_v3/.venv/bin/python /tmp/bench_t2a_cloud.py

⏱ Timeline démo

  • Aujourd'hui : finir corrections data.js + visio Pauline
  • Demain (J-2 / 2026-05-07) : enregistrement workflow Urgence_unit sur PC Windows
  • J-1 (2026-05-08) : tests E2E répétés
  • Jour J : démo GHT Sud 95

📌 Ce qui marche aujourd'hui (pas casser)

  • Maquette aiva-vision visible et fonctionnelle
  • Pipeline orchestrateur opérationnel (testé matin 05/05)
  • Préchargement EasyOCR opérationnel (3.8s au boot)
  • Bench complet avec rapport
  • Mail-template Pauline prêt

Ne pas relancer les services systemd sans raison, ne pas modifier server.py sauf pour les corrections explicites.