Initial commit: propuesta y documentaci贸n BALAM

This commit is contained in:
Johann
2026-05-27 09:03:37 -06:00
commit 8a83d5729c
12 changed files with 2677 additions and 0 deletions
+251
View File
@@ -0,0 +1,251 @@
# Plan de Ejecución — Balam MVP (6 semanas · medio tiempo)
Documento interno (tuyo). Mapea las fases de la propuesta a tareas concretas, con desglose de horas y entregables verificables. Sirve para tu seguimiento semanal y para sustentar tus facturas.
---
## Parámetros del proyecto
- **Dedicación:** medio tiempo, ~20 h/semana (flex hasta 25 h en semanas pico)
- **Calendario:** 6 semanas
- **Budget total:** 110 140 horas
- **Tarifa:** 600 MXN/h + IVA
- **Total estimado:** $66,000 $84,000 MXN
## Cómo usar este documento
- Cada fase tiene **tareas atómicas** con estimación de horas (rango).
- Al cerrar una tarea, registra horas reales en columna `real`.
- Si una tarea excede 130% del estimado máximo, **paras y avisas** al cliente antes de continuar.
- Cada fase termina con un entregable demoable + actualización del Linear/Notion.
## Expectativa de horas con Claude Code
Los rangos están calibrados para **caer cerca del extremo bajo** trabajando con Claude Code como asistente. El rango alto es la holgura para sorpresas en:
- Formato del export de BIND (puede ser distinto a lo esperado)
- Parsing de PDFs bancarios (calibración de prompts)
- IBC Bank Texas (formato menos conocido)
- Integración Stripe con flujo de webhook
## Disciplina de scope (crítica a medio tiempo)
Como es un MVP de 6 semanas con una sola persona a medio tiempo, **decir que no es la habilidad más importante**. Default respuesta a "podríamos también...":
> "Buena idea. Lo dejo anotado para Fase 2 para no comprometer la entrega del MVP en 6 semanas."
Cualquier cambio de alcance en mitad de fase requiere Change Request escrito y aprobado.
---
## Fase 0 — Discovery + Setup (Semana 1 · 18-22 h)
| # | Tarea | Min | Max | Real |
|---|---|---|---|---|
| 0.1 | Kick-off con contacto técnico + gerente administrativo | 2 | 2 | |
| 0.2 | Inspección formato de export de BIND (clientes, facturas, catálogo) | 2 | 3 | |
| 0.3 | Recolección y análisis de 2-3 PDFs reales por banco (Banorte/BBVA/IBC) | 2 | 3 | |
| 0.4 | Validación de viabilidad de Claude API sobre los PDFs reales | 1 | 2 | |
| 0.5 | Confirmación de cuenta Stripe MX + revisión de fee structure | 1 | 1 | |
| 0.6 | Setup Azure: App Service + Postgres + Blob Storage + Key Vault | 2 | 3 | |
| 0.7 | Setup repo monorepo + CI/CD con deploy a Azure | 2 | 3 | |
| 0.8 | Setup Claude Code: CLAUDE.md, settings.json, gitleaks pre-commit, skills base | 2 | 2 | |
| 0.9 | docs/conventions.md + domain-glossary.md (vocabulario fiscal CFDI + glosario interno BIND) | 1 | 2 | |
| 0.10 | Recepción y aplicación de manual de marca a maquetas iniciales | 1 | 1 | |
| 0.11 | Documento de supuestos validados + plan refinado de Fases 1-4 + ADRs iniciales | 2 | 2 | |
| **Total Fase 0** | | **18** | **22** | |
**Entregables Fase 0:**
- `docs/discovery.md` con hallazgos
- `docs/supuestos.md` confirmado
- `docs/adr/0001-0009.md`
- Repo + CI/CD + staging Azure accesible
- `CLAUDE.md` + `.claude/` configurado
- Conventions + glosario de dominio
- Plan refinado presentado a stakeholders
---
## Fase 1 — Plataforma + Sincronización con BIND (Semanas 2-3 · 30-38 h)
### Semana 2 (15-19 h)
| # | Tarea | Min | Max | Real |
|---|---|---|---|---|
| 1.1 | Schema Prisma: tenant, user, role, audit_log, exchange_rate | 2 | 3 | |
| 1.2 | Auth (Better-auth) con login email + roles (Finanzas/Dirección/Admin) | 3 | 4 | |
| 1.3 | Layout base frontend (Next.js + shadcn): login, sidebar, branding aplicado | 3 | 4 | |
| 1.4 | Módulo Catálogo: customer + UI de gestión + bandera auto_reminder_enabled | 3 | 4 | |
| 1.5 | Audit log universal (middleware Prisma) | 2 | 2 | |
| 1.6 | Cron diario TC del DOF + cache | 2 | 2 | |
### Semana 3 (15-19 h)
| # | Tarea | Min | Max | Real |
|---|---|---|---|---|
| 1.7 | Schema invoice + invoice_line (espejo de BIND) | 2 | 2 | |
| 1.8 | Importador de archivo BIND: parser + validación + dedupe | 4 | 5 | |
| 1.9 | UI de importación: upload, preview de deltas (dry-run), confirmación | 3 | 4 | |
| 1.10 | Listado de facturas con filtros, búsqueda, drill-down a detalle | 3 | 4 | |
| 1.11 | Snapshot de TC al momento de la factura (display multimoneda MXN/USD) | 1 | 2 | |
| 1.12 | Outbox pattern + worker base (tabla event + handler skeleton) | 2 | 2 | |
| **Total Fase 1** | | **30** | **38** | |
**Entregables Fase 1:**
- Sistema autenticado con branding aplicado
- Importación funcional desde BIND con dry-run
- Listado y consulta de facturas (espejo de BIND) en MXN y USD
- Audit log activo
- Outbox pattern listo para handlers
---
## Fase 2 — Cobranza + Dashboard + Pago con link (Semana 4 · 25-32 h)
| # | Tarea | Min | Max | Real |
|---|---|---|---|---|
| 2.1 | Schema payment + payment_allocation (M-N a facturas) | 1 | 2 | |
| 2.2 | UI de registro manual de pago + asociación (totales y parciales) | 3 | 4 | |
| 2.3 | Template editor para correo de cobranza (markdown + variables) | 2 | 3 | |
| 2.4 | Motor de envío programado (cron + worker idempotente con Resend) | 3 | 4 | |
| 2.5 | UI para configurar lista blanca por cliente | 1 | 2 | |
| 2.6 | Log de comunicaciones enviadas + UI de revisión | 2 | 2 | |
| 2.7 | Stripe Checkout: cliente + generación de link por factura | 3 | 4 | |
| 2.8 | Stripe Webhook: recepción + verificación de firma + marca factura pagada | 3 | 4 | |
| 2.9 | Inclusión del link de pago dentro del email de recordatorio | 1 | 2 | |
| 2.10 | Dashboard v1: CxC total, por cliente, vencidas, próximas a vencer | 3 | 4 | |
| 2.11 | Exportación a Excel/CSV | 1 | 2 | |
| 2.12 | Test E2E: recordatorio respeta lista blanca + link de pago funciona | 2 | 3 | |
| **Total Fase 2** | | **25** | **32** | |
**Entregables Fase 2:**
- Cobranza automatizada con lista blanca
- Pago con link Stripe (tarjeta + SPEI) funcional end-to-end
- Dashboard de CxC operativo
- Exportación a Excel
---
## Fase 3 — Conciliación PDF con Claude API (Semana 5 · 22-28 h)
| # | Tarea | Min | Max | Real |
|---|---|---|---|---|
| 3.1 | Schema: bank_account, bank_statement, statement_line | 1 | 2 | |
| 3.2 | UI de upload de PDF con almacenamiento en Blob | 2 | 3 | |
| 3.3 | Extracción de texto con pdf-parse + pipeline por banco | 2 | 3 | |
| 3.4 | Prompt versionado para Banorte + validación de totales | 2 | 3 | |
| 3.5 | Prompt versionado para BBVA + validación de totales | 2 | 3 | |
| 3.6 | Prompt versionado para IBC Texas + validación de totales | 3 | 4 | |
| 3.7 | Dedupe por hash + persistencia de statement_lines | 1 | 2 | |
| 3.8 | Algoritmo de matching exacto (monto + referencia + ventana fecha) | 3 | 3 | |
| 3.9 | Tabla customer_alias + matching por alias | 2 | 3 | |
| 3.10 | UI cola de revisión humana para no conciliados | 2 | 3 | |
| 3.11 | Detección básica: duplicados + traspasos internos | 2 | 2 | |
| **Total Fase 3** | | **22** | **28** | |
**Entregables Fase 3:**
- Upload + parsing automático de los 3 PDFs bancarios
- Motor de conciliación con auto-match + cola humana
- Detección básica de duplicados y traspasos
---
## Fase 4 — Reportes + Cierre (Semana 6 · 15-20 h)
| # | Tarea | Min | Max | Real |
|---|---|---|---|---|
| 4.1 | Export de pagos conciliados a Excel en formato BIND | 2 | 3 | |
| 4.2 | Reporte mensual CxC + CxP exportable | 2 | 2 | |
| 4.3 | Reportes programados por email (diario / semanal) | 2 | 3 | |
| 4.4 | Endurecimiento seguridad: helmet, rate limit, RBAC granular, MFA opcional | 2 | 3 | |
| 4.5 | Backups automáticos Azure + plan de recuperación documentado | 1 | 2 | |
| 4.6 | Documentación técnica: README, runbook, ADRs finalizados | 2 | 2 | |
| 4.7 | Sesión de capacitación grabada (1.5 h) con contacto técnico + gerente admin | 2 | 2 | |
| 4.8 | Handoff + sesión de cierre con stakeholders | 1 | 1 | |
| 4.9 | Buffer para correcciones finales | 1 | 2 | |
| **Total Fase 4** | | **15** | **20** | |
**Entregables Fase 4:**
- Reportes operativos enviándose automáticamente
- Export para BIND validado por el contador
- Seguridad endurecida
- Documentación y capacitación entregadas
- Sistema en producción operando
---
## Resumen total
| Fase | Min | Max | MXN Min | MXN Max |
|---|---|---|---|---|
| 0 - Discovery + Setup Azure | 18 | 22 | 10,800 | 13,200 |
| 1 - Plataforma + Sync BIND | 30 | 38 | 18,000 | 22,800 |
| 2 - Cobranza + Dashboard + Pago link | 25 | 32 | 15,000 | 19,200 |
| 3 - Conciliación PDF (Claude API) | 22 | 28 | 13,200 | 16,800 |
| 4 - Reportes + Cierre | 15 | 20 | 9,000 | 12,000 |
| **TOTAL** | **110** | **140** | **$66,000** | **$84,000** |
**Tiempo calendario:** 6 semanas medio tiempo (~20 h/semana base, hasta 25 h en pico)
**Tarifa:** 600 MXN/h + IVA
**Facturación:** semanal viernes, pago a 7 días
---
## Capacidad por semana
| Semana | Horas planeadas (max) | Carga |
|---|---|---|
| 1 (Fase 0) | 22 | normal |
| 2 (Fase 1a) | 19 | normal |
| 3 (Fase 1b) | 19 | normal |
| 4 (Fase 2) | 32 | ⚠️ pico (necesita 25-30 h ese semana) |
| 5 (Fase 3) | 28 | ⚠️ alto (necesita 24-28 h ese semana) |
| 6 (Fase 4) | 20 | normal |
> **Semanas 4 y 5 son el pico.** Plan: cargar más horas (25-30/sem) y compensar con semanas 1-3 más relajadas. Si en semana 4 no puedes subir el ritmo, alarma temprana y mueves Stripe (8h) a Fase 2 / Fase 2 post-MVP.
---
## Decisiones de descope si vas tarde
Estas son las palancas, en orden de "primero soltar":
1. **Domiciliación** — ya fuera del MVP, no agregar bajo ningún motivo.
2. **Detección de duplicados/traspasos** (tarea 3.11) — push a Fase 2, ahorra ~2 h.
3. **Reportes programados por email** (tarea 4.3) — push a Fase 2, ahorra ~3 h.
4. **Stripe Webhook automático** (tarea 2.8) — fallback: registro manual de pago al confirmar Stripe en su dashboard, ahorra ~4 h.
5. **IBC Texas** (tarea 3.6) — push a Fase 2, los bancos MX cubren 70% del volumen, ahorra ~4 h.
6. **Multimoneda display** (tarea 1.11) — push a Fase 2 si solo manejan 5 facturas USD/mes, ahorra ~2 h.
Si activas las palancas 1-3 recuperas ~5 h. Si activas 1-5 recuperas ~13 h. **Más allá de eso ya es replantear contrato.**
---
## Reglas de ejecución
1. **Nunca trabajes una hora que no puedas justificar en factura.** Si una tarea está fuera de scope acordado, paras y conversas.
2. **Time-tracking obligatorio** (Toggl o Linear). Horas no registradas son horas regaladas.
3. **Demo cada viernes**, sin excepción.
4. **Loom > reunión.** Para updates de status, 3-5 min de Loom en lugar de pedir reunión.
5. **PRs con descripción larga.** Tu evidencia de trabajo y documentación viva.
6. **CHANGELOG.md** — entrada al cerrar cada fase.
7. **No deployees viernes después de las 4pm.** Bug + fin de semana = pesadilla.
8. **Backup tu propio progreso.** Cliente debe poder retomar con otro dev si te enfermas.
9. **Decir "no" es parte del trabajo.** Cada "podríamos también..." que aceptas en MVP es una hora menos para lo crítico.
10. **Producción es el único ambiente disponible.** Antes de cualquier export o sync con BIND: dry-run + confirmación explícita + snapshot DB.
---
## Señales tempranas
**Va bien:**
- Stakeholder responde dudas en <24 hrs
- Las demos generan ajustes pequeños, no replanteos
- Las horas reales caen cerca del medio del rango
- Aparecen requests de Fase 2 (señal de que confían en ti)
**Alerta (paras y conversas):**
- Stakeholder no contesta más de 3 días → bloqueador serio
- El export de BIND llega en formato distinto al esperado en Fase 0 → cotizar workaround
- Claude API no extrae con calidad suficiente algún PDF → reevaluar approach (fallback: parser híbrido para ese banco)
- Stripe rechaza la cuenta Balam o tarda en validar → bloquea Fase 2.7-2.9
- Llegas a viernes de semana 3 sin Fase 1 cerrada → renegocia scope **ese viernes**, no la semana siguiente