Como configurar o cálculo de impostos sobre produtos

O recurso Impostos sobre produto permite integrar o checkout da Uappi a um serviço externo responsável pelo cálculo de impostos dos itens do carrinho.

Nesse fluxo, a Uappi envia os dados disponíveis do carrinho para o serviço configurado pela loja. O serviço externo realiza o cálculo e devolve o preço unitário calculado e as taxas correspondentes, que são aplicados no checkout.

O cálculo fiscal é realizado pelo serviço externo. A Uappi é responsável por enviar as informações disponíveis, receber o resultado e aplicar os valores retornados.

Importante: o recurso é exclusivo para lojas que utilizam o modelo de negócio B2B. Ele não é executado em lojas B2C ou B2B2C. 

O fluxo funciona da seguinte forma:

Para isso, o ERP, integrador ou motor de cálculo deve disponibilizar um endpoint compatível com o contrato esperado pela Uappi.

A comunicação utiliza:

  • método POST;
  • Content-Type: application/json;
  • resposta HTTP 200;
  • retorno em JSON em até 60 segundos.

No fluxo do App Impostos sobre produto, a Uappi não envia autenticação adicional no header da requisição. Caso o serviço exija uma chave de acesso, a autenticação deve ser tratada pelo próprio serviço, por exemplo, por meio da URL ou de outra estratégia definida pelo integrador.


Antes de começar

Para utilizar o cálculo de impostos sobre produtos, é necessário:

  • utilizar uma loja no modelo B2B;
  • manter o App Impostos sobre produto ativo;
  • possuir um serviço externo preparado para receber e processar a requisição;
  • configurar a URL de consulta desse serviço na Uappi.

Como configurar na Uappi

No painel administrativo:

  1. Acesse Apps.
  2. Localize o App Impostos sobre produto.
  3. No campo URL de consulta, informe o endpoint disponibilizado pelo ERP, integrador ou motor de cálculo.
  4. Ative o Status.
  5. Salve as alterações.

A URL informada será utilizada pela Uappi para enviar as requisições de cálculo de impostos.


Estrutura enviada pela Uappi

Ao realizar a consulta, a Uappi envia um JSON contendo informações dos itens, cliente, entrega e frete.

A estrutura da requisição é organizada conforme apresentado abaixo:

Importante: a modalidadePedido enviada atualmente pela integração é consumo.

Dados dos itens

Cada objeto de itens pode conter:

              Campo                                        Descrição
indiceIdentificador do item no carrinho. Deve ser devolvido pelo integrador exatamente como recebido
idID do produto na Uappi
skuSKU do produto
tipoTipo do item: produto ou servico
quantidadeQuantidade considerada no cálculo
valorPreço unitário antes da aplicação do imposto
valorFreteValor do frete correspondente ao item. Pode ser null quando não houver um valor numérico disponível. 
eanCampo destinado ao EAN do item. Atualmente, pode ser enviado vazio (“”). 
idMarcaIdentificador da marca
idCategoriaIdentificador da categoria
armazem.cepCEP do armazém de origem
armazem.codigoCódigo do armazém

O campo indice é utilizado pela Uappi para relacionar o item enviado ao resultado retornado pelo serviço. Por isso, o mesmo valor recebido deve ser devolvido na resposta.

Dados do cliente

Quando disponíveis, são enviados dados cadastrais e tributários do cliente, como:

  • nome ou razão social;
  • e-mail;
  • CPF ou CNPJ;
  • RG ou Inscrição Estadual;
  • telefone;
  • celular;
  • status tributário;
  • natureza jurídica.

O campo statusTributario pode utilizar:

  • nao-contribuinte;
  • contribuinte;
  • isento.

O campo naturezaJuridica utiliza:

  • pessoa-fisica;
  • pessoa-juridica.

Dados de entrega e origem

A Uappi também envia informações relacionadas ao destino da entrega e à origem do produto.

Entre elas estão:

  • CEP de destino;
  • endereço;
  • bairro;
  • cidade;
  • UF;
  • número;
  • complemento;
  • referência;
  • CEP do armazém;
  • código do armazém;
  • valor de frete.

O CEP de entrega é necessário para a consulta do App.

Atenção: sem um CEP de entrega informado, a Uappi não realiza a chamada ao serviço de cálculo. Em operações com multiestoque, o item também precisa possuir frete calculado para ser enviado na consulta. Por isso, durante a homologação, realize os testes com CEP informado e frete calculado


