SaldoEndereco
Consulta read-only de saldo por endereço (tabela SBF,
família WMS). Chave inclui produto + armazém + endereço (BF_LOCALIZ),
com lote/sub-lote/série opcionais via query. Saldo disponível =
BF_QUANT - BF_EMPENHO (quando o campo existir).
Não há POST/PUT/DELETE: movimentação
em endereço é gerada por documentos WMS (acerto, transferência, separação).
Endpoint OAuth2
Token via ./src/scripts/get-token.sh.
Vinculação com o ERP
Convenções
Endpoint read-only. Movimentação em endereço acontece
por documentos WMS (acerto, transferência interna, separação). Esta API
não escreve em SBF.
Chave composta extensa. Rota canônica
/WsSBF/{produto}/{armazem}/{endereco} (3 segmentos
obrigatórios). lote, subLote e serie
são opcionais via query string. Sem eles, faz prefix-seek pelo
endereço e devolve o primeiro match.
Endereçamento exige WMS. Em armazéns sem WMS,
SBF tipicamente fica vazio — o saldo agregado é o de
SB2 (sem endereço). Esta
API só faz sentido em filiais com endereçamento ativo.
Bloqueio TOTVS não se aplica. Sem *_MSBLQL/*_MSBLQD
em SBF. Bloqueio de endereço (manutenção, quarentena WMS)
é controlado em outras tabelas (SBJ, etc.), fora do escopo deste endpoint.
Paginação e delta-sync. /_list +
atalhos compartilham orderBy=chave (default; índice 2)
ou orderBy=recno com cursor.
Saldo
Consulta por endereço específicoDescrição
Saldo de um produto em um endereço específico. Lote, sub-lote e série são opcionais via query — sem eles, faz prefix-seek pelo endereço e retorna o primeiro registro.
disponivel = BF_QUANT − BF_EMPENHO
(este último só quando o campo existir no dicionário).
Path parameters
Cenário
Query parameters
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/MP001/01/A01-01-001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success, data: SaldoSBF }.Descrição
Busca o registro por RecNo(). Útil para consumers que persistem o id técnico após uma listagem.
Cenário
Query parameters
recno.recnoExemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/_byid?tipo=recno&valor=9012 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
Respostas
Listagem
Paginação e filtros pré-definidosDescrição
Lista registros de SBF com filtros opcionais por
produto, armazem, endereco,
lote e somenteComSaldo.
Particularidade do índice. O índice 2 da SBF
tem BF_LOCALIZ em posição não-prefixa (vem após
lote/sub-lote/prior). Por isso filtro por endereço sem produto
faz scan-full com check em memória.
Cenário
Query parameters
BF_LOCAL.BF_LOCALIZ. Sem prefixo no índice — filtra em memória.BF_QUANT - BF_EMPENHO > 0.CAMPOS_GET.1.50, máx 500.chave.chaverecnoExemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/_list?produto=MP001&armazem=01&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/_list?produto=MP001&somenteComSaldo=true Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/_list?orderBy=recno&cursor=9012&pageSize=200 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
Respostas
Descrição
Atalho — todos endereços que têm saldo do produto. Equivale a /_list?produto={produto}.
Path parameter
Cenário
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/porProduto/MP001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
Respostas
Descrição
Rastreabilidade física do lote — onde fisicamente esse BF_LOTECTL está. Custo de scan-full sem produto.
Path parameter
Cenário
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/porLote/LOTE001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
Respostas
Descrição
Inventário completo de endereços do armazém. Pesado em ambientes grandes; usar orderBy=recno.
Path parameter
Cenário
Exemplo da requisição (cenário ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsSBF/porArmazem/01?orderBy=recno&pageSize=500 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
Respostas
Schemas
Definições canônicas — campos com origemSX3 rastreável
GET /WsSBF/{produto}/{armazem}/{endereco}.
Campos data e empenho são opcionais (FieldPos defensivo).
quantidade - empenhada./_byid. Inclui empenhada e disponivel calculados.BF_EMPENHO.page só em orderBy=chave; nextCursor só em orderBy=recno.orderBy=chave.chaverecnoCenários
Catálogo de combinações reconhecidas. Endpoint read-only.BF_MSUID ausente no dicionário desta base — tipo=msuid não suportado (ver Pendências).orderBy=chave + page/pageSize. Filtros opcionais; endereço sem produto faz scan-full.BF_QUANT - BF_EMPENHO > 0. Útil para separação WMS.orderBy=recno + cursor; sincronização incremental.Pendências conhecidas (rev3)
BF_MSUID ausente nesta base. Dicionário
padrão TOTVS de SBF não traz BF_MSUID.
_byid só aceita tipo=recno; tipo=msuid
retornaria 501 se exposto. Requer UPDDISTR + nova rota
para implementar a busca via MSUID.
Volumetria muito alta em SBF. Em armazéns com
endereçamento granular (porta-pallet, picking, gôndola), SBF
pode ter milhões de linhas (uma por produto × endereço × lote × série).
PAGE_SIZE_MAX=500 evita OOM mas listagens totais exigem
paginação cuidadosa por orderBy=recno + cursor.
Reports analíticos: usar DW (src/dw/).
Endereço fora do prefixo do índice. O índice 2 da
SBF tem BF_LOCALIZ após lote/sublote/prior — filtro por
endereço sem produto faz scan-full filtrando em memória. Para
consultas frequentes por endereço, considerar a criação de índice
adicional BF_FILIAL+BF_LOCAL+BF_LOCALIZ (não-padrão).
Bloqueio MSBLQL/MSBLQD não aplicável. Saldo em
endereço é resultado de movimentação WMS. Bloqueio de endereço
(manutenção, quarentena, inventário rolando) vive em outras tabelas WMS
(SBJ, etc.), fora do escopo deste endpoint.
Sem _search. Autocomplete de endereço
não exposto. Quando necessário, listar por /porArmazem e
filtrar no front.
Concorrência com movimento WMS. Snapshot do
DbSeek; operações concorrentes (separação, acerto,
transferência interna) podem alterar BF_QUANT entre a
leitura e o uso pelo consumer. Para alocação crítica, ler dentro do
mesmo processo do movimento.