Audit BDD workflow Urgence_aiva_demo — 2026-05-10
Heure d'audit : 2026-05-10 15:42 CEST.
Audit factuel post-dry-run 15:08 (replay_free_1957dd59), pas de modification BDD.
Workflow_id : wf_a38aeebea5e6_1778162737
BDD : visual_workflow_builder/backend/instance/workflows.db (SQLite 3.x).
Périmètre : steps 8, 10, 12, 14, 18 (les blocages observés au runtime).
1. Schéma BDD pertinent
Pas de colonne resolve_order, verify_params, region_hint dans la BDD : tout passe par parameters_json (champ texte JSON libre côté steps) si présent, sinon defaults serveur.
2. Métadonnées workflow
| Champ |
Valeur |
| name |
Urgence_aiva_demo |
| description |
Démo GHT Sud 95 — workflow simplifié aligné sur maquette aiva-vision (1 DPI textarea + Justification + Analyser). Construit le 7 mai 2026. |
| source |
manual |
| created_at |
2026-05-07 16:05:37 |
| updated_at |
2026-05-07 16:05:37 |
| is_active |
1 |
| Total steps |
22 (DB) — 23 dans le replay (1 wait_before_start ajouté serveur) |
3. Dump des steps problématiques
Step 8 — Onglet Examens cliniques (action_type=click_anchor)
| Champ ancre |
Valeur |
| anchor_id |
anchor_c3929b00816a_1778161050 |
| bbox (x, y, w, h) |
(6, 467, 2538, 643) — TOUTE LA PAGE |
| image source |
anchor_c3929b00816a_1778161050_full.png |
| screen_width × height |
2560 × 1600 |
| target_text |
« Motif d'admission Examens cliniques Imagerie Notes médicales Synthèse Urgences Codage > Examens Cliniques Questionnaire Score Réponse significative … (~600 chars) » |
Step 10 — Onglet Imagerie (action_type=click_anchor)
| Champ ancre |
Valeur |
| anchor_id |
anchor_c3929b00816a_1778161050 ⚠ MÊME ANCRE QUE STEP 8 |
| bbox |
(6, 467, 2538, 643) — toute la page |
| target_text |
identique à step 8 (la même chaîne contenant tous les tabs) |
Step 12 — Onglet Notes médicales (action_type=click_anchor)
| Champ ancre |
Valeur |
| anchor_id |
anchor_0438bd2d9bdd_1778161174 |
| bbox (x, y, w, h) |
(444, 424, 146, 48) — petite zone tabs |
| target_text |
« ine Né(e) le 14/03/1947 I 77 ans es Imagerie Notes médical J scan, echograj phie » (OCR brut tronqué) |
Step 14 — Onglet Synthèse Urgences (action_type=click_anchor)
| Champ ancre |
Valeur |
| anchor_id |
anchor_6a2591e7c51c_1778229076 |
| bbox (x, y, w, h) |
(580, 423, 192, 47) — petite zone tabs |
| target_text |
« à 14/03/1947 I 77 ans I I Sexe F Arrivé ie Notes médicales Synthèse Ur » (OCR brut tronqué) |
Step 18 — Cliquer textarea DPI (action_type=click_anchor, page codage.html)
| Champ ancre |
Valeur |
| anchor_id |
anchor_8d1822fbaad3_1778164480 |
| bbox (x, y, w, h) |
(41, 690, 301, 32) — petite zone textarea |
| target_text |
« Coller ou saisir le dossier patient Coller ou saisir le dossier patient » (placeholder italique gris) |
4. Tableau d'analyse — contrainte BDD vs laxiste
| Step |
Cible |
Ancre restrictive ? |
OCR contraint à zone ? |
resolve_order ? |
verify_params ? |
Risque BDD |
| 8 Examens cliniques |
tab Easily |
❌ bbox = full page (2538×643) |
❌ pas de region_hint |
❌ default serveur |
❌ default pHash |
élevé : OCR libre matche n'importe quelle occurrence du mot |
| 10 Imagerie |
tab Easily |
❌ bbox = full page (même ancre que step 8) |
❌ |
❌ |
❌ |
élevé : idem |
| 12 Notes médicales |
tab Easily |
✅ bbox 146×48 zone tabs |
⚠ contraint via anchor mais target_text imprécis (OCR tronqué) |
❌ |
❌ |
moyen |
| 14 Synthèse Urgences |
tab Easily |
✅ bbox 192×47 zone tabs |
⚠ idem step 12 |
❌ |
❌ |
moyen |
| 18 textarea DPI |
placeholder italique |
✅ bbox 301×32 textarea |
⚠ contraint mais cible non-OCRisable au runtime |
❌ |
❌ |
élevé : placeholder gris non rendu pour OCR |
Constats généraux :
- Aucun step n'a de
resolve_order explicite → tout passe par la cascade par défaut serveur (OCR-DIRECT → template → VLM)
- Aucun step n'a de
verify_params explicite → VERIFY = pHash global laxiste « any-change »
- Steps 8 et 10 partagent la même ancre
anchor_c3929b00816a_1778161050 (anomalie d'enregistrement, ou choix volontaire mais alors la cible n'est pas zonée)
5. Diagnostic par step (BDD vs runtime observé)
Step 8 — Examens cliniques
- BDD intention : OCR libre sur full page, by_text="Examens cliniques"
- Runtime : clic à (590, 447) — dans la rangée tabs Easily, OK
- Diagnostic : BDD imprécise mais runtime correct par chance — docTR a renvoyé la première occurrence top-down qui se trouve être le tab. Fragile.
Step 10 — Imagerie
- BDD intention : MÊME ancre full page, by_text="Imagerie"
- Runtime : clic à (606, 156) — bandeau Edge en haut, ❌ raté
- Diagnostic : BDD fautive — OCR libre sur la même grande zone retourne une occurrence "Imagerie" différente cette fois (probablement le titre Edge ou un breadcrumb URL). Pas de chance comme step 8.
- À ré-enregistrer : avec bbox restreinte à la rangée tabs (~y 425-475)
Step 12 — Notes médicales
- BDD intention : ancre bbox 146×48 zone tabs, target_text imprécis
- Runtime : clic à (516, 447) résolu par template_matching score 0.998
- Diagnostic : BDD acceptable par chance — la bbox est petite, template_matching a matché OK. Mais
target_text enregistré pointe sur « Imagerie Notes médical » (cf. REPLAY_BLOCAGE_NOTES_MEDICALES_2026-05-08.md §6 anomalie 1 : la bbox est décalée d'un cran à gauche, le crop montre Imagerie au lieu de Notes médicales).
- À ré-enregistrer après-démo pour fiabilité.
Step 14 — Synthèse Urgences
- BDD intention : ancre bbox 192×47 zone tabs, target_text imprécis
- Runtime : clic à (689, 446) — REPORT success=True via template
- MAIS :
t_synthese extrait à 1110 chars identique en taille à t_imagerie → le tab n'a probablement pas vraiment basculé, le panneau de contenu n'a pas changé
- Diagnostic : BDD imprécise + VERIFY laxiste laisse passer un faux positif — impossible de distinguer "tab Synthèse activé" vs "tab Synthèse cliqué mais l'app a ignoré l'event" avec le pHash global.
- REPLAY_BLOCAGE_NOTES §6 anomalie 1 dit aussi que cette bbox crop "Notes médicales" pas "Synthèse Urgences" → ré-enregistrer.
Step 18 — Cliquer textarea DPI
- BDD intention : ancre bbox 301×32, target_text = placeholder italique « Coller ou saisir le dossier patient »
- Runtime : OCR-DIRECT NON TROUVÉ, VLM échoué (21s), template échoué, retry échoué → mode apprentissage humain (timeout 120s) → final
target_not_found
- Diagnostic : BDD fautive structurellement — le placeholder italique gris d'un
<input>/<textarea> n'est pas rendu de la même façon dans le DOM/canvas que du texte normal. docTR ne le détecte pas. VLM ne le voit pas non plus. Le template matching dépend de la similarité pixel exacte, qui peut varier (focus, couleur).
- À ré-enregistrer : cliquer sur la zone textarea elle-même (pas le texte placeholder) lors de l'enregistrement → ancre image = la zone visible du textarea + bbox restrictive. Idéalement, ajouter un label visible (h2 "DPI complet" au-dessus) sur la maquette
codage.html qui sert de cible OCR fiable.
6. Recommandations à débattre (post-démo)
Steps à ré-enregistrer en priorité
- Step 10 (Imagerie) : créer une ancre dédiée avec bbox restrictive (~ 700, 425, 130, 50 d'après l'app Easily)
- Step 18 (textarea DPI) : changer la cible — soit cliquer sur un label visible au-dessus du textarea, soit ajouter un repère visuel non-placeholder dans la maquette
- Steps 12 et 14 : à reposer en VWB record session pour éliminer les anomalies de bbox décalées d'un cran
Améliorations BDD/serveur à proposer (post-démo, à débattre)
- Ajouter un champ
verify_strategy dans parameters_json avec valeurs : phash_global, region_phash, ocr_title, dom_class (pour les pages web maquettes)
- Ajouter un champ
region_hint dans parameters_json permettant de contraindre l'OCR à une zone même quand l'ancre est large (par exemple {"region_hint": {"y_min": 0.25, "y_max": 0.32}} pour la barre tabs)
- Forcer
resolve_order explicite à l'enregistrement plutôt que de laisser le default serveur (dette : le default est implicite et peut changer)
Constat fondamental
La BDD ne contient pas de garde-fous explicites contre les ambiguïtés OCR. Quand by_text est un mot court qui apparaît plusieurs fois sur la page (« Imagerie » dans le titre Edge + dans la barre tabs + dans le contenu), rien n'empêche docTR de matcher la mauvaise occurrence. Le seul filtre est l'ordre top-down de docTR, qui est implicite et fragile.
Pas de modification BDD ni de code dans cet audit. Document factuel à débattre par Dom post-démo.