API v1

Viagens — Cadastro e Gestão

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

Cadastro e edição de viagens com múltiplas abas, migrado para v1 (TripCadViewModelNew, base https://api.monisystem.com/v1). O TripCadFragment foi refatorado em TabHelpers — cada aba é gerenciada por uma classe helper independente, mantendo o fragment enxuto. A análise pré-cadastro é feita pelo próprio POST /v1/trip/ com accept_nonconformity=false (não existe /analyze separado): o backend Go devolve conflitos/avisos; depois reenvia-se com accept_nonconformity=true para confirmar.

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/trip/ (accept_nonconformity=false)

Antes de confirmar, o app envia o mesmo payload da viagem com accept_nonconformity=false (montado em buildTripJsonV1, TripCadViewModelNew ~1268). Não há endpoint /analyze dedicado — o próprio POST /v1/trip/ devolve conflitos/avisos. Se estiver tudo limpo, o backend já cria a viagem e retorna 201. A resposta é interpretada pela classe AnalysisResult e exibida em diálogo.

2

Confirmações do usuário

Cada conflito/aviso retornado pode exigir que o usuário confirme explicitamente (checkbox ou botão). Sem confirmação, o salvamento é bloqueado.

3

Confirmação — POST /v1/trip/ (accept_nonconformity=true)

Reenvia o mesmo payload com accept_nonconformity=true, efetivando a criação da viagem. Campos em inglês snake_case conforme contrato dos structs Go. Não há PUT /v1/trip/{id} confirmado no código — criação e edição passam pelo mesmo POST /v1/trip/ (singular, com barra final).

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/user?_driver=true&_limit=10000
Lista motoristas disponíveis (filtro _driver=true sobre o endpoint de usuários). Não existe /v1/drivers.
GET /v1/point?_detail=true&nome=...&cnpj=...
Pontos de parada/entrega (não existe /v1/delivery-points). Com _detail=true, o campo name_city_id retorna "CIDADE - UF" já formatado — não é necessário enriquecimento separado.
GET /v1/trip/registration_permissions
Gating do cadastro. Retorna allowed + checks para habilitar/bloquear tipos de viagem e perfis. Substituiu as leituras antigas por Elasticsearch. Lido em TripCadViewModelNew (~2696), consumido pela seleção de tipo (SelectedTypeFragment).
POST /v1/trip/
Analisar e criar viagem (singular, com barra final). Enviado duas vezes: accept_nonconformity=false (análise — devolve conflitos/avisos, ou 201 se limpo) e depois accept_nonconformity=true (confirmação). Todos os campos em inglês snake_case conforme structs Go da API. Não há /analyze nem PUT de edição confirmado.
GET /v1/trip/{id}
Buscar viagem existente para edição. Retorna todos os campos populados.

Dialogs e Helpers Auxiliares

ClasseLocalizaçãoUso
AnalysisResult/ui/trip/Model dos conflitos/avisos retornados pelo POST /v1/trip/ com accept_nonconformity=false
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.