# Changelog — Datos País sobre el Cuidado Todas las versiones notables de este proyecto se documentan en este archivo. El formato sigue [Keep a Changelog](https://keepachangelog.com/es/1.1.0/) y el proyecto adhiere a [Versionado Semántico](https://semver.org/lang/es/). --- ## [3.0.0] — 2026-06-27 Reescritura del formulario a wizard declarativo pregunta-por-pantalla. Motor de flujo puro, instancias familiares, submit transaccional server-side y dashboard Tres Miradas con Mirada Empresa funcional. ### Agregado - **Motor de flujo declarativo** (`lib/form-engine.ts`): `resolveVisibility`, `resolveScreens`, `expandInstances` — lógica de show/hide/instancias en TypeScript puro, sin estado UI. Operadores `contains`, `eq_sole`, `contains_any`. - **Wizard renderer** (`components/wizard-form.tsx`): pregunta-por-pantalla, progreso lineal, layout estable sin saltos de scroll. - **Instancias familiares**: columna `instance_id` en `answers`; preguntas 4.2/4.3 se expanden por cada vínculo seleccionado en 4.1 con IDs `familiar_N`. - **Submit v3 transaccional**: Server Action + RPC `rpc_submit_response` (SECURITY DEFINER) — persiste consent_record + response + answers en una transacción atómica; revoca INSERT directo de `anon`. - **Validación server-side** (`lib/submit-validation.ts`): 7 checks antes del RPC (consent, códigos legítimos, forma de valores, visibilidad coherente, instancias válidas, opciones en rango, requeridas presentes). - **Dashboard Tres Miradas**: Mirada Empresa (`/dashboard`) con 13 widgets, RPCs STABLE `rpc_me_*` con filtros de segmento y k-anonimato; Mirada País y Mirada Perfil (base implementada). - **Autocomplete de barrios** (`BarrioAutocompleteField`): filtra `geo_paraguay_full.json` por departamento + ciudad, dropdown `position: fixed` con `getBoundingClientRect`. - **Ciudad select** (`CiudadSelectField`): filtra ciudades por departamento, limpia el valor al cambiar 2.1. - **Instrumento v3**: 10 secciones, 40 preguntas, 3 encuestas (encuesta Demo `30000000-…`, InQuality, Fundación). - Tema claro marca Re — fondos, cards y paleta de texto revisada. ### Cambiado - Esquema de DB: tabla `questions` con `instance_generator`, `instance_of`, `conditional_rules` (jsonb), `code` único por encuesta. - RLS submit: DROP de policies `*_insert` directas; único canal de escritura es `rpc_submit_response`. - Dashboard helper `getDashboardWidgetData` unificado con códigos v3 de pregunta. ### Seguridad - RPC SECURITY DEFINER para submit: cierra el `WITH CHECK(true)` que dejaba el store analítico abierto a escritura directa desde el cliente (BRIEF dec. 15). - Validación de integridad del payload en el Server Action antes del RPC: el servidor es la única fuente de verdad sobre lo que se persiste. ### Migraciones aplicadas (Sprint 4) - `20260620000001` — `instance_id` en `answers` [4A] - `20260620000002` — esquema declarativo v3 [4B] - `20260624000001` — RPC submit transaccional [4G] - `20260625000001` — RPCs dashboard Mirada Empresa [4H] - `20260625000002` — RPCs prevalencia y segmentos [4H] - `20260626000001` — fix `cnt` en RPCs `me_carrera` / `me_apoyos` [4H] --- ## [2.1.0] — 2026-06-16 Versión estable preservada en la rama `v2.1.0-stable`. Última versión del formulario lineal antes del rediseño a wizard. ### Agregado - Dashboard multitenante con selector de empresa (Todos / InQuality / Fundación / Demo) - Flag `p_all` (UUID cero) para vista agregada de todos los surveys - Vista de control `/admin/responses` con tabla plana, filtro por empresa, colapsar/expandir por submission - Dos encuestas piloto: InQuality y Fundación Solidaridad (organizaciones separadas) - Método formalizado: `method/PATTERNS.md` y `method/ANTI_PATTERNS.md` (patrones C.8, AP.10, AP.11) ### Cambiado - Instrumento actualizado a v2.1 (feedback equipo médico): salto triple, nueva pregunta 6.6, eliminación de "Prefiero no decir", 2.4 eliminada, 2.1 a multiple_choice - Next.js actualizado a 15.3.8 (pin exacto) ### Seguridad - Resuelto CVE-2025-66478 (+ advisory posterior CVE-2025-55183/55184/67779) ### Infraestructura - Migración completa a Supabase self-hosted en Dokploy - Backups GFS locales con retención de 3 días + domingos 14 días --- ## [2.0.0] — 2026-06 (anterior) Primera versión en producción con Supabase self-hosted. - Formulario lineal de 44 preguntas - Dashboard con 11 widgets y k-anonimato (k≥5) - Instrumento v2 (44 preguntas, 8 secciones)