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

O labirinto fiscal brasileiro: o que ninguém te conta sobre integrar NF-e no seu sistema

Se você já tentou emitir uma nota fiscal eletrônica por código no Brasil, sabe que a documentação oficial parece ter sido escrita por alguém que não queria que você entendesse. Eu gastei 3 meses da minha vida nesse buraco e quero poupar um pouco do sofrimento de quem vier depois.
Esse texto é sobre o que eu aprendi integrando NF-e, NFC-e e NFS-e num sistema de gestão que estou construindo. Não é tutorial passo a passo — é mais um mapa de onde estão as armadilhas.

O problema que ninguém avisa

A primeira coisa que você descobre é que "nota fiscal eletrônica" não é uma coisa só. São pelo menos três mundos diferentes:

  • NF-e (modelo 55): nota de venda de produto. Comunicação com a SEFAZ estadual.
  • NFC-e (modelo 65): cupom fiscal do consumidor. Também SEFAZ estadual, mas com regras próprias.
  • NFS-e (nota de serviço): cada prefeitura tem seu próprio web service, seu próprio layout XML, sua própria autenticação. São literalmente milhares de padrões diferentes.
    Quando li isso pela primeira vez, achei que era exagero. Não é. O município de São Paulo usa um layout. Florianópolis usa outro. Curitiba outro. E por aí vai. Não existe um padrão nacional obrigatório para NFS-e (o padrão ABRASF é uma "recomendação" que cada prefeitura implementa como bem entende).

Certificado digital: a primeira parede

Para emitir NF-e e NFC-e, você precisa de um certificado digital A1 (arquivo .pfx). Parece simples, mas:

  • O certificado precisa ser convertido para que seu código consiga assinar o XML
  • Em Python, a lib signxml funciona, mas você precisa extrair a chave privada e o certificado do .pfx separadamente usando cryptography
  • O XML precisa ser assinado com Canonical XML (C14N), e se você errar o namespace, a SEFAZ rejeita silenciosamente — sem mensagem de erro útil
    Gastei dois dias num bug onde o XML estava correto visualmente, mas a assinatura era inválida. O problema? Um espaço em branco extra dentro de uma tag que o C14N não normalizava do jeito que a SEFAZ esperava.

O XML da NF-e: um campo minado

O schema da NF-e tem centenas de campos. Muitos são obrigatórios dependendo do contexto. Alguns exemplos que me pegaram:
O campo indPag (indicador de pagamento) foi removido na versão 4.0, mas alguns validadores ainda esperam ele. O campo CST muda de significado dependendo se a empresa é Simples Nacional ou Regime Normal. E o famigerado CFOP — são centenas de códigos que definem a natureza da operação, e usar o errado pode gerar multa.
Uma coisa que me ajudou muito: pegar XMLs de notas reais (você pode baixar pelo portal da SEFAZ) e comparar campo por campo com o que seu código gera. É tedioso, mas é o debug mais eficiente.

Ambientes de homologação: não confie cegamente

A SEFAZ oferece ambiente de homologação para testes. Em teoria, funciona igual ao de produção. Na prática:

  • O ambiente de homologação costuma ficar fora do ar em horários aleatórios
  • Algumas validações que existem em produção não existem em homologação (e vice-versa)
  • O tempo de resposta em homologação pode ser 10x maior que em produção
    Minha recomendação: teste em homologação, mas não assuma que "se passou lá, vai passar em produção". Tenha um bom tratamento de erros e logging detalhado para os primeiros dias em produção.

A decisão que salvou o projeto

Depois de tentar fazer tudo na mão por 6 semanas, tomei uma decisão pragmática: usei componentes de terceiros para a parte de comunicação com a SEFAZ. Especificamente, componentes em Delphi/Lazarus que fazem a parte pesada — assinatura, transmissão, tratamento de retorno.
Não é a solução mais elegante do ponto de vista arquitetural. Mas é o que funciona. E é o que praticamente todos os softwares fiscais brasileiros fazem por baixo dos panos, mesmo os que se vendem como "100% cloud native".
O ponto é: a legislação fiscal brasileira é tão complexa e muda com tanta frequência que manter uma lib própria de comunicação com a SEFAZ é praticamente um produto em si. A menos que seu core business seja justamente esse, não vale o investimento.

O que eu faria diferente

