# Guia de Integração Frontend-Backend: Módulo GR Operações

Este documento serve como guia técnico para o desenvolvimento da API backend que alimentará o novo módulo de GR Operações. O frontend foi construído de forma modular, utilizando uma camada de abstração que permite alternar entre dados simulados (mocks) e a API real através de uma flag.

---

## 1. Arquitetura do Frontend

O frontend segue um padrão de 3 camadas:
1.  **Views (React Components):** Interface do usuário. Não conhecem a origem dos dados.
2.  **Hooks (useXXX):** Encapsulam a lógica de negócio, caching básico e chamadas aos services.
3.  **Services (xxxService):** Camada de comunicação com a rede (Fetch/Axios). Contêm a lógica de Mock.

### Como ativar a API Real
Em cada arquivo dentro de `src/features/gr/services/`, existe uma constante:
```javascript
const USE_MOCK = true; // Altere para false para usar a API real
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000';
```
Basta alterar `USE_MOCK` para `false` e configurar a URL da sua API no arquivo `.env`.

---

## 2. Contratos da API (Endpoints Esperados)

Abaixo estão os endpoints que os Services já tentam chamar quando `USE_MOCK = false`.

### 🚨 2.1 Monitoramento de Viagens
- **GET** `/api/gr/monitoring/requests`
    - **Filtros (Query):** `status` (PENDING, LIBERADO, EM_ROTA, FINALIZADO)
- **POST** `/api/gr/monitoring/request/:id/attend`
    - **Ação:** Marca supervisor como responsável pela análise.
- **POST** `/api/gr/monitoring/request/:id/approve`
    - **Payload:** `{ cargoValue, cte, ae, pallet, routeImageUrl, customMessage }`

### 🛰️ 2.2 Telemetria e Rastreamento
- **GET** `/api/gr/telemetry/positions`
    - **Retorno:** Array de veículos com `plate, lat, lng, speed, riskStatus, alert`.
- **GET** `/api/gr/telemetry/history/:plate`
    - **Retorno:** Array de posições históricas (lat, lng, timestamp, speed).

### 📋 2.3 Checklist e Manutenção
- **GET** `/api/gr/checklist/vehicles`
    - **Filtros:** `client`
- **POST** `/api/gr/checklist/renew/:id`
    - **Ação:** Estende validade do checklist.
- **GET** `/api/gr/maintenance/orders`
    - **Filtros:** `vehicleId`
- **POST** `/api/gr/maintenance/orders`
    - **Payload:** `{ vehicleId, type, sensor, description }`

### 📄 2.4 Gestão de Documentos
- **GET** `/api/gr/documents`
    - **Filtros:** `entityType` (MOTORISTA, VEÍCULO), `docType` (CNH, CRLV)
- **POST** `/api/gr/documents` (**Multipart/Form-Data**)
    - **Payload:** `file, client, entityType, entityName, docType`
- **DELETE** `/api/gr/documents/:id`

### 📊 2.5 Planilhas e Importação
- **GET** `/api/gr/spreadsheets`
    - **Filtros:** `clientId, archived` (boolean)
- **POST** `/api/gr/spreadsheets/import`
    - **Payload:** `{ clientId, rows: [...] }`
- **PATCH** `/api/gr/spreadsheets/:id/archive`

---

## 3. Modelos de Dados (Exemplos JSON)

### Objeto de Solicitação de Monitoramento
```json
{
  "id": "uuid",
  "driverName": "String",
  "plate": "AAA-0000",
  "status": "PENDING",
  "riskLevel": "LOW | MEDIUM | HIGH",
  "cargoValue": 0,
  "origin": "Cidade - UF",
  "destination": "Cidade - UF"
}
```

### Objeto de Telemetria
```json
{
  "id": "uuid",
  "plate": "AAA-0000",
  "lat": -22.90,
  "lng": -43.17,
  "speed": 80,
  "riskStatus": "NORMAL | CRITICAL",
  "alert": "EXCESS_SPEED | NO_SIGNAL"
}
```

---

## ⚡ 4. WebSockets (Socket.io)

O frontend está preparado para ouvir os seguintes eventos para atualizações em tempo real:
- `monitoring-update`: Quando uma nova solicitação chega.
- `positions-update`: Quando as posições de telemetria mudam.
- `request-approved`: Quando o status de uma viagem muda para LIBERADO.

---
*Documento gerado para auxiliar o time de backend na migração do módulo GR.*
