NFS-e Nacional

Este módulo emite a NFS-e Nacional (Nota Fiscal de Serviços
eletrônica no padrão nacional) diretamente no ambiente Sefin Nacional
/ ADN (Ambiente de Dados Nacional), sem gateway pago e sem passar pelo
webservice de cada prefeitura.
O que é a NFS-e Nacional. É o padrão único de NFS-e mantido pelo
Governo Federal e pelos municípios, com leiaute e regras de validação
comuns. O prestador não emite a nota diretamente: ele envia uma DPS
(Declaração de Prestação de Serviços) assinada, e o ADN valida, autoriza
e devolve a NFS-e com sua chave de acesso de 50 dígitos. Os municípios
conveniados ao padrão nacional usam esse mesmo ambiente.
O que o módulo faz. A partir de um l10n_br_fiscal.document de
serviço (modelo SE) confirmado:
- monta a DPS (versão 1.00 do leiaute) e valida contra o XSD
oficial;
- assina a DPS com o certificado A1 (ICP-Brasil) da empresa;
- envia ao ADN por REST com mTLS e grava a NFS-e autorizada, a chave
de acesso de 50 dígitos, o número e o protocolo;
- trata a rejeição do ADN, mostrando o motivo legível no chatter e no
evento do documento;
- cancela a NFS-e pelo evento 101101, com o código do motivo
escolhido no assistente de cancelamento;
- consulta no ADN se a nota foi cancelada fora do Odoo (eventos
101101 e 305101);
- gera o DANFSe em PDF a partir do XML autorizado (layout v2.0 da NT
008/2026), sem consultar nenhum portal;
- importa o XML de uma NFS-e Nacional ou de uma DPS para um
documento fiscal.
Como se encaixa. Depende de l10n_br_nfse, de onde vêm o campo de
provedor e o de ambiente da NFS-e, mas mapeia a DPS direto sobre o
l10n_br_fiscal.document: os campos de serviço e de impostos já estão
no núcleo fiscal, então nada do fluxo municipal (RPS, ABRASF) é
reaproveitado. O leiaute vem do módulo l10n_br_nfse_spec (mixins
xsdata-odoo sobre os schemas oficiais), ligado ao documento pelo
spec_driven_model. Ao escolher o provedor Sefin Nacional (ADN)
na empresa, os documentos de serviço dela passam por este módulo, e os
módulos municipais e de gateway continuam atendendo as demais empresas.
Important
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
More details on development status
Table of contents
Na empresa:
- Certificado digital: cadastre o certificado A1 (ICP-Brasil) da
empresa (módulo l10n_br_fiscal_certificate). Ele assina a DPS e os
eventos e também autentica a conexão mTLS com o ADN. A chave privada é
usada só em memória e em arquivo temporário com permissão restrita, e
não é registrada em log.
- Processador de documentos eletrônicos: Odoo Community (oca).
- Provedor de NFS-e: Sefin Nacional (ADN)
(provedor_nfse = nacional). Só as empresas com esse provedor
emitem pelo ADN.
- Ambiente da NFS-e: Produção ou Homologação. No ADN a homologação
se chama produção restrita e usa outro endereço. O documento copia o
ambiente da empresa na criação, e você pode alterá-lo no próprio
documento.
- Cadastro da empresa: CNPJ ou CPF, município (com código IBGE) e
regime tributário (MEI, Simples Nacional ou regime normal), pois a DPS
informa o município emissor e o regime do prestador.
Série e numeração. A série e o número do documento vêm do documento
fiscal (a série na linha de numeração da empresa). O número informado é
o nDPS, e não existe RPS: a numeração é livre e a chave da DPS, de
42 dígitos, é montada com município, tipo de emissor, CNPJ/CPF, série e
número.
Município. O município do prestador precisa estar conveniado ao
padrão nacional. Para testar, use o ambiente de homologação (produção
restrita) com o certificado da empresa.
Dependências Python: nfelib, brazilfiscalreport,
erpbrasil.assinatura, requests e cryptography.
Emitir
- Crie um documento fiscal de serviço (modelo SE) para uma empresa
configurada com o provedor Sefin Nacional (ADN), com tomador, linhas
de serviço (código de serviço, impostos) e a operação fiscal.
- Confirme o documento. O módulo monta a DPS, assina com o certificado
A1 e valida contra o XSD. Se houver erro de schema, ele aparece no
documento e nada é enviado; volte o documento para rascunho, corrija
e confirme de novo.
- Envie o documento. O módulo transmite a DPS ao ADN por REST/mTLS.
- Na autorização, o documento fica Autorizada e guarda a chave de
acesso de 50 dígitos, o número da NFS-e, o protocolo e o XML
autorizado. Na rejeição, o documento fica Rejeitada e o motivo
devolvido pelo ADN aparece no chatter e no evento.
- O DANFSe em PDF é gerado localmente a partir do XML autorizado,
pela ação de imprimir/gerar o PDF do documento.
Cancelar
- No documento autorizado, use Cancelar e informe a justificativa.
- Escolha o código do motivo (1 - erro na emissão, 2 - serviço não
prestado, 9 - outros).
- O módulo assina e envia o evento de cancelamento 101101 ao ADN e,
aceito o evento, marca o documento como cancelado.
A inutilização de numeração não existe para a NFS-e Nacional, e por isso
o botão fica oculto nos documentos de serviço.
Consultar o status
Em documento autorizado, o botão Consultar Status pergunta ao ADN se
a nota foi cancelada por fora do Odoo (evento 101101 ou 305101,
este de ofício) e, se foi, atualiza o documento.
Importar XML
O módulo importa o XML de uma NFS-e Nacional ou de uma DPS e cria o
documento fiscal correspondente.
Já implementado
- Mapeamento da DPS sobre o documento fiscal, com prestador, tomador,
serviço e valores, e o regime tributário (MEI, Simples Nacional ou
normal) deduzido da empresa.
- Cliente REST/mTLS com verificação de certificado do servidor, nova
tentativa apenas em GET e sem registrar payload nem chaves em log.
- Emissão, rejeição legível, cancelamento pelo evento 101101 e
consulta de cancelamento feito fora do Odoo.
- DANFSe gerado do XML autorizado.
Limitações conhecidas
- A alíquota (pAliq) nunca é informada na DPS para município
conveniado: o ADN toma a alíquota dos parâmetros municipais e recusa a
alíquota informada em casos como o erro E0625.
- Empresa fora do Simples Nacional informa o tributo aproximado em
pTotTrib; empresa do Simples sem faixa de receita cai no indicador
indTotTrib, pois o ADN exige uma das opções.
- CNAB e cobrança bancária não se aplicam a este módulo.
- Não existe inutilização de numeração para a NFS-e Nacional (a
numeração da DPS é livre).
Ainda não implementado
- Reconciliação de resposta perdida (GET /nfse/{chave} e
GET /dps/{id} antes de reenviar a DPS).
- Eventos de substituição (e105xxx) e os demais tipos de evento.
- IBS/CBS (reforma tributária), distribuição de documentos recebidos,
contingência e envio assíncrono com fila (queue_job).
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
feedback.
Do not contact contributors directly about support or help with technical issues.
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the OCA/l10n-brazil project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.