workspace-v1/projects/gamilit/database/seeds/dev/educational_content/01-test-exercises-validation.sql
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -06:00

619 lines
19 KiB
SQL

-- ============================================================================
-- SEED: Ejercicios de Prueba para Validadores
-- Descripción: 15 ejercicios de prueba (uno por tipo) para testing de validadores
-- Autor: Database Agent
-- Fecha: 2025-11-19
-- Tarea: DB-117
-- Ambiente: DEV/TEST (no production)
-- ============================================================================
-- NOTA: Este seed requiere que exista al menos un módulo
-- Si no existe, crear módulo de prueba
DO $$
DECLARE
v_test_module_id UUID;
v_test_user_id UUID := 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid; -- Usuario demo teacher
BEGIN
-- ========================================================================
-- CREAR MÓDULO DE PRUEBA SI NO EXISTE
-- ========================================================================
SELECT id INTO v_test_module_id
FROM educational_content.modules
WHERE title = 'Módulo de Prueba - Validadores'
LIMIT 1;
IF v_test_module_id IS NULL THEN
INSERT INTO educational_content.modules (
id,
title,
description,
order_index,
is_active
) VALUES (
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
'Módulo de Prueba - Validadores',
'Módulo de prueba con ejercicios para testing de validadores',
99,
true
) RETURNING id INTO v_test_module_id;
RAISE NOTICE 'Módulo de prueba creado: %', v_test_module_id;
ELSE
RAISE NOTICE 'Módulo de prueba ya existe: %', v_test_module_id;
END IF;
-- ========================================================================
-- MÓDULO 1: COMPRENSIÓN LITERAL (5 ejercicios)
-- ========================================================================
-- 1. CRUCIGRAMA
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'11111111-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Crucigrama - Científicos Famosos',
'crucigrama',
1,
'{
"instructions": "Completa el crucigrama con nombres de científicos",
"clues": {
"h1": {"question": "Universidad donde estudió Marie Curie", "answer_length": 7},
"h2": {"question": "Premio que ganó Marie Curie", "answer_length": 5}
}
}'::jsonb,
'{
"clues": {
"h1": "SORBONA",
"h2": "NOBEL"
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 2. LÍNEA DE TIEMPO
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'22222222-2222-2222-2222-222222222222'::uuid,
v_test_module_id,
'TEST: Línea de Tiempo - Vida de Marie Curie',
'linea_tiempo',
2,
'{
"instructions": "Ordena los eventos cronológicamente",
"events": {
"event_1": {"text": "Nace en Polonia", "year": 1867},
"event_2": {"text": "Se muda a París", "year": 1891},
"event_3": {"text": "Gana primer Nobel", "year": 1903},
"event_4": {"text": "Gana segundo Nobel", "year": 1911}
}
}'::jsonb,
'{
"correctOrder": ["event_1", "event_2", "event_3", "event_4"]
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 3. SOPA DE LETRAS
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'33333333-3333-3333-3333-333333333333'::uuid,
v_test_module_id,
'TEST: Sopa de Letras - Elementos Químicos',
'sopa_letras',
3,
'{
"instructions": "Encuentra las palabras ocultas",
"grid": "...",
"words_to_find": ["RADIO", "POLONIO", "URANIO"]
}'::jsonb,
'{
"words": ["RADIO", "POLONIO", "URANIO"]
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 4. COMPLETAR ESPACIOS
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'44444444-4444-4444-4444-444444444444'::uuid,
v_test_module_id,
'TEST: Completar Espacios - Biografía',
'completar_espacios',
4,
'{
"instructions": "Completa los espacios en blanco",
"text": "Marie Curie fue una {{blank1}} polaca que ganó el premio {{blank2}} en {{blank3}}.",
"blanks": {
"blank1": {"hint": "Profesión"},
"blank2": {"hint": "Premio famoso"},
"blank3": {"hint": "Área de estudio"}
}
}'::jsonb,
'{
"blanks": {
"blank1": "científica",
"blank2": "Nobel",
"blank3": "física"
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 5. VERDADERO/FALSO
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'55555555-5555-5555-5555-555555555555'::uuid,
v_test_module_id,
'TEST: Verdadero/Falso - Datos de Marie Curie',
'verdadero_falso',
5,
'{
"instructions": "Indica si las afirmaciones son verdaderas o falsas",
"statements": {
"stmt1": {"text": "Marie Curie nació en Francia"},
"stmt2": {"text": "Ganó dos premios Nobel"},
"stmt3": {"text": "Descubrió el radio"}
}
}'::jsonb,
'{
"statements": {
"stmt1": false,
"stmt2": true,
"stmt3": true
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- ========================================================================
-- MÓDULO 2: COMPRENSIÓN INFERENCIAL (5 ejercicios)
-- ========================================================================
-- 6. DETECTIVE TEXTUAL
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'66666666-6666-6666-6666-666666666666'::uuid,
v_test_module_id,
'TEST: Detective Textual - Inferencias',
'detective_textual',
6,
'{
"instructions": "Responde las preguntas basándote en inferencias del texto",
"text": "Marie Curie trabajaba con materiales peligrosos sin protección...",
"questions": {
"q1": {
"question": "¿Por qué Marie Curie murió joven?",
"options": {
"option_a": "Accidente de laboratorio",
"option_b": "Exposición a radiación",
"option_c": "Enfermedad congénita"
}
}
}
}'::jsonb,
'{
"correctAnswers": {
"q1": "option_b"
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 7. CONSTRUCCIÓN DE HIPÓTESIS
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'77777777-7777-7777-7777-777777777777'::uuid,
v_test_module_id,
'TEST: Construcción de Hipótesis - Descubrimiento',
'construccion_hipotesis',
7,
'{
"instructions": "Construye una hipótesis sobre el descubrimiento del radio (mínimo 20 palabras)",
"context": "Marie Curie trabajó años con minerales radiactivos..."
}'::jsonb,
'{
"keywords": ["descubrió", "radio", "experimento", "investigación", "evidencia"],
"min_words": 20
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 8. PREDICCIÓN NARRATIVA
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'88888888-8888-8888-8888-888888888888'::uuid,
v_test_module_id,
'TEST: Predicción Narrativa - Consecuencias',
'prediccion_narrativa',
8,
'{
"instructions": "Predice qué pasará después (mínimo 30 palabras)",
"narrative": "Marie Curie acaba de ganar su primer Nobel en 1903..."
}'::jsonb,
'{
"keywords": ["continuará", "investigación", "premio", "descubrimiento"],
"min_words": 30
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 9. PUZZLE DE CONTEXTO
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'99999999-9999-9999-9999-999999999999'::uuid,
v_test_module_id,
'TEST: Puzzle de Contexto - Análisis Contextual',
'puzzle_contexto',
9,
'{
"instructions": "Analiza el contexto y responde",
"context": "A principios del siglo XX, pocas mujeres estudiaban ciencias...",
"questions": {
"q1": {
"question": "¿Qué podemos inferir del contexto?",
"options": {
"option_a": "Marie Curie fue excepcional",
"option_b": "Era común que mujeres fueran científicas",
"option_c": "No había discriminación"
}
}
}
}'::jsonb,
'{
"correctAnswers": {
"q1": "option_a"
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 10. RUEDA DE INFERENCIAS
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'aaaaaaaa-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Rueda de Inferencias - Causa y Efecto',
'rueda_inferencias',
10,
'{
"instructions": "Relaciona cada inferencia con su conclusión",
"inferences": {
"inf1": {"text": "Marie trabajó con materiales radiactivos sin protección"},
"inf2": {"text": "Dedicó toda su vida a la ciencia"}
},
"conclusions": ["conclusion1", "conclusion2"]
}'::jsonb,
'{
"correctInferences": {
"inf1": "conclusion1",
"inf2": "conclusion2"
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- ========================================================================
-- MÓDULO 3: PENSAMIENTO CRÍTICO (5 ejercicios)
-- ========================================================================
-- 11. TRIBUNAL DE OPINIONES
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'bbbbbbbb-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Tribunal de Opiniones - Argumento',
'tribunal_opiniones',
11,
'{
"instructions": "Escribe tu opinión argumentada sobre el papel de Marie Curie en la ciencia (mínimo 100 palabras)",
"topic": "Impacto de Marie Curie en la ciencia moderna"
}'::jsonb,
'{
"keywords": ["opinión", "argumento", "evidencia", "conclusión", "porque"],
"min_words": 100
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 12. DEBATE DIGITAL
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'cccccccc-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Debate Digital - Pros y Contras',
'debate_digital',
12,
'{
"instructions": "Presenta argumento y contraargumento sobre el uso de radiación (mínimo 150 palabras totales)",
"topic": "Uso de radiación en medicina"
}'::jsonb,
'{
"keywords": ["argumento", "contraargumento", "sin embargo", "por el contrario"],
"min_words": 150
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 13. ANÁLISIS DE FUENTES
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'dddddddd-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Análisis de Fuentes - Credibilidad',
'analisis_fuentes',
13,
'{
"instructions": "Analiza la credibilidad de las fuentes",
"sources": [
{
"id": "source1",
"title": "Artículo científico revisado por pares",
"author": "Dr. Smith, Universidad de Oxford"
}
],
"questions": {
"q1": {
"question": "¿Cuál es el nivel de credibilidad de la fuente 1?",
"options": {
"option_a": "Alta",
"option_b": "Media",
"option_c": "Baja"
}
}
}
}'::jsonb,
'{
"correctAnswers": {
"q1": "option_a"
},
"criticalQuestions": {
"q1": true
}
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 14. PODCAST ARGUMENTATIVO
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'eeeeeeee-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Podcast Argumentativo - Audio',
'podcast_argumentativo',
14,
'{
"instructions": "Graba un podcast argumentativo sobre Marie Curie (2-10 minutos)"
}'::jsonb,
'{
"min_duration_seconds": 120,
"max_duration_seconds": 600,
"max_size_mb": 50,
"allowed_formats": ["mp3", "m4a", "wav", "ogg"]
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
-- 15. MATRIZ DE PERSPECTIVAS
INSERT INTO educational_content.exercises (
id,
module_id,
title,
exercise_type,
order_index,
content,
solution,
auto_gradable,
max_points,
created_by
) VALUES (
'ffffffff-1111-1111-1111-111111111111'::uuid,
v_test_module_id,
'TEST: Matriz de Perspectivas - Análisis Multidimensional',
'matriz_perspectivas',
15,
'{
"instructions": "Analiza el tema desde diferentes perspectivas (mínimo 50 caracteres por celda)",
"topic": "Impacto de Marie Curie",
"perspectives": ["perspective1", "perspective2", "perspective3"]
}'::jsonb,
'{
"requiredPerspectives": ["perspective1", "perspective2", "perspective3"],
"min_chars_per_cell": 50
}'::jsonb,
true,
100,
v_test_user_id
) ON CONFLICT (module_id, exercise_type, order_index) DO NOTHING;
RAISE NOTICE '15 ejercicios de prueba creados exitosamente';
END $$;
-- ============================================================================
-- VALIDACIÓN
-- ============================================================================
-- Verificar que se crearon los 15 ejercicios
DO $$
DECLARE
v_count INTEGER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM educational_content.exercises
WHERE module_id = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid;
IF v_count = 15 THEN
RAISE NOTICE '✅ VALIDACIÓN EXITOSA: 15 ejercicios de prueba creados';
ELSE
RAISE WARNING '⚠️ VALIDACIÓN FALLIDA: Se esperaban 15 ejercicios, se encontraron %', v_count;
END IF;
END $$;