Files
balam/02 - PLAN-EJECUCION.md

12 KiB
Raw Permalink Blame History

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

# 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