Empenho
CRUD de Empenho de Produção (tabelas SD4 + SDC
enderecos) via rotina automática MATA381
(MSExecAuto). Substitui a User Function de desktop
GAIZ_MATA381 (que era interativa). Identificador externo é
a chave composta natural da SD4 (índice 2):
filial-op-cod-trt-lotectl-numlote. Endereços (SDC)
vêm como sub-array enderecos dentro de cada item do payload.
Bloqueio TOTVS (MSBLQL/MSBLQD):
SD4 é tabela de movimento — sem bloqueio TOTVS aplicável
diretamente ao empenho. O bloqueio relevante é herdado dos
cadastros referenciados: produto (SB1 via
B1_MSBLQL, validado em pre-check 422) e ordem
de produção (SC2). Este endpoint não expõe
nem aceita campos D4_MSBLQL / D4_MSBLQD
por inexistirem no dicionário.
https://erpapi.jetme.com.br/api/99/01
Empresa 99 · Filial 01
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).
Convenções
Identificador externo. Todas as rotas
/WsEmpenho/<ACAO>/{key} usam a chave composta natural da
SD4 separada por hífen:
<filial>-<op>-<cod>-<trt>-<lotectl>-<numlote>.
As partes cod, trt, lotectl,
numlote podem ser vazias se o ambiente não controlar. Para
buscar pela chave técnica (recno ou msuid) use
/_byid?tipo=…&valor=….
Alteração usa nOper=2, não 4.
Diferente dos outros wrappers da biblioteca (FN040 / FN050 / MT103 usam
4 para alteração), o MATA381 do build 240223P
espera 2. O wrapper U_MT381Exc aceita
explicitamente 2/3/5 e rejeita
4.
Exclusão de endereço dentro de PUT. Em
alteração, cada item do array enderecos aceita um campo
opcional delete: true. Quando presente, a linha SDC
correspondente recebe a tag AUTDELETA="S" no array
MSExecAuto e o MATA381 exclui apenas aquele endereço, preservando os
demais. Em POST, delete:true é ignorado.
Modelagem nested. O MATA381 espera os endereços
acoplados a cada linha SD4 via tag AUT_D4_END —
não como entidade separada. O endpoint monta internamente o array no
formato
{ {"D4_OP",…}, {"D4_COD",…}, …, {"AUT_D4_END", aEnder} },
onde aEnder é um array de arrays com
DC_LOCALIZ/DC_QUANT e opcionalmente
AUTDELETA.
Paginação e delta-sync. /_list usa
page/pageSize (default 50, máx
500) com ordem por chave de negócio (índice 2). Para
sincronização incremental alterne para orderBy=recno e use
since/cursor conforme o nextCursor
retornado.
Identificadores técnicos. Toda resposta é
enriquecida com recno (sempre presente — RecNo()
do registro SD4 do primeiro empenho da OP) e, quando o dicionário expõe
via UPDDISTR, msuid / msuidt
(D4_MSUID / D4_MSUIDT). A filtragem dos
opcionais é feita por U_RestCamposOpc.
Empenho
CRUD por chave composta natural (SD4 idx 2) —filial-op-cod-trt-lotectl-numlote
Descrição
Inclui empenhos de produção via MATA381 em modo
3 (inclusão). A filial e a op vêm
no body. Cada item do array itens gera uma linha
SD4; cada elemento de itens[].enderecos gera
uma linha SDC acoplada via AUT_D4_END.
- Whitelist do payload: ver
EmpenhoPayload. - Sucesso devolve
recno/msuidda primeira linha SD4 da OP.
Request body
POST https://erpapi.jetme.com.br/api/99/01/WsEmpenho/INCLUIR Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "filial": "01", "op": "999998 01001", "itens": [ { "cod": "MP001", "local": "01", "data": "20991231", "qtdeori": 10.00, "quant": 10.00, "enderecos": [ { "localiz": "END01", "quant": 6.00 }, { "localiz": "END02", "quant": 4.00 } ] }, { "cod": "MP002", "local": "01", "data": "20991231", "qtdeori": 5.00, "quant": 5.00, "enderecos": [ { "localiz": "END01", "quant": 5.00 } ] } ] }
Respostas
MsExecAuto — produto inexistente, OP encerrada, saldo insuficiente, endereço inválido. Tier: business-error.Descrição
Variante de POST em que filial e
op vêm pela {key} do path — útil quando o
cliente já mantém a chave composta como identificador externo. As
partes adicionais de {key} (cod,
trt, lotectl, numlote) são
ignoradas na inclusão; o corpo continua trazendo o array
itens.
Path parameter
<filial>-<op>-<cod>-<trt>-<lotectl>-<numlote> — apenas filial e op são usados aqui.Request body
POST /WsEmpenho/INCLUIR. Se o body trouxer filial/op divergente da {key}, o endpoint resolve a divergência conforme a regra do .prw (consultar implementação).
POST https://erpapi.jetme.com.br/api/99/01/WsEmpenho/INCLUIR/01-999998 01001---- Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "filial": "01", "op": "999998 01001", "itens": [ { "cod": "MP001", "local": "01", "data": "20991231", "qtdeori": 10.00, "quant": 10.00, "enderecos": [ { "localiz": "END01", "quant": 10.00 } ] } ] }
Respostas
{key} fora do pattern. Tier: validation-error.MsExecAuto — ver descrição de POST /WsEmpenho/INCLUIR.Descrição
Retorna a linha SD4 mestre identificada pela chave composta e
todas as linhas SDC vinculadas (mesma combinação de filial / OP /
produto / TRT / lote-ctl / num-lote). Aplica filtro de filial
(xFilial("SD4")) e respeita o whitelist
CAMPOS_GET.
Path parameter
<filial>-<op>-<cod>-<trt>-<lotectl>-<numlote>. As partes cod, trt, lotectl e numlote podem ser vazias.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsEmpenho/01-999998 01001-MP001--- Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: EmpenhoConsulta } com empenho (campos D4_*) e enderecos (array de campos DC_*).{key} fora do pattern. Tier: validation-error.Descrição
Altera empenhos da OP via MATA381 em modo
2 (legado — não 4). Cada item de
enderecos aceita delete: true que marca a
linha SDC para exclusão via AUTDELETA="S". O
MsExecAuto aplica delta — itens não citados no payload
permanecem inalterados.
Path parameter
Request body
enderecos com delete:true são marcados para exclusão SDC. Ver convenções.
PUT https://erpapi.jetme.com.br/api/99/01/WsEmpenho/ALTERAR/01-999998 01001-MP001--- Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "filial": "01", "op": "999998 01001", "itens": [ { "cod": "MP001", "local": "01", "data": "20991231", "qtdeori": 10.00, "quant": 8.00, "enderecos": [ { "localiz": "END01", "quant": 8.00 }, { "localiz": "END02", "quant": 0, "delete": true } ] } ] }
Respostas
CrudResponse.{key} fora do pattern. Tier: validation-error.MsExecAuto — saldo insuficiente, OP encerrada, endereço inválido. Tier: business-error.Descrição
Exclui os empenhos da OP via MATA381 em modo
5. Remove as linhas SD4 e SDC vinculadas. Sem body —
a {key} identifica completamente o conjunto a apagar.
Path parameter
Chamada de exemplo
DELETE https://erpapi.jetme.com.br/api/99/01/WsEmpenho/EXCLUIR/01-999998 01001-MP001--- Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
CrudResponse.{key} fora do pattern. Tier: validation-error.MsExecAuto (OP encerrada, integração contábil bloqueia exclusão, etc.). Tier: business-error.Descrição
Busca um empenho por id técnico — útil para integrações que
persistem recno ou msuid e querem
reconfirmar a linha sem reconstruir a chave composta. Resposta
501 se o ambiente não tiver D4_MSUID via
UPDDISTR.
Query parameters
recnomsuidtipo=recno, string quando tipo=msuid).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsEmpenho/_byid?tipo=recno&valor=1234 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsEmpenho/_byid?tipo=msuid&valor=9f7a3e2c4b8d1a0e Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: EmpenhoConsulta }.tipo/valor ausentes ou tipo fora do enum. Tier: validation-error.msuid requer D4_MSUID publicado via UPDDISTR — indisponível neste ambiente.Listagem
Listagem paginada por filtros — ordem natural (chave) ou delta-sync (recno)Descrição
Lista linhas SD4 filtrando por qualquer combinação de
filial/op/cod/trt/lotectl/numlote.
Dois modos:
orderBy=chave(default) — paginação porpage/pageSize, ordem por índice 2.orderBy=recno— delta-sync, usasince/cursorcomnextCursorretornado.
Query parameters
1, mínimo 1).50, máx 500).chave.chaverecnoorderBy=recno).nextCursor da página anterior.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsEmpenho/_list?op=999998 01001&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsEmpenho/_list?orderBy=recno&since=0&pageSize=200 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
data (array de ListItem), orderBy, page, pageSize, count, opcionalmente nextCursor.orderBy inválido, pageSize > 500). Tier: validation-error.Schemas
Definições canônicas — campos com origemSX3 rastreável
POST e PUT. Cabeçalho
(filial, op) define o escopo; itens
traz cada linha SD4 com seu sub-array enderecos (SDC).
xFilial("SD4").C2_NUM + C2_ITEM + C2_SEQUEN).ItemEmpenho.SD4. O array enderecos
é acoplado via tag AUT_D4_END no MSExecAuto.
SB1). Produto bloqueado (B1_MSBLQL="1") é rejeitado em 422.SBE). Validado se B1_LOCALIZ="S".YYYYMMDD (8 dígitos).quant quando ausente. Deve ser > 0.EnderecoSDC.SDC acoplada a um ItemEmpenho via tag
AUT_D4_END. Em PUT, delete:true
gera AUTDELETA="S" no array MSExecAuto.
SBE).quant dos endereços normalmente fecha com a quant da linha SD4 pai.PUT: marca a linha SDC para exclusão via AUTDELETA="S". Ignorado em POST./{key} e /_byid.
Contém a linha mestre (empenho: campos D4_*)
e os endereços SDC vinculados (enderecos: campos
DC_*).
D4_* da linha SD4 (whitelist CAMPOS_GET).DC_*): DC_LOCALIZ, DC_QUANT, DC_NUMSERI, etc.D4_MSUID existe no dicionário (UPDDISTR aplicado).msuid./_list. Não inclui o
sub-array de endereços — para isso, fazer GET /{key}.
POST / PUT / DELETE.
data traz filial/op/linhas
+ ids técnicos (recno, msuid, msuidt) da primeira linha SD4 da OP.
true em respostas de sucesso.filial/op/linhas + ids técnicos. Em DELETE pode ser string vazia.data pode conter o
token interno da causa (ex: mensagem do NomeAutoLog do
MATA381) para tratamento programático.
false em erros.MsExecAuto do MATA381).