# Arquitectura del sistema

## Stack
- PHP 8.2+ orientado a objetos
- MySQL / MariaDB
- MVC propio con Front Controller
- Bootstrap 5.3.8 + CSS corporativo
- JavaScript Vanilla
- PDO con prepared statements
- mPDF para PDF
- PhpSpreadsheet para Excel
- globus-studio/phpqrcode para QR

## Capas
- `public/`: punto de entrada y assets.
- `app/Controllers/`: casos de uso HTTP.
- `app/Models/`: persistencia y consultas de dominio.
- `app/Services/`: servicios especializados, como PDF.
- `app/Core/`: router, autenticación, BD, CSRF y vistas.
- `app/Views/`: interfaz corporativa.
- `database/`: esquema e información inicial.
- `storage/`: PDFs y archivos temporales fuera de `public`.

## Seguridad
El acceso interno usa RBAC. Las consultas de actividades/certificados se restringen por institución y, cuando corresponde, por sede. Las operaciones POST requieren CSRF. Los certificados no se eliminan físicamente: se manejan estados y trazabilidad.

## Ciclo del certificado
`Participante habilitado -> Generado -> Revisado -> Emitido -> Validación pública`

La reemisión marca el documento anterior como `replaced` y genera un nuevo código. La plantilla y los firmantes se guardan como snapshot en el registro del certificado para preservar la historia documental.
