EstruturaProduto
CRUD de Estrutura de Produto (Bill of Materials — tabela
SG1) via rotina automática MATA200. Modelo BOM:
uma capa (G1_COD = produto pai) com grade de relações
pai/filho (G1_COMP = componente). O produto pai e cada
componente devem existir previamente em SB1. Exclusão em
cascata (PA → PI → MP) é responsabilidade do consumidor; o endpoint
remove apenas o nível informado.
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 usam
{produto} = G1_COD (produto pai), até
15 caracteres. O endpoint faz PadR para o
tamanho de TamSX3("G1_COD") antes do DbSeek.
Não há chave técnica adicional exposta; cada estrutura é endereçada
exclusivamente pelo seu produto pai.
Modelo BOM (capa + grade). Em SG1 a "capa"
e a "grade" compartilham a mesma tabela: registros do mesmo G1_COD
repetem os campos de capa (ex: G1_QUANT) e variam apenas
G1_COMP e atributos do componente. O GET por produto agrupa:
devolve cabecalho a partir do primeiro registro e
componentes[] com todos os filhos.
Exclusão sem cascata. A TDN destaca: para apagar uma
árvore completa (PA → PI → MP), o consumidor chama DELETE
do nível mais alto para o mais baixo. O endpoint não
encadeia exclusões automaticamente; cada DELETE remove
apenas o nível informado.
Recalculo de níveis (NIVALT). Default
"S" — recalcula a estrutura ao gravar (consistente, porém
mais caro). Em carga em massa considere "N" para performance
e dispare o recálculo dedicado depois. Em DELETE o endpoint
fixa NIVALT="S" no cabeçalho mínimo passado ao MATA200.
Datas de vigência. G1_INI e
G1_FIM no payload aceitam string no formato
AAAAMMDD (passada a SToD). Quando ausentes,
o endpoint aplica os defaults TDN: G1_INI = 01/01/01 e
G1_FIM = 31/12/49.
Build 240223P — POST sem Begin Sequence.
O WSMETHOD POST não envelopa em Begin Sequence
porque o build perde Locals dentro do Recover Using.
Em falha não tratada, a resposta é 500 cru com stack
completo no console_rest.log. PUT e
DELETE mantêm Recover Using para captura de
exceções de DB.
Substituição total no PUT. O modo 4 do
MATA200 trabalha como replace: a grade enviada substitui
inteiramente a grade existente. Para alterações incrementais,
monte o payload completo a partir de um GET /WsSG1/{produto}
prévio.
Estrutura
CRUD por produto pai (G1_COD)Descrição
Retorna a estrutura completa do produto pai informado:
cabeçalho (campos de capa) e array de componentes
(relações pai/filho). Aplica filtro de filial
(xFilial("SG1")) e respeita o whitelist de
CAMPOS_CAB_GET / CAMPOS_ITM_GET definidos
no .prw.
Se o produto pai existe em SB1 mas não há registros
em SG1, o endpoint responde 404 —
"Estrutura não encontrada para o produto: …".
Path parameter
PadR para o tamanho do SX3 antes do DbSeek.Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSG1/_T_PA01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success, message, data: { cabecalho, componentes[] } }. Veja EstruturaConsulta.G1_COD. Tier: validation-error.Descrição
Inclui uma nova estrutura via MATA200 em modo
3 (insert). O endpoint:
- Valida produto pai (
G1_COD) emSB1— 422 se ausente. - Valida cada componente (
G1_COMP) emSB1— 422 se ausente. - Aplica defaults TDN:
G1_QUANT=1,NIVALT="S",G1_TRT=Space(3),G1_PERDA=0,G1_INI=01/01/01,G1_FIM=31/12/49. - Repassa para
U_MT200Excque executaMsExecAuto(MATA200,…,3).
POST não usa Begin Sequence (build 240223P quirk);
exceções não tratadas viram 500 cru com stack no
console_rest.log.
Path parameter
SB1.Request body
cabecalho (campos da capa)
+ array componentes com 1+ itens. Schema completo em
EstruturaPayload.
POST https://erpapi.jetme.com.br/api/99/01/WsSG1/INCLUIR/_T_PA01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "cabecalho": { "G1_QUANT": 1, "NIVALT": "S" }, "componentes": [ { "G1_COMP": "_T_PI01", "G1_QUANT": 1 }, { "G1_COMP": "_T_MP01", "G1_QUANT": 2, "G1_PERDA": 5 } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsSG1/INCLUIR/_T_PA01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "cabecalho": { "G1_QUANT": 1, "NIVALT": "N" }, "componentes": [ { "G1_COMP": "_T_PI01", "G1_QUANT": 1, "G1_PERDA": 2.5, "G1_TRT": "001", "G1_INI": "20260101", "G1_FIM": "20261231", "G1_OBSERV": "linha 1 - vigencia 2026" }, { "G1_COMP": "_T_MP01", "G1_QUANT": 2, "G1_PERDA": 5, "G1_OPC": "01" } ] }
Respostas
SuccessResponse com data.produto = código do produto pai.cabecalho ou componentes faltando. Tier: validation-error.SB1, componente ausente em SB1, G1_QUANT faltando, ou rejeição do MsExecAuto (unidade incompatível com MV_CONSDUM, estrutura já existente em POST, etc). Tier: business-error.Recover Using no POST — stack visível em console_rest.log.Descrição
Altera a estrutura via MATA200 em modo
4 (update). O endpoint verifica que a estrutura
existe (DbSeek em SG1) antes de invocar
a rotina automática.
Substituição total. O modo 4 do MATA200 trabalha
como replace: a grade enviada substitui inteiramente a grade
existente; componentes não enviados são removidos. Para alterações
incrementais, parta de um GET /WsSG1/{produto}.
Mesmo payload do POST — ver EstruturaPayload.
Path parameter
SG1 (caso contrário 404).Request body
PUT https://erpapi.jetme.com.br/api/99/01/WsSG1/ALTERAR/_T_PA01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "cabecalho": { "G1_QUANT": 1, "NIVALT": "S" }, "componentes": [ { "G1_COMP": "_T_PI01", "G1_QUANT": 3 } ] }
PUT https://erpapi.jetme.com.br/api/99/01/WsSG1/ALTERAR/_T_PA01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "cabecalho": { "G1_QUANT": 2, "NIVALT": "S" }, "componentes": [ { "G1_COMP": "_T_PI01", "G1_QUANT": 1.5, "G1_PERDA": 3 }, { "G1_COMP": "_T_MP01", "G1_QUANT": 4, "G1_PERDA": 8 } ] }
Respostas
SuccessResponse com data.produto.SB1, validação MATA200 falhou. Tier: business-error.Recover Using).Descrição
Exclui a estrutura inteira (todos os componentes do produto pai)
via MATA200 em modo 5. O endpoint posiciona
o alias SG1 no G1_COD alvo antes de chamar
o wrapper.
Sem cascata. Para apagar uma árvore PA → PI → MP,
o consumidor deve chamar DELETE em cada nível, do mais
alto para o mais baixo. O endpoint não percorre filhos automaticamente.
Path parameter
Chamada de exemplo
DELETE https://erpapi.jetme.com.br/api/99/01/WsSG1/EXCLUIR/_T_PA01 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, message }.MsExecAuto (estrutura referenciada por OP, planejamento, etc). Tier: business-error.Listagem
Produtos-pai com estrutura cadastradaDescrição
Lista produtos-pai distintos (1 linha por G1_COD) com
estrutura cadastrada em SG1. Suporta filtro por prefixo
de G1_COD e filtro por componente — neste último caso,
a varredura interna percorre todos os componentes de cada produto
pai antes de decidir se inclui na resposta.
Paginação simples via page / pageSize.
Não há cursor / delta-sync nesta versão.
Query parameters
G1_COD — usado em DbSeek(.T.) para posicionar o início do scan (filtro server-side).AllTrim) — não prefixo.1, mínimo 1).50, máx 500).Chamada de exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsSG1/_list?prod=_T_PA&pageSize=10 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsSG1/_list?comp=_T_MP01&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
Schemas
Definições canônicas — campos com origemSX3 rastreável
POST e PUT. Composto pelos
blocos cabecalho (EstruturaCabecalho)
e componentes (array de
EstruturaComponente — mínimo 1 item).
EstruturaCabecalho.EstruturaComponente.G1_COD. Whitelist definida em
CAMPOS_CAB_ALLOW no .prw. Ambos os campos
são opcionais — o endpoint aplica os defaults TDN quando ausentes.
"S") ou não ("N"). Use "N" em carga em massa e dispare recálculo dedicado depois.SNCAMPOS_ITM_ALLOW no .prw.
G1_COMP e G1_QUANT são obrigatórios.
SB1 — validado antes do MATA200; ausência retorna 422.AAAAMMDD; conversão interna via SToD.AAAAMMDD.G1_OPC).GET /WsSG1/{produto}. Bloco
data.cabecalho traz os campos de capa
(CAMPOS_CAB_GET) e data.componentes[] traz
cada relação pai/filho com CAMPOS_ITM_GET.
true em respostas 200.G1_COD, G1_QUANT.G1_COMP, G1_TRT, G1_QUANT, G1_PERDA, G1_INI, G1_FIM, G1_OPC, G1_OBSERV. Datas em formato AAAAMMDD via DToS.GET /WsSG1/_list — uma linha
por produto-pai distinto. Não traz componentes; para detalhar a
estrutura, chame GET /WsSG1/{produto} com o
G1_COD retornado.
DELETE
omite o bloco data (envelope simples só com
success + message).
true em respostas de sucesso.message traz o motivo
em linguagem editorial; em 422 carrega o retorno do
MsExecAuto via U_MT200Exc quando aplicável.
false em erros.