6ad82167bb
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.8 KiB
4.8 KiB
name, id, status, created, updated, priority, risk, related_issues, apps, trigger, schedule, expected_runtime_s, tags
| name | id | status | created | updated | priority | risk | related_issues | apps | trigger | schedule | expected_runtime_s | tags | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bbva-movimientos | 0003 | pending | 2026-05-16 | 2026-05-16 | high | high |
|
|
manual | 120 |
|
Goal
Caso de uso REAL con auth + datos sensibles. Probar persistencia local (duckdb en vault privado) + visualizacion en Metabase. Demuestra que el stack funciona para finanzas personales sin exfiltrar datos a la nube.
Pre-requisitos
- Vault
~/vaults/finanzas/existe + symlink enprojects/finanzas_personales/vaults/(crear projecto si no). - Chrome con sesion BBVA logueada manualmente (no automatizar login).
- Metabase local en docker (
auto_metabaseprovee). claudeCLI para AutoExtract.
Flow
- User abre Chrome + login BBVA + navega a "Movimientos cuenta principal".
- navegator_dashboard panel Pick: click sobre primera fila de la tabla movimientos. Verifica selector capturado.
- Panel AutoExtract: URL actual del tab. Click "Open & Analyze" (puede tardar, pagina compleja).
- Esperar schema propuesto. Refinar:
date(string DD/MM/YYYY o YYYY-MM-DD)concept(string)amount(float, parsea,->.)balance(float)
- Save recipe
bbva_movimientos.yaml. - Trigger manual SOLO (no schedule — requiere login activo).
- Sink: duckdb local en
~/vaults/finanzas/bbva.duckdb(tablamovimientos). - data_factory: node
bbva_movimientoskind=extractor + nodevault_finanzas_duckdbkind=database. - Transformer:
aggregate_by_group_py_datasciencepor mes -> tablamensual_summary. - Sink Metabase:
metabase_create_card_py_infracon SQL contra duckdb (via attachment Metabase si soporta, o via parquet export).
Acceptance
- Recipe creada y testeada.
- Run manual extrae >=30 movimientos (1 mes).
- DuckDB
~/vaults/finanzas/bbva.duckdbtablamovimientospoblada. - data_factory muestra ambos nodos con runs.
- Card Metabase creado con grafico "gasto mensual" via auto_metabase.
- Datos NO viajan a registry.organic-machine (verificar: solo
pc_locationsregistra que existe; el vault esta gitignored).
Telemetria esperada
function_stats.cdp_extract_recipe_py_pipelines: calls += 1 (manual).data_factory.runs: 1 entry status=success.auto_metabase: 1 card creado.
Definition of Done
Ver README.md seccion DoD + user-facing. Risk=high -> DoD strict obligatorio.
Generico
- Repetibilidad: re-login + extraccion mensual reproducible (no flaky por DOM changes inesperados).
- Observabilidad:
call_monitor.callsmuestra ejecucion sin valores;data_factory.runsregistra ambos nodos. - Error-path: sesion expirada → mensaje claro al usuario para re-login (no datos corruptos).
- Idempotencia: re-extraer mismo mes = upsert por
movimiento_id, 0 duplicados. - Secrets: credenciales BBVA solo en
pass bbva/login; vault~/vaults/finanzas/gitignored verificado. - Docs:
## Notascon onboarding + procedimiento de rotacion mensual. - Registry-first: recipe + persistencia duckdb usan funciones del registry.
- INDEX + status:
status: done+ INDEX + movido.
User-facing
- User-facing: usuario abre Metabase LOCAL :3000 → dashboard
Finanzas personales→ cardGasto mensualcon grafico actualizado. - User-facing repeat: misma URL manana muestra movimientos del mes hasta hoy; despues de re-login mensual, mes nuevo aparece automatico.
- User-facing onboarding: parrafo en
## Notas: "Para revisar gasto: abrir http://localhost:3000 (creds enpass metabase/local) → dashboardFinanzas personales. Re-login BBVA: lanzar navegator → recipebbva_movimientos→ click Run." - User-facing latencia: tras re-login + run manual, card actualizada en <2 min.
Custom (risk=high)
- No-leak:
fn syncNO sube duckdb (verificado:pc_locationsregistra path, sync no transmite bytes). - No-leak: recipe extrae solo campos minimos (fecha, concepto, importe, categoria); NO DNI, NO saldo, NO IBAN completo.
- No-leak: Metabase corre LOCAL; verificar
auto_metabase.app.mddeclaratags: [local-only]. - Rotacion: re-login mensual probado sin perder datos historicos.
- Red-team: ningun log/screenshot/traza del flow contiene valores sensibles (grep IBAN/saldo en
call_monitor.calls,data_factory.runs,~/.cache/).
Notas
- NO commitear
~/vaults/finanzas/(gitignored por defecto). - Si la sesion expira: re-login manual + re-run.
- Si BBVA cambia DOM: AutoExtract identifica nuevos selectors. Edit recipe + redeploy.
- Privacidad: revisar
call_monitor.callsque solo guardaargs_hash, NUNCA valores concretos de movimientos.