Trip 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.
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.
| Elemento | Como é desenhado |
|---|---|
| Rota | Polyline a partir de rotogram_route.coordinates (via /rotograms/trip/{id}). |
| Pontos autorizados | Marker acumulados em stopPointMarkers; redesenhados em redrawTripMarkers() conforme as LiveData assíncronas chegam. |
| Áreas de risco | Polygon 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).
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.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:
| Estado | Condição | Badge | Comportamento |
|---|---|---|---|
| ✓ Válida | expiration_days > 30 | Verde | Todas as ações habilitadas |
| ⚠ Aviso | 0 < expiration_days ≤ 30 | Amarelo | Exibe alerta mas permite continuar |
| ✗ Bloqueada | expiration_days ≤ 0 | Vermelho | Botõ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
/v1/trip/{tripId}/rotogram
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./v1/rotograms/trip/{tripId}?_detail=true
Polyline. Já em produção. Ver Mapa./v1/policies
expiration_days vem como string — usar expiration_days.toIntOrNull() ?: 0 para conversão segura./v1/trips?policy_id=...
Ações Gerenciais
| Ação | Disponível quando |
|---|---|
| Visualizar detalhes da viagem | Sempre |
| Aprovar / Reprovar | Apólice válida ou em aviso |
| Registrar desconsideração | Apólice válida ou em aviso |
| Ações críticas | Bloqueadas com apólice expirada |
SharedPreferences relevantes
| Nome | Chave | Uso |
|---|---|---|
jwt_tokens | jwt_token | Bearer JWT para chamadas v1 |
selected_company | company_id | Empresa ativa — filtra viagens e apólices |