Skip to main content
Odoo Community Association

NFS-e Nacional

Alpha License: AGPL-3 OCA/l10n-brazil Translate me on Weblate Try me on Runboat

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.

Table of contents

Configuration

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.

Usage

Emitir

  1. 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.

  2. 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.

  3. Envie o documento. O módulo transmite a DPS ao ADN por REST/mTLS.

  4. 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.

  5. O DANFSe em PDF é gerado localmente a partir do XML autorizado, pela ação de imprimir/gerar o PDF do documento.

Cancelar

  1. No documento autorizado, use Cancelar e informe a justificativa.

  2. Escolha o código do motivo (1 - erro na emissão, 2 - serviço não prestado, 9 - outros).

  3. 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.

Known issues / Roadmap

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).

Bug Tracker

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.

Credits

Authors

  • Akretion

  • KMEE

Contributors

Maintainers

This module is maintained by the OCA.

Odoo Community Association

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.

Metadata

Release files for odoo-addon-l10n-br-nfse-nacional 18.0.1.0.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for odoo-addon-l10n-br-nfse-nacional 18.0.1.0.0.8
File Interpreter ABI Platform
odoo_addon_l10n_br_nfse_nacional-18.0.1.0.0.8-py3-none-any.whl Python 3 none any Details

Release files / odoo_addon_l10n_br_nfse_nacional-18.0.1.0.0.8-py3-none-any.whl

Download URL odoo_addon_l10n_br_nfse_nacional-18.0.1.0.0.8-py3-none-any.whl
Size 169.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d7ca8e240fc88fcec48dcf60b623e3912d5403ddef469ce74b815d29318a469d
BLAKE2b-256 checksum
How to use checksums
57e5f43c03c5ee5b292d177002d5e078655e4bff0766624d051b42ccf33f9b0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

18.0.1.0.0.8 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page