=======================
Brazilian Payment Order
=======================

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

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
    :target: https://odoo-community.org/page/development-status
    :alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-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/14.0/l10n_br_account_payment_order
    :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-14-0/l10n-brazil-14-0-l10n_br_account_payment_order
    :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=14.0
    :alt: Try me on Runboat

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

O módulo implementa a parte comum da infra-estrutura necessária para o uso do CNAB implementando:

- **Códigos CNAB** - códigos de Instrução, Retorno, Carteira e Desconto.

- **Configuração CNAB** - onde serão salvas as informações específicas de cada caso como Convênio, Código do Beneficiário, Modalidade, Percentual de Multa, códigos de Instrução do Movimento de Liquidação de Alteração de Vencimento e etc.

- **Modo de Pagamento** - localiza o módulo `account_payment_mode <https://github.com/OCA/bank-payment/tree/14.0/account_payment_mode>`_ para associar o **Diário Contábil** referente a **Conta Bancária** do CNAB e informar a **Configuração do CNAB** que será usada, assim ao informar o Modo de Pagamento em um Pedido de Venda, Compras ou Faturamento o programa identifica como sendo um caso CNAB.

- **Ordem de Pagamento** - localiza o módulo `account_payment_order <https://github.com/OCA/bank-payment/tree/14.0/account_payment_order>`_ que usa a **Ordem de Pagamento**, débito ou crédito, para registrar as **Instruções de Movimento** e onde será criado o **Arquivo CNAB Remessa**.

- **Registro do LOG de Eventos** - ao importar um arquivo de retorno CNAB.

- **Grupos e Permissões de acesso** - CNAB Usuário e Gerente.

A implementação foi pensada para permitir que seja possível usar diferentes Bibliotecas para **Gerar os Boletos, Arquivo CNAB de Remessa e tratar o Arquivo de Retorno do CNAB** por isso é preciso instalar um segundo módulo que vai ter essa função, portanto a ideia é que nesse módulo deverá estar tudo que for comum para a implementação mas o CNAB não irá funcionar sem esse segundo módulo.

**IMPORTANTE:** Apesar de muitas Documentações do CNAB acabarem dizendo que usam o "Padrão FEBRABAN" na realidade e ao longo dos anos foi visto que existem muitas divergências entre os casos incluindo diferentes Códigos para a mesma função ou mesmo Termos e nomenclaturas que apesar de semelhantes podem acabar confundindo o usuário, por isso essa falta de padrão foi considerada na implementação e na arquitetura do módulo e também precisa ser considerada em manutenções, melhorias ou no uso de outras Bibliotecas, é preciso separar o que é realmente comum do que pode variar entre os Bancos e CNAB, nesse sentido foram incluídos nos Dados de Demonstração mais de um caso para ficar claro aos desenvolvedores essas particularidades e evitar uma arquitetura que desconsidere esse aspecto.

**Table of contents**

.. contents::
   :local:

Installation
============

This module depends on:

* l10n_br_base
* account_payment_order
* account_due_list
* account_cancel

Configuration
=============

Verifique se os **Códigos CNAB** do Banco e da versão 240 ou 400 que serão usados principalmente os de **Instrução e de Retorno do Movimento** do CNAB existem ou se será necessário criar em:

**Faturamento > Configuração > Administração > Códigos CNAB**

Caso seja preciso criar por favor considere fazer um PR nesse módulo acrescentando os Códigos em l10n_br_account_payment_order/data/cnab_codes/banco_X_cnab_Y_Z.xml assim em próximas implementações já não será preciso cadastra-los ajudando também na construção desse banco de conhecimento, hoje o que temos são:

+-----------+---------+-----------+---------+
| Banco     | CNAB    | Instrução | Retorno |
+===========+=========+===========+=========+
| AILOS     | 240     |    X      |    X    |
+-----------+---------+-----------+---------+
| Bradesco  | 240/400 |    X      |    X    |
+-----------+---------+-----------+---------+
| Brasil    | 240/400 |    X      |    X    |
+-----------+---------+-----------+---------+
| CEF       | 240     |    X      |    X    |
+-----------+---------+-----------+---------+
| Itaú      | 240/400 |    X      |    X    |
+-----------+---------+-----------+---------+
| Santander | 240/400 |    X      |    X    |
+-----------+---------+-----------+---------+
| Sicred    | 240     |    X      |    X    |
+-----------+---------+-----------+---------+
| Unicred   | 240/400 |    X      |    X    |
+-----------+---------+-----------+---------+

Crie uma **Configuração CNAB**, é onde será armazenada as informações específicas de cada caso como a Carteira, Convênio, Código do Benificiário, Códigos de Instrução e Retorno do Movimento, etc em:

**Faturamento > Configuração > Administração > Configurações do CNAB**

Verifique se a **Conta Bancária** referente ao CNAB já foi cadastrada em:

**Configurações > Usuários e Empresas > Empresas**

