Guía Maestra de Desarrollo

Construcción e Integración del Aula Virtual OTEC con SENCE

Objetivo General: Establecer una estructura de datos definitiva, completa y coherente, que soporte tanto las funcionalidades actuales del sistema como todos los requerimientos de la API de SENCE.

  • Paso 1.1 Auditoría y Propuesta de Modificaciones

    Acción: Analizar las tablas existentes y proponer los siguientes cambios para alinear la base de datos con los requerimientos funcionales y de SENCE.

    Tabla: subtemas_curso
    Campos a añadir:
    • es_obligatorio_sence (TINYINT(1), DEFAULT 1): Para diferenciar actividades obligatorias de las complementarias.
    • codigo_actividad_sence (VARCHAR(50), NULL): Para almacenar el identificador de la actividad que requiere SENCE.
    • tipo_actividad_sence (ENUM('sincronica', 'asincronica'), NOT NULL, DEFAULT 'asincronica'): Para clasificar la actividad según SENCE.
    Tabla: subtemas_alumno
    Campos a añadir:
    • calificacion_contenido (INT, NULL): Calificación de 1-7 para el contenido.
    • calificacion_pedagogia (INT, NULL): Calificación de 1-7 para la pedagogía del profesor.
    • comentario_evaluacion (TEXT, NULL): Comentario abierto del alumno sobre el subtema.
    • *Nota: El campo calificacion existente se usará para la evaluación general del subtema.*

    Asegurar que la base de datos pueda almacenar toda la granularidad de datos requerida para la operación del aula y el reporte a SENCE.

  • Paso 1.2 Implementación de Cambios y Creación de VISTA

    Acción: Ejecutar los scripts ALTER TABLE para aplicar los cambios. Posteriormente, crear una `VIEW` de base de datos para simplificar las consultas de la API.

    Creación de la VISTA vw_sence_report_data:

    Esta vista pre-unirá la información clave para facilitar la generación del reporte.

    CREATE OR REPLACE VIEW vw_sence_report_data AS
    SELECT
        -- Datos del Curso
        cs.id AS curso_id,
        cs.codigo_oferta_sence AS codigoOferta,
        cs.codigo_grupo_sence AS codigoGrupo,
        cs.rut_otec_sence,
        cs.token_sence,
        
        -- Datos del Alumno
        a.id AS alumno_id,
        a.rut AS rutAlumno,
        -- (La lógica del DV se aplicará en PHP)
    
        -- Datos de la Inscripción
        i.id AS inscripcion_id,
        i.nota_final AS evaluacionFinal,
        -- (El estado y % avance se calcularán en PHP)
    
        -- Datos del Módulo (Tema)
        tc.id AS tema_id,
        tc.codigo_modulo_sence AS codigoModulo,
    
        -- Datos de la Actividad (Subtema)
        sc.id AS subtema_id,
        sc.codigo_actividad_sence AS codigoActividad,
        sc.es_obligatorio_sence,
        sc.tipo_actividad_sence,
        sc.duracion_minutos,
        
        -- Datos de Progreso del Alumno en el Subtema
        sa.visto,
        sa.tiempo_visualizacion,
        sa.calificacion AS calificacion_general_subtema
    FROM
        cursos_sence cs
    JOIN inscripciones_curso i ON cs.id = i.curso_id
    JOIN alumnos a ON i.alumno_id = a.id
    JOIN temas_curso tc ON cs.id = tc.curso_id
    JOIN subtemas_curso sc ON tc.id = sc.tema_id
    LEFT JOIN subtemas_alumno sa ON sc.id = sa.subtema_id AND a.id = sa.alumno_id
    WHERE
        cs.estado = 'activo' AND a.estado = 'activo';
                                    

    Tener una base de datos finalizada y una vista optimizada que simplifique radicalmente el desarrollo del conector SENCE.

Objetivo General: Desarrollar las interfaces visuales y la lógica de interacción para el alumno y el profesor, asegurando una experiencia de usuario intuitiva y funcional.

