# Brazilian Payment Order

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

- Installation
- Configuration
- Usage
- Known issues / Roadmap
- Changelog
  - 14.0.9.0.0 (2024-09-19)
  - 14.0.8.0.0 (2024-09-18)
  - 14.0.7.0.0 (2024-09-13)
  - 14.0.6.0.0 (2024-09-10)
  - 14.0.1.0.0 (2022-04-29)
  - 13.0.1.0.0 (2022-01-28)
  - 12.0.3.0.0 (2021-05-13)
  - 12.0.1.0.0 (2019-06-06)
  - 10.0.2.0.0 (2018-05-17)
  - 10.0.1.0.0 (2018-08-29)
  - 8.0.1.0.1 (2017-07-14)
  - 8.0.1.0.0 (2017-07-14)
  - 8.0.0.0.0 (2016-01-18)
- Bug Tracker
- Credits
  - Authors
  - Contributors
  - Other credits
  - Maintainers

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

- KMEE
- Akretion

## Contributors

- KMEE:
  - Luis Felipe Mileo <mileo@kmee.com.br>
  - Fernando Marcato
  - Hendrix Costa <hendrix.costa@kmee.com.br>
- Akretion:
  - Magno Costa <magno.costa@akretion.com.br>
- Engenere:
  - Antônio S. Pereira Neto <neto@engenere.one>
- Escodoo:
  - 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.

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.

Current maintainer:

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.