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:
169
docs/estado/ESTADO_PROYECTO_26JUN2026.md
Normal file
169
docs/estado/ESTADO_PROYECTO_26JUN2026.md
Normal 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]
|
||||
```
|
||||
Reference in New Issue
Block a user