workspace-v1/projects/gamilit/database/seeds/prod/social_features/01-schools.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

314 lines
9.7 KiB
SQL

-- =====================================================
-- Seed: social_features.schools (PROD)
-- Description: Escuelas demo para testing y demostraciones
-- Environment: PRODUCTION
-- Dependencies: auth_management.tenants
-- Order: 01
-- Created: 2025-01-11
-- Version: 2.0 (Actualizado para alineación con DDL)
-- =====================================================
--
-- ESCUELAS DEMO INCLUIDAS:
-- - Escuela Primaria Marie Curie (CDMX)
-- - Instituto de Educación Integral (Guadalajara)
--
-- TOTAL: 2 escuelas demo
--
-- IMPORTANTE: Estas escuelas son para testing y demos.
--
-- CAMBIOS v2.0:
-- - Agregado tenant_id (requerido)
-- - Removido type (columna legacy)
-- - Cambiado state → region (nuevo nombre de columna)
-- - Removido principal_name, contact_name, contact_email (legacy)
-- - Removido status (columna legacy)
-- - Agregado short_name, description
-- - Actualizados queries de verificación
-- =====================================================
SET search_path TO social_features, auth_management, public;
-- =====================================================
-- Obtener tenant_id para las escuelas
-- =====================================================
DO $$
DECLARE
v_tenant_id UUID;
BEGIN
-- Obtener el tenant principal de GAMILIT Platform
SELECT id INTO v_tenant_id
FROM auth_management.tenants
WHERE name = 'GAMILIT Platform'
LIMIT 1;
IF v_tenant_id IS NULL THEN
RAISE EXCEPTION 'Tenant "GAMILIT Platform" no encontrado. Ejecutar primero seed de tenants.';
END IF;
RAISE NOTICE 'Usando tenant_id: %', v_tenant_id;
-- =====================================================
-- INSERT: Escuelas Demo
-- =====================================================
INSERT INTO social_features.schools (
id,
tenant_id,
name,
code,
short_name,
description,
address,
city,
region,
country,
postal_code,
phone,
email,
website,
current_students_count,
current_teachers_count,
is_active,
settings,
metadata,
created_at,
updated_at
) VALUES
-- =====================================================
-- Escuela 1: Escuela Primaria Marie Curie (CDMX)
-- =====================================================
(
'50000000-0000-0000-0000-000000000001'::uuid,
v_tenant_id,
'Escuela Primaria Marie Curie',
'EP-MC-CDMX',
'EP Marie Curie',
'Escuela primaria pública enfocada en ciencias y educación integral, inspirada en la vida de Marie Curie.',
'Av. Insurgentes Sur 1234',
'Ciudad de México',
'CDMX',
'México',
'03100',
'55-1234-5678',
'contacto@mariecurie.edu.mx',
'https://mariecurie.edu.mx',
450,
32,
true,
jsonb_build_object(
'allow_public_registration', true,
'require_email_verification', true,
'max_students_per_classroom', 35,
'enable_parent_portal', true,
'academic_calendar', jsonb_build_object(
'start_date', '2025-08-15',
'end_date', '2026-07-15',
'vacation_periods', jsonb_build_array(
jsonb_build_object('name', 'Navidad', 'start', '2025-12-20', 'end', '2026-01-06'),
jsonb_build_object('name', 'Semana Santa', 'start', '2026-04-02', 'end', '2026-04-12')
)
),
'features', jsonb_build_object(
'gamification', true,
'assessments', true,
'parent_portal', true,
'analytics', true
)
),
jsonb_build_object(
'year_founded', 2010,
'type', 'public',
'cct', '09DPR0123K',
'shift', 'matutino',
'grades', jsonb_build_array('1', '2', '3', '4', '5', '6'),
'recognition', 'Escuela de Calidad 2024',
'principal_name', 'Lic. Ana María Rodríguez',
'contact_name', 'Prof. Carlos Méndez',
'contact_email', 'admin@mariecurie.edu.mx',
'infrastructure', jsonb_build_object(
'library', true,
'computer_lab', true,
'science_lab', true,
'sports_facilities', true,
'cafeteria', true
),
'programs', jsonb_build_array(
'Programa de Lectura Marie Curie',
'Club de Ciencias',
'Deportes vespertinos'
),
'demo_school', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- Escuela 2: Instituto de Educación Integral (Guadalajara)
-- =====================================================
(
'50000000-0000-0000-0000-000000000002'::uuid,
v_tenant_id,
'Instituto de Educación Integral',
'IEI-GDL',
'IEI Guadalajara',
'Instituto privado de educación integral con enfoque STEAM y programas bilingües.',
'Av. Chapultepec 890',
'Guadalajara',
'Jalisco',
'México',
'44100',
'33-3456-7890',
'contacto@iei.edu.mx',
'https://iei.edu.mx',
280,
24,
true,
jsonb_build_object(
'allow_public_registration', false,
'require_email_verification', true,
'max_students_per_classroom', 25,
'enable_parent_portal', true,
'tuition_required', true,
'admission_process', jsonb_build_object(
'requires_interview', true,
'requires_exam', true,
'requires_documents', jsonb_build_array(
'birth_certificate',
'previous_grades',
'recommendation_letters'
)
),
'academic_calendar', jsonb_build_object(
'start_date', '2025-08-15',
'end_date', '2026-06-30',
'vacation_periods', jsonb_build_array(
jsonb_build_object('name', 'Navidad', 'start', '2025-12-18', 'end', '2026-01-08'),
jsonb_build_object('name', 'Semana Santa', 'start', '2026-04-01', 'end', '2026-04-13')
)
),
'features', jsonb_build_object(
'gamification', true,
'assessments', true,
'parent_portal', true,
'analytics', true,
'bilingual_program', true
)
),
jsonb_build_object(
'year_founded', 1995,
'type', 'private',
'accreditation', 'SEP',
'bilingual', true,
'steam_focused', true,
'international_programs', jsonb_build_array('Cambridge Primary'),
'partnerships', jsonb_build_array('Universidad de Guadalajara'),
'principal_name', 'Dra. Patricia Hernández',
'contact_name', 'Lic. Miguel Ángel Torres',
'contact_email', 'admisiones@iei.edu.mx',
'infrastructure', jsonb_build_object(
'library', true,
'computer_lab', true,
'science_lab', true,
'robotics_lab', true,
'innovation_hub', true,
'sports_complex', true,
'auditorium', true,
'art_studio', true
),
'extracurricular', jsonb_build_array(
'Robótica',
'Ajedrez',
'Música',
'Artes Plásticas',
'Deportes'
),
'certifications', jsonb_build_array('SEP', 'Cambridge'),
'demo_school', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
)
ON CONFLICT (code) DO UPDATE SET
name = EXCLUDED.name,
short_name = EXCLUDED.short_name,
description = EXCLUDED.description,
email = EXCLUDED.email,
current_students_count = EXCLUDED.current_students_count,
current_teachers_count = EXCLUDED.current_teachers_count,
is_active = EXCLUDED.is_active,
settings = EXCLUDED.settings,
metadata = EXCLUDED.metadata,
updated_at = gamilit.now_mexico();
END $$;
-- =====================================================
-- Verification Query
-- =====================================================
DO $$
DECLARE
school_count INTEGER;
public_schools INTEGER;
private_schools INTEGER;
BEGIN
SELECT COUNT(*) INTO school_count
FROM social_features.schools
WHERE metadata->>'demo_school' = 'true';
SELECT COUNT(*) INTO public_schools
FROM social_features.schools
WHERE metadata->>'type' = 'public' AND metadata->>'demo_school' = 'true';
SELECT COUNT(*) INTO private_schools
FROM social_features.schools
WHERE metadata->>'type' = 'private' AND metadata->>'demo_school' = 'true';
RAISE NOTICE '========================================';
RAISE NOTICE 'ESCUELAS DEMO CREADAS EXITOSAMENTE';
RAISE NOTICE '========================================';
RAISE NOTICE 'Total escuelas: %', school_count;
RAISE NOTICE ' - Públicas: %', public_schools;
RAISE NOTICE ' - Privadas: %', private_schools;
RAISE NOTICE '========================================';
IF school_count = 2 THEN
RAISE NOTICE '✓ Todas las escuelas demo fueron creadas correctamente';
ELSE
RAISE WARNING '⚠ Se esperaban 2 escuelas, se crearon %', school_count;
END IF;
END $$;
-- =====================================================
-- Listado de escuelas
-- =====================================================
DO $$
DECLARE
school_record RECORD;
BEGIN
RAISE NOTICE '';
RAISE NOTICE 'Listado de escuelas demo:';
RAISE NOTICE '========================================';
FOR school_record IN
SELECT name, code, city, region, current_students_count
FROM social_features.schools
WHERE metadata->>'demo_school' = 'true'
ORDER BY name
LOOP
RAISE NOTICE ' - % (%) - %, %',
school_record.name,
school_record.code,
school_record.city,
school_record.region;
RAISE NOTICE ' Estudiantes: %', school_record.current_students_count;
END LOOP;
RAISE NOTICE '========================================';
END $$;