Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

Olá, boa tarde.

Estamos com uma situação de diferença da cálculo ( arredondamento ) entre meu sistema e o Sefin, onde minha base de cálculo foi de 210,00 com 1,65% de Pis.

BC: 210,00
pPis: 1,65%
vPis: 3,46 ( 3,465 ) -> utilizamos o padrão de arredondamento bancário da ABNT (NBR 5891).

                        <vBCPisCofins>210.00</vBCPisCofins>
                        <pAliqPis>1.65</pAliqPis>
                        <pAliqCofins>7.60</pAliqCofins>
                        <vPis>3.46</vPis>
                        <vCofins>15.96</vCofins>

Mas ao gerar/enviar o DPS rejeitou com a seguinte mensagem:

"O valor do Pis informado não corresponde ao resultado da BC Pis/Cofins x Alíquota Pis, que foram informados na DPS."

Ao que me parece, o Sefin está usando arredondamento para >=5 e não segue o padrão ABNT.

Como resolver este tipo de situação sem "quebrar" os demais provedores ou Sefaz?

Obrigado.

Postado (editado)

fazendo o calculo pelo emissor:

image.thumb.png.d7a8c740c876cca0738026aeecadb532.png

 

Aproveitando esse post, como vc preenche esses campos?
quando é retenção, vc informa os % de retenção e quando não tem retenção vc informa as aliquotas totais?

Editado por marcosling
Postado
16 horas atrás, Milton Campanhã disse:

Olá, boa tarde.

Estamos com uma situação de diferença da cálculo ( arredondamento ) entre meu sistema e o Sefin, onde minha base de cálculo foi de 210,00 com 1,65% de Pis.

BC: 210,00
pPis: 1,65%
vPis: 3,46 ( 3,465 ) -> utilizamos o padrão de arredondamento bancário da ABNT (NBR 5891).

                        <vBCPisCofins>210.00</vBCPisCofins>
                        <pAliqPis>1.65</pAliqPis>
                        <pAliqCofins>7.60</pAliqCofins>
                        <vPis>3.46</vPis>
                        <vCofins>15.96</vCofins>

Mas ao gerar/enviar o DPS rejeitou com a seguinte mensagem:

"O valor do Pis informado não corresponde ao resultado da BC Pis/Cofins x Alíquota Pis, que foram informados na DPS."

Ao que me parece, o Sefin está usando arredondamento para >=5 e não segue o padrão ABNT.

Como resolver este tipo de situação sem "quebrar" os demais provedores ou Sefaz?

Obrigado.

No inicio tive este problema, resolvi usando a regra: qdo o terceiro digito é maior ou igual 5 arredonta pra cima

Postado
7 horas atrás, Gildenor disse:

No inicio tive este problema, resolvi usando a regra: qdo o terceiro digito é maior ou igual 5 arredonta pra cima

Fizemos testes para garantir que não iria quebrar a NFe/NFCe se fosse arredondado de outra forma.

E como passou , então vamos optar por alterar nosso motor de cálculo para usar o arredondamento comum ( maior ou igual 5 sempre arredondar para cima ).

Mas caso SERPRO ou RECEITA me responda, eu trarei a resposta aqui.

Obrigado pela ajuda.

  • Curtir 1
Postado

Resposta da RECEITA FEDERAL
Prezado cidadão,
Em atenção à sua manifestação, sugere-se que o interessado entre em contato diretamente com o Município competente, a fim de obter os esclarecimentos e providências cabíveis sobre o assunto.
Sempre que precisar, conte com a Ouvidoria para registrar denúncias, reclamações, sugestões ou elogios sobre os serviços da Receita Federal do Brasil.
Nosso papel é garantir que você exerça seu direito de se manifestar.
A Ouvidoria agradece o seu contato.

  • Confuso 1
  • 3 semanas depois ...
  • Membros Pro
Postado

estou com esse problema também.
sefaz calculou 228,03

<tribFed>
<piscofins>
<CST>01</CST>
<vBCPisCofins>13820.00</vBCPisCofins>
<pAliqPis>1.65</pAliqPis>
<pAliqCofins>7.60</pAliqCofins>
<vPis>228.04</vPis>
<vCofins>1050.32</vCofins>
<tpRetPisCofins>2</tpRetPisCofins>
</piscofins>
</tribFed>
Postado

Gabriel,

Neste caso 13.820.00 x 1.65% = 228.03. ( nem teve dízimas )

13.820.00 x 7.60% = 1050.32 ( também sem dízimas )

Eu tive um problema aqui onde o sistema permite lançar 2 ou mais serviços, mas quando vou gerar a NFSe eu agrupo para 1 único serviço. E ao agrupar (somar) os valores não bate, pois eu fiz o cálculo e arredondamento item a item mas a Sefaz calcula pela base vBCPisCofins.

Então, para o padrão nacional, precisei fazer o cálculo novamente no momento da emissão, considerando a base de cálculo total e não item a item.

Pode ser este seu problema?

Postado