Se fosse começar de novo:

  1. Não tentaria fazer a comunicação SEFAZ do zero. Usaria um serviço de terceiro desde o dia 1. O tempo que gastei tentando foi tempo que podia ter ido pra features que o usuário realmente vê.
  2. Começaria pela NFC-e, não pela NF-e. A NFC-e é mais simples (menos campos obrigatórios, sem necessidade de manifesto do destinatário) e te dá um ciclo de feedback mais rápido.
  3. Montaria uma suíte de testes com XMLs reais antes de escrever qualquer código. Baixaria umas 50 notas de diferentes estados e tipos de operação e usaria como fixture.
  4. Não subestimaria a NFS-e. Achei que seria mais fácil por ser "só serviço". É o oposto — a fragmentação municipal torna tudo mais caótico.

Algumas referências que me ajudaram

  • A documentação técnica do portal da NF-e (nfe.fazenda.gov.br) é densa mas é a fonte da verdade
  • O repositório do projeto ACBr (mesmo sendo Delphi) tem a melhor documentação não-oficial sobre os schemas
  • O grupo do ACBr no fórum é surpreendentemente ativo e prestativo
  • Para NFS-e, o site da ABRASF tem o layout padrão, mas sempre confira com a prefeitura específica

Se alguém aqui já passou por isso ou está planejando integrar emissão fiscal no seu sistema, fico à disposição nos comentários. É um daqueles assuntos que quase ninguém escreve sobre porque é tedioso demais — mas justamente por isso, qualquer documentação ajuda.

Carregando publicação patrocinada...
3

Que massa, tenho uma software house, uso ACBR há 12 anos, recomendo bastente, e como vc mesmo disse o forum/discordo são muito ativos e pro ativos para judar

Trabalho com emissão de nfe, cte, mdfe e nfce desde as versões 1.0, realmente é tudo um caos, esperamos que com a reforma tributária diminuia um pouco, mas pelo inicio já ter sido com o pé esquerdo, duvido muito. São muitas regras estaduais (não só fiscais), até formas de emissão que variam de um estado pro outro (ex: até pouco tempo nfe na Bahia só aceitava no modo assincrono).

O pior é depois fazer a escrituração, quantas vezes é permitido uma emissão de certa forma e quando vai passar pro SPED ele não aceita aqueles dados, é triste.

Mas é isso ai, bem vindo ao mundo da automação comercial.

Sucesso!

1

ACBR é top né? Fazem sim um bom trabalho, é a porta de entrada para quem quer encarar o mundo fiscal na base do código. Tenho recomendado, e você confirma isso. Custo baixo pra manter e facilita muito a vida.

1
2

Sou dono do https://github.com/Hercules-NET/ZeusFiscal e https://github.com/AutomacaoNet/MotorTributarioNet

tem o discord também: https://discord.gg/EE4TGKAkkG

Comunidade ativa também no discord , no meu caso é C# .NetCore, mas atuo com fiscal tributário a 12 anos.

Tenho uma empresa de automação comercial, NF-e, NFC-e, CT-e, MDF-e, CT-e Os, os de mais colaboradores do projeto Danilo, Adriano, Marcus que são donos também do ZeusFiscal (Hercules), todos são donos de empresas de automação comercial também ou seja o projeto vai ser mantido sempre =)

ahh , já fez a reforma tributária? rsrs Se for do Ceará ou Goiás ou Mato Grosso ou Rio Grande do Sul, já implementou integração com TEF POS ou TEF para atender essas UF ?

é um ramo com infinitas mudanças, serviço sem fim , além disso tem que ter a parte da gestão da empresa que também é constantes mudanças.

1

Concordo, o serviço nunca para, farei parte da comunidade lá, e te convido pra minha também, pode acessar através do site https://bunto.com.br/comunidade. Será ou serão todos bem vindos.

Sobre a reforma, sim já está ativa, uma soução paralela que vai livrar de grandes dores de cabeça no futuro quando vier o desmembramento do código para remover o que não serve mais.

1

Que saudades desse tempo....
Trabalha em software-house em 2009 tinhamos um TMS com 700 clientes, e apareceu o projeto SPED com o tal do CT-e que iria substituir o CTRC, então começamos a desenvolver o comunicador entre sefaz x cliente, dias de luta... até para extrair um certificado tinha luta,

Tirar uma duvida ? ligavamos para o responsável técnico do T.I da SEFAZ diretamente, chegou a ponto de ligar para a sefaz-MT e ficar no clica daqui " vê os logs se chegou ai..." "...chegou!"

