Ir para conteúdo
  • Cadastre-se

dev botao

Adicionar propriedade para poder informar o valor líquido da NFSe na impressão do DANFe do ACBrNFSeX


Ver Solução Respondido por Guilherme Consolação Dias,

Recommended Posts

Postado

Boa noite, estamos realizado a comunicação com o provedor SigISSWeb, e percebemos um problema na geração do DANFe.

O provedor SigISSWeb, considera o valor líquido da NFSe (valor do serviço), como sendo o valor da NFSe menos a dedução, como sugere a documentação do Manual de Integração.

image.png.84a45effcb9d6f82294eec99b3e408db.png

Atualmente, durante a leitura do XML, o valor da tag <valor_servico> está sendo atribuído à propriedade Servico.Valores.ValorLiquidoNfse, o que resulta na exibição incorreta do valor líquido no DANFe, pois esse campo não desconta os impostos.

image.thumb.png.d8ac39f8f443894b5e84b5cacd4f1995.png

Ressaltamos que não é possível subtrair os impostos manualmente do campo <valor_servico> no momento do envio do RPS, pois isso acarreta em rejeição por parte do provedor. O próprio SigISSWeb interpreta corretamente a composição dos valores com base nas alíquotas, nos campos de retenção e nos valores informados. Tanto é que, ao consultar o DANFe diretamente no portal da prefeitura, o valor líquido é exibido corretamente.

Portanto, entendemos que não se trata de um erro no XML em si, mas sim de uma diferença na forma de interpretação adotada pelo provedor.

Para contornar essa limitação e manter a fidelidade ao XML retornado, propomos a adição de uma nova propriedade no componente DANFe chamada ValorLiquidoNFSeImp. Caso esta propriedade seja preenchida, ela deverá sobrepor o valor obtido automaticamente a partir do XML, da mesma forma que já ocorre com a propriedade OutrasInformacoesImp.

Dessa forma, conseguimos, antes da impressão do DANFe, obter o valor líquido real diretamente do nosso sistema e atribuí-lo à nova propriedade, garantindo que o DANFe seja apresentado corretamente ao usuário final.

Pensamos em realizar o cálculo do valor líquido diretamente na leitura do XML, mas teriamos a perda do conteúdo do da tag <valor_servico>, o que pode causar problemas de compatibilidade com outros usuários do componente.

Estou utilizando o Fortes Report, então arrumei o Retrato que era o que eu precisava, e aproveitei para deixar disponível essa propriedade para o SiplISS e o ISSNet também.

Foram alterados os arquivos fontes: ACBrNFSeXDANFSeClass.pas, ACBrNFSeXDANFSeRLRetrato.pas, ACBrNFSeXDANFSeRLSimplISS.pas e ACBrNFSeXDANFSeRLISSNet.pas

Anexei um XML de exemplo de uma NFSe gerada no SigISSWeb, apenas com as tags de valores necessárias para a análise.

ACBrNFSeXDANFSeClass.pas ACBrNFSeXDANFSeRLRetrato.pas ACBrNFSeXDANFSeRLSimplISS.pas ACBrNFSeXDANFSeRLISSNet.pas NFSe com retenção - Exemplo.xml

  • Consultores
Postado

Bom dia @Guilherme Consolação Dias,

Na unit SigISSWeb.LerXml temos:

    Servico.Valores.ValorServicos := ObterConteudo(ANode.Childrens.FindAnyNs('valor_nf'), tcDe2);
    Servico.Valores.ValorDeducoes := ObterConteudo(ANode.Childrens.FindAnyNs('deducao'), tcDe2);
    Servico.Valores.ValorLiquidoNfse := ObterConteudo(ANode.Childrens.FindAnyNs('valor_servico'), tcDe2);

Esse fragmento de código esta na function LerXmlNfse, logo ele esta lendo o XML da NFS-e e não do RPS.

Ao ler o XML de uma NFS-e quais são os valores desses 3 campos?