Informações fiscais utilizadas pelo integrador

O cadastro e as regras fiscais necessárias para realizar o cálculo devem estar disponíveis no próprio ERP, integrador ou motor externo.

Nesta integração, a Uappi não envia informações como:

  • NCM;
  • CFOP;
  • CST;
  • código de origem fiscal da mercadoria;
  • CEST;
  • cupom;
  • canal;
  • meio de pagamento.

Para localizar o cadastro fiscal correspondente ao produto, o serviço externo pode utilizar informações enviadas pela Uappi, como sku ou id.

Importante: o serviço externo é responsável pela regra e pelo cálculo fiscal. A Uappi utiliza o resultado devolvido para atualizar o checkout.


Estrutura que o integrador deve retornar

Para cada item recebido, o serviço externo deve retornar um objeto correspondente dentro de taxasItens.

Importante: os nomes das taxas apresentados são apenas ilustrativos. O campo nome é livre e não possui uma lista fixa de impostos definida pela Uappi.

Campos da resposta

                Campo                                      Descrição
idID numérico do produto
indiceDeve ser exatamente o mesmo indice recebido na requisição
precoOriginalPreço unitário original recebido pela integração
precoFinalPreço unitário que deverá ser utilizado após o cálculo
taxasLista das taxas aplicadas

Cada objeto de taxas deve possuir:

                        Campo                                    Descrição
nomeNome da taxa. Obrigatório quando houver imposto
valorValor da taxa. Obrigatório quando houver imposto
descricaoDescrição adicional da taxa. Campo opcional

Quando houver alteração de preço, o retorno deve conter pelo menos uma taxa válida. Uma resposta com precoFinal diferente de precoOriginal e taxas vazio pode até ter o preço processado, mas o item permanece inválido para a conclusão da compra e pode bloquear a finalização do checkout. 

Atenção: precoOriginal e precoFinal representam valores unitários. Não envie em precoFinal o valor total do item multiplicado pela quantidade.

Por exemplo, para um produto com:

  • quantidade: 2;
  • precoOriginal: 100.00;
  • precoFinal: 118.00;

o checkout utilizará 2 × R$ 118,00.


Quando não houver imposto a aplicar

Mesmo quando não houver imposto a aplicar ao item, o serviço deve retornar uma resposta válida utilizando HTTP 200.

Nesse caso, precoOriginal e precoFinal devem possuir o mesmo valor e taxas deve ser um array vazio.

Quando os preços são iguais e não existem taxas, a venda pode continuar normalmente sem a exibição do detalhamento de impostos.


Como o cálculo aparece no checkout

Quando o precoFinal retornado pelo integrador é diferente do preço original, a Uappi utiliza esse valor como novo preço unitário do produto no checkout.

O imposto, portanto, não é acrescentado como uma linha separada ao total da compra. O valor retornado passa a compor o preço do próprio item.

Quando houver taxas aplicadas, o checkout pode apresentar o indicador Impostos, permitindo visualizar o detalhamento retornado pelo integrador.


Quais itens participam do cálculo?

O cálculo considera itens dos tipos:

  • produto;
  • servico.

Itens configurados como brinde não participam do cálculo.

O frete também pode fazer parte das informações utilizadas pelo motor:

  • em operações com multiestoque, é considerado o frete relacionado ao item;
  • em operações com estoque único, o valor de frete é rateado por peso entre os itens.

Quando o cálculo é realizado?

A consulta ao serviço externo acontece durante a jornada do checkout sempre que a plataforma precisa obter ou atualizar as informações de imposto dos itens elegíveis.

Entre os cenários identificados estão:

  • carregamento do carrinho com item sem imposto calculado;
  • inclusão de item no carrinho;
  • cálculo ou alteração de CEP e frete;
  • avanço pelas etapas de endereço e pagamento quando houver item pendente de cálculo;
  • determinadas alterações de item ou preço que exijam um novo cálculo.

O objetivo é garantir que os itens elegíveis estejam com o cálculo sincronizado antes da finalização da compra.


O que acontece quando a sincronização falha?

O retorno do serviço precisa utilizar HTTP 200 e possuir uma estrutura JSON válida.

