API v1

Histórico — iOS

HistoricViewController · SituationViewController · SituationViewModel Equivalente Android: HistoricFragment

Histórico de inspeções veiculares por apólice. Filtros por data, status e empresa. Desde junho/2026, com análise consolidada, Ver Situação, Troca de Reboque e Retificação — paridade total com o Android.

Novidade (junho/2026): entrou o módulo SituaçãoSituationViewController roda POST /v1/checklist/fluxogram/analyze (com paginação paralela) e exibe cards premium. Espelha o HistoricFragment + HistoricStatusViewModelNew do Android.

Arquivos

historic/
├── HistoricViewController.swift              · histórico clássico de viagens
├── SituationViewController.swift             · empresa/apólice → analyze → cards
├── SituationViewModel.swift (SituationModels)· analyze / reanálise / rectify / busca reboque
├── SituationModels.swift                     · SitVehicleItem, SitTotals, SitDetail…
├── SituationVehicleCell.swift                · card premium do veículo
├── SituationDetailViewController.swift       · "Ver Situação"
├── SituationRectifyDialogViewController.swift· diálogo de retificação
└── SituationTrailerDialogViewController.swift· diálogo de troca de reboque

Análise Consolidada (SituationViewModel)

O SituationViewModel roda POST /v1/checklist/fluxogram/analyze, que devolve TODOS os veículos da apólice já classificados. Como o backend pagina, o ViewModel busca as páginas em paralelo e consolida itens + totais (SitTotals). Os dados do analyze são guardados para permitir a reanálise/retificação de um único veículo depois.

Ver Situação

O SituationDetailViewController (args em SitDetailArgs) carrega o detalhe via loadDetail()GET /v1/checklist/{id}?_policy={policy}. Mescla os resultados de checklist/termo/retificação em SitDetail / SitDetailItem, mantendo por item o registro mais recente — mesma regra do SituationDetailViewModelNew do Android.

Troca de Reboque

O SituationTrailerDialogViewController permite alterar os reboques considerados e reexecutar a situação:

  • Busca por placa: searchTrailers(plate:)GET /v1/vehicles?_type=R&_plate=... (apenas reboques).
  • Aceita placa antiga ↔ Mercosul via PlateMatcher.matches(_:query:) (em checklist/modals/PlateModal.swift).
  • Reexecução: novo POST /v1/checklist/fluxogram/analyze single-vehicle com os trailers escolhidos.

Retificação

Habilitada apenas com a permissão 405 (UserDefaults.standard.array(forKey: "user_perms").contains("405") + flag rectification do analyze). O SituationRectifyDialogViewController chama rectify(checklistId:…):

POST/v1/checklist/{id}/rectify
Corpo: apólice, reboques considerados e files opcionais (base64, SitRectifyFile).
upload_warnings: o backend pode responder 200 com a retificação aplicada mas falhar no upload de documentos. Esses casos vêm em upload_warnings[].name e são exibidos ao usuário (notificação onRectifyWarning) — nunca engolidos num toast rápido.

Endpoints

GET/v1/companies
Empresas para o seletor (campos fantasia / _id).
GET/v1/policy
Apólices disponíveis para o filtro superior.
POST/v1/checklist/fluxogram/analyze
Roda o fluxograma e devolve o status consolidado de todos os veículos. Paginado (busca paralela). Também usado single-vehicle para reexecutar após troca de reboque.
GET/v1/checklist/{id}?_policy={policy}
Detalhe "Ver Situação" — cliente, solicitante, origem e itens.
POST/v1/checklist/{id}/rectify
Retificação (perm 405). Reboques + documentos base64. Retorna upload_warnings em falha parcial.
GET/v1/vehicles?_type=R&_plate=...
Busca reboques por placa para a troca de reboque.