Roadmap MVP · Gestdok

Cronograma de subida a producción + desarrollos pendientes hasta Beta 2

Estimación total: ~16 semanas · ~4 meses
Estado actual: pre-V1 · cero clientes producción
2026-06-01 · click en cada tarea para detalle
🛠 Bloque A · Infra V1 (bloqueante) 🚀 Beta 1 · Auditoría analítica 📋 Beta 2 · Ciclo completo ⚖ Legal / compliance (paralelo) 🎯 Hito de lanzamiento
📱 Estás en móvil. Te muestro el timeline en vista apilada. Para verlo como cronograma completo, abre desde tablet u ordenador.
Bloque / Lane
T+1
T+2
T+3
T+4
T+5
T+6
T+7
T+8
T+9
T+10
T+11
T+12
T+13
T+14
T+15
T+16
🛠 Bloque A
Infra V1
Alembic
migración inicial
Storage S3
Hetzner Object Storage
JWT refresh
rotación + access/refresh
🚀 Beta 1
Analítica
Hosting Hetzner
CCX23 + Caddy + DNS
B10 Nóminas
TC2 + cuentas 640/642/4751
B08 · IRPF + SS + IS
Cédulas análogas a PC58
🎯 Onboarding 2-3 despachos amigos
→ Beta 1 LIVE
📋 Beta 2
Ciclo completo
Memoria cliente
Checklist PGC
Carta NIA-ES 580
manifestaciones cliente
Informe final auditoría
NIA-ES 700/705/706 · OnlyOffice
🎯 Beta 2 con ciclo completo
→ Beta 2 LIVE

👇 Toca un bloque para desplegar sus tareas

🛠 Bloque A · Infra V1 (T+1 → T+4)

T+1 · 1-2 días
Alembic + migración inicial
Bloqueante. Sin esto, cambios de schema rompen producción.
T+2 → T+3 · 2-3 días
Storage local → S3 Hetzner
Documentos a salvo aunque caiga el VPS.
T+3 · 1 día
JWT con refresh tokens
Sesiones revocables y caducables.

🚀 Beta 1 · Auditoría analítica (T+5 → T+10)

T+5 · 2-3 días
Hosting Hetzner real
CCX23 + Caddy + DNS + backups probados.
T+6 · 3-5 días
B10 · Nóminas + asiento
TC2 + cuentas 640/642/4751/471/465.
T+7 → T+8 · 3-4 días c/u
B08 · IRPF + SS + IS
Cédulas análogas a PC58.
T+9 → T+10 · 🎯 Hito
Beta 1 LIVE · 2-3 despachos amigos
Lanzamiento Beta 1 con uso real.

📋 Beta 2 · Ciclo completo (T+11 → T+16)

T+11 · 5-7 días
Memoria del cliente (revisión)
Checklist 25 notas PGC.
T+12 · 5-7 días
Carta manifestaciones (NIA-ES 580)
Plantilla editable + firma cliente.
T+13 → T+14 · 2-3 semanas
Informe final auditoría
NIA-ES 700/705/706 · OnlyOffice + versionado.
T+15 → T+16 · 🎯 Hito
Beta 2 LIVE · ciclo completo
Producto vendible.

📑 Detalle de tareas

🛠 1.1 · Alembic + migración inicial

Semana T+1 · 1-2 días · BLOQUEANTE para todo

Pendiente

📖 ¿Qué es? Sistema que permite cambiar la base de datos (añadir campos, tablas nuevas) sin perder los datos del cliente. Como un "control de versiones" para la estructura interna donde guardamos todo.

Sin Alembic, cualquier cambio de esquema en producción = pérdida de datos. Es lo primero que hay que hacer.

Pasos:
  • pip install alembic en requirements.txt
  • alembic init alembic en backend/
  • Configurar env.py con SQLAlchemy engine actual
  • Generar migración inicial: alembic revision --autogenerate -m "initial schema"
  • Crear runner multi-tenant alembic_multi.py que itera por despacho
Archivos afectados: backend/requirements.txt, backend/alembic/, backend/app/main.py (quitar create_all())

🛠 1.2 · Storage local → Hetzner Object Storage (S3)

