Saltar al contenido principal

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ódigoDescripciónNiveles
1progress_delayRetraso en el avance — porcentaje real < porcentaje esperado según fechaleve (−10 pp) · critico (−35 pp)
2inactivityInactividad — días desde el último acceso al cursoleve (3 días) · critico (14 días)
3due_soonEntrega próxima — horas hasta el deadline más cercanoleve (48 h) · critico (12 h)
4low_performanceBajo desempeño — calificación final (escala 0–5)leve (< 3.2) · critico (< 3.0)
5performance_dropCaída de desempeño — nota actual vs. promedio del cursoleve · critico
6irregular_paceRitmo irregular — días consecutivos con acceso pero sin progreso realleve (3 días) · critico (7 días)
7modules_behindMódulos atrasados — secciones que deberían estar completas pero no lo estánleve (1 módulo) · critico (3 módulos)
8dropout_riskRiesgo de deserción — puntaje compuesto (calificación + inactividad)leve (≥ 40) · critico (≥ 70)
9low_participationBaja participación — foros y actividades interactivas sin respuestaleve · critico
10pending_evalEvaluaciones pendientes — entregas sin calificar por el docenteleve · critico
11positive_streak (motivacional)Racha positiva — días consecutivos con actividadleve (3 días) · critico* (15 días)
12high_performance (motivacional)Alto desempeño — nota por encima del promedio del cursoleve (+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:

HelperMé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/ y lang/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).