Visión general
Integraciones
1. SIGMA
- URL base:
https://sigma.upla.edu.pe/api - Autenticación: JWT. La aplicación envía las credenciales al endpoint
Acceso/Login, recibe un token y lo conserva enSharedPreferences. Cada solicitud posterior incluye la cabeceraAuthorization: Bearer <token>.
Endpoints utilizados (representativos):
Estudiante/perfilEstudiante/horarioEstudiante/notasEstudiante/cuotasEstudiante/PublicacionesAcceso/cambiarPassword
Los endpoints utilizados son los mismos que invoca el portal web oficial de SIGMA.
2. Intranet UPLA
La Intranet (intranet.upla.edu.pe) expone información complementaria no disponible en SIGMA, mediante cookies de sesión PHP:
consultarPensionesyconsultartotalPensionesobtenerCronogramarepRankingPromocionalEstrepMallaCurricularEstverhorariomatriz-matriculadosEstudiante
Nexo autentica con las mismas credenciales de SIGMA y conserva la cookie PHPSESSID localmente hasta su caducidad.
3. Microsoft Graph Education (opcional)
- Autenticación: OAuth2 Device Code Flow contra
https://login.microsoftonline.com/organizations/oauth2/v2.0/. - API: Microsoft Graph Education.
- Permisos delegados:
EduRoster.ReadBasic,EduAssignments.ReadBasic,User.Read,openid,profile,offline_access.
Los tokens se almacenan localmente y se renuevan automáticamente.
Sin activación explícita, Nexo no realiza ninguna solicitud a servicios de Microsoft.
Patrón Resolver
Determinados datos están disponibles en SIGMA y en la Intranet UPLA. Nexo implementa un patrón Resolver: para cada dato se declara una cadena de fuentes y se selecciona la primera que responda con información válida. Si una fuente presenta indisponibilidad temporal, la aplicación continúa funcionando con la alternativa.
Gestión de estado
La aplicación mantiene el estado en una instancia de
AppStore (basada en ChangeNotifier de
Flutter, con un contenedor AsyncValue<T> para
representar los estados idle, loading,
data y error).
Las pantallas observan al store mediante ListenableBuilder y se redibujan automáticamente cuando los datos cambian.
Persistencia local
| Dato | Ubicación | Eliminación |
|---|---|---|
| Token SIGMA | SharedPreferences | Logout o desinstalación |
| Cookie Intranet | SharedPreferences | Logout o desinstalación |
| Tokens Microsoft | SharedPreferences (JSON) | Revocación o desinstalación |
| Credenciales (con "Recordar") | SharedPreferences (Base64) | Desactivación o desinstalación |
| Perfil, horario, cuotas (caché) | SharedPreferences (JSON con TTL) | Logout o desinstalación |
| Histórico de pagos | SQLite local | Logout o desinstalación |
| Snapshot de calificaciones | SharedPreferences | Logout o desinstalación |
| Preferencias (tema, idioma) | SharedPreferences | Desinstalación |
| Modelo Lumen (290-530 MB) | getApplicationSupportDirectory() | Configuración → "Borrar modelo" |
| Historial de chat de Lumen | Memoria volátil | Cierre de la aplicación |
Toda la información persistida reside en el sandbox privado de la aplicación. En Android moderno no es accesible a otras aplicaciones sin acceso root.
Seguridad del transporte
Nexo incluye el almacén de autoridades certificadoras de Mozilla
en assets/certs/cacert.pem. Este recurso aborda un
problema observado en producción: determinados dispositivos
Android (modelos Xiaomi con MIUI antiguo, algunos Samsung)
presentan un almacén raíz desactualizado o reciben certificados
intermedios incompletos por parte de SIGMA, lo que provoca el
error CERTIFICATE_VERIFY_FAILED.
El almacén se carga en un SecurityContext y se
utiliza en todos los clientes HTTP de la aplicación.
Notificaciones
Nexo utiliza flutter_local_notifications para programar avisos locales:
- Recordatorios de clases (quince minutos antes del inicio).
- Avisos de vencimiento de cuotas (un día antes de la fecha límite).
- Detección de calificaciones nuevas al actualizar el registro.
La aplicación no utiliza servicios de notificaciones push. Esta decisión es coherente con el principio de no operar infraestructura propia.
Comparativa con el portal web oficial
| Aspecto | Portal web UPLA | Nexo |
|---|---|---|
| Autenticación | Independiente por sistema | Unificada con credenciales SIGMA |
| Modo sin conexión | No disponible | Disponible (datos en caché) |
| Notificaciones | No disponibles | Disponibles (locales) |
| Diseño móvil | Parcial | Optimizado |
| Asistente integrado | No disponible | Opcional, ejecución local |
| Coste | Gratuito | Gratuito |
| Publicidad | No | No |
| Telemetría | Probable | No |
Mantenimiento ante cambios en APIs
Las APIs institucionales pueden modificarse sin previo aviso. Un cambio en el formato de respuesta puede causar que la sección correspondiente de Nexo presente errores. La resolución requiere la publicación de una versión actualizada de la aplicación.