ETAPA_CALIDAD: Nota de discrepancia: las 5 clases de P1 usan var(--color-primary), no var(--color-re-teal) como decía el prompt — ambas resuelven al mismo hex #43BBC8. Hice el reemplazo por nombre de clase (igual intención: texto teal → carbón), no por el literal del grep.

This commit is contained in:
markosbenitez
2026-06-27 15:27:54 -03:00
parent ca3af1a750
commit 30cd83ffc1
7 changed files with 830 additions and 0 deletions

View File

@@ -0,0 +1,169 @@
# ESTADO DEL PROYECTO — Datos País sobre el Cuidado
## Documento de continuidad — 26 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
- **Producción:** **3.0.0** — wizard v3 + dashboard tres miradas desplegado · tag `v3.0.0` · commit `fcf93ea`
- **Preservación:** `v2.1.0-stable` + tag `v2.1.0`
- **3 surveys en `live`** — reactivados al desplegar v3 (26 jun 2026)
- SemVer + CHANGELOG + tags. ADRs en `docs/adr/`.
---
## 2. Sprint 4 — Wizard v3 — COMPLETO Y EN PRODUCCIÓN
| Etapa | Estado |
|---|---|
| 4.0 Preservación v2 | ✅ |
| 4A instance_id | ✅ |
| 4B esquema declarativo + seed v3 | ✅ |
| 4C motor de flujo (`lib/form-engine.ts`, puro, 20+ tests) | ✅ |
| 4D wizard renderer (layout estable, header/footer fijos) | ✅ |
| 4E instancias familiares (mini-wizard emergente del motor) | ✅ |
| 4F autocomplete barrios + filtro ciudad por departamento | ✅ |
| 4G submit + validación server-side (RPC `rpc_submit_response`) | ✅ |
| 4I validación e2e + tag v3.0.0 + deploy + surveys live | ✅ |
### Decisiones arquitectónicas clave (no reabrir)
- **ADR-005:** lógica de flujo en datos (esquema), nunca en frontend.
- Motor puro en cliente; reusado server-side para validación de submit.
- Único camino de escritura: RPC `rpc_submit_response` (SECURITY DEFINER).
- `instance_id` por answer — instancias familiares persistidas correctamente.
- Validación server-side: 7 checks (preguntas visibles, valores válidos, instancias legítimas,
consentimiento, requeridas presentes). Rechaza el submit completo si algo falla.
### Autocomplete geo (4F)
- `public/data/geo_paraguay_full.json` — 8152 barrios, jerarquía depto → ciudad → barrios.
- Pregunta 2.3 (barrio): autocomplete con `position: fixed` + `getBoundingClientRect()`.
- Pregunta 2.2 (ciudad): filtra por departamento (2.1) usando el mismo JSON. Limpia valor
al cambiar departamento. Texto libre siempre permitido como fallback.
---
## 3. Dashboard v3 — Mirada Empresa en producción
**Decisión vigente:** NO migrar RPCs v2. Dashboard nuevo de tres miradas
(OIT 5R, CEPAL, PNCUPA Paraguay).
### Estado
- **Mirada Empresa:** ✅ COMPLETA EN PRODUCCIÓN
- 11 RPCs (`rpc_me_*`) + helper `_dash_es_cuidador` verificados contra 50 respuestas reales.
- 9 widgets funcionando: Talento en riesgo, Prevalencia, Punto ciego, Señales de impacto
(presentismo 41.7%, ausentismo 36.1%, riesgo 38.9%, carrera congelada 47.2%),
Apoyos demandados (ordenados por demanda), Segmentación (nivel y modalidad),
Disposición a red de apoyo.
- Tema claro marca Re: fondo `#E7E6E5`, cards `#FFFFFF`, texto `#494F4F`.
- Migraciones aplicadas: `20260625000001` (fix `_dash_responses`) +
`20260625000002` (11 RPCs) + `20260626000001` (fix bug `cnt` Opción B).
- **Mirada País y Mirada Humana:** propuesta + mockup listos, implementación DIFERIDA
a sprint de dashboard post-deadline.
### Bug conocido abierto
- `rpc_me_carrera_congelada`: "Ninguna de las anteriores" aparece en `top_opciones`
a pesar del filtro en el subquery. El filtro opera sobre el array completo, no sobre
los elementos individuales del `jsonb_array_elements_text`. No bloqueante para el
release — registrado para próximo sprint.
### Documentos (en `docs/dashboard/`)
- `PROPUESTA_DASHBOARD_v3.md` — las 3 miradas, ~30 métricas, marcos citados
- `dashboard_tres_miradas_mockup.html` — mockup funcional 3 pestañas
- `SPEC_MIRADA_EMPRESA.md` — contrato técnico 10 métricas + estrella
### Decisiones del dashboard (no reabrir)
- CUIDADOR_ACTIVO incluye "hijo menor sin discapacidad" (criterio UNFPA, validado por Maria jun 2026).
- Mirada Empresa NO expone datos sensibles (3.x, 4.2, 4.3).
- k-anonimato k≥5 sobre `count(DISTINCT response_id)` — también en métricas por instancia.
- 2 gaps de datos para sprint dashboard: horas cuidado no remunerado (País),
escolarización niñez (Humana).
---
## 4. Datos de prueba en VPS
- **51 respuestas** en survey Demo (`30000000-0000-0000-0000-000000000001`) — 50 del seed
determinista (seed=42) + 1 del e2e de 4I.
- Survey Demo en `live`. Datos NO limpiados — el director los necesita para mostrar al equipo.
- Script de limpieza cuando corresponda:
```bash
docker exec supabase-db psql -U postgres -d postgres -c "
TRUNCATE answers, responses, consent_records CASCADE;
UPDATE surveys SET status='draft' WHERE id='30000000-0000-0000-0000-000000000001';"
```
- ⚠️ El seed corrió dos veces en sesión anterior (detectado y corregido). Agregar guard
anti-duplicación al `seed_prueba_50.sql` — anotado en BACKLOG.
---
## 5. Deuda técnica y seguridad
| ID | Descripción | Prioridad |
|---|---|---|
| BUG-001 | "Ninguna de las anteriores" aparece en `rpc_me_carrera_congelada` | Próximo sprint dashboard |
| TECH-DEBT-006 | Backup remoto (S3 o VPS alternativo o Google Drive) | Antes de datos reales no desechables |
| TECH-DEBT-009 | Rotar secrets post-CVE | Antes de datos reales no desechables |
| TECH-DEBT-010 | E9 lee modalidad por JOIN a answers (2.7) en vez de `qi_modalidad` | Baja |
| SEC-002 | Sprint compliance (audit log, hashing, cifrado en reposo) | Sprint dedicado |
| SEC-003 | TRUNCATE evade inmutabilidad ADR-003 | Antes de datos reales no desechables |
| SEC-004 | RPC bypass REST (coherencia de flujo en Server Action) | Sprint futuro |
| BACKLOG-001 | `seed_prueba_50.sql` idempotente (guard anti-duplicación) | Baja |
| BACKLOG-002 | Fase 2: motor genérico de formularios | Post-deadline |
**Riesgo aceptado explícitamente (26 jun 2026):** TECH-DEBT-006, TECH-DEBT-009 y SEC-003
aplican cuando haya datos reales no desechables. Los datos actuales son de empresas voluntarias
y grupos de control — desechables si es necesario.
---
## 6. Infraestructura
- 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` (Kong + SSL)
- Repo: `git.inquality.com.py/marcos/motor-de-encuestas` (rama `main`)
- Repo local: `/Users/marcos/InQ/Motor de encuestas`
- Migraciones SIEMPRE vía CLI del VPS:
`docker exec -i supabase-db psql -U postgres -d postgres < archivo.sql`
- Deploy: Dokploy → Rebuild + "Clean cache"
- Anon key Kong (diagnóstico):
`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjIwMDAwMDAwMDB9.6D79NWu1KfeOzEZXT6Amf-NmG0T9uk8SK9xNd32oLaY`
---
## 7. Contexto comercial
- 2 clientes inminentes. Mirada Empresa es la que le habla al cliente que paga.
- InQuality y Fundación Solidaridad en joint venture.
- Datos actuales: empresas voluntarias y grupos de control (desechables).
- Datos reales no desechables: avisará el director — en ese momento activar deuda de seguridad.
---
## 8. Próximos sprints sugeridos
1. **Sprint dashboard** — Miradas País y Humana, fix BUG-001 carrera congelada,
preguntas faltantes (horas no remuneradas, escolarización), decisión `qi_modalidad`.
2. **Sprint compliance** — SEC-002 (audit log, hashing, cifrado), SEC-003, TECH-DEBT-006/009.
3. **Sprint motor genérico** — BACKLOG-002 Fase 2, extracción del intérprete.
---
## 9. 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 (Marcos).
Claude Code (VS Code, contexto separado) hace la implementación; vos planificás,
especificás y auditás.
Estado completo: docs/estado/ESTADO_PROYECTO_26JUN2026.md
Producción: v3.0.0 desplegada · 3 surveys en live · tag v3.0.0 (commit fcf93ea)
Formulario v3: COMPLETO (motor, wizard, instancias, submit server-side, autocomplete geo)
Dashboard: Mirada Empresa funcional en producción · País/Humana diferidas
Datos en VPS: 51 respuestas en survey Demo (no limpiar — para mostrar al equipo)
Bug abierto: "Ninguna de las anteriores" en rpc_me_carrera_congelada (no bloqueante)
Próximo paso: [COMPLETAR]
```