OdooWiki OCA HUB

Brazilian Payment Order

l10n_br_account_payment_order folder_open OCA/l10n-brazil open_in_new
Banking addons License: AGPL-3

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.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Adds Brazilian CNAB bank-file support to payment orders and customer invoices, letting users configure bank conventions, generate CNAB payment files and boletos, and track bank return events.

This module connects Odoo's payment orders and invoices to the Brazilian CNAB bank-file standard used by banks such as Banco do Brasil, Bradesco, Itaú, Santander, Caixa, Sicredi, Unicred, Ailos and Banco do Nordeste (their instruction, wallet, discount, protest and fee codes are preloaded).

  • On a payment mode you can attach a CNAB configuration, choose the payment domain (cash, cheque, PIX, TED, DOC, boleto), and tick 'Add automatically on invoice validation' so a payment order is created when an invoice is posted.
  • On a payment order you get CNAB fields (service type, release form, payment indication, convention code, sequential file number) and a generated CNAB file with an automatic file name per bank.
  • On customer invoices, posting a CNAB inbound invoice fills each due line with our number, document number, company title identification and instructions; a button opens the boleto PDF.
  • Payment lines carry barcode, digitable line, interest, discount, rebate, fee, TED/PIX finality codes and Pix key; PIX transfers are checked for a key or account type.
  • Bank return files are stored as return logs with lots and events, and reconciliation can create a payment outside CNAB.

Business rules: CNAB payment methods cannot be used for direct payments, CNAB orders cannot be deleted or cancelled, payment modes with grouped lines are refused for CNAB, and CNAB states cannot be moved backwards.

Menus it adds

