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>
619 lines
19 KiB
SQL
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 $$;
|