Executando verificação de segurança...
12

Minha saga com a emissão de NFS-e

Olá pessoal 👋 Sou programador e quero compartilhar com vocês um desafio que enfrentei nos últimos meses: emitir NFS-e. Parece algo básico, mas foi uma verdadeira jornada.

Minha primeira tentativa foi buscar soluções prontas, aquelas APIs pagas que prometem resolver tudo. Entrei em contato com várias empresas, comparei preços e funcionalidades, e até cheguei a começar a integração com uma delas. Mas, no teste final com um cliente… Descobri que não havia suporte para a cidade dele.

Ok, segui para outra API. Dessa vez até conseguimos a homologação junto à prefeitura. Porém, veio outro problema: o ambiente de homologação liberado era de uma cidade diferente (o que em teoria não importa, já que os dados de homologação são fictícios). Só que a API simplesmente não permitia emitir notas de outra cidade que não seja a do cadastro no site da API, mesmo em homologação.

Outro ponto crítico que percebi: muitas dessas APIs só liberam acesso ao ambiente de homologação depois que você paga. Ou seja, só dá pra descobrir se funciona para o seu caso quando já estiver pagando, e muitas vezes com valores bem altos. E pior ainda, após pagar e liberar o acesso, é capaz de perder mais tempo com problemas na integração.

Tentando o ACBR

Na sequência, fui atrás de alternativas gratuitas e encontrei o ACBR, que já tinha visto comentarem por aqui no TabNews. A ferramenta é realmente completa, cobre praticamente tudo que eu precisaria.
Mas aí vem o grande problema: não é nada dev-friendly.

  • Documentação fraca ou inexistente.
  • Tutoriais confusos ou voltados para linguagens que usam DLL diretamente.
  • Interface gráfica da acbrlib_php que não faz o menor sentido sem explicação.
  • Zero quickstart ou guia prático.

Até encontrei cursos pagos, mas com valores na casa de R$ 1.500/ano, o que foge totalmente da ideia de algo acessível.

A luz no fim do túnel

Quando já estava quase desistindo, achei exatamente o que eu precisava: um projeto open source chamado php-nfse.
Ele tinha tudo — integrações com várias cidades, simples de usar, gratuito… mas estava abandonado havia 8 anos.

Pesquisando mais, encontrei alguns forks que ainda recebiam atualizações e mantinham compatibilidade. Então tomei uma decisão: juntar os updates desses forks e tentar trazer o php-nfse de volta à vida.

Já estou corrigindo os schemas atualizados de alguns provedores e sei que não será uma tarefa fácil, mas acredito que vale a pena lutar por isso.

👉 Meu objetivo: emissão de NFS-e gratuita e acessível para todos.

Opiniões

Gostaria de saber o que vocês acham da idea de trazer o php-nfse de volta a vida. Se tiverem sugestões de API's acessiveis, projetos opensource existentes ou tutoriais gratuitos ACBR. Meu objetivo é apenas um jeito de emitir NFS-e de forma que não precise tirar uma fortuna do bolso.

Quem quiser contribuir também com a lib vou estar deixando o link do repositório.

Carregando publicação patrocinada...
4

Acredito que seja humanamente impossível uma pessoa conseguir manter ativa uma lib dessa.

São mais de 5000 cidades no Brasil. Se cada prefeitura mudasse seu layout apenas a cada 10 anos, mesmo assim TODOS OS DIAS DO ANO você teria que fazer uma adequação, e ainda não seria suficiente, pois você só corrigiria 3650.

ACBr é gigante, e não consegue cobrir todo o Brasil.

Adicionado na edição:
Só pra não vir apenas com uma visão negativa e não contribuir, eu uso a Tecnospeed (plug notas). Se não me engano eles usam a ACBr por baixo dos panos.
Funciona bem. Documentação aceitável. Tem suporte. Mas não é barato. Eu paguei algo em torno de 1500 de implantação, que não tem como não pagar, e mais 500 por mês para emitir até 3000 notas por mês.

Já tive prefeitura que mudou o fornecedor, e eles atualizaram para o fornecedor novo da prefeitura em 1 ou 2 semanas. Ou seja, mantem tudo funcionando.

1

Pois é, o ACBr consegue ter um pouco mais da metade das cidades atendidas por conta da comunidade que está sempre ajudando, se não for assim é quase impossível. Se a tecnospeed usa o ACBr, não falam, mas eles tem parceria com o ACBr para comercialização de certificados

0

O objetivo não é tentar atingir 100% das cidades e nem tentar manter a lib sozinho, vou usa-la nas cidades que preciso e vou manter dessa forma, e outras pessoas que quiserem contribuir com suas cidades para usar a lib são bem vindas.

3

