Como utilizar o ACBrIBPTax

Foi liberado na paleta de componentes ACBr um novo componente para baixar e manipular a tabela de impostos aproximados do IBPT, segue um exemplo de como utilizar o componente para efetuar o download e manipular os dados baixados.

var
  I: Integer;
begin
  // configurar a URL do arquivo para ser baixado
  // Você configurar como quiser, para o seu site ou servidor proprios
  // deixarei a tabela atualizada sempre no endereço
  // http://regys.com.br/arquivos/AcspDeOlhoNoImpostoIbptV.0.0.1.csv
  if Trim(URL) <> '' then
    ACBrIBPTax1.URLDownload := Trim(URL);

  // se o path do arquivo não for passado o componente tenta baixar da URL
  // informada na propriedade URLDownload
  // Se o path for passado ele abre diretamente o arquivo informado
  if ACBrIBPTax1.AbrirTabela(Path Arquivo .csv) then
  begin
    // versão do arquivo
    lVersao.Caption := 'Versão: ' + ACBrIBPTax1.VersaoArquivo;

    // exemplo de como popular uma tabela com os dados baixados
    tmpCadastro.Close;
    tmpCadastro.DisableControls;
    try
      for I := 0 to ACBrIBPTax1.Itens.Count - 1 do
      begin
        tmpCadastro.Append;
        tmpCadastroNCM.AsString              := ACBrIBPTax1.Itens[I].NCM;
        tmpCadastroEx.AsString               := ACBrIBPTax1.Itens[I].Excecao;
        tmpCadastroTabela.AsInteger          := Integer(ACBrIBPTax1.Itens[I].Tabela);
        tmpCadastroAliqNacional.AsFloat      := ACBrIBPTax1.Itens[I].AliqNacional;
        tmpCadastroAliqInternacional.AsFloat := ACBrIBPTax1.Itens[I].AliqImportado;
        tmpCadastro.Post;
      end;
    finally
      tmpCadastro.First;
      tmpCadastro.EnableControls;
    end;
  end;
end;

Existe outros métodos no componente tais como:

Método para efetuar o download da tabela, não esquecer de informar o enderço na propriedade URLDownload
ACBrIBPTax1.DownloadTabela

método para exportar o arquivo para diversos formatos
ACBrIBPTax1.Exportar(path arquivo, tipo);
Parâmetros:
Path Arquivo: caminho onde deseja salvar o arquivo
Tipo: Formato do arquivo, os formatos disponibilizados são: exCSV, exDSV, exXML, exHTML, exTXT

Existe um overload para o método ACBrIBPTax1.Exportar(path arquivo, delimitador), onde o parâmetro delimitador pode ser utilizado para gerar um arquivo Texto com valores separados pelo delimitador informado.

Você também pode procurar por um NCM específico na tabela utilizando esse exemplo:

var
  ex: String;
  tabela: Integer;
  aliqNac, aliqImp: Double;
begin
  if ACBrIBPTax1.Procurar(Codigo NCM, ex, tabela, aliqNac, aliqImp) then
  begin
    ShowMessage(
      'Exceção: '  + ex + sLineBreak +
      'Tabela: '   + IntToStr(tabela) + sLineBreak +
      'Aliq Nac: ' + FloatToStr(aliqNac) + sLineBreak +
      'Aliq Imp: ' + FloatToStr(aliqImp)
    );
  end
  else
    showmessage('Código não encontrado!');
end;

