12 KiB
12 KiB
ROADMAP MVP — Sistema Integral UniCABA
Gestión de Espacios Áulicos, Actividad de Cursada y Seguimiento Académico
Institución: Universidad de la Ciudad de Buenos Aires (UniCABA)
Versión: 2.8.0
Fecha de Actualización: 23 de Septiembre de 2026
Rama Base: testing
🗺️ Visión del Proyecto
Construir y evolucionar la plataforma de gestión académica y espacial de UniCABA hacia un sistema integral de clase universitaria, desacoplado en una arquitectura Backend RESTful (Python/Flask) + Frontend BFF (Node.js/Express/Nunjucks), capaz de gobernar tanto los espacios físicos de la sede central como la dinámica áulica del campus virtual, garantizando una experiencia fluida para Administradores, Bedelía, Docentes y Estudiantes.
📊 Estado Global de Progreso
Fase 0: Desacople y Arquitectura Base [████████████████████] 100% (Completado)
Fase 1: Paridad Legacy y Estabilización [████████████████████] 100% (Completado)
Fase 2: Co-docencia y Matriz Conflictos [████████████████████] 100% (Completado)
Fase 3: Hitos Evaluativos y Calificaciones[████████████████████] 100% (Completado)
Fase 4: UI/UX Drag & Drop e Impersonación[████████████████████] 100% (Completado)
Fase 5: Despliegue Producción e Integrac.[░░░░░░░░░░░░░░░░░░░░] 0% (Planificada)
🚀 Detalle de Fases y Estadios
Fase 0: Desacople y Arquitectura Base ✅ (Completada)
- Objetivo: Separar el monolito Jinja2 legacy en dos servicios independientes de alto rendimiento.
- Entregables:
- Creación del Backend Flask como API REST pura bajo
/api/v1/retornando exclusivamente JSON. - Implementación del Frontend BFF en Node.js + Express con renderizado de plantillas mediante Nunjucks.
- Autenticación desacoplada mediante JWT (
access_token) transportado en CookieHttpOnlysegura. - Pipeline de seguridad
SecurityFilterChaincon cabeceras de blindaje OWASP y rate limiting dinámico. - Cliente HTTP Axios centralizado con inyección automática de Bearer token y manejo de sesiones.
- Creación del Backend Flask como API REST pura bajo
Fase 1: Paridad Legacy, Estabilización de Virtualidad y BFF Core ✅ (Completada)
- Objetivo: Alcanzar paridad funcional total con la versión legacy, subsanando defectos críticos de virtualidad y dotando de interfaz específica a cada rol.
- Entregables:
- Importador de Google Sheets Corregido:
- Eliminación de la colisión de horarios en el aula virtual única (
Campus Virtual · VIRTUAL). - Incremento de reservas registradas de 363 a 643 (incorporando 280 clases virtuales que se descartaban).
- Generación y persistencia automática de enlaces de Google Meet institucional por comisión y reserva.
- Eliminación de la colisión de horarios en el aula virtual única (
- Dashboards Especializados por Rol:
- Dashboard interactivo para Bedelía (aulas físicas, salas virtuales, aprobaciones pendientes).
- Dashboard interactivo para Docente (clases del día, comisiones, enlaces directos a Meet).
- Dashboard interactivo para Alumno (brújula de cursada "¿Dónde curso hoy?", hitos y calendario).
- Cockpit institucional para Admin (métricas de capacidad, auditoría RBAC, demanda mensual).
- Selector dinámico de vista previa / roles en tiempo real (
?role=...).
- Cartelera del Día (
today_schedule):- Grilla temporal por bloques horarios (07:00 a 21:00 hs) con indicadores físicos y virtuales.
- Filtro dinámico para ocultar clases virtuales (
hide_virtual=1) y segmentación por piso o turno.
- Acople de Ficha de Reserva (
schedule.view_reservation):- Ruteo en BFF (
/schedule/view_reservation?id=...y/view/:id). - Endpoint REST
/api/v1/reservations/<id>con enriquecimiento relacional (aula, comisión, docente). - Soporte para modificar reserva (
edit_reservation) con selectores en cascada, confirmación y cancelación.
- Ruteo en BFF (
- Gestión de Comisiones (
admin/commissions_list):- Botón y modal interactivo
+ Nueva Comisión(#modalAddCommission). - Vinculación obligatoria y explícita a la Asignatura / Materia, indicando cuatrimestre, año lectivo, turno, docente a cargo, cupo y enlace virtual.
- Visualización en tabla de la materia vinculada con su código y carrera asociada.
- Botón y modal interactivo
- Importador de Google Sheets Corregido:
Fase 2: Co-docencia, Matriz de Conflictos y Regla Diaria ✅ (100% Completado)
- Objetivo: Implementar las reglas de negocio académicas complejas para asignación de cátedras y cursada de alumnos.
- Estadios:
- Estadio 2.1 — Modelo de Co-docencia:
- Tabla relacional
commission_teacherspara soportar múltiples docentes por comisión (titulares, adjuntos, ayudantes). - Endpoints
/api/v1/commissions/<id>/teacherspara asociar y desvincular docentes de cátedra. - Adaptación de vistas de Bedelía y Comisiones para visualizar el equipo docente completo.
- Tabla relacional
- Estadio 2.2 — Matriz de Conflictos y Validación:
- Validación estricta de conflicto físico: bloqueo de doble asignación de aula en mismo día y horario.
- Validación de conflicto docente: detección de superposición horaria del profesor, con soporte de excepción justificada cuando la comisión cuenta con co-docencia.
- Validación de aforo: bloqueo cuando la cantidad de alumnos excede la capacidad del aula física.
- Estadio 2.3 — Regla de Restricción Diaria del Alumno:
- Validación al matricular: un alumno no puede cursar dos asignaturas regulares en el mismo día calendario.
- Excepción parametrizable: autorización automática si al menos una de las materias es un "curso corto" (
is_short_course) o si existe autorización manual de Bedelía (allow_same_day_exception).
- Estadio 2.1 — Modelo de Co-docencia:
Fase 3: Gestión de Hitos Evaluativos y Libro de Calificaciones 📅 (Completada)
- Objetivo: Proveer al cuerpo docente y estudiantil el seguimiento completo de instancias evaluativas.
- Estadios:
- Estadio 3.1 — Calendario de Evaluación por Comisión:
- Programación de parciales, recuperatorios, entregas de trabajos prácticos y exámenes finales.
- Notificaciones preventivas en el dashboard del alumno con cuenta regresiva para exámenes.
- Estadio 3.2 — Libro de Calificaciones (Gradebook):
- Matriz de carga rápida de notas para docentes con autoguardado asíncrono.
- Consulta individualizada de calificaciones y retroalimentaciones pedagógicas para alumnos.
- Cierre de actas de regularidad y promoción para Bedelía.
- Estadio 3.1 — Calendario de Evaluación por Comisión:
Fase 4: UI/UX Avanzada para Bedelía & Modo Impersonación 🖥️ ✅ (100% Completado)
- Objetivo: Dotar a la oficina de Bedelía y a la Administración de herramientas interactivas de última generación.
- Estadios:
- Estadio 4.1 — Grilla Semanal Interactiva (Drag-and-Drop):
- Interfaz tipo TimeGrid interactiva con arrastre de comisiones para asignación rápida de aulas y turnos (
FullCalendareditable: true+droppable: true). - Panel lateral de comisiones pendientes de aula (
unassigned_commissions) con arrastre directo hacia la grilla. - Detección visual en tiempo real de aulas ocupadas, colisiones horarias, aforo insuficiente o choques de docentes con reversión automática y mensajes de alerta descriptivos vía
POST /api/v1/reservations/drag-update.
- Interfaz tipo TimeGrid interactiva con arrastre de comisiones para asignación rápida de aulas y turnos (
- Estadio 4.2 — Modo Impersonación del Superadmin:
- Funcionalidad de login as con soporte para cabecera
X-Impersonate-Useren Backend Flask (jwt_required) y Frontend BFF (authMiddleware). - Botón directo de impersonación en la lista administrativa de usuarios (
admin/users/list.html). - Banner de advertencia visual permanente en la barra superior con indicador de usuario impersonado y botón de salida inmediata hacia la sesión administrativa.
- Trazabilidad obligatoria y estricta en el registro de auditoría (
audit_logs) con eventosIMPERSONATE_STARTeIMPERSONATE_END.
- Funcionalidad de login as con soporte para cabecera
- Estadio 4.3 — Integración del Optimizador Genético:
- Acople del motor heurístico de algoritmos genéticos a la base de datos real con cálculo de turnos reales (Mañana, Tarde, Vespertino).
- Prevención de choques en guardado masivo con persistencia directa en base de datos (
POST /api/genetic/apply-optimization).
- Estadio 4.1 — Grilla Semanal Interactiva (Drag-and-Drop):
Fase 5: Integración Auth, Email & Moodle Backend 🛡️ ✉️ 🎓 ✅ (100% Completado)
- Objetivo: Centralizar la gestión de credenciales, autenticación híbrida, motor transaccional de correo y sincronización bidireccional asíncrona con Moodle 4.1 con tolerancia total a fallos.
- Épicas Entregadas:
- Épica 1 — Panel de Configuración Global (Perfil ADMIN):
- Módulo SMTP: UI/API dinámica con host, puerto, usuario, seguridad (TLS/SSL/NONE) y contraseña cifrada con Fernet (
/admin/settings). - Módulo SSO: Toggles para habilitar/deshabilitar Login Local, Google OAuth 2.0 y Moodle SSO en base de datos.
- Credenciales OAuth & Moodle: Client ID/Secret de Google y URL de Servidor / Token Web Services de Moodle 4.1.
- Módulo SMTP: UI/API dinámica con host, puerto, usuario, seguridad (TLS/SSL/NONE) y contraseña cifrada con Fernet (
- Épica 2 — Infraestructura Asíncrona y Caché:
- Capa de Caché Híbrida:
CacheServicecon integración Redis y fallback en memoria/TTL. - Cola Persistente
MoodleSyncTaskcon reintentos exponenciales y Dead Letter Queue (DLQ). - Panel de monitorización de cola con métricas en tiempo real, botón de "Forzar Sincronización Inmediata" y reintento masivo de tareas fallidas.
- Capa de Caché Híbrida:
- Épica 3 — Autenticación Híbrida (SSO & Local Tolerante a Fallos):
- Login Local: Fallback con contraseña nativa y contingencia para ADMIN cuando está desactivado para usuarios generales.
- Google OAuth 2.0: Restricción arquitectónica de dominios (
@unicaba.edu.ar,@lasalle.edu.ar) inspirada en AlumnosLS. - Moodle Delegated Login: Autenticación contra
/login/token.phpde Moodle 4.1 con mapeo inicial de roles (Admin/Docente/Alumno) y desacople local para cambios posteriores por Bedelía/Admin.
- Épica 4 — Adaptadores Moodle 4.1 (Bidireccional):
- Cliente REST Moodle 4.1 (
moodle_client) con soporte paracore_user_create_users,core_user_update_users,core_user_get_users,enrol_manual_enrol_users,enrol_manual_unenrol_users,core_enrol_get_enrolled_users,core_role_assign_roles,core_role_unassign_roles. - Encolado automático y no bloqueante al crear o editar usuarios en Edu-Space.
- Cliente REST Moodle 4.1 (
- Épica 5 — Motor de Notificaciones (Email Dinámico):
- Transporte SMTP dinámico (
email_service) instanciado en tiempo de ejecución leyendo credenciales descifradas de la BD. - Notificaciones transaccionales automáticas para profesores (asignación de comisiones, cronogramas de exámenes y alertas de sistema).
- Transporte SMTP dinámico (
- Épica 1 — Panel de Configuración Global (Perfil ADMIN):
Fase 6: Producción Institucional, CI/CD y Despliegue 🏢 (En curso)
- Objetivo: Puesta en marcha definitiva en la infraestructura de servidores de UniCABA.
- Estadios:
- Estadio 6.1 — Despliegue e Infraestructura:
docker-compose.ymlproductivo orquestando Flask (Gunicorn), Node.js BFF (PM2) y PostgreSQL 15.- Proxy inverso Nginx con certificados SSL/TLS y compresión Brotli/Gzip.
- Estadio 6.2 — Sincronización Continua Moodle:
- Sincronización automática de aulas virtuales y usuarios con Moodle 4.1 institucional (
10.0.0.207). - Automatización de workers persistentes (systemd / supervisor) para el procesamiento continuo de la cola.
- Sincronización automática de aulas virtuales y usuarios con Moodle 4.1 institucional (
- Estadio 6.3 — Pruebas de Carga y Hardening:
- Pruebas de estrés de concurrencia en días pico de inicio de cuatrimestre (10.000 solicitudes simultáneas).
- Estadio 6.1 — Despliegue e Infraestructura:
📈 Criterios de Aceptación del MVP
- Zero Colisiones Físicas: Imposibilidad absoluta de asignar dos materias simultáneas a una misma aula física.
- Virtualidad Fluida: Acceso con un clic a reuniones virtuales válidas para el 100% de las comisiones remotas.
- Roles Seguros: Separación total de permisos donde ningún alumno o docente acceda a configuración global ni a datos privados de otras comisiones.
- Respuesta Sub-segundo: Carga de carteleras y calendarios en menos de 300 ms en el BFF Node.js.