# BRIEF — Sprint 1: Fundación de datos > Brief versionado. Arranca antes de pedirle código al agente (Patrón A.1). El detalle ejecutable de > cada etapa va en `ETAPA_X_PROMPT.md`. --- ## Objetivo (una frase) Tener el modelo de datos de la plataforma implementado en Supabase — esquema + RLS + seed de la encuesta de mapeo de cuidadores — como base verificable sobre la que después se montan formulario, dashboard y wizard. ## Por qué este sprint primero Todo lo demás (formulario, dashboard, wizard) escribe o lee de este modelo. Un modelo con datos sensibles mal diseñado no se migra gratis. Empezamos por el contrato de datos (ADR-001 + DATA_MODEL). ## Alcance (qué entra) 1. Migraciones de Supabase para las tablas de `DATA_MODEL.md`. 2. Policies de RLS según la "Intención de RLS" de `DATA_MODEL.md`. 3. Constraint/trigger que rechaza `respondent_id` no nulo cuando `is_anonymous = true`. 4. Función `agg_segment(...)` que suprime celdas con `count < k_threshold`. 5. Tablas de consentimiento (`consent_versions`, `consent_records`) inmutables. 6. Seed: la encuesta de mapeo de cuidadores (preguntas B1/C1/D1 con lógica condicional, H1 con límite, escalas, texto libre) cargada como `survey` + `questions` + reglas condicionales. 7. Seed de 1 organización de prueba. ## Fuera de alcance (explícito) - Frontend del formulario (Sprint 2). - Dashboard / reportes (Sprint 3). - Wizard de creación de encuestas (post-validación del caso fijo). - Integración LLM (BACKLOG). - Modo B / `controller_role` dual (reservado en esquema, no operado). - `respondent_id` en uso (reservado, va NULL). - Decisión de residencia de datos (ADR-002 abierto; v1 puede correr en Cloud con datos de prueba). ## Decisiones ya tomadas (no renegociar — ver CLAUDE.md y ADR-001) - Encuestas anónimas a nivel respondente; se conserva `company_id` + cuasi-identificadores. - Dedup por `ip_hash`. Cuasi-identificadores en bucket (rango etario, no fecha exacta). - Modo A. Consentimiento granular versionado inmutable. Umbral k = 5. - El texto libre no se expone crudo a la capa analítica. ## Criterios de éxito (checklist) - [ ] `supabase db reset` / migraciones aplican limpio desde cero. - [ ] El esquema generado coincide con `DATA_MODEL.md` (todas las tablas y columnas). - [ ] Test de RLS: una organización NO puede leer filas crudas de otra (ni de la suya). - [ ] Test: `INSERT` con `respondent_id` no nulo en encuesta anónima → falla. - [ ] Test: `agg_segment` devuelve "n insuficiente" para un segmento con count < 5. - [ ] Test: `UPDATE`/`DELETE` sobre `consent_records` → falla (inmutabilidad). - [ ] Seed carga la encuesta de cuidadores con sus reglas condicionales íntegras. - [ ] El director revisa el esquema generado (no solo "tests verdes"). ## Etapas del sprint - **Etapa 1** — Esquema + RLS + constraints + seed (este prompt: `ETAPA_1_PROMPT.md`). - (Etapa 2+ se definen tras validar la Etapa 1.)