# Aulas UNICABA 🎓📱 [![Version](https://img.shields.io/badge/version-1.2.4-blue.svg)](package.json) [![Angular](https://img.shields.io/badge/Angular-20.3-red.svg)](https://angular.io/) [![Ionic](https://img.shields.io/badge/Ionic-v8-blue.svg)](https://ionicframework.com/) [![Capacitor](https://img.shields.io/badge/Capacitor-v8.2-119EFF.svg)](https://capacitorjs.com/) [![License](https://img.shields.io/badge/license-MIT-green.svg)](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 Principales (v1.2.3) ### 📋 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. --- ### ⭐ 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). --- ### 🎓 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 | |---|---| | `@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. | --- ## 🔒 Privacidad Zero-Trust (Cero Intermediarios) 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. --- ## 📱 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. Compilar bundle web npm run build # 3. Sincronizar puente de Capacitor npx cap sync android # 4. Abrir en Android Studio para generar APK/AAB o ejecutar en dispositivo npx cap open android ``` ### 🍏 iOS ```bash # 1. Instalar dependencias y compilar npm install npm run build # 2. Agregar plataforma iOS (solo la primera vez) npx cap add ios # 3. Sincronizar plugins y actualizar Pods npx cap sync ios # 4. Abrir en Xcode npx cap open ios ``` > **Nota para iOS**: Asegurarse de habilitar las capacidades de **Background Modes** (Background Fetch) y **Local Notifications** en la pestaña *Signing & Capabilities* de Xcode. --- ## 📄 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.