Viagens — Cadastro e Gestão
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/
| Pacote | Conteúdo | Acesso |
|---|---|---|
/ui/trip/ | TripCadFragment, TripCadViewModel, TabHelpers, dialogs, models | Cadastro e edição de viagens (gestor/admin) |
/ui/travels/ | TripFragment, TripManagementFragment, FragmentButtonsTravels, DriverTripViewModel | Acompanhamento de viagem ativa (motorista) |
Abas do TripCadFragment
| Tab | Helper | Conteúdo principal |
|---|---|---|
| Info Gerais | InfoGeraisTabHelper | Veículo, motorista, rota, perfil, grupo, apólice, contato WhatsApp |
| Entregas | EntregasTabHelper | Pontos de entrega, destinatário, emitente, NCM, rotograma associado |
| Iscas/Escolta | IscaEscoltaTabHelper | Rastreadores de isca e veículos de escolta vinculados à viagem |
| Temperatura | TemperaturaTabHelper | Sensores de temperatura — faixa ideal e limites de alerta |
| Situações | SituacoesTabHelper | Status e situações especiais (ocorrências, bloqueios) |
Fluxo de Salvamento
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.
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.
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:
| Estado | Condição | Comportamento |
|---|---|---|
| Válida | expiration_days > 30 | Badge verde, salvamento liberado |
| Aviso | 0 < expiration_days ≤ 30 | Badge amarelo, alerta exibido mas permite continuar |
| Bloqueada | expiration_days ≤ 0 | Badge vermelho, botão de salvar desabilitado |
Endpoints Principais
/v1/vehicles
type == "V" para placas de veículos (exclui reboques e iscas)./v1/drivers
/v1/delivery-points?_detail=true&nome=...&cnpj=...
_detail=true, o campo name_city_id retorna "CIDADE - UF" já formatado — não é necessário enriquecimento separado.
/v1/trips/{id}/analyze
/v1/trips
/v1/trips/{id}
Dialogs e Helpers Auxiliares
| Classe | Localização | Uso |
|---|---|---|
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 |
RequestThrottle actor com máx 3 requests concorrentes.