Files
admin-edu-space/README.md
T

199 lines
9.5 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)**, desarrollada con **Python / Flask**, **SQLAlchemy**, **PostgreSQL** y **Bootstrap 5**.
---
## 🏛️ 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$)**.
---
## ✨ Características Principales
### 🛡️ 1. Control de Accesos RBAC Granular (Matriz estilo FortiGate)
* **Gestión por Módulos:** Permisos independientes por cada área del sistema:
1. **Aulas y Espacios:** Creación, edición, capacidad y estado de aulas físicas y virtuales.
2. **Edificios y Sedes:** Administración de sedes, pisos y arquitectura edilicia.
3. **Reservas de Aulas:** Solicitud, aprobación, confirmación y cancelación.
4. **Cartelera y Cronograma:** Calendario interactivo, visualización diaria y comisiones.
5. **Gestión Académica:** Carreras, asignaturas, códigos y comisiones.
6. **Sincronización Sheets:** Importador y sincronizador de Google Sheets.
7. **Optimizador IA:** Algoritmo genético de distribución y resolución de conflictos.
8. **Usuarios y Accesos RBAC:** Cuentas, roles y matriz de permisos.
* **Niveles de Permiso Granulares:** `Ninguno`, `Solo Lectura` o `Lectura y Escritura`.
* **Controles Rápidos:** Botón *"Establecer Todos"* para configuración masiva inmediata.
* **Roles Predefinidos:** `Admin` (control total), `Docente`, `Operador` y `Consulta`.
### 📊 2. Sincronización e Importación desde Google Sheets
* Integración directa con la cartelera académica de UniCABA en Google Sheets.
* Extracción e importación normalizada de los 5 campos clave:
* **Código Académico:** Códigos reales de asignatura (ej. `INGA0003`, `ASIG00165`).
* **Asignatura:** Nombre oficial de la materia.
* **Aula:** Mapeo a aulas físicas (PB a 4.° piso) o aula `VIRTUAL` ($\infty$).
* **Carrera:** Normalización y vinculación relacional con entidades de carrera.
* **Horarios y Turnos:** Detección automática de franjas horarias y delimitadores de bloque (`Turno Mañana` y `Turno Tarde / Vespertino`).
### 📅 3. Calendario Interactivo de Reservas (FullCalendar)
* **Visualización Semanal, Mensual y Diaria:** Grilla ágil de alta legibilidad con jerarquía visual:
* Asignatura destacada en tipografía grande y negrita.
* Badges con código de materia, aula asignada, turno y franja horaria.
* **Filtros Dinámicos Combinables:**
* Filtrar por **Aula**.
* Filtrar por **Materia / Asignatura**.
* Filtrar por **Carrera**.
* Filtrar por **Turno** (`Turno Mañana` / `Turno Tarde`).
* Filtrar por **Piso / Planta** (`Planta Baja`, `Piso 1`, `Piso 2`, `Piso 3`, `Piso 4`).
* **Switch "Ocultar Aulas Virtuales":** Aísla la ocupación física real en el edificio central excluyendo los eventos virtuales de capacidad infinita.
* **Ficha Modal Instantánea:** Vista previa detallada al hacer clic en cualquier evento.
### 📋 4. Cartelera del Día y Listado de Reservas
* **Cartelera del Día (`/schedule/today`):**
* **Vista Cronológica (Timeline):** Bloques horarios de 07:00 a 22:00 hs con indicador de ocupación.
* **Vista en Tabla:** Lista ordenada con acciones rápidas y detalles de comisión.
* Filtros directos por piso, turno y switch para ocultar virtuales.
* **Listado Paginado de Reservas (`/schedule/list`):**
* Paginación de 20 registros por página preservando filtros aplicados.
* Búsqueda por texto, estado (`Confirmada`, `Pendiente`, `Cancelada`), rango de fechas y piso.
### 🏫 5. Gestión de Aulas con Capacidad Infinita ($\infty$)
* Soporte nativo para el símbolo **`∞`** o `0` para designar aulas virtuales o espacios sin aforo restringido.
* Botón de un solo clic `Ilimitada (∞)` en formularios de alta y edición con leyendas explicativas.
* Badges distintivos `∞ Ilimitada` en listados, tarjetas y fichas técnicas.
### 🤖 6. Optimizador Inteligente de Aulas (Algoritmo Genético)
* Motor de optimización heurística para asignación automática de aulas a comisiones.
* Pondera capacidad requerida vs. capacidad de aula, equipamiento tecnológico y minimización de desplazamientos entre pisos.
### 🎨 7. Experiencia de Usuario, Temas y Localización
* **Tema Oscuro / Claro:** Alternador con botón flotante y persistencia en `localStorage` y perfil de usuario.
* **Soporte Multilingüe:** Internacionalización integral (Español e Inglés) compilada con GNU gettext (`pybabel`).
* **Tarjetas Estadísticas Interactivas:** Accesos directos rápidos desde el panel general hacia las distintas secciones operativas.
---
## 🛠️ Stack Tecnológico
| Componente | Tecnología |
| :--- | :--- |
| **Backend** | Python 3.12+ / Flask |
| **Base de Datos** | PostgreSQL 16+ / SQLAlchemy ORM |
| **Seguridad & Sesiones** | Flask-Login / Werkzeug / CSRF Protect |
| **Formularios** | Flask-WTF / WTForms |
| **Internacionalización** | Flask-Babel / GNU gettext |
| **Frontend** | Bootstrap 5.3, Bootstrap Icons, Vanilla JS, CSS Variables |
| **Calendario** | FullCalendar 5.11 |
---
## 🚀 Instalación y Puesta en Marcha
### Prerrequisitos
1. **Python 3.10 o superior**
2. **PostgreSQL** en ejecución con una base de datos creada (ej. `classrooms_db`).
3. **Git**
### Pasos de Configuración
1. **Clonar el repositorio:**
```bash
git clone https://gitea.oemspot.com.ar/carlostellocba/admin-edu-space.git
cd admin-edu-space
```
2. **Crear y activar el entorno virtual:**
* En Windows (PowerShell):
```powershell
python -m venv venv
.\venv\Scripts\Activate.ps1
```
* En Linux / macOS:
```bash
python3 -m venv venv
source venv/bin/activate
```
3. **Instalar dependencias:**
```bash
pip install -r requirements.txt
```
4. **Configurar variables de entorno (`.env`):**
Crear o editar el archivo `.env` en la raíz del proyecto:
```env
SECRET_KEY=clave-secreta-de-produccion-cambiar-en-despliegue
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/classrooms_db
FLASK_ENV=development
FLASK_DEBUG=1
```
5. **Inicializar la Base de Datos:**
Ejecutar el script de inicialización para crear tablas, roles institucionales, permisos RBAC, sedes y el usuario administrador:
```bash
python init_db.py
```
6. **Compilar catálogos de traducción (opcional si se modifican textos):**
```bash
pybabel compile -d translations
```
7. **Iniciar el servidor de desarrollo:**
```bash
python app.py
```
La aplicación estará disponible en: **`http://localhost:5000`**
---
## 🔑 Credenciales Predeterminadas
| Usuario | Correo Electrónico | Contraseña | Rol |
| :--- | :--- | :--- | :--- |
| **Administrador del Sistema** | `admin@edu-space.com` | `admin123` | `Admin` (Acceso Total) |
---
## 📁 Estructura del Proyecto
```text
admin-edu-space/
├── app/
│ ├── __init__.py # Factoría de la aplicación Flask y extensiones
│ ├── models/ # Modelos de base de datos SQLAlchemy
│ │ ├── user.py # Modelo de usuario
│ │ ├── role.py # Roles y matriz de permisos RBAC
│ │ ├── classroom.py # Aulas y capacidades físicas / virtuales
│ │ ├── building.py # Edificios y sedes institucionales
│ │ ├── career.py # Carreras universitarias
│ │ ├── subject.py # Asignaturas y comisiones
│ │ └── reservation.py # Reservas horarias y turnos
│ ├── routes/ # Controladores y rutas (Blueprints)
│ │ ├── auth.py # Autenticación, login y perfil
│ │ ├── main.py # Dashboard y métricas generales
│ │ ├── admin.py # Gestión de usuarios, roles e importación
│ │ ├── classrooms.py # ABM de aulas y equipamiento
│ │ ├── buildings.py # Gestión de sedes y edificios
│ │ ├── schedule.py # Calendario, cartelera del día y reservas
│ │ └── genetic_algorithm.py # Optimizador genético de aulas
│ ├── services/ # Servicios de negocio
│ │ └── sheets_importer.py # Parser y sincronizador de Google Sheets
│ ├── forms/ # Formularios Flask-WTF
│ ├── templates/ # Plantillas Jinja2 (Bootstrap 5)
│ ├── static/ # Archivos CSS, JS e imágenes
│ └── utils/ # Decoradores de autorización y utilidades
├── config/ # Ajustes de configuración
├── translations/ # Catálogos de traducción (es / en)
├── init_db.py # Script DDL y semillero inicial
├── CHANGELOG_SESSION.md # Registro cronológico detallado de cambios
├── requirements.txt # Dependencias del proyecto
├── .env.example # Plantilla de variables de entorno
└── app.py # Punto de entrada de la aplicación
```
---
## 📄 Licencia
Este proyecto forma parte del sistema de gestión institucional y educativa de **UniCABA**. Todos los derechos reservados.