API v1

Viagens — Cadastro e Gestão

Android: TripCadFragment · TabHelpers · /ui/trip/ · /ui/travels/

Cadastro e edição de viagens com múltiplas abas. O TripCadFragment foi refatorado em TabHelpers — cada aba é gerenciada por uma classe helper independente, mantendo o fragment enxuto. A análise pré-cadastro via /analyze valida conflitos e exige confirmações antes de salvar.

Módulo /ui/trip/ vs /ui/travels/

PacoteConteúdoAcesso
/ui/trip/TripCadFragment, TripCadViewModel, TabHelpers, dialogs, modelsCadastro e edição de viagens (gestor/admin)
/ui/travels/TripFragment, TripManagementFragment, FragmentButtonsTravels, DriverTripViewModelAcompanhamento de viagem ativa (motorista)

Abas do TripCadFragment

TabHelperConteúdo principal
Info GeraisInfoGeraisTabHelperVeículo, motorista, rota, perfil, grupo, apólice, contato WhatsApp
EntregasEntregasTabHelperPontos de entrega, destinatário, emitente, NCM, rotograma associado
Iscas/EscoltaIscaEscoltaTabHelperRastreadores de isca e veículos de escolta vinculados à viagem
TemperaturaTemperaturaTabHelperSensores de temperatura — faixa ideal e limites de alerta
SituaçõesSituacoesTabHelperStatus e situações especiais (ocorrências, bloqueios)

Fluxo de Salvamento

1

Análise prévia — POST /v1/trips/{id}/analyze

Antes de salvar, o sistema envia os dados para análise. Retorna alertas, conflitos e confirmações necessárias do usuário. Exibidos em um diálogo com a classe AnalysisResult.

2

Confirmações do usuário

Cada alerta retornado pela análise pode exigir que o usuário confirme explicitamente (checkbox ou botão). Sem confirmação, o salvamento é bloqueado.

3

POST /v1/trips

Salvamento efetivo da viagem. Campos em inglês snake_case conforme contrato dos structs Go. Edição usa PUT /v1/trips/{id}.

Validação de Apólice

O status da apólice é verificado antes de habilitar o botão de salvar:

EstadoCondiçãoComportamento
Válidaexpiration_days > 30Badge verde, salvamento liberado
Aviso0 < expiration_days ≤ 30Badge amarelo, alerta exibido mas permite continuar
Bloqueadaexpiration_days ≤ 0Badge vermelho, botão de salvar desabilitado

Endpoints Principais

GET /v1/vehicles
Lista veículos disponíveis. Filtrar type == "V" para placas de veículos (exclui reboques e iscas).
GET /v1/drivers
Lista motoristas disponíveis para a empresa.
GET /v1/delivery-points?_detail=true&nome=...&cnpj=...
Pontos de entrega. Com _detail=true, o campo name_city_id retorna "CIDADE - UF" já formatado — não é necessário enriquecimento separado.
POST /v1/trips/{id}/analyze
Análise pré-salvamento. Retorna lista de alertas e confirmações exigidas. Deve ser chamado antes do POST de criação.
POST /v1/trips
Criar nova viagem. Todos os campos em inglês snake_case conforme structs Go da API.
GET /v1/trips/{id}
Buscar viagem existente para edição. Retorna todos os campos populados.

Dialogs e Helpers Auxiliares

ClasseLocalizaçãoUso
AnalysisResult/ui/trip/Model dos alertas retornados pelo /analyze
SelectedTypeFragment/ui/trip/Seleção de tipo de viagem (modal)
TripCadViewModel/ui/trip/Versão legada
TripCadViewModelNew/ui/trip/Versão v1 — ativa
Rate limiting: o cadastro realiza múltiplas chamadas simultâneas (veículos, motoristas, pontos). Respeitar o limite de requests paralelos para evitar HTTP 429. No iOS usa RequestThrottle actor com máx 3 requests concorrentes.