docs: actualizar estado — Mirada Empresa verificada
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# ESTADO DEL PROYECTO — Datos País sobre el Cuidado
|
||||
## Documento de continuidad — 24 junio 2026
|
||||
## Documento de continuidad — 25 junio 2026
|
||||
|
||||
> Director (Product Owner): Marcos · Claude (Projects) = arquitecto/copiloto · Claude Code = implementación
|
||||
> Metodología: Maria Mersan · Contacto Fundación: Valeria Arce
|
||||
@@ -7,65 +7,60 @@
|
||||
---
|
||||
|
||||
## 1. Versionado y ramas
|
||||
- **Producción:** 2.1.0 (formulario lineal) — pero los 3 surveys están en `draft`
|
||||
- **Desarrollo:** 3.0.0 (wizard) en `main`, NO desplegado aún
|
||||
- **Producción:** 2.1.0 (formulario lineal) — los 3 surveys en `draft`
|
||||
- **Desarrollo:** 3.0.0 (wizard + dashboard nuevo) en `main`, NO desplegado aún
|
||||
- **Preservación:** `v2.1.0-stable` + tag `v2.1.0`
|
||||
- SemVer + CHANGELOG.md + tags. ADRs en `docs/adr/`.
|
||||
- SemVer + CHANGELOG + tags. ADRs en `docs/adr/`.
|
||||
|
||||
⚠️ **Importante:** los 3 surveys están en `draft` a propósito (el frontend v2 desplegado
|
||||
no entiende el seed v3). Se reactivan a `live` cuando se despliegue v3 completo (tras 4I).
|
||||
⚠️ Los 3 surveys están en `draft` a propósito (el frontend v2 desplegado no entiende seed v3).
|
||||
Se reactivan a `live` al desplegar v3 completo.
|
||||
|
||||
---
|
||||
|
||||
## 2. Sprint 4 — Wizard v3 — EN CURSO (7 de 10 etapas completas)
|
||||
## 2. Sprint 4 — Wizard v3 — Formulario COMPLETO, falta release
|
||||
|
||||
Arquitectura (ADR-005): formulario = esquema declarativo (datos); frontend = renderer
|
||||
sin reglas; motor interpreta el esquema. Fase 1 = formulario-como-esquema (este sprint);
|
||||
Fase 2 = motor genérico (BACKLOG-002).
|
||||
| Etapa | Estado |
|
||||
|---|---|
|
||||
| 4.0 Preservación v2 | ✅ |
|
||||
| 4A instance_id | ✅ prod |
|
||||
| 4B esquema declarativo + seed v3 | ✅ prod |
|
||||
| 4C motor de flujo (lib/form-engine.ts, puro) | ✅ |
|
||||
| 4D wizard renderer (layout estable) | ✅ |
|
||||
| 4E instancias (emergente del motor) | ✅ |
|
||||
| 4G submit + validación server-side (RPC transaccional) | ✅ verificado vs Postgres real |
|
||||
| 4F autocomplete barrios (UX) | ⏳ pendiente |
|
||||
| 4I validación e2e + tag v3.0.0 + desplegar + reactivar surveys | ⏳ pendiente |
|
||||
|
||||
| Etapa | Nombre | Estado |
|
||||
|---|---|---|
|
||||
| 4.0 | Preservación v2 | ✅ |
|
||||
| 4A | instance_id en answers | ✅ prod |
|
||||
| 4B | Esquema declarativo + seed v3 (150 questions) | ✅ prod |
|
||||
| 4C | Motor de flujo (lib/form-engine.ts, puro) | ✅ |
|
||||
| 4D | Frontend renderer wizard (layout estable) | ✅ |
|
||||
| 4E | Instancias de vínculo (emergente del motor; refactor + tests) | ✅ |
|
||||
| 4G | Submit + validación server-side (RPC transaccional) | ✅ verificado vs Postgres real |
|
||||
| 4F | Autocomplete barrios (UX) | ⏳ pendiente |
|
||||
| 4H | RPCs de vínculo (dashboard agrega por instancia) | ⏳ pendiente |
|
||||
| 4I | Validación e2e + tag v3.0.0 + despliegue + reactivar surveys | ⏳ pendiente |
|
||||
|
||||
Orden restante: 4F → 4H → 4I (4F y 4H son independientes; 4I cierra)
|
||||
|
||||
### Lo construido y verificado
|
||||
- **Motor (4C):** `lib/form-engine.ts` puro, 20+ tests. Operadores escalares
|
||||
(eq/eq_any/not_in) y de array (contains/eq_sole), acciones show/hide (hide=veto).
|
||||
Instancias con ID estable `familiar_${posición de opción}`. Secciones=pantallas.
|
||||
`applyAnswer`/`isRequiredAndUnanswered` (limpieza de instancias y required) en el motor.
|
||||
- **Wizard (4D):** renderer una-preg-por-pantalla. Layout estable: header/footer fijos,
|
||||
enunciado anclado, scroll interno con fade condicional (has-overflow). Reusa widgets.
|
||||
- **Submit (4G):** RPC `rpc_submit_response` SECURITY DEFINER, transaccional, ÚNICO camino
|
||||
de escritura (se dropearon las policies WITH CHECK(true)). Validación server-side
|
||||
(7 checks) en `lib/submit-validation.ts` reusando el motor. Verificado vs Postgres real:
|
||||
instancias separadas (familiar_1/familiar_2), atomicidad (fallo→0 huérfanos), anon
|
||||
bloqueado de insertar directo.
|
||||
|
||||
### Recorridos del formulario (validados)
|
||||
- Completo / Solo niño (eq_sole→5.3,8.4,9.1,9.4) / Ninguna (contains→S10) / 3.1=No oculta 3.2-3.5
|
||||
El formulario v3 funciona end-to-end: motor, wizard, instancias, submit con validación
|
||||
server-side (RPC `rpc_submit_response`, único camino de escritura, verificado).
|
||||
|
||||
---
|
||||
|
||||
## 3. Decisiones arquitectónicas (no reabrir)
|
||||
1. Lógica de flujo en datos, no en frontend (ADR-005)
|
||||
2. Motor puro en cliente; reusado server-side para validar (4G)
|
||||
3. Validación de integridad server-side = no negociable (cumplido en 4G)
|
||||
4. Secciones como pantallas (reversible)
|
||||
5. Se extiende questions, no tabla separada (ADR-005)
|
||||
6. Migraciones vía CLI del VPS
|
||||
7. consent_records inmutable (ADR-003); RPC es único camino de escritura
|
||||
8. qi_sector→2.6 (nivel jerárquico) confirmado con equipo
|
||||
9. SemVer + CHANGELOG + tags
|
||||
## 3. Dashboard v3 — DECISIÓN MAYOR: rediseño de "tres miradas"
|
||||
|
||||
**Decisión:** NO migrar las RPCs v2 (referencian códigos inexistentes en v3). En su lugar,
|
||||
dashboard nuevo de tres miradas, fundamentado en marcos reales (OIT 5R, CEPAL, PNCUPA Paraguay).
|
||||
|
||||
### Estado
|
||||
- **Mirada Empresa:** ✅ RPCs implementadas y VERIFICADAS contra 50 respuestas reales.
|
||||
E1-E4 exactos, estrella "Talento en riesgo" con umbral parametrizable, E9 segmentación
|
||||
con k≥5. Migraciones `20260625000001` (fix helper) + `20260625000002` (11 RPCs). Commiteado.
|
||||
Widgets del frontend: PENDIENTE (etapa siguiente).
|
||||
- **Mirada País y Mirada Humana:** propuesta + mockup listos, implementación DIFERIDA a
|
||||
sprint de dashboard post-deadline.
|
||||
|
||||
### Documentos (en docs/dashboard/)
|
||||
- `PROPUESTA_DASHBOARD_v3.md` — las 3 miradas, ~30 métricas, marcos citados honestamente
|
||||
- `dashboard_tres_miradas_mockup.html` — mockup funcional 3 pestañas
|
||||
- `SPEC_MIRADA_EMPRESA.md` — contrato técnico de las 10 métricas + estrella
|
||||
|
||||
### Decisiones del dashboard
|
||||
- CUIDADOR_ACTIVO incluye "hijo menor sin discapacidad" (criterio UNFPA, validado por Maria).
|
||||
Definido en helper `_dash_es_cuidador`.
|
||||
- Mirada Empresa NO expone datos sensibles (3.x, 4.2, 4.3). Solo 4.1 existencia, 6.x, 7.x, 9.x, 2.6, 2.7.
|
||||
- Métrica por persona vs por instancia: presentar ambas rotuladas; k≥5 sobre count(DISTINCT response_id).
|
||||
- 2 gaps de datos marcados [REQUIERE PREGUNTA]: horas cuidado no remunerado (País),
|
||||
escolarización niñez (Humana). Para el sprint de dashboard.
|
||||
|
||||
---
|
||||
|
||||
@@ -74,9 +69,10 @@ Orden restante: 4F → 4H → 4I (4F y 4H son independientes; 4I cierra)
|
||||
|---|---|---|
|
||||
| TECH-DEBT-006 | Backup remoto S3 | Antes de datos reales |
|
||||
| TECH-DEBT-009 | Rotar secrets post-CVE | Antes de datos reales |
|
||||
| TECH-DEBT-010 | E9 lee modalidad por JOIN a answers (2.7) en vez de qi_modalidad. Promover si se usa seguido | Baja |
|
||||
| SEC-002 | Sprint compliance (audit log, hashing, cifrado en reposo) | Sprint dedicado |
|
||||
| SEC-003 | Agujero TRUNCATE evade ADR-003 | Antes de datos reales |
|
||||
| SEC-004 | RPC validable por bypass REST (coherencia de flujo en Server Action, no SQL). Calidad de datos, no privacidad. Cerrar con firma de payload | Sprint futuro |
|
||||
| SEC-004 | RPC validable por bypass REST (coherencia de flujo en Server Action) | Sprint futuro |
|
||||
| BACKLOG-002 | Fase 2: motor genérico | Post-deadline |
|
||||
|
||||
---
|
||||
@@ -85,38 +81,41 @@ Orden restante: 4F → 4H → 4I (4F y 4H son independientes; 4I cierra)
|
||||
- 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
|
||||
- Para sembrar datos de prueba: `seed_prueba_50.sql` (en docs/dashboard/), 50 respuestas
|
||||
deterministas vía RPC. Usa question_id (UUIDs), NO question_code. Incluye su limpieza.
|
||||
|
||||
---
|
||||
|
||||
## 6. Próximo paso
|
||||
**Etapa 4F (autocomplete barrios)** o **4H (RPCs de vínculo)** — son independientes.
|
||||
- 4F necesita subir `geo_paraguay_full.json` (8152 barrios, generado, está en outputs de Claude
|
||||
arquitecto) a `public/data/geo_paraguay.json` del repo.
|
||||
- 4H: las RPCs del dashboard deben agregar datos de vínculo por instancia (4.2/4.3 con instance_id).
|
||||
- 4I: validación e2e completa, tag v3.0.0, desplegar a producción, reactivar surveys a live.
|
||||
## 6. Próximos pasos
|
||||
1. **Widgets de Mirada Empresa** — el frontend del dashboard que consume las RPCs ya verificadas.
|
||||
La spec (SPEC_MIRADA_EMPRESA.md) define shapes de retorno; el mockup define el aspecto.
|
||||
2. **4F autocomplete barrios** — subir `geo_paraguay_full.json` (8152 barrios) a public/data/.
|
||||
3. **4I release** — validación e2e, tag v3.0.0, desplegar v3, reactivar surveys a live.
|
||||
4. **Sprint de dashboard (post-deadline):** Miradas País y Humana, preguntas faltantes
|
||||
(bienestar, horas no remuneradas, escolarización), decisión qi_modalidad.
|
||||
|
||||
Orden sugerido para go-live: widgets Mirada Empresa → 4F → 4I.
|
||||
|
||||
---
|
||||
|
||||
## 7. Contexto comercial
|
||||
- 2 clientes inminentes en ~10-20 días (deadline de v3)
|
||||
- InQuality y Fundación Solidaridad en joint venture
|
||||
- Datos de prueba descartables (dump en v2.1.0-stable)
|
||||
- 2 clientes inminentes en ~10-20 días (deadline v3). Mirada Empresa es la que le habla al cliente que paga.
|
||||
- InQuality y Fundación Solidaridad en joint venture.
|
||||
|
||||
---
|
||||
|
||||
## 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. Sprint 4: wizard v3
|
||||
con esquema declarativo (ADR-005).
|
||||
Sos el arquitecto/copiloto técnico de "Datos País sobre el Cuidado", motor de formularios
|
||||
soberano (Paraguay). Yo soy el product owner. Sprint 4: wizard v3 (ADR-005, esquema declarativo).
|
||||
|
||||
Estado completo: docs/estado/ESTADO_PROYECTO_JUNIO_2026.md.
|
||||
Sprint: sprints/sprint-4/. Completadas: 4.0/4A/4B/4C/4D/4E/4G.
|
||||
Pendientes: 4F (barrios), 4H (RPCs vínculo), 4I (release).
|
||||
Formulario v3: COMPLETO y verificado (motor, wizard, submit con validación server-side).
|
||||
Dashboard: rediseño de "tres miradas". Mirada Empresa = RPCs implementadas y verificadas
|
||||
contra datos reales; faltan sus widgets. País/Humana diferidas a sprint posterior.
|
||||
|
||||
El motor (lib/form-engine.ts) y el submit (RPC + validación server-side) están
|
||||
hechos y verificados contra Postgres real. La lógica vive en datos; frontend renderiza.
|
||||
Los 3 surveys están en draft (v3 no desplegado aún).
|
||||
Pendiente go-live: widgets Mirada Empresa → 4F (barrios) → 4I (release).
|
||||
Los 3 surveys en draft (v3 no desplegado aún).
|
||||
|
||||
Próximo paso: [COMPLETAR]
|
||||
```
|
||||
Reference in New Issue
Block a user