Respostas com outros status HTTP, timeout ou JSON inválido não são utilizadas para aplicação dos impostos. Nesses casos, o item pode permanecer sem cálculo e impedir a finalização da compra.

Quando ocorre uma falha de sincronização, o checkout pode apresentar:

Houve um problema na sincronização dos impostos. Clique aqui para sincronizar novamente!

Ao solicitar a nova sincronização, o checkout realiza uma nova tentativa de consulta.


Validação na finalização da compra

Antes de concluir a compra, a Uappi verifica se os itens que precisam participar do cálculo possuem uma resposta correspondente.

O indice retornado pelo serviço deve ser exatamente igual ao recebido na requisição. Caso contrário, a Uappi não consegue relacionar o resultado ao item do carrinho.

Se um item permanecer sem imposto calculado, a finalização pode ser bloqueada com a mensagem:

Um ou mais produtos do carrinho, não possuem imposto calculado.


Depois da geração do pedido

Quando existe diferença entre precoOriginal e precoFinal, a Uappi armazena as informações relacionadas ao cálculo junto ao pedido.

Entre os dados registrados estão:

  • valor unitário original;
  • valor unitário final;
  • valor total;
  • taxas aplicadas.

A persistência dessas informações é realizada pela própria Uappi após a geração do pedido.

O detalhamento pode ser apresentado posteriormente no pedido do painel administrativo e na área Minha Conta do cliente enquanto o recurso de cálculo de impostos permanecer ativo. 


Checklist para homologação

Antes de colocar a integração em produção, valide se:

  • o endpoint aceita requisições POST em JSON;
  • a resposta utiliza HTTP 200;
  • o retorno ocorre em até 60 segundos;
  • existe um objeto em taxasItens para cada item recebido;
  • indice e id são devolvidos para cada item;
  • o indice é exatamente o mesmo recebido na requisição;
  • precoOriginal corresponde ao valor unitário recebido;
  • precoFinal representa o valor unitário após o cálculo;
  • itens sem imposto retornam precoFinal igual a precoOriginal e taxas vazio;
  • itens com alteração de preço retornam pelo menos uma taxa válida;
  • cada taxa possui nome e valor preenchidos;
  • o ERP ou motor possui as informações fiscais necessárias para realizar o cálculo, já que dados como NCM não são enviados pela Uappi;
  • todos os itens enviados recebem um objeto correspondente na resposta.

Um item enviado e não retornado corretamente pode permanecer sem imposto e bloquear a finalização do checkout.


Perguntas frequentes

Em quais modelos de negócio o cálculo de impostos sobre produtos funciona?

O recurso é exclusivo para lojas configuradas no modelo de negócio B2B. Ele não é executado em lojas B2C ou B2B2C

O ERP ou integrador precisa disponibilizar uma URL?

Sim. A URL de consulta configurada no App deve apontar para um serviço compatível com o contrato da integração.

Esse serviço receberá os dados enviados pela Uappi, realizará o cálculo e devolverá o resultado.

A Uappi realiza o cálculo dos impostos?

Não. O cálculo fiscal é responsabilidade do serviço externo. A Uappi envia as informações disponíveis e aplica os valores retornados pelo motor no checkout.

A Uappi envia NCM, CFOP, CST e CEST?

Não. Essas informações não fazem parte do payload desta integração. O serviço externo deve possuir o cadastro e as regras fiscais necessárias e pode utilizar informações como sku ou id para identificar o produto.

O precoFinal deve ser unitário ou o total do item?

Unitário.

A Uappi utiliza precoFinal como preço unitário do produto. A quantidade é considerada posteriormente na totalização do checkout.

O que devo retornar quando o produto não possuir imposto?

O item ainda deve ser devolvido dentro de taxasItens, utilizando o mesmo indice, com precoFinal igual a precoOriginal e taxas como um array vazio.

O que acontece se um item não for devolvido pelo integrador?

O item pode permanecer sem imposto calculado. Se a Uappi não conseguir relacionar o retorno ao item correspondente, a finalização da compra pode ser bloqueada.

Brindes entram no cálculo?

Não. Itens configurados como brinde não participam da consulta de impostos.

O cálculo de impostos emite nota fiscal?

Não. A integração trata do cálculo dos valores que serão utilizados no checkout. A emissão fiscal não faz parte da responsabilidade desse motor.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *