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