TransferenciaEstoque
Transferência de estoque entre armazéns via MATA261
(Modelo 2) — escreve direto em SD3 sem
gerar SD1/SD2 nem permitir estorno
automático pela própria rotina. O endpoint cobre dois fluxos sob o
mesmo WSRESTFUL: TRANSFERIR/{produto}
(inclusão, op=3) e ESTORNAR/{doc} (estorno nativo via
MTA260+MV_PAR04, op=6).
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
Modelo 1 vs Modelo 2. Use TransferenciaArmazem
(MATA241, Modelo 1) quando o processo exigir geração de
SD1/SD2 e estorno nativo via reversão automática.
Este endpoint (Modelo 2) faz movimento direto em
SD3 e não gera reverso pelo próprio fluxo — o cancelamento é
uma operação distinta (ESTORNAR).
Roteamento por verbo na URL. O mesmo
WSRESTFUL serve dois fluxos diferenciados pelo penúltimo
segmento do path: /WsMata261/TRANSFERIR/{produto} aciona o
fluxo de inclusão; /WsMata261/ESTORNAR/{doc} aciona o
estorno. O wrapper lê aURLParms[Len()] (último) e
aURLParms[Len()-1] (verbo).
Rastro e localização. Os campos opcionais
Lote, SubLote, Validade,
EndOrigem, EndDestino são condicionalmente
obrigatórios em função de B1_RASTRO e
B1_LOCALIZ do produto. A regra é aplicada pelo helper
U_RstValRas antes do MsExecAuto — payload
incompleto retorna 422 com motivo explícito.
Formato de validade. Validade entra como
string de 8 dígitos no formato YYYYMMDD (não ISO). Conversão
interna usa SToD(); string vazia é aceita quando o produto
não controla rastro.
CriarSB2 aceito porém ignorado. O campo
existe no contrato por compatibilidade com clientes antigos, mas o
comportamento foi removido na rev2 — chamar CriaSB2()
dentro da thread REST do build 240223P invalidava o Self.
Criar saldo zerado em armazém destino é tarefa transversal
(MATA225) fora do escopo deste endpoint.
Quirk do estorno — HTTP 500 com efeito aplicado. No
build 240223P, o MsExecAuto em op=6 do MATA261
invalida a thread REST após gravar D3_ESTORNO="S". O
cliente deve confirmar o resultado consultando
SD3 (ou o endpoint irmão WsTransferenciaArmazem)
depois de chamar ESTORNAR. Retorno 200 indica sucesso
confirmado pelo wrapper; 500 sem body também é compatível com
sucesso — não retentar sem verificar.
Movimentação
Transferência (Modelo 2) e estorno do documentoDescrição
Executa transferência de estoque entre dois armazéns via
MATA261 em modo 3
(MODEL_OPERATION_INSERT) — escreve um movimento direto
em SD3 sem gerar nota. Operação irreversível
pelo próprio fluxo: use o endpoint ESTORNAR para
cancelar, ou consulte os não-objetivos antes de planejar correção.
- Lote/validade/endereço validados pelo wrapper
U_RstValRasantes doMsExecAuto. CriarSB2: trueaceito no contrato porém ignorado — ver Convenções.
Path parameter
SB1 com saldo em LocOrigem.Request body
TransferenciaPayload.
Campos condicionalmente obrigatórios em função de B1_RASTRO e B1_LOCALIZ.
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/TRANSFERIR/PA001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "LocOrigem": "01", "LocDestino": "02", "Quantidade": 10.0, "EndOrigem": "", "EndDestino": "", "CriarSB2": false }
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/TRANSFERIR/PA001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "LocOrigem": "01", "LocDestino": "02", "Quantidade": 10.0, "EndOrigem": "", "EndDestino": "", "Lote": "LOTE001", "Validade": "20271231", "CriarSB2": false }
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/TRANSFERIR/PA001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "LocOrigem": "01", "LocDestino": "02", "Quantidade": 10.0, "EndOrigem": "END001", "EndDestino": "END002", "CriarSB2": false }
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/TRANSFERIR/PA001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "LocOrigem": "01", "LocDestino": "02", "Quantidade": 10.0, "EndOrigem": "END001", "EndDestino": "END002", "Lote": "LOTE001", "Validade": "20271231", "CriarSB2": false }
Respostas
TransferenciaOk com produto, armazéns, quantidade e (quando aplicável) lote/validade.Validade fora do formato YYYYMMDD. Tier: validation-error.SB8, endereço inválido em SBE, falha do MsExecAuto (saldo insuficiente, armazém inativo, etc). Tier: business-error.Descrição
Estorna um documento SD3 previamente incluído pelo
TRANSFERIR — chama MATA261 em modo
6 com a pergunta MTA260 preenchida via
MV_PAR04 (1=DOC, 2=ITEM). Disponível a partir do
release 12.1.2210+ (DT DMANMAT01-34333). Aplica
D3_ESTORNO="S" nas linhas alvo.
Quirk 240223P. A operação op=6 invalida a thread
REST após gravar no banco — o response pode chegar como
HTTP 500 sem corpo JSON apesar do estorno ter sido aplicado.
O cliente deve confirmar via consulta a SD3 antes de
retentar. Ver Convenções.
Path parameter
SD3 gerado pelo TRANSFERIR. Sequencial controlado pelo Protheus.Request body
EstornoPayload.
Sem body, default tipo="DOC".
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/ESTORNAR/000000001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/ESTORNAR/000000001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "tipo": "DOC" }
POST https://erpapi.jetme.com.br/api/99/01/WsMata261/ESTORNAR/000000001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "tipo": "ITEM" }
Respostas
EstornoOk.{doc} vazio ou JSON inválido no body opcional. Tier: validation-error.MATA261 rejeitou. Tier: business-error.SD3 antes de retentar.Schemas
Definições canônicas — campos com origemSX3 rastreável
TRANSFERIR. Filial,
LocOrigem, LocDestino e
Quantidade sempre obrigatórios. Os demais são
condicionalmente obrigatórios em função de B1_RASTRO e
B1_LOCALIZ do produto — ver Convenções.
"01".SB2 ainda — ver CriarSB2.0.001).B1_LOCALIZ="S"; validado em SBE. Default "".B1_LOCALIZ="S". Default "".B1_RASTRO≠"N". Quando informado, validado em SB8 do armazém origem. Default "".B1_RASTRO="S". Default "".B1_RASTRO≠"N". Formato YYYYMMDD (não ISO). Pattern: ^[0-9]{8}$. Default "".false.ESTORNAR. Quando omitido, o wrapper
assume tipo="DOC".
MV_PAR04 da pergunta MTA260. Default "DOC".DOCITEMtrue em sucesso."Transferencia concluida.".DToS — formato YYYYMMDD. Presente apenas quando informado.ESTORNAR quando o wrapper consegue retornar
200. Em caso de 500 com efeito aplicado (quirk 240223P), nenhum body
JSON estruturado é entregue.
true."Estorno concluido (modo DOC)." ou "... (modo ITEM)."."DOC" ou "ITEM".data pode conter o
token interno da causa (ex: log do MsExecAuto) para
tratamento programático.
false em erros.MsExecAuto).