- Updated docs and inventory files - Added new architecture docs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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
- El conductor tiene un viaje asignado y activo
- La app movil tiene los datos del viaje descargados localmente
- El dispositivo tiene suficiente almacenamiento disponible (>50 MB)
- 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
- Conductor inicia la app con viaje activo
- Sistema detecta estado de conexion
- Si offline: muestra indicador y continua
- Conductor navega a pantalla de eventos
- Conductor selecciona tipo de evento
- Sistema captura datos automaticos (GPS, timestamp)
- Conductor confirma el evento
- Sistema guarda localmente y actualiza contador
- Sistema intenta sync en background si hay conexion
Flujo Alternativo: Perdida de Conexion Durante Uso
- Conductor esta registrando evento con conexion
- Conexion se pierde durante el proceso
- Sistema detecta perdida de conexion
- Sistema guarda evento localmente
- Sistema muestra "Guardado offline, se sincronizara automaticamente"
- 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
- Generacion de IDs: Usar UUID v4 para garantizar unicidad
- Timestamps: Usar hora del dispositivo, registrar timezone
- GPS: Si no hay GPS, permitir evento pero marcar como "sin ubicacion"
- Validaciones: Ejecutar localmente las mismas reglas que el servidor
- 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