Sub-Módulo 2.A: Aula Virtual del Alumno (aula_virtual_alumno.php)

  • Paso 2.A.1 Maquetación y Carga de Contenido

    Acción: Utilizando aula_virtual_p.php como base, desarrollar la lógica PHP para:

    1. Verificar sesión y permisos del alumno para el curso solicitado.
    2. Consultar temas_curso y subtemas_curso para construir dinámicamente el acordeón de navegación.
    3. Consultar subtemas_alumno para mostrar el estado de progreso (íconos y porcentaje) de cada subtema en el navegador.
    4. Al seleccionar un subtema, mostrar su título, descripción, video embebido (`url_video`), enlace a Zoom (`link_zoom`) y listar los documentos adjuntos de `documentos_subtema`.

    El alumno puede navegar por todo el contenido estructurado de su curso.

  • Paso 2.A.2 Implementación de Interacción y Evaluación

    Acción:

    1. Crear el formulario de mensajería alumno-profesor, que enviará los datos a un script PHP para guardarlos en mensajes_alumno_profesor.
    2. Crear la interfaz de evaluación (3x7 estrellas) y el script guarda_evaluacion.php que recibirá los datos vía POST/AJAX para guardarlos en los campos `calificacion_*` de `subtemas_alumno`.
    3. Implementar la lógica para `marcarVisto` (vía AJAX), que actualizará el registro correspondiente en `subtemas_alumno`.

    El alumno puede comunicarse con su profesor y evaluar la calidad de los contenidos de forma efectiva.

Sub-Módulo 2.B: Panel de Gestión del Profesor (panel_profesor.php)

  • Paso 2.B.1 Gestión de Pizarra y Comunicaciones

    Acción:

    1. Desarrollar una interfaz donde el profesor pueda crear, ver, editar y eliminar anuncios en la pizarra_curso.
    2. Crear un "Centro de Mensajes" donde el profesor pueda ver las preguntas de los alumnos de mensajes_alumno_profesor y escribir/guardar las respuestas.

    Proporcionar al profesor las herramientas para comunicarse de manera efectiva con todos los alumnos del curso.

  • Paso 2.B.2 Gestión de Contenidos y Seguimiento

    Acción:

    1. Implementar un gestor de archivos para que el profesor pueda subir y asociar documentos a cada subtema (poblando la tabla documentos_subtema).
    2. Crear una vista de "Progreso de Alumnos" que muestre una tabla con todos los inscritos y su porcentaje de avance y `tiempoConectividad` (calculado).

    Empoderar al profesor con herramientas para administrar los materiales del curso y monitorear el rendimiento de sus alumnos.

    Acceso de Administrador: El sistema debe verificar si el usuario logueado es un administrador, y en tal caso, permitirle el acceso a los paneles de cualquier profesor y curso.

Objetivo General: Construir el módulo de software que recolecta, calcula y transmite la información del sistema a la API de SENCE.

  • Paso 3.1 Desarrollo del Conector SENCE

    Acción: Crear el script `sence_api_connector.php`. Su lógica será:

    1. Consultar la `vw_sence_report_data` para obtener la base de datos.
    2. En un bucle, procesar cada fila y calcular las métricas complejas en PHP (tiempoConectividad, `porcentajeAvance`, `estado`).
    3. Ensamblar los datos en un array PHP anidado que coincida con la estructura JSON de SENCE.
    4. Convertir el array a JSON y enviarlo vía POST con cURL a `https://auladigital.sence.cl/gestor/API/avance-sic/enviarAvance`.

    Tener un script funcional que pueda enviar un reporte completo y formateado a SENCE bajo demanda.

  • Paso 3.2 Implementación de Manejo de Respuestas

    Acción: Ampliar el conector para que analice la respuesta de la API.

    • Si es exitosa, guardar el `id_proceso` y la respuesta en un log.
    • Si hay `datosError`, iterar sobre ellos, registrar cada `mensaje` y `codigo` de error (ej. "012", "El alumno no se encuentra registrado") en una tabla `log_sence_errores` para su posterior revisión.

    Crear un sistema de auditoría robusto para monitorear la salud de la integración y diagnosticar fallos rápidamente.

Objetivo General: Automatizar los reportes diarios y realizar las pruebas finales para un lanzamiento controlado.

  • Paso 4.1 Configuración de Tarea Programada (Cron)

    Acción: Configurar un cronjob en el servidor para ejecutar `sence_api_connector.php` diariamente. El horario debe ser el especificado por SENCE, entre las 22:00 y las 00:00 hrs.

    0 22 * * * /usr/bin/php /var/www/html/otec/sence_api_connector.php > /var/www/html/otec/logs/cron.log 2>&1

    Garantizar el cumplimiento automático de los reportes diarios a SENCE.

  • Paso 4.2 Pruebas Finales y Lanzamiento

    Acción: Realizar una prueba completa del flujo usando los datos del curso de prueba de SENCE. Una vez validado, activar la integración para los cursos reales y monitorear los logs de ejecución durante los primeros días.

    Asegurar la estabilidad y corrección de la integración en un entorno productivo.