Inventario
Serviço REST para registro de contagens de inventário físico
(tabela SB7) via rotina automática MATA270.
Não é CRUD. É um endpoint de processamento dentro
do fluxo de inventário do Protheus — cobre exclusivamente a etapa de
lançamento e estorno de contagens.
Endpoint OAuth2
Sem credenciais? Você pode pegar o token rodando
./src/scripts/get-token.sh na biblioteca e
colar o access_token aqui no campo de refresh
(ou clique em "Logout" para limpar e voltar ao fake).
Vinculação com o ERP
Convenções
Endpoint de processo, não CRUD. Este serviço não cria
inventário do zero — pressupõe que a etapa 1 (geração via
MATA275/MATA276) já criou os registros em
SB7 a partir do saldo de SB2. Aqui se
lança a contagem efetiva (op=3) ou se estorna
(op=5). A etapa 3 (MATA340) aplica as diferenças no estoque.
Sem PUT. A rotina automática MATA270 não
expõe operação 4 (alteração) de forma confiável. Para corrigir uma
contagem já lançada, DELETE o lançamento e POST
o valor correto.
Chave do índice 1 da SB7 — B7_FILIAL +
B7_COD + B7_LOCAL + B7_DATA. O TDN
do MATA270 exige que esses campos cheguem no
MsExecAuto com tamanho exato de
SX3. O endpoint aplica PadR(..., TamSX3(...)[1])
automaticamente; clones devem manter essa garantia.
Formato de datas. B7_DATA e
B7_DTVALID trafegam como string AAAAMMDD
(ex: "20260507"). Conversão interna usa
sToD(cString). Datas com hífen (2026-05-07)
são rejeitadas.
Flag escolha. Cada produto/local/data pode
ter múltiplas contagens (1ª, 2ª, 3ª) — útil para
conferência cruzada. A flag escolha no payload indica qual
delas é a oficial (lEscolha no MATA270);
default true para a primeira contagem.
Path placeholder auto. Em
POST /WsSB7/LANCAR/{produto}, se você não quiser repetir o
produto na URL, use auto como placeholder e informe
B7_COD no payload. Se ambos vierem, o path
prevalece.
Contagem
Processamento — lançamento e estorno via MATA270Descrição
Executa MATA270 em operação 3 para
registrar a quantidade efetivamente contada no chão de fábrica
para um produto/local/data/documento.
Pré-validações aplicadas antes do MsExecAuto:
- Produto existe em
SB1e não bloqueado (B1_MSBLQL != "1"). B7_LOCALobrigatório e existe emNNR.BLQINVENT(produto, armazém, data)=.F.(respeitaB2_DTINV/B2_DINVFIM).- Existe saldo inicial em
SB2para o par produto+armazém (evita HELPMA270NSB2). Quando não há, criar viaWsMata220(saldo zerado) ouWsMata241(entrada). - Se
B1_RASTRO ∈ {L,S}:B7_LOTECTLeB7_DTVALIDobrigatórios; se=S, tambémB7_NUMLOTE. - Se
B1_LOCALIZ='S':B7_LOCALIZobrigatório. - Se
MV_CONTINV=.T.:B7_CONTAGEobrigatório (HELPMT270CNTOBR).
- Campos da chave (
B7_COD,B7_LOCAL,B7_DATA) sãoPadRno tamanho exato doSX3antes do seek. - Flag
escolhadeterminalEscolhanoMATA270(qual contagem é a oficial). - Path
{produto}="auto"delega aoB7_CODdo payload. B7_DOCtem 9 chars máximo — sentinels com mais que isso são truncados silenciosamente.
Path parameter
auto como placeholder se for informar via B7_COD no payload.Cenário
ContagemPayload) —
varia apenas a combinação de campos enviada.
Request body
placeholder ↔ valor original).
B1_RASTRO ∈ {L,S}; só aparece no cenário realistic).Exemplo da requisição (cenário ativo)
POST https://erpapi.jetme.com.br/api/99/01/WsSB7/LANCAR/PROD001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_LOCAL": "01", "B7_DATA": "20260507", "B7_DOC": "INVENT001_TEST_", "B7_QUANT": 10, "escolha": true }
POST https://erpapi.jetme.com.br/api/99/01/WsSB7/LANCAR/PROD001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_LOCAL": "01", "B7_DATA": "20260507", "B7_DOC": "INVENT001_TEST_", "B7_QUANT": 125.5, "B7_LOTECTL": "LT2026A", "B7_DTVALID": "20271231", "escolha": true }
POST https://erpapi.jetme.com.br/api/99/01/WsSB7/LANCAR/PROD001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_LOCAL": "01", "B7_DATA": "20260507", "B7_DOC": "INVENT001_TEST_", "B7_QUANT": 12, "escolha": false }
Respostas
CrudResponse com data contendo a chave composta gravada.AAAAMMDD). Tier: validation-error.SB1, armazém ausente/inválido em NNR, bloqueio BLQINVENT, saldo inicial ausente em SB2 (HELP MA270NSB2), rastro/endereço/contagem obrigatórios omitidos, ou rejeição pelo MsExecAuto do MATA270. Tier: business-error.Descrição
Altera apenas campos do whitelist
CAMPOS_PUT. A chave (B7_COD/B7_LOCAL/B7_DATA/B7_DOC)
é imutável: identidade vem da URL; se vier no
payload, é silenciosamente ignorada.
Campos read-only (cinza na tela ALTERAR padrão) recusados:
B7_DESC, B7_DTVALID, B7_ORIGEM,
B7_STATUS, B7_SLDTERC.
Pré-condição: B7_STATUS != "2".
Inventário já processado retorna 422.
Path parameters
AAAAMMDD).Cenário
Request body — campos editáveis
S/N/espaço).Exemplo da requisição (cenário ativo)
PUT https://erpapi.jetme.com.br/api/99/01/WsSB7/ALTERAR/MP01/01/20260513/T130821 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_QUANT": 99.5 }
PUT https://erpapi.jetme.com.br/api/99/01/WsSB7/ALTERAR/MP01/01/20260513/T130821 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_QUANT": 99.5, "B7_ESCOLHA": "S" }
PUT https://erpapi.jetme.com.br/api/99/01/WsSB7/ALTERAR/MP01/01/20260513/T130821 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_ESCOLHA": "S" }
PUT https://erpapi.jetme.com.br/api/99/01/WsSB7/ALTERAR/MP01/01/20260513/T130821 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "B7_QUANT": 99.5, "B7_TIPO": "MP", "B7_CONTAGE": "001", "B7_ESCOLHA": "S" }
Respostas
data.alterados traz o número de campos efetivamente atualizados (0 = nenhum campo do whitelist veio no payload).B7_STATUS=2). Alteração não permitida. Tier: business-error.Descrição
Exclusão lógica direta (RecLock/DbDelete
em transação). A op=5 do MATA270 é silenciosa
no build 240223P (retorna OK sem marcar D_E_L_E_T_), por isso a
biblioteca aplica o delete sem passar pela rotina automática.
Pré-condição: B7_STATUS != "2".
Inventário já processado pelo MATA340 retorna
422 — para estornar, use WsMata241
sobre o movimento INVENT em SD3.
Path parameters
PadR(TamSX3("B7_COD")).PadR(TamSX3("B7_LOCAL")).AAAAMMDD. (Nome dataref porque data é palavra reservada em WSDATA.)TamSX3("B7_DOC")).Cenário
Exemplo da requisição (cenário ativo)
DELETE https://erpapi.jetme.com.br/api/99/01/WsSB7/EXCLUIR/MP01/01/20260513/T130821 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
CrudResponse.AAAAMMDD, segmento ausente). Tier: validation-error.B7_STATUS=2). Para estornar, use WsMata241 sobre o movimento INVENT em SD3. Tier: business-error.Consulta
Leitura de lançamentos já gravados em SB7Descrição
Retorna todos os lançamentos de contagem registrados em
SB7 para o produto informado, na filial corrente
(xFilial("SB7")). Útil para validar visualmente uma
contagem recém-lançada ou para auditar histórico de inventário do
produto.
Path parameter
B7_COD.Cenário
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/PROD001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
SB7 na filial corrente. Tier: not-found.Descrição
Listagem ancorada em doc + contagem
(ambos obrigatórios). Filtros adicionais opcionais:
cod (prefixo), loc, dt,
lote, endereco.
Útil para conferir uma rodada específica (1ª/2ª/3ª) sob um único documento de inventário.
Cenário
Query parameters
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/_porDoc?doc=INVENT001&contagem=001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/_porDoc?doc=INVENT001&contagem=001&cod=MP&loc=01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
doc ou contagem ausentes.Descrição
Lista todos os lançamentos com B7_STATUS != "2"
(ainda não processados pelo acerto MATA340).
Cada item devolve B7_DOC + B7_CONTAGE para o
front saber o que ainda precisa inventariar/processar.
Cenário
Query parameters (todos opcionais)
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/_pendentes Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/_pendentes?doc=INVENT001&dtIni=20260501&dtFim=20260531 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
B7_DOC + B7_CONTAGE para identificação.Descrição
Lista lançamentos de inventário com filtros opcionais por produto (prefix), local e data (exata ou intervalo).
- Combinação
dt= data exata;dtIni/dtFim= intervalo (inclusive). - Quando
dté informado,dtIni/dtFimsão ignorados. - Paginação por
page/pageSize(default50, máx500).
Query parameters
B7_COD.AAAAMMDD.AAAAMMDD). Ignorado se dt presente.AAAAMMDD), inclusive.1).50, máx 500).Cenário
cod (prefixo de
B7_COD), loc (armazém exato), dt
(data exata) ou dtIni/dtFim
(intervalo). page e pageSize para
paginação.
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/_list?loc=01&dtIni=20260501&dtFim=20260531&pageSize=100 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSB7/_list?cod=PROD&dt=20260507 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
pageSize > 500).Schemas
Definições canônicas — campos com origemSX3 rastreável
/{produto} e
/_list). Campos efetivamente serializados dependem
de CAMPOS_GET definido no .prw.
NNR.AAAAMMDD.B1_RASTRO).AAAAMMDD).POST /WsSB7/LANCAR/{produto}. Whitelist
CAMPOS_ALLOW + flag de controle escolha.
Campos da chave (B7_COD, B7_LOCAL,
B7_DATA, B7_DOC) são obrigatórios; o
endpoint aplica PadR no tamanho do SX3.
{produto} ≠ auto; nesse caso o path prevalece.NNR).AAAAMMDD._TEST_ para limpeza trivial.B1_RASTRO=L).AAAAMMDD).lEscolha no MATA270. true = contagem oficial; false = contagem auxiliar (2ª, 3ª, conferência cruzada).POST e DELETE.
Em POST, data contém a chave composta gravada
em SB7; em DELETE, geralmente string vazia.
true em respostas de sucesso.POST, identificação da chave composta. Em DELETE, vazia ou objeto auxiliar.data pode conter o token
interno da causa (ex.: log do NomeAutoLog do
MATA270) para tratamento programático.
false em erros.MsExecAuto).Cenários
Catálogo de combinações de payload reconhecidas pelos métodos. Cada cenário usa o mesmo schema mas demonstra um uso típico distinto.B7_LOCAL, B7_DATA,
B7_DOC) + B7_QUANT. Sem lote, sem
endereço, sem contagem numerada (MV_CONTINV=.F.).
Produto declarado via path. escolha=true marca
como contagem oficial.
Quando usar: inventário simples, produto sem rastro/endereço, contagem única.
Resultado: 201 com envelope
CrudResponse trazendo a chave gravada.
NNR e ter saldo inicial em SB2.AAAAMMDD.true = contagem oficial.B1_RASTRO=L ou S). Acrescenta
B7_LOTECTL e B7_DTVALID (ambos
obrigatórios pela política do MATA270).
Quando usar: matérias-primas com rastreabilidade, medicamentos, perecíveis.
Pré-validação: se o produto não controla lote, o endpoint rejeita 422 antes do
MATA270 (evita HELP A270LOTEIG
opaco).
AAAAMMDD).AAAAMMDD.B1_RASTRO=S.true.escolha=false. Útil para conferência cruzada
quando a primeira contagem foi divergente do sistema.
Quando usar: processo de "dupla contagem"; só a contagem com
B7_ESCOLHA="S"
participa do acerto do MATA340.
Pré-requisito: existe registro anterior em SB7 com mesma chave;
MV_CONTINV pode estar
ligado para diferenciar via B7_CONTAGE.
false indica que esta NÃO é a oficial.B7_QUANT de uma contagem já lançada.
Pré-condição:
B7_STATUS != "2"
(não processado pelo MATA340). Senão retorna 422.
B7_QUANT + B7_ESCOLHA="S").
Quando usar: contagens únicas, sem rodadas múltiplas — evita duas requisições (uma para qty, outra para selecionar).
B7_QUANT.
Quando usar: o
MATA340 só seleciona automaticamente quando
todas as contagens são equivalentes; havendo divergência,
é necessária seleção manual via este cenário.
Próximo passo: consultar
GET /_divergencias
(pendência) antes de
selecionar.
CAMPOS_PUT. Útil
para correções administrativas amplas. Campos read-only
(B7_DESC, B7_DTVALID,
B7_ORIGEM, B7_STATUS,
B7_SLDTERC) são recusados;
chave da URL é imutável (se vier no payload, é ignorada).
S/N/' ').produto/local/dataref/doc).
Sem body.
Pré-condição:
B7_STATUS != "2". Inventário já processado
pelo MATA340 exige estorno via
WsMata241 sobre o movimento
INVENT em SD3 — não é possível DELETE direto
no SB7.
/_list ou /_porDoc.
Quando usar: conferir todos os itens de uma rodada específica (ex.: 1ª contagem do documento INVENT001).
001).doc + contagem obrigatórios; refine
com filtros opcionais: produto (prefixo), armazém, data
exata, lote, endereço. Todos exatos exceto
cod.
B7_STATUS != "2" (não processadas pelo
MATA340). Primeira página, default 50 itens.
Quando usar: dashboard / monitor do progresso de inventário.
page/pageSize) para conjuntos grandes.Quando usar: follow-up de um inventário específico — saber o que ainda falta processar.
AAAAMMDD).AAAAMMDD).MP).