# Padrões de Rotas de Apresentação (Back–Front)

**Objetivo**: Contrato único por rota de listagem: endpoint, resposta esperada e colunas sugeridas para o front.  
**Uso**: Ao inserir ou alterar uma rota "apresentar", atualizar este documento; as views devem usar as colunas sugeridas aqui (ver comentário no código: "Ver docs/PADROES_ROTAS_APRESENTACAO.md § NomeDaRota").

---

## Ambiente: Prafrot (Prafrota)

### GET /cadastro_frota/apresentar

- **Descrição**: Lista veículos cadastrados na frota.
- **Service**: `prafrotService.getVehicles()`.
- **View**: Veículos / Status Frota.

**Resposta esperada**: array de objetos com campos, por exemplo:
`idveiculo_frota`, `placa`, `modelo`, `base`, `motorista`, `status`, `manutencao`, `atuacao`, `proprietario`, `vecfleet`, `obs`, `combustivel`, `tipo`, `marca`, `ano`, `cidade`, etc.

**Colunas sugeridas** (copiar para a view que usa ExcelTable):
```js
[
  { field: 'placa', header: 'Placa', width: '100px', className: 'font-mono font-bold text-emerald-600 dark:text-emerald-500' },
  { field: 'modelo', header: 'Modelo', width: '150px' },
  { field: 'base', header: 'Unidade', width: '120px' },
  { field: 'motorista', header: 'Motorista', width: '180px' },
  { field: 'status', header: 'Status', width: '140px' },
  { field: 'manutencao', header: 'Manutenção', width: '120px' },
  { field: 'atuacao', header: 'Atuação', width: '140px' },
  { field: 'proprietario', header: 'Proprietário', width: '140px' },
  { field: 'vecfleet', header: 'VecFleet', width: '140px' },
  { field: 'obs', header: 'OBS', width: '250px' }
]
```

**filterDefs sugeridos**: `[{ field: 'placa', label: 'Placa', type: 'text' }, { field: 'motorista', label: 'Motorista', type: 'text' }, { field: 'base', label: 'Unidade', type: 'select' }]`

---

### GET /manutencao_frota/apresentar

- **Descrição**: Lista todas as manutenções (total).
- **Service**: `prafrotService.getMaintenance()`.
- **View**: MaintenanceView (Manutenção).

**Resposta esperada**: array de objetos com campos:
`idmanutencao_frota`, `atendimento`, `placa`, `placa_reserva`, `modelo`, `oficina`, `base_frota`, `cidade`, `uf`, `proprietario`, `responsavel`, `motivo_atendimento`, `status`, `manutencao`, `status_frota_veiculo`, `data_solicitacao`, `data_agendamento`, `data_parada_veiculo`, `previcao_entrega`, `data_finalizacao`, `data_retirada`, `orcamento_inicial`, `orcamento_final`, `dif_orcamento`, `condicao_pagamento`, `validacao_financeiro`, `resp_aprovacao`, `sla_oficina`, `sla_pos_oficina`, `obs`, `endereco_prestador`, `pdf_orcamento`.

**Colunas sugeridas** (ver MaintenanceView.jsx – já alinhado):
```js
[
  { field: 'idmanutencao_frota', header: 'ID', width: '80px' },
  { field: 'atendimento', header: 'ATENDIMENTO', width: '100px' },
  { field: 'placa', header: 'PLACA', width: '100px', className: 'font-mono font-bold text-emerald-600 dark:text-emerald-500' },
  { field: 'placa_reserva', header: 'PLACA RESERVA', width: '100px' },
  { field: 'modelo', header: 'MODELO', width: '110px' },
  { field: 'oficina', header: 'OFICINA', width: '160px' },
  { field: 'base_frota', header: 'BASE FROTA', width: '100px' },
  { field: 'cidade', header: 'CIDADE', width: '120px' },
  { field: 'uf', header: 'UF', width: '60px' },
  { field: 'proprietario', header: 'PROPRIETÁRIO', width: '110px' },
  { field: 'responsavel', header: 'RESPONSÁVEL', width: '120px' },
  { field: 'motivo_atendimento', header: 'MOTIVO ATEND.', width: '120px' },
  { field: 'status', header: 'STATUS', width: '140px' },
  { field: 'manutencao', header: 'MANUTENÇÃO', width: '90px' },
  { field: 'status_frota_veiculo', header: 'STATUS FROTA', width: '120px' },
  { field: 'data_solicitacao', header: 'DATA SOLIC.', width: '100px' },
  { field: 'data_agendamento', header: 'DATA AGEND.', width: '100px' },
  { field: 'data_parada_veiculo', header: 'DATA PARADA', width: '100px' },
  { field: 'previcao_entrega', header: 'PREV. ENTREGA', width: '100px' },
  { field: 'data_finalizacao', header: 'DATA FINAL.', width: '100px' },
  { field: 'data_retirada', header: 'DATA RETIRADA', width: '100px' },
  { field: 'orcamento_inicial', header: 'ORÇ. INICIAL', width: '110px' },
  { field: 'orcamento_final', header: 'ORÇ. FINAL', width: '110px' },
  { field: 'dif_orcamento', header: 'DIF. ORÇ.', width: '100px' },
  { field: 'condicao_pagamento', header: 'COND. PAG.', width: '100px' },
  { field: 'validacao_financeiro', header: 'VALID. FINANC.', width: '110px' },
  { field: 'resp_aprovacao', header: 'RESP. APROV.', width: '110px' },
  { field: 'sla_oficina', header: 'SLA OFICINA', width: '100px' },
  { field: 'sla_pos_oficina', header: 'SLA PÓS-OF.', width: '100px' },
  { field: 'obs', header: 'OBS', width: '180px' },
  { field: 'endereco_prestador', header: 'END. PRESTADOR', width: '180px' },
  { field: 'pdf_orcamento', header: 'PDF ORÇAMENTO', width: '100px' }
]
```