Eu já falei do ACBr aqui e sou um grande defensor, até por que uso já há uns 10 anos e sou PRO tem um ano.
Vou esclarecer algumas coisas sobre o ACBr e também sobre NFSe.
Eu tenho a emissão da NFSe de Governador Valadares-MG pelo ACBr integrado e a cada dia que passa mais cidades são integradas, já que a comunidade é enorme e muito colaborativa. Eu mesmo contribui com alguns códigos.
A NFSe é um problema enorme para todos os programadores por que cada cidade tem seu provedor e não há padronização, portanto será difícil achar um serviço que atende a todas as cidades. Os provedores são bem desorganizados já que envolve mais política do que realmente entregar um serviço de qualidade.
Sobre o ACBr, ele é baseado no Delphi/Lazarus e toda contribuição é feita nestas linguagens podendo ser usado o ACBrLib ou ACBrMonitor para fazer integração com outras linguagens.
Existe códigos de exemplo no Delphi, até tem para outras linguagens como é o caso do PHP, tem um docker para usar o ACBrLib com PHP e recentemente foi lançado bibliotecas node no NPM.
Você consegue suporte gratuito no fórum e também no discord que conta com mais de 20mil usuários.
Sobre o valor de R$1.500,00 por ano, é o ACBrPRO que é o suporte pago da comunidade. Eu sou PRO e super indico, mas fui usuário gratuito por muito tempo.

No seu caso para usar o ACBrLib você tem de compilar as dll ou .so no Lazarus ou pagar o ACBrPRO.

0

Sobre a lib para php e o docker é algo que comento no meu texto, não adianta tu soltar um negocio e não adicionar uma documentação sobre. Eu realmente quero usar o ACBr, mas quando eu tento procurar qualquer documentação é muito pouca, dificil achar exemplos funcionais.

1

Isto é algo que o ACBr tem de melhorar, a documentação que tem não é tão detalhada assim, mas tem sim. Tem os demos e exemplos, fora que há o código fonte para você analisar e a comunidade onde você pode postar e conseguir tirar suas dúvidas.
Creio que não chegou a navegar pelo fórum ou ter postado alguma dúvida no discord.

1

Primeiro, parabéns pela iniciativa. Estou tentando enviar RPS em lote para prefeitura de Teresina depois da mudança para o modelo ABRASF 2.03, mas sempre recebo como resposta "Arquivo enviado com erro na assinatura. / Acerte a assinatura do arquivo.". Já verifiquei todos as informações no XML, o que poderia causar erro na assinatura, já enviei o XML para o suporte e o que sugerem não modifica a mensagem de retorno. Se algum desenvolvedor de Teresina vir esse comentário, agradeceria muito qualquer ajuda.

1

Achei muito incrivel sua atitude. Vou inclusive testar aquí em goiania pra ver. Embora estou vendo já 2026 como vai ficar. Atendo: NFE, NFCE, MDFE, CTE com: ACBR Trunk2 e SPED-NFE.
Vou testar aqui a NFSE de: https://github.com/crazynds/php-nfse
mas já de olho em 2026 aguardando uma "Luz 2026"
Não tenho interesse em componentes pagos. Nunca precisei nem pra SPED, TEF ou outros.
Basta programar com simplicidade sem invetar muito que funfa.
Obrigado, vou testar e ver se consigo emitir uma NFSe para aparecida de goiânia.
Para 2026 ambiente NACIONAL até agora achei esta, da uma olhada ai pessoal!
https://github.com/Rainzart/nfse-nacional/blob/master/exemples/ConsultaDpsChave.php

1
3

Deveria servir, mas a máfia e a corrupção no brasil não deixam.
As prefeituras preferem usar softwares de "terceiros", que com toda certeza são super faturados e deve rolar um bom desvio de verbas para manter.
Eu uso o portal da prefeitura de Cariacica-ES,pois o município ainda não aderiu a emissão pelo portal NFSe, mas o padrão é obrigatoriamente o da Abrasf.
Na minha opinião isso tudo deveria ser um só documento, NFe, NFSe, NFCe e qualquer outro do tipo.
Muita burocracica e gambiarra para nos dar trablaho.

1

Não serve, pois o MEI emite nota de serviço pelo emissor nacional, mas as outras empresas precisam emitir pelo provedor da cidade que pode ser o nacional, padrão abrasf ou próprio do provedor.
Com a reforma tributária quem usa abrasf vai ter de usar o padrão nacional ou um provedor próprio.

1

Mas esse site não é só para Mei... se a cidade optar por ele, qualquer empresa pode usá-lo. Inclusive, acho que a cidade de SP aderiu à ele...

1
0
1
1

Esses dias eu estava pensando em criar uma API para resolver isso só que é realmente um inferno a falta de padronização e regras, não tem como dar manutenção a todas as cidades, talvez dê para fazer uma parte, ainda não desisti da ideia talvez role só falta definir bem as cidades

0
0
0
1

Isto é um futuro meio distante.
Mesmo com a reforma tributária ainda não será unificado a emissão das notas de serviço e padrão, apenas vai ser compartilhada as notas emitidas por outros provedores.
Ainda há um longo caminho para que tudo seja unificado, mas isto parte principalmente pela area politica e não pela técnica, infelizmente.

