# Sprint 4: Seguridad y Reportes

## 1. Objetivo del Sprint
Refinar la seguridad del sistema y habilitar las capacidades de exportación de información consolidada.

## 2. Planificación de Historias de Usuario
| Código | Descripción Técnica | Puntos | Tiempo (Días) |
| :--- | :--- | :---: | :---: |
| **HU17** | Motor de filtrado complejo para auditoría (filtros combinados: docente + curso + periodo + fechas + estado). | 3 | 2.0 |
| **HU18** | Módulo de autogestión y recuperación de credenciales (solicitud del docente, atención del coordinador). | 3 | 2.0 |
| **HU19** | Interfaz de configuración de parámetros globales (tolerancia por defecto, horario laboral, días laborables). | 3 | 2.0 |
| **HU20** | Desarrollo de servicios de generación de reportes PDF y Excel con datos filtrados. | 5 | 3.0 |
| **Total** | | **14 SP** | **9 Días** |

## 3. Criterios de Éxito
- Reportes generados con datos consistentes y formato profesional (PDF/Excel).
- Funcionalidad de recuperación de contraseña operativa (docente solicita → coordinador atiende).
- Modificación de tiempos de tolerancia reflejada inmediatamente en las reglas del sistema.

## 4. Estado de Implementación

| HU       |  Estado   | Detalle                                                                                                                                                  |
| :------- | :-------: | :------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **HU17** | **Completado** | Filtros combinados (docente + curso + periodo + fechas + estado) en `Admin\RegistrosController` y `Coordinador\RegistrosController`. Con paginación. |
| **HU18** | **Completado** | `Docente\SolicitudPasswordController` (solicitar) + `Admin\SolicitudesController` (atender). Flujo completo: docente solicita → admin genera contraseña temporal. |
| **HU19** | **Completado** | `Admin\ConfigController` (tolerancia, horas máximas, días plazo) y horario académico (jornada, días laborables, tolerancia default, uso de franjas) guardados en la tabla singleton `horario_academico`. Con bloqueo de cambios si ya existen horarios o registros. |
| **HU20** | **Completado** | Exportación CSV, PDF (Dompdf) y Excel (PhpSpreadsheet) con filtros combinados desde `Admin\ReportesController` y `Coordinador\ReportesController`. |

## 5. Notas Técnicas
- Para reportes PDF se usa **Dompdf 3.1** (instalado vía Composer).
- Para reportes Excel se usa **PhpSpreadsheet 5.8** (`phpoffice/phpspreadsheet`).
- Recuperación de contraseñas implementada (Opción A):
  - `Docente\SolicitudPasswordController` — docente solicita con DNI.
  - `Admin\SolicitudesController` — admin/coordinador atiende generando contraseña temporal.
  - También disponible: magic links de Shield (login por correo).
- La configuración global (`Admin\ConfigController`) tiene validaciones de integridad.

## 6. Sistema de Auditoría (Implementado)

### 6.1 Descripción
Se implementó un sistema completo de auditoría que registra automáticamente todas las acciones críticas realizadas por los usuarios en el sistema. La tabla `auditoria` y el modelo `AuditoriaModel` ya existían pero estaban sin usar.

### 6.2 Trait `AuditLogger`
- **Ubicación:** `app/Traits/AuditLogger.php`
- **Método:** `logAuditoria($tabla, $accion, $descripcion, $userId = null)`
- **Uso:** Se agrega `use AuditLogger;` en cada controlador que necesite registrar acciones
- **Campos que inserta:** user_id, tabla_afectada, accion, descripcion_cambio, fecha_evento, direccion_ip

### 6.3 Acciones que se registran
| Controlador | Acciones | Tabla |
|---|---|---|
| Admin\UsuariosController | Crear, actualizar, eliminar usuario | `users` |
| Admin\DocentesController | Crear, actualizar, eliminar docente | `users` |
| Admin\ProgramasController | Crear, actualizar, eliminar programa | `programas` |
| Admin\PeriodosController | Crear, actualizar, eliminar, establecer actual | `periodos_academicos` |
| Admin\ConfigController | Guardar configuración y horario académico | `config_sistema`, `horario_academico` |
| Admin\SolicitudesController | Atender solicitud de contraseña | `solicitudes_password` |
| Admin\FranjasController | Crear, actualizar, eliminar franja | `franjas_academicas` |
| Admin\FeriadosController | Crear, actualizar, eliminar feriado | `feriados` |
| Admin\RegistrosController | Revisar registro (aprobar/observar) | `registros_sesion` |
| Coordinador\AsignacionesController | Crear, actualizar, eliminar asignación | `asignaciones` |
| Coordinador\RegistrosController | Revisar registro | `registros_sesion` |
| Docente\LoginController | Login y logout | `users` |
| Docente\RegistroController | Registrar sesión de clase | `registros_sesion` |

### 6.4 Panel de Auditoría
- **Ruta:** `GET /admin/auditoria`
- **Controlador:** `Admin\AuditoriaController`
- **Vista:** `admin/auditoria.php`
- **Filtros:** búsqueda libre, acción, tabla, rango de fechas
- **Paginación:** 50 registros por página
- **Sidebar:** Sección "Supervisión" → "Auditoría" (separado de "Registros")

### 6.5 No se requieren migraciones
La tabla `auditoria` ya existía (migración `000014_CreateAuditoriaTable.php`). Solo se activó su uso.

---
- Regresar al [[index|Inicio]]
