Inventário físico
Dúvida: como contar o armazém, revisar divergência e acertar o saldo do sistema com o físico.
Dúvida: como fazer inventário no M3R?
Ambiente: Estoque → Inventário (/apps/stock/inventory). Detalhe /apps/stock/inventory/[id]. Origem dos movimentos gerados: INVENTORY_COUNT (via ajuste da aprovação).
Pré-requisitos: armazém; produtos da mesma empresa da filial (nunca cruzar SKU de outro tenant pelo código). Permissão inventory.
Tipos de contagem
| Tipo na tela | Código | Uso |
|---|---|---|
| Completo | FULL | todos os SKUs do local (includeAllProducts) |
| Parcial | PARTIAL | operador inclui itens |
| Cíclico | CYCLIC | giro periódico |
| Pontual | SPOT | um SKU / auditoria |
Passo a passo
1. Criar (Rascunho)
Novo na lista. Campos: Local, Contador (funcionário), Tipo, Observações, incluir todos os produtos (completo). Salvar → DRAFT. Ainda não congela venda automaticamente: planeje a operação (não fature o armazém no meio da digitação).
PDF da folha: POST /inventory-count/detail/:id/print-pdf (serviço farmus-reports).
2. Iniciar (Em andamento)
No detalhe, iniciar contagem → IN_PROGRESS. Informe quantidade contada por item (paginação, filtro “só não contados”, busca).
Itens extras (parcial/spot): POST /inventory-count/detail/:id/items. Remover: DELETE .../items/:itemId (rascunho).
3. Finalizar digitação (Contado)
Status COUNTED. Abra a revisão de divergências.
Diferença na tela de revisão = quantidade contada − snapshot (systemQuantity no início da contagem).
Ao aprovar, o sistema ajusta para a quantidade contada a partir do saldo atual (não reaplica o delta antigo). Se o saldo andou entre o snapshot e a aprovação, o movimento usa o agora.
4. Aprovar
APPROVED — gera o ajuste vinculado (adjustmentId). Retry não duplica: se já existe ajuste APPROVED daquela contagem, só marca a contagem aprovada. Movimentos na mesma TX; falha = rollback.
Cancelar: status CANCELLED (não aplica saldo).
Grade da lista
Código, local, status, contador, data da contagem, criado em. Abas por status.
API (prefixo /inventory-count)
| Método | Rota |
|---|---|
GET | /:filialId |
POST | /:filialId |
GET | /detail/:id · /detail/:id/summary · /detail/:id/items |
GET | /detail/:id/available-items (parcial/spot) |
POST | /detail/:id/items |
DELETE | /detail/:id/items/:itemId |
GET | /divergence/:id |
POST | /detail/:id/print-pdf |
PATCH | /:id (observações) |
Transições start/finish/approve: ver Swagger (inventory-count) — a UI chama os POSTs de workflow do mesmo controller.
