Files
motor-de-encuestas/supabase/seed.sql
2026-05-31 04:33:07 -03:00

308 lines
12 KiB
SQL

-- ============================================================
-- 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;