# API Mobile WMS

Esta API permite ingestão, validação, confirmação e processamento de inventário capturado por dispositivos móveis.

## Autenticação e Tenant
- `x-tenant-id`: obrigatório em todas as chamadas (ex.: `default`).
- `x-api-key`: para endpoints Mobile (`ingest`, `confirm`). Quando ausente, é esperado JWT Bearer em `Authorization` (apenas nos endpoints protegidos).

## Endpoints

### POST `/api/wms/mobile/inventory/ingest`
- Headers: `x-tenant-id`, opcional `x-api-key`.
- Body:
  - `batch_id` (string): identificador do lote.
  - `items` (array): cada item contém `product_id` ou `product_code`, `bin_id` ou `bin_code`, `quantity`.
- Respostas:
  - `202 Accepted` quando todos válidos.
  - `207 Multi-Status` quando há erros parciais.
- Efeitos: registra em `wms_inventory_raw` e enfileira em `wms_inventory_queue` com status `received` ou `validated`.

### POST `/api/wms/mobile/inventory/validate`
- Headers: `x-tenant-id` e JWT (`Authorization: Bearer ...`).
- Body: `{ items: [...] }` como no `ingest`.
- Resposta: `200` se todos válidos, `207` se houver erros.

### POST `/api/wms/mobile/inventory/confirm`
- Headers: `x-tenant-id`, opcional `x-api-key`.
- Body: `{ batch_id, session_id }`.
- Resposta: `200` com `{ status: "confirmed" }`.
- Efeitos: atualiza status do lote para `confirmed` em `wms_inventory_queue`.

### GET `/api/wms/mobile/inventory/queue/pending`
- Headers: `x-tenant-id` e JWT.
- Retorna filas com status `received`, `validated` ou `confirmed`.

### POST `/api/wms/mobile/inventory/queue/process`
- Headers: `x-tenant-id` e JWT.
- Body: `{ limit?, session_id }`.
- Comportamento:
  - Processa itens de filas `validated` ou `confirmed`.
  - Persiste itens válidos em `wms_inventory_entries`, mesmo havendo erros parciais.
  - Marca fila como `done` e registra `persisted` e, se houver, `errors`.

### POST `/api/wms/inventory/start`
- Headers: `x-tenant-id` e JWT.
- Body: `{ type: "geral"|"ciclico", entries_count: number }`.
- Resposta: `200` com `{ created: { id, type, status } }`.

## Tabelas
- `wms_inventory_raw`: dados recebidos antes da validação.
- `wms_inventory_queue`: filas para processamento assíncrono (`received`, `validated`, `confirmed`, `processing`, `done`, `error`).
- `wms_inventory_entries`: entradas definitivas de inventário por sessão.
- `wms_mobile_devices`: dispositivos com `api_key` (única) e `last_seen`.

## Observações
- O processamento aceita erros parciais: itens válidos são persistidos e os erros são retornados na resposta.
- Auditoria é registrada via `AuditLogger` para operações chave.