API industrial
Prefixo /api, headers de tenant, rotas de lote, ATP, OP, recall, doação e Central — com query params e corpos.
Base: {API}/api (HML local típico: http://localhost:5001/api). Swagger na própria API autenticada.
Headers
| Header | Quando |
|---|---|
Authorization: Bearer | sempre |
x-company-id | sempre na operação; obrigatório em POST de recall/doação se o JWT não tiver empresa |
x-filial-id | sempre na operação de estoque/OP/NF |
Content-Type: application/json | POST/PATCH |
IDs de filial, empresa e lote na URL são Hashids do ERP, não o inteiro interno — exceto onde a resposta FEFO devolve lotId numérico para o breakdown da OP.
Disponibilidade (ATP)
A rota /atp está registrada antes de /:productCode para o Nest não tratar atp como código de produto.
DTO relevante:
| Campo | Significado |
|---|---|
physical_stock | último FAPOB |
reserved_stock | FARES01 ACTIVE |
unavailable_lot_stock | QUARANTINE / EXPIRED / BLOCKED / RECALLED |
available_stock | se há FALOT01: ACTIVE não vencidos − reserva; senão razão − reserva − indisponível |
incoming_stock | NF CREATED ainda não confirmada |
atp | available_stock + incoming_stock |
POST /inventory/availability/bulk — { "filialId", "productCodes": [] } — mesma fórmula.
Lotes
FEFO preview não abate. quantity obrigatória e > 0. Sem lote ACTIVE suficiente → 400 Estoque insuficiente nos lotes do produto {code}. Faltam: N.
POST …/expire marca ACTIVE com expiration_date < hoje como EXPIRED. Não há cron ainda.
Ordem de produção
Report com consumo por lote: ver Operação. consumptions[].reason obrigatório em LOSS.
BOM vigente: GET /bom/{filialId}/active/{productCode}.
Recall e doação
Bodies em Qualidade. Flag OFF → 400 no POST de criação.
Central
Só leitura. omitted lista seções sem fonte (ex.: opsBlockedQa). Campos de produção/perda do dia só present quando há movimento no dia.
Flags
Detalhe em Flags.
NF de entrada
O contrato de create/confirm é o de documento de entrada já existente. No item:
| Campo | Uso industrial |
|---|---|
lotCode / nLote | código do lote |
expirationDate / dVal | validade |
manufactureDate / dFab | fabricação |
storeLocationCode | depósito |
Confirm é o que cria FALOT01 e o lot_id no FAPOB.
Exemplo curl (ATP)
Esperado com lote ACTIVE 180 UN: { "productCode": "HML-IND-PAO", "atp": 180 }.
