# Plan Multi-Colegio — `admin_alumnos`

Refactor de portal del estudiante: de N copias por colegio a **una sola base de código multi-tenant**, con resolución de colegio por `?c=` encriptado contra `siscev.colegio`, BD separada por colegio, gating de módulos y panel de super-admin.

## Cómo usar este plan

Cada fase es un archivo `.md` autocontenido para pasar a **Claude CLI** en orden. No avances a la siguiente fase hasta validar la anterior. Cada archivo incluye: objetivo, contexto, tareas, criterio de aceptación.

| Fase | Archivo | Qué hace | Bloquea a |
|------|---------|----------|-----------|
| 1 | `01-fase-esquema-bd.md` | Esquema en `siscev` + catálogo de módulos | todas |
| 2 | `02-fase-cifrado.md` | Cifrado nuevo seguro para `?c=` | 3 |
| 3 | `03-fase-tenant-conexion.md` | Resolución de tenant + conexión por colegio | 4,5 |
| 4 | `04-fase-config-legacy.md` | `colegio_config` → define() legacy (inicia.php) | 5,6 |
| 5 | `05-fase-gating-modulos.md` | Habilitar/deshabilitar módulos + sidebar | 6 |
| 6 | `06-fase-panel-admin.md` | Panel de super-admin | — |
| 7 | `07-fase-migracion.md` | Migrar colegios restantes | — |

## Decisiones de arquitectura (fijadas)

- **BD por colegio** (separadas). `siscev` es la BD central de configuración; nunca contiene datos académicos.
- **Resolución por `?c=` encriptado** en la entrada → se desencripta a `id_colegio` → se guarda en `$_SESSION['id_colegio']` para el resto de la navegación.
- **Cifrado nuevo** (AES-256-GCM con `sodium`/`openssl`), NO las funciones `encriptar()/desencriptar()` heredadas.
- **Capa de compatibilidad**: `core/config.php` recrea las constantes (`NKXS`, `RIFCOLM`, etc.) para que los 33 módulos sigan funcionando sin reescribirse.

## Estructura final de archivos

```
/plataforma/
├── bootstrap.php          # punto de entrada: tenant + config + conexión
├── core/
│   ├── crypto.php         # cifrado nuevo (Fase 2)
│   ├── tenant.php         # resolución de colegio (Fase 3)
│   ├── conexion.php       # Conectarse() del colegio activo (Fase 3)
│   ├── config.php         # define() legacy desde colegio_config (Fase 4)
│   └── modulos.php        # gating + helpers (Fase 5)
├── admin_alumnos/         # ÚNICA copia del portal actual
├── panel_admin/           # super-admin (Fase 6)
└── assets/                # compartidos
```

## Reglas transversales (válidas en todas las fases)

1. **Prepared statements obligatorios** en todo código nuevo que toque `siscev`. El portal heredado no los usa, pero lo nuevo sí.
2. **Credenciales de BD cifradas** en `siscev.colegio.db_pass` (no texto plano).
3. **No tocar** tablas dinámicas por período (`grado{periodo}`, `pagos{periodo}`): viven en la BD de cada colegio.
4. Trabajar siempre sobre un **colegio piloto** antes de migrar el resto.
5. Hacer backup de `siscev` antes de cada `ALTER TABLE`.
