Etapas 4A→4I completadas. Motor de flujo puro, wizard renderer, instancias familiares, submit con validación server-side, dashboard tres miradas (Mirada Empresa funcional), autocomplete barrios/ciudad. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
98 lines
4.4 KiB
Markdown
98 lines
4.4 KiB
Markdown
# 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) |