113 lines
6.2 KiB
Markdown
113 lines
6.2 KiB
Markdown
# Panel de Administración Edu-Space (UniCABA)
|
|
|
|
Plataforma integral de gestión áulica, asignación de espacios, control de horarios y reservas académicas para la **Universidad de la Ciudad de Buenos Aires (UniCABA)**.
|
|
|
|
El proyecto se basa en una arquitectura **desacoplada (Frontend / Backend)** en formato monorepo.
|
|
|
|
---
|
|
|
|
## 🏛️ Sede Institucional y Ubicaciones
|
|
* **Sede Central UniCABA:** Tte. Gral. Juan Domingo Perón 802, Ciudad Autónoma de Buenos Aires (CABA) — Aulas de grado, auditorio principal y laboratorios distribuidos desde Planta Baja (Piso 0) hasta el 4.° Piso.
|
|
* **Campus Virtual:** Espacio áulico digital integrado (Microsoft Teams / Moodle) configurado con **capacidad ilimitada ($\infty$)**.
|
|
|
|
---
|
|
|
|
## 🏗️ Arquitectura del Proyecto (Monorepo)
|
|
|
|
El repositorio está dividido en dos aplicaciones principales que interactúan mediante una API REST y un patrón Backend-For-Frontend (BFF).
|
|
|
|
```text
|
|
/
|
|
├── backend/ # API REST Backend (Python / Flask)
|
|
│ ├── app/ # Lógica de negocio, base de datos y endpoints
|
|
│ ├── tests/ # Pruebas unitarias e integración
|
|
│ └── requirements.txt # Dependencias de Python
|
|
│
|
|
├── frontend/ # Backend-For-Frontend (Node.js / Express)
|
|
│ ├── src/ # Controladores, middleware, servicios (Axios)
|
|
│ ├── views/ # Plantillas Nunjucks (.html)
|
|
│ ├── public/ # Archivos estáticos (CSS, JS cliente)
|
|
│ └── package.json # Dependencias de Node.js
|
|
│
|
|
├── docs/ # Historial de cambios y documentación técnica
|
|
└── unicaba_prerequitos/ # Requisitos académicos y de negocio
|
|
```
|
|
|
|
### 🐍 Backend (Python + Flask)
|
|
- Funciona exclusivamente como una **REST API** que expone endpoints bajo `/api/v1/` retornando **JSON**.
|
|
- Encargado de la persistencia de datos (SQLAlchemy / PostgreSQL), lógica de negocio dura, JWT auth service, seguridad, y algoritmos de optimización (Módulo Predictivo).
|
|
- **Prohibido** retornar HTML o utilizar Jinja2/`render_template` en este entorno.
|
|
|
|
### 🟢 Frontend BFF (Node.js + Express)
|
|
- Aplicación de servicio que renderiza las vistas para el cliente mediante **Nunjucks**.
|
|
- Gestiona la sesión segura del usuario almacenando el token JWT recibido de Flask en una **Cookie HttpOnly**.
|
|
- Actúa como proxy de conexión con el Backend de Python empleando **Axios** (inyectando el Bearer token interceptado).
|
|
- Utiliza **Chart.js** y JS vanilla en el lado del cliente para visualizaciones interactivas.
|
|
|
|
---
|
|
|
|
## 🎯 Dashboards Personalizados por Rol
|
|
|
|
La plataforma cuenta con paneles adaptados a las necesidades operativas de cada perfil institucional:
|
|
|
|
* **Administrador (`/dashboard?role=admin`):** Cockpit institucional con métricas globales, auditoría de seguridad RBAC, tendencias mensuales y catálogo de gestión.
|
|
* **Bedelía (`/dashboard?role=bedelia`):** Control operativo del campus en tiempo real, conteo de aulas físicas y virtuales, cartelera del día y bandeja de aprobación de reservas pendientes.
|
|
* **Docente / Profesor (`/dashboard?role=docente`):** Sesiones del día con accesos directos a videollamadas, gestión de comisiones y formulario para solicitar aulas.
|
|
* **Alumno / Estudiante (`/dashboard?role=alumno`):** Brújula de cursada *"¿Dónde curso hoy?"* con ubicación por piso y aula o enlace virtual, junto al cronograma de exámenes y entregas de TPs.
|
|
|
|
> **Modo Vista Previa:** Los usuarios con perfil administrador o directivo pueden previsualizar cualquier perspectiva utilizando el selector de roles en la barra superior o pasando el parámetro `?role={admin|bedelia|docente|alumno}` en la URL.
|
|
|
|
---
|
|
|
|
## ☁️ Importador de Google Sheets & Campus Virtual
|
|
|
|
El sistema incluye sincronización automatizada con las planillas oficiales de cursada de UniCABA:
|
|
* **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.
|
|
* **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`.
|
|
|
|
---
|
|
|
|
## 📅 Ficha de Reserva & Gestión de Comisiones
|
|
|
|
* **Ficha de Reserva Detallada (`/schedule/view_reservation?id={id}`):** Información completa del espacio físico o virtual asignado, capacidad y asistencia prevista, comisión académica vinculada, docente a cargo, botones de acción inmediata (*Modificar Reserva*, *Confirmar Reserva*, *Cancelar Reserva*) y acceso con un clic a la sala de videollamada.
|
|
* **Gestión de Comisiones y Vinculación con Asignaturas (`/admin/commissions_list`):**
|
|
- Botón y modal interactivo **Nueva Comisión** (`#modalAddCommission`) para registrar comisiones y vincularlas directamente a su **Asignatura / Materia**, indicando cuatrimestre, año, turno, cupo y docente responsable.
|
|
- Generación automática de enlace institucional de Google Meet cuando no se especifica un enlace propio.
|
|
- Tabla operativa con visualización explícita del código de comisión, nombre de materia, código de asignatura y carrera.
|
|
|
|
---
|
|
|
|
## 🚀 Instalación y Despliegue Local
|
|
|
|
### Requisitos previos
|
|
- Node.js (v18 o superior)
|
|
- Python 3.10+
|
|
- PostgreSQL / SQLite
|
|
|
|
### 1. Iniciar el Backend (Flask)
|
|
```bash
|
|
cd backend
|
|
python -m venv venv
|
|
# Activar venv (Windows: venv\Scripts\activate, Linux/Mac: source venv/bin/activate)
|
|
pip install -r requirements.txt
|
|
flask run --port=5000
|
|
```
|
|
*(El backend quedará escuchando en http://localhost:5000)*
|
|
|
|
### 2. Iniciar el Frontend (Node/Express)
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev
|
|
# o en su defecto:
|
|
node src/app.js
|
|
```
|
|
*(El frontend quedará escuchando en http://localhost:3000)*
|
|
|
|
---
|
|
|
|
## 📚 Documentación Técnica & Changelogs
|
|
* [Changelog: Clases Virtuales, Importador y Dashboards](docs/CHANGELOG_VIRTUAL_CLASSES_AND_DASHBOARDS.md)
|
|
* [Auditoría y Sesión de Reingeniería](docs/CHANGELOG_SESSION.md)
|
|
* [Guía de Integración de Cronograma](docs/SCHEDULE_INTEGRATION_GUIDE.md) |