From fcf93ea3ea7ad40c1a8f5c12b5632948b789dca6 Mon Sep 17 00:00:00 2001 From: markosbenitez Date: Fri, 26 Jun 2026 22:21:08 -0300 Subject: [PATCH] =?UTF-8?q?chore(release):=20CHANGELOG=20v3.0.0=20?= =?UTF-8?q?=E2=80=94=20wizard=20declarativo=20+=20dashboard=20tres=20mirad?= =?UTF-8?q?as?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CHANGELOG.md | 58 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0db5466..1b02974 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,17 +7,57 @@ y el proyecto adhiere a [Versionado Semántico](https://semver.org/lang/es/). --- -## [No publicado] — Sprint 4: Formulario Wizard v3 +## [3.0.0] — 2026-06-27 -En desarrollo en `main`. Cambio mayor: reescritura del formulario a wizard -pregunta-por-pantalla con instancias de vínculo familiar. +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. -### Por agregar -- Wizard pregunta-por-pantalla para todo el formulario -- Instrumento v3: 10 secciones, mini-wizard anidado para vínculos familiares -- Columna `instance_id` en `answers` para datos multi-instancia -- Autocomplete de barrios desde dataset INE/DGEEC -- Subtítulos explicativos del "porqué" por sección +### 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] ---