MovimentacaoInterna
Registra e estorna movimentações internas de estoque (tabela SD3)
via MsExecAuto sobre a rotina padrão MATA241.
O POST inclui o documento (Op=3) e devolve o
D3_DOC gerado por NEXTNUMERO; o PUT
estorna um item específico (Op=6) por contra-lançamento — não
exclui o registro original.
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
Geração do número do documento. O endpoint sempre gera
D3_DOC via NEXTNUMERO("SD3", 2, "D3_DOC", .T.).
O {doc} no path do POST é apenas placeholder —
envie AUTO. O número real volta em data.doc.
Estorno é alteração de estado, não exclusão. O
PUT /WsMata241/ESTORNAR/{numseq} cria um movimento inverso na
SD3 via MsExecAuto Op=6; o registro
original permanece, marcado pelo Protheus com D3_ESTORNO.
Por isso o verbo é PUT (não DELETE).
Chave do item de estorno. A linha SD3 é
localizada por D3_FILIAL+D3_COD+D3_LOCAL+D3_NUMSEQ
(DbSetOrder(3)). O {numseq} no path é o
discriminador exigido pelo build 240223P; Codigo,
Local e NumSeq precisam estar no body também.
Campos condicionais por rastro. O item exige
Lote e Validade quando B1_RASTRO="L";
adiciona SubLote quando B1_RASTRO="S"; exige
Localizacao quando B1_LOCALIZ="S". Quando o
Lote for informado, ele é validado em SB8 para o
Armazem do item. Validação acontece em U_RstValRas
antes do MsExecAuto; falha retorna 422.
Formato de Validade. String YYYYMMDD
(8 dígitos exatos, sem hífen). Strings com tamanho diferente, ou que não
representem data válida, voltam 400 com a mensagem do item.
Mensagens de erro do MATA241. Quando a rotina automática
rejeita (TM inválido, produto não cadastrado, saldo insuficiente, item já
estornado, etc.), o log do MsExecAuto é colocado em
message com status 422.
MovimentacaoInterna
Inclusão (Op=3) e estorno (Op=6) de movimentação interna de estoqueDescrição
Inclui uma nova movimentação interna na SD3 via
MATA241 Op=3. O cabeçalho é montado a partir
de Filial, TipoMov, OrdemProducao,
CentroCusto e Identificador; cada item do array
Itens vira uma linha SD3. O D3_DOC
é gerado pelo servidor (NEXTNUMERO) e devolvido em
data.doc.
- Body schema:
MovimentacaoInternaRequest. - Validação condicional de rastro/localização via
U_RstValRas(consultaSB1,SB8,SBE).
Path parameter
Self). Cliente envia AUTO — o servidor gera D3_DOC via NEXTNUMERO.Request body
MovimentacaoInternaRequest.
POST https://erpapi.jetme.com.br/api/99/01/WsMata241/INCLUIR/AUTO Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "TipoMov": "001", "Itens": [ { "Produto": "PROD001", "Unidade": "UN", "Quantidade": 1.0, "Armazem": "00", "Obs": "smoke-test-mata241" } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsMata241/INCLUIR/AUTO Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "TipoMov": "001", "OrdemProducao": "000001", "CentroCusto": "001", "Itens": [ { "Produto": "PROD_LOTE", "Unidade": "UN", "Quantidade": 5.0, "Armazem": "01", "Lote": "LT0001", "Validade": "20271231" } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsMata241/INCLUIR/AUTO Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Filial": "01", "TipoMov": "001", "Identificador": "INTEG-001", "Itens": [ { "Produto": "PROD001", "Unidade": "UN", "Quantidade": 2.0, "Armazem": "00" }, { "Produto": "PROD_LOCAL", "Unidade": "UN", "Quantidade": 3.0, "Armazem": "01", "Localizacao": "A1B2C3" } ] }
Respostas
Filial, TipoMov, Itens, Produto) faltando, ou Validade com formato inválido. Tier: validation-error.B1_RASTRO/B1_LOCALIZ via U_RstValRas) ou MATA241 rejeitou (TM inexistente em SF5, produto fora do SB1, etc). Tier: business-error.Descrição
Estorno de um item específico (linha SD3) via
MATA241 Op=6. O wrapper U_MT241InE
posiciona o registro pela chave composta
D3_FILIAL+D3_COD+D3_LOCAL+D3_NUMSEQ (DbSetOrder(3)),
lê D3_TM/D3_EMISSAO para o cabeçalho e
D3_COD/D3_UM/D3_QUANT/D3_LOCAL/D3_LOTECTL
para o item, e chama
MsExecAuto({|x,y,z| MATA241(x,y,z)}, aCab, aItens, 6).
Semântica. O estorno cria um movimento inverso —
contra-lançamento — na SD3. O registro original
permanece; o Protheus marca o par com D3_ESTORNO. Por isso
o verbo é PUT (alteração de estado lógico), não
DELETE.
Path parameter
SD3. Discriminador exigido pelo build 240223P; o valor canônico precisa estar também em body.NumSeq.Request body
SD3. Schema em
EstornoRequest.
PUT https://erpapi.jetme.com.br/api/99/01/WsMata241/ESTORNAR/000002 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "Codigo": "PROD001", "Local": "00", "NumSeq": "000002" }
Respostas
Codigo, Local ou NumSeq faltando). Tier: validation-error.MATA241 rejeitou (item já estornado, saldo insuficiente, item inexistente no SD3, TM da linha não aceita estorno). Mensagem traz o log do MsExecAuto. Tier: business-error.Schemas
Definições canônicas — campos com origemSX3 rastreável
POST /WsMata241/INCLUIR/{doc}. Cabeçalho da
movimentação + array de itens. Os campos opcionais do cabeçalho são
propagados para todas as linhas SD3 geradas.
D3_TM); precisa existir e estar ativo em SF5. Tamanho máximo 3.SC2). Tamanho máximo 12.CTT). Tamanho máximo 9.SD3. Schema em ItemMovimentacao.SD3. Os campos
Lote/SubLote/Validade/Localizacao
são condicionalmente obrigatórios conforme
B1_RASTRO/B1_LOCALIZ do produto. Validação em
U_RstValRas antes do MsExecAuto.
SB1). Tamanho máximo 15.> 0.B1_LOCALIZ="S"; validado em SBE. Tamanho máximo 6.B1_RASTRO != "N"; validado em SB8 para o Armazem informado.B1_RASTRO="S".YYYYMMDD (8 dígitos, sem hífen). Obrigatória quando B1_RASTRO != "N". Strings com tamanho diferente ou data inválida retornam 400.PUT /WsMata241/ESTORNAR/{numseq}. Chave composta
da linha SD3 a estornar
(D3_FILIAL+D3_COD+D3_LOCAL+D3_NUMSEQ, índice 3).
SB1). Tamanho máximo 15.{numseq} do path. Tamanho máximo 6.201 pelo POST.
data.doc traz o D3_DOC gerado por
NEXTNUMERO — use esse valor para correlacionar itens e,
se preciso, para localizar a linha que será estornada depois.
true em resposta de sucesso."Movimentacao interna registrada com sucesso.").NEXTNUMERO("SD3", 2, "D3_DOC", .T.).200 pelo PUT (estorno).
data fica vazio; a mensagem traz a chave do item estornado.
true em resposta de sucesso.cod/local/numseq da linha estornada.message repete o log do
MsExecAuto quando o MATA241 rejeitou a operação,
permitindo tratamento programático e diagnóstico humano sem nova ida ao
AppServer.
false em erros.MsExecAuto.