Files
admin-edu-space/CHANGELOG.md
T

6.3 KiB

Changelog Oficial — Admin Edu-Space (UniCABA)

Todas las modificaciones notables a este proyecto serán documentadas en este archivo. El formato está basado en Keep a Changelog y este proyecto se adhiere a Semantic Versioning.


[Unreleased]

Planificado (Fase 2 del Roadmap MVP)

  • Co-docencia en Cátedras: Asignación de múltiples profesores (titular, adjunto, ayudante) a una misma comisión.
  • Matriz de Conflictos: Detección de solapamiento físico, docente y control de aforo en tiempo real.
  • Regla de Restricción Diaria del Alumno: Validación para impedir cursar dos materias regulares el mismo día, con motor de excepciones para cursos cortos o autorización de Bedelía.
  • Libro de Calificaciones (Gradebook): Carga rápida de notas y seguimiento de regularidad.
  • Grilla Semanal Drag & Drop: Asignación visual interactiva para la oficina de Bedelía.

[2.1.0] - 2026-09-19

Añadido

  • Ficha Detallada de Reserva (schedule.view_reservation):
    • Implementación en BFF Node.js de la ruta /schedule/view_reservation (soportando parámetros :id, ?id= o selección automática del primer registro).
    • Vistas y controladores para modificar reservas con selectores en cascada (/schedule/edit_reservation).
    • Endpoints de acción rápida en backend y BFF: POST /schedule/confirm_reservation y POST /schedule/cancel_reservation.
    • Actualización de enlaces en today.html, list.html, dashboard.html y view.html para navegar directamente con el identificador de la reserva (?id=...).
  • Creación y Asociación de Comisiones a Asignaturas (admin/commissions_list):
    • Botón destacado + Nueva Comisión en el encabezado y en el estado vacío de la tabla.
    • Modal interactivo #modalAddCommission con selección obligatoria y clara de la Asignatura / Materia Asociada (<select name="subject_id" required>), mostrando código oficial, nombre y carrera.
    • Campos completos de cursada: cuatrimestre (1C/2C/Anual), año lectivo, turno, docente a cargo, cupo máximo y días/horarios.
    • Generación y configuración automática de enlace a Google Meet institucional cuando no se ingresa un enlace personalizado.
    • Alerta de confirmación visual (?created=1) al registrar y vincular una comisión exitosamente.
    • Tabla de comisiones actualizada con visualización explícita del código de materia, nombre y badge de carrera.
  • Enriquecimiento de la API REST:
    • Endpoint GET /api/v1/reservations/<id> ampliado con objetos relacionales anidados: classroom (código, edificio, piso, capacidad, descripción, virtualidad), commission (código, código compuesto, materia), user (docente, nombre, apellido, correo), duración en minutos y enlaces virtuales.
    • Endpoint POST /api/v1/admin/commissions con validación estricta de existencia de asignatura y resolución inteligente de unicidad.

[2.0.0] - 2026-09-18

Añadido

  • Reingeniería de Arquitectura Fullstack (Desacople Monolito -> Backend + BFF):
    • Desacople completo del backend Python/Flask como una API REST pura bajo /api/v1/ retornando exclusivamente JSON.
    • Implementación del Frontend BFF en Node.js + Express con renderizado de servidor mediante Nunjucks.
    • Autenticación sin estado (Stateless) basada en tokens JWT firmados con algoritmo HS256.
    • Almacenamiento seguro del token de acceso en cookies del navegador con directivas HttpOnly, SameSite=Lax y Secure.
    • Inyección transparente del token Bearer en peticiones internas mediante cliente Axios centralizado.
  • Dashboards Personalizados por Rol Institucional:
    • Dashboard de Bedelía (/dashboard?role=bedelia): Métricas operativas de campus físico y virtual, cartelera del día y panel de aprobación de solicitudes pendientes.
    • Dashboard de Docente (/dashboard?role=docente): Sesiones del día con botones directos para ingresar a reuniones virtuales (Meet/Teams/Zoom) y formulario de solicitud de aulas.
    • Dashboard de Alumno (/dashboard?role=alumno): Brújula de cursada "¿Dónde curso hoy?" con ubicación por piso/aula o enlace virtual, junto al calendario de exámenes y entregas.
    • Dashboard de Administrador (/dashboard?role=admin): Cockpit institucional de capacidad, usuarios, auditoría RBAC y distribución de comisiones.
    • Selector dinámico de vista previa de roles en el banner superior para administradores.
  • Cartelera del Día Interactiva (/schedule/today_schedule):
    • Grilla estructurada en bloques horarios (07:00 a 21:00 hs) con métricas en tiempo real de ocupación y reservas confirmadas/pendientes.
    • Filtro dinámico para ocultar clases virtuales (hide_virtual=1) y segmentación por pisos o turnos.
  • Seguridad Enterprise (SecurityFilterChain):
    • Pipeline centralizado de cabeceras de blindaje OWASP (nosniff, SAMEORIGIN, X-XSS-Protection, Strict-Transport-Security).
    • Rate limiting dinámico contra ataques de fuerza bruta en endpoints de autenticación.

Corregido

  • Resolución de Colisión de Horarios en Clases Virtuales (Importador de Google Sheets):
    • Corrección de la búsqueda de duplicados en sheets_importer.py que limitaba indebidamente la unicidad a (classroom_id, start_time, end_time).
    • Habilitación de concurrencia ilimitada para el aula virtual (Campus Virtual · VIRTUAL) mediante discriminación por commission_id.
    • El total de reservas registradas aumentó de 363 a 643 (incorporando 280 clases virtuales que eran descartadas por falso conflicto).
    • Generación y guardado automático de enlaces institucionales de Google Meet (https://meet.google.com/edu-{materia}-{comision}).

[1.0.0] - 2026-09-04

Añadido

  • Versión Monolítica Base (legacy_admin-edu-space):
    • Aplicación monolítica en Flask con plantillas Jinja2 y persistencia SQLAlchemy (SQLite / PostgreSQL).
    • Modelado de datos inicial para sedes, aulas físicas, materias, comisiones, usuarios y reservas.
    • Sistema de roles inicial (Admin, Bedelía, Docente, Alumno) basado en sesión tradicional de Flask-Login.
    • Calendario de reservas mensual y semanal con FullCalendar.
    • Prototipo experimental de algoritmo genético para optimización de ocupación áulica.
    • Módulo de sincronización inicial con planillas de Google Sheets.