Semana T+2 a T+3 · 2-3 días · BLOQUEANTE

Pendiente

📖 ¿Qué es? Guardar los documentos del cliente en un "trastero" externo y seguro, separado del servidor donde corre la app. Si el servidor cae, los documentos siguen a salvo y se pueden recuperar en otro lado.

Hoy los documentos viven en /uploads del VPS. Si el VPS muere, se pierden. Hay que migrar a S3-compatible.

Pasos:
  • Crear bucket en Hetzner Object Storage FSN1 (~5 €/mes 100 GB)
  • Crear adapter backend/app/services/storage.py con backends local (dev) y s3 (prod)
  • Usar boto3 o aiobotocore
  • Esquema de paths: s3://gestdok-docs/{tenant_id}/{uuid}.ext
  • Descargas con presigned URL (validez 15 min)
  • Backup off-site: bucket en segunda región NBG1
Archivos afectados: backend/app/services/storage.py (nuevo), backend/app/api/routes/documentos.py, backend/app/core/config.py

🛠 1.3 · JWT con refresh tokens + rotación

Semana T+3 · 1 día · Bloqueante seguridad

Pendiente

📖 ¿Qué es? Sistema para que las sesiones de los usuarios caduquen automáticamente y se pueda "echar" a alguien (despido, baja) sin que mantenga su acceso. Lo actual no caduca nunca, lo que es un riesgo de seguridad.

Hoy los JWT no caducan. Si filtras un token, es permanente. Hay que separar access (15 min) y refresh (7 días) con tabla en BD.

  • Access token corto: 15 min, sin BD lookup, firma JWT
  • Refresh token largo: 7 días, en tabla refresh_tokens
  • Endpoint /auth/refresh que rota el refresh y devuelve nuevo access
  • Endpoint /auth/logout que invalida el refresh
  • Frontend: interceptor en apiFetch que renueva al primer 401
Archivos afectados: backend/app/core/auth.py, backend/app/api/routes/auth.py, backend/app/models/models.py (+RefreshToken), frontend/app.js (apiFetch)

🚀 2.1 · Hosting Hetzner real (no cloudflared)

Semana T+5 · 2-3 días

Crítico V1

📖 ¿Qué es? Mover la aplicación de tu PC a un servidor profesional que está siempre encendido. Hoy, si apagas tu PC, todos los usuarios se quedan sin servicio.

Reemplazar el túnel cloudflared (que cae si apagas tu PC) por hosting profesional.

  • Contratar Hetzner Cloud CCX23 (~30 €/mes, 4 vCPU dedicadas, 16 GB)
  • Hardening Ubuntu 24.04: SSH por clave, UFW, fail2ban, auto-upgrades
  • Instalar Docker + docker-compose
  • Caddy como reverse proxy con Let's Encrypt automático
  • DNS Cloudflare apuntando a la IP
  • Wildcard DNS para subdominios futuros (*.gestdok.com)
  • Cron diario pg_dump | age encrypt → ambas regiones
  • Test de restore probado en VPS virgen antes de considerar listo
Coste: ~50 €/mes V1 todo incluido

🚀 2.2 · B10 Personal — Nóminas + asiento

Semana T+6 · 3-5 días · Patrón PC58

Feature beta 1

📖 ¿Qué es? Permitir al auditor cargar la nómina del cliente y cruzarla automáticamente con su contabilidad. Detecta en segundos cosas como "pago al trabajador sin reflejo contable" o "cuotas SS no contabilizadas".

Cargar TC2/RNT del cliente y cruzar con cuentas 640 (sueldos), 642 (SS empresa), 4751 (IRPF a ingresar), 471 (créditos SS), 465 (remuneraciones pendientes).

  • Modelo NominaRegistro en models.py (análogo a LibroIvaFactura)
  • Extractor backend/app/services/extractores/personal/nominas.py
  • Reconoce: TC2, RNT/RLC, nominaSEPA, Excel resumen
  • Endpoints PC511: /cargar-nomina, /nomina, /generar
  • Conciliación 640/642/4751/471 con saldos diario por mes
  • Modal frontend análogo a libro IVA
  • Granularidad mensual (no trimestral)
