8.0 KiB
8.0 KiB
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· commitfcf93ea - Preservación:
v2.1.0-stable+ tagv2.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_idpor 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_cuidadorverificados 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 bugcntOpción B).
- 11 RPCs (
- 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 entop_opcionesa pesar del filtro en el subquery. El filtro opera sobre el array completo, no sobre los elementos individuales deljsonb_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 citadosdashboard_tres_miradas_mockup.html— mockup funcional 3 pestañasSPEC_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:
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(ramamain) - 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
- Sprint dashboard — Miradas País y Humana, fix BUG-001 carrera congelada,
preguntas faltantes (horas no remuneradas, escolarización), decisión
qi_modalidad. - Sprint compliance — SEC-002 (audit log, hashing, cifrado), SEC-003, TECH-DEBT-006/009.
- 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]