Depppoooiis alguns anos depois apareceu tecnospeed, ACBR, e outros tantos especializados.
tudo tem seus prós e contras, esses componentes carregavam DLLS locais, certificados locais que direto dava pau antivirus, SSL, registros (no caso sistema desktop), e desde o inicio a arquitetura era para ser um webservice de autorização de DF-e que roda ate hoje feito em java e atualmente sendo migrado para Python, como diria os antigos ..."quando cheguei aqui tudo era mato...."

Seu texto lembrou esse tempo bacana !

1
1

kkkkkkk, cara, passei pela mesma situação no começo! Depois você se acostuma e, ao meu ver, foi uma curva de aprendizado bem interessante. Inclusive, estou querendo pegar em breve a parte de transporte: CT-e, CT-e OS e MDF-e.

Concordo 100% com você que os Manuais da NF-e são complexos. No meu caso, quando comecei a fazer o sistema, eu trabalhava na área administrativa de uma empresa do Simples Nacional que usava Série D. Quando precisava de nota fiscal, usava o finado emissor do Sebrae, onde tinha que preencher todos os campos manualmente. Foi nesse processo que peguei uma noção básica da nota fiscal.

Em relação ao Manual, o que acho que mais complica — pelo menos foi o que me fez perder várias semanas — é que você baixa o Anexo I do MOC (Manual de Orientação do Contribuinte) pensando que ele está atualizado. Porém, semanas depois, comecei a perceber que tinha algo errado e descobri que o Manual estava (e está) desatualizado! Você tem que ler o Anexo I e dezenas de NTs (Notas Técnicas) para conseguir acertar os campos. Felizmente, depois achei na internet um MOC atualizado com todas as NTs.

Sobre a NFC-e e NF-e: basicamente, com os campos que você emite a NFC-e, você consegue emitir a NF-e. Mas aconselho incluir os demais campos para a NF-e, como referenciar nota fiscal, nota de devolução, data de entrega, entre outros que provavelmente você vai precisar.

Já em relação à nota de serviço (NFS-e), desisti no início. Optei por contratar um gateway para fazer o processo de emissão; eles mesmos entram em contato com a prefeitura e fazem todo o trâmite. Agora que a NFS-e Nacional começou a se tornar obrigatória, acho que as coisas vão melhorar, e mais no futuro vou voltar a ver para implementar. No momento, minha preocupação é com a Reforma Tributária.

Não sei exatamente o que você está fazendo, mas atenção aos cálculos: se seu sistema não calcular, deixe eles editáveis para a pessoa preencher. Inclusive, a nota fiscal de serviço passou a pedir a alíquota efetiva, que basicamente muda todo mês. Seu sistema tem que calcular ou permitir que o usuário altere mensalmente.

Outro detalhe importante são as obrigações acessórias. Alguns contadores fazem na própria contabilidade, mas outros exigem do sistema: Sintegra (dependendo do estado - Simples Nacional), Sped (Regime Normal) e alguns estados têm solicitações próprias.

Minha sugestão: comece com o seu estado, depois você vai abrindo para outros. E não se esqueça de ver a parte de homologação estando offline, contingência, homologação por timeout, carta de correção, eventos, Manifesto... mas vai vendo com calma.

E só para fechar, tem outros tipos de notas e a cada dia surge mais uma: BP-e, DC-e, CT-e, CT-e OS, GTV-e, NFAg, MDF-e, NFeABI, NF-e, NFC-e, NFF, NFGás, NF3-e, NFCom.

1

Meu estado sc por azar é um dos mais complicados kkk. Mas sim, meu sistema não é desktop, e tem edição manual de cálculos, juntamente com o automatizado. PEguei um desafio enorme e já fiz logo pro país todo. EU li e testei muita coisa, mas descobri que tem um fim, não é infinito e nem deve ser.

Se quiser pode fazer parte da comunidade pra acompanahr o crescimento do projeto https://bunto.com.br/comunidade. Agora estou implementando o módulo de indústria fazendo ligação obvio com nota fiscal. Pode conhecer o sistema também pois é aberto a teste gratuíto, ai vai ver o tamanho da "brincadeira" que ja'tem a soma de +- 40 módulos.

1