Archivos: models.py (+modelo), extractores/personal/nominas.py (nuevo), papeles_generados.py (+endpoints), app.js (+modal)

🚀 2.3 · B08 · IRPF + SS + IS (cédulas)

Semana T+7 a T+8 · 3-4 días por cédula · Patrón PC58

Feature beta 1

📖 ¿Qué es? Lo mismo que el papel de IVA (PC58) pero para los otros impuestos: IRPF del trabajador (modelo 111), Seguridad Social y el Impuesto de Sociedades de la empresa. Cierra el bloque fiscal completo de la auditoría.

Completar el ciclo B08 (Administraciones Públicas) con las cédulas que faltan tras PC58 IVA:

  • PC59 IRPF: modelo 111 (retenciones trabajo) + 190 (resumen anual). Cuentas 4751, 4759
  • PC511 SS: ya incluido en B10 nóminas
  • PC512 IS: modelo 200/202/220 (Impuesto Sociedades). Cuentas 4752, 473, 4709, 6300
  • Mismo patrón PC58: extractor + endpoints + modal + cédula + conciliación
  • Reutilizar _calcular_conciliacion_iva renombrado a genérico
Estimación realista: 3 cédulas × 3 días = ~10 días.
Si va más rápido (patrón conocido): ~6 días.

🎯 2.4 · Onboarding 2-3 despachos amigos · Beta 1 LIVE

Semana T+9 a T+10 · Hito Beta 1

🚀 Lanzamiento Beta 1

📖 ¿Qué es? El gran momento: dar acceso a 2-3 despachos amigos para que usen Gestdok con auditorías de clientes reales. Es la primera vez que el producto sale de tu PC y empieza a recibir feedback honesto.

Hito principal del MVP. La beta arranca con uso real.

Checklist pre-onboarding:
  • Hosting Hetzner estable + backups probados
  • Sentry + UptimeRobot configurados con alerta a tu email/Telegram
  • Acuerdo beta firmado (sin garantías comerciales)
  • Tutorial PDF o vídeo de 15 min
  • Canal de soporte (WhatsApp grupo + email)
Sesión 1 con cada despacho (~2 h):
  • Alta despacho + usuarios
  • Importar primer encargo real
  • Carga del diario contable
  • Generar Balance, PyG, Materialidad, PC58 con datos reales
  • Soporte intensivo primera semana
Lo que cubre Beta 1: Toda la analítica + IVA + IRPF + SS + IS + Nóminas + Materialidad + Carta 260 + Ajustes + Comparativo histórico.
Lo que NO cubre todavía: Informe final, Memoria, Carta manifestaciones, Circularización. El auditor sigue haciendo eso en Word/Excel.

📋 3.1 · Memoria del cliente — papel de revisión

Semana T+11 · 5-7 días

Feature beta 2

📖 ¿Qué es? La memoria son las notas explicativas que acompañan a las cuentas anuales (balance + PyG). En auditoría, hay que revisar que están completas, cuadran con los EEFF y cumplen con el PGC. Aquí se añade un checklist guiado para el auditor.

Papel donde el auditor revisa que la memoria entregada por el cliente cumple PGC + concuerda con Balance/PyG.

  • Checklist 25 notas PGC (Nota 1 Actividad, Nota 5 Inmovilizado, Nota 7 Instrumentos financieros, etc.)
  • Cada nota: estado (cumple / no cumple / parcial) + comentario auditor
  • Subir PDF de memoria del cliente como input
  • Cruce automático: importes en notas vs Balance/PyG (alerta si difieren > materialidad)
  • Render como papel formal NIA-ES 700

📋 3.2 · Carta manifestaciones NIA-ES 580

Semana T+12 · 5-7 días

Feature beta 2

📖 ¿Qué es? Documento que firma la dirección del cliente al final del trabajo, confirmando que no oculta cosas (fraude, partes vinculadas, hechos posteriores). Es una protección legal obligatoria para el auditor según NIA-ES 580.

Documento legal firmado por la dirección del cliente al cierre del trabajo. Confirma responsabilidades sobre estados financieros, fraude, partes vinculadas, etc.

  • Plantilla editable por despacho
  • Variables del cliente auto-rellenadas (NIF, razón social, ejercicio)
  • Apartados condicionales (si hay fraude detectado, si hay PV)
  • Envío para firma cliente (email con link → firma simple)
  • Archivo en el papel de la auditoría

