Files
motor-de-encuestas/docs/estado/ESTADO_PROYECTO_JUNIO_2026.md
2026-06-23 15:01:08 -03:00

5.7 KiB
Raw Blame History

ESTADO DEL PROYECTO — Datos País sobre el Cuidado

Documento de continuidad — 20 junio 2026

Director (Product Owner): Marcos · Claude (Projects) = arquitecto/copiloto · Claude Code = implementación Metodología: Maria Mersan · Contacto Fundación: Valeria Arce


1. Versionado y ramas

  • Versión en producción: 2.1.0 (formulario lineal, dashboard multitenante)
  • Versión en desarrollo: 3.0.0 (wizard, en main)
  • Rama de preservación: v2.1.0-stable (código + dump DB) + tag v2.1.0
  • Convención: SemVer + CHANGELOG.md (raíz) + tags en cada versión estable
  • ADRs en docs/adr/. ADR-005 = esquema declarativo + estrategia dos fases.

2. Sprint 4 — Wizard v3 — EN CURSO

Arquitectura (ADR-005): el formulario es un esquema declarativo (datos); el frontend es un renderer sin reglas de negocio; el motor interpreta el esquema. Estrategia dos fases: Fase 1 (este sprint) formulario-como-esquema; Fase 2 (BACKLOG-002) motor genérico universal.

Etapas

Etapa Nombre Estado
4.0 Preservación v2 (tag, rama, dump, CHANGELOG)
4A Persistencia instance_id en answers aplicada en prod
4B Esquema declarativo + seed v3 (10 secciones, 150 questions) aplicada en prod
4C Motor de resolución de flujo (puro, lib/, 16 tests) commiteada
4D Frontend renderer (consume el motor, una preg/pantalla) siguiente
4E Instancias de vínculo (mini-wizard familiares) pendiente
4F Autocomplete barrios (requiere geo_paraguay_full.json) pendiente
4G Submit con instance_id + validación server-side (no negociable) pendiente
4H RPCs de vínculo (agregados por instancia) pendiente
4I Validación e2e + tag v3.0.0 + ADR + BACKLOG Fase 2 pendiente

Orden: 4D → (4E ∥ 4F) → 4G → 4H → 4I

Estado técnico v3 en la DB (ya aplicado en prod)

  • answers.instance_id text DEFAULT 'default', constraint (response_id, question_id, instance_id)
  • questions extendida: instance_generator, instance_of, hint
  • 150 questions (50 × 3 surveys), instrumento v3 de 10 secciones
  • 4.1 = instance_generator; 4.2/4.3 = instance_of='4.1'
  • Datos de prueba v2 borrados (TRUNCATE); v3 arranca limpio

Motor de flujo (4C) — lib/form-engine.ts

  • Módulo puro, sin React/DOM. Tests en lib/form-engine.test.mts (16/16).
  • Operadores: eq, eq_any, not_in (escalares); contains, eq_sole (array multiple_choice)
  • Acciones: show, hide (hide = veto absoluto sobre show del mismo array)
  • Reglas múltiples en un array = OR
  • ID de instancia: familiar_${posición fija de opción} (determinista, estable)
  • Secciones = pantallas propias; se ocultan solo si su fila type='section' tiene regla

Recorridos del formulario (validados en mockup y tests)

  • Completo: todos los vínculos → todas las secciones
  • Solo niño sin discapacidad (eq_sole op 1): liviano → 5.3, 8.4, 9.1, 9.4
  • Ninguna (contains op 8): salta a Sección 10
  • 3.1='No': oculta 3.2-3.5

3. Decisiones arquitectónicas clave (no reabrir)

  1. Lógica de flujo en datos (esquema), no en frontend (ADR-005)
  2. Frontend = renderer sin reglas de negocio
  3. Motor de flujo (4C) corre en cliente, módulo puro testeable
  4. Validación de integridad del submit = server-side, NO negociable (4G) La validación de cliente es UX, no seguridad. Datos de salud sensibles.
  5. Secciones como pantallas propias (reversible — es comportamiento del motor)
  6. Se extiende questions, no se crea tabla de definición (ADR-005)
  7. Migraciones vía CLI del VPS (docker exec -i supabase-db psql)
  8. consent_records inmutable (ADR-003); el seed nunca toca datos de respuesta

4. Deuda técnica y seguridad

ID Descripción Prioridad
TECH-DEBT-006 Backup remoto S3 Antes de datos reales
TECH-DEBT-009 Rotar secrets post-CVE Antes de datos reales
SEC-002 Sprint de compliance (audit log, hashing, cifrado en reposo) Sprint dedicado
SEC-003 Agujero TRUNCATE evade inmutabilidad ADR-003 — cerrar antes de datos reales Antes de datos reales
BACKLOG-002 Fase 2: motor genérico de formularios Post-deadline

COMPLIANCE.md documenta estado de seguridad, roadmap de auditabilidad, y la decisión fundamentada de NO usar blockchain.


5. Infraestructura (sin cambios)

  • Next.js 15.3.8 · Supabase self-hosted · Dokploy v0.29.4 · VPS inq-mart-2 (172.20.5.11)
  • App: economia-cuidado.inqualityhq.com · API: db.inqualityhq.com
  • Repos Gitea: git.inquality.com.py/marcos/motor-de-encuestas
  • Backups GFS locales 3AM

6. Contexto comercial

  • 2 clientes inminentes en 10-20 días (motivan el deadline de v3)
  • InQuality y Fundación Solidaridad ya en joint venture del producto
  • Datos de prueba descartables (existe dump en v2.1.0-stable)

7. Próximo paso inmediato

Etapa 4D — Frontend renderer. El componente consume el motor (4C) y renderiza una pregunta por pantalla. Incluye la tarea 4.5 pospuesta de 4C (query de app/page.tsx con hint/instance_generator/instance_of). Reemplaza lib/conditional.ts y la lógica de secciones hardcodeada de survey-form.tsx v2.


8. Prompt para nueva sesión

Sos el arquitecto/copiloto técnico de "Datos País sobre el Cuidado", motor de
formularios soberano (Paraguay). Yo soy el product owner. Estamos en Sprint 4
construyendo el formulario wizard v3 (esquema declarativo, ADR-005).

Estado completo: docs/estado/ESTADO_PROYECTO_JUNIO_2026.md en el repo.
Sprint: sprints/sprint-4/ (BRIEF + prompts de etapa + reportes).
Completadas: 4.0, 4A, 4B, 4C. Siguiente: 4D (frontend renderer).

El motor de flujo ya existe y está testeado (lib/form-engine.ts, 16 tests).
La lógica vive en datos; el frontend es renderer sin reglas.

Próximo paso: [COMPLETAR]