Motor de alertas académicas
Componente: local_pccntr8203403_dashboard\data\academic_alerts
Presenta en: theme_cdigital (card "Alertas académicas" de la modal "Ver mi avance")
Alcance: 2 — Dashboard de aprendizaje
Estado: Estable
Propósito
Evalúa 12 condiciones de riesgo académico para un estudiante en un curso concreto y retorna las alertas activas ordenadas por severidad. El motor es presentación-agnóstico: devuelve códigos + nivel + flag motivacional, y el renderer del tema mapea esos códigos a microcopy, ícono y estilo visual.
Los 12 tipos de alerta
| # | Código | Descripción | Niveles |
|---|---|---|---|
| 1 | progress_delay | Retraso en el avance — porcentaje real < porcentaje esperado según fecha | leve (−10 pp) · critico (−35 pp) |
| 2 | inactivity | Inactividad — días desde el último acceso al curso | leve (3 días) · critico (14 días) |
| 3 | due_soon | Entrega próxima — horas hasta el deadline más cercano | leve (48 h) · critico (12 h) |
| 4 | low_performance | Bajo desempeño — calificación final (escala 0–5) | leve (< 3.2) · critico (< 3.0) |
| 5 | performance_drop | Caída de desempeño — nota actual vs. promedio del curso | leve · critico |
| 6 | irregular_pace | Ritmo irregular — días consecutivos con acceso pero sin progreso real | leve (3 días) · critico (7 días) |
| 7 | modules_behind | Módulos atrasados — secciones que deberían estar completas pero no lo están | leve (1 módulo) · critico (3 módulos) |
| 8 | dropout_risk | Riesgo de deserción — puntaje compuesto (calificación + inactividad) | leve (≥ 40) · critico (≥ 70) |
| 9 | low_participation | Baja participación — foros y actividades interactivas sin respuesta | leve · critico |
| 10 | pending_eval | Evaluaciones pendientes — entregas sin calificar por el docente | leve · critico |
| 11 | positive_streak (motivacional) | Racha positiva — días consecutivos con actividad | leve (3 días) · critico* (15 días) |
| 12 | high_performance (motivacional) | Alto desempeño — nota por encima del promedio del curso | leve (+0.1) · critico* (+0.25) |
* En alertas motivacionales (11 y 12), critico indica mayor logro, no mayor riesgo.
Clasificación y ordenamiento
motivational: false (riesgo) → primero critico, luego leve
motivational: true (positivo) → al final de la lista
El método público get_active_alerts($course, $userid) retorna únicamente las alertas cuya condición se cumple, ordenadas por rank():
critico-riesgo > leve-riesgo > critico-motivacional > leve-motivacional
Estructura del resultado
Cada alerta retornada es un array con:
[
'code' => 'progress_delay', // identificador único
'level' => 'critico', // 'leve' | 'critico'
'motivational'=> false, // true para alertas 11 y 12
]
Helpers en course_stats
El motor delega la recolección de métricas a funciones de course_stats. El método gather() hace una única pasada para obtener todas las métricas antes de ejecutar los 12 evaluadores:
| Helper | Métrica obtenida |
|---|---|
get_nearest_due_hours() | Horas a la próxima entrega |
get_days_since_last_access() | Días desde último acceso |
get_expected_progress_pct() | Progreso esperado según fecha del curso |
get_participation_counts() | Conteo de participaciones en foros |
get_pending_evaluations() | Entregas sin calificar |
get_inactive_progress_days() | Días con acceso pero sin completaciones |
get_modules_behind_count() | Secciones atrasadas |
Thresholds calibrables
Las constantes de umbral están declaradas como private const en la clase academic_alerts. Para ajustar los valores a datos reales del curso, editar las constantes en public/local/pccntr8203403_dashboard/classes/data/academic_alerts.php.
Presentación en el tema
theme_cdigital/classes/output/core_renderer.php mapea cada code a:
- Microcopy (string en
lang/es/ylang/en/) - Ícono SVG del conjunto
pix/Icon/ - Clase CSS para el color de la alerta (leve = amarillo, critico = rojo, motivacional = verde)
Los 12 strings están registrados tanto en inglés (lang/en/theme_cdigital.php) como en español (lang/es/theme_cdigital.php).