docs: estado de migracion, arquitectura objetivo UniCABA, roadmap MVP y changelog oficial
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# 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](https://keepachangelog.com/es-ES/1.1.0/) y este proyecto se adhiere a [Semantic Versioning](https://semver.org/lang/es/).
|
||||
|
||||
---
|
||||
|
||||
## [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.
|
||||
Reference in New Issue
Block a user