# 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 ```typescript 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*