ProdutoFornecedor
CRUD do vínculo Produto x Fornecedor (tabela SA5)
via rotina automática MATA060. Modelo 1 (cabeçalho simples) com
chave composta de três partes — A5_FORNECE (6) +
A5_LOJA (2) + A5_PRODUTO (15) — enviada concatenada
no path. Pré-requisito: o fornecedor (SA2) e o produto
(SB1) já cadastrados; este endpoint apenas registra o
relacionamento entre eles.
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
Chave composta no path. Todas as rotas
/WsSA5/{chave}, /INCLUIR/{chave},
/ALTERAR/{chave} e /EXCLUIR/{chave} recebem a
chave concatenada crua:
{A5_FORNECE}{A5_LOJA}{A5_PRODUTO}. Os tamanhos
(6+2+1..15) são lidos do
dicionário (TamSX3) em runtime; A5_PRODUTO
pode vir curto e é completado com PadR internamente.
Campos da chave vêm do path, não do body. Em
POST/PUT, se o payload trouxer
A5_FORNECE, A5_LOJA ou A5_PRODUTO,
eles são ignorados — o endpoint sempre usa o que veio
na URL.
Pré-requisitos no ERP. O MATA060 exige
que o fornecedor (SA2 com A2_COD +
A2_LOJA) e o produto (SB1 com
B1_COD) já estejam cadastrados. Faltando qualquer um, o
MsExecAuto rejeita com 422 e mensagem do
NomeAutoLog.
Sem bloqueio TOTVS-padrão. A SA5 não
expõe o par *_MSBLQL/*_MSBLQD; o endpoint não
tem caminho de desbloqueio. Para suspender um vínculo, use
DELETE.
Paginação. /_list usa
page/pageSize (default 50, máx
500). Os filtros fornece, loja
e produto escolhem o índice mais seletivo
automaticamente (ordem 1 quando há fornece, ordem 2 quando
há só produto).
Vínculo
CRUD por chave compostaDescrição
Retorna o vínculo Produto x Fornecedor pesquisado pela chave composta
concatenada {A5_FORNECE}{A5_LOJA}{A5_PRODUTO}. Aplica
xFilial("SA5") e respeita o whitelist
CAMPOS_GET do .prw.
Path parameter
A5_FORNECE (6) + A5_LOJA (2) + A5_PRODUTO (1..15). Mínimo 9 chars, máximo 23.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/TST00101TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: Vinculo }.Descrição
Inclui um novo vínculo via MATA060 em modo 3
(MODEL_OPERATION_INSERT). A chave composta vem do path; o
payload traz apenas os atributos do relacionamento (nome do fornecedor,
código no fornecedor, prazo de entrega, prioridade, etc.). Os campos
A5_FORNECE/A5_LOJA/A5_PRODUTO são
ignorados se vierem no body.
- O fornecedor (
SA2) e o produto (SB1) precisam existir; senão oMsExecAutorejeita com 422. - Whitelist de campos: ver
VinculoPayload.
Path parameter
{A5_FORNECE}{A5_LOJA}{A5_PRODUTO}.Request body
CAMPOS_ALLOW. Schema completo em
VinculoPayload.
POST https://erpapi.jetme.com.br/api/99/01/WsSA5/INCLUIR/TST00101TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "A5_NOMEFOR": "FORN TESTE_REST", "A5_NOMPROD": "PROD TESTE_REST", "A5_PE": 7, "A5_PRIOR": "1" }
POST https://erpapi.jetme.com.br/api/99/01/WsSA5/INCLUIR/TST00101TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "A5_NOMEFOR": "FORNECEDOR TESTE LTDA", "A5_NOMPROD": "PRODUTO PARA TESTE REST", "A5_CODPRF": "FORN-SKU-0007", "A5_FABR": "TST002", "A5_LOJFAB": "01", "A5_PRIOR": "1", "A5_PE": 7, "A5_LE": 100, "A5_FATURA": 5000, "A5_CONDPAG": "001", "A5_MOEDA": 1, "A5_TPCQ": "N" }
Respostas
CrudResponse com data = { A5_FORNECE, A5_LOJA, A5_PRODUTO } ecoando a chave gravada.MsExecAuto do MATA060 rejeitou (fornecedor/produto inexistente, fabricante inválido, enums fora do domínio, etc.). Tier: business-error.Descrição
Altera campos do vínculo via MATA060 em modo
4 (MODEL_OPERATION_UPDATE). Aceita qualquer
subconjunto do whitelist CAMPOS_ALLOW; os campos da
chave continuam vindo do path. A SA5 não tem bloqueio
TOTVS-padrão — qualquer alteração de atributo é aceita desde que
passe na validação do MsExecAuto.
Path parameter
{A5_FORNECE}{A5_LOJA}{A5_PRODUTO}.Request body
PUT https://erpapi.jetme.com.br/api/99/01/WsSA5/ALTERAR/TST00101TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "A5_NOMEFOR": "FORN TESTE_REST", "A5_NOMPROD": "PROD TESTE_REST", "A5_PE": 15, "A5_PRIOR": "2" }
PUT https://erpapi.jetme.com.br/api/99/01/WsSA5/ALTERAR/TST00101TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "A5_PE": 10 }
Respostas
CrudResponse com data ecoando a chave.Descrição
Exclui o vínculo via MATA060 em modo 5
(MODEL_OPERATION_DELETE). A exclusão remove o
relacionamento entre o fornecedor e o produto — não toca em
SA2/SB1. O MsExecAuto do
MATA060 pode rejeitar a exclusão quando o vínculo
estiver referenciado em pedidos de compra abertos (SC7).
Path parameter
{A5_FORNECE}{A5_LOJA}{A5_PRODUTO}.Chamada de exemplo
DELETE https://erpapi.jetme.com.br/api/99/01/WsSA5/EXCLUIR/TST00101TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
CrudResponse.SC7 em SA5). Tier: business-error.Descrição
Atalho para quando o cliente conhece só uma das pontas
do vínculo (apenas o fornecedor ou apenas o produto) e quer enumerar todas
as ocorrências. Internamente usa o índice 1 quando
tipo=fornece e o índice 2 quando tipo=produto.
Query parameters
forneceprodutoA5_FORNECE (quando tipo=fornece) ou A5_PRODUTO (quando tipo=produto).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/_byid?tipo=fornece&valor=TST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/_byid?tipo=produto&valor=TST_REST_PRD01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
tipo/valor ausentes ou tipo fora do enum.Listagem
Listagem paginada e typeaheadDescrição
Lista vínculos com filtros opcionais por fornece,
loja (só vale junto com fornece) e
produto. O endpoint escolhe automaticamente o índice mais
seletivo:
- Com
fornece: ordem 1 (A5_FILIAL+A5_FORNECE+A5_LOJA+A5_PRODUTO). - Com
produtosó: ordem 2 (A5_FILIAL+A5_PRODUTO+A5_FORNECE+A5_LOJA). - Sem filtros: scan na filial em ordem 1.
Query parameters
A5_FORNECE (índice 1).A5_LOJA exato. Só tem efeito quando combinado com fornece.A5_PRODUTO. Usa índice 2 quando fornece está ausente.CAMPOS_GET.1, mínimo 1).50, máx 500).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/_list?fornece=TST001&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/_list?produto=TST_REST_PRD01&pageSize=100 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
fields com campo não whitelistado).Descrição
Busca rápida (typeahead) para autocomplete de UI. O termo é comparado
contra A5_NOMEFOR + A5_NOMPROD concatenados e
normalizados (sem acento, uppercase) via
U_NoAcento. Retorna uma lista enxuta — não devolve o schema
completo de Vinculo.
Como a SA5 não tem índice por nome, o endpoint faz um
scan limitado a 2000 registros por chamada.
Query parameters
prefix.prefixcontains10, máx 25).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/_search?q=forn&match=prefix&limit=10 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSA5/_search?q=teste&match=contains&limit=25 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
q ausente ou < 2 caracteres.Schemas
Definições canônicas — campos com origemSX3 rastreável
/{chave}, /_list,
/_byid). Inclui a chave composta e os atributos comerciais e
logísticos do vínculo. Campos efetivamente retornados dependem de
CAMPOS_GET e do filtro fields.
SA2.A2_COD.SA2.A2_LOJA.SB1.B1_COD.A2_NOME no momento da gravação).B1_DESC no momento da gravação).SA2)."1" (preferencial) a "9".SE4).POST e PUT. Whitelist
definida em CAMPOS_ALLOW no .prw. Os campos da
chave (A5_FORNECE/A5_LOJA/A5_PRODUTO)
vêm do path e são ignorados se vierem aqui.
SA2 quando informado.A5_FABR deve apontar para registro SA2 válido."1" a "9").SE4).1 = Real)./_search. Suficiente para popular
uma lista de autocomplete sem trazer todos os atributos do vínculo.
data em
POST/PUT ecoa a chave gravada (A5_FORNECE/A5_LOJA/A5_PRODUTO);
em DELETE retorna string vazia.
true em respostas de sucesso."Vinculo incluido com sucesso.").{ A5_FORNECE, A5_LOJA, A5_PRODUTO } ecoando a chave; em DELETE pode ser string vazia.message traz o texto do
NomeAutoLog (ou outro detalhe do MsExecAuto) quando
MATA060 recusa a operação.
false em erros.MsExecAuto).