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:

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

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.