Plataforma Aula Virtual & API Gestor Intermedio SENCE
El presente informe tiene como objetivo principal delinear la estrategia técnica y el plan de acción para desarrollar una integración robusta y automatizada entre la plataforma de e-learning existente y el Sistema Integrado de Calidad (SIC) de SENCE.
La integración se realizará a través del "API Gestor Intermedio", un middleware provisto por SENCE para centralizar la recepción de datos de avance de los alumnos, comúnmente conocido como el Libro de Clases Electrónico (LCE).
El objetivo final es crear un agente de software automatizado que, diariamente y sin intervención manual, recopile, formatee y transmita la información de progreso de los alumnos desde nuestra base de datos hacia SENCE, garantizando el cumplimiento normativo y la correcta trazabilidad de la actividad formativa.
La solución se basará en un script de backend (preferiblemente PHP) que actuará como un "Agente de Sincronización SENCE". Este agente será ejecutado automáticamente a través de una tarea programada (Cron Job) en el servidor.
POST
a la API de SENCE, enviando el payload JSON.Esta es la fase más crítica. A continuación se detalla cómo se obtendrá cada parámetro del JSON de la API a partir de las tablas de su base de datos.
Para cada curso a reportar, se ensamblará el siguiente objeto raíz.
Parámetro API SENCE | Tabla de Origen | Campo de Origen | Lógica y Observaciones |
---|---|---|---|
rutOtec |
cursos_sence |
rut_otec_sence |
Dato estático por curso. Debe ser el RUT de la OTEC. |
idSistema |
cursos_sence |
id_sistema_sence |
Valor fijo 1350 , según el instructivo. |
token |
cursos_sence |
token_sence |
Token de autenticación único de la OTEC, debe ser obtenido desde el portal de SENCE. |
codigoOferta |
cursos_sence |
codigo_oferta_sence |
Código de la oferta del curso entregado por SENCE. |
codigoGrupo |
cursos_sence |
codigo_grupo_sence |
Código del grupo/sección del curso entregado por SENCE. |
codigoEnvio |
- | - | Opcional. Se puede generar un ID único para cada envío (ej. CURSOID-YYYYMMDD ). |
cantActividadSincronica |
subtemas_curso |
tipo_actividad_sence |
SELECT COUNT(*) FROM subtemas_curso WHERE curso_id = [ID_CURSO] AND tipo_actividad_sence = 'sincronica' . |
cantActividadAsincronica |
subtemas_curso |
tipo_actividad_sence |
SELECT COUNT(*) FROM subtemas_curso WHERE curso_id = [ID_CURSO] AND tipo_actividad_sence = 'asincronica' . |
listaAlumnos |
Múltiple | - | Arreglo de objetos Alumno que se construirá a continuación. |
listaAlumnos
)Por cada alumno inscrito en el curso (inscripciones_curso
), se creará un objeto Alumno
.
Parámetro API SENCE | Tabla de Origen | Campo de Origen | Lógica y Observaciones |
---|---|---|---|
rutAlumno / dvAlumno |
alumnos |
rut |
Obtener el RUT completo (ej. '12345678-9'). Separar el número (12345678 ) y el dígito verificador (9 ). |
tiempoConectividad |
accesos_aula_virtual |
duracion_segundos |
Cálculo crítico: SELECT SUM(duracion_segundos) FROM accesos_aula_virtual WHERE alumno_id = [ID_ALUMNO] AND curso_id = [ID_CURSO] AND DATE(fecha_acceso) = CURDATE() . Suma de todas las sesiones del día actual. |
porcentajeAvance |
subtemas_curso , subtemas_alumno |
- | Cálculo crítico: 1. TotalObligatorias = SELECT COUNT(*) FROM subtemas_curso WHERE curso_id = [ID_CURSO] AND es_obligatorio_sence = 1 . 2. Completadas = SELECT COUNT(*) FROM subtemas_alumno WHERE alumno_id = [ID_ALUMNO] AND curso_id = [ID_CURSO] AND modo = 'completado' . 3. (Completadas / TotalObligatorias) * 100 . |
estado |
inscripciones_curso |
modo |
Mapeo de valores: en_curso → 1 , aprobado → 2 , reprobado → 3 . |
fechaInicio / fechaFin |
inscripciones_curso |
fecha_inicio_clases / fecha_termino |
Formatear a YYYY-MM-DD . |
fechaEjecucion |
- | - | Fecha actual del reporte, generada dinámicamente (date('Y-m-d') ). |
evaluacionFinal |
inscripciones_curso |
nota_final |
Nota final del curso para el alumno. |
listaModulos |
Múltiple | - | Arreglo de objetos Módulo que se construirá a continuación. |
listaModulos
)Para cada tema (temas_curso
) asociado al curso, se creará un objeto Módulo
.
Parámetro API SENCE | Tabla de Origen | Campo de Origen | Lógica y Observaciones |
---|---|---|---|
codigoModulo |
temas_curso |
codigo_modulo_sence |
Código del módulo (tema) entregado por SENCE. |
tiempoConectividad |
video_progreso_alumno |
segundos_vistos |
Sumar el tiempo de visualización de todos los videos (subtemas) que pertenecen a este módulo (tema). SELECT SUM(vpa.segundos_vistos) FROM video_progreso_alumno vpa JOIN subtemas_curso sc ON vpa.subtema_id = sc.id WHERE vpa.alumno_id = [ID_ALUMNO] AND sc.tema_id = [ID_TEMA] . |
porcentajeAvance |
subtemas_curso , subtemas_alumno |
- | Similar al del curso, pero acotado al módulo: ...WHERE tema_id = [ID_TEMA] . |
estado |
temas_curso |
- | Lógica a definir. Se puede basar en si todas las actividades del módulo están completadas y la nota promedio. |
notaModulo |
notas_alumno |
nota |
Calcular el promedio de las notas de las evaluaciones asociadas a este módulo (tema). |
cantActividad... |
subtemas_curso |
tipo_actividad_sence |
Similar al del curso, pero acotado al módulo: ...WHERE tema_id = [ID_TEMA] . |
listaActividades |
subtemas_curso |
- | Arreglo de objetos Actividad que se construirá a continuación. |
listaActividades
)Para cada subtema (subtemas_curso
) asociado al módulo (tema), se creará un objeto Actividad
.
Parámetro API SENCE | Tabla de Origen | Campo de Origen | Lógica y Observaciones |
---|---|---|---|
codigoActividad |
subtemas_curso |
codigo_actividad_sence |
Usar este campo. Si no existe, se puede usar titulo , pero debe ser truncado a 50 caracteres. |
Se configurará una tarea programada en el servidor para ejecutar el script del agente diariamente.
Ejemplo de configuración de Cron:
0 22 * * * /usr/bin/php /ruta/a/su/proyecto/agente_sence.php
Esta línea ejecutará agente_sence.php
todos los días a las 22:00 horas.
El script agente_sence.php
contendrá la lógica principal:
cursosla_cursos
.id
de los cursos a reportar.foreach ($cursos as $curso) { ... }
https://auladigital.sence.cl/gestor/API/avance-sic/enviarAvance
.POST
, Content-Type: application/json
.json_encode($datos_curso)
).log_sence_envios
(id
, fecha_envio
, curso_id
, id_proceso_sence
, estado_envio
, request_payload
, response_payload
).log_sence_errores
(id
, id_log_envio
, rut_alumno
, codigo_modulo
, codigo_error
, mensaje_error
).json_decode
).log_sence_envios
.datosError
, iterar sobre él y registrar cada error en log_sence_errores
, vinculándolo al envío principal.token_sence
es información sensible. Debe ser almacenado de forma segura en la base de datos y la conexión a la API debe realizarse exclusivamente a través de HTTPS.Este informe constituye la Fase 1: Planteamiento y Estrategia de nuestro flujo de trabajo. Contiene el plan de acción completo y el mapeo de datos necesario para proceder.
Quedo a la espera de su revisión y autorización explícita para comenzar con la Fase 2: Desarrollo y Codificación del agente de software descrito.