Reportes
Reportes listos (reports), informes personalizados (report_builder y custom.php) y exportación con el formato institucional (report_export, report_pdf, report-docx.py).
La trazabilidad que pide el manual (seguimiento de quién completó qué) se resuelve con cuatro clases y dos páginas, todas con la capacidad local/deltamodules:viewreports (barra superior "Reportes").
| Pieza | Archivo | Papel |
|---|---|---|
| Reportes listos | classes/reports.php, reports.php | Catálogo fijo con filtros y descarga. La misma lógica usa el agente de IA (reporte_formacion). |
| Informes personalizados | classes/report_builder.php, custom.php | Constructor de informes: base, columnas, filtros, condiciones, orden y agrupación; se guardan en local_deltamodules_rep. |
| Exportación | classes/report_export.php, classes/report_pdf.php, /report-docx.py | Excel, Word y PDF con el formato institucional. La usan los formatos de descarga dataformat_delta*. |
Reportes listos (reports)
| Clave | Filtros |
|---|---|
pendientes (no terminaron uno o varios módulos) | módulos, cargo |
avance (avance por persona y módulo) | módulos, cargo |
completados (quiénes completaron, certificados) | módulos, cargo |
evaluaciones (resultados de los repasos) | módulos, cargo |
cargos (personas por cargo) | cargo |
inactivos (no ingresan hace N días) | días, cargo |
personal (directorio con cargo, área, correo y último acceso) | cargo |
Los títulos y descripciones son las cadenas rep_<clave> y rep_<clave>_desc.
| Método | Qué hace |
|---|---|
catalog() | El catálogo anterior. |
modules() | Cursos con idnumber M__ y PTS. |
cargos() | Cohortes cuyo nombre empieza por "Cargo:". |
resolve_modules($input) | Convierte números ("1", "M07", "módulo 3"), ids o nombres en ids de curso. El número se busca por idnumber, así "1" nunca se confunde con 10, 11 o 12. |
resolve_cargo($input) | Cargo por id o por texto. |
course_progress($course, $userid) | Avance de una persona en un curso. |
run($type, $f) | Ejecuta el reporte y devuelve columnas y filas. |
url($type, $f, $download) | Dirección de la página con los filtros, para ver o descargar. |
El alcance y los filtros elegidos viajan a la exportación por $SESSION->deltaexportsubtitle y aparecen como "Alcance" en el documento.
Informes personalizados (report_builder)
| Base | Qué es cada fila |
|---|---|
personas | Una persona |
modulos | Una persona en un módulo |
evaluaciones | Una persona en una evaluación |
postulantes | Un postulante (solo con local/candidate_enrollment:viewcandidates) |
Las columnas de cada base tienen etiqueta (cadena rbc_<clave>), grupo (rbg_<grupo>) y tipo (text, num, pct, date, datetime). Las de persona son comunes: nombre, cédula, correo, usuario, cargo, área, equipo, líder, estado de la cuenta, creación, primer y último acceso. Cada base agrega las suyas (asignados, completados, avance global, certificados, notas; módulo, avance, estado, certificado; evaluación, intentos, mejor nota, nota para aprobar; prueba, código, nota y estado del postulante).
| Elemento de la configuración | Detalle |
|---|---|
base, cols | Columnas de la base (por defecto, las de default_columns) |
cargo, area, team, modulos, suspended | Filtros rápidos |
conds | Hasta 5 condiciones sobre cualquier columna: texto (contiene, no contiene, igual, vacío, no vacío), fecha (antes, después, nunca, alguna vez) o número (≥, >, ≤, <, =, ≠) |
group | Agrupar por una columna de texto (cantidad y promedios por grupo) |
sort, dir | Orden |
report_builder::config() normaliza la configuración (también la guardada con la versión anterior del constructor) y run() devuelve el resultado. Solo incluye personal de la Academia (sin administradores, cuentas de servicio ni postulantes, salvo en la base postulantes).
custom.php guía en cinco pasos (fila, columnas, filtros, orden y grupos, resultado), con vista previa, descarga y Guardar: la configuración se guarda en JSON en local_deltamodules_rep (nombre, base, config, autor, fechas) y aparece en reports.php como informe personalizado.
Exportación con formato institucional (report_export)
Basada en la plantilla "Plantilla.docx" de la empresa: logo, datos de la empresa, tabla de control del documento (Documento, Alcance, Fecha de emisión, Generado por, Total de registros), Tahoma y los colores institucionales (azul #1361A4, gris #E7E6E6). Los recursos están en /opt/delta-reports/ (copiados desde assets/reports/ en el Dockerfile).
| Método | Formato | Implementación |
|---|---|---|
xlsx($filename, $columns, $rows, $dest) | Excel | PhpSpreadsheet |
docx(...) | Word | Escribe un JSON y ejecuta python3 /report-docx.py /opt/delta-reports/plantilla-reporte.docx datos.json salida.docx (python-docx). Si el script falla, lanza una excepción con su salida. |
pdf(...) | report_pdf, subclase de pdf (TCPDF de Moodle) con encabezado y pie institucionales |
meta($filename) arma el título a partir del nombre del archivo (sin la fecha final). Con $dest vacío envía el archivo al navegador; con una ruta lo escribe en disco (uso desde los formatos de descarga con close_output_to_file).
report-docx.py toma la plantilla, cambia las celdas de la tabla de control conservando su formato, pone la página horizontal cuando hay más de 5 columnas y escribe título, alcance, tabla y total.
Los formatos de descarga dataformat_deltaxlsx, dataformat_deltadocx y dataformat_deltapdf llaman a estos métodos, de modo que el formato institucional aparece en todos los menús de descarga de Moodle. Ver Formatos de descarga.
Otros reportes
| Reporte | Origen |
|---|---|
| Informes personalizados de Moodle (Report Builder) | Nativo. create-training-report.php, create-candidates-report.php y create-review-report.php crean algunos informes con su API (no se ejecutan en cada arranque). JavaScript en additionalhtmlhead simplifica el editor de informes. |
| Postulantes | local/candidate_enrollment/candidates.php con descarga en los cuatro formatos |
| Aceptaciones de políticas | policies.php |
| Revisión anual | review.php |
| Equipos | team.php |
Políticas y aceptaciones
Aviso de Tratamiento de Datos Personales (tool_policy) y Condiciones de uso del Asistente de IA, con su registro de aceptaciones (classes/policies.php).
Revisión anual
Registro histórico de la revisión anual obligatoria de los módulos (review.php, tabla local_deltamodules_review) y el aviso mensual review_reminder.