Produção, lotes e rastreio
Como o M3R controla matéria-prima, ordem de produção, lote, validade, recall e doação — sem ligar nada no tenant comercial por engano.
O ciclo comercial do M3R (compra → estoque → venda → fiscal → financeiro) não muda enquanto as flags industriais estão desligadas. O caminho industrial entra só onde o produto tem controle de lote e o tenant ligou a flag correspondente.
O que o módulo faz
Compras atualizam o lote na NF, o lote alimenta a ordem de produção, a OP gera o acabado com genealogia, a venda e a doação baixam o lote, e o recall congela a cadeia. A Central só lê — não tem flag.
| Etapa | O que o ERP passa a exigir | Flag |
|---|---|---|
| NF de entrada | Código de lote (e validade, se o produto controla validade) | industrial.lot-enforcement |
| Saída / OP | FEFO automático ou lote informado; reserva com lot_id | a mesma |
| Apontamento da OP | Consumo real por lote + lote do PA + genealogia | industrial.production-lot-consumption |
| Encerrar OP | Rendimento dentro da tolerância do BOM | industrial.mass-balance.enforce |
| NF de entrada (qualidade) | Lote nasce em quarentena | industrial.quality.inbound-quarantine |
| Campanha de recall | Congela lotes em RECALLED | industrial.recall.enabled |
| Doação | Baixa com origem DONATION, sem ajuste FAAJ01 | industrial.donation.enabled |
Telas
| Tela | Caminho |
|---|---|
| Central industrial | /apps/stock/central |
| Lotes | /apps/stock/lots |
| Rastreio de um lote | /apps/stock/lots/:id |
| Qualidade (quarentena / bloqueio) | /apps/stock/lots/qa |
| Recall | /apps/stock/recall |
| Doações | /apps/stock/donations |
| BOM | /apps/stock/bom |
| Ordem de produção | menu de estoque / MRP (OP) |
| Flags | /apps/feature-flags (aba overrides por tenant) |
A Central não mostra card de “OP bloqueada em QA”: ordem de produção não tem status de qualidade.
ATP e FEFO (API 1.0.169)
Disponível para atender não é só o último saldo do razão (FAPOB).
- Sem lote no produto:
FAPOB − reserva. - Com saldo em
FALOT01: lotesACTIVEnão vencidos − reserva — o mesmo critério do FEFO. QUARANTINE,EXPIRED,BLOCKED,RECALLEDficam fora.
Homologado em HML: pão com razão 0 e lote ACTIVE 180 UN → ATP 180. Farinha RECALLED 14 kg → ATP 0; FEFO recusa.
O que ainda não é automático
- Não há cron que marque lote vencido: use
POST /product-lot/:filialId/expireou o movimento já recusaexpiration_date < hoje. - Quarentena na entrada só existe com a flag de inbound ligada; senão o lote da NF nasce
ACTIVE. - Encerrar a campanha de recall não libera o lote. Liberação é
POST /product-lot/:id/releasecom motivo.
Leitura por papel
As seis chaves, o que cada uma muda e como ligar só no tenant.
CadastroProduto, lote/validade, depósito, BOM e tolerância.
OperaçãoNF → OP → apontamento → venda, com exemplos.
Qualidade e recallQuarentena, bloqueio, campanha e doação.
APIHeaders, rotas, corpos e recusas.
Go-liveOrdem de ligar, o que não copiar de HML e o que não vender como ANVISA.
CustomizaçãoIPs, eventos e o que o Core já chama.
