Primer commit - Sprint 1
This commit is contained in:
307
supabase/seed.sql
Normal file
307
supabase/seed.sql
Normal file
@@ -0,0 +1,307 @@
|
||||
-- ============================================================
|
||||
-- Seed: Etapa 1 — Encuesta de Mapeo de Cuidadores
|
||||
--
|
||||
-- Carga:
|
||||
-- 1. 1 organización de prueba
|
||||
-- 2. 1 consent_version v1 (scopes: operativo + macro_n1)
|
||||
-- 3. 1 encuesta "Mapeo de Cuidadores" (anónima, sensible, confidencial, Modo A)
|
||||
-- 4. 9 preguntas con códigos del mockup:
|
||||
-- B1 (yes_no), B2, B4, B5 — situación de cuidado (B5 is_sensitive=true)
|
||||
-- C1 (yes_no) — impacto laboral
|
||||
-- D1 (yes_no) — apoyo recibido
|
||||
-- G4 (single_choice) — frecuencia de estrés [condicional a C1=yes]
|
||||
-- H1 (multiple_choice, max_select=3) — apoyo preferido
|
||||
-- H3 (text_long) — comentarios libres
|
||||
-- 5. conditional_rules: B1 → show B2/B4/B5; C1 → show G4
|
||||
--
|
||||
-- UUIDs fijos para reproducibilidad y referencia desde tests.
|
||||
-- Nota: el mockup original no estaba disponible; los textos de pregunta
|
||||
-- son diseñados según el contexto "mapeo de cuidadores". Ver ETAPA_1_PROMPT.md.
|
||||
-- ============================================================
|
||||
|
||||
-- UUIDs de referencia:
|
||||
-- org: 10000000-0000-0000-0000-000000000001
|
||||
-- consent_v1: 20000000-0000-0000-0000-000000000001
|
||||
-- survey: 30000000-0000-0000-0000-000000000001
|
||||
-- q_B1..q_H3: 4000...0001 al 4000...0009
|
||||
|
||||
-- ============================================================
|
||||
-- 1. Organización de prueba
|
||||
-- ============================================================
|
||||
INSERT INTO public.organizations (id, name, sector, size_bucket)
|
||||
VALUES (
|
||||
'10000000-0000-0000-0000-000000000001',
|
||||
'Empresa Demo S.A.',
|
||||
'Servicios',
|
||||
'100-500'
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ============================================================
|
||||
-- 2. Versión de consentimiento v1
|
||||
-- Scopes ofrecidos: operativo (dashboard empresa) + macro_n1 (estudio país anonimizado)
|
||||
-- NO incluye macro_n3 (atribuible) — decisión de v1 (ADR-001)
|
||||
-- ============================================================
|
||||
INSERT INTO public.consent_versions (id, version, body, scopes)
|
||||
VALUES (
|
||||
'20000000-0000-0000-0000-000000000001',
|
||||
'v1',
|
||||
'Esta encuesta es completamente anónima: no registramos tu nombre, número de documento '
|
||||
'ni ningún dato que permita identificarte personalmente. '
|
||||
'Tus respuestas se usarán con dos propósitos: '
|
||||
'(1) Ayudar a tu empresa a comprender la situación de cuidado de sus colaboradores y '
|
||||
'diseñar apoyos más adecuados (uso operativo, solo agregados). '
|
||||
'(2) Contribuir a un estudio de alcance nacional sobre la "economía del cuidado" en Paraguay, '
|
||||
'utilizando únicamente datos anonimizados e irreversiblemente desvinculados de cualquier empresa '
|
||||
'(Nivel 1 anonimizado). '
|
||||
'Una vez enviada tu respuesta, al ser anónima, no es posible retirarla ni modificarla. '
|
||||
'Podés elegir qué propósitos autorizás marcando las casillas a continuación.',
|
||||
'["operativo", "macro_n1"]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ============================================================
|
||||
-- 3. Encuesta: Mapeo de Cuidadores
|
||||
-- Anónima + Sensible (contiene datos de salud/discapacidad) + Confidencial
|
||||
-- Modo A: nosotros como responsables del tratamiento
|
||||
-- k_threshold=5: ninguna celda expuesta con n<5
|
||||
-- ============================================================
|
||||
INSERT INTO public.surveys (
|
||||
id, org_id, title, status,
|
||||
is_anonymous, data_sensitivity, security_class, controller_role,
|
||||
consent_version_id, k_threshold
|
||||
)
|
||||
VALUES (
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'10000000-0000-0000-0000-000000000001',
|
||||
'Mapeo de Cuidadores — Edición 2026',
|
||||
'draft',
|
||||
true, -- anónima (regla no negociable #2: respondent_id siempre NULL)
|
||||
'sensible', -- contiene preguntas de salud/discapacidad (B5)
|
||||
'confidencial', -- acceso restringido a la empresa y analistas internos
|
||||
'A', -- Modo A: InQ es responsable del tratamiento (v1 solo Modo A)
|
||||
'20000000-0000-0000-0000-000000000001',
|
||||
5 -- umbral k-anonimato por defecto
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ============================================================
|
||||
-- 4. Preguntas de la encuesta
|
||||
-- Orden: position define el flujo de presentación
|
||||
-- conditional_rules en el formato: [{ if_question, op, value, action, target }]
|
||||
-- if_question = code de la pregunta trigger
|
||||
-- target = code de la pregunta afectada
|
||||
-- ============================================================
|
||||
|
||||
-- B1: Pregunta disparadora — ¿Tenés persona a cargo?
|
||||
-- Si es "yes" → se despliegan B2, B4, B5
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, conditional_rules
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000001',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'B1',
|
||||
'yes_no',
|
||||
'¿Tenés a cargo a una o más personas con discapacidad permanente o adultos mayores '
|
||||
'(60 años o más) que requieran cuidados especiales de forma regular?',
|
||||
1,
|
||||
false,
|
||||
true,
|
||||
'[
|
||||
{"if_question": "B1", "op": "eq", "value": "yes", "action": "show", "target": "B2"},
|
||||
{"if_question": "B1", "op": "eq", "value": "yes", "action": "show", "target": "B4"},
|
||||
{"if_question": "B1", "op": "eq", "value": "yes", "action": "show", "target": "B5"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- B2: ¿Cuántas personas a cargo? (condicional a B1=yes)
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, options
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000002',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'B2',
|
||||
'single_choice',
|
||||
'¿Cuántas personas a tu cargo requieren cuidado especial?',
|
||||
2,
|
||||
false,
|
||||
false,
|
||||
'[
|
||||
{"value": "1", "label": "1 persona"},
|
||||
{"value": "2", "label": "2 personas"},
|
||||
{"value": "3+", "label": "3 o más personas"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- B4: Relación con la persona a cargo (condicional a B1=yes)
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, options
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000003',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'B4',
|
||||
'single_choice',
|
||||
'¿Cuál es tu relación con la principal persona que cuidás?',
|
||||
3,
|
||||
false,
|
||||
false,
|
||||
'[
|
||||
{"value": "hijo_a", "label": "Hijo/a"},
|
||||
{"value": "padre_madre", "label": "Padre, madre o suegro/a"},
|
||||
{"value": "conyuge", "label": "Cónyuge o pareja"},
|
||||
{"value": "hermano_a", "label": "Hermano/a"},
|
||||
{"value": "otro_familiar", "label": "Otro familiar"},
|
||||
{"value": "otra", "label": "Otra relación"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- B5: Tipo de discapacidad/condición (condicional a B1=yes)
|
||||
-- is_sensitive=true: contiene datos de salud (categoría especial Ley 7593/2025)
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, options
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000004',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'B5',
|
||||
'multiple_choice',
|
||||
'¿Qué tipo de discapacidad o condición tiene la persona que cuidás? '
|
||||
'(Podés marcar más de una opción)',
|
||||
4,
|
||||
true, -- SENSIBLE: dato de salud/discapacidad (Ley 7593, categoría especial)
|
||||
false,
|
||||
'[
|
||||
{"value": "fisica", "label": "Física o motriz"},
|
||||
{"value": "visual", "label": "Visual"},
|
||||
{"value": "auditiva", "label": "Auditiva"},
|
||||
{"value": "mental", "label": "Mental o psicosocial"},
|
||||
{"value": "intelectual", "label": "Intelectual o cognitiva"},
|
||||
{"value": "am_sin_cert", "label": "Adulto mayor sin discapacidad certificada"},
|
||||
{"value": "otra", "label": "Otra condición"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- C1: Impacto laboral
|
||||
-- Si es "yes" → se despliega G4
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, conditional_rules
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000005',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'C1',
|
||||
'yes_no',
|
||||
'¿Sentís que tu rol de cuidador/a afecta tu asistencia, puntualidad o rendimiento '
|
||||
'en el trabajo?',
|
||||
5,
|
||||
false,
|
||||
true,
|
||||
'[
|
||||
{"if_question": "C1", "op": "eq", "value": "yes", "action": "show", "target": "G4"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- D1: Apoyo recibido de la empresa
|
||||
-- Declarada como trigger de sub-preguntas; sub-preguntas se agregan en iteración posterior
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, conditional_rules
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000006',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'D1',
|
||||
'yes_no',
|
||||
'¿Tu empresa te ofrece actualmente algún apoyo o beneficio pensado para personas que '
|
||||
'cuidan a familiares con discapacidad o adultos mayores?',
|
||||
6,
|
||||
false,
|
||||
true,
|
||||
'[]'::jsonb -- sub-preguntas a agregar en iteración posterior (mockup pendiente)
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- G4: Frecuencia de estrés (condicional a C1=yes)
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, options
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000007',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'G4',
|
||||
'single_choice',
|
||||
'¿Con qué frecuencia la situación de cuidado te genera preocupación o estrés '
|
||||
'durante tu jornada laboral?',
|
||||
7,
|
||||
false,
|
||||
false,
|
||||
'[
|
||||
{"value": "nunca", "label": "Nunca"},
|
||||
{"value": "raramente", "label": "Raramente (1-2 veces por mes)"},
|
||||
{"value": "a_veces", "label": "A veces (1-2 veces por semana)"},
|
||||
{"value": "frecuentemente","label": "Frecuentemente (casi todos los días)"},
|
||||
{"value": "siempre", "label": "Siempre (todos los días)"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- H1: Apoyo preferido (max_select=3)
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required, max_select, options
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000008',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'H1',
|
||||
'multiple_choice',
|
||||
'¿Qué tipos de apoyo de parte de la empresa valorarías más? '
|
||||
'Elegí hasta 3 opciones.',
|
||||
8,
|
||||
false,
|
||||
false,
|
||||
3, -- max_select=3 (mockup H1)
|
||||
'[
|
||||
{"value": "horario_flex", "label": "Horarios flexibles o trabajo híbrido"},
|
||||
{"value": "teletrabajo", "label": "Teletrabajo permanente"},
|
||||
{"value": "licencias", "label": "Licencias especiales para situaciones de cuidado"},
|
||||
{"value": "apoyo_eco", "label": "Apoyo económico o subsidio"},
|
||||
{"value": "orientacion", "label": "Orientación o asesoramiento profesional"},
|
||||
{"value": "grupos_apoyo", "label": "Grupos de apoyo entre pares"},
|
||||
{"value": "recursos_ext", "label": "Conexión con servicios o recursos externos"},
|
||||
{"value": "otro", "label": "Otro (especificar en comentarios)"}
|
||||
]'::jsonb
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- H3: Texto libre — NO expuesto en el store analítico crudo (regla #4 CLAUDE.md)
|
||||
INSERT INTO public.questions (
|
||||
id, survey_id, code, type, prompt, position,
|
||||
is_sensitive, required
|
||||
)
|
||||
VALUES (
|
||||
'40000000-0000-0000-0000-000000000009',
|
||||
'30000000-0000-0000-0000-000000000001',
|
||||
'H3',
|
||||
'text_long',
|
||||
'Si querés compartir algo más sobre tu situación o tenés sugerencias para la empresa, '
|
||||
'podés hacerlo acá. (Opcional — tu respuesta es anónima)',
|
||||
9,
|
||||
false,
|
||||
false
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
Reference in New Issue
Block a user