Validaciones mandatorias — Sección 8 — IDs concretos
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
-- Migration 008: fix answers_insert policy
|
||||
-- Root cause: WITH CHECK con EXISTS en responses
|
||||
-- bloqueaba INSERT de anon porque anon no tiene SELECT en responses.
|
||||
-- El FK response_id → responses(id) ya garantiza la integridad referencial.
|
||||
DROP POLICY "answers_insert" ON public.answers;
|
||||
CREATE POLICY "answers_insert" ON public.answers
|
||||
FOR INSERT TO anon, authenticated
|
||||
WITH CHECK (true);
|
||||
@@ -48,6 +48,11 @@ INSERT INTO public.surveys (
|
||||
'20000000-0000-0000-0000-000000000001', 5
|
||||
) ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- brand_config: org demo (el director actualiza con datos reales antes de enviar el link)
|
||||
UPDATE public.surveys
|
||||
SET brand_config = '{"org_name":"Empresa Demo","branch_name":"Oficina Central","branch_city":"Asunción"}'::jsonb
|
||||
WHERE id = '30000000-0000-0000-0000-000000000001';
|
||||
|
||||
-- ── Preguntas: DELETE + INSERT para idempotencia total ────────
|
||||
DELETE FROM public.questions
|
||||
WHERE survey_id = '30000000-0000-0000-0000-000000000001';
|
||||
@@ -55,27 +60,69 @@ WHERE survey_id = '30000000-0000-0000-0000-000000000001';
|
||||
|
||||
-- ══════════════════════════════════════════════════════════════
|
||||
-- SECCIÓN A — Datos Generales (top-level, cuasi-identificadores)
|
||||
-- A1/A2/A3: text_short (texto libre, sin opciones)
|
||||
-- qi_sector ← A4 · qi_age_bucket ← A5
|
||||
-- qi_city/qi_country ← A2/A1: se agregan como columnas qi en Sprint 3
|
||||
-- A1=Departamento (single_choice, GeoSelectWidget), A2=Ciudad (single_choice, filtrado client-side)
|
||||
-- A3=Barrio (text_short, opcional)
|
||||
-- qi_sector ← A4 · qi_age_bucket ← A5 · qi_city/qi_country ← Sprint 3
|
||||
-- ══════════════════════════════════════════════════════════════
|
||||
|
||||
INSERT INTO public.questions (id,survey_id,code,type,prompt,position,is_sensitive,required)
|
||||
-- A1: Departamento (18 opciones — los 18 departamentos de Paraguay + Capital)
|
||||
INSERT INTO public.questions (id,survey_id,code,type,prompt,position,is_sensitive,required,options)
|
||||
VALUES ('40000000-0000-0000-0000-000000000001','30000000-0000-0000-0000-000000000001',
|
||||
'A1','text_short','País',1,false,false);
|
||||
'A1','single_choice','Departamento',1,false,false,
|
||||
'[{"value":"Asunción (Capital)","label":"Asunción (Capital)"},
|
||||
{"value":"Alto Paraguay","label":"Alto Paraguay"},
|
||||
{"value":"Alto Paraná","label":"Alto Paraná"},
|
||||
{"value":"Amambay","label":"Amambay"},
|
||||
{"value":"Boquerón","label":"Boquerón"},
|
||||
{"value":"Caaguazú","label":"Caaguazú"},
|
||||
{"value":"Caazapá","label":"Caazapá"},
|
||||
{"value":"Canindeyú","label":"Canindeyú"},
|
||||
{"value":"Central","label":"Central"},
|
||||
{"value":"Concepción","label":"Concepción"},
|
||||
{"value":"Cordillera","label":"Cordillera"},
|
||||
{"value":"Guairá","label":"Guairá"},
|
||||
{"value":"Itapúa","label":"Itapúa"},
|
||||
{"value":"Misiones","label":"Misiones"},
|
||||
{"value":"Ñeembucú","label":"Ñeembucú"},
|
||||
{"value":"Paraguarí","label":"Paraguarí"},
|
||||
{"value":"Presidente Hayes","label":"Presidente Hayes"},
|
||||
{"value":"San Pedro","label":"San Pedro"}]'::jsonb);
|
||||
|
||||
INSERT INTO public.questions (id,survey_id,code,type,prompt,position,is_sensitive,required)
|
||||
-- A2: Ciudad (todas las ciudades; el GeoSelectWidget filtra client-side por departamento)
|
||||
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',
|
||||
'A2','text_short','Ciudad',2,false,false);
|
||||
'A2','single_choice','Ciudad',2,false,false,
|
||||
'[{"value":"Asunción","label":"Asunción"},
|
||||
{"value":"Fuerte Olimpo","label":"Fuerte Olimpo"},{"value":"Bahía Negra","label":"Bahía Negra"},{"value":"Carmelo Peralta","label":"Carmelo Peralta"},{"value":"La Victoria","label":"La Victoria"},
|
||||
{"value":"Ciudad del Este","label":"Ciudad del Este"},{"value":"Hernandarias","label":"Hernandarias"},{"value":"Minga Guazú","label":"Minga Guazú"},{"value":"Presidente Franco","label":"Presidente Franco"},{"value":"Minga Porã","label":"Minga Porã"},{"value":"Naranjal","label":"Naranjal"},{"value":"Ñacunday","label":"Ñacunday"},{"value":"San Alberto","label":"San Alberto"},{"value":"Santa Rita","label":"Santa Rita"},{"value":"Tavapy","label":"Tavapy"},{"value":"Yguazú","label":"Yguazú"},{"value":"Juan E. O''Leary","label":"Juan E. O''Leary"},{"value":"San Cristóbal","label":"San Cristóbal"},{"value":"Santa Fe del Paraná","label":"Santa Fe del Paraná"},{"value":"Dr. Juan León Mallorquín","label":"Dr. Juan León Mallorquín"},{"value":"Itakyry","label":"Itakyry"},{"value":"Domingo Martínez de Irala","label":"Domingo Martínez de Irala"},
|
||||
{"value":"Pedro Juan Caballero","label":"Pedro Juan Caballero"},{"value":"Bella Vista Norte","label":"Bella Vista Norte"},{"value":"Capitán Bado","label":"Capitán Bado"},{"value":"Zanja Pytã","label":"Zanja Pytã"},
|
||||
{"value":"Filadelfia","label":"Filadelfia"},{"value":"Loma Plata","label":"Loma Plata"},{"value":"Mariscal Estigarribia","label":"Mariscal Estigarribia"},{"value":"Neuland","label":"Neuland"},
|
||||
{"value":"Coronel Oviedo","label":"Coronel Oviedo"},{"value":"Caaguazú","label":"Caaguazú"},{"value":"Carayaó","label":"Carayaó"},{"value":"Dr. Juan Manuel Frutos","label":"Dr. Juan Manuel Frutos"},{"value":"Mbutuy","label":"Mbutuy"},{"value":"Nueva Londres","label":"Nueva Londres"},{"value":"Raúl Arsenio Oviedo","label":"Raúl Arsenio Oviedo"},{"value":"Repatriación","label":"Repatriación"},{"value":"San Joaquín","label":"San Joaquín"},{"value":"San José de los Arroyos","label":"San José de los Arroyos"},{"value":"Simón Bolívar","label":"Simón Bolívar"},{"value":"Vaquería","label":"Vaquería"},{"value":"Yhú","label":"Yhú"},{"value":"José Domingo Ocampos","label":"José Domingo Ocampos"},{"value":"3 de Febrero","label":"3 de Febrero"},{"value":"Mcal. Francisco Solano López","label":"Mcal. Francisco Solano López"},{"value":"Los Cedrales","label":"Los Cedrales"},
|
||||
{"value":"Caazapá","label":"Caazapá"},{"value":"Abai","label":"Abai"},{"value":"Buena Vista","label":"Buena Vista"},{"value":"General Higinio Morínigo","label":"General Higinio Morínigo"},{"value":"Huber Duré","label":"Huber Duré"},{"value":"Maciel","label":"Maciel"},{"value":"San Juan Nepomuceno","label":"San Juan Nepomuceno"},{"value":"Tavaí","label":"Tavaí"},{"value":"Yegros","label":"Yegros"},{"value":"Yuty","label":"Yuty"},
|
||||
{"value":"Salto del Guairá","label":"Salto del Guairá"},{"value":"Corpus Christi","label":"Corpus Christi"},{"value":"Curuguaty","label":"Curuguaty"},{"value":"General Francisco Caballero Álvarez","label":"General Francisco Caballero Álvarez"},{"value":"Itanará","label":"Itanará"},{"value":"Katueté","label":"Katueté"},{"value":"La Paloma","label":"La Paloma"},{"value":"Nueva Esperanza","label":"Nueva Esperanza"},{"value":"Yasy Kañy","label":"Yasy Kañy"},{"value":"Ypejhú","label":"Ypejhú"},
|
||||
{"value":"Areguá","label":"Areguá"},{"value":"Capiatá","label":"Capiatá"},{"value":"Fernando de la Mora","label":"Fernando de la Mora"},{"value":"Guarambaré","label":"Guarambaré"},{"value":"Itá","label":"Itá"},{"value":"Itauguá","label":"Itauguá"},{"value":"Juan Augusto Saldívar","label":"Juan Augusto Saldívar"},{"value":"Lambaré","label":"Lambaré"},{"value":"Limpio","label":"Limpio"},{"value":"Luque","label":"Luque"},{"value":"Mariano Roque Alonso","label":"Mariano Roque Alonso"},{"value":"Nueva Italia","label":"Nueva Italia"},{"value":"Ñemby","label":"Ñemby"},{"value":"San Antonio","label":"San Antonio"},{"value":"San Lorenzo","label":"San Lorenzo"},{"value":"Villa Elisa","label":"Villa Elisa"},{"value":"Villeta","label":"Villeta"},{"value":"Ypané","label":"Ypané"},{"value":"Ypacaraí","label":"Ypacaraí"},
|
||||
{"value":"Concepción","label":"Concepción"},{"value":"Belén","label":"Belén"},{"value":"Horqueta","label":"Horqueta"},{"value":"Loreto","label":"Loreto"},{"value":"San Lázaro","label":"San Lázaro"},{"value":"San Carlos del Apa","label":"San Carlos del Apa"},{"value":"Yby Yaú","label":"Yby Yaú"},{"value":"Azote''y","label":"Azote''y"},{"value":"Sgto. José Félix López","label":"Sgto. José Félix López"},
|
||||
{"value":"Caacupé","label":"Caacupé"},{"value":"Altos","label":"Altos"},{"value":"Arroyos y Esteros","label":"Arroyos y Esteros"},{"value":"Caraguatay","label":"Caraguatay"},{"value":"Emboscada","label":"Emboscada"},{"value":"Eusebio Ayala","label":"Eusebio Ayala"},{"value":"Isla Pucú","label":"Isla Pucú"},{"value":"Itacurubí de la Cordillera","label":"Itacurubí de la Cordillera"},{"value":"Juan de Mena","label":"Juan de Mena"},{"value":"Loma Grande","label":"Loma Grande"},{"value":"Mbocayaty del Yhaguy","label":"Mbocayaty del Yhaguy"},{"value":"Nueva Colombia","label":"Nueva Colombia"},{"value":"Pirayú","label":"Pirayú"},{"value":"Primero de Marzo","label":"Primero de Marzo"},{"value":"Tobatí","label":"Tobatí"},{"value":"Valenzuela","label":"Valenzuela"},
|
||||
{"value":"Villarrica","label":"Villarrica"},{"value":"Borja","label":"Borja"},{"value":"Capitán Mauricio José Troche","label":"Capitán Mauricio José Troche"},{"value":"Coronel Martínez","label":"Coronel Martínez"},{"value":"Félix Pérez Cardozo","label":"Félix Pérez Cardozo"},{"value":"General Eugenio A. Garay","label":"General Eugenio A. Garay"},{"value":"Independencia","label":"Independencia"},{"value":"Itapé","label":"Itapé"},{"value":"Iturbe","label":"Iturbe"},{"value":"José Fassardi","label":"José Fassardi"},{"value":"Mbocayaty","label":"Mbocayaty"},{"value":"Natalicio Talavera","label":"Natalicio Talavera"},{"value":"Ñumí","label":"Ñumí"},{"value":"San Salvador","label":"San Salvador"},{"value":"Yataity","label":"Yataity"},
|
||||
{"value":"Encarnación","label":"Encarnación"},{"value":"Alto Verá","label":"Alto Verá"},{"value":"Bella Vista","label":"Bella Vista"},{"value":"Cambyretá","label":"Cambyretá"},{"value":"Capitán Meza","label":"Capitán Meza"},{"value":"Capitán Miranda","label":"Capitán Miranda"},{"value":"Carlos A. López","label":"Carlos A. López"},{"value":"Carmen del Paraná","label":"Carmen del Paraná"},{"value":"Coronel Bogado","label":"Coronel Bogado"},{"value":"Cosme","label":"Cosme"},{"value":"Edelira","label":"Edelira"},{"value":"Fram","label":"Fram"},{"value":"General Artigas","label":"General Artigas"},{"value":"Hohenau","label":"Hohenau"},{"value":"Itapúa Poty","label":"Itapúa Poty"},{"value":"Jesús","label":"Jesús"},{"value":"La Paz","label":"La Paz"},{"value":"Leandro Oviedo","label":"Leandro Oviedo"},{"value":"Mayor Otaño","label":"Mayor Otaño"},{"value":"Natalio","label":"Natalio"},{"value":"Nueva Alborada","label":"Nueva Alborada"},{"value":"Obligado","label":"Obligado"},{"value":"Pirapó","label":"Pirapó"},{"value":"San Cosme y Damián","label":"San Cosme y Damián"},{"value":"San Juan del Paraná","label":"San Juan del Paraná"},{"value":"San Pedro del Paraná","label":"San Pedro del Paraná"},{"value":"San Rafael del Paraná","label":"San Rafael del Paraná"},{"value":"Trinidad","label":"Trinidad"},{"value":"Tomás Romero Pereira","label":"Tomás Romero Pereira"},
|
||||
{"value":"San Juan Bautista","label":"San Juan Bautista"},{"value":"Ayolas","label":"Ayolas"},{"value":"San Ignacio","label":"San Ignacio"},{"value":"San Miguel","label":"San Miguel"},{"value":"San Patricio","label":"San Patricio"},{"value":"Santa María","label":"Santa María"},{"value":"Santa Rosa","label":"Santa Rosa"},{"value":"Santiago","label":"Santiago"},{"value":"Villa Florida","label":"Villa Florida"},{"value":"Yabebyry","label":"Yabebyry"},
|
||||
{"value":"Pilar","label":"Pilar"},{"value":"Alberdi","label":"Alberdi"},{"value":"Cerrito","label":"Cerrito"},{"value":"Desmochados","label":"Desmochados"},{"value":"General José Eduvigis Díaz","label":"General José Eduvigis Díaz"},{"value":"Guazú Cuá","label":"Guazú Cuá"},{"value":"Humaitá","label":"Humaitá"},{"value":"Isla Umbú","label":"Isla Umbú"},{"value":"Laureles","label":"Laureles"},{"value":"Mayor José de J. Martínez","label":"Mayor José de J. Martínez"},{"value":"Paso de Patria","label":"Paso de Patria"},{"value":"San Juan Bautista del Ñeembucú","label":"San Juan Bautista del Ñeembucú"},{"value":"Tacuaras","label":"Tacuaras"},{"value":"Villa Franca","label":"Villa Franca"},{"value":"Villa Oliva","label":"Villa Oliva"},{"value":"Villalba","label":"Villalba"},
|
||||
{"value":"Paraguarí","label":"Paraguarí"},{"value":"Acahay","label":"Acahay"},{"value":"Carapeguá","label":"Carapeguá"},{"value":"Escobar","label":"Escobar"},{"value":"General Bernardino Caballero","label":"General Bernardino Caballero"},{"value":"La Colmena","label":"La Colmena"},{"value":"Mbuyapey","label":"Mbuyapey"},{"value":"Quiindy","label":"Quiindy"},{"value":"Quyquyhó","label":"Quyquyhó"},{"value":"San Roque González de Santa Cruz","label":"San Roque González de Santa Cruz"},{"value":"Sapucaí","label":"Sapucaí"},{"value":"Tebicuarymí","label":"Tebicuarymí"},{"value":"Ybycuí","label":"Ybycuí"},{"value":"Ybytymí","label":"Ybytymí"},{"value":"Yaguarón","label":"Yaguarón"},
|
||||
{"value":"Villa Hayes","label":"Villa Hayes"},{"value":"Benjamín Aceval","label":"Benjamín Aceval"},{"value":"José Falcón","label":"José Falcón"},{"value":"Nanawa","label":"Nanawa"},{"value":"Nueva Asunción","label":"Nueva Asunción"},{"value":"Pozo Colorado","label":"Pozo Colorado"},{"value":"Puerto Pinasco","label":"Puerto Pinasco"},{"value":"Teniente Primero Manuel Irala Fernández","label":"Teniente Primero Manuel Irala Fernández"},{"value":"Villa del Río","label":"Villa del Río"},
|
||||
{"value":"San Pedro del Ycuamandiyú","label":"San Pedro del Ycuamandiyú"},{"value":"Antequera","label":"Antequera"},{"value":"Choré","label":"Choré"},{"value":"General Elizardo Aquino","label":"General Elizardo Aquino"},{"value":"Guayaibí","label":"Guayaibí"},{"value":"Itacurubí del Rosario","label":"Itacurubí del Rosario"},{"value":"Lima","label":"Lima"},{"value":"Nueva Germania","label":"Nueva Germania"},{"value":"Río Verde","label":"Río Verde"},{"value":"San Estanislao (Santaní)","label":"San Estanislao (Santaní)"},{"value":"Tacuatí","label":"Tacuatí"},{"value":"Unión","label":"Unión"},{"value":"Villa del Rosario","label":"Villa del Rosario"},{"value":"Yataity del Norte","label":"Yataity del Norte"}
|
||||
]'::jsonb);
|
||||
|
||||
-- A3: Barrio (text_short, opcional — antes era "Sucursal o sede")
|
||||
INSERT INTO public.questions (id,survey_id,code,type,prompt,position,is_sensitive,required)
|
||||
VALUES ('40000000-0000-0000-0000-000000000003','30000000-0000-0000-0000-000000000001',
|
||||
'A3','text_short','Sucursal o sede',3,false,false);
|
||||
'A3','text_short','¿En qué barrio vivís? (opcional)',3,false,false);
|
||||
|
||||
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',
|
||||
'A4','single_choice','¿En qué área o gerencia trabajás?',4,false,false,
|
||||
'[{"value":"Operaciones/Producción","label":"Operaciones/Producción"},
|
||||
'[{"value":"Directorio","label":"Directorio"},
|
||||
{"value":"Gerencia","label":"Gerencia"},
|
||||
{"value":"Operaciones/Producción","label":"Operaciones/Producción"},
|
||||
{"value":"Comercial/Ventas","label":"Comercial/Ventas"},
|
||||
{"value":"Administración/Finanzas","label":"Administración/Finanzas"},
|
||||
{"value":"Recursos Humanos/Cultura","label":"Recursos Humanos/Cultura"},
|
||||
@@ -146,6 +193,7 @@ VALUES ('40000000-0000-0000-0000-000000000010','30000000-0000-0000-0000-00000000
|
||||
{"value":"Andador","label":"Andador"},
|
||||
{"value":"Muletas","label":"Muletas"},
|
||||
{"value":"Prótesis","label":"Prótesis"},
|
||||
{"value":"Tecnología asistiva","label":"Tecnología asistiva"},
|
||||
{"value":"No utilizo","label":"No utilizo"}]'::jsonb,
|
||||
'[{"if_question":"1.1","op":"eq","value":"Sí","action":"show"}]'::jsonb);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user