Metadata-Version: 2.1
Name: odoo-addon-l10n_br_nfse_nacional
Version: 16.0.1.0.0.35
Requires-Python: >=3.10
Requires-Dist: brazilfiscalreport
Requires-Dist: cryptography
Requires-Dist: erpbrasil.assinatura
Requires-Dist: nfelib
Requires-Dist: odoo-addon-l10n_br_nfse>=16.0dev,<16.1dev
Requires-Dist: odoo-addon-l10n_br_nfse_spec>=16.0dev,<16.1dev
Requires-Dist: odoo-addon-spec_driven_model>=16.0dev,<16.1dev
Requires-Dist: odoo>=16.0a,<16.1dev
Requires-Dist: requests
Summary: Brazilian Electronic Invoice for Services (National Standard)
Home-page: https://github.com/OCA/l10n-brazil
License: AGPL-3
Author: Akretion, KMEE, Odoo Community Association (OCA)
Author-email: support@odoo-community.org
Classifier: Programming Language :: Python
Classifier: Framework :: Odoo
Classifier: Framework :: Odoo :: 16.0
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Development Status :: 3 - Alpha
Description-Content-Type: text/x-rst

.. image:: https://odoo-community.org/readme-banner-image
   :target: https://odoo-community.org/get-involved?utm_source=readme
   :alt: Odoo Community Association

==============
NFS-e Nacional
==============

.. 
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !! This file is generated by oca-gen-addon-readme !!
   !! changes will be overwritten.                   !!
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !! source digest: sha256:876e12002e950f83a5c5f372307c15cef602ce92f398c73176b689394357e462
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
    :target: https://odoo-community.org/page/development-status
    :alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
    :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github
    :target: https://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_nfse_nacional
    :alt: OCA/l10n-brazil
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
    :target: https://translation.odoo-community.org/projects/l10n-brazil-16-0/l10n-brazil-16-0-l10n_br_nfse_nacional
    :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
    :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-brazil&target_branch=16.0
    :alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

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 <https://odoo-community.org/page/development-status>`_

**Table of contents**

.. contents::
   :local:

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 <https://github.com/OCA/l10n-brazil/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 <https://github.com/OCA/l10n-brazil/issues/new?body=module:%20l10n_br_nfse_nacional%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Akretion
* KMEE

Contributors
------------

- `Akretion <https://akretion.com/pt-BR>`__:

  - Raphaël Valyi <raphael.valyi@akretion.com>

- `KMEE <https://www.kmee.com.br>`__:

  - Ygor Carvalho <ygor.carvalho@kmee.com.br>
  - Luis Felipe Mileo <mileo@kmee.com.br>

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
   :alt: Odoo Community Association
   :target: https://odoo-community.org

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 <https://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_nfse_nacional>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
