Milton Campanhã Postado 17 Dezembro, 2025 Postado 17 Dezembro, 2025 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.
Milton Campanhã Postado 17 Dezembro, 2025 Autor Postado 17 Dezembro, 2025 Enviei esta dúvida ao SERPRO mas não sei se é o caminho correto, mas não custa tentar! Protocolo: 18870.002622/2025-55 Órgão ou Entidade: SERPRO – Serviço Federal de Processamento de Dados Tipo de Manifestação: Solicitação Prazo para Atendimento: 16/01/2026
marcosling Postado 17 Dezembro, 2025 Postado 17 Dezembro, 2025 (editado) fazendo o calculo pelo emissor: 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 17 Dezembro, 2025 por marcosling
Gildenor Postado 18 Dezembro, 2025 Postado 18 Dezembro, 2025 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
Milton Campanhã Postado 18 Dezembro, 2025 Autor Postado 18 Dezembro, 2025 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. 1
Milton Campanhã Postado 19 Dezembro, 2025 Autor Postado 19 Dezembro, 2025 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. 1
Membros Pro Gabriel Herdt Postado 9 Janeiro Membros Pro Postado 9 Janeiro 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>
Milton Campanhã Postado 15 Janeiro Autor Postado 15 Janeiro Gabriel, Neste caso 13.820.00 x 1.65% = 228.03. ( nem teve dízimas ) E 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?
Níssius Ribas Postado 22 Janeiro Postado 22 Janeiro começou dar problema aqui agora... conseguiu? eu tava arredondano 1.355 para 1.36 e agora esta dando problema
Maurício Sareto Postado 22 Janeiro Postado 22 Janeiro Opa aqui também não esta passando, ontem arredondando para cima passava, agora não passa mais... 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-1588www.elinfo.com.br www.elsolucoeseminformatica.blogspot.com.br
fagner queiroz santana Postado 22 Janeiro Postado 22 Janeiro @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.
Maurício Sareto Postado 22 Janeiro Postado 22 Janeiro 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-1588www.elinfo.com.br www.elsolucoeseminformatica.blogspot.com.br
Milton Campanhã Postado 22 Janeiro Autor Postado 22 Janeiro 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 2
fagner queiroz santana Postado 22 Janeiro Postado 22 Janeiro @Milton Campanhã, não posso acreditar numa insanidade dessas. Isso não faz sentido nenhum. parece logica de bebado kkkk. 1
Milton Campanhã Postado 22 Janeiro Autor Postado 22 Janeiro (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 22 Janeiro por Milton Campanhã 1 3
Níssius Ribas Postado 22 Janeiro Postado 22 Janeiro 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
Guilherme Martin Ewz Postado 23 Janeiro Postado 23 Janeiro use o simpleRoubdTo que funciona ex: var value:Currency; Value := valorFloat; result := simpleRoundto(value,-2);
Suporte Kinto Postado 27 Janeiro Postado 27 Janeiro Em C# basta fazer assim: Math.Round(valorCofins, 2, MidpointRounding.ToEven)
Milton Campanhã Postado 27 Janeiro Autor Postado 27 Janeiro Em 23/01/2026 at 07:56, Guilherme Martin Ewz disse: use o simpleRoubdTo que funciona ex: var value:Currency; Value := valorFloat; result := simpleRoundto(value,-2); Tem razão Guilherme, o RoundTo ou SimpleRoundTo faz exatamente o arredondamento bancário. System.Math.RoundTo - RAD Studio API Documentation
Leandro Augusto Dias Postado 28 Janeiro Postado 28 Janeiro 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.
marcoprodata Postado 29 Janeiro Postado 29 Janeiro 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 (33) 99152-2942
Fundadores Daniel Simoes Postado 3 Fevereiro Fundadores Postado 3 Fevereiro 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; 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Marcio Patyk Postado 4 Fevereiro Postado 4 Fevereiro (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 4 Fevereiro por Marcio Patyk
Membro Pro Verificado IgorAcertSoft Postado 4 Fevereiro Membro Pro Verificado Postado 4 Fevereiro Este arredondamento bancário deve ser utilizado para as NF-e's e NFC-e's também?
Fundadores Daniel Simoes Postado 4 Fevereiro Fundadores Postado 4 Fevereiro Arredondamento segundo normas da ABNT... (Ele é diferente do arredondamento bancário) Sim.. todos os Documentos Eletrônicos Brasileiros, usam o arredondamento segundo ABNT 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora