Sistema de Gestión de Cursos OTEC/SENCE
El sistema analizado es una aplicación web robusta para la gestión integral de cursos de capacitación, orientada a organismos técnicos (OTEC) que interactúan con SENCE. Permite administrar todo el ciclo de vida de un curso, desde su creación detallada y estructuración de contenidos hasta la gestión de su estado y la visualización de su información.
Construido sobre una pila tecnológica de PHP y MySQL, el sistema presenta una arquitectura modular con componentes bien definidos:
form_crea_curso_o.php
): Es el corazón del sistema. Un formulario complejo y dinámico que permite crear un curso con todos sus elementos (temas, subtemas, costos, materiales, etc.) en una sola operación transaccional.lista_cursos.php
): Funciona como el panel de control principal, mostrando todos los cursos con herramientas de búsqueda, filtro y paginación. Desde aquí se accede a las demás funcionalidades.ver_curso_o_ppp.php
): Actúa como un "dashboard" para un curso específico. Presenta toda la información de manera consolidada y sirve como punto de partida para la edición granular de cada sección a través de modales y llamadas AJAX.ver_temas.php
, ver_subtema.php
y calendario_subtemas.php
, que permiten una gestión detallada de la estructura académica y la programación de clases.form_crea_curso_o.php
.cursos_sence
y se obtiene el nuevo curso_id
.curso_id
, se insertan en cascada todos los registros relacionados en sus respectivas tablas (temas_curso
, subtemas_curso
, costos_curso
, etc.).commit
). Si ocurre cualquier error, se revierte por completo (rollback
).lista_cursos.php
para ver todos los cursos.ver_curso_o_ppp.php
, pasando el ID del curso.form_editar_sence.php
).actualizar_sence.php
), que modifica la base de datos.lista_cursos.php
, el administrador hace clic en el botón de activar/desactivar.cambiar_estado_curso.php
con el ID del curso y la acción a realizar.UPDATE
en **cascada** para cambiar el campo estado
a 'activo' o 'inactivo' en todas las tablas relacionadas con el curso, garantizando la consistencia del sistema.El sistema implementa una estrategia de borrado lógico para la gestión de cursos y sus componentes. En lugar de eliminar permanentemente los registros de la base de datos (con una sentencia DELETE
), el sistema los marca como 'inactivo'
a través de un campo de estado. Esta práctica es fundamental para preservar la integridad de los datos, mantener el historial y permitir la reactivación de cursos en el futuro. Por defecto, las listas principales del sistema solo muestran los registros cuyo estado es 'activo'
.
La funcionalidad más destacada es el proceso de activación y desactivación en cascada, gestionado por el script cambiar_estado_curso.php
. Cuando un administrador cambia el estado de un curso, este script ejecuta una serie de actualizaciones que se propagan a todas las tablas relacionadas, asegurando que el curso y todos sus elementos (temas, subtemas, costos, etc.) queden consistentes y se activen o desactiven en conjunto.
A continuación se detallan todas las tablas que son afectadas durante este proceso de cambio de estado:
Tabla Involucrada | Significado en el Proceso |
---|---|
cursos_sence |
Tabla principal que contiene los datos generales del curso. Es el registro que inicia la cascada. |
temas_curso |
Almacena los módulos o unidades principales que componen el curso. |
subtemas_curso |
Contiene las clases, lecciones o actividades específicas de cada tema. |
objetivos_contenidos |
Guarda los objetivos y contenidos detallados asociados a los temas del curso. |
inscripciones_curso |
Registra las matrículas de los alumnos en el curso. Su estado cambia para reflejar la inactividad del curso. |
pizarra_curso |
Almacena los anuncios y mensajes publicados en la pizarra del curso. |
cursos_profesores |
Tabla que asocia a los profesores con el curso que imparten. |
costos_curso |
Contiene el resumen de los costos consolidados del curso. |
documentos_tema / documentos_subtema |
Almacenan los archivos adjuntos a nivel de tema y subtema, respectivamente. |
asistencias_alumno , notas_alumno , pagos_alumno |
Registros dependientes de la inscripción de un alumno, que también se marcan como inactivos. |
medios_didacticos , material_participantes , material_consumo , infraestructura_curso , equipamiento_curso |
Tablas que detallan los recursos físicos y materiales necesarios para la ejecución del curso. |
La organización de archivos es modular y sigue una estructura lógica. Las rutas de carga de archivos son dinámicas y se basan en el ID del curso.
archivos/cursos/{ID_del_curso}/imagen_curso/
.archivos/cursos/{ID_del_curso}/pizarra/
.El sistema se apoya en un conjunto de tablas altamente relacionadas que modelan la estructura de un curso de capacitación. A continuación, el detalle de las tablas principales:
cursos_sence
Es la tabla maestra. Almacena la información general y los metadatos de cada curso.
Campo | Descripción y Objetivo |
---|---|
id | Identificador único del curso. |
nombre_actividad | El nombre principal y título del curso. Es un campo obligatorio y único. |
modalidad_instruccion , tipo_instruccion , tipo_elearning_detalle | Definen la naturaleza del curso (Grupal, Presencial, Sincrónico, etc.). |
fundamentacion_tecnica , objetivos_generales , etc. | Campos de texto extensos para la descripción pedagógica del curso. |
total_horas_teoricas , total_horas_practicas , total_horas_elearning | Contadores totales de horas, calculados a partir de la suma de las horas de los temas/subtemas. |
valor_total , valor_participante , valor_franquicia | Campos para la información financiera del curso. |
codigo_oferta_sence , token_sence , etc. | Campos específicos para la integración con la plataforma SENCE. |
imagen_curso | Almacena la ruta relativa a la imagen principal o de portada del curso. |
estado | Controla si el curso está 'activo' o 'inactivo' en todo el sistema. |
temas_curso
y subtemas_curso
Estas tablas definen la estructura jerárquica del contenido académico.
Tabla / Campo | Descripción y Objetivo |
---|---|
temas_curso | Representa un módulo o unidad principal del curso. Se vincula a cursos_sence mediante curso_id . |
temas_curso.orden | Campo numérico que permite al administrador reordenar los temas. |
subtemas_curso | Representa una clase, lección o actividad específica dentro de un tema. Se vincula a temas_curso mediante tema_id . |
subtemas_curso.fecha_programada | Almacena la fecha y hora de una clase. Usado por los módulos de calendario y horario. |
subtemas_curso.profesor_id | Vincula un subtema específico con un profesor de la tabla profesores . |
Un conjunto de tablas simples que detallan los recursos y costos asociados a un curso, todas vinculadas por curso_id
.
objetivos_contenidos
: Desglosa los objetivos específicos y contenidos por cada tema.medios_didacticos
, material_participantes
, material_consumo
: Listan los recursos necesarios.infraestructura_curso
, equipamiento_curso
: Detallan la infraestructura y equipamiento requeridos.costos_curso
: Almacena un resumen de los costos totales por categoría.items_costo_curso
: Permite un desglose detallado de cada ítem de costo individual.El formulario form_crea_curso_o.php
hace un uso intensivo de JavaScript (con jQuery) para ofrecer una experiencia de usuario fluida. Calcula automáticamente los subtotales y totales de horas y costos a medida que el usuario añade o modifica ítems, evitando errores manuales y proporcionando feedback instantáneo.
El sistema utiliza un patrón de diseño inteligente para la edición de cursos. En lugar de un gran formulario de edición, la página ver_curso_o_ppp.php
funciona como un panel central desde donde se editan pequeñas porciones de información a través de ventanas modales y llamadas AJAX. Esto hace que la interfaz sea más rápida y fácil de mantener.
El uso de transacciones de base de datos en el script de creación es una práctica excelente. Garantiza que un curso solo se cree si todos sus componentes (temas, costos, etc.) se guardan correctamente, evitando datos "huérfanos" o inconsistentes.
include/funciones_nuevas.php
, según lo solicitado. Si este archivo contiene funciones críticas para la lógica de negocio, este informe podría estar incompleto en esos aspectos.form_crea_curso_o.php
contiene sentencias `CREATE TABLE IF NOT EXISTS` que pueden servir como base, aunque se recomienda un script de migración único.archivos/
exista y que el servidor web (Apache/Nginx) tenga permisos de escritura sobre ella y sus subdirectorios.include/conecta_mysql_otec.php
es el punto central de configuración. Debe contener las credenciales correctas para la conexión a la base de datos.