1. Introdução
Esta página é uma documentação complementar ao dicionário automático da API do ERP Spalla. Seu propósito é descrever a ordem operacional em que o integrador externo (ou um agente de IA) deve executar as chamadas para cadastrar e manter um produto via API.
O cadastro de produto se distribui em quatro tabelas do banco:
PROD— cadastro principal do produto (identificação, classificação, unidades, dados fiscais, estoque e comerciais).PRODEQUIV— equivalências de unidade do produto (fator de conversão de cada unidade em relação à unidade de estoque).PRODBARCOD— códigos de barras do produto, por unidade.TABPRECO2— preço do produto dentro de uma tabela de preço. Etapa opcional: o produto existe e é utilizável sem preço cadastrado (ver Passo 7).
Esta página não substitui o dicionário oficial da sua instância. Todos os detalhes técnicos — lista completa de campos, tipos de dados, obrigatoriedade e estrutura de retorno — estão no dicionário oficial e devem ser consultados lá. Quando algum detalhe desse tipo for necessário, esta página orienta o leitor a abrir o dicionário oficial na entrada correspondente.
2. Onde encontrar o dicionário oficial da sua API
Cada empresa que opera o ERP Spalla expõe o seu próprio dicionário automático em um endereço próprio. Para acessá-lo, abra no navegador a URL no formato abaixo, substituindo os placeholders pelos valores da sua instância:
https://<host>:<porta>/root/dicionario?userToken=<token>
<host>— endereço do servidor que hospeda a API.<porta>— porta de comunicação configurada no servidor.<token>— token de identificação (userToken) fornecido pela equipe responsável pela API.
O dicionário oficial é a fonte autoritativa para campos, tipos, obrigatoriedade, exemplos completos e lista de objetos liberados para a sua API.
3. Como a API funciona
A API do Spalla utiliza um conceito diferente do REST tradicional. Todas as requisições são enviadas para um único endpoint, e a operação real no banco de dados não é determinada pelo verbo HTTP, e sim por um campo "method" dentro do corpo JSON.
| Item | Valor |
|---|---|
| Endpoint único | /root/integrador |
| Verbo HTTP | PATCH (padrão, obrigatório para gravação). POST/GET são alternativas apenas para leitura. |
| Autenticação | Header ou query param userToken. |
| Operação real | Campo "method" dentro do corpo JSON. |
O campo "method" do corpo aceita os seguintes valores, cada um com o tipo de objeto a que se aplica:
| method (no corpo) | Operação SQL | Objetos | Uso nesta página |
|---|---|---|---|
GET | Consulta (SELECT) | TABLE, VIEW, FUNCTION, PROCEDURE RESULT | Passos 2 e 10 |
POST | Inserção (INSERT) | TABLE | Passos 4, 5, 6 e 7 |
PUT | Atualização (UPDATE) | TABLE | Passos 5, 7, 8 e 9 |
DELETE | Exclusão (DELETE) | TABLE | Passo 9 |
Não confunda os dois níveis. O verbo HTTP da requisição é sempre PATCH (para gravação); o "verbo" que define a operação no banco é o campo "method" do JSON. Uma inclusão em PROD é uma requisição HTTP PATCH cujo corpo contém "method": "POST".
4. Visão geral do fluxo
O cadastro completo de um produto compreende quatro blocos lógicos, executados em ordem:
- Verificar pré-requisitos de retaguarda — cadastros auxiliares (grupo/subgrupo, tipo, linha, unidade e NCM) que precisam existir no ERP porque são obrigatoriamente referenciados pelo produto.
- Incluir o produto (
method: POSTemPROD) — obter o próximo código livre, preparar os campos obrigatórios e enviar a requisição de criação. - Complementar o cadastro — ajustar as equivalências de unidade (
PRODEQUIV), registrar códigos de barras (PRODBARCOD) e, quando desejado, informar o preço em uma tabela de preço (TABPRECO2). - Manter o produto — alterações posteriores (
PUT), inativação, exclusão sujeita às restrições de integridade referencial, e consultas (GET) para auditoria ou sincronização.
Parte do Bloco 3 é resolvida automaticamente pelo próprio banco na inclusão do produto: as equivalências das unidades declaradas em PROD são criadas com fator 1, e o código de barras é gerado quando a empresa usa geração automática. O integrador só intervém quando precisa de um fator diferente de 1, de unidades adicionais ou de códigos de barras próprios.
Toda inclusão e alteração via API passa pelas mesmas regras de validação aplicadas quando a operação é feita pela tela do ERP (Cadastro de Produtos) — as validações são executadas no servidor e atuam igualmente em todos os canais de entrada.
5. Diagrama de execução
Convenção visual: azul (Retaguarda do ERP) · verde (Via API).
6. Aviso sobre liberação na retaguarda
Atenção — liberações necessárias na retaguarda.
O cadastro de produtos via API depende de duas liberações controladas na retaguarda do ERP pela operação responsável pela API:
- Verbos de escrita nos objetos. Os métodos
POST,PUTeDELETEprecisam estar habilitados para os objetos que a integração usar (PROD,PRODEQUIV,PRODBARCOD,TABPRECO2) na sua chave de API. Sem isso, as requisições de escrita não são aceitas. - Permissões do usuário do token. O usuário vinculado ao
userTokené submetido às mesmas permissões de tela do ERP. A inclusão de produto exige o nível de acessoProdutos1com permissão de inclusão; a inclusão de preço exigeTabeladePreos1. Campos sensíveis do produto têm permissões próprias — percentual de desconto do fornecedor, desconto padrão, mínimo e máximo, e margem de lucro (ver Passo 8).
A lista de verbos efetivamente liberados aparece no próprio dicionário oficial da sua instância.
Antes de incluir um produto, os cadastros abaixo precisam existir no ERP, porque são referenciados pelo produto e validados pelo servidor na inclusão:
| Cadastro | Campo em PROD | Observação |
|---|---|---|
| Grupo e Subgrupo de produtos | GP_COD, SG_COD | O par (grupo, subgrupo) é validado em conjunto. Obrigatório. |
Tipo de Produto (TPPRO) | TP_COD | Obrigatório. Define se o produto controla estoque e qual a sua natureza no SPED. Campo central: condiciona controle de série e alterações futuras. |
Linha de Produto (LINPROD) | LP_COD | Obrigatório. |
Unidade (PRODUNI) | PD_UNI, PD_UNI2, PD_UNI3, PD_UNITRIB | A sigla da unidade deve existir na tabela de unidades. PD_UNI (venda) é obrigatório. |
NCM (PRODNCM) | PD_CODNCM | Obrigatório por regra de negócio, e o código informado deve estar cadastrado na tabela de NCM. |
Tabela de Preço (TABPRECO1) | — | Necessária apenas se você for informar preço (Passo 7). |
Fornecedor padrão (CLIFOR1) | PD_CFCODPADRAO | Opcional. Ver página Cadastro de Pessoas. |
| Códigos de tributação | TRB_CODICMS, TRB_CODIPI, TRB_CODPIS, TRB_CODCOFINS e demais | Opcionais no cadastro, mas normalmente exigidos pela operação fiscal. Podem ser herdados do NCM. |
O NCM cadastrado pode preencher o produto sozinho. Se o registro do NCM na retaguarda tiver grupo, subgrupo, tipo, linha, unidade, unidade tributável ou método de pauta configurados, o servidor usa esses valores no POST do produto quando o campo correspondente vier zerado ou vazio. O CEST também é herdado do NCM quando não informado. Isso permite integrações que enviam pouco mais que descrição e NCM — desde que o NCM esteja bem configurado no ERP.
Esses cadastros são mantidos pela operação dentro do próprio ERP. Para conhecer os objetos exatos expostos pela API para cada um deles e as chaves de referência aceitas, consulte o dicionário oficial da sua instância.
O código identificador do produto (PD_COD) é a chave primária da tabela PROD e deve ser informado pelo integrador no momento da criação. O ERP não gera esse código automaticamente em uma sequence dedicada — a regra de negócio é simples: o próximo código livre é o maior código existente mais 1.
Como descobrir o próximo código
Antes de cada inclusão, faça uma consulta prévia via API ("method": "GET") sobre o objeto PROD, recuperando o maior valor da coluna PD_COD atualmente cadastrado. O próximo código a enviar no POST é esse valor incrementado em 1:
próximo PD_COD = MAX(PD_COD na tabela PROD) + 1
A forma exata de pedir esse agregado — campos, filtros, parâmetros de ordenação ou de seleção (fields, where, orderBy, limit) — está descrita no dicionário oficial da sua API, na entrada do objeto PROD.
Faixa do código e concorrência. O campo PD_COD é numérico de 6 dígitos — o maior código possível é 999999. E, como o código é calculado antes do POST, duas integrações simultâneas podem obter o mesmo valor: a segunda receberá erro de chave primária duplicada. Trate esse erro reconsultando o maior código e repetindo a inclusão.
Exemplo — consultar o maior código
{
"method": "GET",
"objectType": "TABLE",
"objectName": "PROD",
"fields": [
{ "name": "PD_COD" }
],
"orderBy": [
{ "name": "PD_COD", "direction": "DESC" }
],
"limit": 1
}
Confirme no dicionário oficial a sintaxe de fields, orderBy e limit aceita pela sua instância.
Campos obrigatórios
São os campos sem os quais a inclusão em PROD é rejeitada:
| Campo | Tipo | Descrição |
|---|---|---|
PD_COD | numérico (6) | Código do produto — chave primária. Obtido no Passo 2. |
PD_DES | texto (120) | Descrição do produto. |
GP_COD | numérico (3) | Grupo do produto. |
SG_COD | numérico (3) | Subgrupo do produto, dentro do grupo informado. |
TP_COD | numérico (4) | Tipo de produto. |
LP_COD | numérico (6) | Linha de produto. |
PD_UNI | texto (5) | Unidade de venda. Sigla existente na tabela de unidades. |
PD_CODNCM | texto (10) | NCM do produto. Exigido por regra de negócio, com máscara 9999.99.99, e o código deve existir na tabela de NCM. |
PD_GENERICO | numérico (1) | Produto genérico para uso em orçamento. 0 = não, 1 = sim. Assume 0 quando omitido. |
Campos fortemente recomendados
PD_UNI3— unidade de estoque. É a unidade de referência de todas as equivalências e de todo o controle de saldo. Alterá-la depois que o produto for movimentado é bloqueado (ver Passo 8).PD_UNI2— unidade de compra;PD_UNITRIB— unidade tributável (usada no XML fiscal).PD_STATUS— situação do produto:1= ativo,0= inativo.PD_REF— referência do produto. Atenção: algumas empresas configuram a referência como exclusiva; nesse caso, repetir uma referência já usada gera erro apontando o produto que a utiliza.
Campos preenchidos automaticamente pelo servidor
Não é necessário enviar os campos abaixo; o servidor os resolve na inclusão:
PD_ITM— item do produto dentro do grupo/subgrupo; auto-numerado (maior item do par grupo+subgrupo + 1) quando enviado como0ou omitido.PD_DATA— data de atualização do cadastro; sempre sobrescrita pelo servidor.PD_CLF— classificação fiscal; recebe oPD_CODNCMquando não informada.PD_CEST— herdado do cadastro de NCM quando não informado.PD_UNIORC— sub-unidade de orçamento; recebePD_UNI3quando vazia.GP_COD,SG_COD,TP_COD,LP_COD,PD_UNI,PD_UNI2,PD_UNI3,PD_UNITRIBe os métodos de pauta — herdados do cadastro de NCM quando enviados zerados ou vazios.
Campos complementares configuráveis. Se a empresa usar um modelo de informações complementares no produto (campo PCO_COD), os campos complementares marcados como obrigatórios naquele modelo passam a ser exigidos na gravação. A mensagem de erro cita o rótulo configurado pela empresa — por isso não é possível listá-los aqui. Consulte a operação do ERP para saber se o seu cadastro usa esse recurso.
Com os pré-requisitos verificados e o próximo código em mãos, inclua o produto por uma requisição com "method": "POST" sobre PROD.
Exemplo — POST PROD
{
"method": "POST",
"objectType": "TABLE",
"objectName": "PROD",
"dataFields": [
{ "name": "PD_COD", "value": 1201 },
{ "name": "PD_DES", "value": "PARAFUSO SEXTAVADO 1/2 X 2" },
{ "name": "PD_REF", "value": "PSX-1202" },
{ "name": "GP_COD", "value": 10 },
{ "name": "SG_COD", "value": 3 },
{ "name": "TP_COD", "value": 1 },
{ "name": "LP_COD", "value": 1 },
{ "name": "PD_UNI", "value": "PC" },
{ "name": "PD_UNI2", "value": "CX" },
{ "name": "PD_UNI3", "value": "PC" },
{ "name": "PD_UNITRIB", "value": "PC" },
{ "name": "PD_CODNCM", "value": "7318.15.00" },
{ "name": "PD_STATUS", "value": 1 },
{ "name": "PD_GENERICO","value": 0 }
]
}
Valores ilustrativos. Os códigos, siglas e o NCM acima são exemplos. Use os cadastros da sua instância. A lista completa e autoritativa de campos de PROD está no dicionário oficial.
O que o servidor faz imediatamente após a inclusão
- Cria as equivalências de unidade. Para cada unidade declarada no produto (
PD_UNI3,PD_UNI2,PD_UNI,PD_UNI4ePD_UNITRIB), o servidor insere a linha correspondente emPRODEQUIVcom fator 1, se ela ainda não existir. Se a sua unidade de compra comporta mais de uma unidade de estoque, o fator precisa ser corrigido no Passo 5. - Gera o código de barras quando a empresa está configurada para geração automática: o servidor monta um EAN-13 a partir do código do produto, grava em
PRODBARCODna unidade de venda e replica emPROD.PD_BARCODse este estiver vazio.
Restrições verificadas na inclusão. A permissão de inclusão do nível de acesso Produtos1 é conferida para o usuário do userToken. Além disso, um produto que controla número de série (PD_CTRLNSERIE = 1) só é aceito se o tipo de produto controlar estoque, se o produto não for genérico e se a unidade de estoque for UN ou PC. Se a empresa exigir a classificação de produto controlado, o campo PD_PRODCTRL passa a ser obrigatório.
A tabela PRODEQUIV declara quanto vale cada unidade do produto em relação à unidade de estoque. É ela que permite comprar em caixa, estocar em peça e vender em peça, com conversão automática nos documentos.
A chave é (PD_COD, PD_UNISIGLA), e o campo central é PD_UNIFAT — o fator de equivalência.
Quando intervir
- Corrigir um fator. As linhas criadas no Passo 4 nascem com fator
1. SeCXcontém 100PC, é preciso umPUTajustandoPD_UNIFATpara100. - Adicionar uma unidade extra que não está declarada em
PROD— por exemplo, uma unidade de embalagem usada apenas em determinado cliente:POSTemPRODEQUIV. - Informar peso, dimensões ou a unidade para NF-e daquela unidade específica (
PD_UNPESOLIQ,PD_UNPESOBRT,PD_UNINFE,PD_UNIDESNFE).
Regras aplicadas pelo servidor
| Regra | Detalhe |
|---|---|
| Unidade de estoque tem fator 1 | A linha cuja sigla é igual à unidade de estoque do produto (PD_UNI3) não pode ter fator diferente de 1. |
| Fator zero | Rejeitado, exceto quando a empresa usa equivalência variável. Fator negativo é sempre rejeitado. |
| Unidade tributável | Quando a empresa usa equivalência variável, a unidade tributável ainda assim não aceita fator 0. |
| Múltiplo em pedido/orçamento | PD_QTDMULTIPLA não pode ser negativo e só é aceito em unidades cujo fator de equivalência é um número inteiro. |
| Alteração de fator ou de unidade de NF-e | Exige o nível de acesso SpallaProdutoAlterarEquivalencia1 para o usuário do token. |
| Exclusão | Bloqueada se a unidade já foi usada em pedido, ordem de compra ou nota fiscal. |
Exemplo — ajustar o fator da unidade de compra
{
"method": "PUT",
"objectType": "TABLE",
"objectName": "PRODEQUIV",
"dataFields": [
{ "name": "PD_UNIFAT", "value": "100" }
],
"where": [
{ "type": "field", "name": "PD_COD", "key": true, "value": 1201 },
{ "type": "field", "name": "PD_UNISIGLA","key": true, "value": "CX" }
]
}
No PUT, envie em dataFields apenas o campo a alterar e identifique o registro no where, marcando cada campo da chave primária com "key": true.
Um produto pode ter vários códigos de barras, um por embalagem. A chave da tabela é (PD_COD, PD_BARCOD), e cada código é vinculado a uma unidade através de PD_UNISIGLA.
Campos
| Campo | Descrição |
|---|---|
PD_COD | Código do produto. |
PD_BARCOD | Código de barras. Obrigatório e validado como EAN. |
PD_UNISIGLA | Unidade a que o código se refere. Obrigatória e existente na tabela de unidades. |
PD_ENVXML | Marca o código que será enviado no XML da NF-e. Apenas um por combinação de produto e unidade. |
PD_SITUACAOGTIN | Situação do código no cadastro GTIN: 0 não classificado, 1 validado, 2 inválido/inexistente. |
Validações sempre aplicadas. O código de barras é submetido à validação de dígito verificador EAN — um código malformado é rejeitado. O código também é único entre produtos: se já estiver em uso, a mensagem de erro informa o produto que o utiliza. Em empresas que trabalham com produto de terceiros, a unicidade é verificada dentro do mesmo proprietário. Por fim, marcar um segundo código com PD_ENVXML = 1 para a mesma unidade é rejeitado — desmarque o código em conflito primeiro.
Exemplo — POST PRODBARCOD
{
"method": "POST",
"objectType": "TABLE",
"objectName": "PRODBARCOD",
"dataFields": [
{ "name": "PD_COD", "value": 1201 },
{ "name": "PD_BARCOD", "value": "7891234567895" },
{ "name": "PD_UNISIGLA", "value": "PC" },
{ "name": "PD_ENVXML", "value": 1 }
]
}
Se a empresa usa geração automática de código de barras, o produto já nasceu com um código interno criado pelo servidor (Passo 4). Nesse cenário, ao registrar o EAN real do fabricante, avalie qual dos dois deve carregar a marca PD_ENVXML.
Este passo não é obrigatório. O produto fica completo e utilizável sem nenhum preço cadastrado — é possível movimentá-lo em estoque, comprá-lo e vendê-lo informando o preço diretamente no documento. O preço em tabela existe para sugerir automaticamente o valor unitário quando o item é lançado em orçamento, pedido de venda ou nota fiscal. Cadastre-o quando a sua operação depende dessa sugestão; ignore-o quando o preço vem sempre do sistema externo ou é negociado item a item.
O preço não reside no produto: reside na relação entre uma tabela de preço e o produto. São duas tabelas:
TABPRECO1— a tabela de preço em si (código, descrição, validade, filial, condição de pagamento, moeda). Mantida pela operação na retaguarda; a integração normalmente apenas a referencia.TABPRECO2— o produto dentro daquela tabela, com o seu preço. É aqui que a integração grava.
Campos de TABPRECO2
| Campo | Descrição |
|---|---|
TBP_COD | Código da tabela de preço. Parte da chave. Deve existir em TABPRECO1. |
PD_COD | Código do produto. Parte da chave. |
TBP_PRC | Preço. Obrigatório. Use ponto decimal, sem separador de milhar e sem símbolo de moeda. |
TBP_UNI | Unidade a que o preço se refere. Obrigatória — ver o pré-requisito abaixo. Quando omitida na inclusão, o servidor assume a unidade de venda do produto (PROD.PD_UNI). |
TBP_DCSMAX | Percentual de desconto máximo permitido para o produto nessa tabela. |
TBP_PCOM1, TBP_PCOM2 | Percentuais de comissão do vendedor representante e do vendedor operacional. |
CF_COD | Opcional. Restringe o preço a um cliente específico. |
Pré-requisito de ordem: a unidade do preço precisa ter equivalência. TABPRECO2 referencia obrigatoriamente PRODEQUIV pelo par (PD_COD, TBP_UNI). Ou seja: só é possível precificar uma unidade que já existe como equivalência do produto. Como as equivalências das unidades declaradas em PROD são criadas na inclusão (Passo 4), o caso normal já está atendido. Mas se você quiser precificar uma unidade adicional, crie primeiro a equivalência (Passo 5).
Comportamento na gravação
- Permissão. Incluir, alterar ou excluir preço exige o nível de acesso
TabeladePreos1com a permissão correspondente para o usuário douserToken. - Histórico de preço. O servidor mantém o preço anterior (
TBP_PRCANTERIOR) e a data do último reajuste (TBP_DAT) automaticamente. Não envie esses campos. - Troca de produto. Alterar o
PD_CODde uma linha existente é bloqueado — exclua a linha e inclua novamente. - Composição de preço. Se a tabela de preço estiver configurada para usar composição, o preço não é administrado diretamente em
TBP_PRC: ele é a soma do preço base com os cinco compostos (TBP_COMPPRCBeTBP_COMPPRC1aTBP_COMPPRC5). Nesse cenário, umPUTque altere apenasTBP_PRCé reinterpretado pelo servidor como um fator de reajuste aplicado ao preço base. Confirme com a operação se a tabela usa composição antes de integrar reajustes.
Exemplo — POST TABPRECO2
{
"method": "POST",
"objectType": "TABLE",
"objectName": "TABPRECO2",
"dataFields": [
{ "name": "TBP_COD", "value": 1 },
{ "name": "PD_COD", "value": 1201 },
{ "name": "TBP_UNI", "value": "PC" },
{ "name": "TBP_PRC", "value": "12.500000" }
]
}
Para reajustar, use "method": "PUT" com TBP_COD e PD_COD marcados como "key": true no where.
A alteração é feita por uma requisição com "method": "PUT" sobre PROD. Envie em dataFields apenas os campos a alterar e identifique o registro no where, com PD_COD marcado como "key": true.
Alterações bloqueadas em produto já movimentado
O servidor protege campos estruturais depois que o produto entrou em movimento (orçamento, pedido, ordem de compra, nota fiscal, ordem de produção ou acerto de estoque):
| Campo | Bloqueio |
|---|---|
PD_UNI3 (unidade de estoque) | Não pode ser alterada em produto movimentado, nem quando existirem equivalências cadastradas — nesse caso, exclua as equivalências primeiro. |
TP_COD (tipo de produto) | Em produto movimentado, só é aceita a troca para um tipo compatível. E se o produto já constar no livro fiscal, a troca é limitada a tipos com a mesma classificação SPED. |
PD_CTRLNSERIE, PD_SUGESTAOSERIE | Parâmetros de número de série não podem ser alterados em produto movimentado. |
PD_USAENDESTOQ | Controle de endereço de estoque não pode ser alterado em produto com movimento de estoque. |
PD_USALOTE | Controle de lote é validado por rotina própria antes de permitir a mudança. |
PD_GENERICO | Não pode ser alterado se o produto já foi usado em orçamento, pedido ou nota fiscal. |
PD_PRODCTRL | Em empresas que usam produto controlado, não pode ser alterado após a primeira movimentação. |
PD_PATCOLETIVO | Desmarcar patrimônio coletivo é bloqueado se existir bem com estoque maior que 1. |
Campos com permissão dedicada
Alterar (ou informar na inclusão) qualquer um dos percentuais abaixo exige que o usuário do userToken tenha o nível de acesso correspondente:
| Campo | Nível de acesso exigido |
|---|---|
PD_DESCFORM — desconto do fornecedor | SpacomCadastroProdutoDescontoForn |
PD_MRGLUCRO — margem de lucro | SpacomCadastroProdutoMargemLucro |
PD_DCS — desconto padrão | SpacomCadastroProdutoDescontoPad |
PD_DCSMIN — desconto mínimo | SpacomCadastroProdutoDescontoMin |
PD_DCSMAX — desconto máximo | SpacomCadastroProdutoDescontoMax |
Exemplo — PUT PROD (atualizar descrição e estoque mínimo)
{
"method": "PUT",
"objectType": "TABLE",
"objectName": "PROD",
"dataFields": [
{ "name": "PD_DES", "value": "PARAFUSO SEXTAVADO 1/2 X 2 ZINCADO" },
{ "name": "PD_MIN", "value": "500.000000" }
],
"where": [
{ "type": "field", "name": "PD_COD", "key": true, "value": 1201 }
]
}
Inativação — o caminho recomendado
Para retirar um produto de circulação, altere PD_STATUS de 1 (ativo) para 0 (inativo) por uma requisição PUT. O histórico de movimentação é preservado.
Um produto só é inativado com saldo zero. A transição de ativo para inativo é rejeitada se existir saldo de estoque diferente de zero em qualquer empresa ou local de estoque. A mensagem de erro cita o código do produto. Zere o saldo antes de inativar.
Exemplo — inativar o produto
{
"method": "PUT",
"objectType": "TABLE",
"objectName": "PROD",
"dataFields": [
{ "name": "PD_STATUS", "value": 0 }
],
"where": [
{ "type": "field", "name": "PD_COD", "key": true, "value": 1201 }
]
}
Exclusão
A exclusão ("method": "DELETE") é possível apenas para produtos sem nenhum vínculo. O produto é referenciado por dezenas de tabelas do ERP — itens de pedido, notas fiscais, movimentos de estoque, ordens de produção, tabelas de preço, entre outras — e a integridade referencial do banco impede a remoção enquanto qualquer uma dessas referências existir. Em produto recém-criado por engano, a exclusão funciona; em produto movimentado, ela sempre falhará.
Cadastros dependentes que a exclusão do produto remove em cascata: equivalências de unidade, códigos de barras e dados por filial. Já a ficha de estoque é removida pelo próprio banco no processo.
Regra prática. Trate a exclusão como recurso de correção imediata, e a inativação como o mecanismo normal de descontinuação. Integrações que sincronizam um catálogo externo devem mapear "produto removido na origem" para PD_STATUS = 0, não para DELETE.
Use requisições com "method": "GET" para ler o cadastro. O verbo de leitura é geralmente liberado mesmo quando os verbos de escrita são restritos.
- Conferir o produto criado —
GETemPRODfiltrado porPD_CODmostra também os campos resolvidos pelo servidor (PD_ITM,PD_CLF,PD_CEST, herança do NCM). - Verificar as equivalências criadas —
GETemPRODEQUIVporPD_CODlista as unidades e os fatores, incluindo as linhas geradas automaticamente. - Localizar por código de barras —
GETemPRODBARCODfiltrado porPD_BARCODresolve o produto a partir do EAN lido. - Consultar preços vigentes —
GETemTABPRECO2porPD_COD, cruzando comTABPRECO1para conhecer a validade e o escopo da tabela. - Sincronização incremental — o campo
PD_DATAguarda a data da última atualização do cadastro e é indexado; use-o para trazer somente os produtos alterados desde a última carga. - Próximo código (Passo 2) — recuperar o maior
PD_CODatual antes de uma nova inclusão.
Os parâmetros aceitos na consulta (fields, where, orderBy, limit, offset) e a estrutura de retorno estão descritos no dicionário oficial.
Campos binários e textos longos. O produto tem campos de conteúdo extenso — foto (PD_FOTO), especificações técnicas (PD_DTEC, PD_DTEC2) e informações adicionais para NF-e (PD_INFONFE). Evite trazê-los em consultas de listagem: selecione explicitamente os campos que interessam em fields. Conteúdo binário trafega em Base64.
Validações e erros
As validações aplicadas ao cadastro de produtos são as regras de negócio do ERP Spalla, executadas no servidor — integridade referencial e as validações próprias de PROD, PRODEQUIV, PRODBARCOD e TABPRECO2. Quando uma regra é violada, a mensagem original gerada pelo servidor é retornada no corpo da resposta da API.
Situações comuns que geram erro:
| Situação | Ação corretiva |
|---|---|
| NCM não informado | Informe PD_CODNCM. É obrigatório por regra de negócio, mesmo aceitando nulo no banco. |
| NCM informado não existe no cadastro | Solicite à operação o cadastro do NCM na retaguarda antes de incluir o produto. |
| Grupo, subgrupo, tipo, linha ou unidade inexistentes | Confira os cadastros auxiliares (Passo 1). O par grupo+subgrupo é validado em conjunto. |
| Chave primária duplicada | PD_COD já usado. Reconsulte o maior código (Passo 2) e repita a inclusão. |
| Referência já em uso em outro produto | A empresa usa referência exclusiva. Escolha outra referência ou consulte a operação. |
| Usuário sem permissão para incluir produto | Solicite o nível de acesso Produtos1 com inclusão para o usuário do token. |
| Usuário sem permissão em percentual de desconto ou margem | Remova o campo da requisição ou solicite o nível de acesso específico (Passo 8). |
| Campo complementar obrigatório não preenchido | A mensagem cita o rótulo configurado pela empresa. Preencha o campo PD_DESCPOnn correspondente. |
| Equivalência da unidade de estoque diferente de 1 | Mantenha fator 1 na unidade de estoque e ajuste as demais unidades. |
| Código de barras inválido ou já em uso | Corrija o dígito verificador EAN, ou identifique o produto que já usa o código (a mensagem informa qual). |
| Segundo código marcado para o XML da NF-e | Desmarque o PD_ENVXML do código em conflito antes de marcar o novo. |
| Produto com saldo de estoque ao inativar | Zere o saldo em todas as empresas e locais de estoque antes de alterar PD_STATUS para 0. |
| Alteração de unidade de estoque ou tipo em produto movimentado | Não há contorno via API: a regra é a mesma da tela do ERP. Avalie criar um novo produto. |
O integrador deve tratar a mensagem de erro retornada. As mensagens são definidas pela instalação do ERP e podem variar entre clientes; por isso, esta página descreve as situações, não o texto exato das mensagens.
Dica — identificar a tabela e o campo a partir da interface do ERP
Atalho para inspeção visual. Ao operar a tela de Cadastro de Produtos diretamente pela interface do ERP, pressione Ctrl + Alt + Shift + H. O sistema altera o título da janela indicando que o modo de identificação está ativo. A partir daí, ao parar o mouse sobre qualquer campo da tela, aparece um hintbox mostrando o nome da tabela e da coluna do banco às quais aquele campo está vinculado. É a forma mais rápida de mapear quais colunas de PROD correspondem a cada campo da tela — e correlacioná-las com as chaves do JSON da API.
Relação com estoque, vendas e fiscal
O produto é o cadastro central de todos os módulos de movimentação. As decisões tomadas na sua inclusão têm efeito duradouro:
- Estoque — a unidade de estoque (
PD_UNI3) e as equivalências definem como cada movimento converte quantidade. O tipo de produto determina se há controle de estoque; os parâmetros de lote, número de série e endereço de estoque governam o nível de rastreabilidade. - Vendas — o preço em tabela (Passo 7) alimenta a sugestão de preço nos itens de pedido, e os percentuais de desconto do produto delimitam a negociação. Ver Pedido de Venda.
- Compras — a unidade de compra, o fornecedor padrão e as tolerâncias entre ordem de compra e nota fiscal são atributos do produto. Ver Ordem de Compra.
- Fiscal — NCM, CEST, códigos de tributação, unidade tributável e o código de barras marcado para o XML determinam o preenchimento da NF-e e dos arquivos do SPED. Um cadastro fiscal incompleto só se manifesta na emissão do documento, não na inclusão do produto.
Onde aprofundar
Esta página é um guia operacional — descreve o que fazer e em que ordem. Para como exatamente montar cada requisição (lista completa de campos de PROD, PRODEQUIV, PRODBARCOD e TABPRECO2, tipos de dado, obrigatoriedade e formato de datas e números), a fonte autoritativa é o dicionário oficial da sua instância, em https://<host>:<porta>/root/dicionario?userToken=<token>.
O dicionário é gerado dinamicamente a partir do banco de dados da própria instalação, refletindo sempre o estado atual da API liberada para aquela chave. Para os demais fluxos, consulte as páginas irmãs no menu superior — Cadastro de Pessoas, Pedido de Venda, Ordem de Compra e Contas a Pagar/Receber.