# Fase 1 — Esquema de base de datos en `siscev`

## Objetivo
Crear en la BD central `siscev` las tablas de configuración multi-colegio y poblar el catálogo de módulos. Esta BD solo guarda metadata y credenciales; nunca datos académicos.

## Contexto
- `siscev.colegio` ya existe (listado de colegios). Hay que ampliarla con credenciales de conexión a la BD propia de cada colegio.
- Cada colegio tiene su BD separada (modelo evalsys conexion/conexion2).
- El portal `admin_alumnos` tiene 33 módulos (slugs abajo).

## Tareas

1. Backup de `siscev` antes de cualquier cambio.
2. Ejecutar el `ALTER TABLE colegio` para añadir credenciales y `dominio_origen`/`activo`. Antes de ejecutar, hacer `DESCRIBE colegio;` y NO duplicar columnas que ya existan.
3. Crear tablas: `modulos`, `colegio_modulos`, `colegio_modulo_config`, `colegio_config`.
4. Poblar `modulos` con los 33 slugs del portal.
5. Entregar el `.sql` final + un script de verificación.

## DDL

```sql
-- 1. Ampliar colegio (revisar DESCRIBE antes; omitir columnas existentes)
ALTER TABLE colegio
  ADD COLUMN db_host        VARCHAR(120) DEFAULT 'localhost',
  ADD COLUMN db_name        VARCHAR(120),
  ADD COLUMN db_user        VARCHAR(120),
  ADD COLUMN db_pass        VARCHAR(512),   -- cifrada (Fase 2)
  ADD COLUMN dominio_origen VARCHAR(150),   -- dominio desde donde llega el ?c=
  ADD COLUMN activo         TINYINT DEFAULT 1;

-- 2. Catálogo global de módulos
CREATE TABLE modulos (
  id         INT PRIMARY KEY AUTO_INCREMENT,
  slug       VARCHAR(60) UNIQUE NOT NULL,
  nombre     VARCHAR(120) NOT NULL,
  grupo_menu VARCHAR(60),
  orden      INT DEFAULT 0
);

-- 3. Habilitación módulo ↔ colegio
CREATE TABLE colegio_modulos (
  id_colegio INT NOT NULL,
  id_modulo  INT NOT NULL,
  habilitado TINYINT DEFAULT 0,
  PRIMARY KEY (id_colegio, id_modulo)
);

-- 4. Config interna de cada módulo por colegio (clave/valor)
CREATE TABLE colegio_modulo_config (
  id_colegio INT NOT NULL,
  id_modulo  INT NOT NULL,
  clave      VARCHAR(80) NOT NULL,
  valor      TEXT,
  PRIMARY KEY (id_colegio, id_modulo, clave)
);

-- 5. Constantes institucionales por colegio (reemplaza inicia.php)
CREATE TABLE colegio_config (
  id_colegio INT NOT NULL,
  clave      VARCHAR(80) NOT NULL,
  valor      TEXT,
  PRIMARY KEY (id_colegio, clave)
);
```

## Seed de módulos (33 slugs, agrupados por menú)

```sql
INSERT INTO modulos (slug, nombre, grupo_menu, orden) VALUES
('home','Inicio',NULL,1),
('perfil','Mi Perfil',NULL,2),
('comunicados','Comunicados',NULL,3),
('publicacion','Publicaciones',NULL,4),
('registrar-pago','Registrar Pago','Administración',10),
('historial-pagos','Historial de Pagos','Administración',11),
('planilla','Planilla de Inscripción','Documentos',20),
('utiles','Lista de Útiles','Documentos',21),
('horario','Horario de Clases','Documentos',22),
('carnet','Carnet de Estudio','Documentos',23),
('const-inscripcion','Constancia de Inscripción','Documentos',24),
('const-estudio','Constancia de Estudio','Documentos',25),
('const-asistencia','Constancia de Asistencia','Documentos',26),
('const-promedio','Constancia de Promedio','Documentos',27),
('corte-notas','Corte de Notas','Calificaciones',30),
('boletin','Boletín de Calificaciones','Calificaciones',31),
('encuestas','Encuestas',NULL,40),
('encuesta','Reinscripción',NULL,41),
('calendario','Calendario de Actividades',NULL,50),
('planificacion','Planificación Escolar','Evaluaciones',60),
('cal-evaluaciones','Calendario de Evaluaciones','Evaluaciones',61),
('video-aula','Video Aula','Aula Virtual',70),
('material','Material de Clases','Aula Virtual',71),
('chat-docentes','Chat con Docentes','Aula Virtual',72),
('docente-guia','Docente Guía','Aula Virtual',73);
```

> Nota: algunos archivos del portal (`chat-buscar`, `chat-enviar`, `encuesta-hacer`, `encuesta-guarda`, `verifica-sesion`, procesos/*) son endpoints auxiliares de un módulo, no módulos del menú. No se listan como módulos toggleables; se gobiernan junto a su módulo padre.

## Criterio de aceptación
- `SHOW TABLES` en `siscev` muestra las 4 tablas nuevas.
- `SELECT COUNT(*) FROM modulos` ≥ 25.
- `DESCRIBE colegio` muestra las columnas nuevas sin duplicados.
- Script de verificación incluido y ejecutado sin errores.
