
Usá skill **hermes-arquitecto**. No implementes código de pr...
Prompt
Usá skill **hermes-arquitecto**. No implementes código de producto. ## Objetivo Diseñar (y dejar en el contrato de arquitectura correspondiente) un plan para una **UI de escritorio local** del **sincronizador Firebird → Supabase** del repo Guadalupe, de modo que el operador (Percy / IT) pueda ver el estado de las syncs, disparar una manual y seguir estándares de monitores de sincronización. ## Decisiones ya cerradas por el humano 1. **Alcance de despliegue:** solo en **la PC del operador (Percy)** — lab / PC de trabajo. No diseñar multi-instancia en servidores municipales ni PCs remotas. 2. **Forma de producto:** **tray nativo liviano** (Windows system tray / notification area). No Electron, no Tauri, no mini-web localhost salvo como alternativa rechazada documentada. 3. Preferir stack del mismo ecosistema del extractor (**Python** + bandeja nativa) para mantenimiento simple. ## Contexto del sistema actual (no reinventar) - Repo: Guadalupe (municipio Acebal). Stack destino: Postgres/Supabase. - Extractor en `scripts/extractor/`: - `extract.py` (ADM), `extract_tadese.py`, `extract_sueldos.py`, `extract_all.ps1` - Solo lectura Firebird; carga en Supabase (full TRUNCATE + COPY según README) - Auditoría: `auditoria.extractor_runs` (`rows_by_table`, `control_totals`) - Tarea programada Windows: `install-tarea.ps1` (~30 min, ventana diurna) — corre en **esta misma PC** - Config: `.env` raíz + `config.example.env` - Docs: `docs/architecture-agente-consultas.md` (aprobado), `docs/architecture.md` (monoproducto web — **no mezclar** esta UI en el producto municipal de cajeros) - Esta UI es **herramienta operativa local de sync** en la PC de Percy - Restricción agentes: no escribir en PCs remotas; diseño/código solo en este repo y la máquina local de trabajo ## Requisitos funcionales obligatorios (Must) 1. **Arranca minimizada en bandeja** (system tray). Icono en tray al inicio; ventana de detalle al click (o menú contextual del icono). 2. **Estado de sincronización en curso** (dominio/tabla, fase, filas si aplica, mensaje actual). 3. **Última sincronización exitosa** visible (timestamp, duración, dominios/tablas, filas, resumen de control). 4. **Botón / acción “Sincronizar ahora”** (manual), sin solaparse con una corrida en curso (mutex/lock con CLI y Task Scheduler). 5. Reutilizar el pipeline existente (`extract_*.py` / `extract_all`); no reescribir el extractor salvo justificación en el contrato. ## Ámbito de diseño (arquitecto) Cubrir y cerrar en doc hijo preferible: `docs/architecture-sincronizador-ui.md` (o path de orchestra si aplica), frontmatter `status: draft`, para no ensuciar el contrato del monoproducto. 1. Problema y usuarios: solo Percy en su PC (lab) 2. Shape: **tray nativo liviano Python** — detallar libs candidatas, proceso residente vs lanzado con login Windows, menú del icono + ventana de detalle 3. Datos: fuente de “última exitosa” (`auditoria.extractor_runs` vs log local); historial reciente 4. Auth/secretos: solo `.env` local; UI no expone connection strings; sin API de red 5. Concurrencia: tray + Task Scheduler + CLI en la **misma PC** — un solo lock 6. Costos free Supabase / sync full costosa — no abusar de manual 7. Fuera de alcance (incluye: no desplegar en otras PCs; no UI en monoproducto web) 8. Ready-when 9. Slices ordenados para **hermes-escritor** 10. Flujo ejemplo: “08:00 auto por tarea, 10:15 Percy abre tray, ve última OK, corre manual Tadese” ## Estándar de industria (Must / Should / Could) Recomendá y priorizá: - Estados: Idle / Running / Success / Failed / Partial / Stale - Historial de corridas (ok/fail, duración, error corto) - Detalle última falla + copiar log/path - Próxima sync programada (si se puede leer del schedule local o intervalo conocido) - Health liviano: Firebird + Postgres (sin full extract) - Notificaciones tray: falla y fin de corrida manual (configurable; sin spam en auto OK) - Lock anti-overlap (UI / CLI / Task Scheduler) - Alcance: all vs dominio (ADM / Tadese / Sueldos) - Dry-run / validar si ya existe en CLI - Versión extractor + path logs + retención logs locales ## Restricciones - No implementar; solo arquitectura draft hasta aprobación explícita del humano - No plan de deploy multi-PC; runbook máximo: “cómo arrancar el tray en esta PC al login” - No Supabase CLI link; MCP `user-supabase-guadalupe` solo si hiciera falta schema - Idioma doc y textos UI: español ## Entregable Doc de arquitectura con secciones hermes-arquitecto, incluyendo: - Tabla de decisiones (decision | why | alternativa rechazada) — **tray Python liviano** y **solo PC Percy** ya cerradas - Modelo de estados UI/corrida - Cómo se invoca el extractor (proceso hijo recomendado) - Concurrencia con Task Scheduler en la misma máquina - Superficie: icono tray + menú + ventana detalle mínima - Must/Should/Could industria - Slices + acceptance, Out of scope, Ready-when, Open questions Si algo no crítico falta, asumí y documentá supuestos. Una sola pregunta solo si bloquea el contrato. No auto-aprobar.