diff --git a/components/consent-screen.tsx b/components/consent-screen.tsx index daace19..af367f5 100644 --- a/components/consent-screen.tsx +++ b/components/consent-screen.tsx @@ -26,15 +26,17 @@ export function ConsentScreen({ brandConfig, onAccept }: ConsentScreenProps) {

  1. - Diagnóstico interno de {orgName}: tus respuestas ayudan a la empresa - a entender la realidad de las personas que cuidan a familiares con discapacidad o adultos - mayores, para diseñar apoyos más adecuados. Solo se trabaja con{' '} + Diagnóstico interno de {orgName}: Tus respuestas ayudan a la empresa, + en alianza con Fundación Solidaridad, a entender la realidad de las personas que cuidan + a familiares con discapacidad o adultos mayores, para diseñar apoyos más adecuados. Solo + se trabaja con{' '} datos agregados — nunca accede a respuestas individuales.
  2. - Estudio país (opcional): tus respuestas anonimizadas contribuyen a un - mapeo nacional sobre la economía del cuidado en Paraguay. Los datos se procesan de - forma irreversiblemente desvinculada de cualquier empresa o persona. + Estudio país (opcional): Tus respuestas serán{' '} + anónimas y contribuyen a un mapeo nacional sobre la economía del + cuidado en Paraguay. Los datos se procesan de manera que no pueden asociarse a ninguna + empresa ni persona.
diff --git a/sprints/sprint-3-infra/ETAPA_3C_PROMPT.md b/sprints/sprint-3-infra/ETAPA_3C_PROMPT.md new file mode 100644 index 0000000..9c59ebd --- /dev/null +++ b/sprints/sprint-3-infra/ETAPA_3C_PROMPT.md @@ -0,0 +1,189 @@ +# ETAPA 3C — Texto de consentimiento + dos nuevas encuestas piloto + +## 1. Objetivo +Dos cambios independientes: +1. Actualizar el texto de la pantalla de consentimiento para usar el nombre de empresa + dinámico desde la DB y el nuevo wording aprobado. +2. Insertar en el seed dos nuevas organizaciones y dos nuevos surveys (InQuality y + Fundación Solidaridad) como encuestas de espacio de pruebas reales. + +--- + +## 2. Contexto previo +- El nombre de empresa se lee de `surveys.brand_config.org_name` (JSONB), no de + `organizations.name`. El formulario ya tiene acceso a ese valor via `brand_config`. +- El survey actual (`30000000-...-0001`) tiene `brand_config.org_name = "InQuality"`. +- El componente que muestra la pantalla de consentimiento es `ConsentScreen`, + llamado desde `survey-form.tsx` con `brandConfig={survey.brand_config}`. +- Las dos nuevas encuestas son para uso real en espacio de pruebas — los encuestados + serán notificados cuando la plataforma madure. + +--- + +## 3. DECISIONES YA TOMADAS — no consultar de nuevo +- Organizaciones separadas para cada encuesta — cada una con su propio `org_id`. +- Los surveys nuevos tienen `status='live'` para que sean accesibles por UUID. +- El survey demo existente (`30000000-...-0001`) NO se toca — sigue funcionando. +- Los nuevos UUIDs siguen el patrón del seed: `10000000-...-0002` para org InQuality + real, `10000000-...-0003` para Fundación Solidaridad, y surveys `30000000-...-0002` + y `30000000-...-0003` respectivamente. +- `brand_config.org_name` es el campo que alimenta el texto dinámico del consentimiento. + +--- + +## 4. Cambio 1 — Texto del consentimiento + +### 4.1 Texto actual (aproximado) +``` +Diagnóstico interno de [org_name]: tus respuestas ayudan a la empresa a entender +la realidad de las personas que cuidan a familiares con discapacidad o adultos +mayores, para diseñar apoyos más adecuados. Solo se trabaja con datos agregados +— nunca accede a respuestas individuales. + +Estudio país (opcional): tus respuestas anonimizadas contribuyen a un mapeo nacional +sobre la economía del cuidado en Paraguay. Los datos se procesan de forma +irreversiblemente desvinculada de cualquier empresa o persona. +``` + +### 4.2 Texto nuevo +``` +Diagnóstico interno de [ORG_NAME]: Tus respuestas ayudan a la empresa, en alianza +con Fundación Solidaridad, a entender la realidad de las personas que cuidan a +familiares con discapacidad o adultos mayores, para diseñar apoyos más adecuados. +Solo se trabaja con datos agregados — nunca accede a respuestas individuales. + +Estudio país (opcional): Tus respuestas serán anónimas y contribuyen a un mapeo +nacional sobre la economía del cuidado en Paraguay. Los datos se procesan de manera +que no pueden asociarse a ninguna empresa ni persona. +``` + +`[ORG_NAME]` = `brand_config.org_name` — ya disponible en el componente. +Las palabras en negrita son: el nombre de la empresa, "datos agregados", +"anónimas". Mantener el mismo patrón de negritas que el texto actual. + +### 4.3 Archivo a modificar +Buscar en `ConsentScreen` o donde esté el JSX que renderiza estos dos párrafos. +Solo cambiar el texto — no la estructura ni el estilo. + +--- + +## 5. Cambio 2 — Dos nuevas organizaciones y surveys en seed.sql + +### 5.1 Organización InQuality +```sql +INSERT INTO public.organizations (id, name, sector, size_bucket) +VALUES ( + '10000000-0000-0000-0000-000000000002', + 'InQuality', + 'Consultoría/Tecnología', + '1-50' +) ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + sector = EXCLUDED.sector, + size_bucket = EXCLUDED.size_bucket; +``` + +### 5.2 Organización Fundación Solidaridad +```sql +INSERT INTO public.organizations (id, name, sector, size_bucket) +VALUES ( + '10000000-0000-0000-0000-000000000003', + 'Fundación Solidaridad', + 'Sociedad Civil/ONG', + '1-50' +) ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + sector = EXCLUDED.sector, + size_bucket = EXCLUDED.size_bucket; +``` + +### 5.3 Survey InQuality +```sql +INSERT INTO public.surveys ( + id, org_id, title, status, is_anonymous, + data_sensitivity, security_class, controller_role, + consent_version_id, brand_config, k_threshold +) VALUES ( + '30000000-0000-0000-0000-000000000002', + '10000000-0000-0000-0000-000000000002', + 'Mapeo de Cuidadores — 2026', + 'live', + true, + 'sensible', + 'confidencial', + 'A', + '20000000-0000-0000-0000-000000000001', + '{"org_name": "InQuality", "branch_name": "Equipo InQuality", "branch_city": "Asunción"}', + 5 +) ON CONFLICT (id) DO UPDATE SET + brand_config = EXCLUDED.brand_config, + status = EXCLUDED.status; +``` + +### 5.4 Survey Fundación Solidaridad +```sql +INSERT INTO public.surveys ( + id, org_id, title, status, is_anonymous, + data_sensitivity, security_class, controller_role, + consent_version_id, brand_config, k_threshold +) VALUES ( + '30000000-0000-0000-0000-000000000003', + '10000000-0000-0000-0000-000000000003', + 'Mapeo de Cuidadores — 2026', + 'live', + true, + 'sensible', + 'confidencial', + 'A', + '20000000-0000-0000-0000-000000000001', + '{"org_name": "Fundación Solidaridad", "branch_name": "Equipo Fundación", "branch_city": "Asunción"}', + 5 +) ON CONFLICT (id) DO UPDATE SET + brand_config = EXCLUDED.brand_config, + status = EXCLUDED.status; +``` + +### 5.5 Notas sobre el seed +- Usar `ON CONFLICT (id) DO UPDATE` para que el seed sea idempotente. +- El `consent_version_id` referencia el consentimiento existente + (`20000000-0000-0000-0000-000000000001`) — mismo texto para ambas. +- Las URLs resultantes serán: + - InQuality: `?s=30000000-0000-0000-0000-000000000002` + - Fundación Solidaridad: `?s=30000000-0000-0000-0000-000000000003` + +--- + +## 6. Entregables (DoD) + +- [ ] Texto del consentimiento actualizado en el componente con el nuevo wording. +- [ ] `[ORG_NAME]` dinámico desde `brand_config.org_name`. +- [ ] Negritas correctas: nombre de empresa, "datos agregados", "anónimas". +- [ ] Dos nuevas organizaciones en `seed.sql` con `ON CONFLICT`. +- [ ] Dos nuevos surveys en `seed.sql` con `ON CONFLICT`. +- [ ] Build exitoso. +- [ ] `git diff --name-only HEAD` en scope. + +## 7. Qué reportar +``` +Verificado: +- Texto de consentimiento actualizado ✓ +- org_name dinámico ✓ (valor en demo: "InQuality" o "Empresa Demo") +- Seed actualizado con 2 orgs + 2 surveys ✓ +- ON CONFLICT en todos los nuevos INSERTs ✓ +- Build exitoso ✓ +- Diff en scope ✓ + +URLs de los nuevos surveys: +- InQuality: ?s=30000000-0000-0000-0000-000000000002 +- Fundación Solidaridad: ?s=30000000-0000-0000-0000-000000000003 + +Asumido: +- [decisiones de implementación] +``` + +## 8. Qué NO hacer +- ❌ No tocar el survey demo existente (30000000-...-0001). +- ❌ No cambiar la estructura de `brand_config` — solo el texto del componente. +- ❌ No re-seedear la DB de producción — solo actualizar seed.sql. +- ❌ No cambiar estilos ni layout del ConsentScreen. +- ❌ No tocar dashboard ni RPCs. \ No newline at end of file diff --git a/supabase/seed.sql b/supabase/seed.sql index b3f3c29..0f7d6da 100644 --- a/supabase/seed.sql +++ b/supabase/seed.sql @@ -56,6 +56,81 @@ 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'; +-- ══════════════════════════════════════════════════════════════ +-- Etapa 3C — Encuestas piloto (espacio de pruebas real) +-- org InQuality: 10000000-0000-0000-0000-000000000002 +-- org Fundación Solidaridad: 10000000-0000-0000-0000-000000000003 +-- survey InQuality: 30000000-0000-0000-0000-000000000002 +-- survey Fundación Solidaridad: 30000000-0000-0000-0000-000000000003 +-- No tocan el survey demo (30000000-...-0001). +-- ══════════════════════════════════════════════════════════════ + +-- ── Organización InQuality ──────────────────────────────────── +INSERT INTO public.organizations (id, name, sector, size_bucket) +VALUES ( + '10000000-0000-0000-0000-000000000002', + 'InQuality', + 'Consultoría/Tecnología', + '1-50' +) ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + sector = EXCLUDED.sector, + size_bucket = EXCLUDED.size_bucket; + +-- ── Organización Fundación Solidaridad ──────────────────────── +INSERT INTO public.organizations (id, name, sector, size_bucket) +VALUES ( + '10000000-0000-0000-0000-000000000003', + 'Fundación Solidaridad', + 'Sociedad Civil/ONG', + '1-50' +) ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + sector = EXCLUDED.sector, + size_bucket = EXCLUDED.size_bucket; + +-- ── Survey InQuality ─────────────────────────────────────────── +INSERT INTO public.surveys ( + id, org_id, title, status, is_anonymous, + data_sensitivity, security_class, controller_role, + consent_version_id, brand_config, k_threshold +) VALUES ( + '30000000-0000-0000-0000-000000000002', + '10000000-0000-0000-0000-000000000002', + 'Mapeo de Cuidadores — 2026', + 'live', + true, + 'sensible', + 'confidencial', + 'A', + '20000000-0000-0000-0000-000000000001', + '{"org_name": "InQuality", "branch_name": "Equipo InQuality", "branch_city": "Asunción"}', + 5 +) ON CONFLICT (id) DO UPDATE SET + brand_config = EXCLUDED.brand_config, + status = EXCLUDED.status; + +-- ── Survey Fundación Solidaridad ────────────────────────────── +INSERT INTO public.surveys ( + id, org_id, title, status, is_anonymous, + data_sensitivity, security_class, controller_role, + consent_version_id, brand_config, k_threshold +) VALUES ( + '30000000-0000-0000-0000-000000000003', + '10000000-0000-0000-0000-000000000003', + 'Mapeo de Cuidadores — 2026', + 'live', + true, + 'sensible', + 'confidencial', + 'A', + '20000000-0000-0000-0000-000000000001', + '{"org_name": "Fundación Solidaridad", "branch_name": "Equipo Fundación", "branch_city": "Asunción"}', + 5 +) ON CONFLICT (id) DO UPDATE SET + brand_config = EXCLUDED.brand_config, + status = EXCLUDED.status; + -- ── Preguntas: DELETE + INSERT para idempotencia total ──────── DELETE FROM public.questions WHERE survey_id = '30000000-0000-0000-0000-000000000001';