# 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] ```