Trabalho especificamente mantendo um gerador/emissor fiscal que se comunica com NFe/NFCe e estamos trabalhando na NFSe (nacional) e a documentação é extremamente técnica sim, porém todo o processo é muito bem documentado.
Na minha opinião é um dos poucos processos que é grande, e que tem uma documentação realmente atualizada SEMPRE.
HOMOLOGAÇÃO tem esse nome por que acharam legal, pois sim, a documentação oficial explica que ele é e SEMPRE será diferente do ambiente de produção, pois algumas mudanças vão entrar nele primeiro, para depois irem para a PRODUÇÃO.
O NFCe é um "subconjunto" menor, voltado a venda rápida com consumidor, sem tanto recurso, ele é DIRETO E RETO, o ambiente de CONTINGÊNCIA é caótico em todas as variações, até porque as regras dele tem mais excessão, na verdade a excessão é a regra.

O certificado você se acostuma, piora muito quando for lidar com A3 e certificados com hardware, principalmente fora do Windows, é virtualmente impossível.

Sim, o produto É o emissor, o resto é anexo. Manter de modo escalável um sistema de emissão, é realmente complexo, e tem ainda normas que mudam de UF para UF por sorte sao poucas mais existem. Outro problema é que nem todos ENTRAM no ar ao mesmo tempo.

Uma coisa que me ajudou muito: pegar XMLs de notas reais (você pode baixar pelo portal da SEFAZ) e comparar campo por campo com o que seu código gera. É tedioso, mas é o debug mais eficiente.

os XSD são, o melhor caminho de validar a base, as regras, só com o tempo você passa a ENTENDER do fiscal e compreende como funciona, mais o sistema tributário vive das excessões, aparentemente a reforma deveria mudar isso, mais parece que ta caminhando pra ser mais um ninho de mafagafo emaranhado no meio dos outros.

Quanto a NFSe é um universo a parte, e se te servir de inspiração para o CAOS, pensa que municípios como SÃO PAULO, RIO DE JANEIRO, seguem um padrão mais "correto" e quase compatível entre sí, o problema reside ou seria resiste, nas menores prefeituras. Simplesmente, elas não querem mudar, e muito menos evoluir, isso iria gerar custo e elas são pequenas.... dai, as centenas ou milhares de excessões delas são um mar de monstros.

1
1

Esse módulo do Roberto pra PHP é muito bom, e extremamente completo e aberto. Inclusive ele tem uma API paga pronta, que nunca usei mais pelo que vejo falarem é muito boa.

1

É isso mesmo, mas aqui entre nós, como todo conhecimento, há uma curva de aprendizado. Passei por esta curva e não tenho mais "medo" códigos para notas fiscais. Fica a dica: A real é que nem é tão complicado, mas sim, uma cadência de matemática e informaçoes corretas. E é assim mesmo que deve ser. Senão vira bagunça.

2

Por ser um setor altamente regulamentado, e regrado, vemos que na média, são sistemas bem mantidos, se você já teve que integrar sistemas com automação bancária, ANTES do OpenFinance vai entender o que eu tô falando....
As prefeituras, ainda são meio que como integrar com 5570 sistemas diferentes, a NFSe veio para botar um pouco mais de ORDEM no caos, mais ainda estamos a uns 10 anos de um MVP nacional..... Falta as leis serem mais incisivas, contra as prefeituras, quando foi implementado a NF-e ela já previa um "modelo" nacional para serviços que nunca saiu do papel pois as prefeituras não aderiram.
Essa nova versão teve mais "adesão" pois beneficiou as pequenas prefeituras, já que o "creditário" do ISS será dividido entre lugar de emissão e de prestação.... imagina que uma NETFLIX tem clientes no Brasil inteiro, se as prefeituras de cidades pequenas receberem uma pequena fatia (dos assinantes locais) acaba se beneficiando e tendo um incentivo pra participar......
Pra mim, deveria ser como LEI, a partir de dia X a emissão será no ambiente nacional. Nós contribuintes temos que aceitar, porque só o fato da prefeitura ser 'governo' ela pode discutir e ter 'regras' mais brandas?

Mas, enfim, é uma área legal para atuar.

1

Meus 2 cents,

"NFS-e (nota de serviço): cada prefeitura tem seu próprio web service, seu próprio layout XML, sua própria autenticação. São literalmente milhares de padrões diferentes."

Atualmente já está em vigor o emissor nacional que ajuda na padronização e nessa questão de serviços descentralizados.

1

Kkkkk, tava passando o olhos na lista de comentarios e vi um "Meus 2 cents" que nao lembrava ter feito ! De boa, vou cobrar Royalties ! Kkkkk

1

Quais integrações de terceiro você indica para terceirizar e apenas emitir a nota, salvar, enviar pro cliente e pronto?