Qual deveria ser o valor do campo ValorLiquidoNfse para poder ser impresso corretamente no DANFSE?

 

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Boa tarde @Italo Giurizzato Junior, isso mesmo, para gerar o DANFe carrego o XML da NFSe gerada (não o do RPS). Ai o que está acontecendo, é que hoje o componente considera o valor líquido como sendo a tag <valor_servico>. Nessa tag não temos a subtração dos impostos como o ISS retido.

<valor_nf>20.00</valor_nf>
<deducao>0.00</deducao>
<valor_servico>20.00</valor_servico>
<iss_retido>S</iss_retido>
<aliq_iss>3.3259420089</aliq_iss>
<valor_iss>0.66518840178000</valor_iss>

Logo as propriedades estão com os valores:

Servico.Valores.ValorServicos := 20;
Servico.Valores.ValorDeducoes := 0;
Servico.Valores.ValorLiquidoNfse := 20;

Perceba que a propriedade Servico.Valores.ValorLiquidoNfse está com o valor de 20, e não de 19.33 (valor do ISS retido de 0.67). Deste modo, o DANFe fica no valor de 20 o valor líquido.

Pensamos em fazer os cálculos subtraindo os impostos devidamente e depois atribuir para essa propriedade (Servico.Valores.ValorLiquidoNfse), mas talvez não estariamos sendo fiel aos valores destacados no XML, podendo causar problemas para outros usuários do componente. Então como o problema em si é apenas na impressão do DANFe, adicionei essa propriedade para poder ser atribuido esse valor líquido diretamente no DANFe.

Caso vocês preferirem, podems mudar a lógica no momento da leitura do XML da NFSe, e considerar o valor líquido como sendo resultado de um cálculo ao invés de pegar diretamente o valor da tag <valor_servico> (talvez cause problema para alguns usuários que utilizem o componente, já que Servico.Valores.ValorLiquidoNfse deixaria de ser a tag <valor_servico>).

Postado

Boa noite @Italo Giurizzato Junior, realmente a alteração do valor da propriedade Servico.Valores.ValorLiquidoNfse, fica melhor e resolve o problema. Temos apenas uma ressalva quanto a isso, se algum desenvolvedor que utiliza o componente fez a lógica de integração esperando que o Servico.Valores.ValorLiquidoNfse fosse o valor da tag <valor_servico>, ele teria que olhar as mudanças e arrumar o código dele certo? Por esse motivo colocamos no componente do DANFe, para evitar efeitos colaterais. Mas se não for um problema, ficou interessante.

Olhando a lógica de leitura de provedores que utilizam o padrão ABRASF 2 (unit ACBrNFSeXLerXml_ABRASFv2.pas), esse valor líquido é calculado da seguinte forma:

ValorLiq := Valores.ValorServicos - Valores.RetencoesFederais -
                  Valores.OutrasRetencoes - Valores.ValorIssRetido -
                  Valores.DescontoIncondicionado - Valores.DescontoCondicionado;

Talvez fosse interessante além do ISS retido, esses outros valores também serem descontados.

Existe ainda o seguinte condicional, que talvez não seje necessário no caso do SigISSWeb (a atribuição do cálculo do valor líquido possa ser feito diretamente na propriedade), mas é importante pontuar:

      if (Valores.ValorLiquidoNfse = 0) or (Valores.ValorLiquidoNfse > ValorLiq) then
        Valores.ValorLiquidoNfse := ValorLiq;
  • Consultores
Postado

Bom dia @Guilherme Consolação Dias,

A ideia é livrar a impressão de tomadas de decisões ou até mesmo realizar cálculos antes da impressão.

Sendo assim devemos fazer os ajustes na leitura do XML.

Você criou a propriedade e fez alteração no Fortes Report, outro teria que fazer para o Fast e outro para o FPDF.

Concentrando tudo na leitura, nenhuma alteração precisa ser feita nesses 3 motores de relatórios.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.