# 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)