Files
rpa_vision_v3/docs/AUDIT_BDD_WORKFLOW_2026-05-10.md
Dom 5ea4960e65
Some checks failed
tests / Lint (ruff + black) (push) Successful in 1m50s
tests / Tests unitaires (sans GPU) (push) Failing after 1m50s
tests / Tests sécurité (critique) (push) Has been skipped
backup: snapshot post-démo GHT 2026-05-19
Backup état complet après enregistrement vidéo démo de bout en bout.
À utiliser comme point de référence pour la consolidation post-démo.

Changements majeurs de la session 18-19 mai :
- AIVA-URGENCE : page autonome avec preset URL + auto-focus chain
- Workflow Demo_urgence_3_db : merge linux_db + steps AIVA + pause humaine NoMachine
- Bypass LLM (static_result / static_text) dans replay_engine
  pour démos déterministes sans appel Ollama
- Fix api_stream:3013 — replay_paused au premier polling /next
- dag_execute : lift duration_ms vers top-level pour wait runtime
- NPM bypass auth /aiva-urgence/ via location ^~ (proxy_host/10.conf hors git)
- scripts/cancel-replays.sh — workaround Stop VWB qui ne purge pas la queue

Anchors visuels (468) forcés dans le commit pour garantir restorabilité.
DB workflows actuelle + ~12 .bak DB de la journée incluses.

Sujets identifiés pour consolidation post-démo (TODO) :
1. Bug VWB recapture anchor ne régénère pas le PNG
2. Léa client accumule état mémoire (restart périodique requis)
3. Stop VWB ne purge pas la queue serveur (lien manquant vers /replay/cancel)
4. Bug coord client mss tronqué 2560x60 → mapping Y cassé
5. delay_before/delay_after ignorés au runtime (fix partiel duration_ms)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 14:55:06 +02:00

10 KiB
Raw Permalink Blame History

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

CREATE TABLE workflows (
    id VARCHAR(64) PRIMARY KEY,
    name, description, tags_json, trigger_examples_json,
    created_at, updated_at, is_active, source,
    review_status, review_feedback, reviewed_at
);

CREATE TABLE steps (
    id VARCHAR(64) PRIMARY KEY,
    workflow_id REFERENCES workflows(id),
    action_type,            -- click_anchor, extract_text, key_combo, etc.
    "order" INTEGER,
    position_x, position_y, -- coords édition canvas (pas écran)
    parameters_json TEXT,   -- ⚠ blob JSON : by_text, vlm_desc, visual_anchor.bounding_box, …
    anchor_id REFERENCES visual_anchors(id),
    label
);

CREATE TABLE visual_anchors (
    id VARCHAR(64) PRIMARY KEY,
    image_path, thumbnail_path,
    bbox_x, bbox_y, bbox_width, bbox_height,  -- zone d'ancrage sur l'image source
    screen_width, screen_height,              -- résolution d'enregistrement
    description, target_text, ocr_description,
    confidence_threshold, capture_method, created_at
);

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)

parameters_json = {"by_text": "Examens cliniques"}
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)

parameters_json = {"by_text": "Imagerie"}
Champ ancre Valeur
anchor_id anchor_c3929b00816a_1778161050MÊ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)

parameters_json = {"by_text": "Notes médicales"}
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)

parameters_json = {
  "by_text": "Synthèse Urgences",
  "visual_anchor": {
    "anchor_id": "anchor_6a2591e7c51c_1778229076",
    "bounding_box": {"x": 580, "y": 423, "width": 192, "height": 47}
  }
}
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)

parameters_json = {
  "by_text": "Coller ou saisir le dossier patient",
  "visual_anchor": {
    "anchor_id": "anchor_8d1822fbaad3_1778164480",
    "bounding_box": {"x": 41, "y": 690, "width": 301, "height": 32}
  }
}
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_imageriele 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é

  1. Step 10 (Imagerie) : créer une ancre dédiée avec bbox restrictive (~ 700, 425, 130, 50 d'après l'app Easily)
  2. 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
  3. 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.