**filterDefs sugeridos**: `[{ field: 'placa', label: 'Placa', type: 'text' }, { field: 'oficina', label: 'Oficina', type: 'select' }, { field: 'status', label: 'Status', type: 'select' }, { field: 'motivo_atendimento', label: 'Motivo Atendimento', type: 'select' }, { field: 'responsavel', label: 'Responsável', type: 'select' }, { field: 'cidade', label: 'Cidade', type: 'select' }]`

---

### GET /manutencao_frota/aberto_fechado/apresentar

- **Descrição**: Lista manutenções agrupadas em aberto/fechado.
- **Service**: `prafrotService.getAbertoFechado()`.
- **Uso**: Filtro na MaintenanceView (statusFilter: total | aberta | fechada).

**Resposta esperada**: estrutura com listas ou grupos `aberta` e `fechada` (ou array com campo de status). Formato exato depende do backend; a view filtra localmente se receber array único.

---

### GET /disponibilidade_frota/apresentar

- **Descrição**: Lista disponibilidade de veículos.
- **Service**: `prafrotService.getAvailability()`.

**Resposta esperada**: array de objetos; campos típicos a confirmar com o backend. Colunas sugeridas: espelhar campos retornados (ex.: `placa`, `disponivel`, `periodo`, etc.).

---

### GET /moki_frota/apresentar

- **Descrição**: Lista checklists Moki.
- **Service**: `prafrotService.getMoki()`.

---

### GET /status_frota/apresentar

- **Descrição**: Lista status da frota.
- **Service**: `prafrotService.getStatus()`.

---

### GET /monitoramento_frota/apresentar

- **Descrição**: Lista monitoramento.
- **Service**: `prafrotService.getMonitoring()`.

---

### GET /sinistro_devolucao_venda_frota/apresentar

- **Descrição**: Lista sinistros/devoluções/vendas.
- **Service**: `prafrotService.getClaims()`.

---

### GET /oficinas_frota/apresentar

- **Descrição**: Lista oficinas.
- **Service**: `prafrotService.getWorkshops()`.

---

## Ambiente: Workspace / Financeiro-v2

### GET /extrato/apresentar

- **Descrição**: Extrato bancário; filtrar por `tipoOperacao`: "C" = receitas, "D" = despesas.
- **Service**: `extratoService.fetchExtrato()`.

**Resposta esperada**: array de objetos com campos, por exemplo:
`idextrato`, `dataEntrada` (ou `data`), `descricao`, `valor`, `tipoOperacao`, `categoria`, `beneficiario_pagador` (ou `beneficiario`), `caixinha`, etc.

**Colunas sugeridas** (transações):
```js
[
  { field: 'data', header: 'Data', width: '120px' },
  { field: 'descricao', header: 'Descrição', width: '400px' },
  { field: 'valor', header: 'Valor', width: '150px' },
  { field: 'tipo', header: 'Tipo', width: '120px' },
  { field: 'status', header: 'Status', width: '120px' }
]
```

---

### GET /categorias/apresentar

- **Descrição**: Lista categorias para conciliação/labels.
- **Service**: `extratoService.fetchCategorias()` ou `workspaceConciliacaoService`.

**Resposta esperada**: array de objetos (ex.: `id`, `nome`, `descricao`, `tipoMovimento`, `cor`).

---

### GET /caixinhas/apresentar

- **Descrição**: Lista caixinhas.
- **Service**: `extratoService.fetchCaixinhas()` ou `workspaceConciliacaoService`.

**Resposta esperada**: array de objetos (ex.: `id`, `nome`, `banco`, `agencia`, `conta`).

---

### GET /contas_a_pagar/apresentar

- **Descrição**: Contas a pagar planejadas.
- **Service**: `workspaceDespesasService` (ou equivalente).

**Resposta esperada**: array com campos do planejado (categoria, valor, data, etc.). Colunas sugeridas: espelhar campos retornados.

---

### GET /saldo/armazenado/apresentar

- **Descrição**: Saldos armazenados (histórico); usado para último saldo do mês anterior no fluxo de caixa.
- **Service**: `extratoService.fetchSaldoArmazenado()`.

**Resposta esperada**: array (ou objeto único) com `data_saldo`, `saldo_disponivel`, `mes`, `ano`, `idsaldos_mensais`, etc.

---

## Ambiente: GR

### GET /cadastro/drivers/apresentar

- **Descrição**: Lista motoristas (cadastro).
- **Service**: `grService` (getRegistrations ou equivalente).

### GET /contrato/drivers/apresentar

- **Descrição**: Lista motoristas em contrato ativo.
- **Service**: `grService`.

---

## Como usar este documento

1. **Nova rota de apresentação**: adicione um bloco acima com endpoint, resposta esperada e colunas sugeridas; na view, use as colunas do doc e comente: `// Ver docs/PADROES_ROTAS_APRESENTACAO.md § NomeDaRota`.
2. **Backend mudou**: atualize a "Resposta esperada" e as "Colunas sugeridas" aqui; depois ajuste a view para manter alinhamento.
3. **Playground**: a seção "Rotas e Ambientes" pode exibir este documento por ambiente para gerenciamento visual.
