ANALYTICS / PANEL
P2LRN Analytics
Panel embebible de analítica educativa y learning analytics para seguimiento de alumnos, progreso de cursos, actividad, intentos y calificaciones en webs y plataformas LMS.
1. Qué muestra
Alumnos, cursos, matrículas, finalización, nota oficial media, tiempo activo y señales que requieren revisión.
Progreso, cursos, intentos, tiempo activo, última actividad y detalle por curso.
Alumnos iniciados y completados, progreso medio, nota media, aprobados, actividad e intentos.
Distribución y libro de calificaciones, diferenciando expresamente notas autoritativas de puntuaciones informativas.
Learning events normalizados, categorías, evolución reciente e interacciones recibidas desde Player y Host.
Reglas transparentes para inactividad, progreso bajo, nota baja e intentos fallidos repetidos.
2. Datos del curso y resultados
El paquete .p2lrn define el contenido y las actividades del curso. El seguimiento de una realización llega desde Player, desde un resultado .p2lrn-result o desde la plataforma donde se integra P2LRN.
En Analytics pulsa Abrir resultado y selecciona el .p2lrn-result. Se muestran alumno, curso, intento, aperturas, sesiones, tiempo activo, eventos e incidencias disponibles.
Después de revisar una devolución pulsa Abrir en Analytics. El resultado se transfiere al panel sin tener que volver a seleccionarlo.
Una web o LMS puede asignar directamente su dataset al componente para reunir varios alumnos, cursos y calificaciones autorizadas.
Analytics mantiene las puntuaciones importadas de .p2lrn-result como informativas. Sólo se incluyen en los promedios oficiales las calificaciones que una fuente autorizada marque expresamente como autoritativas.
3. CDN
Carga el componente y entrégale las métricas del curso abierto desde Player o los resultados .p2lrn-result importados. No es obligatorio utilizar una API. El atributo src sólo sirve cuando ya existe un documento JSON de métricas, no para apuntar directamente al archivo .p2lrn.
<script src="https://p2lrn.netlify.app/analytics/current/dist/p2lrn-analytics.js"></script>
<p2lrn-analytics id="analytics-curso" course-id="curso-actual"></p2lrn-analytics>
<script>
// datasetCurso contiene métricas reales de este curso, obtenidas de Player
// o de resultados .p2lrn-result ya validados; no es el archivo .p2lrn.
document.querySelector("#analytics-curso").data = datasetCurso;
</script>Para fijar una prerelease concreta, sustituye current por 0.5.0-alpha.11.
4. NPM
En proyectos con dependencias gestionadas, instala Analytics y registra el componente desde tu aplicación.
npm install @p2lrn/analytics@0.5.0-alpha.11import '@p2lrn/analytics';
const panel = document.querySelector('p2lrn-analytics');
panel.data = datasetCurso; // datos reales del curso y resultados de sus alumnos
// refresh() sólo es necesario cuando se ha configurado un dataSource o src.5. Dataset del Host
El contrato utiliza seis colecciones. Los identificadores son opacos para Analytics y su significado pertenece a tu plataforma.
learnersIdentidad visible autorizada: id, nombre, correo opcional, grupo, cohorte y etiquetas.
coursesCurso, código y metadatos de presentación.
enrollmentsRelación alumno–curso y progreso global cuando el Host ya lo calcula.
attemptsIntentos, estado, progreso, timestamps y tiempo activo. Un intento de actividad con entityId no completa por sí solo el curso; tampoco lo hace un intento failed. La finalización global requiere matrícula completada, progreso explícito al 100 % o un intento completado de nivel curso.
gradesCalificaciones con valor, máximo, aprobado y la bandera authoritative. Para medias globales de curso, omite entityId o usa el mismo courseId; una nota de actividad con otro entityId aparece en el libro, pero no altera la media del curso.
eventsEventos P2LRN normalizados con alumno, curso, intento, categoría, contexto y payload.
{
"learners": [{"id":"u-1","name":"Ana"}],
"courses": [{"id":"c-1","title":"Matemáticas"}],
"enrollments": [{"learnerId":"u-1","courseId":"c-1","progress":0.72}],
"attempts": [{"id":"a-1","learnerId":"u-1","courseId":"c-1","activeTimeMs":840000}],
"grades": [{"learnerId":"u-1","courseId":"c-1","value":82,"maxValue":100,"authoritative":true}],
"events": [{"type":"p2lrn:progress","timestamp":"2026-10-28T10:00:00Z","learnerId":"u-1","courseId":"c-1"}]
}6. Fuente de datos de una plataforma
Cuando P2LRN está integrado en una web o LMS, la plataforma puede entregar al panel el dataset del curso o implementar un dataSource propio. Analytics no exige una ruta API concreta ni obtiene métricas inventadas a partir del contenido del curso.
const panel = document.querySelector('p2lrn-analytics');
panel.data = datasetDelCurso;
// O bien:
panel.dataSource = {
async load(filtros) {
return obtenerDatosAutorizadosDelCurso(filtros);
}
};Si una aplicación ya dispone de una ruta autenticada propia, también puede utilizar createHttpAnalyticsDataSource apuntando a esa ruta de la aplicación. P2LRN no define ni impone una URL fija.
Las calificaciones sólo se consideran oficiales cuando la fuente autorizada las marca expresamente con authoritative: true. Un resultado offline no establece ese indicador por sí solo.
La aplicación integradora decide cómo identifica al usuario y qué datos puede consultar. El panel se limita a representar el dataset recibido.
7. Eventos y tiempo activo
Los eventos de Player pueden convertirse a learning-event/1. Analytics entiende categorías de ciclo de vida, navegación, evaluación, progreso, finalización, atención, medios, interoperabilidad, colaboración y error.
Para tiempo activo, el panel acepta activeTimeMs del intento y eventos p2lrn:active-time/p2lrn:attention. Cuando recibe valores acumulados del mismo intento conserva el mayor, evitando sumar dos veces el mismo intervalo.
8. Señales de seguimiento
Las señales no son un diagnóstico ni una predicción automática. Son reglas visibles que el Host puede ajustar.
Por defecto, 14 días sin actividad en un curso no completado.
Por defecto, menos del 35 % cuando el alumno ya ha empezado.
Por defecto, menos del 60 % en una nota autoritativa.
Por defecto, dos o más intentos con estado failed.
El panel muestra el motivo de cada señal para que una persona pueda interpretarla y decidir qué hacer.
9. API del componente
dataAsigna directamente un dataset en memoria.
dataSourceObjeto con load(filters) para conectar el Host.
refresh()Recarga la fuente y vuelve a calcular las vistas.
setView(view)Cambia entre overview, learners, courses, grades y activity.
selectLearner(id) / selectCourse(id)Abren el detalle correspondiente.
exportCsv(kind)Exporta alumnos, cursos o notas en CSV.
importOfflineResult(file)Abre un .p2lrn-result y lo convierte en un dataset de Analytics manteniendo sus puntuaciones como informativas.
page-size / pageSizeNúmero de filas por página para alumnos y libro de notas. Predeterminado: 50; rango: 10–200.
10. API de agregación
También puedes usar Analytics sin montar el panel.
import {
normalizeAnalyticsDataset,
computeAnalyticsSnapshot,
filterAnalyticsDataset,
analyticsToCsv
} from '@p2lrn/analytics';
const dataset = normalizeAnalyticsDataset(raw);
const snapshot = computeAnalyticsSnapshot(dataset);
const csv = analyticsToCsv(snapshot, {kind:'courses'});11. Eventos del Web Component
p2lrn-analytics-readyEl componente se ha registrado y está listo.
p2lrn-analytics-refreshUna carga de datos terminó correctamente.
p2lrn-analytics-selectSe seleccionó un alumno o curso.
p2lrn-analytics-exportSe generó un CSV.
p2lrn-analytics-importSe abrió correctamente un resultado offline.
p2lrn-analytics-errorLa carga de la fuente produjo un error.
12. Privacidad y seguridad
- No incluyas alumnos, correos, notas o historial dentro de un paquete
.p2lrn. - Autoriza el endpoint de Analytics según institución, rol, curso y alcance del usuario conectado.
- No confíes en
learnerIdocourseIdenviados por el navegador para decidir permisos. - El CSV contiene los datos visibles en el panel; su descarga debe respetar la política de tu plataforma.
- Las puntuaciones informativas del navegador no deben convertirse silenciosamente en notas oficiales.