@Níssius Ribas começou ontem. Estou na suspeita que o problema é deles.  Linha de Raciocínio. A alta demanda está provocando variações no ponto flutuante. Isso faz com que o mesmo calculo para eles tenha resultados diferentes.
Então o que nosso sistema faz o calculo e o resultado esta arredondando para cima quando cai no 5 exemplo 23.645 nos arredondamos para 23.65 o calculo deles deve estar dando 23.6499999999999 dai esta arredondando para baixo, é a única explicação que me ocorre no momento. 

Postado
3 minutos atrás, fagner queiroz santana disse:

@Níssius Ribas começou ontem. Estou na suspeita que o problema é deles.  Linha de Raciocínio. A alta demanda está provocando variações no ponto flutuante. Isso faz com que o mesmo calculo para eles tenha resultados diferentes.
Então o que nosso sistema faz o calculo e o resultado esta arredondando para cima quando cai no 5 exemplo 23.645 nos arredondamos para 23.65 o calculo deles deve estar dando 23.6499999999999 dai esta arredondando para baixo, é a única explicação que me ocorre no momento. 

Ontem o meu calculo dava 330*1,65% = 5,445 e eu arredondava para cima(5,45), passava, hoje o mesmo cliente emitindo a mesma nota com o mesmo valor não passa

 

EL Soluções em Informática

Desenvolvimento  e Suporte (ERP, NF-e, Sped Fiscal, EFD Contribuições, Emissor de Cupom Fiscal)
Ronda Alta - RS

(54)3364-1588
www.elinfo.com.br

 

Postado
11 minutos atrás, Níssius Ribas disse:

começou dar problema aqui agora... conseguiu? eu tava arredondano 1.355 para 1.36 e agora esta dando problema

Pelo que entendi eles ajustaram a validação do arredondamento usando a regra ABNT ( bancário ) onde seria:

A regra diz:

Quando a 3ª casa decimal é exatamente 5 (e não há outros dígitos depois), você olha para a 2ª casa decimal:

  • se a 2ª casa for par → mantém (trunca)

  • se a 2ª casa for ímpar → arredonda para cima

Exemplo 1 — trunca (mantém) porque a 2ª casa é PAR

Número original:
2,345

Queremos arredondar para 2 casas decimais.

  • 1ª casa: 3

  • 2ª casa: 4 (par)

  • 3ª casa: 5

➡️ Como a 2ª casa é par, o valor permanece igual.

Resultado ABNT:
2,34


Exemplo 2 — arredonda para cima porque a 2ª casa é ÍMPAR

Número original:
2,355

Queremos arredondar para 2 casas decimais.

  • 1ª casa: 3

  • 2ª casa: 5 (ímpar)

  • 3ª casa: 5

➡️ Como a 2ª casa é ímpar, você soma 1 à 2ª casa.

Resultado ABNT:
2,36


Resumo rápido 🧠

Número 2ª casa 3ª casa Resultado
2,345 4 (par) 5 2,34
2,355 5 (ímpar) 5 2,36
  • Obrigado 2
Postado (editado)

Exemplos (casos clássicos fiscais)

RoundABNT(2.345, 2); // 2.34 
RoundABNT(2.355, 2); // 2.36 
RoundABNT(1.005, 2); // 1.00 
RoundABNT(1.015, 2); // 1.02 
RoundABNT(10.125, 2); // 10.12 
RoundABNT(10.135, 2); // 10.14 

Por que isso é ideal para ICMS / financeiro?

  • ❌ Round() do Delphi não segue ABNT

  • ❌ Double introduz erro binário

  • ✅ Currency evita erro de ponto flutuante

  • ✅ Essa função bate com auditoria fiscal e contábil


A regra de arredondamento da ABNT (NBR 5891) é basicamente o arredondamento bancário (round half to even):

function RoundABNT(const AValue: Currency; Decimals: Integer): Currency;
var
  Factor   : Currency;
  Temp     : Currency;
  IntPart  : Integer;
  Fraction : Currency;
  SignVal  : Integer;
begin
  if AValue < 0 then
    SignVal := -1
  else
    SignVal := 1;

  Factor := 1;
  while Decimals > 0 do
  begin
    Factor := Factor * 10;
    Decimals := Decimals - 1;
  end;

  Temp := AValue * Factor;

  IntPart  := Trunc(Temp);
  Fraction := Abs(Temp - IntPart);

  if Fraction > 0.5 then
    Result := (IntPart + SignVal) / Factor
  else if Fraction < 0.5 then
    Result := IntPart / Factor
  else
  begin
    // Fraction = exatamente 0.5
    if (Abs(IntPart) mod 2) <> 0 then
      Result := (IntPart + SignVal) / Factor
    else
      Result := IntPart / Factor;
  end;
end;

Editado por Milton Campanhã
  • Curtir 1
  • Obrigado 3
Postado
16 minutos atrás, Milton Campanhã disse:

Pelo que entendi eles ajustaram a validação do arredondamento usando a regra ABNT ( bancário ) onde seria:

A regra diz:

