Protheus / Endereco https://erpapi.jetme.com.br/api/99/01 rev4-2026-05-14
rev4-2026-05-14 Protheus 12.1.33 (build 240223P) Empresa 99 · Filial 01

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.

Tabela mestre SBE Endereços de estoque
Rotina automática MATA015 TDN pageId=6087467
Wrapper AdvPL U_MT015Exc src/lib/MAT/MT015EXC.prw
Operações & modos
POST Op=3 · inclusão PUT RecLock direto DEL Op=5 · exclusão GET consulta direta SBE/SQL
Dependências de ambiente
Parâmetro · obrigatório
MV_LOCALIZ
controle de endereçamento físico ativo · valor esperado "S"
MATA015 rejeita com 422 quando desligado
Cadastro · pré-requisito
Armazém (NNR)
tabela NNR · NNR_CODIGO = BE_LOCAL
inclua via LocalEstoque antes
Padrão · bloqueio TOTVS
BE_MSBLQL / BE_MSBLQD
combobox pertence("12") (1=bloq, 2=ativo) + data ISO
helper U_C980Blq("SBE") em src/lib/CRM/CRM980EXC.prw
Integração
WMS / Logística
campos físicos (BE_ALTURLC/LARGLC/COMPRLC/CAPACID) alimentam alocação WMS quando SIGAWMS ativo

Endereco

CRUD + consultas sobre endereços físicos (SBE) com bloqueio TOTVS

Cenários

11 cenários cobertos por test-endereco.sh · all green em rev4-2026-05-14
cen-1 · POST cria endereço (201). Cria TSTEND01 no armazém 01. Body com Armazem, Endereco, Descricao e demais opcionais. → POST
cen-2 · GET por chave (200)./WsSBE/TSTEND01 com header local: 01. Retorna EnderecoFull com BE_MSBLQL/BE_MSBLQD expostos. → GET por chave
cen-3 · GET _list paginado (200). ?local=01&pageSize=5. Retorna data[] + page/pageSize/count/filters. → GET _list
cen-4 · GET _search por descrição (200). ?q=TESTE&local=01. LIKE case-insensitive em BE_DESCRIC. → GET _search
cen-5 · GET _byid por recno (200). Recno extraído do _list + consulta direta. → GET _byid
cen-6 · PUT bloqueio normal (200). {BE_MSBLQL:"1"} trava o endereço por flag (independe de data). → PUT
cen-7 · PUT em bloqueado tenta outro campo (422). Após cen-6, payload com BE_DESCRIC retorna 422. Gate força desbloqueio explícito antes de qualquer update administrativo. → PUT
cen-8 · PUT bloqueio por data (200). {BE_MSBLQD:"2026-12-31"}. A partir dessa data, U_C980Blq retorna bloqueado. → PUT
cen-9 · PUT desbloqueio total (200). {BE_MSBLQL:"2", BE_MSBLQD:""} num único PUT limpa flag e data. → PUT
cen-10 · DELETE remove (200). DELETE /WsSBE/TSTEND01 com header local: 01. → DELETE
cen-11 · DELETE inexistente (404). Cenário negativo: ZZZZZZZZ não existe → resposta de erro estruturada. → DELETE

Schemas

Definições canônicas dos payloads/respostas

Pendências conhecidas

Limitações, melhorias previstas, gaps de cobertura

Auth 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).