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

206 lines
6.8 KiB
Markdown

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