212875ed0d
- .claude/agents/fn-orquestador/SKILL.md - .claude/commands/fn_claude.md - .claude/rules/INDEX.md - .claude/rules/cpp_apps.md - .claude/rules/ids_naming.md - CHANGELOG.md - apps/dag_engine/README.md - apps/dag_engine/api.go - apps/dag_engine/dags_migrated/example.yaml - apps/dag_engine/dags_migrated/example_lineage_tracking.yaml - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
70 lines
2.7 KiB
Markdown
70 lines
2.7 KiB
Markdown
---
|
|
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.
|