erp-transportistas-v2/docs/02-definicion-modulos/MAI-006-tracking/historias-usuario/US-MAI006-018-ver-estado-sincronizacion.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

253 lines
7.7 KiB
Markdown

# US-MAI006-018: Ver Estado de Sincronizacion
**Modulo:** MAI-006-tracking
**Version:** 1.0.0
**Fecha:** 2026-01-27
**Story Points:** 3
**Prioridad:** MEDIA
---
## Descripcion
**Como** conductor,
**Quiero** saber en todo momento cuantos datos estan pendientes de enviar y el estado de la sincronizacion,
**Para** tener visibilidad de que mi trabajo queda registrado y saber si debo buscar conexion para enviar datos criticos.
---
## Actor Principal
**Operador / Conductor**
---
## Precondiciones
1. El conductor tiene la app abierta
2. Existe al menos un viaje activo o cerrado recientemente
---
## Criterios de Aceptacion
### CA-1: Indicador de estado de conexion en header
**Given** el conductor esta usando la app
**When** observa el header de cualquier pantalla
**Then** ve un icono de estado de conexion con los siguientes estados:
- Verde: Online y sincronizado
- Amarillo: Sincronizando (animacion)
- Rojo: Offline
- Naranja: Online pero con errores de sync
### CA-2: Badge de items pendientes
**Given** hay datos pendientes de sincronizar
**When** el conductor ve el header
**Then** junto al icono de conexion aparece un badge numerico
- Muestra el numero exacto si < 100
- Muestra "99+" si >= 100
- Desaparece cuando el contador llega a 0
### CA-3: Acceso a panel de estado detallado
**Given** el conductor quiere ver mas detalles
**When** toca el icono de estado de conexion
**Then** se abre un panel/modal con informacion detallada:
- Estado de conexion actual (Online/Offline)
- Tiempo offline (si aplica)
- Ultima sincronizacion exitosa (fecha y hora)
- Desglose de pendientes por tipo
### CA-4: Desglose de pendientes por tipo
**Given** el conductor abre el panel de estado
**When** hay items pendientes
**Then** ve una tabla con:
| Tipo | Cantidad | Tamano |
|------|----------|--------|
| Eventos | X | X KB |
| Posiciones GPS | X | X KB |
| Fotos | X | X MB |
| Firmas | X | X KB |
| **Total** | **X** | **X MB** |
### CA-5: Indicador de ultima sincronizacion
**Given** hubo al menos una sincronizacion exitosa
**When** el conductor consulta el panel de estado
**Then** ve "Ultima sincronizacion: [fecha] [hora]"
- Formato: "Hace X minutos" si < 1 hora
- Formato: "Hoy a las HH:MM" si es hoy
- Formato: "Ayer a las HH:MM" si fue ayer
- Formato: "DD/MM/YYYY HH:MM" si es anterior
### CA-6: Boton para forzar sincronizacion
**Given** el conductor esta en el panel de estado
**And** hay conexion a internet
**And** hay items pendientes
**When** toca el boton "Sincronizar ahora"
**Then** inicia la sincronizacion inmediatamente
**And** el boton cambia a estado "Sincronizando..." (disabled)
**And** muestra progreso de la sincronizacion
### CA-7: Alerta de errores de sincronizacion
**Given** algunos items fallaron al sincronizar
**When** el conductor abre el panel de estado
**Then** ve una seccion "Errores" con:
- Cantidad de items con error
- Descripcion del error mas reciente
- Boton "Reintentar" para forzar retry
- Boton "Ver detalles" para mas informacion
---
## Flujo Principal
1. Conductor observa header con indicador de estado
2. Conductor nota badge de pendientes
3. Conductor toca el indicador
4. Sistema muestra panel de estado
5. Conductor revisa desglose de pendientes
6. Conductor toca "Sincronizar ahora" (si aplica)
7. Sistema ejecuta sincronizacion
8. Sistema actualiza indicadores en tiempo real
---
## Wireframe ASCII del Panel de Estado
```
+----------------------------------------------------------+
| ESTADO DE SINCRONIZACION [X] |
+----------------------------------------------------------+
| |
| Estado: [O] ONLINE |
| Conectado a 4G/LTE |
| |
| Ultima sincronizacion: Hace 15 minutos |
| (2026-01-27 14:35:22) |
| |
+----------------------------------------------------------+
| PENDIENTES DE ENVIAR |
| +----------------------------------------------------+ |
| | Tipo | Cantidad | Tamano | Estado | |
| +----------------------------------------------------+ |
| | Eventos | 5 | 2 KB | Listo | |
| | Posiciones GPS | 45 | 5 KB | Listo | |
| | Fotos | 3 | 4.5 MB | Listo | |
| | Firma POD | 1 | 32 KB | Listo | |
| +----------------------------------------------------+ |
| | TOTAL | 54 | 4.6 MB | | |
| +----------------------------------------------------+ |
| |
+----------------------------------------------------------+
| ERRORES (2 items) |
| [!] 2 fotos fallaron: "Timeout de conexion" |
| [Reintentar] [Ver detalles] |
+----------------------------------------------------------+
| |
| [========== SINCRONIZAR AHORA ==========] |
| |
+----------------------------------------------------------+
```
---
## Notas Tecnicas
### Tecnologias Involucradas
| Componente | Tecnologia | Proposito |
|------------|------------|-----------|
| UI | React Native | Componentes visuales |
| State | RxJS Observables | Estado reactivo |
| Icons | Lucide Icons | Iconografia |
| Storage Query | WatermelonDB | Consulta de pendientes |
### Componente React
```typescript
// src/components/SyncStatusIndicator.tsx
interface SyncStatusIndicatorProps {
variant: 'header' | 'panel';
}
// Estados del indicador
type ConnectionStatus = 'ONLINE' | 'OFFLINE' | 'SYNCING' | 'ERROR';
// Colores por estado
const STATUS_COLORS = {
ONLINE: '#10B981', // Verde
OFFLINE: '#EF4444', // Rojo
SYNCING: '#F59E0B', // Amarillo
ERROR: '#F97316' // Naranja
};
```
### Estructura de Datos para UI
```typescript
interface SyncStatusData {
connectionStatus: ConnectionStatus;
connectionType: string | null; // 'wifi', '4g', 'cellular'
lastSyncAt: Date | null;
pendingItems: {
events: { count: number; size: number };
positions: { count: number; size: number };
photos: { count: number; size: number };
signatures: { count: number; size: number };
};
errors: Array<{
itemId: string;
type: string;
message: string;
timestamp: Date;
}>;
totalPending: number;
totalSize: number;
}
```
---
## Dependencias
| Dependencia | Tipo | Descripcion |
|-------------|------|-------------|
| US-MAI006-016 | Funcional | Operar sin conexion |
| US-MAI006-017 | Funcional | Sincronizar al reconectar |
| SyncManager | Tecnica | Servicio de sincronizacion |
---
## Riesgos y Mitigaciones
| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|--------------|---------|------------|
| UI no se actualiza en tiempo real | Media | Bajo | Usar observables reactivos |
| Calculo de tamano incorrecto | Baja | Bajo | Pruebas unitarias |
| Panel bloquea la UI | Baja | Medio | Usar modal con animacion |
---
## Definition of Done
- [ ] Indicador de estado visible en header
- [ ] Badge de pendientes funciona correctamente
- [ ] Panel de estado muestra toda la informacion
- [ ] Desglose por tipo implementado
- [ ] Ultima sincronizacion se muestra correctamente
- [ ] Boton "Sincronizar ahora" funciona
- [ ] Seccion de errores implementada
- [ ] Actualizacion en tiempo real (reactiva)
- [ ] Pruebas de UI completadas
- [ ] Accesibilidad verificada (a11y)
---
*US-MAI006-018 v1.0.0 - erp-transportistas - Sistema SIMCO v4.0.0*