📋 3.3 · Informe final auditoría — NIA-ES 700/705/706

Semana T+13 a T+14 · 2-3 semanas · La pieza más compleja

Feature beta 2

📖 ¿Qué es? El documento principal de la auditoría: la opinión firmada del auditor (limpia / con salvedades / negativa / denegada). Es lo que se entrega al cliente y al Registro Mercantil. La pieza más importante y la más compleja de implementar.

El documento más importante: la opinión firmada del auditor. Reutiliza OnlyOffice que ya tienes integrado.

  • Modelo InformeAuditoria: tipo_opinion (limpia/calificada/denegada/adversa), fecha_emision, plantilla_base_id, contenido_html, estado_version, firma_socio_id
  • 5 plantillas master (una por tipo de opinión), editables por despacho
  • Editor con secciones: cabecera + alcance + opinión + fundamento + otros asuntos + párrafos énfasis + firma
  • Variables dinámicas: {{cliente.nombre}}, {{materialidad.final}}, {{fecha_emision}}
  • Versionado: borrador → enviar a socio → socio revisa/comenta → aprobado → firma → archivado (inmutable)
  • OnlyOffice para edición DOCX libre del socio
  • Exportación PDF al firmar con encabezado + logo despacho
  • Trazabilidad NIA-ES 230 reforzada (quién, cuándo, qué cambió)
Estimación honesta: 2-3 semanas. Es la pieza más compleja del MVP por el versionado + edición + firma.

🎯 3.4 · Onboarding Beta 2 — ciclo completo LIVE

Semana T+15 a T+16 · Hito Beta 2

🚀 Lanzamiento Beta 2

📖 ¿Qué es? Segunda beta donde los despachos amigos ya pueden cerrar auditorías completas dentro de Gestdok, incluido firmar el informe final. A partir de aquí Gestdok es producto vendible a despachos de pago.

Los despachos de Beta 1 estrenan el ciclo completo. Pueden cerrar una auditoría desde inicio hasta informe firmado sin salir de Gestdok.

Lo que la Beta 2 añade respecto a Beta 1:
  • Generar el informe final completo
  • Revisión memoria del cliente con checklist PGC
  • Carta manifestaciones para firmar
  • Trazabilidad legal completa (cierre 5 años NIA-ES 230)
Estado tras Beta 2: Producto vendible. Ya puedes ofrecerlo a despachos de pago con DPA completo + DPO + asesoría legal.

💰 Inversión hasta Beta 2 lanzada

Asesoría legal (DPA + 5 docs)2.500-3.500 € único
Hetzner Cloud + Storage V1~50 €/mes
Dominio gestdok.com~12 €/año
Sentry + UptimeRobot0 € (tier free)
DPO externalizado (desde T+10)150 €/mes
Total 4 meses MVP~3.500-4.500 €

⏱ Esfuerzo de desarrollo

Bloque A Infra (T+1 → T+4)~4 semanas
Beta 1 features (T+5 → T+8)~4 semanas
🎯 Beta 1 LIVE~T+10
Beta 2 features (T+11 → T+14)~4 semanas
🎯 Beta 2 LIVE~T+16
Total para tener producto vendible~4 meses

⚠ Hitos críticos del cronograma

🚧
Cuello de botella legal (T+1 a T+4): sin DPA + política privacidad, no puedes firmar con despacho beta. El abogado tarda 3 semanas. Empezar HOY el contacto.
Dependencia GPU (si quieres resúmenes IA en Beta): Hetzner tarda 1-2 días en aprovisionar GEX44. Pedirla 1 semana antes de necesitarla.
📋
Informe final es la pieza más compleja: 2-3 semanas reales. Si surge algún bloqueante en OnlyOffice editor (versionado, conflictos), puede ir a 4 semanas. Bufer prudente en el cronograma.
Lo bueno: El 80% del backend de auditoría ya está hecho (matriz riesgos, diario, balance/pyg, materialidad, PC58 IVA, carta 260, ajustes, comparativo histórico). Los desarrollos pendientes son piezas concretas con patrón conocido.