136 lines
9.8 KiB
Markdown
136 lines
9.8 KiB
Markdown
# 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:**
|
|
* [x] Creación del Backend Flask como API REST pura bajo `/api/v1/` retornando exclusivamente JSON.
|
|
* [x] Implementación del Frontend BFF en Node.js + Express con renderizado de plantillas mediante Nunjucks.
|
|
* [x] Autenticación desacoplada mediante JWT (`access_token`) transportado en Cookie `HttpOnly` segura.
|
|
* [x] Pipeline de seguridad `SecurityFilterChain` con cabeceras de blindaje OWASP y rate limiting dinámico.
|
|
* [x] Cliente HTTP Axios centralizado con inyección automática de Bearer token y manejo de sesiones.
|
|
|
|
---
|
|
|
|
### 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:**
|
|
* [x] **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.
|
|
* [x] **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=...`).
|
|
* [x] **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.
|
|
* [x] **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.
|
|
* [x] **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.
|
|
|
|
---
|
|
|
|
### 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:**
|
|
1. **Estadio 2.1 — Modelo de Co-docencia:**
|
|
- [x] Tabla relacional `commission_teachers` para soportar múltiples docentes por comisión (titulares, adjuntos, ayudantes).
|
|
- [x] Endpoints `/api/v1/commissions/<id>/teachers` para asociar y desvincular docentes de cátedra.
|
|
- [x] Adaptación de vistas de Bedelía y Comisiones para visualizar el equipo docente completo.
|
|
2. **Estadio 2.2 — Matriz de Conflictos y Validación:**
|
|
- [x] Validación estricta de conflicto físico: bloqueo de doble asignación de aula en mismo día y horario.
|
|
- [x] 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.
|
|
- [x] Validación de aforo: bloqueo cuando la cantidad de alumnos excede la capacidad del aula física.
|
|
3. **Estadio 2.3 — Regla de Restricción Diaria del Alumno:**
|
|
- [x] Validación al matricular: un alumno no puede cursar dos asignaturas regulares en el mismo día calendario.
|
|
- [x] 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`).
|
|
|
|
---
|
|
|
|
### 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:**
|
|
1. **Estadio 3.1 — Calendario de Evaluación por Comisión:**
|
|
- [x] Programación de parciales, recuperatorios, entregas de trabajos prácticos y exámenes finales.
|
|
- [x] Notificaciones preventivas en el dashboard del alumno con cuenta regresiva para exámenes.
|
|
2. **Estadio 3.2 — Libro de Calificaciones (*Gradebook*):**
|
|
- [x] Matriz de carga rápida de notas para docentes con autoguardado asíncrono.
|
|
- [x] Consulta individualizada de calificaciones y retroalimentaciones pedagógicas para alumnos.
|
|
- [x] Cierre de actas de regularidad y promoción para Bedelía.
|
|
|
|
---
|
|
|
|
### 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:**
|
|
1. **Estadio 4.1 — Grilla Semanal Interactiva (Drag-and-Drop):**
|
|
- [x] Interfaz tipo TimeGrid interactiva con arrastre de comisiones para asignación rápida de aulas y turnos (`FullCalendar` `editable: true` + `droppable: true`).
|
|
- [x] Panel lateral de comisiones pendientes de aula (`unassigned_commissions`) con arrastre directo hacia la grilla.
|
|
- [x] 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`.
|
|
2. **Estadio 4.2 — Modo Impersonación del Superadmin:**
|
|
- [x] Funcionalidad de *login as* con soporte para cabecera `X-Impersonate-User` en Backend Flask (`jwt_required`) y Frontend BFF (`authMiddleware`).
|
|
- [x] Botón directo de impersonación en la lista administrativa de usuarios (`admin/users/list.html`).
|
|
- [x] 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.
|
|
- [x] Trazabilidad obligatoria y estricta en el registro de auditoría (`audit_logs`) con eventos `IMPERSONATE_START` e `IMPERSONATE_END`.
|
|
3. **Estadio 4.3 — Integración del Optimizador Genético:**
|
|
- [x] 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).
|
|
- [x] Prevención de choques en guardado masivo con persistencia directa en base de datos (`POST /api/genetic/apply-optimization`).
|
|
|
|
---
|
|
|
|
### Fase 5: Producción Institucional, CI/CD e Integraciones 🏢 *(Planificada)*
|
|
* **Objetivo:** Puesta en marcha definitiva en la infraestructura de servidores de UniCABA.
|
|
* **Estadios:**
|
|
1. **Estadio 5.1 — Despliegue e Infraestructura:**
|
|
- [ ] `docker-compose.yml` productivo orquestando Flask (Gunicorn), Node.js BFF (PM2) y PostgreSQL 15.
|
|
- [ ] Proxy inverso Nginx con certificados SSL/TLS y compresión Brotli/Gzip.
|
|
2. **Estadio 5.2 — Integraciones Universitarias:**
|
|
- [ ] Módulo de exportación/importación compatible con SIU Guaraní 3.
|
|
- [ ] Sincronización automática de aulas virtuales con Moodle institucional.
|
|
3. **Estadio 5.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).
|
|
|
|
---
|
|
|
|
## 📈 Criterios de Aceptación del MVP
|
|
1. **Zero Colisiones Físicas:** Imposibilidad absoluta de asignar dos materias simultáneas a una misma aula física.
|
|
2. **Virtualidad Fluida:** Acceso con un clic a reuniones virtuales válidas para el 100% de las comisiones remotas.
|
|
3. **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.
|
|
4. **Respuesta Sub-segundo:** Carga de carteleras y calendarios en menos de 300 ms en el BFF Node.js.
|