erp-transportistas-v2/docs/02-definicion-modulos/MAI-006-tracking/historias-usuario/US-MAI006-016-operar-sin-conexion.md
Adrian Flores Cortes 6ed7f9e2ec [BACKUP] Pre-restructure workspace backup 2026-01-29
- Updated docs and inventory files
- Added new architecture docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 17:35:54 -06:00

6.8 KiB

US-MAI006-016: Operar Sin Conexion

Modulo: MAI-006-tracking Version: 1.0.0 Fecha: 2026-01-27 Story Points: 8 Prioridad: ALTA


Descripcion

Como conductor de la flota transportista, Quiero poder registrar todos los eventos de mi viaje sin necesidad de conexion a internet, Para mantener la operacion continua y el registro completo de mi actividad incluso en zonas sin cobertura de red.


Actor Principal

Operador / Conductor


Precondiciones

  1. El conductor tiene un viaje asignado y activo
  2. La app movil tiene los datos del viaje descargados localmente
  3. El dispositivo tiene suficiente almacenamiento disponible (>50 MB)
  4. El conductor ha iniciado sesion mientras tenia conexion (JWT valido)

Criterios de Aceptacion

CA-1: Deteccion automatica de modo offline

Given el conductor esta usando la app en un viaje activo When la conexion a internet se pierde Then la app detecta el cambio de estado en menos de 5 segundos And muestra un indicador visual de "Modo Offline" en el header And continua funcionando sin interrumpir al usuario

CA-2: Registro de eventos sin conexion

Given el conductor esta en modo offline When registra un evento de viaje (arribo, salida, carga, descarga) Then el evento se guarda localmente con un UUID unico And se captura automaticamente el timestamp del dispositivo And se captura la posicion GPS actual (si disponible) And el evento aparece en la lista de "pendientes de sincronizar" And se muestra confirmacion visual "Evento guardado localmente"

CA-3: Captura de checklist pre-viaje offline

Given el conductor debe completar el checklist de salida And no tiene conexion a internet When responde cada pregunta del checklist Then cada respuesta se almacena localmente And puede agregar fotos de evidencia que se guardan en el dispositivo And al completar el checklist se desbloquea el boton "Iniciar Viaje"

CA-4: Visualizacion de informacion del viaje offline

Given el conductor esta sin conexion When consulta los detalles de su viaje asignado Then puede ver toda la informacion descargada previamente:

  • Numero de viaje y estado
  • Origen y destino con direcciones
  • Lista de paradas con secuencia
  • Instrucciones especiales
  • Datos de contacto
  • Documentos adjuntos (si fueron descargados)

CA-5: Limite de almacenamiento local

Given el conductor ha registrado multiples eventos offline When el almacenamiento local alcanza el 80% del limite Then la app muestra una alerta "Almacenamiento casi lleno" And sugiere sincronizar cuando tenga conexion And muestra cuantos eventos estan pendientes

CA-6: Persistencia ante cierre de app

Given el conductor ha registrado eventos sin conexion When cierra la app completamente (kill app) And la vuelve a abrir Then todos los eventos pendientes siguen almacenados And el contador de pendientes se mantiene correcto And los datos del viaje siguen disponibles

CA-7: Tiempo maximo de operacion offline

Given el conductor ha operado offline por mas de 7 dias When intenta registrar un nuevo evento Then la app muestra alerta "Sesion expirada, necesita reconectar" And permite ver eventos pendientes pero no agregar nuevos And solicita conectarse para re-autenticar


Flujo Principal

  1. Conductor inicia la app con viaje activo
  2. Sistema detecta estado de conexion
  3. Si offline: muestra indicador y continua
  4. Conductor navega a pantalla de eventos
  5. Conductor selecciona tipo de evento
  6. Sistema captura datos automaticos (GPS, timestamp)
  7. Conductor confirma el evento
  8. Sistema guarda localmente y actualiza contador
  9. Sistema intenta sync en background si hay conexion

Flujo Alternativo: Perdida de Conexion Durante Uso

  1. Conductor esta registrando evento con conexion
  2. Conexion se pierde durante el proceso
  3. Sistema detecta perdida de conexion
  4. Sistema guarda evento localmente
  5. Sistema muestra "Guardado offline, se sincronizara automaticamente"
  6. Contador de pendientes se incrementa

Notas Tecnicas

Tecnologias Involucradas

Componente Tecnologia Proposito
Storage WatermelonDB Base de datos offline-first
Blobs IndexedDB Fotos y archivos
Network NetInfo API Deteccion de conectividad
Auth JWT Token con expiracion 7 dias

Consideraciones de Implementacion

  1. Generacion de IDs: Usar UUID v4 para garantizar unicidad
  2. Timestamps: Usar hora del dispositivo, registrar timezone
  3. GPS: Si no hay GPS, permitir evento pero marcar como "sin ubicacion"
  4. Validaciones: Ejecutar localmente las mismas reglas que el servidor
  5. Cifrado: Datos locales deben estar cifrados en reposo

Estructura de Evento Local

interface EventoLocal {
  id: string;              // UUID generado localmente
  tipo: TipoEvento;        // ARRIBO, SALIDA, CARGA, DESCARGA, etc.
  timestamp: Date;         // Momento de captura
  timezone: string;        // Timezone del dispositivo
  lat: number | null;      // Latitud GPS
  lng: number | null;      // Longitud GPS
  accuracy: number | null; // Precision GPS en metros
  viajeId: string;         // ID del viaje activo
  operadorId: string;      // ID del conductor
  notas: string | null;    // Notas opcionales
  evidencias: string[];    // IDs de fotos adjuntas
  syncStatus: 'PENDING' | 'SENT' | 'FAILED';
  createdAt: Date;         // Momento de creacion
  updatedAt: Date;         // Ultima modificacion
}

Dependencias

Dependencia Tipo Descripcion
US-MAI006-011 Tecnica Configuracion de dispositivo GPS
US-MAI005-001 Funcional Checklist de salida
ARQUITECTURA-OFFLINE.md Documento Arquitectura de referencia

Riesgos y Mitigaciones

Riesgo Probabilidad Impacto Mitigacion
Perdida de datos por bateria Media Alto Guardar inmediatamente, notificar bateria baja
Almacenamiento lleno Baja Alto Alertas proactivas, compresion de fotos
Dispositivo perdido Baja Medio Cifrado de datos, wipe remoto
Reloj del dispositivo incorrecto Baja Medio Validar al reconectar, advertir desfase

Definition of Done

  • Eventos se guardan correctamente sin conexion
  • Indicador de modo offline visible en UI
  • Contador de pendientes funciona correctamente
  • Datos persisten al cerrar y reabrir la app
  • Limite de almacenamiento implementado
  • Checklist funciona offline
  • Informacion del viaje visible offline
  • Pruebas unitarias escritas (>80% coverage)
  • Pruebas E2E del flujo offline completadas
  • Documentacion tecnica actualizada

US-MAI006-016 v1.0.0 - erp-transportistas - Sistema SIMCO v4.0.0