fix(bedelia): corregir purga academica con integridad referencial, circuito agil de asignacion de aulas y documentacion v3.1.0

This commit is contained in:
2026-09-23 20:11:29 -03:00
parent 165a0b65b8
commit 63511b9311
9 changed files with 338 additions and 59 deletions
+48 -10
View File
@@ -4,7 +4,7 @@ Plataforma integral de gestión áulica, asignación de espacios, control de hor
El proyecto se basa en una arquitectura **desacoplada (Frontend / Backend)** en formato monorepo.
**Versión Actual:** `2.8.0` (Fases 0 a 4 del Roadmap MVP 100% completadas)
**Versión Actual:** `3.1.0` (Fases 0 a 5 completadas, Fase 5.1 Bedelía UX & ABMs finalizada)
**Institución:** Universidad de la Ciudad de Buenos Aires (UniCABA)
---
@@ -18,7 +18,8 @@ Fase 2: Co-docencia y Matriz Conflictos [████████████
Fase 3: Hitos Evaluativos y Calificaciones[████████████████████] 100% (Completado)
Fase 4: UI/UX Drag & Drop e Impersonación[████████████████████] 100% (Completado)
Fase 5: Integración Auth, Email & Moodle [████████████████████] 100% (Completado)
Fase 6: Despliegue Producción e Integrac.[████░░░░░░░░░░░░░░░░] 25% (En Curso)
Fase 5.1: Bedelía UX, ABMs y Purga Datos [████████████████████] 100% (Completado)
Fase 6: Despliegue Producción e Infraest.[███████░░░░░░░░░░░░░] 35% (En Curso)
```
---
@@ -101,15 +102,49 @@ La plataforma cuenta con paneles adaptados a las necesidades operativas de cada
---
## ☁️ Sincronización Google Sheets, Configuración Global & Purga Académica
## 🏛️ Circuito Operativo de Bedelía (UX & Flujo Simplificado)
El sistema incluye sincronización automatizada con las planillas oficiales de cursada de UniCABA:
* **Configuración Global Dinámica:** Selección y persistencia de la URL de Google Sheets directamente desde la interfaz web (`/admin/google_sheets_import`) sin valores fijos en el código.
* **Herramienta de Purga y Reinicio (`reset_academic_data`):** Módulo CLI y web para limpiar selectivamente reservas, aulas, asignaturas, comisiones o carreras, garantizando pruebas limpias desde cero y preservando siempre usuarios y credenciales.
* **Concurrencia Virtual Ilimitada:** Reconocimiento de espacios áulicos remotos (`Campus Virtual · VIRTUAL`), permitiendo la coexistencia de múltiples comisiones en la misma franja horaria sin colisiones de agenda.
* **Catálogo Presencial con Cursadas Asignadas:** Listado de aulas físicas con cálculo de ocupación real (semana/mes), vista previa de asignaturas y enlaces directos a calendario y ficha del espacio.
* **Enlaces de Videollamada Automáticos:** Generación de enlaces seguros (Google Meet / Teams) para acceso instantáneo de docentes y estudiantes.
* **Filtros en Cartelera:** Opciones para filtrar por turno, piso u ocultar aulas virtuales mediante el switch dedicado en `/schedule/today_schedule`.
Para garantizar una experiencia de usuario rápida y sin fricción para el personal de Bedelía, el circuito de gestión áulica se divide en 3 etapas directas:
```
[ 1. Creación / Edición de Aula ] ──► [ 2. Asignación de Comisión al Aula ] ──► [ 3. Cartelera y Grilla ]
- Sede Central o Campus Virtual - Desde Comisiones (1 clic) - Detección de colisiones
- Piso y Aforo real - O desde Ficha de Aula - Drag & Drop semanal
- Tipo (Teórica / Laboratorio) - Autocompletado de cupo y Meet - Cartelera del día en vivo
```
### 1. Creación y Mantenimiento de Aulas (`/classrooms/list_classrooms`)
* Acceso directo a **"Nueva Aula"**: se selecciona la sede (Edificio Central o Campus Virtual), piso (`PB`, `1`, `2`, `3`, `4`) y tipo de espacio (Teórica, Laboratorio de Informática, etc.).
* Las aulas virtuales se configuran con capacidad infinita ($\infty$) y no distorsionan la capacidad de bancos físicos del edificio central.
* En el catálogo de aulas, cada tarjeta muestra el aforo, piso, equipamiento y el botón de acción rápida **"Asignar Comisión"**, que abre el formulario de reserva con el aula ya preseleccionada.
### 2. Asignación de Comisión al Aula (`/schedule/add_reservation`)
La asignación puede realizarse desde dos puntos de entrada según la necesidad operativa:
* **Desde el Catálogo de Comisiones (`/admin/commissions_list`):**
- Cada fila cuenta con el botón de acceso rápido **"Asignar Aula / Horario"** (`bi-calendar-plus`).
- Al hacer clic, redirige a `/schedule/add_reservation?commission_id={id}` precargando de forma automática:
- Nombre de la asignatura y código de comisión.
- Cupo esperado de alumnos (`expected_attendees = max_students`).
- Enlace de videollamada preexistente (Google Meet / Teams).
* **Desde el Catálogo de Aulas (`/classrooms/list_classrooms`):**
- Al pulsar **"Asignar Comisión"**, redirige a `/schedule/add_reservation?classroom_id={id}`.
- El selector en cascada (**1. Edificio ➔ 2. Piso ➔ 3. Aula**) se auto-posiciona en la sede, planta y aula elegidas.
* **Validación en Vivo:** El sistema alerta inmediatamente si la cantidad de alumnos de la comisión excede la capacidad física del aula seleccionada.
### 3. Visualización y Control de Ocupación
* **Cartelera del Día (`/schedule/today_schedule`):** Bloques horarios de 07:00 a 21:00 hs con filtros por piso, turno y switch para ocultar aulas virtuales.
* **Grilla Semanal Interactiva (`/schedule/calendar`):** Arrastre de comisiones sin aula asignada desde el panel lateral con detección de colisiones físicas, solapamientos docentes y aforo en tiempo real (HTTP 409).
---
## 🧹 Módulo de Purga y Sincronización Académica
* **Purga Segura y Selectiva (`/admin/google_sheets_import`):**
- Permite restablecer limpiamente reservas, comisiones, asignaturas, carreras y/o aulas para comenzar nuevos ciclos lectivos o pruebas de carga.
- **Confirmación Interactiva:** Cuenta con un modal de confirmación (`#purgeConfirmModal`) que lista las entidades específicas a eliminar y previene clics accidentales.
- **Integridad Referencial Estricta:** Ejecuta la eliminación en orden topológico inverso de claves foráneas (`Reservation` ➔ `MilestoneGrade` ➔ `CommissionTeacher` ➔ `StudentEnrollment` ➔ `Commission` ➔ `Subject` ➔ `Career` ➔ `Classroom`), garantizando que la base de datos no rechace el borrado por restricciones relacionales.
- **Preservación Total de Identidades:** Los usuarios (`User`), contraseñas y roles (`Role`) están estrictamente blindados y nunca son afectados por la purga de datos académicos.
* **Importación desde Google Sheets:** Carga y sincronización dinámica de todas las materias y franjas horarias directamente desde la hoja institucional publicada.
---
@@ -190,6 +225,9 @@ sudo bash install.sh
# Despliegue desatendido manteniendo la base de datos existente:
sudo bash install.sh --keep-db
# Despliegue desatendido preservando la base de datos y los usuarios/credenciales configurados:
sudo bash install.sh --keep-db --keep-users
# Despliegue desatendido recreando la base de datos desde cero (DROP y restore snapshot):
sudo bash install.sh --fresh-db
```