Clique no Contato associado e na aba **Faturamento** veja **Contas Bancárias** se não existir veja de criar informando os dados Número da Conta, Agencia, etc.

Ao cadastrar uma **Conta Bancária** deve ser criado automaticamente um **Diário Contábil**, ou se já havia sido cadastrada o Diário já deve existir, verifique em:

**Faturamento > Configurações > Financeiro > Diários**

Verifique se as informações estão corretas, campo **Tipo** deve estar como Banco, na aba **Lançamentos do Diário** em Número da Conta Bancária deve estar preenchido com a **Conta Bancária** e na aba **Configuração de Pagamentos** os Metódos que serã usados, 240 ou 400, devem estar marcados.

Crie um **Modo de Pagamento** ou use um existente em:

**Faturamento > Configuração > Administração > Modos de Pagamento**

Informe o Diário Contábil referente ao Banco e a Configuração CNAB que deverá ser utilizada.

A partir disso sempre que for informado o **Modo de Pagamento** tanto em um Pedido de Vendas ou na Fatura o programa passa a identificar como um caso CNAB, em casos onde um cliente vai sempre usar o mesmo Modo de Pagamento também é possível deixar isso como padrão no Cadastro de Cliente assim a informação é carregada automaticamente ao informar esse Cliente em um novo Pedido de Venda ou Fatura.

Verifique as permissões de acesso dos usuários que vão utilizar o CNAB, existe o **Usuário** e o **Gerente** CNAB.

