local_pccntr8203403_iacontext
- Impacto — Tema: —
- Impacto — Plugin: plugin propio:
classes\external\get_activity_context,classes\data\activity_context, capacidadviewcontexty caché MUCactivitycontext - Versión:
2026091401(release0.3.0-prototype, madurez ALPHA) · Requiere: Moodle ≥ 5.0 (2025092600) - Requisito: Definición de alcance integración IA–Moodle (docx) · Figma: — · Estado: En desarrollo
Contrato de consumo para el desarrollador del servicio de IA externo:
get_activity_context. Esta página es la ficha del
componente; aquella es el contrato de la función.
Propósito
Entregar al servicio de IA externo, en una sola llamada de solo lectura, una fila plana por
actividad con nombre, sección, tipo, enlace, estado de completitud, nota y fecha límite ya
unidos por cmid, más la completitud del curso y el último acceso del estudiante. Sin él, esa
unión hay que hacerla en tiempo de inferencia cruzando core_course_get_contents,
core_completion_get_activities_completion_status y gradereport_user_get_grade_items.
Vive en un plugin propio y no dentro de local_pccntr8203403_dashboard porque su consumidor, su
capacidad y su ciclo de vida son otros: el dashboard alimenta la interfaz del campus, este plugin
solo alimenta a un tercero.
Funcionalidades
- Dos modos de uso: aserción (
courseidexplícito, que además valida la matrícula activa del estudiante) y descubrimiento (courseid = 0, que recorre las matrículas activas y reporta enwarningscuántos cursos se omitieron, nunca cuáles). - Las filas se construyen con el
modinfodel estudiante, no el del usuario del token: la visibilidad, las restricciones de acceso yuservisibleson las que ve el estudiante. - Catálogo de campos configurable desde administración, de modo que ajustar la respuesta es un
cambio de configuración y no un despliegue.
cmidse reinyecta siempre: sin la llave la fila no se puede resolver contra Moodle. - Ningún campo de identidad en la respuesta por defecto:
firstnameyfullnamenacen desmarcados y activarlos es un acto administrativo explícito. - Las notas ocultas solo viajan si el llamante tiene
moodle/grade:viewhiddenen el curso. - Cota dura de actividades por curso; al aplicarse, el curso se marca con
truncated: true.
Tablas de base de datos
Ninguna propia. Lee por las APIs de núcleo (get_fast_modinfo, completion_info, la API de
calificaciones) y resuelve la completitud del curso con consultas planas en lugar de
completion_info::get_completions(), que abre una consulta por criterio y construye un segundo
modinfo para el usuario del token.
API / Funciones externas
| Función | Descripción |
|---|---|
local_pccntr8203403_iacontext_get_activity_context | Contexto plano de actividades de un estudiante, por curso o por todas sus matrículas activas. Tipo read, ajax: false, requiere login y token del servicio "Componente IA Externo". Contrato: get_activity_context |
Orden de comprobaciones
La autorización del llamante se resuelve antes que cualquier dato del estudiante: primero
validate_context() y require_capability() sobre el curso, después la matrícula del estudiante
consultado. Así, quien no puede reportar sobre un curso recibe nopermissions y no puede deducir
por la diferencia entre errores si un estudiante está matriculado en él. La clase
data\activity_context no es una frontera de seguridad y no debe convertirse en una: asume
que quien la invoca ya autorizó.
Capacidad
| Capacidad | Riesgo | Contexto | Arquetipos |
|---|---|---|---|
local/pccntr8203403_iacontext:viewcontext | RISK_PERSONAL | CONTEXT_COURSE | Ninguno |
Sin arquetipos a propósito: no la hereda ningún rol estándar y hay que asignarla explícitamente al rol de la cuenta de servicio. Ver Web Services IA.
Caché MUC
| Definición | Modo | Propósito |
|---|---|---|
activitycontext | MODE_APPLICATION | Filas ya construidas por estudiante, curso y huella de los ajustes |
La vigencia efectiva la fija el ajuste cachettl, comparando el generatedat guardado dentro del
valor: el ttl de la definición vive en moodledata/muc/config.php y solo se reescribe al
actualizar el plugin o purgar cachés, así que no puede seguir a un ajuste que el administrador
cambia sin ventana de mantenimiento. La caché nunca sustituye a la autorización: capacidad y
matrícula se reevalúan en cada petición, antes de leerla.
Configuración
Administración del sitio > Plugins > Plugins locales > Contexto IA. Siete ajustes: los dos
catálogos de campos (actividad y estudiante), el bloque de completitud del curso, las actividades
ocultas, la exclusión de módulos sin página de vista, el máximo de actividades por curso y la
vigencia de la caché. El efecto de cada uno está en la
tabla de ajustes del contrato.
db/upgrade.php siembra los campos nuevos en el catálogo ya guardado: sin ese paso, un valor
almacenado de una versión anterior gana sobre los valores por defecto del código y los campos
nuevos solo aparecerían en instalaciones nuevas.
Privacidad
Declara un privacy\provider de tipo null_provider: no almacena datos personales en Moodle.
Los datos que la función devuelve son los del estudiante consultado, y su alcance lo gobierna el
catálogo de campos.
Tests
tests/external/get_activity_context_test.php, 28 pruebas PHPUnit sobre los parámetros, los dos
modos de uso, el orden de comprobaciones, los errorcode del contrato, los avisos agregados del
modo descubrimiento y el efecto de cada ajuste.
Dependencias
- Ninguna en
version.php. - Moodle >= 5.0 (
requires 2025092600). - Para ser alcanzable: el servicio "Componente IA Externo" con la función dada de alta y un token
de una cuenta de servicio con
viewcontextymoodle/course:view.
Relación con get_student_panel
Son complementarias y no se solapan: get_student_panel entrega
el panel de aprendizaje del estudiante (progreso, racha, últimas notas y las 12 alertas
académicas) tal como lo ve el campus; get_activity_context entrega el detalle plano actividad
por actividad, que el panel no lleva. Los campos que ya resuelve el dashboard no se duplican aquí.
Historial de cambios
Ver CHANGELOG.md en la raíz del sitio de documentación.