v1.2.3: Fix SIU SSL, matching de comisiones/equipos, credencial QR ampliada y actualizacion de beneficios
This commit is contained in:
@@ -1,136 +1,194 @@
|
||||
# Aulas UNICABA
|
||||
# Aulas UNICABA 🎓📱
|
||||
|
||||
Un visor híbrido especializado y offline-first desarrollado para la visualización de la cartelera oficial de aulas, seguimiento automatizado de materias cursadas y generación de la Credencial Digital Universitaria para estudiantes de la Universidad de la Ciudad (UNICABA).
|
||||
[](package.json)
|
||||
[](https://angular.io/)
|
||||
[](https://ionicframework.com/)
|
||||
[](https://capacitorjs.com/)
|
||||
[](LICENSE)
|
||||
|
||||
Un ecosistema móvil híbrido, especializado y **offline-first** desarrollado para la comunidad académica de la **Universidad de la Ciudad (UNICABA)**. Centraliza la cartelera oficial de horarios y aulas, el seguimiento de la carrera académica, la agenda de exámenes, la integración con SIU Guaraní y Campus Virtual Moodle, la Credencial Digital QR y el acceso a beneficios estudiantiles.
|
||||
|
||||
---
|
||||
|
||||
## ✨ Características
|
||||
## ✨ Características Principales (v1.2.3)
|
||||
|
||||
### 📋 Cartelera de Horarios
|
||||
- Visualización completa de la cartelera oficial de aulas organizada por día de la semana (Lunes a Sábado).
|
||||
- **Modo offline-first**: la cartelera se cachea localmente al primer acceso y se muestra instantáneamente aunque no haya conexión.
|
||||
- **Sincronización automática** en background (Background Fetch) delegada al sistema operativo.
|
||||
- **Búsqueda fuzzy** tolerante a errores tipográficos: busca por nombre de materia, código, aula o carrera.
|
||||
- **Filtro por vista**: alternás entre "Favoritos" y "Cartelera completa" con un segmento.
|
||||
- Acceso directo a clases virtuales (Zoom / Meet) desde el botón de cada materia.
|
||||
- Función de compartir el horario de una materia por WhatsApp, Telegram, y cualquier app nativa.
|
||||
|
||||
### ⭐ Favoritos Inteligentes
|
||||
- Marcá hasta 5 materias como favoritas para tenerlas a mano en su propia pestaña.
|
||||
- Los favoritos se guardan automáticamente en un archivo `aulas_unicaba_datos.csv` en la carpeta "Documentos" del dispositivo, **sobreviviendo a desinstalaciones y actualizaciones** gracias a las políticas de almacenamiento de Android 11+.
|
||||
- **Alertas locales automáticas**: si una materia favorita cambia de aula o link de clase virtual, la app lo detecta en el próximo sincronismo y dispara una notificación push inmediata.
|
||||
- Restauración manual de favoritos desde un respaldo CSV (Google Drive, iCloud, Descargas).
|
||||
|
||||
### 🎓 Banner "Próxima Clase" *(Nuevo en v1.1.6)*
|
||||
- Al entrar a la pestaña **Favoritos**, aparece automáticamente un banner destacado con la materia favorita cuya clase es la más cercana en el tiempo (hoy o mañana).
|
||||
- **Chip de countdown** en tiempo real que se actualiza cada minuto:
|
||||
- 🔵 Azul → más de 2 horas
|
||||
- 🟡 Amarillo → entre 30 minutos y 2 horas
|
||||
- 🔴 Rojo + animación de pulso → menos de 30 minutos
|
||||
- Muestra nombre de la materia, número de aula y día + hora de inicio.
|
||||
|
||||
### 🔔 Recordatorio Pre-Clase *(Nuevo en v1.1.6)*
|
||||
- Cada vez que la app sincroniza la cartelera, programa automáticamente una notificación local **30 minutos antes** del inicio de cada materia favorita del día.
|
||||
- Usa IDs de notificación estables para evitar duplicados al sincronizar múltiples veces.
|
||||
- Funciona completamente **offline** — no requiere servidor externo.
|
||||
|
||||
### 📅 Agenda de Hitos y Exámenes *(Nuevo en v1.1.8)*
|
||||
- Añade exámenes (Parciales, Finales) y Trabajos Prácticos directamente desde el menú de una materia.
|
||||
- Los hitos muestran insignias de tiempo (rojo cuando falta poco, secundario el resto del tiempo) en la tarjeta de la materia en Cartelera.
|
||||
- La selección de fecha se hace mediante un popover ligero e intuitivo.
|
||||
|
||||
### 📍 Integración Nativa con Mapas *(Mejora v1.1.9)*
|
||||
- El pie de página renovado con un rediseño UI tipo "botón flotante".
|
||||
- Utiliza esquemas nativos (`geo:0,0?q=` en Android y `maps://` en iOS) que dejan al usuario **elegir la app de navegación preferida** (Waze, Google Maps, Apple Maps) al tocar la sede.
|
||||
|
||||
### 🪪 Credencial Digital Universitaria
|
||||
- Inicio de sesión directo al Campus Virtual (Moodle) con DNI y clave.
|
||||
- **Sin intermediarios**: las credenciales nunca pasan por ningún servidor tercero. El flujo HTTP se delega al motor nativo del SO mediante `CapacitorHttp`, evitando bloqueos CORS.
|
||||
- Descarga y renderiza el PDF de la credencial (código QR) como imagen nativa usando `pdfjs-dist`.
|
||||
- La imagen queda **cacheada localmente** para usarla offline sin volver a loguearse.
|
||||
- El brillo de la pantalla aumenta automáticamente al mostrar el QR para facilitar su lectura.
|
||||
- Login completamente **opcional** — la cartelera funciona sin necesidad de cuenta.
|
||||
|
||||
### 🛡️ Privacidad y Seguridad
|
||||
- No se recopilan nombres, contraseñas ni correos.
|
||||
- No hay publicidad, telemetría ni analytics de terceros.
|
||||
- Todo el procesamiento ocurre en la memoria del teléfono.
|
||||
### 📋 Cartelera de Horarios y Aulas
|
||||
- **Visualización organizada**: consulta de la cartelera oficial de horarios por día de la semana (Lunes a Sábado).
|
||||
- **Modo offline-first**: la cartelera se almacena en caché local y se encuentra disponible instantáneamente sin requerir conexión a internet.
|
||||
- **Búsqueda fuzzy en tiempo real**: motor de búsqueda tolerante a errores ortográficos por nombre de materia, código oficial, número de aula o carrera.
|
||||
- **Segmentos de visualización**: alternancia rápida entre *Favoritos*, *Cartelera completa* y *Mi Carrera*.
|
||||
- **Acceso directo a Aulas Virtuales**: botón integrado para ingresar a clases remotas en Zoom o Google Meet.
|
||||
- **Compartir horario**: exportación nativa de los datos de cursada a WhatsApp, Telegram y otras aplicaciones del sistema (`@capacitor/share`).
|
||||
- **Sincronización en background**: actualización periódica y desatendida delegada al sistema operativo mediante Background Fetch.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Información Técnica y Frameworks
|
||||
### ⭐ Favoritos Inteligentes & Respaldo Resiliente
|
||||
- **Diferenciación precisa de Equipos/Comisiones (Nuevo en v1.2.3)**: al sincronizar con SIU Guaraní o seleccionar manualmente, el sistema identifica y marca **únicamente el equipo o comisión asignado** (ej: `Equipo 1` vs `Equipo 2`), evitando duplicados cuando las materias comparten el mismo código `ASIG`.
|
||||
- **Persistencia anti-wipes**: los favoritos y datos se respaldan automáticamente en un archivo `aulas_unicaba_datos.csv` ubicado en la carpeta pública "Documentos" del dispositivo, **sobreviviendo a desinstalaciones y actualizaciones** según las políticas *Storage Scoped* de Android 11+.
|
||||
- **Alertas automáticas de cambio de aula**: detección en segundo plano de modificaciones en aulas o links virtuales con emisión de notificaciones push locales inmediatas.
|
||||
- **Gestor de respaldo y restauración**: exportación manual y restauración desde archivos CSV almacenados en el dispositivo o la nube (Google Drive, iCloud, Descargas).
|
||||
|
||||
| Componente | Tecnología |
|
||||
---
|
||||
|
||||
### 🎓 Banner "Próxima Clase" con Cuenta Regresiva
|
||||
- **Detección inteligente**: identifica automáticamente la materia favorita con cursada más próxima en el tiempo (hoy o mañana) filtrada por tu equipo específico.
|
||||
- **Chip dinámico de cuenta regresiva** actualizado minuto a minuto:
|
||||
- 🔵 **Azul**: más de 2 horas para el inicio.
|
||||
- 🟡 **Amarillo**: entre 30 minutos y 2 horas.
|
||||
- 🔴 **Rojo con animación de pulso**: menos de 30 minutos.
|
||||
- Acceso directo al detalle y agenda de la materia al tocar el banner.
|
||||
|
||||
---
|
||||
|
||||
### 🔔 Recordatorios Pre-Clase Automáticos
|
||||
- **Notificaciones locales 30 min antes**: cada sincronización de cartelera programa alertas 30 minutos antes del inicio de cada materia favorita del día.
|
||||
- **Identificadores estables**: previene notificaciones duplicadas en sincronizaciones sucesivas.
|
||||
- **Operatividad 100% offline**: funciona localmente en el dispositivo sin depender de servidores de notificaciones externos.
|
||||
|
||||
---
|
||||
|
||||
### 📅 Agenda de Hitos, Exámenes y Google Calendar
|
||||
- **Registro de fechas clave**: gestión de Parciales (1 y 2), Trabajos Prácticos (TP 1, 2 y 3), Recuperatorios y Finales directamente desde la tarjeta de cada materia.
|
||||
- **Insignias de proximidad**: badges visuales en la cartelera con código de color según la cercanía del examen o entrega.
|
||||
- **Integración con Google Calendar**: sincronización nativa directa del hito con la app de calendario del dispositivo mediante un solo toque (`@ebarooni/capacitor-calendar`).
|
||||
|
||||
---
|
||||
|
||||
### 🗺️ Mi Carrera (Plan de Estudios y Recorrido Interactivo)
|
||||
- **Grilla cuatrimestral interactiva**: seguimiento visual del progreso de la carrera para:
|
||||
- *Licenciatura en Tecnologías Digitales*
|
||||
- *Licenciatura en Ciencia de Datos*
|
||||
- *Licenciatura en Desarrollo de Videojuegos*
|
||||
- **Estados de materias**: marcación rápida de materias como **Aprobadas** (fucsia) o **En Curso** (celeste).
|
||||
- **Materias optativas**: selección dinámica de asignaturas optativas para completar el trayecto académico.
|
||||
- **Sincronización con SIU Guaraní**: visualización de notas oficiales y estados de cursada reflejados directamente sobre las celdas del plan de estudios.
|
||||
|
||||
---
|
||||
|
||||
### 🏫 Integración con SIU Guaraní
|
||||
- **Autenticación directa y segura**: conexión HTTPS oficial (`https://autogestion.udelaciudad.edu.ar/caba`) con certificados SSL válidos emitidos por Sectigo CA, eliminando errores de validación de cadena.
|
||||
- **Extracción de Cursadas Activas**: lectura directa de las inscripciones del período lectivo y asignaciones estructuradas (comisión, día, horario y aula).
|
||||
- **Sincronización de historia académica**: importación automática de materias aprobadas, cursadas regulares y calificaciones oficiales.
|
||||
- **Certificado de Alumno Regular**: solicitud y descarga automatizada del certificado oficial en formato PDF con apertura nativa en el dispositivo (`@capacitor-community/file-opener`).
|
||||
|
||||
---
|
||||
|
||||
### 🪪 Credencial Digital Universitaria & Perfil Moodle
|
||||
- **Perfil unificado**: inicio de sesión con el Campus Virtual Moodle para extraer automáticamente el nombre del estudiante y la fotografía oficial de perfil institucional.
|
||||
- **Código QR 30% más grande y nítido (Nuevo en v1.2.3)**: diseño optimizado para ocupar todo el ancho disponible del celular, con renderizado PDF a escala 3.0 en alta definición para un escaneo instantáneo en molinetes de acceso.
|
||||
- **Caché permanente**: credencial disponible en todo momento sin requerir conexión a internet.
|
||||
- **Brillo automático**: ajuste temporal de la pantalla al 100% de brillo al abrir la credencial para facilitar la lectura del código QR (`@capacitor-community/screen-brightness`).
|
||||
|
||||
---
|
||||
|
||||
### 🎁 Comunidad de Beneficios UdelaCiudad
|
||||
- **Descuentos exclusivos en comercios y servicios**:
|
||||
- 🏋️♂️ **ON FIT**: 25% de descuento en membresía mensual con acceso a las 20 sedes en todo el AMBA (máquinas Technogym, plan personalizado, clases grupales y lockers).
|
||||
- ☕ **BERESHIT (Cafetería)**: 10% de descuento en productos (Tte. Gral. Perón 893, CABA).
|
||||
- 🍫 **Café & Chocolate**: 10% de descuento en cafetería y delicatessen (Bartolomé Mitre 807, CABA).
|
||||
- 🍝 **Al Buen Tallarín de Pablo**: 10% de descuento en fábrica de pastas artesanales (Tucumán 1596, CABA).
|
||||
- 📚 **Atlas Comercial (Librería)**: 10% de descuento en productos de librería y papelería (Bartolomé Mitre 839, CABA).
|
||||
- 🧘 **Fluire Studio (Pilates)**: 10% de descuento abonando 1 mes y 20% abonando 4 meses (Esmeralda 135, piso 4 B, CABA).
|
||||
- 🚌 **SOY Estudiante (Transporte)**: instructivo para obtener descuentos en pasajes de micros de larga distancia con tu Certificado de Alumno Regular.
|
||||
|
||||
---
|
||||
|
||||
### 📖 Manual de Usuario y Centro de Ayuda
|
||||
- **Guía interactiva integrada**: sección accesible desde el encabezado con instrucciones paso a paso para el uso de la cartelera, seguimiento de carrera, agenda y respaldos.
|
||||
|
||||
---
|
||||
|
||||
### 📍 Integración Nativa con Mapas
|
||||
- **Acceso a sede**: botón flotante interactivo en el pie de página con la dirección de la sede institucional (Tte. Gral. J.D. Perón 802, CABA).
|
||||
- **Compatibilidad multiplataforma**: apertura mediante esquemas nativos (`geo:` en Android y `maps://` en iOS) que permiten elegir entre Google Maps, Waze y Apple Maps.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Tecnologías y Arquitectura
|
||||
|
||||
| Componente | Tecnología | Versión |
|
||||
|---|---|---|
|
||||
| **Frontend Framework** | [Angular](https://angular.io/) | `20.3.x` |
|
||||
| **Componentes UI** | [Ionic Framework](https://ionicframework.com/) | `v8.0.x` |
|
||||
| **Runtime Nativo** | [Capacitor](https://capacitorjs.com/) | `v8.2.0` |
|
||||
| **Procesamiento PDF** | [PDF.js](https://mozilla.github.io/pdf.js/) | `5.5.x` |
|
||||
| **Iconografía** | [Ionicons](https://ionic.io/ionicons) | `7.0.x` |
|
||||
|
||||
### Plugins de Capacitor
|
||||
|
||||
| Plugin | Finalidad |
|
||||
|---|---|
|
||||
| Base Frontend | [Angular 20.3.x](https://angular.io/) |
|
||||
| UI Components | [Ionic Framework v8](https://ionicframework.com/) |
|
||||
| Puente Nativo | [Capacitor v8](https://capacitorjs.com/) |
|
||||
| Renderizado PDF | `pdfjs-dist` |
|
||||
|
||||
### Plugins de Capacitor utilizados
|
||||
|
||||
| Plugin | Uso |
|
||||
|---|---|
|
||||
| `@capacitor/filesystem` | Escritura y lectura del CSV de respaldo en "Documentos" |
|
||||
| `@capawesome/capacitor-file-picker` | Importación manual de CSV desde el explorador de archivos |
|
||||
| `@capacitor/local-notifications` | Avisos de cambio de aula y recordatorios pre-clase |
|
||||
| `@capacitor/preferences` | Caché rápida de horarios y credencial |
|
||||
| `@transistorsoft/capacitor-background-fetch` | Sincronización silenciosa en background |
|
||||
| `@capacitor-community/screen-brightness` | Máximo brillo al mostrar la credencial QR |
|
||||
| `@capacitor/haptics` | Feedback háptico en acciones clave |
|
||||
| `@capacitor/share` | Compartir horarios por WhatsApp, Telegram, etc. |
|
||||
| `@capacitor/network` | Detección de estado de conexión |
|
||||
| `@capacitor/clipboard` | Acceso al portapapeles del sistema |
|
||||
| `@capacitor/filesystem` | Lectura y escritura de respaldos CSV en la carpeta pública "Documentos". |
|
||||
| `@capawesome/capacitor-file-picker` | Selector de archivos para importación manual de respaldos. |
|
||||
| `@capacitor/local-notifications` | Notificaciones locales de cambios de aula y recordatorios pre-clase. |
|
||||
| `@capacitor/preferences` | Almacenamiento seguro en clave-valor para credenciales, caché y estados. |
|
||||
| `@transistorsoft/capacitor-background-fetch` | Tareas en segundo plano para sincronización automática de cartelera. |
|
||||
| `@capacitor-community/screen-brightness` | Maximización automática del brillo para escaneo del QR. |
|
||||
| `@capacitor-community/file-opener` | Apertura nativa del Certificado de Alumno Regular en PDF. |
|
||||
| `@ebarooni/capacitor-calendar` | Exportación e inserción de hitos y exámenes en el calendario nativo. |
|
||||
| `@capacitor/haptics` | Respuesta háptica en interacciones táctiles clave. |
|
||||
| `@capacitor/share` | Diálogo nativo para compartir horarios por mensajería. |
|
||||
| `@capacitor/network` | Monitorización del estado de conectividad a internet. |
|
||||
| `@capacitor/clipboard` | Utilidades de portapapeles. |
|
||||
|
||||
---
|
||||
|
||||
## 📱 Compatibilidad Multiplataforma
|
||||
## 🔒 Privacidad Zero-Trust (Cero Intermediarios)
|
||||
|
||||
Todo el código fuente (TypeScript, HTML y SCSS) y los plugins seleccionados son **100% compatibles con Android e iOS**. La arquitectura garantiza comportamiento idéntico en ambas plataformas.
|
||||
1. **Conexiones directas punto a punto**: todas las solicitudes HTTP (Google Sheets, Campus Moodle y SIU Guaraní) son emitidas directamente desde el dispositivo del usuario mediante `CapacitorHttp`, resolviendo restricciones CORS sin recurrir a servidores proxy intermedios.
|
||||
2. **Cero telemetría**: la aplicación no utiliza Google Analytics, SDKs de publicidad ni herramientas de rastreo.
|
||||
3. **Almacenamiento local seguro**: las credenciales y datos personales permanecen exclusivamente en el almacenamiento interno cifrado del teléfono del usuario.
|
||||
|
||||
### 🤖 Despliegue en Android
|
||||
---
|
||||
|
||||
**Requisito previo**: [Android Studio](https://developer.android.com/studio) instalado, Node.js y NPM.
|
||||
## 📱 Compilación y Despliegue
|
||||
|
||||
### Requisitos Previos
|
||||
- **Node.js**: v18 o superior.
|
||||
- **NPM**: v9 o superior.
|
||||
- **Android**: [Android Studio](https://developer.android.com/studio) con SDK 34+ y JDK 17+.
|
||||
- **iOS**: macOS con [Xcode 15+](https://developer.apple.com/xcode/) y CocoaPods.
|
||||
|
||||
### 🤖 Android
|
||||
|
||||
```bash
|
||||
# 1. Instalar dependencias
|
||||
npm install
|
||||
|
||||
# 2. Compilación del bundle web
|
||||
# 2. Compilar bundle web
|
||||
npm run build
|
||||
|
||||
# 3. Sincronización con puentes nativos
|
||||
# 3. Sincronizar puente de Capacitor
|
||||
npx cap sync android
|
||||
|
||||
# 4. Abrir en Android Studio para firmar APK o ejecutar por ADB
|
||||
# 4. Abrir en Android Studio para generar APK/AAB o ejecutar en dispositivo
|
||||
npx cap open android
|
||||
```
|
||||
|
||||
### 🍏 Despliegue en iOS (iPhone / iPad)
|
||||
|
||||
**Requisito previo**: macOS reciente, [Xcode](https://developer.apple.com/xcode/), Node.js y CocoaPods (`sudo gem install cocoapods`).
|
||||
### 🍏 iOS
|
||||
|
||||
```bash
|
||||
# 1-2. Instalación y compilación web
|
||||
# 1. Instalar dependencias y compilar
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
# 3. Agregar plataforma iOS (solo la primera vez)
|
||||
# 2. Agregar plataforma iOS (solo la primera vez)
|
||||
npx cap add ios
|
||||
|
||||
# 4. Sincronizar plugins y actualizar Pods
|
||||
# 3. Sincronizar plugins y actualizar Pods
|
||||
npx cap sync ios
|
||||
|
||||
# 5. Abrir en Xcode
|
||||
# 4. Abrir en Xcode
|
||||
npx cap open ios
|
||||
```
|
||||
|
||||
> **Nota para Xcode:** Habilitar permisos explícitos para **Local Notifications** y **Background Fetch** en la pestaña *Signing & Capabilities* de Xcode.
|
||||
> **Nota para iOS**: Asegurarse de habilitar las capacidades de **Background Modes** (Background Fetch) y **Local Notifications** en la pestaña *Signing & Capabilities* de Xcode.
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Privacidad y Flujo Cero Intermediarios (Zero-Trust)
|
||||
## 📄 Licencia
|
||||
|
||||
Este proyecto se encuentra bajo la licencia **MIT**. Desarrollado con fines educativos y de soporte a la comunidad estudiantil de la Universidad de la Ciudad.
|
||||
|
||||
1. **Credenciales en Moodle Bypass**: La app extrae el PDF de credencial logueándose directamente mediante `CapacitorHttp`, delegando el flujo HTTP al motor nativo del OS. Nunca triangula el DNI a través de un backend tercero.
|
||||
2. **Resiliencia Anti-Wipes**: Las agresivas políticas *Storage Scoped* de Android 11+ pueden borrar bases de datos SQLite y Preferences al desinstalar. La app mitiga esto exportando automáticamente los favoritos a `aulas_unicaba_datos.csv` en el gestor público de archivos ("Documentos").
|
||||
|
||||
|
||||
Reference in New Issue
Block a user