SEGUIMIENTO / PROGRESIÓN

Progresión

La progresión define cuándo una actividad cuenta como terminada, qué elementos son obligatorios y qué contenido debe permanecer bloqueado hasta que el alumno cumpla determinadas condiciones.

1. Modelo mental

Las reglas de progresión viven en el paquete; el estado concreto de cada alumno vive fuera del paquete. El curso puede declarar «esta actividad es obligatoria» o «esta unidad se desbloquea después de aprobar otra», mientras que la plataforma conserva quién ha visto, completado o aprobado cada actividad.

2. Propiedades disponibles

required: boolean

Indica que la entidad participa en el cálculo de finalización agregada.

gateFollowing: boolean

Bloquea los elementos hermanos posteriores hasta satisfacer esta entidad. No puede utilizarse en la entidad raíz del curso.

completionRequirement

Acepta viewed, completed o passed y define qué estado satisface la regla.

minScore

Porcentaje de 0 a 100. Sólo es válido en actividades y permite exigir una puntuación mínima.

unlockWhen

Expresa prerrequisitos mediante una lista all o una lista any.

3. Obligatoriedad y bloqueo no son lo mismo

required afecta a si el curso se considera completado. gateFollowing afecta a la navegación: impide avanzar a hermanos posteriores. Una actividad puede ser obligatoria sin bloquear lo siguiente, o puede bloquear lo siguiente hasta cumplirse.

Reglas que cambian la navegación.

Si utilizas gateFollowing o unlockWhen, el perfil de progresión debe declararse como requerido para que un reproductor que no comprenda esas reglas no pueda ignorarlas silenciosamente.

4. Prerrequisitos con unlockWhen

unlockWhen contiene exactamente una de estas dos formas: all, cuando deben cumplirse todas las condiciones, o any, cuando basta con una. Cada condición referencia una unidad o actividad existente y puede exigir un estado y una puntuación mínima.

TypeScript
workspace.setProgression('actividad-avanzada', {
  unlockWhen: {
    all: [
      { entity: 'actividad-intro', status: 'completed' },
      { entity: 'quiz-1', status: 'passed', minScore: 70 },
    ],
  },
});

5. Ejemplo de una actividad obligatoria

Este ejemplo exige aprobar la actividad con una nota mínima y mantiene bloqueados los elementos posteriores hasta cumplir la condición.

TypeScript
workspace.setProgression('quiz-final', {
  required: true,
  gateFollowing: true,
  completionRequirement: 'passed',
  minScore: 70,
});

En este ejemplo el cuestionario es obligatorio, debe aprobarse con al menos un 70 % y mantiene bloqueados los elementos posteriores hasta que se cumpla la condición.

6. Validaciones que evita el Toolkit

  • minScore fuera del intervalo 0–100.
  • minScore aplicado a una entidad que no sea una actividad.
  • gateFollowing en la raíz del curso.
  • unlockWhen vacío, con all y any a la vez, o con referencias que no existen.
  • Ciclos de dependencias, por ejemplo A depende de B y B vuelve a depender de A.

7. Qué hace el Player durante la reproducción

  1. Renderizado.Cuando una actividad se representa, el Player puede marcar el estado viewed.
  2. Actividad.Los eventos de puntuación y finalización actualizan el estado de la actividad.
  3. Reglas.El Player recalcula bloqueos y prerrequisitos después de los cambios relevantes.
  4. Persistencia.Si existe Host Adapter, carga el estado al comenzar y guarda los cambios mediante la plataforma.
  5. Notificación.Emite p2lrn:progressionchange cuando cambia el resultado de progresión.

8. Qué guarda exactamente el estado de progresión

El .p2lrn contiene las reglas; la plataforma conserva el resultado de aplicarlas a cada alumno. El snapshot de progresión usa la versión p2lrn-progression-state/1 y mantiene una entrada por entidad afectada.

JSON
{
  "version": "p2lrn-progression-state/1",
  "entities": {
    "urn:uuid:actividad-1": {
      "viewed": true,
      "completed": true,
      "passed": true,
      "scorePercent": 82.5,
      "updatedAt": "2026-10-16T08:30:00.000Z"
    }
  }
}

viewed puede activarse al renderizar; completed al finalizar; passed y scorePercent se actualizan cuando una puntuación aporta esos datos. El Player guarda este snapshot mediante Host Adapter con un contexto de progresión separado de los estados internos de las actividades.

9. Cómo convertir la progresión en métricas

No utilices p2lrn:progress como porcentaje del curso: ese evento puede representar, por ejemplo, preguntas respondidas dentro de un cuestionario. Para informes de curso combina las reglas del paquete con el estado de progresión y decide en tu plataforma qué agregados quieres mostrar.

Para notas e interacción detallada de cuestionarios, SCORM y H5P consulta Métricas y analítica. Para persistencia mediante Host Adapter consulta Integración.