TransferenciaArmazem
Executa Transferência entre Armazéns (rotina automática
MATA241, modo 3) gerando movimentos SD3 e
atualizando saldos SB2 nos armazéns origem/destino.
Diferente da Desmontagem, MATA241 admite estorno
nativo via nOper=6 + marker AUTOESTORN=DOC —
por isso o endpoint segue o sub-caso 1.3 do PADRAO ("action + reverso
embutido"): expõe POST transferir e POST estornar,
sem PUT/DELETE genéricos.
SD3 é tabela de
movimento (sem D3_MSBLQL). O bloqueio
relevante está nos cadastros consumidos: SB1 (produto —
B1_MSBLQL é validado em pre-check 422 antes do
MATA241) e, indiretamente, NNR (armazém). Para
administrar bloqueio, usar os endpoints dos cadastros correspondentes.
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
Sem PUT/DELETE genéricos. Movimentações de estoque
são imutáveis: uma vez gravada, a linha SD3 só pode ser
revertida via estorno (POST /ESTORNAR/{doc}). Não há
PUT de linha nem DELETE direto — qualquer
tentativa cai no roteamento 404 do WSRESTFUL.
Geração de D3_DOC. Quando o payload
omite doc, o servidor gera o número via
GetSXENum("SD3","D3_DOC") com ConfirmSx8
em sucesso ou RollBackSx8 em erro. A resposta sinaliza
essa geração via data.auto = true.
Pre-checks antes do MsExecAuto.
O endpoint valida em 422 as FKs antes de delegar para
o MATA241: produto (SB1),
tipo de movimento (SF5), centro de custo (CTT,
se informado), OP (SC2, se informada) e endereço
(SBE, exigido apenas quando o local destino tem controle
de endereço ativo).
Estorno é por documento inteiro.
POST /ESTORNAR/{doc} usa o INDEX 4 da SD3
(FILIAL+NUMSEQ+CHAVE) para localizar todas as linhas do
movimento e chama MATA241 com nOper=6. Não
existe estorno parcial por linha. Se todas as linhas já estão com
D3_ESTORNO='S', responde 422.
Formato de datas. O campo emissao
do payload aceita apenas string no padrão
YYYYMMDD (8 dígitos, pattern ^\d{8}$),
mapeado para D3_EMISSAO. Datas de retorno no
Linha seguem o serializador Date-aware do
U_RestMontaRegistro.
Paginação e delta-sync em /_list.
Default orderBy=chave com page/pageSize
(default 50, máx 500). Para sincronização
incremental, use orderBy=recno com since /
cursor guiados pelo nextCursor retornado.
Movimentação
Transferir e estornar — operações que escrevem SD3 + saldo SB2Descrição
Cria movimento de transferência entre armazéns chamando
MATA241 com nOper=3 (transferir). Gera
uma ou mais linhas SD3 (uma por item) e atualiza
saldos SB2 nos armazéns origem e destino.
- Se
docfor omitido, o servidor gera viaGetSXENum("SD3","D3_DOC")comConfirm/RollBack. A resposta sinaliza isso emdata.auto = true. - Pre-checks (FK SB1/SF5/CTT/SC2/SBE) rodam antes do
MsExecAuto— falha de FK retorna 422 com motivo explícito. - Whitelist do payload: ver
TransferPayload.
Request body
tm, emissao, cc,
doc) + array itens com pelo menos um item.
POST https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "tm": "499", "emissao": "20991231", "itens": [ { "cod": "MP001", "local": "02", "endereco": "DEST001", "qtd": 1.0 } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "tm": "499", "emissao": "20991231", "cc": "", "itens": [ { "cod": "MP001", "local": "02", "qtd": 1.0 } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "tm": "ZZZ", "emissao": "20991231", "itens": [ { "cod": "MP001", "local": "02", "qtd": 1.0 } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "tm": "499", "emissao": "20991231", "itens": [ { "cod": "ZZZZZZZZ", "local": "02", "qtd": 1.0 } ] }
Respostas
ExecResponse com data.doc, data.linhas (qtde de linhas SD3 geradas) e data.auto = true quando o servidor gerou o número.MATA241 rejeitou a transferência (saldo insuficiente, parametrização inválida, controle de endereço ativo sem endereco informado). Tier: business-error.MsExecAuto ou da abertura de tabela.Descrição
Reverte um movimento de transferência inteiro chamando
MATA241 com nOper=6 e marker
AUTOESTORN=DOC. Todas as linhas SD3
do documento (localizadas via INDEX 4:
FILIAL+NUMSEQ+CHAVE) recebem
D3_ESTORNO='S' e os saldos SB2
origem/destino são restaurados aos valores anteriores.
Sem estorno parcial. Não é possível estornar
uma linha isolada — o estorno opera no documento como unidade.
Se todas as linhas já estiverem com D3_ESTORNO='S',
a resposta é 422.
Path parameter
D3_DOC da transferência a estornar (mesmo valor retornado em data.doc do POST original).Chamada de exemplo
POST https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem/ESTORNAR/000001234 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
EstornoResponse com data.linhas (linhas revertidas) e data.jaEstornadas (linhas que já estavam com D3_ESTORNO='S').doc ausente / mal-formado.MATA241 rejeitou o estorno (rastreabilidade SD4/SC2 trava a reversão). Tier: business-error.Consulta
GETs read-only — não tocam SD3 nem SB2Descrição
Retorna todas as linhas SD3 do documento, com
D3_ESTORNO indicando o estado de cada linha.
Aplica filtro de filial (xFilial("SD3")) e respeita o
whitelist de CAMPOS_GET_LIN definido no .prw.
Path parameter
D3_DOC da transferência.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem/000001234 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
doc ausente ou mal-formado.Descrição
Lista os documentos distintos de transferência
(não as linhas individuais — para isso use /{doc}).
Filtros combináveis por doc, produto,
emissao (formato YYYYMMDD) e
tm. Suporta dois modos de ordenação:
orderBy=chave(default) — paginação porpage/pageSize.orderBy=recno— delta-sync, usasince/cursorcomnextCursorretornado.
Query parameters
xFilial("SD3") da sessão.D3_DOC.^\d{8}$ (YYYYMMDD).SF5).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/WsTransferenciaArmazem/_list?tm=499&emissao=20991231&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem/_list?orderBy=recno&since=0&pageSize=200 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
data[] (array de ListItem), page, pageSize, count, opcionalmente nextCursor.orderBy inválido, pageSize > 500, emissao não-numérica).Descrição
Busca uma linha SD3 específica por id técnico —
útil para integrações que persistem a chave interna
(recno) ou o identificador universal
(D3_MSUID) e querem reconfirmar a linha sem
reconstruir D3_DOC + D3_NUMSEQ.
Query parameters
recnomsuidtipo=recno, string quando tipo=msuid).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem/_byid?tipo=recno&valor=1234 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsTransferenciaArmazem/_byid?tipo=msuid&valor=9f7a3e2c4b8d1a0e Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: Linha }.tipo/valor ausentes ou tipo fora do enum.msuid requer índice/coluna D3_MSUID não disponível no ambiente.Schemas
Definições canônicas — campos com origemSX3 rastreável
POST /WsTransferenciaArmazem. Cabeçalho
+ array de itens (pelo menos um). doc é opcional — o
servidor gera quando omitido.
GetSXENum("SD3","D3_DOC") e sinaliza com data.auto = true.SF5 (parametrizado para transferência interna).CTT. Quando informado, é validado em pre-check 422.YYYYMMDD. Pattern: ^\d{8}$.itens do payload. Cada item vira uma
linha SD3 com sua chave D3_DOC + D3_NUMSEQ.
SB1. Validado em pre-check 422.SBE).SC2). Validada em pre-check quando informada.exclusiveMinimum: 0.SD3 nos GETs
(/{doc}.linhas[], /_byid.data). Campos
retornados respeitam o whitelist CAMPOS_GET_LIN do
.prw.
SB1.B1_UM).SF5).SC2).CTT)."S" = linha estornada via POST /ESTORNAR.S" "RecNo).msuid./_list.data[]) —
uma entrada por documento distinto.
POST /WsTransferenciaArmazem.
data resume o documento gerado e marca via
auto se o servidor gerou o D3_DOC.
true.D3_DOC gerado.YYYYMMDD).SD3 geradas (par origem/destino conta como 2).true quando o D3_DOC foi gerado pelo servidor via GetSXENum.POST /WsTransferenciaArmazem/ESTORNAR/{doc}.
Informa quantas linhas foram revertidas e quantas já estavam
estornadas antes da chamada.
true.D3_DOC estornado.D3_ESTORNO='S' nesta chamada.D3_ESTORNO='S' antes da chamada (idempotência observada).data pode conter o
token interno da causa (ex: mensagem do NomeAutoLog do
MATA241) para tratamento programático.
false em erros.MsExecAuto do MATA241).