- Updated docs and inventory files - Added new architecture docs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.0 KiB
US-MAI006-017: Sincronizar al Reconectar
Modulo: MAI-006-tracking Version: 1.0.0 Fecha: 2026-01-27 Story Points: 5 Prioridad: ALTA
Descripcion
Como sistema de la app de conductores, Quiero enviar automaticamente todos los datos pendientes cuando se recupera la conexion, Para garantizar que la informacion operativa llegue al servidor sin intervencion del conductor y sin perdida de datos.
Actor Principal
Sistema (App Movil)
Actor Secundario: Operador / Conductor (observador)
Precondiciones
- Existen eventos/datos pendientes de sincronizar en el dispositivo
- La conexion a internet se ha restablecido
- El token de autenticacion es valido (no expirado)
- El servidor backend esta disponible
Criterios de Aceptacion
CA-1: Deteccion automatica de conexion
Given el dispositivo estaba sin conexion When la conexion a internet se restablece Then el sistema detecta el cambio en menos de 5 segundos And cambia el indicador de "Offline" a "Sincronizando" And inicia el proceso de sincronizacion automaticamente
CA-2: Priorizacion de datos a enviar
Given hay multiples tipos de datos pendientes When inicia la sincronizacion Then el sistema envia los datos en el siguiente orden de prioridad:
- Firmas POD (prioridad critica)
- Eventos de viaje (prioridad alta)
- Respuestas de checklist (prioridad alta)
- Posiciones GPS (prioridad media)
- Fotos de evidencia (prioridad baja)
CA-3: Procesamiento por lotes (batching)
Given hay 50 eventos pendientes de sincronizar When el sistema envia los eventos Then los agrupa en lotes de maximo 50 eventos por request And envia un lote a la vez And espera confirmacion antes de enviar el siguiente And marca los eventos enviados como "SENT"
CA-4: Manejo de errores con retry automatico
Given un lote de datos falla al enviarse (error de red o servidor) When el sistema detecta el error Then espera un tiempo con exponential backoff antes de reintentar
- Intento 1: Inmediato
- Intento 2: 1 segundo
- Intento 3: 2 segundos
- Intento 4: 4 segundos
- Hasta maximo 60 segundos And muestra contador de reintentos al usuario si >3 intentos
CA-5: Notificacion de sincronizacion completada
Given todos los datos pendientes fueron enviados exitosamente When el servidor confirma la recepcion Then el sistema muestra toast "Sincronizacion completada" And actualiza el contador de pendientes a 0 And cambia indicador a "Online" (verde) And registra timestamp de ultima sincronizacion
CA-6: Sincronizacion en background
Given la app esta en segundo plano (background) And hay datos pendientes When el dispositivo tiene conexion Then el sistema intenta sincronizar usando Background Sync API And muestra notificacion push al completar "X eventos sincronizados"
CA-7: Pull de cambios del servidor
Given el push de datos locales se completo exitosamente When el sistema inicia el pull de cambios Then solicita al servidor cambios desde el ultimo sync_timestamp And aplica cambios a los datos locales (viaje, instrucciones, paradas) And notifica al usuario si hay cambios relevantes And actualiza la UI reactivamente
Flujo Principal
- Sistema detecta conexion restablecida
- Sistema verifica token de autenticacion
- Sistema obtiene items pendientes de la cola
- Sistema ordena items por prioridad
- Sistema envia primer batch al servidor
- Servidor responde con confirmacion
- Sistema marca items como enviados
- Sistema repite hasta vaciar cola
- Sistema solicita pull de cambios del servidor
- Sistema aplica cambios locales
- Sistema notifica al usuario
- Sistema actualiza UI (indicadores, contadores)
Flujo Alternativo: Error de Autenticacion (401)
- Sistema intenta enviar batch
- Servidor responde 401 Unauthorized
- Sistema intenta refresh token
- Si refresh exitoso: continua sync
- Si refresh falla: notifica usuario "Sesion expirada"
- Pausar sync hasta re-autenticacion
Flujo Alternativo: Error de Servidor (5xx)
- Sistema intenta enviar batch
- Servidor responde error 5xx
- Sistema registra error en log
- Sistema espera con exponential backoff
- Sistema reintenta automaticamente
- Si >8 intentos: mover a dead letter queue
- Notificar usuario si items criticos en dead letter
Notas Tecnicas
Tecnologias Involucradas
| Componente | Tecnologia | Proposito |
|---|---|---|
| Sync Manager | Custom Service | Orquestar sincronizacion |
| Queue | WatermelonDB | Cola de items pendientes |
| Background Sync | Workbox | Sync en background |
| Network | NetInfo API | Detectar conexion |
| Retry | Custom | Exponential backoff |
Endpoints de Backend
| Metodo | Endpoint | Descripcion |
|---|---|---|
| POST | /api/sync/events | Batch de eventos |
| POST | /api/sync/positions | Batch de posiciones GPS |
| POST | /api/sync/photos | Upload de fotos |
| POST | /api/sync/signatures | Upload de firmas |
| GET | /api/sync/pull | Delta sync desde timestamp |
Formato de Request
// POST /api/sync/events
interface SyncEventsRequest {
items: Array<{
localId: string;
tipo: string;
timestamp: string;
lat: number | null;
lng: number | null;
viajeId: string;
data: Record<string, unknown>;
}>;
}
// Response
interface SyncEventsResponse {
accepted: string[]; // IDs aceptados
rejected: Array<{
localId: string;
reason: string;
}>;
serverTimestamp: string;
}
Metricas a Capturar
| Metrica | Descripcion |
|---|---|
| sync_duration_ms | Tiempo total de sincronizacion |
| sync_items_count | Cantidad de items sincronizados |
| sync_retry_count | Numero de reintentos |
| sync_error_rate | Porcentaje de errores |
Dependencias
| Dependencia | Tipo | Descripcion |
|---|---|---|
| US-MAI006-016 | Funcional | Operar sin conexion |
| US-MAI006-018 | Funcional | Ver estado de sincronizacion |
| SINCRONIZACION-OFFLINE.md | Documento | Detalles de implementacion |
Riesgos y Mitigaciones
| Riesgo | Probabilidad | Impacto | Mitigacion |
|---|---|---|---|
| Conexion inestable durante sync | Alta | Medio | Transacciones atomicas, retry |
| Servidor no disponible | Media | Alto | Dead letter queue, alertas |
| Conflictos de datos | Baja | Medio | Estrategias de conflict resolution |
| Bateria baja durante sync | Baja | Medio | Pausar si bateria <15% |
Definition of Done
- Sync automatico al recuperar conexion
- Priorizacion de datos implementada
- Batching configurado correctamente
- Exponential backoff funcionando
- Dead letter queue implementada
- Background sync funcionando
- Pull de cambios implementado
- Notificaciones de estado correctas
- Metricas capturadas
- Pruebas de integracion completadas
- Pruebas de stress (1000+ items) pasadas
US-MAI006-017 v1.0.0 - erp-transportistas - Sistema SIMCO v4.0.0