API v1

Trip Manager

Android: ui/manager/ManagerTripFragment · ManagerViewModelNew Lista: ui/travels/TripManagementFragment Paridade iOS: Manager

Visão do gestor sobre as viagens da empresa. Compõe-se de duas telas: a lista de viagens (TripManagementFragment) e o detalhe com mapa de uma viagem (ManagerTripFragment), que exibe rota, pontos autorizados e áreas de risco.

Duas telas distintas no código: ui/manager/ManagerTripFragment.kt (mapa/detalhe de uma viagem, com ManagerViewModelNew) e ui/travels/TripManagementFragment.kt (lista, com TripManagementAdapter). Ambas estão registradas no mobile_navigation.xml — a lista abre o detalhe passando tripId/routeId por arguments.

Tela de mapa da viagem

O ManagerTripFragment abre o detalhe de uma viagem num mapa OSMDroid (MapView), espelhando a tela do motorista mas na visão do gestor. Além da rota (rotograma), desenha os pontos autorizados e as áreas de risco da viagem.

ElementoComo é desenhado
RotaPolyline a partir de rotogram_route.coordinates (via /rotograms/trip/{id}).
Pontos autorizadosMarker acumulados em stopPointMarkers; redesenhados em redrawTripMarkers() conforme as LiveData assíncronas chegam.
Áreas de riscoPolygon vermelho acumulado em riskAreaPolygons.

Os dados de pontos e áreas de risco vêm do endpoint dedicado — o mesmo das telas de motorista e do detalhe do Grid. O ManagerViewModelNew.fetchStopPoints(jwt, tripId) junta points + apolice_rules.risk_points + deliveries de cada item de data[], e itens com type/type_return == "risk_area" viram polígono (via parseRiskArea); os demais viram StopPointData classificados por type_return (client/authorized/delivery).

Endpoint em STAGING: GET /v1/trip/{tripId}/rotogram ainda aponta para http://nginx.surubim.monisat.online/v1 (constante NGINX_URL no ManagerViewModelNew). Pendente a troca para produção https://api.monisystem.com/v1 (BASE_URL). Detalhes de renderização e contrato na página Mapa.
Paridade iOS: mesma feature em ManagerViewController1.swift (fetchStopPoints/fetchStopPointItems) + MapManage.swift (makeRiskAreaPolygon, createRiskAreaRenderer, StopPointAnnotation). Aqui, na tela do gestor, os pontos são exibidos sempre (sem toggle) nas duas plataformas.

Lista de Viagens

O TripManagementFragment (ui/travels/) apresenta a lista de viagens da empresa num RecyclerView com TripManagementAdapter. É a tela de entrada do gestor (layout fragment_menu_gestor.xml); ao selecionar uma viagem, navega para o detalhe com mapa acima.

Validação de Apólice

A apólice da empresa é validada ao carregar o módulo. O campo expiration_days (recebido como string — converter para Int) define o estado do semáforo:

EstadoCondiçãoBadgeComportamento
✓ Válidaexpiration_days > 30VerdeTodas as ações habilitadas
⚠ Aviso0 < expiration_days ≤ 30AmareloExibe alerta mas permite continuar
✗ Bloqueadaexpiration_days ≤ 0VermelhoBotões de ação desabilitados

Adaptador da Lista

O TripManagementAdapter exibe viagens com contexto gerencial: motorista, status, horários e indicadores de alerta. Suporta busca e filtro por status dentro da lista carregada.

Endpoints

GET /v1/trip/{tripId}/rotogram
Detalhe com mapa: pontos autorizados + áreas de risco + entregas da viagem (data[] { points, apolice_rules.risk_points, deliveries }). Consumido por ManagerViewModelNew.fetchStopPoints. Base em STAGING (NGINX_URL = http://nginx.surubim.monisat.online/v1) — trocar para produção quando disponível.
GET /v1/rotograms/trip/{tripId}?_detail=true
Detalhe com mapa: rota (rotograma principal + alternativas) desenhada como Polyline. Já em produção. Ver Mapa.
GET /v1/policies
Lista apólices da empresa. O campo expiration_days vem como string — usar expiration_days.toIntOrNull() ?: 0 para conversão segura.
GET /v1/trips?policy_id=...
Viagens filtradas pela apólice selecionada. Retorna a lista gerenciada pelo gestor.

Ações Gerenciais

AçãoDisponível quando
Visualizar detalhes da viagemSempre
Aprovar / ReprovarApólice válida ou em aviso
Registrar desconsideraçãoApólice válida ou em aviso
Ações críticasBloqueadas com apólice expirada

SharedPreferences relevantes

NomeChaveUso
jwt_tokensjwt_tokenBearer JWT para chamadas v1
selected_companycompany_idEmpresa ativa — filtra viagens e apólices