Quando a 3ª casa decimal é exatamente 5 (e não há outros dígitos depois), você olha para a 2ª casa decimal:

  • se a 2ª casa for par → mantém (trunca)

  • se a 2ª casa for ímpar → arredonda para cima

Exemplo 1 — trunca (mantém) porque a 2ª casa é PAR

Número original:
2,345

Queremos arredondar para 2 casas decimais.

  • 1ª casa: 3

  • 2ª casa: 4 (par)

  • 3ª casa: 5

➡️ Como a 2ª casa é par, o valor permanece igual.

Resultado ABNT:
2,34


Exemplo 2 — arredonda para cima porque a 2ª casa é ÍMPAR

Número original:
2,355

Queremos arredondar para 2 casas decimais.

  • 1ª casa: 3

  • 2ª casa: 5 (ímpar)

  • 3ª casa: 5

➡️ Como a 2ª casa é ímpar, você soma 1 à 2ª casa.

Resultado ABNT:
2,36


Resumo rápido 🧠

Número 2ª casa 3ª casa Resultado
2,345 4 (par) 5 2,34
2,355 5 (ímpar) 5 2,36

obrigado, alterei minha lógica aqui e funcionou

Postado

Mesmo problema de arredondamento aqui, vou mudar para o arredondamento bancário.

O maior problema é a falta de transparência e de uma documentação\comunicação efetiva. 

No final do ano passado tivemos problemas com cancelamentos de notas, simplesmente a forma como o sistema esta cancelando notas hoje não esta de acordo com a documentação publicada. A documentação não foi corrigida até, que se basear na documentação vai penar.

No inicio do mês tivemos problemas com a emissão de notas com retenção de ISSQN, simplesmente o valor liquido da NFSE não estava considerando o ISSQN retido, isso após atualização do sistema da SEFIN.

Hoje este problema...

Toda semana uma surpresa.

Postado

Acabei de passar por esse problema e esse post resolveu o problema, seria legal adicionarem essa informação na documentação da NFSe.

Marco Aurélio V. da Silva
Analista de Sistemas • Desenvolvedor
Especialista em rotinas fiscais, DF-e, integrações ERP e automação tributária.
💻 Linguagens: Java • Flutter • Harbour • VB.NET
WhatsApp (33) 99152-2942
 

  • Fundadores
Postado

Na pasta "tools" do SVN do ACBr, tem o Documento da ABNT

https://svn.code.sf.net/p/acbr/code/tools/Diversos/nbr-5891-2014-regras-de-arredondamento-na-numeraao-decimalpdf.pdf

Essa é a Rotina em Pascal, que o ACBr disponibiliza em ACBrUtil.Math.pas

{-----------------------------------------------------------------------------
 Arredondamento segundo as normas da ABNT NBR 5891/77  (por: DSA)
 Fontes:
 http://www.sofazquemsabe.com/2011/01/como-fazer-arredondamento-da-numeracao.html
 http://partners.bematech.com.br/2011/12/edicao-98-entendendo-o-truncamento-e-arredondamento-no-ecf/
 -----------------------------------------------------------------------------}
function RoundABNT(const AValue: Double; const Digits: TRoundToRange;
  const Delta: Double): Double;
var
   Pow, FracValue, PowValue : Extended;
   RestPart: Double;
   IntCalc, FracCalc, LastNumber, IntValue : Int64;
   Negativo: Boolean;
{$IFNDEF EXTERNALLINKER}
   OldRM: TFPURoundingMode;
{$ELSE}
   OldRM: TRoundingMode;
{$ENDIF}
begin
  OldRM := GetRoundMode;
  try
    if (OldRM <> rmNearest) then
      SetRoundMode(rmNearest);

    Negativo  := (AValue < 0);
    Pow       := intpower(10, abs(Digits) );
    PowValue  := abs(AValue) / 10 ;
    IntValue  := trunc(PowValue);
    FracValue := frac(PowValue);

    PowValue := SimpleRoundToEX( FracValue * 10 * Pow, -9) ; // SimpleRoundTo elimina dizimas ;
    IntCalc  := trunc( PowValue );
    FracCalc := trunc( frac( PowValue ) * 100 );

    if (FracCalc > 50) then
     Inc( IntCalc )

    else if (FracCalc = 50) then
    begin
     LastNumber := round( frac( IntCalc / 10) * 10);

     if odd(LastNumber) then
       Inc( IntCalc )
     else
     begin
       RestPart := frac( PowValue * 10 ) ;

       if RestPart > Delta then
         Inc( IntCalc );
     end ;
    end ;

    Result := ((IntValue*10) + (IntCalc / Pow));
    if Negativo then
     Result := -Result;
  finally
    SetRoundMode(OldRM);
  end;
end;

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado (editado)

Estou aplicando essa regra apenas para o emissor nacional, mas imagino que seja padrão para todos os municípios que estão pelo emissor nacional correto? 

 

 

Editado por Marcio Patyk
  • Fundadores
Postado

Arredondamento segundo normas da ABNT...

(Ele é diferente do arredondamento bancário)

Sim.. todos os Documentos Eletrônicos Brasileiros, usam o arredondamento segundo ABNT

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.