Files
rpa_vision_v3/docs/handoffs/2026-05-13_inventaire_anchors_interop.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

9.1 KiB
Raw Blame History

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 hybride
  • description ≈ 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 :

  1. Préparer le fichier codage_urgence.xlsx sur le bureau Windows (gabarit prêt avec entêtes : IPP, Décision, Résumé, Justification, etc.)
  2. Lancer VWB en mode enregistrement, viser machine 192.168.1.11
  3. Ancres à capturer dans l'ordre du scénario (à valider avec Dom) :
    • Ancre 1 : icône codage_urgence.xlsx sur le bureau (pour double-clic d'ouverture). ⚠️ rappel : double_click non 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
  4. 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_anchor du workflow source restent utilisées par Demo_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.