beginner
ai-ops
operator-app
tecnicos

Rotas na Operator-App

A visão do técnico — como a aba Route na operator-app mostra as paradas do dia, lida com conclusões offline e suporta abandono de rota.

Levy Fleets TeamMay 18, 20266 min read

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:

ElementoFunção
Cabeçalho de resumo da rotaTotal 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 paradasCards ordenados, um por parada, com número de sequência e chip de ação
UI durante a paradaParada 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 maintenance para 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-stop com o ID da parada, carimbo de tempo e nota opcional.

Máquina de estados por parada

Uma parada passa pelos seguintes estados na UI:

  1. Upcoming — cinza. Não é o alvo atual.
  2. On the way — amarelo. É a próxima parada na sequência.
  3. Arrived — azul. O app detectou que o técnico está a cerca de 30 metros da parada.
  4. Completed — verde. completed_at está 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_lift das 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 maintenance por conta da auto-manutenção voltam a available.
  • 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

PapelAba Route visívelPode concluir paradasPode abandonar
Service Techsimsim (somente próprias rotas)sim (somente próprias rotas)
Fleet Manager / Adminsim (vê todos os técnicos)nãosim (qualquer rota)
Viewernãonãonã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