Painel de líderes
Conteúdo popular
Showing content with the highest reputation on 18-02-2026 em todas as áreas
-
Projeto ACBr está refatorando as classes ACBrLib C# Olá comunidade ! O Projeto ACBr iniciou a refatoração das classes de alto nível em C#, mantendo a compatibilidade com o .NET 4.5 As mudanças ocorrerão ao longo do ano de 2026. Principais mudanças Desacoplamento usando interfaces: agora cada classe de alto nível terá sua interface (IACBrLibCEP, IACBrLibNFe, ...); Uso da interface IACBrLibBase; Substituição da classe ACBrLibHandle por ACBrLibBase; ACBrLibHandle será depreciada e removida Remoção do selamento das classes ACBrLib Programas exemplo: Os demos terão pastas de build (output) próprias para ST e MT; Serão atualizados para .NET. 4.8. Exemplo: // Pasta de saída para demo MT trunk2\Projetos\ACBrLib\Demos\C#\Mail\Demo\ACBrLibMail.Demo\bin\MT\Debug // Pasta de saída para demo ST trunk2\Projetos\ACBrLib\Demos\C#\Mail\Demo\ACBrLibMail.Demo\bin\ST\Debug Fases da refatoração Obs.: Até a presente data, 02/03/2026 concluímos a fase II Fase I Refatoração da ACBrLib.Core com inclusão da classe ACBrLibBase e da interface IACBrLibBase. Além disso, foram expostos os métodos `Inicializar`,`Finalizar` e `OpenSSLInfo` nas classes ST e MT. Nessa fase, foi adicionada uma camada de compatibilidade entre as classes filhas de ACBrLibHandle e ACBrLibBase. Fase II Classes filhas de ACBrLibHandleBase carregarão a ACBrLib em modo thread safe. Refatoração das classes MT mais usadas; Inclusão das interfaces IACBrLib. Lista atualizada em 02/03/2026 Já foram atualizados: ACBrNFe; ACBrNFSe; ACBrCEP; ACBrMDFe; ACBrPIXCD; ACBrPosPrinter; ACBrBAL; ACBrBoleto; ACBrConsultaCNPJ; ACBrCTe; ACBrGTIN; ACBrETQ; ACBrIBGE; ACBrReinf; ACBrNCMs; ACBrMail; PIXMatera; Sedex. ACBrPosPrinter Agora, o método Inicializar é responsável por instanciar o componente! Método usado para preparar o buffer para impressão agora é InicializarPos(). Essa alteração visa corrigir a ambiguidade causada pelos argumentos opcionais do método Inicializar(): public interface IACBrLibBase { // permite a chamada sem argumentos, exemplo: Inicializar(); void Inicializar(string eArquivoConfig = "", string eChaveCrypt= ""); } Exemplo: //versões anteriores a 1.0.9 ACBrPosPrinter pos = new ACBrPosPrinter("[Memory]", ""); pos.Inicializar(); // metódo antigo (inicializar buffer) // ACBrLib.PosPrinter >=v1.0.9 ACBrPosPrinter pos = new ACBrPosPrinter("[Memory]", ""); pos.InicializarPos(); ACBrReinf Outra modificação importante aconteceu em ACBrReinf, na interface IACBrLibReinf o método para configurar o TipoContribuinte é SetTipoContribuinte. Exemplo: // versões anteriores a 1.0.8 ACBrReinf reinf = new ACBrReinf("",""); reinf.TipoContribuinte(cmbTipoContribuinte.SelectedIndex); IACBrLibReinf reinf = new ACBrReinf("",""); reinf.SetTipoContribuinte(cmbTipoContribuinte.SelectedIndex); // >= 1.0.8 Depreciados ACBrSAT e ACBrSATMT foram depreciados. O código fonte e o programa exemplo dessa classe serão removidos na fase V. Exemplo: // exemplo de uso IACBrLibCEP cep = new ACBrLibCEP("[Memory]", ""); Fase III Atualização da interface IACBrLibBase para incluir os métodos Nome(), Versao() e UltimoRetorno(). Nessa fase, serão removidos os campos ( fields / properties ) `Nome` e `Versao` das classes ST Exemplo: ACBrNFe nfe = new ACBrNFe("[Memory]", ""); Console.WriteLine(nfe.Nome); // Removido // Novo método: IACBrLibNFe nfe = new ACBrNFe("[Memory]", ""); Console.WriteLine(nfe.Nome()); Fase IV Descontinuação da classe ACBrLibHandle. Fase V Separação dos pacotes ACBrLibX.Common com recursos compartilhados em ST e MT, incluindo a interface IACBrLibX; Nessa fase, os pacotes serão publicados com a versão 2.0.0; Recursos compartilhados, como interfaces, classes de resposta e de notas fiscais, terão seu próprio pacote; A chamada do método `Inicializar` será obrigatória após instanciar a ACBrLib. Exemplo: using ACBrLib.NFe; using ACBrLib.NFe.Common; IACBrLibNFe nfe = new ACBrNFe("[Memory]", ""); try { nfe.Inicializar(); } catch (Exception e) { // tratamento de erro } Exemplo de recurso compartilhado: using ACBrLib.Core; namespace ACBrLib.NFe.Common { public interface IACBrLibNFe : IACBrLibBase { ACBrNFeConfig Config { get; } void CarregarNota(NotaFiscal nfe); } }3 pontos
-
Boa tarde a todos! Foi enviado na Rev-44909 ajuste removendo a DecodeToString da unit do Padrão Nacional. Por favor, atualizem seus fontes, reinstalem o ACBr com a opção "Apagar Arquivos Antigos" marcada no instalador e façam novos testes.2 pontos
-
Boa tarde a todos! Foi enviado na Rev-44909 ajuste removendo a DecodeToString da unit do Padrão Nacional. Por favor, atualizem seus fontes, reinstalem o ACBr com a opção "Apagar Arquivos Antigos" marcada no instalador e façam novos testes.2 pontos
-
Boa tarde a todos, Vamos pontuar algumas coisas: Temos que ter em mente que todos os municípios (5571) tem que firmar o convenio, convenio este que pode ser a Adesão ao Emissor Nacional da NFS-e ou a Adesão ao Compartilhamento das notas com o ADN (Ambiente de Dados Nacional). Hoje 18/02/2026 a situação é: Portanto temos ainda 7 municípios que não sabemos se aderiu a emissão ou ao compartilhamento. Quando o município adere ao emissor no arquivo ACBrNFSeXServicos.ini fica da seguinte forma (exemplo): [1100031] Nome=Cabixi UF=RO Provedor=PadraoNacional Quando o município adere ao compartilhamento no arquivo ACBrNFSeXServicos.ini o provedor continua o mesmo caso o referido município não trocou por conta de uma licitação (exemplo): [3505500] Nome=Barretos UF=SP Provedor=RLZ ProRecepcionar=https://cidadaoonline.barretos.sp.gov.br/nota/nacional HomRecepcionar=https://barretos.prefeitura.rlz.com.br/nota/nacional Sobre o provedor RLZ, mediante a Reforma Tributária o mesmo resolveu implementar uma API Rest para recepcionar o XML e adotou o layout do Padrão Nacional em vez de alterar o layout em uso que para a cidade de Barretos/SP era o layout da ABRASF versão 2.03 Uma decisão ao meu ver assertiva, pois dessa forma podemos caminhar para um layout único para a NFS-e. Como funciona o processo de emissão da NFS-e no caso do RLZ e outros provedores? O componente gera e envia para o WebService Soap ou API Rest (provedor RLZ) o XML segundo o layout adotado pelo provedor. Alguns provedores fazem algumas verificações outros não verificam nada e realiza o compartilhamento com o ADN. Esse compartilhamento não é unitário e sim em lote, ou seja, a prefeitura monta um lote de notas a serem enviadas para o ADN, isso pode demorar um pouco em função do volume de XML recepcionados. Com as notas no ADN podemos usar alguns métodos da API do Padrão Nacional tais como: Consultar DPS por chave, Consultar NFSe por chave, Enviar evento e Consultar evento quando o provedor não implementou esses serviços, Consultar DFe (funciona como do Distribuição DF-e da NF-e) e Obter DANFSE (em PDF). No caso do provedor RLZ para podermos ter acesso a todos esses métodos da API do Padrão Nacional se faz necessário fazer a seguinte alteração no arquivo ACBrNFSeXServicos.ini [3505500] Nome=Barretos UF=SP Provedor=RLZ ProRecepcionar=https://cidadaoonline.barretos.sp.gov.br/nota/nacional HomRecepcionar=https://barretos.prefeitura.rlz.com.br/nota/nacional ; ProConsultarNFSeRps=https://sefin.nfse.gov.br/sefinnacional ProConsultarNFSePorChave=https://sefin.nfse.gov.br/sefinnacional ProConsultarDFe=https://adn.nfse.gov.br/contribuintes ProConsultarEvento=https://sefin.nfse.gov.br/sefinnacional ProConsultarParam=https://adn.nfse.gov.br ProObterDANFSE=https://adn.nfse.gov.br ProLinkURL=https://www.nfse.gov.br/ConsultaPublica/?tpc=1&chave=%CodVerif% HomConsultarNFSeRps=https://sefin.producaorestrita.nfse.gov.br/SefinNacional HomConsultarNFSePorChave=https://sefin.producaorestrita.nfse.gov.br/SefinNacional HomConsultarDFe=https://adn.producaorestrita.nfse.gov.br/contribuintes HomConsultarEvento=https://sefin.producaorestrita.nfse.gov.br/SefinNacional HomConsultarParam=https://adn.producaorestrita.nfse.gov.br HomObterDANFSE=https://adn.producaorestrita.nfse.gov.br HomLinkURL=https://www.producaorestrita.nfse.gov.br/ConsultaPublica/?tpc=1&chave=%CodVerif% Eu ainda estou em busca de uma solução para não ficar repetindo as URLs do Padrão Nacional, mas ainda não encontrei. @Diego Reckziegel, acredito o proposto acima vai além do que você queria. Favor atualizar todos os fontes de todas as pastas, reinstale o ACBr e faça os testes.2 pontos
-
2 pontos
-
Uma possível solução que acho que tem o mesmo efeito é alterar o segundo parâmetro da função DecodeToString para False: //linha594 if NFSeXml <> '' then NFSeXml := DecodeToString(DeCompress(DecodeBase64(NFSeXml)), False); E outra que o @Gabriel Bonzanini compartilhou no outro tópico relacionado foi alterar adicionando ACBrAnsiToUTF8: if NFSeXml <> '' then NFSeXml := ACBrAnsiToUTF8(DecodeToString(DeCompress(DecodeBase64(NFSeXml)), True)); Mas tenho receio qualquer uma dessas possa vir a causar quebras de códigos em outras situações, como lazarus ou Delphi 7. Precisamos validar todas as opções e isso é o que mais tem dado trabalho. Mas obrigado pela sugestão.2 pontos
-
Olá comunidade! Comunico que um novo curso foi adicionado ao pacote Pro. O Dia do ACBr 2025 foi um evento impactante, com muita riqueza de conteúdo. E agora, os 58 conteúdos estão disponíveis para todos os membros do nosso clube. Clique aqui para visializar o curso Como acessar a Plataforma de Cursos? Nutror - Plataforma para Cursos, onde você terá acesso a todos os conteúdos disponíveis e lançamentos futuros. Você poderá encontrar o curso Dia do ACBr 2025 disponível em seu pacote de Cursos ACBr Pro.2 pontos
-
Olá! Conforme sabemos em teoria se tudo fosse nacional nossa vida estaria mais facil, bom mas como não é assim, esta semana eu tirei tempo para ajustar os provedores que estavam com problemas no meu sistema, e uma das coisas que me chamou atenção ainda é a falta de uniformização dos DANFSe. Meus clientes atualmente usam Nacional, Betha, IPM e Sigcorp. Quando vi que o da Betha o provedor estava retornando em base64 o Danfse, eu pensei porque não seria possivel fazer nos outros?, mesmo que eles não disponibilizem, então venho trabalhando em uma solução usando por base o que já tem implementado no ACBr para pegar o Danfse quando é Nacional, e apliquei a mesma ideia ao IPM e Sigcorp, e acredito que pode ser aplicado a qualquer outro. Segue solução para avaliação. Aquivos Alterados ACBrUtil.FilesIO --> Criado função semelhante a StringIsPDF, porem voltada a Stream, "StreamIsPDF". ACBrNFSeXWebserviceBase --> Ajustado rotina que envia a requisição para que se o retorno for um PDF, não seja feito tratamento como Binario para String, e sim de Binario para Base64, isto é necessário pois a rotina original apesar de funcionar, vira "Loteria", acontece que dependendo dos dados que vem no PDF, o mesmo pode ficar mal formado e causar erro. Isto explica a modificação ta unit ACBrUtil.FilesIO. ACBrNFSeXProviderBase --> Ajustei rotina SalvarPDFNfse, testando se o mesmo esta em base64 para ai salvar o PDF integro conforme veio em ACBrNFSeXWebserviceBase ou se não executa a rotina antiga, pois não sei em que mais locais poderia impactar o modo antigo. IPM.Provider SigCorp.Provider Nestas duas implementei as rotinas que vem das classes base function ObterDANFSE(const ACabecalho, AMSG: string): string; override; procedure PrepararObterDANFSE(Response: TNFSeObterDANFSEResponse); override; procedure TratarRetornoObterDANFSE(Response: TNFSeObterDANFSEResponse); override; Também fiz uma pequena alteração no CriarServiceClient de cada provider, para entender quando é a solicitação do DANFSE. ACBrNFSeXServicos.ini Adicionei os endereços para obter os DANFSE [4211207] Nome=Morro da Fumaca UF=SC Provedor=IPM Versao=1.01 ProRecepcionar=https://morrodafumaca.atende.net/?pg=rest&service=WNERestServiceNFSe HomRecepcionar=https://morrodafumaca.atende.net/?pg=rest&service=WNERestServiceNFSe ProObterDANFSE=https://adn.nfse.gov.br HomObterDANFSE=https://adn.nfse.gov.br [4204202] Nome=Chapeco UF=SC Provedor=SigCorp Versao=2.04 ProRecepcionar=https://chapeco.meumunicipio.online/abrasf/ws HomRecepcionar=https://testechapeco.meumunicipio.online/abrasf/ws ProNameSpace=https://abrasfchapeco.meumunicipio.online/ws HomNameSpace=https://testechapecoabrasf.meumunicipio.online/ws ProObterDANFSE=https://adn.nfse.gov.br HomObterDANFSE=https://adn.nfse.gov.br No caso especifico dos provedores citados implementei para Versão 1.01 do IPM e 2.04 do SigCorp. Se for implmentar para outros provedores, é basicamente fazer o mesmo que foi feito nos dois providers citados. Foram feitos inumeros testes em PRODUÇÃO no dia de hoje com IPM em Morro da Fumaça/SC e SigCorp em Chapecó. Inclusive no provider do SigCorp corrigi também o cancelamento, que não estava correto. Tudo isto foi feito com fontes atualizados de 16/02/2026. ACBrUtil.FilesIO.pas ACBrNFSeXWebserviceBase.pas ACBrNFSeXProviderBase.pas IPM.Provider.pas SigCorp.Provider.pas ACBrNFSeXServicos.ini1 ponto
-
Sim eu já li o PDF da documentação mas não consegui resolver com as informações que tem nele, no caso este: https://nfse.cabofrio.rj.gov.br/ver20240921/tmp/PortalServices/202601112128460461202601112123170869CABO_FRIO_2026-1.pdf Mas agradeço muito a atenção e a tarefa para Avaliação, mandei mais um e-mail para a ModernizacaoPublica e alguém lá respondeu para mim com cópia para outro funcionário de lá pedindo que este respondesse a minha dúvida, qualquer novidade eu posto aqui1 ponto
-
Boa tarde, Localizei a documentação em https://nfse.cabofrio.rj.gov.br/ Criada a tarefa ACBR-9007 para avaliação.1 ponto
-
Prezado Juliomar, peço desculpas pelo atraso da resposta, mas estava fora de operação. Referente à solução do método questionado TACBrNFSeProviderISSSaoPaulo.AssinaturaAdicional(), na época tinha feito ele compatível com o que está vigente no repositório de hoje, 18/02/2026: if FPVersaoDFe = '2' then begin ... if NFSe.Servico.Valores.ValorInicialCobrado > 0 then LValorServicos := Poem_Zeros(OnlyNumber(FormatFloat('#0.00', NFSe.Servico.Valores.ValorInicialCobrado)), 15) else LValorServicos := Poem_Zeros(OnlyNumber(FormatFloat('#0.00', NFSe.Servico.Valores.ValorFinalCobrado)), 15); end else begin ... LValorServicos := Poem_Zeros(OnlyNumber(FormatFloat('#0.00', NFSe.Servico.Valores.ValorServicos)), 15); end; Entretanto, optamos por não aderir ainda à nova versão 2 da NFS-e paulistana, devido às questões abaixo: 1) A PMSP estava calculando errado a base de cálculo do IBS/CBS, pois na operação ela retirava (subtraia) todos os impostos (PIS, COFINS, CSLL, IRRF, e ISS caso exista), sendo que ela deveria somente retirar o PIS e COFINS. Ela própria depois reconheceu o erro e publicou notícia sobre o assunto: "Prefeitura identifica e corrige equívoco na emissão da nova Nota Nacional de Serviços" (https://notadomilhao.sf.prefeitura.sp.gov.br/noticias/prefeitura-identifica-e-corrige-equivoco-na-emissao-da-nova-nota-nacional-de-servicos/); 2) Publicidade errada na NFS-e de "0,00% de Alíquota Estadual do IBS" e "0,10% de Alíquota Municipal do IBS", o que está errado, é o inverso. A PMSP nos informou em consulta própria que já corrigiu também a questão; 3) Problemas de arredondamento no imposto do CBS e IBS, sendo discrepante em relação à calculadora da Receita Federal. A PMSP nos informou em consulta própria que são efetuados truncamentos ao invés de arredondamentos (o que nós fazemos hoje), e que caso "houver definição por parte do governo federal, o sistema será ajustado". Pois bem, o governo publicou a Nota Técnica Nº 007 - Vs. 1 em 07/02/2026, onde na página 4 ela agora define isso no item [Arredondamento e Tolerância de R$0,01 para “vPis” e “vCofins”], em que será "adotado o método de arredondamento bancário (half-even)". Iremos aguardar mais uns dias para a PMSP se adaptar à essa nota técnica, e depois iremos novamente tentar emitir na versão 2.1 ponto
-
Essa função foi introduzida no Delphi XE2, se não me engano. Ou seja, não podemos utilizar já que, no nosso caso, precisamos manter a compatibilidade com versões anteriores do delphi (XE, 2010, 2009, 2007 e 7). Sim... nós já detectamos isso. Inclusive, foi o comentário que eu fiz no tópico relacionado do Diogo Loff. Estamos fazendo testes para validar a remoção do DecodeToString() antes de enviar ao SVN. Nosso amigo @Diego Folieneestá ajudando com respeito a isso. Acredito que ainda hoje vamos enviar uma alteração nesse respeito. Vai ser preciso depois avaliar mais profundamente esse caso, mas aí vamos criar testes. Essa parte eu não sei se entendi direito. Pode explicar melhor?1 ponto
-
@EMBarbosa @Daniel Simoes @Diogo Loff Acredito que o problema tem ocorrido especificamente com o unit do provedor nacional. Especificamente no tratamento do retorno da consulta da NFSE por chave, o retorno está sendo convertido propositalmente logo após a descompressão, o que aparentemente "mata" o String binário do AnsiString e compromete o UTF8. if NFSeXml <> '' then NFSeXml := DecodeToString(DeCompress(DecodeBase64(NFSeXml)), true); Este é o único método dessa maneira. os demais não fazem a conversão (Emitir é um exemplo, a linha está comentada): if NFSeXml <> '' then begin // NFSeXml := DecodeToString(DeCompress(DecodeBase64(NFSeXml)), True); NFSeXml := DeCompress(DecodeBase64(NFSeXml)); LerNFSe(NFSeXml); end; Aqui tenho usado sem a conversão e tem funcionado sem problemas. O pessoal comenta que "estraga" os acentos, mas isso é apenas no DEBUG da IDE: as propriedades do compoenente carregam os valores devidamente codificados e os métodos "Salvar" também geram arquivos corretos. Se há um ponto que talvez necessite deste tratamento, seria no XML do respose (não apliquei na unit em anexo): Response.XmlRetorno := DecodeToString(NFSeXml); Poderiam validar isso? PadraoNacional.Provider.pas1 ponto
-
Bom dia! Criada a tarefa ACBR-9002 para avaliação. Obrigado pela contribuição.1 ponto
-
Vou encerrar este tópico e vou abrir um novo com melhorias que fiz que podem permitir outros provedores que são proprios não usar mais o DANFE customizado, e sim sempre pegar do Nacional. Implementei para IPM e Sigcorp, também peguei várias situações interessantes de possiveis erros que aconteceu em várias notas que tentei resgatar, geralmente notas com muitos dados, então cabe um tópico especifico disto para vocês avaliarem.1 ponto
-
É que no código do ACBr a tag indTotTrib só está sendo gerada quando diferente de sim. Alteramos aqui para = sim para não gerar.1 ponto
-
Bom dia @Marcos Pereda, Criada a tarefa ACBR-8992 para avaliação. Obrigado pela contribuição1 ponto
-
Olá comunidade ! Foi publicada a versão 1.30 da Nota Técnica 2014/002. Alterações Esta versão adiciona na lista de documentos que podem ser devolvidos no retorno da distribuição DFe os eventos "Insucesso na Entrega na NF-e" e "Insucesso na Entrega do CT-e propagado para NF-e"; A tabela atualizada ficou assim: Lembrando que o detalhamento de cada um dos novos eventos pode ser encontrado respectivamente na Nota Técnica 2023/005 e na Nota Técnica 2023/002. Datas Implantação Teste: 30/09/2024 Implantação Produção: 30/09/2024 E como fica o ACBr? Alterações não serão necessárias, visto que a estrutura do retorno não foi alterada. Leia a versão 1.30 desta nota técnica completa AQUI.1 ponto
-
Estamos recebendo relatos de usuários com rejeição sobre os dados da operação de pagamento por cartão de credito (tPag = 3) /debito (tPag = 4) e Pix Dinamico (tPag = 17) Tabela de Rejeições NT 2025.001 v1.01 Se você NÃO TEM TEF integrado: Tipo de Integração (tag: tpIntegra) para “2 – Pagamento não integrado com o sistema de automação da empresa (Ex.: equipamento POS)”, assim, não será necessário informar os dados da transação com a Operadora de Cartões. Sobre o campo TpIntegra: ATENÇÃO: Caso a legislação estadual não possua uma legislação que obrigue a vinculação dos pagamentos Eletrônicos ao programa emissor. Dessa forma, há possibilidade em utilizar a opção do TpIntegra = 2 e não a necessidade de informar CNPJ da credenciadora. Lembrando que estados como RS, MT é obrigatório a integração de formas de pagamentos de forma automatizada, sem intervenção manual; Temos um curso sobre como informar os campos em RS e MT: https://acbr.nutror.com/curso/8d575bd8a7c0ac0fda312f9b12b1eb521e606446/integracao-dos-meios-de-pagamento-aos-documentos-fiscais-eletronicos Como fica o XML, sem TEF Integrado: <code>//Grupo de Pagamentos <pag> <tPag>04</tPag> <vPag>10.56</vPag> <card> //Tipo de Integração TEF NAO INTEGRADO 2 <tpIntegra>2</tpIntegra> </card> </pag></code> Como fica o XML com TEF Integrado (mais detalhes de campos veja o curso citado acima: <code>!-- Grupo de Pagamentos --> <pag> <tPag>04</tPag> <vPag>10.55</vPag> <card> <tpIntegra>1</tpIntegra> //CNPJ da Operador do Cartão <CNPJ>11222333000144</CNPJ> //Bandeira do Cartão <tBand>02</tBand> //Código de Autorização do pagamento em Cartão <cAut>123993</cAut> </card> </pag></code>1 ponto
