From aa893368cd9b1121801b91b3f3dd6be8839daa24 Mon Sep 17 00:00:00 2001 From: markosbenitez Date: Mon, 22 Jun 2026 21:03:01 -0300 Subject: [PATCH] feat(schema): esquema declarativo + seed v3 del formulario [4B] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extiende questions con instance_generator/instance_of/hint. Instrumento v3 completo (10 secciones, 50 preguntas) como datos declarativos. Operadores de flujo para multiple_choice: contains, eq_sole. Flujo del formulario en el esquema, no en presentación (ADR-005). Seed solo reemplaza catálogo; no toca evidencia de consentimiento (ADR-003). Co-Authored-By: Claude Sonnet 4.6 --- supabase/seed.sql | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/supabase/seed.sql b/supabase/seed.sql index b3163cb..796ddda 100644 --- a/supabase/seed.sql +++ b/supabase/seed.sql @@ -12,7 +12,10 @@ -- -- ⚠ SOLO ENTORNOS DE DESARROLLO — nunca ejecutar en producción. -- En producción: aplicar migraciones manualmente vía CLI del VPS. --- El seed elimina respuestas y preguntas previas de las 3 encuestas. +-- El seed SOLO reemplaza catálogo (questions de las 3 encuestas vía +-- DELETE+INSERT). NUNCA toca answers/consent_records/responses — son +-- evidencia permanente (ADR-003); el trigger de inmutabilidad lo +-- impide y no se debe forzar. Reset de datos de prueba: TRUNCATE aparte. -- -- Flujo declarativo (ADR-005 — lógica en datos, renderer es puro): -- 3.1 = 'No' → oculta 3.2–3.5 (discapacidad propia no aplica) @@ -255,20 +258,9 @@ BEGIN FOREACH sid IN ARRAY survey_ids LOOP -- ════════════════════════════════════════════════════════════ - -- Limpiar datos previos en orden de dependencia FK (solo en dev). - -- consent_records es padre de responses (responses.consent_record_id → consent_records.id), - -- así que se borran los responses primero y se capturan sus consent_record_id para - -- eliminar esos registros recién después (huérfanos), nunca antes. - DELETE FROM public.answers - WHERE response_id IN (SELECT id FROM public.responses WHERE survey_id = sid); - - WITH del_responses AS ( - DELETE FROM public.responses WHERE survey_id = sid - RETURNING consent_record_id - ) - DELETE FROM public.consent_records - WHERE id IN (SELECT consent_record_id FROM del_responses); - + -- Catálogo: DELETE + INSERT para idempotencia (patrón original del seed v2.1). + -- Nunca toca answers/consent_records/responses — son evidencia permanente (ADR-003). + -- El reset de datos de prueba se hace por separado vía TRUNCATE, fuera de este seed. DELETE FROM public.questions WHERE survey_id = sid; -- ════════════════════════════════════════════════════════