**IMPORTANTE:** Como o CNAB envolve dinheiro e o caixa da empresa a segurança e a rastreablidade são fundamentais e como as configurações especificas de cada CNAB estão na **Configuração CNAB/l10n_br_cnab.config** foi incluído nele o objeto **mail.thread** que registra alterações feitas em campos importantes, porém campos **many2many** não estão sendo registrados pelo **track_visibility** (ver detalhes aqui l10n_br_account_payment_order/models/l10n_br_cnab_config.py#L75), e um campo específico e importante que armazena os **Códigos de Retorno do CNAB** que devem gerar **Baixa/Liquidação** é desse tipo, portanto as alterações referentes a esse campo não estão sendo registradas. No repositorio https://github.com/OCA/social/tree/14.0 da OCA existe um modulo para corrigir isso o https://github.com/OCA/social/tree/14.0/mail_improved_tracking_value , por isso considere e é RECOMENDADO incluir esse modulo na implementação para corrigir esse problema. A inclusão da dependencia desse modulo aqui está pendente de aprovação.

Usage
=====

Ao criar uma **Fatura Documento Fiscal/account.move** que tem um **Modo de Pagamento** com uma **Configuração CNAB** definida e se o campo **auto_create_payment_order** estiver marcado as linhas referentes as Parcelas serão criadas automaticamente em uma nova **Ordem de Pagamento**, débito ou crédito, ou adicionadas em uma já existente que esteja no estado **Rascunho**, também é possível incluir manualmente, a geração do Boleto, Arquivo de Envio e o tratamento do Arquivo de Retorno dependem da instalação de um segundo módulo onde é definida a biblioteca a ser utilizada.

Known issues / Roadmap
======================

* Verificar a questão do campos many2many que não estão sendo registrados pelo track_visibility e se será incluída a dependendecia https://github.com/OCA/social/tree/12.0/mail_improved_tracking_value ( confirmar o problema na v14 ).

* Processo de Alteração de Carteira, falta informações sobre o processo.

* Mapear e incluir os códigos dos bancos de cada CNAB 240 / 400, aqui devido a quantidade de possibilidades se trata de um "roadmap" constante onde contamos com PRs de outros Contribuidores que irão implementar um caso que ainda não esteja cadastrado e assim aumentar o banco de conhecimento, apesar do código permitir que o cadastro seja feito na tela nesses casos.

* Processo de "Antecipação do Título junto ao Banco" ou "Venda do Título junto a Factoring" ver as alterações feitas na v14 https://www.odoo.com/pt_BR/forum/ajuda-1/v14-change-in-payment-behavior-how-do-the-suspense-and-outstanding-payment-accounts-change-the-journal-entries-posted-177592 .

* CNAB de Pagamento, verificar a integração com o PR https://github.com/OCA/l10n-brazil/pull/972 e a possibilidade de multiplos modos de pagamento na mesma Ordem de Pagamento https://github.com/odoo-brazil/l10n-brazil/pull/112

* Verificar a possibilidade na v14 de remoção do ondele='restrict' no campo "move_line_id" e o campo "related" "ml_maturity_date" do account.payment.line no modulo dependente https://github.com/OCA/bank-payment/blob/14.0/account_payment_order/models/account_payment_line.py#L39 para permitir o processo de Cancelamento de uma Fatura quando existe uma Ordem de Pagamento já confirmada/gerada/enviada( detalhes l10n_br_account_payment_order/models/account_payment_line.py#L130 )

* Funcionalidade de Agrupar Por/Group By não funciona em campos do tipo Many2Many, aparentemente isso foi resolvido na v15(verfificar na migração), isso é usado nos objetos referentes aos Codigos CNAB de Instrução e Retorno.

* Confirmar se existem Bancos que usam os mesmos conjuntos de Codigos CNAB de Instrução e Retorno para caso não existir remover o many2many do Banco e deixar apenas o many2one.

* Verificar a possibilidade de usar o objeto account.payment no caso CNAB e o modulo https://github.com/OCA/bank-payment/tree/14.0/account_payment_order_return para tratar o LOG de Retorno do CNAB, RFC https://github.com/OCA/l10n-brazil/issues/2272 .

Changelog
=========

14.0.9.0.0 (2024-09-19)
~~~~~~~~~~~~~~~~~~~~~~~

* [REM] Removendo Campos, Visões e Objetos obsoletos.

14.0.8.0.0 (2024-09-18)
~~~~~~~~~~~~~~~~~~~~~~~

* [IMP] Possibilidade de informar Códigos de Desconto além do 0 e 1.

14.0.7.0.0 (2024-09-13)
~~~~~~~~~~~~~~~~~~~~~~~

* [REF] Separando as Configurações do CNAB do Modo de Pagamento.

14.0.6.0.0 (2024-09-10)
~~~~~~~~~~~~~~~~~~~~~~~

* [REF] Unindo os Códigos CNAB em um mesmo objeto.

14.0.1.0.0 (2022-04-29)
~~~~~~~~~~~~~~~~~~~~~~~

* [MIG] Migração para a versão 14.0.

13.0.1.0.0 (2022-01-28)
~~~~~~~~~~~~~~~~~~~~~~~

* [MIG] Migração para a versão 13.0.

12.0.3.0.0 (2021-05-13)
~~~~~~~~~~~~~~~~~~~~~~~

* [MIG] Migração para a versão 12.0.
* Incluído a possibilidade de parametrizar o CNAB 240 e 400, devido a falta de padrão cada Banco e CNAB podem ter e usar codigos diferentes.
* Incluído os metodos para fazer alterações em CNAB já enviados.
* Incluído dados de demo e testes.
* Separado o objeto que fazia o Retorno do arquivo e registrava as informações para ter um objeto especifico que registra o Log e assim os modulos que implementam a biblioteca escolhida podem ter um metodo/objeto especifico para essa função.

12.0.1.0.0 (2019-06-06)
~~~~~~~~~~~~~~~~~~~~~~~

* [MIG] Inicio da Migração para a versão 12.0.

10.0.2.0.0 (2018-05-17)
~~~~~~~~~~~~~~~~~~~~~~~

* [REF] Modulo unido com o l10n_br_account_payment_mode e renomeado para l10n_br_account_payment_order.

10.0.1.0.0 (2018-08-29)
~~~~~~~~~~~~~~~~~~~~~~~

* [MIG] Migração para a versão 10.

8.0.1.0.1 (2017-07-14)
~~~~~~~~~~~~~~~~~~~~~~~

* [NEW] Refatoração e melhorias para suportar a geração de boletos através do br-cobranca (ruby)

8.0.1.0.0 (2017-07-14)
~~~~~~~~~~~~~~~~~~~~~~~

* [NEW] Melhorias para suportar a geração de pagamento da folha de pagamento;

8.0.0.0.0 (2016-01-18)
~~~~~~~~~~~~~~~~~~~~~~~

* [NEW] Primeira versão

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_account_payment_order%0Aversion:%2014.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
~~~~~~~

* KMEE
* Akretion

Contributors
~~~~~~~~~~~~

* `KMEE <https://www.kmee.com.br>`_:

  * Luis Felipe Mileo <mileo@kmee.com.br>
  * Fernando Marcato
  * Hendrix Costa <hendrix.costa@kmee.com.br>

* `Akretion <https://www.akretion.com/pt-BR>`_:

  * Magno Costa <magno.costa@akretion.com.br>

* `Engenere <https://engenere.one>`_:

  * Antônio S. Pereira Neto <neto@engenere.one>

* `Escodoo <https://www.escodoo.com.br>`_:

  * Marcel Savegnago <marcel.savegnago@escodoo.com.br>

Other credits
~~~~~~~~~~~~~

The development of this module has been financially supported by:

* KMEE INFORMATICA LTDA - www.kmee.com.br
* AKRETION LTDA - www.akretion.com

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.

.. |maintainer-mbcosta| image:: https://github.com/mbcosta.png?size=40px
    :target: https://github.com/mbcosta
    :alt: mbcosta

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-mbcosta| 

This module is part of the `OCA/l10n-brazil <https://github.com/OCA/l10n-brazil/tree/14.0/l10n_br_account_payment_order>`_ project on GitHub.

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