CNAB CodeCNAB ConfigCNABCNAB Return Log
Models and fields (21)
  • res.company · extends an existing model
  • account.move · extends an existing modelis_cnab (Is CNAB?), instructions (Instruções de cobrança), cnab_config_id, cnab_return_log_id (CNAB Return Log), file_boleto_pdf_id (Boleto PDF), payment_method_code, eval_payment_mode_instructions (Instruções de Cobrança do Modo de Pagamento)
  • account.journal · extends an existing modelbank_code_bc
  • account.payment · extends an existing model
  • account.move.line · new modelcnab_state (Estados CNAB), own_number (Nosso Numero), instructions (Instruções de cobrança), cnab_config_id, document_number (Número documento), payment_mode_id (Modo de Pagamento), payment_method_id (Payment Method), payment_situation (Situação do Pagamento), last_change_reason (Justificativa), payment_method_code (Payment Method Code), boleto_discount_perc (Desconto de pontualidade), cnab_return_line_ids (Retornos CNAB), journal_payment_mode_id, instruction_move_code_id (Código da Instrução para Movimento), own_number_without_zfill, company_title_identification (Identificação Titulo Empresa)
  • l10n_br_cnab.code · new modelcode, name, comment, bank_ids (Banks), code_type, payment_method_ids (Payment Methods)
  • l10n_br_cnab.config · new modelname, bank_id, comment, company_id (Company), bank_code_bc, payment_type, release_form (Forma Lançamento), service_type (Tipo de Serviço), cnab_processor, cnab_sequence_id (Sequencia do Arquivo CNAB), payment_method_id, payment_method_code, liq_return_move_code_ids (CNAB Liquidity Return Move Code)
  • account.payment.line · extends an existing modelbarcode, move_id (Fatura), fee_value (Valor da Multa), own_number (Nosso Numero), move_line_id, rebate_value (Valor do Abatimento), service_type (Tipo de Serviço), movement_type (Tipo de Movimento), digitable_line (Linha Digitável), discount_value (Valor do Desconto), interest_value (Valor da Mora), partner_pix_id (Pix Key), amount_interest (Valor Juros), document_number (Número documento), favored_warning (Aviso ao Favorecido), payment_mode_id, ml_maturity_date, percent_interest (Percentual de Juros), doc_finality_code (Complemento do Tipo de Serviço), payment_method_id (Payment Method), pix_transfer_type, ted_finality_code (Código Finalidade da TED), communication_type, payment_method_code (Payment Method Code), payment_mode_domain, instruction_move_code_id (Código da Instrução para Movimento), complementary_finality_code (Código de finalidade complementar), company_title_identification (Identificação Titulo Empresa)
  • account.payment.mode · new modelbank_id, bank_code_bc, cnab_config_id (CNAB Config), cnab_processor, payment_mode_domain, auto_create_payment_order (Adicionar automaticamente ao validar a fatura)
  • account.payment.order · extends an existing modelcnab_file (CNAB File), file_number (Número sequencial do arquivo), release_form (Forma Lançamento), service_type (Tipo de Serviço), cnab_filename (CNAB Filename), cnab_config_id, convention_code, payment_method_code (Payment Method Code), cnab_company_bank_code, indicative_form_payment (Indicativo de Forma de Pagamento)
  • account.payment.method · extends an existing model
  • l10n_br_cnab.return.log · new modelname, filename (Nome do Arquivo), move_ids (Journal Entries), event_ids (Eventos), is_cnab_lot (Is CNAB Lot?), number_lots (Número de Lotes), number_events (Número de Eventos), cnab_date_file (CNAB Date File), bank_account_id (Conta cedente), sequential_file (Sequencial do Arquivo), cnab_date_import (CNAB Date Import), amount_total_title (Valor Total Títulos), amount_total_rebate (Valor Total de Abatimentos), amount_total_discount (Valor Total de Descontos), amount_total_received (Valor Total Recebido), amount_total_interest_fee (Valor Total de Juros Mora/Multa), amount_total_tariff_charge (Valor Total de Tarifas)
  • l10n_br_cnab.return.lot · new modelmessage (Mensagem), total_value (Valor Total), register_qty (Quantidade de Registros), service_type (Tipo do Serviço), lot_event_ids (Eventos), account_bank_id (Conta Bancária), operation_service (Tipo de Operação), company_registration_type (Tipo de Inscrição), company_registration_number (Número de Inscrição)
  • account.partial.reconcile · extends an existing modelalready_send_cnab (Already send CNAB)
  • l10n_br_cnab.return.event · new modellot_id (Lote), segment (Segmento), due_date (Data de Vencimento), iof_value (Valor do IOF), favored_id (Favorecido), invoice_id (Fatura), own_number (Nosso Número), partner_id (Associado), is_cnab_lot (Is CNAB Lot?), occurrences (Ocorrências), str_motiv_a (Motivo da ocorrência 01), str_motiv_b (Motivo de ocorrência 02), str_motiv_c (Motivo de ocorrência 03), str_motiv_d (Motivo de ocorrência 04), str_motiv_e (Motivo de ocorrência 05), title_value (Valor da Linha), your_number (Seu Número), move_line_id (Journal Item), rebate_value (Valor do Abatimento), currency_type (Tipo de Moeda), other_credits (Outros Créditos), payment_value (Valor do Pagamento), tariff_charge (Tarifa), discount_value (Valor do Desconto), occurrence_date (Data da Ocorrência), payment_line_ids (Payment lines), real_payment_date (Data do Crédito), cnab_return_log_id (CNAB Return Log), interest_fee_value (Juros de Mora/Multa), favored_bank_account_id (Conta Bancária)
  • l10n_br_cnab.boleto.fields · new modelboleto_post (Posto da Cooperativa de Crédito), instructions (Instruções de cobrança), boleto_accept (Aceite), boleto_wallet (Carteira), invoice_print (Gerar relatorio na conclusão da fatura?), boleto_species (Espécie do Título), wallet_code_id (Boleto Wallet Code), boleto_byte_idt (Byte IDT), boleto_fee_perc (Percentual de Multa), boleto_modality (Modalidade), communication_2 (Comunicação para o sacador avalista), convention_code (Código do Convênio), sending_code_id (Sending Movement Instruction Code), boleto_variation (Variação), rebate_account_id (Conta Contabil de Abatimento), write_off_code_id (Write Off Movement Instruction Code), boleto_fee_code_id (Fee Code), boleto_days_protest (Número de Dias para Protesto), discount_account_id (Conta Contabil de Desconto), generate_own_number (Gerar nosso número?), boleto_discount_perc (Percentual de Desconto até a Data de Vencimento), boleto_interest_perc (Percentual de Juros de Mora), grant_rebate_code_id (Grant Rebate Instruction Code), cancel_rebate_code_id (Cancel Rebate Instruction Code), protest_title_code_id (Protest Title Instruction Code), boleto_protest_code_id (Protest Code), cnab_company_bank_code (Código da Empresa no Banco), grant_discount_code_id (Grant Discount Instruction Code), not_payment_account_id (Conta Contabil para Não Pagamento/Inadimplência), own_number_sequence_id (Sequência do Nosso Número)
  • l10n_br_cnab.data.abstract · new modelcode, name
  • account.payment.line.create · extends an existing modelallow_error (Permitir linhas com erro na exportação, já incluidas em outras ordens), allow_rejected (Permitir linhas com retorno rejeitado)
  • l10n_br_cnab.change.methods · new model
  • l10n_br_cnab.payment.fields · new modelfavored_warning (Aviso ao Favorecido), doc_finality_code (Complemento do Tipo de Serviço), ted_finality_code (Código Finalidade da TED), complementary_finality_code (Código de finalidade complementar)
  • account.move.line.cnab.change · new modeldate, reason (Justificativa), change_type (Tipo Alteração), rebate_value (Valor de Abatimento), discount_value (Valor de Desconto), payment_mode_id, account_move_line_ids (Move Line)

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 7 confirmed, 2 with no information of 9 versions.

Sources · Odoo 18.0

Confirmed on 2026-11-03 in branch 18.0 of OCA/l10n-brazil.

terminal Installation and usage

OCA documentation · Odoo 18.0

Este módulo depende do:

  • l10n_br_base
  • account_payment_order
  • account_due_list
  • account_cancel

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 dessa forma nas próximas implementações já não será preciso cadastrar, isso ajuda na construção de um banco de conhecimento, salvando tanto horas de implementação por não ser necessário rever ou refazer o que foi feito como poder usar o que outros fizeram, isso também é importante porque permite testar e avaliar as diferenças entre cada caso tornando a implementação mais robusta, 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 Beneficiá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ão 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 rastreabilidade 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 repositório https://github.com/OCA/social/tree/16.0 da OCA existe um módulo para corrigir isso o mail_improved_tracking_value, por isso considere e é RECOMENDADO incluir esse módulo na implementação para corrigir esse problema. A inclusão da dependência desse módulo aqui está pendente de aprovação.

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.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.