Rotas na Operator-App
Quando o AI Ops está habilitado no nível Enterprise, os técnicos veem uma nova aba Route na operator-app, posicionada entre Customers e Operations. É nessa aba que ficam as paradas de troca + rebalanceamento do dia.
Visibilidade da aba
A aba Route aparece para qualquer usuário com o papel Service Tech em um subaccount com ai_ops_tier='enterprise'. Se o técnico pertence a múltiplos subaccounts, a aba mostra a rota do subaccount selecionado no momento.
A rota de hoje
Abrir a aba chama GET /api/operator/swap-routes/today. A resposta é a rota planejada ou em andamento do técnico para o turno corrente, com suas paradas ordenadas.
A tela renderiza:
| Elemento | Função |
|---|---|
| Cabeçalho de resumo da rota | Total de paradas, distância total, minutos estimados, horário de fim do turno |
Modal Accept route (na primeira abertura de uma rota planned) | Prévia em mapa + prompt "Accept today's route?" |
| Lista de paradas | Cards ordenados, um por parada, com número de sequência e chip de ação |
| UI durante a parada | Parada atual destacada com contagem regressiva de ETA |
Aceitando uma rota
Quando uma rota é criada, seu status é planned. O técnico precisa aceitá-la para começar. Ao aceitar:
- O status da rota muda para
in_progress. - Dispara a regra de auto-manutenção: cada veículo de parada pickup vai para
maintenancepara impedir que passageiros o peguem. - A rota é travada — re-planejamentos futuros não reordenam suas paradas.
Se o técnico não aceita, a rota fica em planned e a regra de auto-manutenção não se aplica.
Cards de parada
Cada card de parada mostra:
- Número de sequência (1, 2, 3 …)
- ID curto do veículo (ex.:
VH-042) - Endereço (geocodificado a partir do último GPS do veículo, ou centróide do hex para dropoffs)
- Chip de ação — Pickup / Dropoff / Swap, com cor
- ETA — chegada estimada pelo solver
- Janela restante — segundos até
time_window_end
Dois botões por card:
- Start nav — abre um deeplink para mapas nativos (Apple Maps no iOS, Google Maps no Android) com as coordenadas da parada.
- Complete stop — chama
POST /api/operator/route/[id]/complete-stopcom o ID da parada, carimbo de tempo e nota opcional.
Máquina de estados por parada
Uma parada passa pelos seguintes estados na UI:
- Upcoming — cinza. Não é o alvo atual.
- On the way — amarelo. É a próxima parada na sequência.
- Arrived — azul. O app detectou que o técnico está a cerca de 30 metros da parada.
- Completed — verde.
completed_atestá preenchido.
A detecção de "Arrived" usa geolocalização em segundo plano quando disponível. Se a geolocalização for negada, o técnico pode tocar manualmente em "Mark Arrived."
Fila offline
A operator-app foi feita para conexões instáveis. Se o técnico toca em Complete stop sem rede:
- O evento é enfileirado no AsyncStorage com ID da parada, carimbo de tempo e nota.
- A UI marca imediatamente a parada como concluída localmente.
- Um indicador de fila aparece no topo da aba Route: "1 pending sync."
- A cada evento de foco e a cada 60 segundos em segundo plano, a fila é descarregada contra
POST /api/operator/route/[id]/complete-stop.
Isso significa que um técnico pode concluir uma rota inteira dentro de um túnel de metrô e ter tudo sincronizado quando voltar a ter sinal.
Concluindo a rota
Quando a última parada é concluída, o status da rota muda automaticamente para completed. O técnico vê uma tela de resumo com:
- Paradas concluídas (ex.: 14 de 15)
- Distância total percorrida (vs. estimativa do solver)
- Tempo total no turno
- Ganho estimado (somado dos
projected_liftdas recomendações aceitas)
Se alguma parada ficou para trás, ela é reaberta como recomendação para a próxima rota ou outro técnico.
Abandonando uma rota
Às vezes não dá para terminar uma rota — van quebra, técnico passa mal, tempo piora. Tocar em Abandon Route abre um modal pedindo um motivo e chama POST /api/operator/route/[id]/abandon.
Ao abandonar:
- Status da rota muda para
abandoned. - Todos os veículos ainda em
maintenancepor conta da auto-manutenção voltam aavailable. - Recomendações incompletas associadas às paradas da rota são reabertas (status volta a
open) para que a próxima execução do solver as reagende.
Permissões
| Papel | Aba Route visível | Pode concluir paradas | Pode abandonar |
|---|---|---|---|
| Service Tech | sim | sim (somente próprias rotas) | sim (somente próprias rotas) |
| Fleet Manager / Admin | sim (vê todos os técnicos) | não | sim (qualquer rota) |
| Viewer | não | não | não |
O que não está na tela
- Editar a ordem da rota. O técnico segue a sequência do solver. Se a rota está errada, abandone e replaneje pelo painel.
- Adicionar paradas no meio do turno. Adições em pleno turno exigem confirmação do operador via painel.
- Suporte a múltiplas rotas. Um técnico, uma rota por turno. Se o técnico precisa cobrir duas rotas, agende dois turnos.
Relacionado
- Rotas de técnicos — como as rotas são construídas e a regra de auto-manutenção.
- Recomendações de rebalanceamento — a fonte dos pares pickup/dropoff.