Endereco
CRUD completo + consultas sobre endereços de estoque (tabela SBE).
POST e DELETE passam pelo MATA015 (MsExecAuto);
PUT trata exclusivamente bloqueio administrativo (BE_MSBLQL/BE_MSBLQD)
via RecLock. GET é um dispatcher: por chave composta, listagem
paginada por armazém, busca textual na descrição e consulta por id interno.
Vinculação com o ERP
Convenções
Chave externa composta. O endereço é identificado pelo par
BE_LOCAL (armazém, 2 chars) + BE_LOCALIZ (código,
até 15 chars). No POST ambos vão no body
(Armazem + Endereco). Em PUT/DELETE/GET-chave,
o BE_LOCALIZ vai no path e BE_LOCAL vai como
header HTTP local (mapeado para o
WSDATA homônimo).
Filial fixa pela URL. /api/99/01 seta empresa
99 e filial 01 automaticamente. Não envie Filial
no body do POST — o nome conflita com o WSDATA filial declarado
no WSRESTFUL (case-insensitive shadow no build 240223P; ver
ERROS.md#E13) e é ignorado.
Bloqueio TOTVS — gate de PUT. Em registro
bloqueado (BE_MSBLQL="1" ou dDataBase > BE_MSBLQD),
qualquer campo no payload PUT que não seja
BE_MSBLQL ou BE_MSBLQD retorna 422
(caminho de desbloqueio). Desbloqueie primeiro setando BE_MSBLQL="2".
Defaults aplicados pelo endpoint. No POST, campos opcionais
omitidos viram: Capacidade=0, Prioridade="ZZZ",
Altura/Largura/Comprimento/Perda=0, Status="1".
Fixtures sentinela. Smoke usa
Armazem="01", Endereco="TSTEND01", sufixo
_TEST_ na descrição. Trap DELETE no
test-endereco.sh limpa em caso de falha.
Endereco
CRUD + consultas sobre endereços físicos (SBE) com bloqueio TOTVSDescrição
Inclui um endereço físico via MATA015 Op=3. O
{localiz} no path é apenas o gatilho da WSSYNTAX
(build 240223P exige {param} dinâmico — ver
ERROS.md#E12/wssyntax-self); o valor efetivo vem do
campo Endereco no body.
Cenários cobertos: cen-1 (POST mínimo).
Path parameter
Endereco do body. Até 15 chars.Request body
EnderecoRequest.POST https://erpapi.jetme.com.br/api/99/01/WsSBE/INCLUIR/TSTEND01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json { "Armazem": "01", "Endereco": "TSTEND01", "Descricao": "Doca de descarga DOCA-01", "Capacidade": 100, "Prioridade": "AAA", "Status": "1" }
Respostas
data.armazem+data.endereco.Descrição
Atualiza somente o par de bloqueio TOTVS
(BE_MSBLQL e/ou BE_MSBLQD). Não passa pelo
MATA015: é RecLock direto na SBE — campos
administrativos fora do escopo do MVC.
Gate de bloqueio: em registro já bloqueado, qualquer
campo fora do par retorna 422. Desbloqueie primeiro
com BE_MSBLQL="2".
Cenários cobertos: cen-6 (bloqueio normal), cen-7 (gate bloqueado), cen-8 (bloqueio por data), cen-9 (desbloqueio total).
Path & Headers
Request body
BloqueioRequest.PUT https://erpapi.jetme.com.br/api/99/01/WsSBE/ALTERAR/TSTEND01 Authorization: Bearer … Content-Type: application/json local: 01 { "BE_MSBLQL": "1" }
PUT https://erpapi.jetme.com.br/api/99/01/WsSBE/ALTERAR/TSTEND01 Authorization: Bearer … local: 01 { "BE_MSBLQD": "2026-12-31" }
PUT https://erpapi.jetme.com.br/api/99/01/WsSBE/ALTERAR/TSTEND01 Authorization: Bearer … local: 01 { "BE_MSBLQL": "2", "BE_MSBLQD": "" }
Respostas
data.bloqueio_flag/data.bloqueio_data ecoam estado final.local ausente, body inválido ou nenhum dos campos de bloqueio no payload.BE_MSBLQL fora de "12"; OU BE_MSBLQD com data ISO inválida.Descrição
Exclui via MATA015 Op=5. Header local
(armazém) obrigatório. Endereço com saldo (SBF>0) é
rejeitado pelo MATA015 → 422.
Cenários cobertos: cen-10 (DELETE OK), cen-11 (404 negativo).
Path & Headers
local).Chamada de exemplo
DELETE https://erpapi.jetme.com.br/api/99/01/WsSBE/TSTEND01 Authorization: Bearer … local: 01
Respostas
local ausente.Descrição
Retorna 1 registro via DbSeek na chave composta
BE_FILIAL+BE_LOCAL+BE_LOCALIZ. Resposta inclui
BE_MSBLQL/BE_MSBLQD — admin consulta estado
de bloqueio sem precisar de PUT exploratório.
Cenário coberto: cen-2 (GET por chave).
Path & Headers
Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSBE/TSTEND01 Authorization: Bearer … local: 01
Respostas
EnderecoFull com todos os campos.local ausente.Descrição
Lista endereços com paginação, ordenados por
BE_LOCAL+BE_LOCALIZ. Use local
(query) para filtrar pelo armazém e cod para prefixo do
código (LIKE cod%). Campo count traz total
de registros que atendem o filtro (independente da página).
Cenário coberto: cen-3 (_list paginado).
Query parameters
BE_LOCAL).BE_LOCALIZ LIKE cod%).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSBE/_list?local=01&pageSize=5 Authorization: Bearer …
Respostas
Descrição
Faz LIKE '%q%' case-insensitive em BE_DESCRIC.
Resultado enxuto (3 campos: armazem, endereco,
descricao) — pensado para autocomplete em UI.
limit default 10, max 25.
Cenário coberto: cen-4 (_search).
Query parameters
BE_DESCRIC.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSBE/_search?q=DOCA&local=01 Authorization: Bearer …
Respostas
count reflete tamanho do data.q ausente.Descrição
Acesso direto via recno (R_E_C_N_O_) ou
msuid (BE_MSUID). Útil em delta-sync ou quando
outro endpoint retornou o id e você quer evitar o seek por chave.
Cenário coberto: cen-5 (_byid recno).
Query parameters
recno ou msuid.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSBE/_byid?tipo=recno&valor=25 Authorization: Bearer …
Respostas
Cenários
11 cenários cobertos portest-endereco.sh · all green em rev4-2026-05-14
TSTEND01 no armazém 01. Body com Armazem, Endereco, Descricao e demais opcionais. → POST/WsSBE/TSTEND01 com header local: 01. Retorna EnderecoFull com BE_MSBLQL/BE_MSBLQD expostos. → GET por chave?local=01&pageSize=5. Retorna data[] + page/pageSize/count/filters. → GET _list?q=TESTE&local=01. LIKE case-insensitive em BE_DESCRIC. → GET _search_list + consulta direta. → GET _byid{BE_MSBLQL:"1"} trava o endereço por flag (independe de data). → PUTBE_DESCRIC retorna 422. Gate força desbloqueio explícito antes de qualquer update administrativo. → PUT{BE_MSBLQD:"2026-12-31"}. A partir dessa data, U_C980Blq retorna bloqueado. → PUT{BE_MSBLQL:"2", BE_MSBLQD:""} num único PUT limpa flag e data. → PUTZZZZZZZZ não existe → resposta de erro estruturada. → DELETESchemas
Definições canônicas dos payloads/respostasFilial — conflita com WSDATA (E13 do ERROS.md).BE_FILIAL+BE_LOCAL+BE_LOCALIZ.BE_ ecoam o nome do dicionário SX3.snake_case, não BE_*)._byid._list e _search.count = total filtrado."armazem,endereco")."armazem=01").false.Pendências conhecidas
Limitações, melhorias previstas, gaps de coberturaAuth pendente em PUT/GET. O BE_USERLGI/BE_USERLGA
(logs de inclusão/alteração) não estão sendo populados — o RecLock do PUT só
mexe nos campos de bloqueio. Considerar adicionar BE_USERLGA := UsrRetName(__cUserID)
quando padrão de auditoria for definido.
Filtro por estado de bloqueio. _list ainda não expõe
?somenteAtivos=1 nem ?bloqueio=1|2. Cliente que quer só
endereços disponíveis precisa filtrar do lado dele via bloqueio_flag.
_search só na descrição. Não busca em BE_LOCALIZ (use
_list?cod=... para prefixo de código). Avaliar união após métricas de uso.
Validação de domínio do Status. POST aceita "1"
ou "2" sem rejeitar outros valores; MATA015 normalmente
rejeita, mas pode haver janela onde grava lixo (gatilho/X3 customizado). Plano:
adicionar fValDom antes do MsExecAuto (frente
FEAT-fValDom-status-sbe).