Skip to main content

Portal Técnico: Arquitectura de PrestaApp

Esta documentación está dirigida a desarrolladores y mantenedores técnicos de la aplicación PrestaApp V3. Detalla la arquitectura subyacente, el stack tecnológico y las decisiones de diseño fundamentales que hacen de esta aplicación una herramienta robusta, rápida y extremadamente segura.

🏗️ 1. Arquitectura y Patrones Base

La aplicación ha sido estructurada utilizando principios de Clean Architecture, asegurando que la lógica de negocio esté completamente desacoplada de la interfaz de usuario y de la infraestructura de la base de datos.

  • Modularización: El proyecto (/lib) está segmentado en capas claras: data, models, providers, router, screens, services, theme y widgets.
  • Patrón Repositorio: Se utiliza una abstracción de acceso a datos mediante interfaces (ej: IPrestamoRepository, ITransaccionRepository). Esto permite que la implementación en SQLite (prestamo_repository.dart) pueda ser fácilmente testeada, simulada (mockeada) o incluso reemplazada en el futuro por una base de datos en la nube sin afectar el resto del sistema.

🚦 2. Gestión de Estado y Enrutamiento

Para garantizar una experiencia fluida, mantenible y reactiva a los cambios de datos, se eligieron las siguientes tecnologías:

  • Manejo de Estado (Riverpod 3.x): Utilizado como gestor principal mediante flutter_riverpod. Proveedores avanzados como AsyncNotifierProvider se encargan de manejar estados asíncronos complejos, inyectar dependencias y mantener la UI sincronizada en tiempo real sin recargas innecesarias.
  • Enrutamiento (GoRouter): Permite un sistema de navegación declarativo y fuertemente tipado. Soporta deep linking, y estructura la navegación mediante StatefulShellRoute.indexedStack (preservando el estado de los tabs en la barra inferior). Además, cuenta con Guards (redirecciones) para proteger rutas basándose en el estado de autenticación (PIN) del usuario.

🔐 3. Base de Datos y Almacenamiento Seguro

El núcleo de protección de datos personales y financieros reside en un esquema de cifrado híbrido:

  • Base de Datos Encriptada (SQLCipher): Se implementó sqflite_sqlcipher para proporcionar encriptación AES de 256 bits a nivel de archivo (data at rest). Adicionalmente, cuenta con soporte FFI (sqflite_common_ffi), lo que permite correr SQLite de manera nativa en escritorios Windows y Linux para desarrollo y testing.
  • Almacenamiento de Claves (Secure Storage): La contraseña para desencriptar SQLite no está en código duro; se genera dinámicamente y se almacena en el sistema de alta seguridad del propio dispositivo operativo (Keystore en Android, Keychain en iOS) utilizando flutter_secure_storage. También se guarda aquí el hash del PIN y sus respuestas de seguridad.

⚡ 4. Procesamiento Intensivo y Rendimiento

PrestaApp mantiene siempre los fluidos 60fps en la interfaz delegando los trabajos pesados a hilos de procesamiento en segundo plano.

  • Uso de Isolates (Isolate.run): Cualquier tarea que sea computacionalmente pesada se descarga del hilo principal.
    • Hashing Criptográfico: La función de seguridad que deriva el PIN del usuario mediante PBKDF2 (100,000 iteraciones con algoritmo HMAC-SHA256 y un salt de 16-bytes en Base64Url) corre en un Isolate.
    • Generación de Reportes PDF: La creación de estados de cuenta utilizando el paquete pdf (que involucra pintar tablas dinámicas y cálculos financieros agregados) se renderiza también en un Isolate secundario antes de presentarse al usuario.

🛡️ 5. RASP (Runtime Application Self-Protection)

La aplicación tiene la capacidad de protegerse a sí misma mientras se está ejecutando:

  • Prevención de Capturas de Pantalla: Uso intensivo de flutter_windowmanager a nivel nativo en Android para evitar que capturas de pantalla, grabaciones de pantalla o aplicaciones maliciosas en segundo plano intercepten las vistas financieras sensibles de la aplicación.
  • Detección de Dispositivos Comprometidos: Utilizando flutter_jailbreak_detection, la aplicación se autoevalúa en el arranque y advierte o bloquea su uso en entornos Root o Jailbroken, donde la seguridad del sandbox del sistema operativo ha sido vulnerada.

Desarrollado y mantenido por el equipo de ingeniería de PrestaApp.