beginner
ordens-servico
operator-app
tecnico

Fluxo do App do Tecnico

O que tecnicos de campo veem na aba Tasks do operator-app, incluindo fila offline e captura de fotos

Equipe Levy FleetsMay 18, 20267 min read

Fluxo do App do Tecnico

Tecnicos nao abrem o dashboard. O operator-app do Levy e a superficie inteira deles, e a aba Tasks e onde passam o dia. Este artigo descreve o fluxo de "abrir o app" ate "tocar em Resolve".

Onde Tasks vive no app

Depois do release da Fase 1, o navegador inferior do operator-app traz uma nova aba Tasks entre Customers e Operations. Tocar abre TasksScreen.tsx.

No topo da tela ha tres filtros em chip:

  • Mine - tasks atribuidas ao tecnico logado
  • Nearby - tasks nao reclamadas em um raio de cerca de 5 km da localizacao do tecnico
  • All - toda task aberta no subaccount (read-only se nao for o assignee)

Opcoes de ordenacao: distancia, priority, idade.

Cada linha mostra vehicle number, icone de type, priority chip, distancia ao veiculo ("0.3 mi") e badge de SLA.

Aceitando uma task

Se a task esta na lista Nearby, o tecnico toca em Accept na linha. Isso:

  1. Escreve uma nova linha task_assignments com is_current = true, atomicamente trocando a anterior para is_current = false
  2. Move a task de Created para Assigned
  3. Mostra um toast de confirmacao e atualiza o cache local em SQLite

Se dois tecnicos tocam em Accept simultaneamente, o primeiro write vence. O segundo ve um 409 com o nome do assignee atual.

A tela de detalhe da task

Tocar em qualquer linha abre TaskDetailScreen.tsx, uma unica superficie rolavel:

  • Header - vehicle number, title, priority chip, badge de SLA
  • Foto do veiculo - puxada do ultimo condition report
  • Card de localizacao - ultimo GPS conhecido com botao Navigate que deep-linka para Apple Maps (iOS) ou Google Maps (Android)
  • Description - o que o rule engine ou o ops manager escreveu
  • Parts checklist - veja Parts and Labor Tracking
  • Photos - agrupadas por fase (before, during, after)
  • Botoes de acao - Start, Resolve, Block, Decline

O gate de foto

Duas transicoes exigem foto:

  • assigned para in_progress exige uma foto before
  • in_progress para resolved exige uma foto after

Os botoes Start e Resolve ficam desabilitados ate a foto correta ser anexada. Tocar no icone da camera abre a tela de captura no app. O app remove EXIF do arquivo antes de upload mas preserva o geotag em coluna separada (task_photos.geotag_lat/lng) para audit.

Fotos sao salvas primeiro em cache local em ${FileSystem.documentDirectory}task-photos/<task_id>/ e depois enviadas com FileSystem.uploadAsync. O progresso de upload e visivel por task. Se o sinal cai no meio do upload, o arquivo fica no cache local e tenta de novo na reconexao.

Block - quando o trabalho nao pode continuar

Se o tecnico chega e o veiculo nao esta la, esta trancado atras de um portao ou precisa de uma peca que ele nao tem, ele toca em Block e escolhe um motivo. A task vai para blocked e aparece para o ops_manager no dashboard com o motivo. Quando o bloqueio for resolvido, o manager (ou o tecnico) volta para in_progress.

Decline - recusando uma atribuicao

Se uma task for empurrada a um tecnico e ele nao pode fazer (fora do turno, fora da zona), ele toca em Decline e escolhe um motivo. O decline escreve em task_assignments.declined_at e a task volta para a coluna Created para reassign. O ops manager ve o motivo do decline no historico do side drawer.

Resolve e o gate de Verify

Tocar em Resolve com foto "after" anexada move a task para resolved. Note que o tecnico nao pode tocar em Verify ele mesmo - isso e restrito a ops_manager e lead_tech para impedir que juniores aprovem o proprio trabalho.

O veiculo continua em maintenance ate o verify. Isso e intencional: um tecnico que resolve rapido uma task que nao concluiu de verdade nao deveria poder colocar o veiculo de volta em servico.

Fila offline

Tecnicos de campo trabalham em garagens, estacionamentos subterraneos e cidades de praia mexicanas com sinal ruim. A aba Tasks foi feita para continuar funcionando.

  • Leituras - a ultima lista de tasks fica em cache no AsyncStorage; tocar em uma linha funciona offline com o detalhe em cache
  • Escritas - Accept, Start, Resolve, upload de foto e notas sao enfileirados localmente e enviados em replay por /api/operator/tasks/sync quando o app volta online
  • Conflitos - servidor vence em status (se o manager fechou a task enquanto o tecnico estava offline), cliente vence em fotos e notas (para que o registro do tecnico nao se perca)

O replay de sync e idempotente e limitado - cada entrada e tentada ate 5 vezes antes de surgir como erro para o usuario.

Push notifications

Tres tipos de notificacao chegam no celular do tecnico:

TriggerCanal
Task atribuida a mimExpo push
Task nearby nao reclamada por mais de 10 minExpo push
Breach de SLA na minha taskExpo push + e-mail

Notificacoes respeitam os horarios de silencio do aparelho e as preferencias do tecnico em Settings -> Notifications.

Treine seus juniores em Block

O erro mais comum de tecnicos juniores e resolver a task "so para tirar da lista" sem ter concluido de fato. Treine o time para tocar em Block cedo. Uma task bloqueada com motivo claro e um dado muito melhor que uma falsamente resolvida.