Instrumento v2: 44 preguntas + widget text_short

This commit is contained in:
markosbenitez
2026-06-04 14:30:28 -03:00
parent 10c665d25c
commit d91ea6b2ff
11 changed files with 765 additions and 751 deletions

View File

@@ -17,8 +17,9 @@ distintos y conviene auditarlos por separado:
## Alcance
- **Etapa 2A — Motor del formulario:** lee la encuesta live desde Supabase (anon key), renderiza las
34 preguntas con el widget correcto por tipo, ejecuta la lógica condicional, valida, mobile-first,
WCAG AA, resiliencia lite. **Al enviar muestra un resumen; NO escribe en la base.**
**44 preguntas** (instrumento v2, Jun 2026) con el widget correcto por tipo (`single_choice`,
`multiple_choice`, `rating`, `text_long`, `text_short`), ejecuta la lógica condicional, valida,
mobile-first, WCAG AA, resiliencia lite. **Al enviar muestra un resumen; NO escribe en la base.**
- **Etapa 2B — Consentimiento + persistencia:** pantalla de consentimiento granular versionado
(ADR-003) con texto honesto sobre anonimato y no-revocación, que crea el `consent_record` y recién
ahí escribe `response` + `answers`, con dedup por `ip_hash`.
@@ -34,15 +35,17 @@ distintos y conviene auditarlos por separado:
- El formulario corre como **`anon`** (sin login). `service_role` NUNCA en el cliente (regla 9).
- El respondente nunca se ata a un IdP (regla 10 / ADR-004).
- `options`: array para `single_choice`/`multiple_choice`, objeto `{min,max,min_label,max_label}` para `rating`.
- Condicionales en la pregunta dependiente; disparador value `'Sí'` (B1/C1/D1).
- Condicionales en la pregunta dependiente; disparador value `'Sí'` (triggers: 1.1/1.6/1.13).
- Tipos de widget: `single_choice`→radio, `multiple_choice`→checkbox, `rating`→escala 1-5,
`text_long`→textarea, `text_short`→input de texto de una línea (A1/A2/A3).
- WCAG 2.2 AA es pilar (el sujeto es la discapacidad), no checkbox.
- El mockup `formulario_mapeo.html` es el **contrato visual** (look y flujo ya aprobados); 2A lo
replica pero data-driven desde el esquema, no hardcodeado.
## Criterios de éxito (Etapa 2A)
- [ ] Renderiza las 34 preguntas leídas desde Supabase (no hardcodeadas).
- [ ] Lógica condicional: B1/C1/D1 = "Sí" despliega sus bloques; "No"/"Prefiero no decir" los oculta y limpia.
- [ ] H1 limita a 3 selecciones; `rating` (F3/G4) maneja el formato objeto.
- [ ] Renderiza las **44 preguntas** leídas desde Supabase (no hardcodeadas).
- [ ] Lógica condicional: 1.1/1.6/1.13 = "Sí" despliegan sus bloques; "No"/"Prefiero no decir" ocultan y limpian.
- [ ] 6.2 limita a 3 selecciones; `rating` (3.5/4.3) maneja formato objeto; A1/A2/A3 son `text_short`.
- [ ] Mobile-first fluido + navegable solo con teclado + WCAG AA base.
- [ ] Refresh no pierde lo cargado (resiliencia lite).
- [ ] Enviar muestra resumen; no escribe en la base.