Patrón 4: Offline‐First con sincronización - JuanHerreraP/Proyecto-MISO-Solventa-Grupo-11 GitHub Wiki

Problema

El usuario puede necesitar consultar su póliza o guardar una evidencia cuando no tiene conexión. Si Android dependiera siempre del backend, estas funciones quedarían bloqueadas.

Solución

Se utiliza el patrón Offline-First. La aplicación consulta primero el almacenamiento local y sincroniza la información con Solventa cuando existe conexión.

Aplicación en Solventa

La app guarda localmente:

  • Pólizas necesarias para la billetera.
  • Fecha de la última actualización.
  • Borradores de evidencias.
  • Operaciones pendientes de sincronización.

Razonamiento

Este patrón permite utilizar funciones importantes de Android en lugares con conexión inestable. También evita que el usuario pierda información mientras reporta un siniestro.

Relación con los ASR

  • EC11 – Disponibilidad: permite continuar con funciones limitadas cuando no existe conexión.
  • EC08 – Seguridad: protege el acceso a información almacenada localmente.
  • EC10 – Integridad: mantiene trazabilidad sobre evidencias y operaciones pendientes.

También soporta HU27, HU31 y especialmente HU32.

Ventajas

  • Consulta de pólizas sin conexión.
  • No se pierden borradores.
  • Mejor experiencia con redes inestables.
  • Sincronización automática.

Limitaciones

  • La información local puede estar desactualizada.
  • Deben resolverse posibles conflictos.
  • Es necesario proteger los datos del dispositivo.
  • No todas las operaciones pueden ejecutarse offline.

Diagrama

flowchart TB
    UI["Interfaz Android"]
    Repository["Repositorio"]
    LocalDB[("Almacenamiento local cifrado")]
    Pending["Operaciones pendientes"]
    Sync["Sincronizador"]
    Gateway["API Gateway"]
    BFF["BFF Móvil"]

    UI --> Repository
    Repository -->|Consulta inmediata| LocalDB
    Repository -->|Guarda borrador| Pending

    LocalDB --> UI
    Pending --> Sync

    Sync -.->|Al recuperar conexión| Gateway
    Gateway --> BFF
    BFF -->|Datos actualizados| Sync
    Sync --> LocalDB