--- name: bbva-movimientos id: 0003 status: pending created: 2026-05-16 updated: 2026-05-16 priority: high risk: high related_issues: [0097, 0098] apps: - navegator_dashboard - dag_engine - data_factory - auto_metabase trigger: manual schedule: "" expected_runtime_s: 120 tags: [scraping, banking, auth-required, sensitive-data] --- ## 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 en `projects/finanzas_personales/vaults/` (crear projecto si no). - Chrome con sesion BBVA logueada manualmente (no automatizar login). - Metabase local en docker (`auto_metabase` provee). - `claude` CLI para AutoExtract. ## Flow 1. User abre Chrome + login BBVA + navega a "Movimientos cuenta principal". 2. navegator_dashboard panel Pick: click sobre primera fila de la tabla movimientos. Verifica selector capturado. 3. Panel AutoExtract: URL actual del tab. Click "Open & Analyze" (puede tardar, pagina compleja). 4. Esperar schema propuesto. Refinar: - `date` (string DD/MM/YYYY o YYYY-MM-DD) - `concept` (string) - `amount` (float, parsea `,` -> `.`) - `balance` (float) 5. Save recipe `bbva_movimientos.yaml`. 6. **Trigger manual SOLO** (no schedule — requiere login activo). 7. Sink: duckdb local en `~/vaults/finanzas/bbva.duckdb` (tabla `movimientos`). 8. data_factory: node `bbva_movimientos` kind=extractor + node `vault_finanzas_duckdb` kind=database. 9. Transformer: `aggregate_by_group_py_datascience` por mes -> tabla `mensual_summary`. 10. Sink Metabase: `metabase_create_card_py_infra` con 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.duckdb` tabla `movimientos` poblada. - [ ] 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_locations` registra 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. ## 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.calls` que solo guarda `args_hash`, NUNCA valores concretos de movimientos.