App de Vendas Externas (Força de Campo) | Cenário de uso | Offline Support | Arquitetura
- App de Vendas Externas (Força de Campo) | Cenário de uso | Offline Support | Arquitetura
Contexto
Uma empresa possui vendedores que visitam clientes em regiões com conectividade instável (3G fraco ou sem sinal).
A aplicação permite:
- Consultar catálogo
- Criar pedidos
- Atualizar dados do cliente
- Registrar pagamentos
Sem suporte offline, o fluxo depende 100% da API.
Cenário 1 — Sem Offline Support
Fluxo
- Vendedor acessa cliente
- Cria pedido
- Aplicação envia para API
- API responde
Problema
Se estiver offline:
- Pedido não é criado
- Vendedor precisa anotar manualmente
- Pode perder informação
- Pode gerar retrabalho
- Experiência degradada
Resultado prático
- Taxa de conversão menor
- Perda de pedidos
- Inconsistência entre sistema e realidade
Cenário 2 — Com Offline Support (Outbox Pattern + Cache)
Arquitetura
Camadas:
- UI
- Sync Manager
- Banco local (SQLite / IndexedDB)
- Fila Outbox
- API
Fluxo Offline
- Vendedor cria pedido
- Pedido salvo localmente
- Pedido inserido na Outbox
- UI mostra "Pedido criado (pendente de sincronização)"
- Quando conexão retorna → Sync executa
Estrutura Local
Pedido salvo:
{
"id": "local-123",
"clientId": 45,
"items": [...],
"status": "pending_sync",
"version": 1
}
Outbox:
{
"id": "event-789",
"type": "CREATE_ORDER",
"payload": {...},
"retryCount": 0
}
Sync Worker
Fluxo:
- Detecta conexão online
- Envia eventos da outbox
- Atualiza ID real do servidor
- Remove da fila
Resultado Mensurável
Antes
- 12% dos pedidos falhavam por instabilidade
- Tempo médio de venda: 4 minutos
- 18% retrabalho administrativo
Depois
- 0% falha por rede
- Tempo médio de venda: 2,5 minutos
- 3% retrabalho
- Aumento de conversão em regiões remotas
Problema Realista: Conflito
Cenário:
- Vendedor A edita cliente offline
- Backoffice edita cliente online
- Quando sincroniza → conflito
Resolução com Versionamento
Modelo:
{
"id": 10,
"name": "Cliente X",
"version": 5
}
Se versão divergir:
Servidor responde:
{
"error": "VersionConflict",
"serverVersion": 6
}
Aplicação pode:
- Fazer merge automático
- Solicitar resolução manual
- Aplicar regra LWW
Outro Cenário: App de Checklist Industrial
Técnicos realizam inspeções em fábricas subterrâneas.
Sem offline:
- Inspeção interrompida
- Dados anotados em papel
- Erros de transcrição
Com offline:
- Checklist armazenado localmente
- Fotos armazenadas localmente
- Sync posterior
Resultado:
- 100% das inspeções registradas digitalmente
- Eliminação de papel
- Redução de erro humano
Onde Você Consegue “Ver” o Resultado
Você percebe resultado em:
- Continuidade da UX
- Ausência de erro de rede
- Indicador “pendente de sincronização”
- Sincronização automática posterior
- Métricas de queda de erro
Teste Prático Controlado
Você pode simular:
- Criar app simples
- Implementar IndexedDB + outbox
- Desligar rede no DevTools
- Criar registros
- Ligar rede
- Observar sincronização automática
Esse experimento mostra claramente:
- Persistência local funcionando
- Sistema resiliente
- Consistência eventual