free web tracker

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. 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é.

  2. 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.

  3. 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.

  4. 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?

  5. 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.

  6. 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.

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

  8. Parabens Régys pela iniciativa. Obrigado !

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

  10. 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.

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

  12. 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.

  13. 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.

  14. 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.

  15. 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.

  16. João Marcos Reply to João

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

  17. 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.

  18. 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?

  19. 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..

  20. 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.

  21. 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.

  22. 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.

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