# Fase 3 — Resolución de tenant y conexión por colegio

## Objetivo
Que el sistema sepa qué colegio sirve cada request (vía `?c=` → sesión) y que `Conectarse()` abra la BD propia de ese colegio. Equivalente a `conexion`/`conexion2` de evalsys, pero dinámico.

## Dependencias
Fase 1 (esquema) y Fase 2 (`core/crypto.php`).

## Flujo
```
1. Entrada con ?c=TOKEN  →  descifrar_tenant() → id_colegio
2. Si no hay ?c= pero hay $_SESSION['id_colegio'] → usar la sesión
3. Si no hay ninguno → error/redirect (acceso sin tenant)
4. Conexión a siscev → SELECT credenciales WHERE id=? AND activo=1
5. Guardar id_colegio + credenciales en sesión
6. Conectarse() abre la BD de ESE colegio
```

## Tareas

1. **`core/conexion_siscev.php`** — conexión fija a la BD central `siscev` (host/user/pass de la central, en env o archivo fuera del webroot). Solo lectura de config; usar mysqli con prepared statements.

2. **`core/tenant.php`**:
   - `resolver_tenant(): int` — aplica el flujo de arriba; setea `$_SESSION['id_colegio']`.
   - Carga las credenciales del colegio desde `siscev.colegio` (prepared statement por `id`), descifra `db_pass` (con `core/crypto.php` o función dedicada), y las guarda en `$_SESSION['tenant_db']` (host, name, user, pass).
   - Validar `activo=1`; si no, mensaje "colegio inactivo".

3. **`core/conexion.php`** (reescrito, reemplaza el `../conexion.php` heredado):
   - `Conectarse(): mysqli` — abre la BD del colegio activo usando `$_SESSION['tenant_db']`. Mantiene la MISMA firma que el portal espera, para no romper los 33 módulos.
   - Mantener `Conectarse3()` / `Conectarse1()` si algún módulo las usa (revisar; apuntan a `jesistemas`/`facilfact` — decidir si siguen centralizadas o por colegio).
   - `set_charset('utf8')` y manejo de error de conexión.

4. **`bootstrap.php`** (raíz) — orquesta el arranque que todo módulo incluirá al inicio:
   ```php
   require_once __DIR__.'/core/crypto.php';
   require_once __DIR__.'/core/conexion_siscev.php';
   require_once __DIR__.'/core/tenant.php';
   require_once __DIR__.'/core/conexion.php';
   resolver_tenant();          // deja id_colegio en sesión
   // Fase 4 añadirá: cargar_config_legacy();
   // Fase 5 añadirá: cargar_modulos();
   ```

5. **No** mantener `db_pass` en sesión en texto: guardar la conexión abierta o re-descifrar por request. Decisión de seguridad a documentar.

## Riesgo de rutas relativas
Los módulos heredados hacen `include "../conexion.php"`, `../inicia.php`, usan `../fotoalu/`, etc. Opciones:
- (A) Dejar shims en las rutas viejas (`../conexion.php` → `require core/conexion.php`).
- (B) Buscar/reemplazar los includes en los 33 archivos.
Recomendado: **shims** primero (cambio mínimo), reemplazo gradual después.

## Criterio de aceptación
- Entrar a `home.php?c=<token colegio piloto>` conecta a la BD del piloto y muestra datos reales del piloto.
- Navegar a otro módulo sin `?c=` mantiene el mismo colegio (vía sesión).
- Token de otro colegio cambia la BD activa.
- Token inválido → no conecta a ninguna BD; mensaje controlado.
