Checklist Veicular
Inspeção pré e pós-viagem para conformidade com regulamentações brasileiras de transporte. Diferente do Checklist Sistemico (equipamentos IoT), opera sobre itens físicos inspecionados manualmente pelo motorista ou inspetor.
/ui/checklist/) é independente do Checklist Sistemico (/ui/sistemic/). Ambos usam o endpoint /v1/checklists mas com modelos de dados e fluxos distintos. O veicular usa company_id como filtro; o sistemico usa origin=sistemic.
Fluxo de Navegação
NavChecklistFragment — seleção de modo
Tela inicial do módulo. Apresenta opções para listar checklists existentes ou agendar um novo.
ChecklistFragment — lista de checklists
Lista todos os checklists da empresa com busca por placa. Exibe skeleton loading enquanto carrega. Permite cancelar checklist com diálogo de confirmação.
ChecklistItemFragment — detalhes do checklist
Exibe os itens de um checklist específico com resultado por item. Abre como popup/bottom sheet via FragmentPopUpChecklist.
Permissões
| Código | Ação protegida |
|---|---|
158 | Visualizar histórico de checklists (PERMISSION_HIST_CHECKLIST) |
156 | Cadastrar / agendar novo checklist (PERMISSION_CAD_CHECKLIST) |
141 | Acesso ao módulo Checklist na Home (controla visibilidade do botão) |
// Leitura em SharedPreferences "DATA", chave "perms_user"
val permissionsJson = dataPrefs.getString("perms_user", "[]") ?: "[]"
hasPermHist = permissionsJson.contains("158")
hasPermCad = permissionsJson.contains("156")
Busca e Filtro
O ChecklistFragment inclui um SearchView que filtra a lista pelo campo placa do veículo em tempo real (onQueryTextChange). A busca é case-insensitive e opera sobre a lista carregada em memória, sem nova chamada à API.
Cancelamento de Checklist
O adapter exibe um botão de cancelar por item. Ao clicar, um AlertDialog de confirmação é exibido antes de chamar checklistViewModel.cancelChecklist(id). Após sucesso o fragment recarrega via getChecklist(companyId) com delay de 1 segundo para aguardar propagação no backend.
Estados / Loading
O ChecklistAdapter aceita o parâmetro isLoading: Boolean. Quando true, exibe skeleton placeholders no lugar dos itens reais. O estado é desativado quando o ViewModel emite dados ou noData = true.
Endpoints
/v1/checklists?_start_from={unix_epoch}
_start_from deve ser Unix epoch Int64 (segundos). Campos name_applicant e name_doer já vêm no payload — não é necessário enriquecimento separado.
_start_from era enviado como ISO 8601 → HTTP 400. Correção: Int64(date.timeIntervalSince1970)./v1/checklists/schedule
/v1/checklists/{id}/cancel
AlertDialog.SharedPreferences relevantes (Android)
| Nome | Chave | Uso |
|---|---|---|
selected_company | company_id | Filtro principal da lista de checklists |
DATA | perms_user | JSON array de permissões (158, 156, 141) |
jwt_tokens | jwt_token | Bearer JWT enviado no header Authorization |
Versões do Fragment (New vs Legacy)
| Classe | ViewModel | API | Status |
|---|---|---|---|
ChecklistFragment | ChecklistViewModel | Legado (api.monisat.online) | Mantido para compatibilidade |
ChecklistFragmentNew | ChecklistViewModelNew | v1 (api.monisystem.com) | Versão ativa |
New indica migração para API v1. A versão legada permanece no código mas não é a rota padrão no nav graph.