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:
- Escreve uma nova linha
task_assignmentscomis_current = true, atomicamente trocando a anterior parais_current = false - Move a task de
CreatedparaAssigned - 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:
assignedparain_progressexige uma foto beforein_progresspararesolvedexige 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/syncquando 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:
| Trigger | Canal |
|---|---|
| Task atribuida a mim | Expo push |
| Task nearby nao reclamada por mais de 10 min | Expo push |
| Breach de SLA na minha task | Expo 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.