48 comentários

  1. Regys voce sabe se existe uma rotina em outra linguagem, clipper por exemplo, para baixar a tabela no seu site ?

    • Não conheço nenhuma rotina, mas o arquivo está no layout csv separado por delimitador, penso que qualquer linguagem conseguiria ler o arquivo e traduzi-lo para o formato necessário.

  2. Regis, gostaria de tirar uma duvida

    quando usamos a tabela do IBPT para mencionar a carga tributaria na NF … devemos aplicar o percentual indidicado na tabela sobre o valor total do item e este valor informar em dados adicionais da NF, certo? minha duvida é se devo considerar como base de calculo o valor do item sem ipi, certo?

    • Você deveria considerar o valor bruto do produto, ou seja, Quantidade X Valor Unitário.
      Lembre-se que essa informação é meramente ilustrativa e nunca vai refletir realmente o que foi pago de imposto, mas somente uma estimativa.

  3. João Marcos Reply to João

    Só entrando no assunto para instalar o componente de forma manual deve-se copilar antes as bibliotecas requeridas e depois ACBrTCP.
    Se tiver erro o Regys mim corrija.

  4. Rodrigo Bernal Reply to Rodrigo

    Regys, Por favor pode me da uma ajuda to tentando achar o ACBrIBPTax para instalar mais não to achando ja atualizei o ACBr como vc disse em outro post.. e nada.. Utilizo delphi 7 e 2007 em outro projeto..e firebird..

  5. Jocimar Sartori Reply to Jocimar

    Regys,

    Foi liberada uma nova tabela IBPT, porém o componente do ACBR não consegue fazer a leitira da mesma, pois pelo que pude perceber a nova tabela tem estrutura diferente da primeira.
    E agora?

  6. João Marcos Reply to João

    Consegui, tive problema na hora de copilar na função FloatToString mais e porque uso o delphi XE2 já resolvi obrigado!

    E parabéns pela iniciativa como foi útil será a centenas de pessoas.

    • Obrigado, que bom que ajudou :)

      Na verdade esse erro é porque você não recompilou todos os pacotes, o FloatToString está no pacote ACBrComum, ele precisa se recompilado antes de qualquer outro pacote.

  7. João Marcos Reply to João

    Régys onde baixo o componente? Atualizei o ACBr e ele não se encontra no pacote!

  8. Bom, tentei já havia tentado enviar o valor liquido mas a NFe não valida por erro de soma, então fiz o seguinte ajustei a implementação do cupom fiscal para que saia igual a NFe.
    Ex:
    Total do cupom + Descontos aplicados nos itens
    Valor total do item 10,00-Desconto 1,00=9,00
    Valor total do cupom 9,00
    Valor aprox dos tributos 2,89(28,90%)

    Considerando que temos apenas um item no cupom, ou mais itens com o mesmo NCM, a aIiquota IBPTAX sofre esta alteração apenas em cupons com descontos nos itens.
    Att;
    Genilson

    • O erro de soma é uma coisa o cálculo é outra.

      O Erro de soma provavelmente ocorreu porque houve diferença no somatório total do que foi calculado nos itens, somente isso.
      Quanto ao cálculo, se você incluir o imposto eu particularmente penso que está errado porque o cliente não pagou aquele valor de desconto que você considerou, por isso acho que o correto seria não considerar o desconto, visto que o cliente paga efetivamente o valor sem ele.

  9. Boa noite Regys, vejá este exemplo:

    quantidade 1; unitario 10,00; desconto 1,00; total do item 9,00; aliquota do ncm 01012100 na tabela IBPTax 32,09%
    Total.ICMSTot.vTotTrib := 9,00

    A NFe ficou assim
    Valor aprox dos tributos 2,89(28,90%)
    Valor total dos produtos 10,00
    Desconto 1,00
    Valor total da nota 9,00

    Se você fizer os cálculos verá que foi considerado o valor dos produtos sem desconto para cálculo dos tributos, e na minha interpretação o calculo deveria considerar o valor total dos produtos menos o desconto para que fosse impresso no Danfe 2,89(32,09%). Na implementação do cupom fiscal ficou assim, já na NFe ficou como no exemplo anterior, a principio o valor é mesmo mas como a alíquota ficou diferente está causando duvidas junto ao clientes, qual a sua opinião?

    Obrigado desde já.

    • Eu considero que o correto é o valor líquido, porque a lei diz que devemos mostrar em cima do que o consumidor está pagando, como ele paga o valor com desconto, portanto, ao meu ver devemos considerar esse valor para efeitos de cálculo.

  10. Regis caso algum código NCM não estiver na lista o calculo é obrigatório?

    • O cálculo é obrigatório para a venda de todas as mercadorias, independente de estar na tabela IBPT ou não, a tabela é meramente um auxiliar, para os casos em que o NCM não consta na tabela, envie um e-mail ao IBPT assim ele atualizam na próxima versão da tabela, e enquanto a liberação da versão não sai você deve calcular a mão.

  11. Eu preciso necessariamente utilizar os índices da tabela IBP ou seu eu quiser eu posso informar os índices de acordo como eu achar melhor calcula-los ? A tabela é uma referencia legal obrigatória ou apenas uma forma de facilitar as coisas para o contribuinte se posicionar para esse cálculo ?

    É obrigatório a inclusão da TAG VTotTrib ? Ou posso apenas narrar os valores no campo informações adicionais sem necessariamente mexer com essa TAG ?

    • Não é obrigatório utilizar a tabela do IBPT, você pode fazer seu cálculo próprio a lei é clara você pode calcular por conta própria ou usar o índice de um órgão reconhecido pelo governo, neste caso o IBPT.

      A tag não é obrigatório por enquanto, isso é dito no manual inclusive, mas se você for mostrar seria ideal preenchê-la também, visto que sistemas de informação de quem recebe o XML podem querer utilizar para algum fim no futuro.

  12. Régys voce sabe qual é o caminho oficial para baixar o arquivo direto da IBTP.

  13. Olá Regys, no componente a propriedade Arquivo eu coloco o nome do arquivo com a extensão ou o path completo ? porque esta no formato de stringlist ?

    • A propriedade arquivo é conteúdo do arquivo texto lido, você deve passar o path completo do arquivo no método AbrirTabela ou deixar em branco para que ele baixe utilizando o endereço web informado na propriedade URLDonwload.

      • Faltou adicionar um método para Popular os itens a partir da propriedade Arquivo caso ela já tenha sido carregada antes (count > 0).
        Isso é útil, por exemplo, se já tivermos o arquivo gravado num blob no BD e o carregarmos a partir de um TStream.

        • Cleber a ideia é usar o arquivo carregado da internet ou txt para popular uma tabela no banco de dados, cruzar as informações e obter a alíquota aproximada, não faz muito sentido manter o arquivo texto guardado no banco, carregar e procurar todas as vezes, o ideal é sempre baixar o arquivo ler o conteúdo e atualizar a tabela no banco de dados, assim você pode usar a informação de maneira mais simples e mais tranquila.

  14. Perfeito, vou fazer isso!
    Abraços e obrigado!

  15. Parabens Régys pela iniciativa. Obrigado !

  16. ***este eu não encontrei na tabela IBP 33049010

  17. Boa noite, Régys!
    Caso, o código da NCM não exista na tabela Ibp, <>. Tem alguma sugestão de como eu posso conseguir o índice da alíquota Nacional para eu fazer o cálculo na NF-e?

    • Acho que o caminho mais correto seria primeiro enviar um e-mail a eles, assim eles incluem, e provavelmente já te respondem qual a alíquota, lembrando que a tabela do IBPT ainda está em fase inicial, provavelmente vários NCMs vão estar faltando, principalmente os menos utilizados.

  18. Boa tarde!
    Gostaria de saber com a Lei 12.741 eu devo informar na Nf-e as alíquotas discriminadas de todos os impostos ou somente destacar o resumo como Valor aprox. usando a tabela IBPT?
    Muito obrigado e parabéns pelo post!.
    Pedro.

  19. Regys, li o manual do IBPT, mais uma coisa não ficou clara, pelo menos pra mim. Quando uma empresa do Simples Nacional fizer uma venda, qual alíquota será usada? Aliquota Nacional ? ou Aliquota de Importação? Se a empresa comprou esse produto como produto importado?

  20. Itamar Luiz Bermond Reply to Itamar

    Aê menino, parabéns pelo grande trabalho que você fez e nos polpou. Grande Régys, sempre prestativo. Agradeço em nome da comunidade inteira. Tenho certeza que falo em nome de todos. Abração.

  21. Elisa Gonçalves Reply to Elisa

    Existe um custo para a empresa se adequar? Quanto as empresas de software tem cobrado?

    • Olha eu não tenho visto ninguém cobrar, porque isso é uma obrigação da legislação, o cliente tem que fazer é o software de certa forma somente reflete a obrigação da lei.

  22. Antes de tudo parabéns pelo trabalho, tenho algumas duvidas:

    1. eu consigo vincular este componente ao componente acbrecf, ou devo procurar o ncm, calcular o valor e imprimir na descrição do item?

    2.teria algum exemplo de um cupom impresso?

    3.como considerar o desconto/acrescimo da venda se o imposto eh calculado e impresso na linha do item?

    4. o campo ACBrIBPTax1.Itens[I].Tabela, ja notei que nessa tabela existem itens com o codigo 0 e 1 devo considerar o maior?

    5. precisarei exibir esse valor na NFE também ou so no ECF?

    desculpe a metralhadora de perguntas eh que está tão em cima e ainda estou um pouco perdido.

    • 1. Não, ele não se vincula, o intuito na verdade é você baixar a tabela na tua base de dados e usar os dados quando necessário.
      2. Não tenho um exemplo, mas é simples, basta seguir o artigo que mostro como utilizar o ACBrECF e ACBrNFe, no caso do ACBrECF se você preencher as propriedades o ACBrECF imprimi sozinho no rodapé, no vaso da nota eletrônica você deve adicionar ao item ao as informações complementares, como achar melhor.
      3. você considera o valor total do item, o valor final, neste valor você aplica a taxa de imposto aproximado e tem o valor aproximado do imposto, dai você pode imprimir no item ou acumular para imprimir no fim.
      4. Veja na documentação da tabela IBPT, esse campo tabela informa se é NCM (mercadoria) ou NBS (Serviço), você usa conforme o tipo de mercadoria.
      5. Você deve exibir o valor sempre que for venda a consumidor, independente do que estiver utilizando (Cupom fiscal, Nota eletrônica, etc)

      A impressão pode ser por item ou nas informações complementares ou rodapé no caso do ECF, a tendência está sendo imprimir nas informações complementares e rodapé.

Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhora a qualidade dos artigos.