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 telaCódigoUso
CompletoFULLtodos os SKUs do local (includeAllProducts)
ParcialPARTIALoperador inclui itens
CíclicoCYCLICgiro periódico
PontualSPOTum 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étodoRota
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.

Saiba mais

Ajuste · Kardex para conferir depois