# 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 * [Estado de la Migración y Arquitectura Objetivo UniCABA](ESTADO_MIGRACION_Y_ARQUITECTURA_OBJETIVO.md) * [Roadmap MVP: Fases y Estadios del Proyecto](ROADMAP_MVP.md) * [Changelog Oficial del Proyecto](CHANGELOG.md) * [Changelog Detallado: Clases Virtuales 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)