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>
9.1 KiB
Inventaire anchors — préparation interop Excel
Date : 2026-05-13
Contexte : Préparation du workflow Demo_urgence_2_interop (id wf_56bf8fa2d332_1778666923). Ce document inventorie les ancres VWB nécessaires pour remplacer les 5 steps « UI Codage Easily » supprimés par des étapes d'export Excel.
Source : table visual_anchors de visual_workflow_builder/backend/instance/workflows.db (150 ancres au total).
1. Structure d'un anchor (schéma visual_anchors)
CREATE TABLE visual_anchors (
id VARCHAR(64) NOT NULL PRIMARY KEY,
image_path VARCHAR(512),
thumbnail_path VARCHAR(512),
bbox_x FLOAT,
bbox_y FLOAT,
bbox_width FLOAT,
bbox_height FLOAT,
screen_width INTEGER,
screen_height INTEGER,
description TEXT,
confidence_threshold FLOAT,
created_at DATETIME,
capture_method VARCHAR(64),
target_text TEXT,
ocr_description TEXT
);
Champs et rôle
| Champ | Obligatoire | Rôle |
|---|---|---|
id |
✅ | Format observé : anchor_<12 hex>_<timestamp Unix s> (ex. anchor_c07eeb32f46e_1778497407) |
image_path |
✅ (de facto) | PNG plein du crop d'ancre. 100 % des 150 ancres l'ont. Chemin absolu vers visual_workflow_builder/backend/data/anchors/<id>_full.png |
thumbnail_path |
✅ (de facto) | PNG miniature, 100 % renseigné. Chemin <id>_thumb.png dans le même dossier |
bbox_x, bbox_y, bbox_width, bbox_height |
✅ | Coordonnées de la bounding box dans la résolution de référence. Toutes les ancres ont une bbox |
screen_width, screen_height |
✅ | Résolution de l'écran sur lequel l'ancre a été enregistrée. Permet la normalisation pour le matching à toute résolution |
description |
⚠️ Optionnel | Description textuelle, souvent « Button labeled "..." ». Vide pour 45/150 ancres |
confidence_threshold |
✅ | Seuil pour template matching. Valeur unique observée : 0.8 sur les 150 ancres |
created_at |
✅ | Timestamp ISO |
capture_method |
✅ | Valeur unique observée : screen_capture sur les 150 ancres |
target_text |
⚠️ Optionnel | Texte OCR vu autour de l'ancre au moment de la capture. Sert au matching by_text quand l'ancre est élargie. Vide pour 45/150 |
ocr_description |
⚠️ Optionnel | Souvent doublon de description. Vide pour 45/150 |
Liaison avec steps
steps.anchor_id ───▶ visual_anchors.id (FK, NULL-able)
Un step click_anchor typique réfère son ancre par anchor_id, ET embarque aussi une copie compactée dans parameters_json.visual_anchor (champs anchor_id, bounding_box). Le by_text est lui dans parameters_json.by_text au niveau step (pas dans l'ancre). Voir exemple ord 4 :
{
"visual_anchor": {
"anchor_id": "anchor_c07eeb32f46e_1778497407",
"bounding_box": {"x": 264, "y": 421, "width": 199, "height": 51}
},
"by_text": "Examens cliniques"
}
Distribution de la table
| Critère | Valeurs |
|---|---|
| Total anchors | 150 |
Fichiers sur disque (data/anchors/) |
370 PNGs (150 × 2 = 300 attendus, ~70 orphelins) |
capture_method |
100 % screen_capture |
confidence_threshold |
100 % 0.8 |
| Résolution de référence | 2560×1600 : 98 ancres • 1920×1080 : 49 • 320×180 : 3 (atypique) |
Sans target_text |
45 / 150 |
Sans description |
45 / 150 |
2. Ancres référencées par le workflow source Demo_urgence_2
| Ord | action_type | anchor_id | bbox (x,y,w,h) | OCR target_text (court) |
|---|---|---|---|---|
| 0 | extract_table | anchor_90aab00906b5_1778493250 |
(19, 505, 2529, 488) | Tableau liste patients (zone full liste IPP/NOM/Date…) |
| 2 | click_anchor | anchor_79c26617976d_1778493882 |
(30, 548, 101, 30) | 25003284 cellule IPP |
| 4 | click_anchor | anchor_c07eeb32f46e_1778497407 |
(264, 421, 199, 51) | onglet Examens cliniques |
| 6 | click_anchor | anchor_e31b93822caa_1778497559 |
(477, 429, 109, 35) | onglet Imagerie |
| 8 | click_anchor | anchor_b8bf39376b8a_1778497633 |
(612, 423, 183, 48) | onglet Notes médicales |
| 10 | click_anchor | anchor_e757dbf3f22f_1778497837 |
(802, 423, 214, 46) | onglet Synthèse Urgences |
| 13 | click_anchor | anchor_8d4b9cf0207c_1778575835 |
(833, 404, 230, 49) | onglet Codage |
| 15 | click_anchor | anchor_8e72328ac1f1_1778575896 |
(20, 381, 338, 131) | textarea Coller ou saisir le dossier patient |
| 18 | click_anchor | anchor_de15b10a848b_1778498168 |
(1350, 981, 619, 31) | textarea Justification de la décision |
Toutes en référence 2560×1600 (résolution Léa Windows actuelle).
Pattern observé pour un click sur libellé simple (cas ord 4 — Examens cliniques) :
- Crop ~200×50 autour du libellé
target_text≈ contexte OCR voisin (libellés alentours) pour aider le matcher hybridedescription≈ libellé propre (« Button labeled "Examens cliniques" »)confidence_threshold = 0.8
3. Ancres existantes pour le besoin interop Excel
Requête effectuée sur target_text, description, ocr_description avec les patterns : excel, .xlsx, xls, codage_urgence, bureau, desktop.
Résultat : aucune ancre trouvée.
| Besoin interop | Ancre existante ? | Action requise |
|---|---|---|
| Icône bureau Windows (générique, pour ouvrir l'Explorateur ou poser le fichier sur bureau) | ❌ | À créer en enregistrement VWB |
| Cellule Excel (entête ou première cellule de saisie) | ❌ | À créer — dépend du gabarit du .xlsx |
Fichier codage_urgence.xlsx (icône bureau ou ligne Explorateur) |
❌ | À créer — le fichier doit d'abord exister sur le bureau Windows |
| Bouton « Enregistrer » Excel | ❌ | À créer si on passe par Ctrl+S, sinon pas nécessaire |
| Onglet/bouton Excel « Fichier » ou « Ouvrir » | ❌ | À créer seulement si scénario UI complet (vs server-side openpyxl) |
4. Procédure de création d'une ancre
Option A — Côté serveur (recommandée si pure I/O fichier)
Si l'export Excel est réalisé via une action serveur (openpyxl côté Linux, fichier déposé sur partage SMB / synchronisé via OwnCloud), aucune ancre Léa Windows n'est nécessaire. Le workflow se termine après llm_generate justification_t2a par un step serveur de type à définir (ex. nouveau export_excel_row à câbler, ou via _handle_* existant).
Avantages :
- Pas d'ancres à enregistrer
- Pas de dépendance à la résolution écran
- Robuste, déterministe
Option B — Côté UI Léa Windows (si la démo doit montrer Excel ouvert)
Si on veut visuellement voir Léa ouvrir Excel et coller les données, il faut enregistrer les ancres via le mode enregistrement VWB sur la machine cible (Windows 192.168.1.11, résolution 2560×1600 cohérente avec les 98 ancres existantes du workflow source).
Étapes type :
- Préparer le fichier
codage_urgence.xlsxsur le bureau Windows (gabarit prêt avec entêtes : IPP, Décision, Résumé, Justification, etc.) - Lancer VWB en mode enregistrement, viser machine 192.168.1.11
- Ancres à capturer dans l'ordre du scénario (à valider avec Dom) :
- Ancre 1 : icône
codage_urgence.xlsxsur le bureau (pour double-clic d'ouverture). ⚠️ rappel :double_clicknon implémenté côté Léa, fallback = 2 click rapprochés ou key_combo["alt", "f4"]après ouverture par défaut. - Ancre 2 : cellule cible de la première colonne (IPP) — varie selon le gabarit
- Ancre 3 : éventuel bouton « Enregistrer » ou ancre de validation
- Ancre 1 : icône
- Pour chaque ancre : laisser VWB capturer le crop, vérifier que
target_text,description, bbox sont cohérents avant validation
Champs minima à fournir lors de la création
| Champ | Valeur cible |
|---|---|
id |
auto-généré (anchor_<hex>_<ts>) |
image_path + thumbnail_path |
auto-générés par VWB |
bbox_x/y/width/height |
définis par la sélection visuelle de l'utilisateur |
screen_width/height |
2560 × 1600 (cohérence avec ancres existantes) |
confidence_threshold |
0.8 (valeur unique observée dans la table) |
capture_method |
screen_capture |
target_text |
OCR autour de l'ancre — auto-rempli par VWB |
description |
optionnel, ex. « Icône fichier codage_urgence.xlsx sur le bureau » |
5. Récapitulatif
- Structure d'ancre : 15 champs, dont 9 obligatoires (id, image_path, thumbnail_path, 4 bbox, 2 résolutions de réf, confidence, capture_method) et 4 fortement recommandés (description, target_text, ocr_description, created_at). Référence dans
steps.anchor_id. - Réutilisable directement : les 8 ancres
click_anchordu workflow source restent utilisées parDemo_urgence_2_interop(anchor_id partagé, FK). - À créer : 0 si option A (export Excel server-side via openpyxl) ; 2 à 4 ancres si option B (Léa ouvre et remplit Excel à l'écran).
Décision attendue de Dom : choisir entre option A (server-side) ou B (UI Léa) avant de poursuivre la conception des steps Excel.