# Checklist de producción

## Infraestructura

- [ ] PHP 8.2+ con OPcache habilitado.
- [ ] MySQL 8 con backups, binlogs y restauración probada.
- [ ] HTTPS válido y redirección HTTP→HTTPS.
- [ ] DocumentRoot apuntando exclusivamente a `public`.
- [ ] `storage` escribible y no público.
- [ ] `APP_DEBUG=false` y secretos rotados.
- [ ] Monitoreo de CPU, memoria, disco, PHP y MySQL.

## Seguridad y RBAC

- [ ] Contraseña inicial cambiada.
- [ ] Organización (`TENANT_SLUG`) verificada en login y despliegue.
- [ ] Existe al menos una cuenta superadministradora activa por organización.
- [ ] Existe una segunda cuenta de recuperación bajo custodia separada.
- [ ] Usuario de prueba creado para cada rol predefinido.
- [ ] Menús y rutas directas validados con matriz de permisos.
- [ ] Herencia, denegaciones y excepciones temporales probadas.
- [ ] Asignaciones vencidas dejan de conceder acceso.
- [ ] Ningún administrador puede editar su propio acceso ni escalar privilegios.
- [ ] Auditoría registra cambios de usuario, rol, permiso y matriz.
- [ ] MFA incorporado para administradores, anfitriones y caja.
- [ ] Revisión OWASP y pruebas de penetración.
- [ ] Rate limiting distribuido si hay más de un nodo.
- [ ] Logs protegidos, centralizados y con alertas.
- [ ] Política de sesiones, retención y privacidad aprobada.

## Negocio

- [ ] Reglas y premios aprobados por el operador.
- [ ] Cartones muestreados y validados.
- [ ] Impresión probada en la impresora real.
- [ ] Simulación de reclamos simultáneos.
- [ ] Conciliación de caja validada.
- [ ] Procedimiento de contingencia por caída de Internet.
- [ ] Revisión legal antes de premios o cobros monetarios.

## Calidad

- [ ] Migración probada sobre copia de staging y tablas `legacy_*_v1` conservadas.
- [ ] `php bin/doctor.php` sin fallos.
- [ ] `php tests/run.php` sin fallos.
- [ ] Pruebas E2E en móvil, escritorio y pantalla pública.
- [ ] Prueba de carga con la concurrencia objetivo.
- [ ] Ensayo de despliegue y rollback.

## Compra pública

- [ ] Ejecutar `php bin/upgrade_public_checkout.php` sobre una copia de staging.
- [ ] Registrar cuentas bancarias reales y eliminar/desactivar la cuenta demo.
- [ ] Configurar compra pública en cada evento.
- [ ] Validar mínimo, máximo, precio, moneda y minutos de reserva.
- [ ] Probar compra simultánea de los últimos cartones.
- [ ] Probar comprobantes PDF, JPG y PNG válidos.
- [ ] Rechazar extensión falsa y archivos mayores al límite.
- [ ] Confirmar que `storage/private` no sea accesible por HTTP.
- [ ] Probar aprobación, rechazo, expiración y cancelación del evento.
- [ ] Programar `bin/expire_reservations.php` cada cinco minutos.
- [ ] Revisar permisos de cajero, vendedor, auditor y administrador.
- [ ] Publicar términos, privacidad, reembolsos y datos de contacto.
- [ ] No habilitar dinero real sin revisión legal y tributaria.