1

Já foi instituido um padrão nacional da NFS-e. Ele será obrigatório a partir de 2026.

A partir de janeiro de 2026, os municípios que não aderirem ao padrão nacional, deixam de receber repasses de recursos da união.

https://www.linkedin.com/pulse/plataforma-nfse-padr%C3%A3o-oficial-e-transi%C3%A7%C3%A3o-da-reforma-tribut%C3%A1ria-jhdlf/

https://www.linkedin.com/feed/update/urn:li:activity:7294839878800834560/

Este é o portal oficial com toda a documentação: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica

0
2

Bom dia pessoal !
Estou na luta aqui também, estou utilizando a producaorestrita:https://www.producaorestrita.nfse.gov.br/swagger/fisco/

Meu município optou para que os contribuintes emitam NFSe pelo Portal Nacional do Contribuinte.
Fiz un teste aqui buscando os lotes das possiveis NFSe compartilhadas no ADN.
Estou usando a url:https://adn.producaorestrita.nfse.gov.br/municipios/dfe/0?tipoNSU=DISTRIBUICAO
ELa retorna 2 Lotes com 50 NFSe.
Mas, Não vem as NFSe emitidas no meu municipio. Apenas NFSe emitidas em outros estados com tomador do meu municipio.
Alguem sabe como posso ter todas as NFSe , não apenas dos outros municipios? Seria outra URL ?

Abraços

1

Esta url que você citou, serve para baixar as NFS-e Padrão Nacional, que outras empresas emitiram para o CNPJ dono do certificado digital usado para fazer a consulta. Não tem nada a ver com o município do emissor, mas se a empresa que está usando o sistema, é uma tomadora/destinatária da nota de serviço.

Seria um equivalente ao serviço de distribuição e manifestação da NF-e, para a NFS-e Nacional, só que disponível em API Rest em vez de SOAP como no caso da NF-e.

Esta rota que você citou, é a rota em ambiente de homologação. Justamente a que eu estava procurando. Muito obrigado.

Uma dúvida, onde você encontrou esta rota? Olhei em vários lugares e não achei.

As rotas para pesquisa em ambiente de produção, são as seguintes:

Documentação: https://www.nfse.gov.br/swagger/contribuintesissqn/#/DFe%20-%20https%3A%2F%2Fadn.nfse.gov.br%2Fcontribuinte

Endpoints:

https://adn.nfse.gov.br/contribuintes/DFe/0
https://adn.nfse.gov.br/contribuintes/NFSe/COLOQUE_A_CHAVE_DE_ACESSO_DE_UMA_NFSE_AQUI/Eventos

Lembrando que estas são as rotas para consulta das NFS-e de seviços tomados.

Para emissão da NFS-e Padrão Nacional, a rota é a seguinte:

https://sefin.producaorestrita.nfse.gov.br/SefinNacional/nfse

A documentação da NFS-e padrão Nacional, está uma verdadeira bagunça, há umas 3 ou mais documentações swagger disponíveis, e cada uma delas tem algumas diferenças:

https://sefin.nfse.gov.br/SefinNacional/swagger/ui/index
https://sefin.producaorestrita.nfse.gov.br/SefinNacional/swagger/ui/index
https://www.nfse.gov.br/swagger/contribuintesissqn/

1

Boa tarde, obrigado por compartilhar as infos. Também estou na luta tentando integrar. Fiz um main (java) de teste com dados fixos baseado no que encontrei nesse projeto em php: https://github.com/Rainzart/nfse-nacional
Eventualmente consegui comunicar, mas por alguma razão do além está dando erro de assinatura:
{
"Codigo": "E0714",
"Descricao": "Arquivo enviado com erro na assinatura."
}
Já conferi os manuais e aparentemente está ok, estou assinando a tag correta e usando o algoritmo correto (rsa sha1). Entrei em contato usando o fale conosco, mas até o momento não obtive resposta.
Alguem de vcs teve esse mesmo erro?
Alguem de vcs pode passar um xml assinado de exemplo? Pode ser com as tags em branco, só pra eu ver se descubro algo. Obrigado.

1
1

Olá!

Verifique se o seu XML está sendo alterado após a assinatura. Não pode haver qualquer modificação do XML após assinar.

Espero ter ajudado.

1

Olá!

Consegui resolver o problema. Eu estava fazendo o seguinte:

ERRO: Quando eu assinava a DPS via código, eu copiava o valor de dpsXmlGZipB64 do terminal e testava o envio manualmente no Insomnia. Isso causava o erro no processo.

SOLUÇÃO: Passei a realizar todo o fluxo diretamente pelo código — geração, assinatura e envio — sem copiar nada manualmente. A partir do momento em que parei de intermediar pelo Insomnia, tudo funcionou corretamente.

Em resumo: monte, assine e envie sua DPS diretamente pela aplicação. Não copie o conteúdo do terminal para testar em outro lugar.