Já não tinha a intenção de fazer na mão, agora com teu relato então, nem pensar.

1

Cara, faz paralelo com uma api se está com tempo curto. Mas não deixa de aprender e encarar o desafio. Te garanto, 3 meses de muito código e estudo você domina isso. SObre recomendação de api não tenho porque nunca usei uma. Fui direto pra lib acbr.

1
1

ACBr é um projeto fantástico, usamos faz muitos anos.

Mas para um melhor suporte da comunidade, sugiro o canal do Discord ao invés do fórum. O Discord deles é muito ativo, tem inclusive podcasts ao vivo mais de uma vez por semana.

1

É sim, para curto prazo e agilidade no desenvovimento é o que há. Qaundo iniciei meu projeto, já tinha em mente que não queria uso de api e que iria encarar essa parada de fazer com uma biblioteca, e olha só, deu muito certo.

1

Às vezes eu tenho dúvidas se ninguém escreve porque é tedioso ou pq, como você mesmo disse, pode ser um negócio por si só. Se você gastou centenas de horas estudando pra entender, pq disponibilizar de graça?
Eu sempre tive dúvidas em implantação de notas fiscais e nunca achei um curso voltado pra programação. Sempre são contadores com mil termos técnicos que não fazem sentido. Sempre disse, em todos os sistemas que eu participei: essa parte aqui é com seu contador. O que ele precisar, me avise que eu coloco. Mas não me peça pra implementar.
E é isso.
Acho que falta uns bons tutoriais voltados pra programador, que use nuvem, linguagens modernas... Nem que fosse a implantação em sistemas já existentes, como nuvemfiscal, mas que explique os conceitos das coisas, não somente uma coisa feita pra contador, ou uma coisa que supõe que o programador entende toda a confusão que é a parte fiscal.

2

To pensando seriamente em fazer isso, já me pediram pra ensinar minha didática de programação. Quem me conhece ou conhece meu trabalho não consegue compreender como eu faço tanta coisa e em tão pouco tempo. Quem sabe né, tenho um canal no youtube e poderia usar pra isso. Seria bem divertido simplificar essa questão toda.

0
1

Existem diversos motivos pelo qual empresas enormes terceirizam a emissão, guarda e inbound de DF-es (documentos fiscais eletrônicos). Essa dificuldade pra implementar, depois testar é uma delas.

E você nem tocou no assunto contingência...

1
1

No ano passado eu tentei implementar emissão de NFC-e. Comecei tentando com js, depois java e por fim, python. Quando achei que estava quase conseguindo, esbarrei na questão da sefaz exigir um cadastro homologado de responsável técnico (com cnpj) . Alguém sabe se é possível fazer isso como dev freelancer?

1
2

Vi esse repositório, ele é legal sim, mas o que pega muito nesta questão é que, ou você tem uma equipe pra cuidar (fazer um acompanhamento rigoroso ) das mudanças fiscais, ou poderá ter grandes problemas. Acabei ficando com acbr pelo fato do custo mensal ser fixo e bem em conta e ainda tenho não só uma equipe de suporte mas também uma equipe trabalhando todo dia para manter tudo em ordem dentro da legislação. Foi o ponto chave.

1

Meus 2 cents,

Olhando teu relato me vem a mente aquelas cenas de filmes de guerra (p.ex. "Band of Brothers" ou "Nascido para Matar") onde o batalhao rala na lama durante o treinamento.

Seja como for, receba com orgulho seu diploma de formatura e junte-se a elite dos bravos que fazem happy hour contando as desventuras de trabalhar com APIs de terceiros (governamentais ou nao) pessimamente documentadas (e horrivelmente implementadas).

A loucura disso eh o que voce aponta: cada prefeitura faz de uma forma e isso muda com uma velocidade apavorante.

Um dos primeiros sistemas que trabalhei foi Folha de Pagamento em 80 e la vai fumaca: era (eh) um pesadelo: as vezes voce mal tinha alterado o codigo com alteracoes da lei e ja tinha outra.

Enfim, parabens pela iniciativa, pela persistencia e por compartilhar conosco !

Saude e Sucesso !

2

Bom, neste ano com o padrão nacional, veio um pouco de alívio, mas ainda é coisa nova, é problemático essa transição. Eu cheguei bem no meio de tudo isso e não corri. Eu vi como oportunidade de dominar mais ainda e vencer de vez a curva de aprendizado. E foi o que aconteceu.

0
1