Documentação Funcional: API de Cadastro de Produtos e Customização Tributária
Visão Geral
Esta API permite o cadastro e atualização de produtos, incluindo suas classificações fiscais básicas (NCM, CEST) e, principalmente, a definição de cenários tributários customizados (customTax).
O recurso de customTax é fundamental para flexibilidade fiscal: ele permite que o usuário defina regras específicas que sobrescrevem o cálculo automático do motor de impostos. Se um campo for informado dentro de um cenário de customTax, esse valor será utilizado prioritariamente na emissão da nota fiscal para aquele produto, naquele cenário específico, atuando como um valor "default" ou forçado.
Modelo de Utilização do Motor de Cálculo
Para garantir o sucesso da sua integração e na utilização da nossa API, é importante alinhar o modelo de utilização do motor de cálculo. Atualmente, oferecemos dois cenários principais:
1. Utilização de Regras Padrão (Standard)
Neste cenário, você utiliza a inteligência tributária nativa do nosso motor.
- Ação: Não é necessário realizar o cadastro prévio de produtos.
- Integração: Basta enviar as propriedades perfeitamente preenchidas no grupo
TaxDeterminationvia API. Com base nesses dados, o sistema processa e monta automaticamente o grupo Tax com os impostos do item.
2. Regras Customizadas
Indicado caso a sua operação possua particularidades fiscais ou benefícios específicos que fogem à regra geral.
- Ação: É necessário realizar o cadastro do produto e a configuração de cenários customizados.
- Análise Necessária: Nossa equipe de atendimento precisará validar se a customização desejada já existe em nossa base ou se será necessário desenvolver um novo cenário.
Informações necessárias para o Onboarding:
Para definir quais campos serão utilizados na configuração de regras customizadas, é fundamental mapear as seguintes variáveis do seu negócio:
- Natureza das Operações: Venda, transferência, entrada, simples remessa, etc.
- Perfil dos Envolvidos: Regime tributário, localização do emitente e do destinatário, entre outras características.
- Especificidades do Produto: NCM, tipo de item e a definição exata da regra que se deseja customizar.
Para garantir agilidade na configuração e na análise do seu cenário, pedimos que encaminhe ao nosso suporte as respostas do questionário de onboarding abaixo. Ele está dividido no contexto geral da sua operação e nas especificidades da regra customizada:
Parte 1: Perfil da Empresa (Contexto Geral)
Este mapeamento é feito apenas uma vez para entendermos o seu negócio.
- Atuação: Possui operação e venda no território nacional de produtos/mercadorias? Realiza operações com múltiplos produtos?
- Segmento e Perfil: Qual seu segmento de atuação (ex: Bebidas, eCommerce) e perfil do emitente (ex: Indústria, Varejista, Atacadista)?
- Regime Tributário: Qual o regime de operação da empresa emitente? (Lucro Real, Lucro Presumido ou Simples Nacional)
- Volume e Abrangência:
- Qual a volumetria mensal de NF-es e média de itens por nota?
- Em quais estados (UFs) sua empresa possui matriz/filiais e quais os principais estados de destino das vendas?
- Quantos NCMs diferentes costuma operar e quais os principais capítulos?
- Operações Frequentes: No seu dia a dia, quais operações são mais comuns? (Ex: Venda, Revenda, Devolução, Transferência, etc.)
- Automação e Particularidades: Existe algum processo automatizado para os cálculos hoje? Sua empresa possui operações com regimes especiais (benefícios, isenções específicas do Estado)?
Parte 2: Mapeamento da Regra Customizada (Cenário Específico)
Para cada regra customizada que você precisar criar no nosso motor (para atender os regimes especiais ou particularidades citadas no item 6 da Parte 1), precisaremos das informações pontuais abaixo:
- Operação Alvo: Dentre as operações que sua empresa realiza, para qual delas esta regra específica será aplicada? (Ex: Somente para Transferência entre filiais)
- CFOP Esperado: Qual é o CFOP de saída exato que deseja para esta regra?
- CST de ICMS Esperado: Qual o CST do ICMS que deve ser forçado/aplicado?
- UF Origem vs. UF Destino da Regra: Em qual cruzamento de estados essa regra deve ser disparada? (Ex: Somente saídas de SP para RJ)
- Origem da Mercadoria: Essa regra se aplica a produtos com qual origem? (Ex: Somente Importados)
- Classificação Fiscal (NCMs Afetados): Quais são os NCMs exatos que devem obedecer a esta regra específica?
- Escopo da Customização: A intenção é customizar apenas os valores de ICMS ou também outros impostos (PIS, COFINS)?
Estrutura do Produto (ProductInput)
O objeto principal de entrada para cadastro/atualização contém os seguintes campos:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tenantId | String | Sim | Identificador do Tenant (AccountId do Marketplace). |
collectionId | String | Sim | Identificador da coleção (CompanyId do Seller) para isolar o produto. |
sku | String | Sim | Código único de identificação do produto (SKU). |
origin | Enum | Sim | Origem da mercadoria (ex: national, foreignDirectImport). Ver tabela de Origem. |
description | String | Sim | Descrição detalhada do produto. |
gtin | String | Não | GTIN (EAN) do produto. |
taxGtin | String | Não | GTIN da unidade tributável. |
tax.ncm | String | Sim | Código NCM (8 dígitos) ou Gênero (2 dígitos). |
tax.cest | String | Não | Código CEST. |
customTax | Array | Sim | Lista de cenários tributários customizados. |
Valores de Origem (origin)
national: NacionalforeignDirectImport: Estrangeira - Importação diretaforeignInternalMarket: Estrangeira - Adquirida no mercado internonationalWith40To70Import: Nacional, mercadoria ou bem com Conteúdo de Importação superior a 40% e inferior ou igual a 70%nationalPpb: Nacional, cuja produção tenha sido feita em conformidade com os processos produtivos básicosnationalWithLess40Import: Nacional, mercadoria ou bem com Conteúdo de Importação inferior ou igual a 40%foreignDirectImportWithoutNationalSimilar: Estrangeira - Importação direta, sem similar nacionalforeignInternalMarketWithoutNationalSimilar: Estrangeira - Adquirida no mercado interno, sem similar nacionalnationalWithGreater70Import: Nacional, mercadoria ou bem com Conteúdo de Importação superior a 70%
Customização de Regras Tributárias (customTax)
O array customTax permite definir regras específicas baseadas no perfil do emitente (issuer) e do destinatário (recipient).
Como funciona o "Match" do Cenário
Para que uma regra customizada seja aplicada, o sistema verifica se a operação sendo realizada corresponde aos critérios definidos no cenário:
- Emitente (
issuer): O Regime Tributário (taxRegime) e o Perfil Tributário (taxProfile) do emitente da nota correspondem à lista fornecida? - Destinatário (
recipient): O Perfil Tributário (taxProfile) do destinatário corresponde à lista fornecida? - Operação (
OperationCode): O código da operação corresponde? - Origem (
origin): A origem da mercadoria corresponde?
Se houver correspondência, os valores definidos em intraState (operações internas/estaduais) ou interState (operações interestaduais) serão utilizados para preencher a nota fiscal.
Grupos de Impostos (intraState / interState)
Dentro de cada grupo (interno ou interestadual), é possível customizar:
cfop: Código Fiscal de Operações e Prestações.icms: Grupo de ICMS.pis: Grupo de PIS.cofins: Grupo de COFINS.
Interação com a Emissão da Nota (taxDetermination)
Para que o motor de cálculo utilize as regras definidas no customTax do produto, é necessário enviar o grupo taxDetermination na requisição de emissão da nota fiscal (endpoint de emissão).
Este grupo fornece os parâmetros de contexto que o sistema utiliza para buscar a regra correspondente no cadastro do produto:
operationCode: Corresponde aoOperationCodecadastrado na regra.issuerTaxProfile: Corresponde aotaxProfiledo emitente (issuer) na regra.buyerTaxProfile: Corresponde aotaxProfiledo destinatário (recipient) na regra.origin: Corresponde à origem da mercadoria.
Exemplo de taxDetermination na emissão:
"taxDetermination": {
"operationCode": 1,
"origin": "0",
"issuerTaxProfile": "retail",
"buyerTaxProfile": "final_consumer_non_icms_contributor"
}
Customização do ICMS (customTax.intraState.icms)
Este grupo é utilizado para definir valores fixos ou regras específicas para o ICMS. Qualquer valor informado aqui terá precedência sobre o cálculo automático. Isso permite, por exemplo, fixar uma alíquota reduzida ou uma base de cálculo específica que o motor genérico não contemplaria.
Campos Disponíveis
| Campo | Descrição | Tag SEFAZ |
|---|---|---|
cst | Código da Situação Tributária do ICMS (ex: 00, 20, 60). | CST |
modBC | Modalidade de determinação da Base de Cálculo do ICMS. | modBC |
pICMS | Alíquota do ICMS (%). | pICMS |
pRedBC | Percentual de redução da Base de Cálculo do ICMS. | pRedBC |
modBCST | Modalidade de determinação da BC do ICMS ST. | modBCST |
pMVAST | Percentual da Margem de Valor Adicionado ICMS ST. | pMVAST |
pRedBCST | Percentual de redução da BC do ICMS ST. | pRedBCST |
pICMSST | Alíquota do ICMS ST (%). | pICMSST |
motDesICMS | Motivo da desoneração do ICMS. | motDesICMS |
pFCP | Percentual do Fundo de Combate à Pobreza (FCP). | pFCP |
pDif | Percentual de Diferimento. | pDif |
| ... | (Outros campos conforme schema) |
Guia de Preenchimento: Customizando CST 20 (Redução de Base de Cálculo)
O CST 20 ("Com redução de base de cálculo") é utilizado quando a operação é tributada, mas existe um benefício fiscal que reduz a base sobre a qual o imposto é calculado.
Para configurar este cenário corretamente no grupo customTax.intraState.icms (ou interState), preencha os seguintes campos obrigatórios para a regra:
cst: Deve ser preenchido com o valor "20".modBC: Informe a modalidade de determinação da base. Geralmente utiliza-se "3" (Valor da operação).pRedBC: Informe o percentual de redução que deve ser aplicado à base.- Exemplo: Se a base deve ser reduzida em 20%, informe "20.00".
pICMS: Informe a alíquota do ICMS aplicável à operação (alíquota cheia, antes da redução da base).pFCP: Informe o percentual do FCP (Fundo de Combate à Pobreza) aplicável à operação.
Exemplo de objeto icms para CST 20:
"icms": {
"cst": "20",
"modBC": "3",
"pRedBC": "41.67", // Exemplo: Redução de 41.67% na base
"pICMS": "18.00", // Alíquota de 18%
"pFCP": "2.00" // Alíquota de 2% do FCP
}
Exemplo Completo de Requisição (JSON)
Abaixo, um exemplo de cadastro de produto com uma regra customizada para CST 20 em operações estaduais (Intrastate) para um emitente do Lucro Real vendendo para Consumidor Final.
{
"tenantId": "ACCOUNT-123",
"collectionId": "COMPANY-456",
"sku": "PROD-001",
"origin": "national",
"description": "Produto Exemplo com Redução de Base",
"gtin": "7891234567890",
"tax": {
"ncm": "94036000",
"cest": "2806100"
},
"customTax": [
{
"OperationCode": 1,
"issuer": [
{
"taxRegime": "RealProfit",
"taxProfile": "retail"
}
],
"recipient": [
{
"taxProfile": "final_consumer_non_icms_contributor"
}
],
"intraState": {
"cfop": 5102,
"icms": {
"cst": "20",
"modBC": "3",
"pRedBC": "33.33",
"pICMS": "18.00"
},
"pis": {
"cst": "01",
"pPIS": "1.65"
},
"cofins": {
"cst": "01",
"pCOFINS": "7.60"
}
}
}
]
}
Nota Importante: CST 60 (ICMS Cobrado Anteriormente por Substituição Tributária)
Para operações com CST 60, existem informações referentes à retenção do imposto na fase anterior (pelo substituto tributário) que são variáveis a cada lote de compra e, portanto, não devem ser cadastradas no produto (via customTax).
Esses dados são específicos da transação e devem ser enviados diretamente na integração da Nota Fiscal (endpoint de emissão), dentro do objeto items[].tax.icms.
Campos que devem ser enviados na emissão da NF-e (e não no cadastro):
- baseSTRetentionAmount (vBCSTRet): Valor da BC do ICMS ST retido na operação anterior.
- stRetentionAmount (vICMSSTRet): Valor do ICMS ST retido na operação anterior.
- substituteAmount (vICMSSubstituto): Valor do ICMS próprio do substituto.
- stFinalConsumerRate (pST): Alíquota suportada pelo consumidor final.
- fcpstRetAmount (vFCPSTRet): Valor do FCP retido anteriormente por ST.
- fcpstRetRate (pFCPSTRet): Percentual do FCP retido anteriormente por ST.
Exemplo de JSON na emissão da NF-e (CST 60):
...
"taxDetermination": {
"operationCode": 121,
"origin": "0",
"issuerTaxProfile": "retail",
"buyerTaxProfile": "final_consumer_non_icms_contributor",
"acquisitionPurpose": null
},
"tax": {
"icms": {
"BaseSTRetentionAmount": "10.00",
"STFinalConsumerRate": 18.00,
"SubstituteAmount": 10.00,
"STRetentionAmount": "10.00"
}
}
...