From e204f119236588dfffa93b86f9f3d39fefe037e3 Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Tue, 3 Sep 2024 15:40:35 -0300 Subject: [PATCH 01/12] [REF] l10n_br_account_payment_order: Join CNAB Cod --- l10n_br_account_payment_order/__manifest__.py | 2 +- .../models/__init__.py | 1 + .../models/account_move.py | 4 +- .../models/account_move_line.py | 16 +- .../models/account_payment_line.py | 9 +- .../models/account_payment_mode.py | 11 ++ .../models/l10n_br_cnab_boleto_fields.py | 100 +++++++++++- .../models/l10n_br_cnab_change_methods.py | 52 +++---- .../models/l10n_br_cnab_code.py | 147 ++++++++++++++++++ .../security/ir.model.access.csv | 2 + 10 files changed, 306 insertions(+), 38 deletions(-) create mode 100644 l10n_br_account_payment_order/models/l10n_br_cnab_code.py diff --git a/l10n_br_account_payment_order/__manifest__.py b/l10n_br_account_payment_order/__manifest__.py index 366b2c89c066..4ba105162f53 100644 --- a/l10n_br_account_payment_order/__manifest__.py +++ b/l10n_br_account_payment_order/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Brazilian Payment Order", - "version": "16.0.1.1.2", + "version": "16.0.2.0.0", "license": "AGPL-3", "author": "KMEE, Akretion, Odoo Community Association (OCA)", "maintainers": ["mbcosta"], diff --git a/l10n_br_account_payment_order/models/__init__.py b/l10n_br_account_payment_order/models/__init__.py index 618d71ee4c61..cad515931773 100644 --- a/l10n_br_account_payment_order/models/__init__.py +++ b/l10n_br_account_payment_order/models/__init__.py @@ -16,3 +16,4 @@ from . import l10n_br_cnab_return_move_code from . import l10n_br_cnab_mov_intruction_code from . import l10n_br_cnab_boleto_wallet_code +from . import l10n_br_cnab_code diff --git a/l10n_br_account_payment_order/models/account_move.py b/l10n_br_account_payment_order/models/account_move.py index 884bbd0a6af6..a1170fd46830 100644 --- a/l10n_br_account_payment_order/models/account_move.py +++ b/l10n_br_account_payment_order/models/account_move.py @@ -130,9 +130,7 @@ def load_cnab_info(self): interval.instructions = instructions # Codigo de Instrução do Movimento pode variar, # mesmo no CNAB 240 - interval.mov_instruction_code_id = ( - self.payment_mode_id.cnab_sending_code_id.id - ) + interval.instruction_move_code_id = self.payment_mode_id.sending_code_id filtered_invoice_ids = self.filtered( lambda s: ( s.payment_mode_id and s.payment_mode_id.auto_create_payment_order diff --git a/l10n_br_account_payment_order/models/account_move_line.py b/l10n_br_account_payment_order/models/account_move_line.py index fee84425f565..df442be835d7 100644 --- a/l10n_br_account_payment_order/models/account_move_line.py +++ b/l10n_br_account_payment_order/models/account_move_line.py @@ -98,12 +98,20 @@ class AccountMoveLine(models.Model): copy=False, ) + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code mov_instruction_code_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Código da Instrução para Movimento", help="Campo G061 do CNAB", copy=False, ) + instruction_move_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Código da Instrução para Movimento", + help="Campo G061 do CNAB", + copy=False, + ) # Usados para deixar invisiveis/somente leitura # os campos relacionados ao CNAB @@ -144,7 +152,7 @@ def _prepare_payment_line_vals(self, payment_order): "document_number": self.document_number, "company_title_identification": self.company_title_identification, # Codigo de Instrução do Movimento - "mov_instruction_code_id": self.mov_instruction_code_id.id, + "instruction_move_code_id": self.instruction_move_code_id.id, "communication_type": "cnab", # Campos abaixo estão sendo adicionados devido ao problema de # Ordens de Pagto vinculadas devido o ondelete=restrict no @@ -163,9 +171,9 @@ def _prepare_payment_line_vals(self, payment_order): # Se for uma solicitação de baixa do título é preciso informar o # campo debit o codigo original coloca o amount_residual if ( - self.payment_mode_id.cnab_write_off_code_id - and self.mov_instruction_code_id.id - == self.payment_mode_id.cnab_write_off_code_id.id + self.payment_mode_id.write_off_code_id + and self.instruction_move_code_id + == self.payment_mode_id.write_off_code_id ): vals["amount_currency"] = self.credit or self.debit diff --git a/l10n_br_account_payment_order/models/account_payment_line.py b/l10n_br_account_payment_order/models/account_payment_line.py index 89b40423695a..9b3517e546a1 100644 --- a/l10n_br_account_payment_order/models/account_payment_line.py +++ b/l10n_br_account_payment_order/models/account_payment_line.py @@ -136,11 +136,18 @@ class AccountPaymentLine(models.Model): default="0", ) + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code mov_instruction_code_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Código da Instrução para Movimento", help="Campo G061 do CNAB", ) + instruction_move_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Código da Instrução para Movimento", + help="Campo G061 do CNAB", + ) # Usados para deixar invisiveis/somente leitura # os campos relacionados ao CNAB @@ -276,5 +283,5 @@ def _prepare_boleto_line_vals(self): # ex.: UNICRED 240/400 é 01 - Remessa*, 02 - Pedido de Baixa e # 06 - Alteração de vencimento . Veja que está sendo informado # o campo Code do objeto. - "identificacao_ocorrencia": self.mov_instruction_code_id.code, + "identificacao_ocorrencia": self.instruction_move_code_id.code, } diff --git a/l10n_br_account_payment_order/models/account_payment_mode.py b/l10n_br_account_payment_order/models/account_payment_mode.py index 29ecc273521d..784a64ae8ba4 100644 --- a/l10n_br_account_payment_order/models/account_payment_mode.py +++ b/l10n_br_account_payment_order/models/account_payment_mode.py @@ -90,6 +90,9 @@ def _selection_cnab_processor(self): # TODO: Ligação com o payment_mode_id não permite extrair para o objeto # l10n_br_cnab.boleto.fields, teria alguma forma de fazer ? # Podem existir diferentes codigos, mesmo no 240 + + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_liq_return_move_code_ids = fields.Many2many( comodel_name="l10n_br_cnab.return.move.code", relation="l10n_br_cnab_return_liquidity_move_code_rel", @@ -98,6 +101,14 @@ def _selection_cnab_processor(self): string="CNAB Liquidity Return Move Code", tracking=True, ) + liq_return_move_code_ids = fields.Many2many( + comodel_name="l10n_br_cnab.code", + relation="l10n_br_cnab_liq_return_move_code_rel", + column1="liq_return_move_code_id", + column2="payment_mode_id", + string="CNAB Liquidity Return Move Code", + tracking=True, + ) @api.constrains( "cnab_company_bank_code", diff --git a/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py b/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py index 0ab89f45b39a..58d1a5a1c9d2 100644 --- a/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py +++ b/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py @@ -229,46 +229,88 @@ class L10nBrCNABBoletoFields(models.AbstractModel): # Codigos de Instrução do Movimento # Codigo de Remessa/Inclusão de Registro Detalhe Liberado + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_sending_code_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Sending Movement Instruction Code", help="Sending Movement Instruction Code", tracking=True, ) + sending_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Sending Movement Instruction Code", + help="Sending Movement Instruction Code", + tracking=True, + ) # Codigo para Título/Pagamento Direto ao Fornecedor -Baixar + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_write_off_code_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Write Off Movement Instruction Code", help="Write Off Movement Instruction Code", tracking=True, ) + write_off_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Write Off Movement Instruction Code", + help="Write Off Movement Instruction Code", + tracking=True, + ) # Codigo para Alteração do Valor do Titulo + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_change_title_value_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Change Title Value Movement Instruction Code", help="CNAB Movement Instruction Code for Change Title Value.", tracking=True, ) + change_title_value_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Change Title Value Movement Instruction Code", + help="CNAB Movement Instruction Code for Change Title Value.", + tracking=True, + ) # Codigo para Alteração da Data de Vencimento + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_change_maturity_date_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Change Maturity Date Movement Instruction Code", help="CNAB Movement Instruction Code for Change Maturity Date.", tracking=True, ) + change_maturity_date_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Change Maturity Date Movement Instruction Code", + help="CNAB Movement Instruction Code for Change Maturity Date.", + tracking=True, + ) # Codigo para Protestar Título + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_protest_title_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Protest Tittle Instruction Code", help="CNAB Movement Instruction Code for Protest Tittle.", tracking=True, ) + protest_title_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Protest Tittle Instruction Code", + help="CNAB Movement Instruction Code for Protest Tittle.", + tracking=True, + ) # Codigo para Suspender Protesto e Manter em Carteira + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_suspend_protest_keep_wallet_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Suspend Protest an Keep in Wallet Instruction Code", @@ -276,44 +318,91 @@ class L10nBrCNABBoletoFields(models.AbstractModel): " Suspend Protest and Keep in Wallet.", tracking=True, ) + suspend_protest_keep_wallet_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Suspend Protest an Keep in Wallet Instruction Code", + help="CNAB Movement Instruction Code for" + " Suspend Protest and Keep in Wallet.", + tracking=True, + ) # Codigo para Suspender Protesto e Baixar Título + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_suspend_protest_write_off_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Suspend Protest an Writte Off Instruction Code", help="CNAB Movement Instruction Code for" " Suspend Protest and Writte Off.", tracking=True, ) + suspend_protest_write_off_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Suspend Protest an Writte Off Instruction Code", + help="CNAB Movement Instruction Code for Suspend Protest and Writte Off.", + tracking=True, + ) # Codigo para Conceder Abatimento + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_grant_rebate_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Grant Rebate Instruction Code", help="CNAB Movement Instruction Code for" " Grant Rebate.", tracking=True, ) + grant_rebate_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Grant Rebate Instruction Code", + help="CNAB Movement Instruction Code for Grant Rebate.", + tracking=True, + ) # Codigo para Cancelar Abatimento + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_cancel_rebate_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Cancel Rebate Instruction Code", help="CNAB Movement Instruction Code for" " Cancel Rebate.", tracking=True, ) + cancel_rebate_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Cancel Rebate Instruction Code", + help="CNAB Movement Instruction Code for Cancel Rebate.", + tracking=True, + ) # Codigo para Conceder Desconto + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_grant_discount_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Grant Discount Instruction Code", help="CNAB Movement Instruction Code for" " Grant Discount.", tracking=True, ) + grant_discount_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Grant Discount Instruction Code", + help="CNAB Movement Instruction Code for Grant Discount.", + tracking=True, + ) - # Codigo para Cancelar Abatimento + # Codigo para Cancelar Desconto + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code cnab_code_cancel_discount_id = fields.Many2one( comodel_name="l10n_br_cnab.mov.instruction.code", string="Cancel Discount Instruction Code", - help="CNAB Movement Instruction Code for" " Cancel Discount.", + help="CNAB Movement Instruction Code for Cancel Discount.", + tracking=True, + ) + cancel_discount_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Cancel Discount Instruction Code", + help="CNAB Movement Instruction Code for Cancel Discount.", tracking=True, ) @@ -340,8 +429,15 @@ class L10nBrCNABBoletoFields(models.AbstractModel): # Código da Carteira ou Tipo de Cobrança usado por # Santanter 400 e 240 # Bradesco 240 + # TODO: Remover o campo na próxima versão, + # usando apenas para migração para o l10n_br_cnab.code boleto_wallet_code_id = fields.Many2one( comodel_name="l10n_br_cnab.boleto.wallet.code", string="Boleto Wallet Code", tracking=True, ) + wallet_code_id = fields.Many2one( + comodel_name="l10n_br_cnab.code", + string="Boleto Wallet Code", + tracking=True, + ) diff --git a/l10n_br_account_payment_order/models/l10n_br_cnab_change_methods.py b/l10n_br_account_payment_order/models/l10n_br_cnab_change_methods.py index a52ec46a7ba9..83d272ca2143 100644 --- a/l10n_br_account_payment_order/models/l10n_br_cnab_change_methods.py +++ b/l10n_br_account_payment_order/models/l10n_br_cnab_change_methods.py @@ -122,9 +122,9 @@ def _msg_cnab_payment_order_at_invoice(self, new_payorder, payorder, reason): """ cnab_instruction = ( - self.mov_instruction_code_id.code + self.instruction_move_code_id.code + " - " - + self.mov_instruction_code_id.name + + self.instruction_move_code_id.name ) if new_payorder: self.move_id.message_post( @@ -211,14 +211,14 @@ def _get_cnab_date_maturity(self, new_date): ) # Modo de Pagto usado precisa ter o codigo de alteração do vencimento - if not self.move_id.payment_mode_id.cnab_code_change_maturity_date_id: + if not self.move_id.payment_mode_id.change_maturity_date_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Date Maturity Code" ) self.date_maturity = new_date - return self.payment_mode_id.cnab_code_change_maturity_date_id + return self.payment_mode_id.change_maturity_date_code_id def _create_cnab_not_payment(self, payorder, new_payorder, reason): """ @@ -233,12 +233,12 @@ def _create_cnab_not_payment(self, payorder, new_payorder, reason): self.payment_mode_id.name, "the Account to Not Payment" ) - if not self.move_id.payment_mode_id.cnab_write_off_code_id: + if not self.move_id.payment_mode_id.write_off_code_id: self._msg_error_cnab_missing(self.payment_mode_id.name, "Writte Off Code") # TODO: O codigo usado seria o mesmo do writte off ? # Em todos os casos? - self.mov_instruction_code_id = self.payment_mode_id.cnab_write_off_code_id + self.instruction_move_code_id = self.payment_mode_id.write_off_code_id # Reconciliação e Baixa do Título move_obj = self.env["account.move"] @@ -339,7 +339,7 @@ def create_cnab_write_off(self, reason, payment_situation): self.remove_payment_line(reason, payment_situation) payment_lines_removed = True - if not self.move_id.payment_mode_id.cnab_write_off_code_id: + if not self.move_id.payment_mode_id.write_off_code_id: self._msg_error_cnab_missing(self.payment_mode_id.name, "Write Off Code") if not payment_lines_removed: @@ -348,7 +348,7 @@ def create_cnab_write_off(self, reason, payment_situation): payorder, new_payorder = self._get_payment_order(self.move_id) - self.mov_instruction_code_id = self.payment_mode_id.cnab_write_off_code_id + self.instruction_move_code_id = self.payment_mode_id.write_off_code_id self.payment_situation = payment_situation self.create_payment_line_from_move_line(payorder) @@ -361,7 +361,7 @@ def create_cnab_change_tittle_value(self): """ CNAB - Alteração do Valor do Título. """ - if not self.payment_mode_id.cnab_code_change_title_value_id: + if not self.payment_mode_id.change_title_value_code_id: self._msg_error_cnab_missing(self.payment_mode_id.name, "Tittle Value Code") # Checar se existe uma Instrução de CNAB ainda a ser enviada @@ -369,9 +369,7 @@ def create_cnab_change_tittle_value(self): payorder, new_payorder = self._get_payment_order(self.move_id) - self.mov_instruction_code_id = ( - self.payment_mode_id.cnab_code_change_title_value_id - ) + self.instruction_move_code_id = self.payment_mode_id.change_title_value_code_id reason = ( "Movement Instruction Code Updated for Request to " "Change Title Value, because partial payment " @@ -389,23 +387,23 @@ def _get_cnab_protest_tittle(self): """ CNAB - Protestar Título. """ - if not self.payment_mode_id.cnab_code_protest_title_id: + if not self.payment_mode_id.protest_title_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Protest Tittle Code" ) - return self.payment_mode_id.cnab_code_protest_title_id + return self.payment_mode_id.protest_title_code_id def _get_cnab_suspend_protest_keep_wallet(self): """ CNAB - Sustar Protesto e Manter em Carteira. """ - if not self.payment_mode_id.cnab_code_suspend_protest_keep_wallet_id: + if not self.payment_mode_id.suspend_protest_keep_wallet_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Suspend Protest and Keep in Wallet Code" ) - return self.payment_mode_id.cnab_code_suspend_protest_keep_wallet_id + return self.payment_mode_id.suspend_protest_keep_wallet_code_id def _get_cnab_suspend_protest_writte_off(self): """ @@ -414,12 +412,12 @@ def _get_cnab_suspend_protest_writte_off(self): # TODO: Deveria chamar a função de Não # Pagamento( _create_cnab_not_payment ) ? - if not self.payment_mode_id.cnab_code_suspend_protest_write_off_id: + if not self.payment_mode_id.suspend_protest_write_off_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Suspend Protest and Writte Off Code" ) - return self.payment_mode_id.cnab_code_suspend_protest_write_off_id + return self.payment_mode_id.suspend_protest_write_off_code_id def _get_cnab_grant_rebate(self): """ @@ -427,22 +425,22 @@ def _get_cnab_grant_rebate(self): :param rebate_value: Valor do Abatimento :param reason: Descrição sobre alteração """ - if not self.payment_mode_id.cnab_code_grant_rebate_id: + if not self.payment_mode_id.grant_rebate_code_id: self._msg_error_cnab_missing(self.payment_mode_id.name, "Grant Rebate Code") - return self.payment_mode_id.cnab_code_grant_rebate_id + return self.payment_mode_id.grant_rebate_code_id def _get_cnab_cancel_rebate(self): """ CNAB - Cancelar Abatimento. :param reason: Descrição sobre alteração """ - if not self.payment_mode_id.cnab_code_cancel_rebate_id: + if not self.payment_mode_id.cancel_rebate_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Cancel Rebate Code" ) - return self.payment_mode_id.cnab_code_cancel_rebate_id + return self.payment_mode_id.cancel_rebate_code_id def _get_cnab_grant_discount(self): """ @@ -450,24 +448,24 @@ def _get_cnab_grant_discount(self): :param discount_value: Valor do Desconto :param reason: Descrição sobre alteração """ - if not self.payment_mode_id.cnab_code_grant_discount_id: + if not self.payment_mode_id.grant_discount_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Grant Discount Code" ) - return self.payment_mode_id.cnab_code_grant_discount_id + return self.payment_mode_id.grant_discount_code_id def _get_cnab_cancel_discount(self): """ CNAB - Cancelar Desconto. :param reason: Descrição sobre alteração """ - if not self.payment_mode_id.cnab_code_cancel_discount_id: + if not self.payment_mode_id.cancel_discount_code_id: self._msg_error_cnab_missing( self.payment_mode_id.name, "Cancel Discount Code" ) - return self.payment_mode_id.cnab_code_cancel_discount_id + return self.payment_mode_id.cancel_discount_code_id def _make_cnab_change(self, cnab_code, new_payorder, payorder, reason): """ @@ -486,7 +484,7 @@ def _make_cnab_change(self, cnab_code, new_payorder, payorder, reason): if self.env.context.get("discount_value"): discount_value = self.env.context.get("discount_value") - self.mov_instruction_code_id = cnab_code + self.instruction_move_code_id = cnab_code self.with_context( rebate_value=rebate_value, discount_value=discount_value ).create_payment_line_from_move_line(payorder) diff --git a/l10n_br_account_payment_order/models/l10n_br_cnab_code.py b/l10n_br_account_payment_order/models/l10n_br_cnab_code.py new file mode 100644 index 000000000000..3db480f97d32 --- /dev/null +++ b/l10n_br_account_payment_order/models/l10n_br_cnab_code.py @@ -0,0 +1,147 @@ +# Copyright 2024-TODAY - Akretion (). +# @author Magno Costa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class L10nBrCNABCode(models.Model): + _name = "l10n_br_cnab.code" + _inherit = "mail.thread" + _description = "CNAB Code" + + name = fields.Char( + index=True, + tracking=True, + required=True, + ) + + code = fields.Char( + index=True, + tracking=True, + required=True, + ) + + code_type = fields.Selection( + index=True, + tracking=True, + required=True, + selection=[ + ("instruction_move_code", "Instruction Move Code"), + ("return_move_code", "Return Move Code"), + ("wallet_code", "Wallet Code"), + ("discount_code", "Discount Code"), + ("protest_code", "Protest Code"), + ("fee_code", "Fee Code"), + ("interest_code", "Interest Code"), + ("boleto_species", "Boleto Species"), + ("boleto_accept", "Boleto Accept"), + ("doc_finality_code", "DOC Finality Code"), + ("ted_finality_code", "TED Finality Code"), + ("complementary_finality_code", "Complementary Finality Code"), + ("service_type", "Service Type"), + ("release_form", "Release Form"), + ("boleto_wallet", "Boleto Wallet"), + ("boleto_modality", "Boleto Modality"), + ("boleto_variation", "Boleto Variation"), + ], + ) + + bank_ids = fields.Many2many( + string="Banks", + comodel_name="res.bank", + relation="l10n_br_cnab_code_bank_rel", + column1="bank_id", + column2="l10n_br_cnab_code_id", + tracking=True, + required=True, + ) + + payment_method_ids = fields.Many2many( + comodel_name="account.payment.method", + string="Payment Methods", + relation="l10n_br_cnab_code_payment_method_rel", + column1="payment_method_id", + column2="l10n_br_cnab_code_id", + tracking=True, + required=True, + ) + + comment = fields.Text() + + # TODO: Forma encontrada para pode fazer o Group By, na v15 + # parece já ser possivel usar campos many2many. + # Também deve ser considerado em apagar o campo many2many e deixar + # apenas o many2one já que, por enquanto, não há bancos diferentes + # usando o mesmo conjunto de codigos apenas diferentes cnab( 240/400 + # são iguais no caso Unicred ) + bank_id = fields.Many2one( + comodel_name="res.bank", compute="_compute_bank_id", store=True + ) # it is possible to search only among stored fields + + payment_method_id = fields.Many2one( + comodel_name="account.payment.method", + compute="_compute_payment_method_id", + store=True, + ) # it is possible to search only among stored fields + + def name_get(self): + result = [] + for record in self: + result.append((record.id, "%s - %s" % (record.code, record.name))) + return result + + @api.depends("bank_ids") + def _compute_bank_id(self): + for record in self: + record.bank_id = record.bank_ids and record.bank_ids[0] or False + + @api.depends("payment_method_ids") + def _compute_payment_method_id(self): + for record in self: + record.payment_method_id = ( + record.payment_method_ids and record.payment_method_ids[0] or False + ) + + @api.constrains("code") + def check_code(self): + for record in self: + # Mesmo o record que está sendo alterado não ter sido ainda salvo + # a pesquisa acaba trazendo ele, por isso o filtro 'id' + code_already_exist = record.search( + [ + ("id", "!=", record.id), + ("code", "=", record.code), + ("code_type", "=", record.code_type), + ("payment_method_ids", "in", record.payment_method_ids.ids), + ("bank_ids", "in", record.bank_ids.ids), + ] + ) + if code_already_exist: + code_name_exist = ( + code_already_exist.code + " - " + code_already_exist.name + ) + raise ValidationError( + _( + "The Code %(code)s %(name)s already exists for Bank %(bank)s " + "and CNAB %(type_code)s type.", + code=record.code, + name=code_name_exist, + bank=code_already_exist.bank_id.name, + type_code=code_already_exist.payment_method_id.code, + ) + ) + + # Tamanho do campo é padrão 2 p/ todos + # os codigos de Instrução CNAB ? + if len(record.code) != 2 and record.code_type in ( + "instruction_move_code", + "return_move_code", + ): + raise ValidationError( + _( + "The field Code in 'Instruction and Return Move Code'" + " should have two characters." + ) + ) diff --git a/l10n_br_account_payment_order/security/ir.model.access.csv b/l10n_br_account_payment_order/security/ir.model.access.csv index 134583be1d17..fd4912187ee0 100644 --- a/l10n_br_account_payment_order/security/ir.model.access.csv +++ b/l10n_br_account_payment_order/security/ir.model.access.csv @@ -18,3 +18,5 @@ access_l10n_br_cnab_payment_fields_manager,l10n_br_cnab.payment.fields manager,m access_account_move_line_cnab_change_user,access_account_move_line_cnab_change_user,model_account_move_line_cnab_change,group_cnab_user,1,1,1,1 access_l10n_br_cnab_boleto_wallet_code_manager,access_l10n_br_cnab_boleto_wallet_code manager,model_l10n_br_cnab_boleto_wallet_code,group_cnab_manager,1,1,1,1 access_l10n_br_cnab_boleto_wallet_code_user,access_l10n_br_cnab_boleto_wallet_code user,model_l10n_br_cnab_boleto_wallet_code,group_cnab_user,1,0,0,0 +access_l10n_br_cnab_code_manager,access_l10n_br_cnab_code manager,model_l10n_br_cnab_code,group_cnab_manager,1,1,1,1 +access_l10n_br_cnab_code_user,access_l10n_br_cnab_code user,model_l10n_br_cnab_code,group_cnab_user,1,0,0,0 From 5acf25b8fe016ee716e3b4d87d3acae14a5ed35d Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Tue, 3 Sep 2024 15:45:11 -0300 Subject: [PATCH 02/12] [REF] l10n_br_account_payment_order: View CNAB Cod --- l10n_br_account_payment_order/__manifest__.py | 2 + .../views/account_move_line.xml | 14 +- .../views/account_payment_line.xml | 4 + .../views/account_payment_mode.xml | 122 +++++++++++++++++- .../l10n_br_cnab_boleto_wallet_code_view.xml | 4 +- .../views/l10n_br_cnab_code_view.xml | 101 +++++++++++++++ ...l10n_br_cnab_mov_instruction_code_view.xml | 4 +- .../l10n_br_cnab_return_move_code_view.xml | 4 +- 8 files changed, 249 insertions(+), 6 deletions(-) create mode 100644 l10n_br_account_payment_order/views/l10n_br_cnab_code_view.xml diff --git a/l10n_br_account_payment_order/__manifest__.py b/l10n_br_account_payment_order/__manifest__.py index 4ba105162f53..86ae425d9f95 100644 --- a/l10n_br_account_payment_order/__manifest__.py +++ b/l10n_br_account_payment_order/__manifest__.py @@ -52,6 +52,8 @@ "views/l10n_br_cnab_mov_instruction_code_view.xml", "views/account_move_view.xml", "views/l10n_br_cnab_boleto_wallet_code_view.xml", + # Códigos CNAB + "views/l10n_br_cnab_code_view.xml", ], "demo": [ "demo/account_payment_method.xml", diff --git a/l10n_br_account_payment_order/views/account_move_line.xml b/l10n_br_account_payment_order/views/account_move_line.xml index 25d69c9e9635..997421728fd3 100644 --- a/l10n_br_account_payment_order/views/account_move_line.xml +++ b/l10n_br_account_payment_order/views/account_move_line.xml @@ -17,7 +17,11 @@ show - + + @@ -54,7 +58,11 @@ + + @@ -72,7 +80,11 @@ + + diff --git a/l10n_br_account_payment_order/views/account_payment_line.xml b/l10n_br_account_payment_order/views/account_payment_line.xml index 5edad37afa06..4ef6fefdb3b9 100644 --- a/l10n_br_account_payment_order/views/account_payment_line.xml +++ b/l10n_br_account_payment_order/views/account_payment_line.xml @@ -91,7 +91,11 @@ name="movement_type" attrs="{'invisible': [('payment_method_code', '!=', '240')]}" /> + + + + + + @@ -186,71 +201,174 @@ name="return_move_code" string="Códigos de Retorno do Movimento" > - --> + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_br_account_payment_order/views/l10n_br_cnab_boleto_wallet_code_view.xml b/l10n_br_account_payment_order/views/l10n_br_cnab_boleto_wallet_code_view.xml index b72d1798c943..0cb43661cc26 100644 --- a/l10n_br_account_payment_order/views/l10n_br_cnab_boleto_wallet_code_view.xml +++ b/l10n_br_account_payment_order/views/l10n_br_cnab_boleto_wallet_code_view.xml @@ -74,12 +74,14 @@ {'group_by':['bank_id', 'payment_method_id']} + diff --git a/l10n_br_account_payment_order/views/l10n_br_cnab_code_view.xml b/l10n_br_account_payment_order/views/l10n_br_cnab_code_view.xml new file mode 100644 index 000000000000..83a391a79c63 --- /dev/null +++ b/l10n_br_account_payment_order/views/l10n_br_cnab_code_view.xml @@ -0,0 +1,101 @@ + + + + + + l10n_br_cnab.code.tree + l10n_br_cnab.code + + + + + + + + + + + + + l10n_br_cnab.code.search + l10n_br_cnab.code + + + + + + + + + + + + + + + + + + + + + l10n_br_cnab.code.form.view + l10n_br_cnab.code + +
+ + + + + + + + + + +
+ +
+
+
+
+ + + CNAB Code + l10n_br_cnab.code + tree,form + {'group_by':['bank_id', 'payment_method_id', 'code_type']} + + + + +
diff --git a/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml b/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml index 1ed140cd4868..8c511fbe8615 100644 --- a/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml +++ b/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml @@ -74,12 +74,14 @@ {'group_by':['bank_id', 'payment_method_id']} + diff --git a/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml b/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml index db86a178047d..485fa73ad7dd 100644 --- a/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml +++ b/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml @@ -73,12 +73,14 @@ {'group_by':['bank_id', 'payment_method_id']} + From 5df5cca98a7daf8288b6b63598dbf286b8fc1eeb Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Tue, 3 Sep 2024 16:01:52 -0300 Subject: [PATCH 03/12] [REF] l10n_br_account_payment_order: Data CNAB Cod --- .../data/cnab_codes/banco_ailos_cnab_240.xml | 147 +++-- .../banco_bradesco_boleto_wallet_code.xml | 30 +- .../banco_bradesco_cnab_240_400.xml | 462 +++++++++----- .../data/cnab_codes/banco_cef_cnab_240.xml | 165 +++-- .../cnab_codes/banco_do_brasil_cnab_400.xml | 213 ++++--- .../cnab_codes/banco_itau_cnab_240_400.xml | 585 ++++++++++++------ .../banco_santander_boleto_wallet_code.xml | 90 +-- .../banco_santander_cnab_240_400.xml | 300 ++++++--- .../data/cnab_codes/banco_sicred_cnab_240.xml | 147 +++-- .../cnab_codes/banco_unicred_cnab_240_400.xml | 105 ++-- 10 files changed, 1432 insertions(+), 812 deletions(-) diff --git a/l10n_br_account_payment_order/data/cnab_codes/banco_ailos_cnab_240.xml b/l10n_br_account_payment_order/data/cnab_codes/banco_ailos_cnab_240.xml index 27d2b2cef645..b70139d02be0 100644 --- a/l10n_br_account_payment_order/data/cnab_codes/banco_ailos_cnab_240.xml +++ b/l10n_br_account_payment_order/data/cnab_codes/banco_ailos_cnab_240.xml @@ -3,155 +3,172 @@ - + Entrada Títulos 01 + instruction_move_code - + Pedido de Baixa 02 + instruction_move_code - + Concessão de Abatimento 04 + instruction_move_code - + Cancelamento de Abatimento 05 + instruction_move_code - + Alteração de Vencimento 06 + instruction_move_code - + Concessão de Desconto 07 + instruction_move_code - + Cancelamento de Desconto 08 + instruction_move_code - + Protesto 09 + instruction_move_code - + Sustar Protesto e Baixar Título 10 + instruction_move_code - + Sustar Protesto e Manter em Carteira 11 + instruction_move_code - + Alteração de outros dados (Somente endereço do pagador) 31 + instruction_move_code - + Cancelar instrução automática de protesto 41 + instruction_move_code - + Alterar tipo de emissão - Cooperativa/EE 90 + instruction_move_code - + Inclusão Negativação via Serasa 93 + instruction_move_code - + Exclusão Negativação via Serasa 94 + instruction_move_code - + Envio de SMS ao pagador 95 + instruction_move_code - + Cancelamento Instrução de SMS 96 + instruction_move_code - + Entrada Confirmada 02 + return_move_code - + Entrada Rejeitada 03 + return_move_code - + Liquidação 06 + return_move_code - + Confirmação do Recebimento da Instrução de Desconto 07 + return_move_code - + Confirmação do Recebimento do Cancelamento do Desconto 08 + return_move_code - + Baixa 09 + return_move_code - + Confirmação Recebimento Instrução de Abatimento 12 + return_move_code - + Confirmação Recebimento Instrução de Cancelamento Abatimento 13 + return_move_code - + Confirmação Recebimento Instrução Alteração de Vencimento 14 + return_move_code - + Liquidação Após Baixa ou Liquidação Título Não Registrado 17 + return_move_code - + Confirmação Recebimento Instrução de Protesto 19 + return_move_code - + Confirmação Recebimento Instrução de Sustação/Cancelamento de Protesto 20 + return_move_code - + Título Enviado ao Cartório 22 + return_move_code - + Remessa a Cartório (Aponte em Cartório) 23 + return_move_code - + Retirada de Cartório e Manutenção em Carteira 24 + return_move_code - + Protestado e Baixado (Baixa por Ter Sido Protestado) 25 + return_move_code - + Instrução Rejeitada 26 + return_move_code - + Confirmação do Pedido de Alteração de Outros Dados 27 + return_move_code - + Débito de Tarifas/Custas 28 + return_move_code - + Confirmação de Envio de SMS 36 + return_move_code - + Envio de SMS rejeitado 37 + return_move_code - + Confirmação da alteração dos dados do Sacado 42 + return_move_code - + Instrução para cancelar protesto confirmada 46 + return_move_code - + Cancelamento de SMS 64 + return_move_code - + Liquidação de boleto cooperativa emite e expede 76 + return_move_code - + Liquidação de boleto após baixa ou não registrado cooperativa emite e expede 77 + return_move_code - + Rejeição cartorária (Visualizar motivo na última página deste manual) 89 + return_move_code - + Título em aberto não enviado ao pagador 91 + return_move_code - + Inconsistência Negativação Serasa 92 + return_move_code - + Inclusão Negativação via Serasa 93 + return_move_code - + Exclusão Negativação Serasa 94 + return_move_code - + Excluir Protesto com carta de anuência 98 + return_move_code - + Cobrança Simples 1 + wallet_code - + Cobrança Vinculada 2 + wallet_code - + Cobrança Caucionada 3 + wallet_code - + Cobrança Descontada 4 + wallet_code - + Cobrança Vendor 5 + wallet_code - + Entrada de Títulos 01 + instruction_move_code - + Pedido de Baixa 02 + instruction_move_code - + Protesto para Fins Falimentares 03 + instruction_move_code - + Concessão de Abatimento 04 + instruction_move_code - + Cancelamento de Abatimento 05 + instruction_move_code - + Alteração de Vencimento 06 + instruction_move_code - + Concessão de Desconto 07 + instruction_move_code - + Cancelamento de Desconto 08 + instruction_move_code - + Protestar 09 + instruction_move_code - + Sustar Protesto e Baixar Título 10 + instruction_move_code - + Sustar Protesto e Manter em Carteira 11 + instruction_move_code - + Alteração de Juros de Mora 12 + instruction_move_code - + Dispensar Cobrança de Juros de Mora 13 + instruction_move_code - + Alteração de Valor/Percentual de Multa 14 + instruction_move_code - + Dispensar Cobrança de Multa 15 + instruction_move_code - + Alteração do Valor de Desconto 16 + instruction_move_code - + Não conceder Desconto 17 + instruction_move_code - + Alteração do Valor de Abatimento 18 + instruction_move_code - + Prazo Limite de Recebimento - Alterar 19 + instruction_move_code - + Prazo Limite de Recebimento - Dispensar 20 + instruction_move_code - + Alterar número do título dado pelo cedente 21 + instruction_move_code - + Alterar número controle do Participante 22 + instruction_move_code - + Alterar dados do Sacado 23 + instruction_move_code - + Alterar dados do Sacador/Avalista 24 + instruction_move_code - + Recusa da Alegação do Sacado 30 + instruction_move_code - + Alteração de Outros Dados 31 + instruction_move_code - + Alteração dos Dados do Rateio de Crédito 33 + instruction_move_code - + Pedido de Cancelamento dos Dados do Rateio de Crédito 34 + instruction_move_code - + Pedido de Desagendamento do Débito Automático 35 + instruction_move_code - + Alteração de Carteira 40 + instruction_move_code - + Cancelar protesto 41 + instruction_move_code - + Alteração de Espécie de Título 42 + instruction_move_code - + Transferência de carteira/modalidade de cobrança 43 + instruction_move_code - + Alteração de contrato de cobrança 44 + instruction_move_code - + Negativação Sem Protesto 45 + instruction_move_code - + Solicitação de Baixa de Título Negativado Sem Protesto 46 + instruction_move_code - + Entrada Confirmada 02 + return_move_code - + Entrada Rejeitada 03 + return_move_code - + Transferência de Carteira/Entrada 04 + return_move_code - + Transferência de Carteira/Baixa 05 + return_move_code - + Liquidação 06 + return_move_code - + Confirmação do Recebimento da Instrução de Desconto 07 + return_move_code - + Confirmação do Recebimento do Cancelamento do Desconto 08 + return_move_code - + Baixa 09 + return_move_code - + Títulos em Carteira (Em Ser) 11 + return_move_code - + Confirmação Recebimento Instrução de Abatimento 12 + return_move_code - + Confirmação Recebimento Instrução de Cancelamento Abatimento 13 + return_move_code - + Confirmação Recebimento Instrução Alteração de Vencimento 14 + return_move_code - + Franco de Pagamento 15 + return_move_code - + Liquidação Após Baixa ou Liquidação Título Não Registrado 17 + return_move_code - + Confirmação Recebimento Instrução de Protesto 19 + return_move_code - + Confirmação Recebimento Instrução de Sustação/Cancelamento de Protesto 20 + return_move_code - + Remessa a Cartório (Aponte em Cartório) 23 + return_move_code - + Retirada de Cartório e Manutenção em Carteira 24 + return_move_code - + Protestado e Baixado (Baixa por Ter Sido Protestado) 25 + return_move_code - + Instrução Rejeitada 26 + return_move_code - + Confirmação do Pedido de Alteração de Outros Dados 27 + return_move_code - + Débito de Tarifas/Custas 28 + return_move_code - + Ocorrências do Sacado 29 + return_move_code - + Alteração de Dados Rejeitada 30 + return_move_code - + Confirmação da Alteração dos Dados do Rateio de Crédito 33 + return_move_code - + Confirmação do Cancelamento dos Dados do Rateio de Crédito 34 + return_move_code - + Confirmação do Desagendamento do Débito Automático 35 + return_move_code - + Confirmação de envio de e-mail/SMS 36 + return_move_code - + Envio de e-mail/SMS rejeitado 37 + return_move_code - + Confirmação de alteração do Prazo Limite de Recebimento (a data deve ser informada no campo 28.3.p) 38 + return_move_code - + Confirmação de Dispensa de Prazo Limite de Recebimento 39 + return_move_code - + Confirmação da alteração do número do título dado pelo cedente 40 + return_move_code - + Confirmação da alteração do número controle do Participante 41 + return_move_code - + Confirmação da alteração dos dados do Sacado 42 + return_move_code - + Confirmação da alteração dos dados do Sacador/Avalista 43 + return_move_code - + Título pago com cheque devolvido 44 + return_move_code - + Título pago com cheque compensado 45 + return_move_code - + Instrução para cancelar protesto confirmada 46 + return_move_code - + Instrução para protesto para fins falimentares confirmada 47 + return_move_code - + Confirmação de instrução de transferência de carteira/modalidade de cobrança 48 + return_move_code - + Alteração de contrato de cobrança 49 + return_move_code - + Título pago com cheque pendente de liquidação 50 + return_move_code - + Título DDA reconhecido pelo sacado 51 + return_move_code - + Título DDA não reconhecido pelo sacado 52 + return_move_code - + Título DDA recusado pela CIP 53 + return_move_code - + Confirmação da Instrução de Baixa de Título Negativado sem Protesto 54 + return_move_code - + Confirmação de pedido de dispensa de multa 55 + return_move_code - + Confirmação de pedido de cobrança de multa 56 + return_move_code - + Confirmação de pedido de alteração de cobrança de juros 57 + return_move_code - + Confirmação de pedido de alteração de valor/data de desconto 58 + return_move_code - + Confirmação de pedido de alteração do cedente do título 59 + return_move_code - + Confirmação de pedido de dispensa de juros de mora 60 + return_move_code - + Remessa 01 + instruction_move_code - + Pedido de Baixa 02 + instruction_move_code - + Pedido de Protesto Falimentar 03 + instruction_move_code - + Concessão de Abatimento 04 + instruction_move_code - + Cancelamento de Abatimento Concedido 05 + instruction_move_code - + Alteração de Vencimento 06 + instruction_move_code - + Alteração do Controle do Participante 07 + instruction_move_code - + Alteração de seu Número 08 + instruction_move_code - + Pedido de Protesto 09 + instruction_move_code - + Ped. Exc. de Cadastro Pagador Débito 12 + instruction_move_code - + Inclusão de Cadastro Pagador 13 + instruction_move_code - + Alteração Cadastro Pagador 14 + instruction_move_code - + Sustar Protesto e Baixar Título 18 + instruction_move_code - + Sustar Protesto e Manter em Carteira 19 + instruction_move_code - + Alteração de Valor* 20 + instruction_move_code - + Transferência Cessão Crédito ID. Prod.10 22 + instruction_move_code - + Transferência entre Carteiras 23 + instruction_move_code - + Dev. Transferência entre Carteiras 24 + instruction_move_code - + Alteração de Outros Dados 31 + instruction_move_code - + Instrução de Negativação 32 + instruction_move_code - + Pedido de Negativação 45 + instruction_move_code - + Excluir Negativação com Baixa 46 + instruction_move_code - + Excluir Negativação e Manter Pendente 47 + instruction_move_code - + Acerto nos Dados do Rateio de Crédito 68 + instruction_move_code - + Cancelamento do Rateio de Crédito 69 + instruction_move_code - + Entrada Confirmada 02 + return_move_code - + Entrada Rejeitada 03 + return_move_code - + Liquidação Normal * 06 + return_move_code - + Conf. Exc. Cadastro Pagador Débito 07 + return_move_code - + Rej. Ped. Exc. Cadastro de Pagador Débito 08 + return_move_code - + Baixado Automat. via Arquivo 09 + return_move_code - + Baixado conforme instruções da Agência 10 + return_move_code - + Em Ser - Arquivo de Títulos pendentes 11 + return_move_code - + Abatimento Concedido 12 + return_move_code - + Abatimento Cancelado 13 + return_move_code - + Vencimento Alterado 14 + return_move_code - + Liquidação em Cartório 15 + return_move_code - + Título Pago em Cheque – Vinculado 16 + return_move_code - + Liquidação após baixa ou Título não registrado 17 + return_move_code - + Acerto de Depositária 18 + return_move_code - + Confirmação Receb. Inst. de Protesto 19 + return_move_code - + Confirmação Recebimento Instrução Sustação de Protesto 20 + return_move_code - + Acerto do Controle do Participante (sem motivo) 21 + return_move_code - + Título Com Pagamento Cancelado 22 + return_move_code - + Entrada do Título em Cartório (sem motivo) 23 + return_move_code - + Entrada rejeitada por CEP Irregular 24 + return_move_code - + Confirmação Receb.Inst.de Protesto Falimentar 25 + return_move_code - + Baixa Rejeitada 27 + return_move_code - + Débito de tarifas/custas 28 + return_move_code - + Ocorrências do Pagador 29 + return_move_code - + Alteração de Outros Dados Rejeitados 30 + return_move_code - + Confirmado Inclusão Cadastro Pagador 31 + return_move_code - + Instrução Rejeitada 32 + return_move_code - + Confirmação Pedido Alteração Outros Dados 33 + return_move_code - + Retirado de Cartório e Manutenção Carteira 34 + return_move_code - + Desagendamento do débito automático 35 + return_move_code - + Rejeitado Inclusão Cadastro Pagador 37 + return_move_code - + Confirmado Alteração Pagador 38 + return_move_code - + Rejeitado Alteração Cadastro Pagador 39 + return_move_code - + Estorno de pagamento 40 + return_move_code - + Sustado judicial 55 + return_move_code - + Acerto dos dados do rateio de Crédito 68 + return_move_code - + Cancelamento de Rateio 69 + return_move_code - + Confirmação Receb. Pedido de Negativação 73 + return_move_code - + Confir Pedido de Excl de Negat (com ou sem baixa) 74 + return_move_code - + Nota: Para as ocorrências sem motivos, as posições serão informadas com Zeros. 00 + return_move_code - + Entrada de Título 01 + instruction_move_code - + Pedido de Baixa 02 + instruction_move_code - + Concessão de Abatimento 04 + instruction_move_code - + Cancelamento de Abatimento 05 + instruction_move_code - + Alteração de Vencimento 06 + instruction_move_code - + Concessão de Desconto 07 + instruction_move_code - + Cancelamento de Desconto 08 + instruction_move_code - + Protestar (transferir de Devolução para Protesto) 09 + instruction_move_code - + Sustar Protesto e Baixar Título 10 + instruction_move_code - + Sustar Protesto e Manter em Carteira 11 + instruction_move_code - + Alteração de Outros Dados 31 + instruction_move_code - + Alteração dos Dados do Rateio de Crédito 33 + instruction_move_code - + Inclusão no Banco de Pagadores 36 + instruction_move_code - + Alteração no Banco de Pagadores 37 + instruction_move_code - + Exclusão no Banco de Pagadores 38 + instruction_move_code - + Serviços 40 + instruction_move_code - + Alteração do Valor Nominal do Título 47 + instruction_move_code - + Alteração valor/percentual mínimo/máximo 48 + instruction_move_code - + Solicitação de Impressão de Títulos Confirmada 01 + return_move_code - + Entrada Confirmada 02 + return_move_code - + Entrada Rejeitada 03 + return_move_code - + Transferência de Carteira/Entrada 04 + return_move_code - + Transferência de Carteira/Baixa 05 + return_move_code - + Liquidação 06 + return_move_code - + Confirmação do Recebimento da Instrução de Desconto 07 + return_move_code - + Confirmação do Recebimento do Cancelamento do Desconto 08 + return_move_code - + Baixa 09 + return_move_code - + Confirmação Recebimento Instrução de Abatimento 12 + return_move_code - + Confirmação Recebimento Instrução de Cancelamento Abatimento 13 + return_move_code - + Confirmação Recebimento Instrução Alteração de Vencimento 14 + return_move_code - + Confirmação Recebimento Instrução de Protesto 19 + return_move_code - + Confirmação Recebimento Instrução de Sustação/Cancelamento de Protesto 20 + return_move_code - + Remessa a Cartório 23 + return_move_code - + Retirada de Cartório 24 + return_move_code - + Protestado e Baixado (Baixa por Ter Sido Protestado) 25 + return_move_code - + Instrução Rejeitada 26 + return_move_code - + Confirmação do Pedido de Alteração de Outros Dados 27 + return_move_code - + Débito de Tarifas/Custas 28 + return_move_code - + Alteração de Dados Rejeitada 30 + return_move_code - + Confirmação de Inclusão Banco de Pagador 35 + return_move_code - + Confirmação de Alteração Banco de Pagador 36 + return_move_code - + Confirmação de Exclusão Banco de Pagador 37 + return_move_code - + Emissão de Boletos de Banco de Pagador 38 + return_move_code - + Manutenção de Pagador Rejeitada 39 + return_move_code - + Entrada de Título via Banco de Pagador Rejeitada 40 + return_move_code - + Manutenção de Banco de Pagador Rejeitada 41 + return_move_code - + Estorno de Baixa / Liquidação 44 + return_move_code - + Alteração de Dados 45 + return_move_code - + Liquidação On-line 46 + return_move_code - + Estorno de Liquidação On-line 47 + return_move_code - + Título DDA reconhecido pelo pagador 51 + return_move_code - + Título DDA não reconhecido pelo pagador 52 + return_move_code - + Título DDA recusado pela CIP 53 + return_move_code - + Confirmação de alteração do valor nominal do título 61 + return_move_code - + Confirmação de alteração do valor/percentual mínimo/máximo 62 + return_move_code - + Registro de títulos 01 + instruction_move_code - + Solicitação de baixa 02 + instruction_move_code - + Pedido de débito em conta 03 + instruction_move_code - + Concessão de abatimento 04 + instruction_move_code - + Cancelamento de abatimento 05 + instruction_move_code - + Alteração de vencimento de título 06 + instruction_move_code - + Alteração do número de controle do participante 07 + instruction_move_code - + Alteração do número do titulo dado pelo Beneficiário 08 + instruction_move_code - + Instrução para protestar (Nota 09) 09 + instruction_move_code - + Instrução para sustar protesto 10 + instruction_move_code - + Instrução para dispensar juros 11 + instruction_move_code - + Alteração de nome e endereço do Pagador 12 + instruction_move_code - + Alterar Juros de Mora (Vide Observações) 16 + instruction_move_code - + Conceder desconto 31 + instruction_move_code - + Não conceder desconto 32 + instruction_move_code - + Retificar dados da concessão de desconto 33 + instruction_move_code - + Alterar data para concessão de desconto 34 + instruction_move_code - + Cobrar multa (Nota 11) 35 + instruction_move_code - + Dispensar multa (Nota 11) 36 + instruction_move_code - + Dispensar indexador 37 + instruction_move_code - + Dispensar prazo limite de recebimento (Nota 11) 38 + instruction_move_code - + Alterar prazo limite de recebimento (Nota 11) 39 + instruction_move_code - + Alterar modalidade (Vide Observações) 40 + instruction_move_code - + Alteração de Valor Nominal do Boleto 47 + instruction_move_code - + Inclusão de Negativação Sem Protesto (campo “Seu número” diferencia a negativação para o mesmo pagador) (Nota 09) 85 + instruction_move_code - + Exclusão de Negativação Sem Protesto (Nota 09) 86 + instruction_move_code - + Confirmação de Entrada de Boleto 02 + return_move_code - + Comando recusado (Motivo indicado na posição 087/088) 03 + return_move_code - + Liquidado sem registro (carteira 17-tipo4) 05 + return_move_code - + Liquidação Normal) 06 + return_move_code - + Liquidação por Conta/Parcial 07 + return_move_code - + Liquidação por Saldo 08 + return_move_code - + Baixa de Titulo 09 + return_move_code - + Baixa Solicitada 10 + return_move_code - + Boletos em Ser (constara somente do arquivo de existência de cobrança, fornecido mediante solicitação do cliente) 11 + return_move_code - + Abatimento Concedido 12 + return_move_code - + Abatimento Cancelado 13 + return_move_code - + Alteração de Vencimento do boleto 14 + return_move_code - + Liquidação em Cartório 15 + return_move_code - + Confirmação de alteração de juros de mora 16 + return_move_code - + Confirmação de recebimento de instruções para protesto 19 + return_move_code - + Débito em Conta 20 + return_move_code - + Alteração do Nome do Sacado 21 + return_move_code - + Alteração do Endereço do Sacado 22 + return_move_code - + Indicação de encaminhamento a cartório 23 + return_move_code - + Sustar Protesto 24 + return_move_code - + Dispensar Juros de mora 25 + return_move_code - + Alteração do número do boleto dado pelo Cedente (Seu número) – 10 e 15 posições 26 + return_move_code - + Manutenção de titulo vencido 28 + return_move_code - + Conceder desconto 31 + return_move_code - + Não conceder desconto 32 + return_move_code - + Retificar desconto 33 + return_move_code - + Cobrar Multa 35 + return_move_code - + Dispensar Multa 36 + return_move_code - + Dispensar Indexador 37 + return_move_code - + Dispensar prazo limite para recebimento 38 + return_move_code - + Alterar prazo limite para recebimento 39 + return_move_code - + Alteração do número do controle do participante (25 posições) 41 + return_move_code - + Alteração do número do documento do sacado (CNPJ/CPF) 42 + return_move_code - + Boleto pago com cheque devolvido) 44 + return_move_code - + Boleto pago com cheque, aguardando compensação) 46 + return_move_code - + Alteração de valor nominal do boleto 47 + return_move_code - + Registrado QR Code Pix 61 + return_move_code - + Alteração de tipo de cobrança (específico para boletos das carteiras 11 e 17) 72 + return_move_code - + Confirmação de Instrução de Parâmetro de Pagamento Parcial 73 + return_move_code - + Inclusão de Negativação 85 + return_move_code - + Exclusão de Negativação 86 + return_move_code - + Baixa Operacional 93 + return_move_code - + Despesas de Protesto 96 + return_move_code - + Despesas de Sustação de Protesto 97 + return_move_code - + Débito de Custas Antecipadas 98 + return_move_code - + REMESSA 01 + instruction_move_code - + PEDIDO DE BAIXA 02 + instruction_move_code - + CONCESSÃO DE ABATIMENTO 04 + instruction_move_code - + CANCELAMENTO DE ABATIMENTO 05 + instruction_move_code - + ALTERAÇÃO DO VENCIMENTO 06 + instruction_move_code - + PROTESTAR 09 + instruction_move_code - + NÃO PROTESTAR (INIBE O PROTESTO AUTOMÁTICO) 10 + instruction_move_code - + SUSTAR O PROTESTO 18 + instruction_move_code - + ALTERAÇÃO DE OUTROS DADOS CAMPOS A ALTERAR 31 + instruction_move_code - + BENEFICIÁRIO NÃO CONCORDA COM A ALEGAÇÃO DO PAGADOR CÓDIGO DA ALEGAÇÃO 38 + instruction_move_code - + EXCLUSÃO DE SACADOR AVALISTA 41 + instruction_move_code - + ALTERAÇÃO DE DADOS EXTRAS (REGISTRO DE MULTA) 49 + instruction_move_code - + ENTRADA EM NEGATIVAÇÃO EXPRESSA 66 + instruction_move_code - + NÃO NEGATIVAR (INIBE ENTRADA EM NEGATIVAÇÃO EXPRESSA) 67 + instruction_move_code - + EXCLUIR NEGATIVAÇÃO EXPRESSA (ATÉ 15 DIAS CORRIDOS APÓS A ENTRADA EM NEGATIVAÇÃO EXPRESSA) 68 + instruction_move_code - + CANCELAR NEGATIVAÇÃO EXPRESSA (APÓS TÍTULO TER SIDO NEGATIVADO) 69 + instruction_move_code - + DESCONTAR TÍTULOS ENCAMINHADOS NO DIA 93 + instruction_move_code - + ENTRADA CONFIRMADA (COM POSSIBILIDADE DE MENSAGEM – NOTA 23 – TABELA 8) 02 + return_move_code - + ENTRADA REJEITADA (NOTA 23 - TABELA 1) 03 + return_move_code - + ALTERAÇÃO DE DADOS – NOVA ENTRADA OU ALTERAÇÃO/EXCLUSÃOADOS ACATADA 04 + return_move_code - + ALTERAÇÃO DE DADOS – BAIXA 05 + return_move_code - + LIQUIDAÇÃO NORMAL 06 + return_move_code - + LIQUIDAÇÃO EM CARTÓRIO 08 + return_move_code - + BAIXA SIMPLES 09 + return_move_code - + BAIXA POR TER SIDO LIQUIDADO 10 + return_move_code - + EM SER (SÓ NO RETORNO MENSAL) 11 + return_move_code - + ABATIMENTO CONCEDIDO 12 + return_move_code - + ABATIMENTO CANCELADO 13 + return_move_code - + VENCIMENTO ALTERADO 14 + return_move_code - + BAIXAS REJEITADAS (NOTA 23 - TABELA 4) 15 + return_move_code - + INSTRUÇÕES REJEITADAS (NOTA 23 – TABELA 3) 16 + return_move_code - + ALTERAÇÃO/EXCLUSÃO DE DADOS REJEITADA (NOTA 23 - TABELA 2) 17 + return_move_code - + COBRANÇA CONTRATUAL – INSTRUÇÕES/ALTERAÇÕES REJEITADAS/PENDENTES (NOTA 23 - TABELA 5) 18 + return_move_code - + CONFIRMAÇÃO RECEBIMENTO DE INSTRUÇÃO DE PROTESTO 19 + return_move_code - + CONFIRMAÇÃO RECEBIMENTO DE INSTRUÇÃO DE SUSTAÇÃO DE PROTESTO /TARIFA 20 + return_move_code - + CONFIRMAÇÃO RECEBIMENTO DE INSTRUÇÃO DE NÃO PROTESTAR 21 + return_move_code - + PROTESTO ENVIADO A CARTÓRIO/TARIFA 23 + return_move_code - + INSTRUÇÃO DE PROTESTO SUSTADA (NOTA 23 - TABELA 7) 24 + return_move_code - + ALEGAÇÕES DO PAGADOR (NOTA 23 - TABELA 6) 25 + return_move_code - + TARIFA DE AVISO DE COBRANÇA 26 + return_move_code - + TARIFA DE EXTRATO POSIÇÃO (B40X) 27 + return_move_code - + TARIFA DE RELAÇÃO DAS LIQUIDAÇÕES 28 + return_move_code - + TARIFA DE MANUTENÇÃO DE TÍTULOS VENCIDOS 29 + return_move_code - + DÉBITO MENSAL DE TARIFAS (PARA ENTRADAS E BAIXAS) 30 + return_move_code - + BAIXA POR TER SIDO PROTESTADO 32 + return_move_code - + CUSTAS DE PROTESTO 33 + return_move_code - + CUSTAS DE SUSTAÇÃO 34 + return_move_code - + CUSTAS DE CARTÓRIO DISTRIBUIDOR 35 + return_move_code - + CUSTAS DE EDITAL 36 + return_move_code - + TARIFA DE EMISSÃO DE BOLETO/TARIFA DE ENVIO DE DUPLICATA 37 + return_move_code - + TARIFA DE INSTRUÇÃO 38 + return_move_code - + TARIFA DE OCORRÊNCIAS 39 + return_move_code - + TARIFA MENSAL DE EMISSÃO DE BOLETO/TARIFA MENSAL DE ENVIO DE DUPLICATA 40 + return_move_code - + DÉBITO MENSAL DE TARIFAS – EXTRATO DE POSIÇÃO (B4EP/B4OX) 41 + return_move_code - + DÉBITO MENSAL DE TARIFAS – OUTRAS INSTRUÇÕES 42 + return_move_code - + DÉBITO MENSAL DE TARIFAS – MANUTENÇÃO DE TÍTULOS VENCIDOS 43 + return_move_code - + DÉBITO MENSAL DE TARIFAS – OUTRAS OCORRÊNCIAS 44 + return_move_code - + DÉBITO MENSAL DE TARIFAS – PROTETO 45 + return_move_code - + DÉBITO MENSAL DE TARIFAS – SUSTAÇÃO DE PROTESTO 46 + return_move_code - + BAIXA COM TRANSFERÊNCIA PARA DESCONTO 47 + return_move_code - + CUSTAS DE SUSTAÇÃO JUDICIAL 48 + return_move_code - + TARIFA MENSAL REFERENTE A ENTRADAS BANCOS CORRESPONDENTES NA CARTEIRA 51 + return_move_code - + TARIFA MENSAL BAIXAS NA CARTEIRA 52 + return_move_code - + TARIFA MENSAL BAIXAS EM BANCOS CORRESPONDENTES NA CARTEIRA 53 + return_move_code - + TARIFA MENSAL DE LIQUIDAÇÕES NA CARTEIRA 54 + return_move_code - + TARIFA MENSAL DE LIQUIDAÇÕES EM BANCOS CORRESPONDENTES NA CARTEIRA 55 + return_move_code - + CUSTAS DE IRREGULARIDADE 56 + return_move_code - + INSTRUÇÃO CANCELADA (NOTA 23 – TABELA 8) 57 + return_move_code - + ENTRADA REJEITADA CARNÊ (NOTA 20 – TABELA 1) 60 + return_move_code - + TARIFA EMISSÃO AVISO DE MOVIMENTAÇÃO DE TÍTULOS (2154) 61 + return_move_code - + DÉBITO MENSAL DE TARIFA – AVISO DE MOVIMENTAÇÃO DE TÍTULOS (2154) 62 + return_move_code - + TÍTULO SUSTADO JUDICIALMENTE 63 + return_move_code - + INSTRUÇÃO DE NEGATIVAÇÃO EXPRESSA REJEITADA (NOTA 25 – TABELA 3) 74 + return_move_code - + CONFIRMA O RECEBIMENTO DE INSTRUÇÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA 75 + return_move_code - + CONFIRMA O RECEBIMENTO DE INSTRUÇÃO DE EXCLUSÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA 77 + return_move_code - + CONFIRMA O RECEBIMENTO DE INSTRUÇÃO DE CANCELAMENTO DA NEGATIVAÇÃO EXPRESSA 78 + return_move_code - + NEGATIVAÇÃO EXPRESSA INFORMACIONAL (NOTA 25 – TABELA 12) 79 + return_move_code - + CONFIRMAÇÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA – TARIFA 80 + return_move_code - + CONFIRMAÇÃO O CANCELAMENTO DE NEGATIVAÇÃO EXPRESSA - TARIFA 82 + return_move_code - + CONFIRMAÇÃO DA EXCLUSÃO/CANCELAMENTO DA NEGATIVAÇÃO EXPRESSA POR LIQUIDAÇÃO - TARIFA 83 + return_move_code - + TARIFA POR BOLETO (ATÉ 03 ENVIOS) COBRANÇA ATIVA ELETRÔNICA 85 + return_move_code - + TARIFA EMAIL COBRANÇA ATIVA ELETRÔNICA 86 + return_move_code - + TARIFA SMS COBRANÇA ATIVA ELETRÔNICA 87 + return_move_code - + TARIFA MENSAL POR BOLETO (ATÉ 03 ENVIOS) COBRANÇA ATIVA ELETRÔNICA 88 + return_move_code - + TARIFA MENSAL EMAIL COBRANÇA ATIVA ELETRÔNICA 89 + return_move_code - + TARIFA MENSAL SMS COBRANÇA ATIVA ELETRÔNICA 90 + return_move_code - + TARIFA MENSAL DE EXCLUSÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA 91 + return_move_code - + TARIFA MENSAL DE CANCELAMENTO DE NEGATIVAÇÃO EXPRESSA 92 + return_move_code - + TARIFA MENSAL DE EXCLUSÃO/CANCELAMENTO DE NEGATIVAÇÃO EXPRESSA POR LIQUIDAÇÃO 93 + return_move_code - + CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE NÃO NEGATIVAR 94 + return_move_code - + REMESSA 01 + instruction_move_code - + PEDIDO DE BAIXA 02 + instruction_move_code - + CONCESSÃO DE ABATIMENTO 04 + instruction_move_code - + CANCELAMENTO DE ABATIMENTO VALOR DO ABATIMENTO 05 + instruction_move_code - + ALTERAÇÃO DO VENCIMENTO 06 + instruction_move_code - + ALTERAÇÃO DO USO DA EMPRESA USO DA EMPRESA 07 + instruction_move_code - + ALTERAÇÃO DO SEU NÚMERO SEU NÚMERO 08 + instruction_move_code - + PROTESTAR 09 + instruction_move_code - + NÃO PROTESTAR 10 + instruction_move_code - + PROTESTO PARA FINS FALIMENTARES 11 + instruction_move_code - + SUSTAR O PROTESTO 18 + instruction_move_code - + EXCLUSÃO DE SACADOR AVALISTA 30 + instruction_move_code - + ALTERAÇÃO DE OUTROS DADOS CAMPOS A ALTERAR 31 + instruction_move_code - + BAIXA POR TER SIDO PAGO DIRETAMENTE AO BENEFICIÁRIO 34 + instruction_move_code - + CANCELAMENTO DE INSTRUÇÃO CÓDIGO DA INSTRUÇÃO 35 + instruction_move_code - + ALTERAÇÃO DO VENCIMENTO E SUSTAR PROTESTO VENCIMENTO 37 + instruction_move_code - + BENEFICIÁRIO NÃO CONCORDA COM ALEGAÇÃO DO PAGADOR CÓDIGO DA ALEGAÇÃO 38 + instruction_move_code - + BENEFICIÁRIO SOLICITA DISPENSA DE JUROS 47 + instruction_move_code - + ALTERAÇÃO DE DADOS EXTRAS (REGISTRO DE MULTA) 49 + instruction_move_code - + ENTRADA EM NEGATIVAÇÃO EXPRESSA 66 + instruction_move_code - + NÃO NEGATIVAR (INIBE A ENTRADA EM NEGATIVAÇÃO EXPRESSA) 67 + instruction_move_code - + EXCLUIR NEGATIVAÇÃO EXPRESSA (ATÉ 15 DIAS CORRIDOS APÓS A ENTRADA EM NEGATIVAÇÃO EXPRESSA) 68 + instruction_move_code - + CANCELAR NEGATIVAÇÃO EXPRESSA (APÓS TÍTULO TER SIDO NEGATIVADO)) 69 + instruction_move_code - + DESCONTAR TÍTULOS ENCAMINHADOS NO DIA 93 + instruction_move_code - + ENTRADA CONFIRMADA COM POSSIBILIDADE DE MENSAGEM 02 + return_move_code - + ENTRADA REJEITADA 03 + return_move_code - + ALTERAÇÃO DE DADOS – NOVA ENTRADA OU ALTERAÇÃO/EXCLUSÃO DE DADOS ACATADA 04 + return_move_code - + ALTERAÇÃO DE DADOS – BAIXA 05 + return_move_code - + Liquidação Normal 06 + return_move_code - + LIQUIDAÇÃO PARCIAL – COBRANÇA INTELIGENTE (B2B) 07 + return_move_code - + LIQUIDAÇÃO EM CARTÓRIO 08 + return_move_code - + BAIXA SIMPLES 09 + return_move_code - + BAIXA POR TER SIDO LIQUIDADO 10 + return_move_code - + EM SER (SÓ NO RETORNO MENSAL) 11 + return_move_code - + ABATIMENTO CONCEDIDO 12 + return_move_code - + ABATIMENTO CANCELADO 13 + return_move_code - + VENCIMENTO ALTERADO 14 + return_move_code - + BAIXAS REJEITADAS (NOTA 20 – TABELA 4) 15 + return_move_code - + INSTRUÇÕES REJEITADAS (NOTA 20 – TABELA 3) 16 + return_move_code - + ALTERAÇÃO/EXCLUSÃO DE DADOS REJEITADOS (NOTA 20 – TABELA 2) 17 + return_move_code - + COBRANÇA CONTRATUAL – INSTRUÇÕES/ALTERAÇÕES REJEITADAS/PENDENTES (NOTA 20 – TABELA 5) 18 + return_move_code - + CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE PROTESTO 19 + return_move_code - + CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE SUSTAÇÃO DE PROTESTO /TARIFA 20 + return_move_code - + CONFIRMA RECEBIMENTO DE INSTRUÇÃO DE NÃO PROTESTAR 21 + return_move_code - + TÍTULO ENVIADO A CARTÓRIO/TARIFA 23 + return_move_code - + INSTRUÇÃO DE PROTESTO REJEITADA / SUSTADA / PENDENTE (NOTA 20 – TABELA 7) 24 + return_move_code - + ALEGAÇÕES DO PAGADOR (NOTA 20 – TABELA 6) 25 + return_move_code - + TARIFA DE AVISO DE COBRANÇA 26 + return_move_code - + TARIFA DE EXTRATO POSIÇÃO (B40X) 27 + return_move_code - + TARIFA DE RELAÇÃO DAS LIQUIDAÇÕES 28 + return_move_code - + TARIFA DE MANUTENÇÃO DE TÍTULOS VENCIDOS 29 + return_move_code - + DÉBITO MENSAL DE TARIFAS (PARA ENTRADAS E BAIXAS) 30 + return_move_code - + BAIXA POR TER SIDO PROTESTADO 32 + return_move_code - + CUSTAS DE PROTESTO 33 + return_move_code - + CUSTAS DE SUSTAÇÃO 34 + return_move_code - + CUSTAS DE CARTÓRIO DISTRIBUIDOR 35 + return_move_code - + CUSTAS DE EDITAL 36 + return_move_code - + TARIFA DE EMISSÃO DE BOLETO/TARIFA DE ENVIO DE DUPLICATA 37 + return_move_code - + TARIFA DE INSTRUÇÃO 38 + return_move_code - + TARIFA DE OCORRÊNCIAS 39 + return_move_code - + TARIFA MENSAL DE EMISSÃO DE BOLETO/TARIFA MENSAL DE ENVIO DE DUPLICATA 40 + return_move_code - + DÉBITO MENSAL DE TARIFAS – EXTRATO DE POSIÇÃO (B4EP/B4OX) 41 + return_move_code - + DÉBITO MENSAL DE TARIFAS – OUTRAS INSTRUÇÕES 42 + return_move_code - + DÉBITO MENSAL DE TARIFAS – MANUTENÇÃO DE TÍTULOS VENCIDOS 43 + return_move_code - + DÉBITO MENSAL DE TARIFAS – OUTRAS OCORRÊNCIAS 44 + return_move_code - + DÉBITO MENSAL DE TARIFAS – PROTESTO 45 + return_move_code - + DÉBITO MENSAL DE TARIFAS – SUSTAÇÃO DE PROTESTO 46 + return_move_code - + BAIXA COM TRANSFERÊNCIA PARA DESCONTO 47 + return_move_code - + CUSTAS DE SUSTAÇÃO JUDICIAL 48 + return_move_code - + TARIFA MENSAL REF A ENTRADAS BANCOS CORRESPONDENTES NA CARTEIRA 51 + return_move_code - + TARIFA MENSAL BAIXAS NA CARTEIRA 52 + return_move_code - + TARIFA MENSAL BAIXAS EM BANCOS CORRESPONDENTES NA CARTEIRA 53 + return_move_code - + TARIFA MENSAL DE LIQUIDAÇÕES NA CARTEIRA 54 + return_move_code - + TARIFA MENSAL DE LIQUIDAÇÕES EM BANCOS CORRESPONDENTES NA CARTEIRA 55 + return_move_code - + CUSTAS DE IRREGULARIDADE 56 + return_move_code - + INSTRUÇÃO CANCELADA (NOTA 20 – TABELA 8) 57 + return_move_code - + BAIXA POR CRÉDITO EM C/C ATRAVÉS DO SISPAG 59 + return_move_code - + ENTRADA REJEITADA CARNÊ (NOTA 20 – TABELA 1) 60 + return_move_code - + TARIFA EMISSÃO AVISO DE MOVIMENTAÇÃO DE TÍTULOS (2154) 61 + return_move_code - + DÉBITO MENSAL DE TARIFA – AVISO DE MOVIMENTAÇÃO DE TÍTULOS (2154) 62 + return_move_code - + TÍTULO SUSTADO JUDICIALMENTE 63 + return_move_code - + ENTRADA CONFIRMADA COM RATEIO DE CRÉDITO 64 + return_move_code - + PAGAMENTO COM CHEQUE – AGUARDANDO COMPENSAÇÃO 65 + return_move_code - + CHEQUE DEVOLVIDO (NOTA 20 – TABELA 9) 69 + return_move_code - + ENTRADA REGISTRADA, AGUARDANDO AVALIAÇÃO 71 + return_move_code - + BAIXA POR CRÉDITO EM C/C ATRAVÉS DO SISPAG SEM TÍTULO CORRESPONDENTE 72 + return_move_code - + CONFIRMAÇÃO DE ENTRADA NA COBRANÇA SIMPLES – ENTRADA NÃO ACEITA NA COBRANÇA CONTRATUAL 73 + return_move_code - + INSTRUÇÃO DE NEGATIVAÇÃO EXPRESSA REJEITADA (NOTA 20 – TABELA 11) 74 + return_move_code - + CONFIRMAÇÃO DE RECEBIMENTO DE INSTRUÇÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA 75 + return_move_code - + CHEQUE COMPENSADO 76 + return_move_code - + CONFIRMAÇÃO DE RECEBIMENTO DE INSTRUÇÃO DE EXCLUSÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA 77 + return_move_code - + CONFIRMAÇÃO DE RECEBIMENTO DE INSTRUÇÃO DE CANCELAMENTO DE NEGATIVAÇÃO EXPRESSA 78 + return_move_code - + NEGATIVAÇÃO EXPRESSA INFORMACIONAL (NOTA 20 – TABELA 12) 79 + return_move_code - + CONFIRMAÇÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA – TARIFA 80 + return_move_code - + CONFIRMAÇÃO DO CANCELAMENTO DE NEGATIVAÇÃO EXPRESSA – TARIFA 82 + return_move_code - + CONFIRMAÇÃO DE EXCLUSÃO DE ENTRADA EM NEGATIVAÇÃO EXPRESSA POR LIQUIDAÇÃO – TARIFA 83 + return_move_code - + TARIFA POR BOLETO (ATÉ 03 ENVIOS) COBRANÇA ATIVA ELETRÔNICA 85 + return_move_code - + TARIFA EMAIL COBRANÇA ATIVA ELETRÔNICA 86 + return_move_code - + TARIFA SMS COBRANÇA ATIVA ELETRÔNICA 87 + return_move_code - + TARIFA MENSAL POR BOLETO (ATÉ 03 ENVIOS) COBRANÇA ATIVA ELETRÔNICA 88 + return_move_code - + TARIFA MENSAL EMAIL COBRANÇA ATIVA ELETRÔNICA 89 + return_move_code - + TARIFA MENSAL SMS COBRANÇA ATIVA ELETRÔNICA 90 + return_move_code - + TARIFA MENSAL DE EXCLUSÃO DE ENTRADA DE NEGATIVAÇÃO EXPRESSA 91 + return_move_code - + TARIFA MENSAL DE CANCELAMENTO DE NEGATIVAÇÃO EXPRESSA 92 + return_move_code - + TARIFA MENSAL DE EXCLUSÃO DE NEGATIVAÇÃO EXPRESSA POR LIQUIDAÇÃO 93 + return_move_code - + Cobrança Simples (Eletrônica com Registro) 1 + wallet_code - + Cobrança Caucionada (Eletrônica com Registro) 3 + wallet_code - + Cobrança Simples (Rápida com Registro) 5 + wallet_code - + Cobrança Caucionada (Rápida com Registro) 6 + wallet_code - + Cobrança Descontada (Eletrônica com Registro) 7 + wallet_code - + Cobrança Cessão (Eletrônica com Registro)* 8 + wallet_code - + Cobrança Simples (Sem Registro e Eletrônica com Registro) 1 + wallet_code - + Cobrança Caucionada (Eletrônica com Registro e Convencional com Registro) 3 + wallet_code - + Cobrança Descontada (Eletrônica com Registro) 4 + wallet_code - + Cobrança Simples (Rápida com Registro)* 5 + wallet_code *Carteira específica para registro do Boleto com QR CODE. - + Cobrança Caucionada (Rápida com Registro) 6 + wallet_code - + Transferência de Titularidade - Sem Devolução (Cobrança Simples - Eletrônica com Registro e Rápida com Registro)** 7 + wallet_code **Carteira específica para FIDC (Fundo de Direitos Creditórios) - + Cobrança Cessão (Eletrônica com Registro)**** 8 + wallet_code - + Transferência de Titularidade - Com Devolução (Cobrança Simples - Eletrônica com Registro e Rápida com Registro) 9 + wallet_code - + Cobrança Simples (Sem Registro sem pré-impresso e com pré-impresso)*** B + wallet_code - + Entrada de boleto 01 + instruction_move_code - + Pedido de baixa 02 + instruction_move_code - + Concessão de abatimento 04 + instruction_move_code - + Cancelamento do abatimento 05 + instruction_move_code - + Alteração do vencimento 06 + instruction_move_code - + Alteração da identificação do boleto na empresa (Controle Participante) 07 + instruction_move_code - + Alteração seu Número 08 + instruction_move_code - + Pedido de Protesto 09 + instruction_move_code - + Concessão de Desconto 10 + instruction_move_code - + Cancelamento de Desconto 11 + instruction_move_code - + Transferência de Titularidade automática 12 + instruction_move_code - + Transferência da carteira Simples para a carteira Cessão** 15 + instruction_move_code - + Baixa de Cessão por Descaracterização*** 16 + instruction_move_code - + Baixa de Cessão por Pagamento*** 17 + instruction_move_code - + Pedido de Sustação de Protesto 18 + instruction_move_code - + Alteração de outros dados* 31 + instruction_move_code - + Alteração do valor nominal do boleto 47 + instruction_move_code - + Alteração do valor mínimo/percentual 48 + instruction_move_code - + Alteração do valor máximo/percentual 49 + instruction_move_code - + Não Protestar (Antes de iniciar o ciclo de protesto) 98 + instruction_move_code - + Entrada confirmada 02 + return_move_code - + Entrada rejeitada 03 + return_move_code - + Transferência para carteira Simples 04 + return_move_code - + Transferência para Carteira Desconto/Penhor/Vendor/FIDC/Cessão 05 + return_move_code - + Liquidação 06 + return_move_code - + Confirmação do Recebimento do Cancelamento do Desconto 08 + return_move_code - + Baixa 09 + return_move_code - + Boletos em carteira (em ser) 11 + return_move_code - + Confirmação recebimento instrução de abatimento 12 + return_move_code - + Confirmação recebimento instrução de cancelamento abatimento 13 + return_move_code - + Confirmação recebimento instrução alteração de vencimento 14 + return_move_code - + Liquidado após baixa ou liquidação boleto não registrado 17 + return_move_code - + Confirmação recebimento instrução de protesto 19 + return_move_code - + Confirmação recebimento instrução de sustação/Não Protestar 20 + return_move_code - + Remessa a cartório (aponte em cartório) 23 + return_move_code - + Retirada de cartório e manutenção em carteira 24 + return_move_code - + Protestado e baixado (baixa por ter sido protestado) 25 + return_move_code - + Instrução rejeitada 26 + return_move_code - + Confirmação do pedido de alteração de outros dados 27 + return_move_code - + Debito de tarifas/custas 28 + return_move_code - + Ocorrências do Pagador 29 + return_move_code - + Alteração de dados rejeitada 30 + return_move_code - + Código de IOF inválido 32 + return_move_code - + Boleto DDA reconhecido pelo Pagador 51 + return_move_code - + Boleto DDA nâo reconhecido pelo Pagador 52 + return_move_code - + Boleto DDA recusado pela CIP 53 + return_move_code - + Confirmação de Alteração do Valor Nominal do Boleto 61 + return_move_code - + Confirmação de Alteração do Valor ou Percentual Mínimo 91 + return_move_code - + Confirmação de Alteração do Valor ou Percentual Máximo 92 + return_move_code - + Baixa Operacional 93 + return_move_code - + Cancelamento da Baixa Operacional 94 + return_move_code - + Pagador DDA A4 + return_move_code - + Entrada de boleto 01 + instruction_move_code - + Baixa de boleto 02 + instruction_move_code - + Concessão de abatimento 04 + instruction_move_code - + Cancelamento do abatimento 05 + instruction_move_code - + Alteração do vencimento 06 + instruction_move_code - + Alteração do número controle beneficiário 07 + instruction_move_code - + Alteração do Seu Número 08 + instruction_move_code - + Protestar 09 + instruction_move_code - + Transferência da carteira Simples para Cessão* 15 + instruction_move_code - + Baixa de Cessão por Descaracterização** 16 + instruction_move_code - + Baixa de Cessão por Pagamento** 17 + instruction_move_code - + Sustar o protesto (Após início do ciclo de protesto) 18 + instruction_move_code - + Alteração do valor nominal do boleto 47 + instruction_move_code - + Alteração do valor mínimo/percentual 48 + instruction_move_code - + Alteração do valor máximo/percentual 49 + instruction_move_code - + Boleto não existe 01 + return_move_code - + Entrada boleto confirmada 02 + return_move_code - + Entrada boleto rejeitada 03 + return_move_code - + Transferência para carteira Simples 04 + return_move_code - + Transferência para Carteira Penhor/Desconto/Cessão 05 + return_move_code - + Liquidação 06 + return_move_code - + Liquidação por Conta 07 + return_move_code - + Liquidação por Saldo 08 + return_move_code - + Baixa Automática 09 + return_move_code - + Boleto Baixado Conforme Instrução 10 + return_move_code - + Boletos em carteira (em ser) 11 + return_move_code - + Abatimento Concedido 12 + return_move_code - + Abatimento Cancelado 13 + return_move_code - + Alteração de Vencimento 14 + return_move_code - + Confirmação de Protesto* 15 + return_move_code - + Boleto Baixado/Liquidado 16 + return_move_code - + Liquidado em Cartório 17 + return_move_code - + Boleto Enviado a Cartório 21 + return_move_code - + Boleto Retirado do Cartório 22 + return_move_code - + Custas de Cartório 24 + return_move_code - + Boleto Protestado 25 + return_move_code - + Sustar Protesto* 26 + return_move_code - + Cancelar Boleto Protestado 27 + return_move_code - + Boleto DDA Reconhecido pelo Pagador 35 + return_move_code - + Boleto DDA Não Reconhecido pelo Pagador 36 + return_move_code - + Boleto DDA Recusado pela CIP 37 + return_move_code - + Não Protestar (antes de iniciar o ciclo de protesto) 38 + return_move_code - + Espécie de Boleto não permite a instrução 39 + return_move_code - + Confirmação de Alteração do Valor Nominal do Boleto 61 + return_move_code - + Confirmação de Alteração do Valor ou Percentual mínimo 62 + return_move_code - + Confirmação de Alteração do Valor ou Percentual máximo 63 + return_move_code - + Baixa Operacional Enviado pela CIP 93 + return_move_code - + Cancelamento da Baixa Operacional Enviado pela Cip 94 + return_move_code - + Entrada de títulos 01 + instruction_move_code - + Pedido de baixa 02 + instruction_move_code - + Concessão de abatimento 04 + instruction_move_code - + Cancelamento de abatimento 05 + instruction_move_code - + Alteração de vencimento 06 + instruction_move_code - + Concessão de desconto 07 + instruction_move_code - + Cancelamento de desconto 08 + instruction_move_code - + Protestar 09 + instruction_move_code - + Sustar protesto e baixar título 10 + instruction_move_code - + Sustar protesto e manter em carteira 11 + instruction_move_code - + Alteração de juros de mora 12 + instruction_move_code - + Dispensar cobrança de juros de mora 13 + instruction_move_code - + Alteração do valor de desconto 16 + instruction_move_code - + Não conceder desconto 17 + instruction_move_code - + Alteração de outros dados 31 + instruction_move_code - + Negativação sem protesto 45 + instruction_move_code - + Excluir negativação e manter em carteira 75 + instruction_move_code - + Excluir negativação e baixar 76 + instruction_move_code - + Entrada confirmada 02 + return_move_code - + Entrada rejeitada 03 + return_move_code - + Liquidação 06 + return_move_code - + Confirmação do recebimento da instrução de desconto 07 + return_move_code - + Confirmação do recebimento do cancelamento do desconto 08 + return_move_code - + Baixa 09 + return_move_code - + Confirmação do recebimento instrução de abatimento 12 + return_move_code - + Confirmação do recebimento instrução de cancelamento abatimento 13 + return_move_code - + Confirmação do recebimento instrução alteração de vencimento 14 + return_move_code - + Liquidação após baixa ou liquidação título não registrado 17 + return_move_code - + Confirmação do recebimento instrução de protesto 19 + return_move_code - + Confirmação do recebimento instrução de sustação/cancelamento de protesto 20 + return_move_code - + Remessa a cartório (aponte em cartório) 23 + return_move_code - + Retirada de cartório e manutenção em carteira 24 + return_move_code - + Protestado e baixado (baixa por ter sido protestado) 25 + return_move_code - + Instrução rejeitada 26 + return_move_code - + Confirmação do pedido de alteração de outros dados 27 + return_move_code - + Débito de tarifas custas 28 + return_move_code - + Alteração de dados rejeitada 30 + return_move_code - + Baixa rejeitada 36 + return_move_code - + Título DDA reconhecido pelo pagador 51 + return_move_code - + Título DDA não reconhecido pelo pagador 52 + return_move_code - + Confirmação de recebimento de pedido de negativação 78 + return_move_code - + Confirmação de recebimento de pedido de exclusão de negativação 79 + return_move_code - + Confirmação de entrada de negativação 80 + return_move_code - + Entrada de negativação rejeitada 81 + return_move_code - + Confirmação de exclusão de negativação 82 + return_move_code - + Exclusão de Negativação rejeitada 83 + return_move_code - + Exclusão de negativação por outros motivos 84 + return_move_code - + Ocorrência informacional por outros motivos 85 + return_move_code - + Intenção de pagamentos 91 + return_move_code - + Remessa* 01 + instruction_move_code - + Pedido de Baixa 02 + instruction_move_code - + Concessão de Abatimento* 04 + instruction_move_code Necessário ao enviar esta instrução 4 e também inserir 206 a 218 Valor do Abatimento. - + Cancelamento de Abatimento 05 + instruction_move_code - + Alteração de vencimento 06 + instruction_move_code - + Alteração de Seu Número 08 + instruction_move_code - + Protestar* 09 + instruction_move_code - + Sustar Protesto e Manter em Carteira 11 + instruction_move_code - + Sustar Protesto e Baixar Título 25 + instruction_move_code - + Protesto automático 26 + instruction_move_code - + Alteração de outros dados (Alteração de dados do pagador) 31 + instruction_move_code - + Alteração de Carteira 40 + instruction_move_code - + Pago (Título protestado pago em cartório) 01 + return_move_code - + Instrução Confirmada* 02 + return_move_code - + Instrução Rejeitada* 03 + return_move_code - + Sustado Judicial (Título protestado sustado judicialmente) 04 + return_move_code - + Liquidação Normal * 06 + return_move_code - + Liquidação em Condicional (Título liquidado em cartório com cheque do próprio devedor) 07 + return_move_code - + Sustado Definitivo (Título protestado sustado judicialmente) 08 + return_move_code - + Liquidação de Título Descontado 09 + return_move_code - + Protesto solicitado 10 + return_move_code - + Protesto Em cartório 11 + return_move_code - + Sustação solicitada 12 + return_move_code Date: Tue, 3 Sep 2024 16:05:47 -0300 Subject: [PATCH 04/12] [REF] l10n_br_account_payment_order: Demo CNAB Cod --- .../demo/account_payment_mode.xml | 346 ++++++++---------- .../demo/mov_instruction_code.xml | 108 ++---- 2 files changed, 179 insertions(+), 275 deletions(-) diff --git a/l10n_br_account_payment_order/demo/account_payment_mode.xml b/l10n_br_account_payment_order/demo/account_payment_mode.xml index 7178cd04a9a4..ce687b2e497d 100644 --- a/l10n_br_account_payment_order/demo/account_payment_mode.xml +++ b/l10n_br_account_payment_order/demo/account_payment_mode.xml @@ -35,45 +35,33 @@ name="not_payment_account_id" ref="1_account_template_32333_avoid_travis_error" /> - + + - + - + + - - @@ -110,45 +98,33 @@ name="not_payment_account_id" ref="1_account_template_32333_avoid_travis_error" /> - - + + + - + + - - @@ -233,32 +209,26 @@ 0001222130126 1 - - - - - + + + + + - - + + @@ -272,7 +242,7 @@ True 3 - + DM 19 S @@ -302,34 +272,31 @@ /> 0001222130126 - - + + + + - - - - - - + + + + @@ -379,27 +346,27 @@ 92035760 - - + + - + - - + + @@ -444,27 +411,27 @@ ref="1_account_template_32333_avoid_travis_error" /> - - + + - + - - + + @@ -506,23 +473,17 @@ ref="1_account_template_32333_avoid_travis_error" /> - - - - - - - - + + + + + + + + @@ -566,15 +527,15 @@ 12345 - - - - - + + + + + @@ -618,14 +579,14 @@ 12345 - - - - + + + + @@ -669,26 +630,23 @@ 000122 - - - - - + + + + + - - - - - + + + + + @@ -777,29 +735,26 @@ ref="1_account_template_32333_avoid_travis_error" /> - - - - - + + + + + - - - - + + + + @@ -844,27 +799,24 @@ 1234 7654321 - - - + + + + + - - - - - - + + + + @@ -921,7 +873,7 @@ True 101 - + DM 35 S @@ -954,36 +906,30 @@ 1234567 - - - - - + + + + + - - + + @@ -998,7 +944,7 @@ True 101 - + DM 35 S @@ -1030,28 +976,22 @@ 123456789012345 1234567 - - - - - + + + + + - - - - + + + + diff --git a/l10n_br_account_payment_order/demo/mov_instruction_code.xml b/l10n_br_account_payment_order/demo/mov_instruction_code.xml index 9472cabad346..c1554eb85c86 100644 --- a/l10n_br_account_payment_order/demo/mov_instruction_code.xml +++ b/l10n_br_account_payment_order/demo/mov_instruction_code.xml @@ -1,216 +1,180 @@ - + Entrada de Título 01 + instruction_move_code - + Pedido de Baixa 02 + instruction_move_code - + Concessão de Abatimento 04 + instruction_move_code - + Cancelamento de Abatimento 05 + instruction_move_code - + Alteração de Vencimento 06 + instruction_move_code - + Concessão de Desconto 07 + instruction_move_code - + Cancelamento de Desconto 08 + instruction_move_code - + Protestar (transferir de Devolução para Protesto) 09 + instruction_move_code - + Sustar Protesto e Baixar Título 10 + instruction_move_code - + Sustar Protesto e Manter em Carteira 11 + instruction_move_code - + Alteração de Outros Dados 31 + instruction_move_code - + Alteração dos Dados do Rateio de Crédito 33 + instruction_move_code - + Inclusão no Banco de Pagadores 36 + instruction_move_code - + Alteração no Banco de Pagadores 37 + instruction_move_code - + Exclusão no Banco de Pagadores 38 + instruction_move_code - + Serviços 40 + instruction_move_code - + Alteração do Valor Nominal do Título 47 + instruction_move_code - + Alteração valor/percentual mínimo/máximo 48 + instruction_move_code Date: Tue, 3 Sep 2024 16:07:17 -0300 Subject: [PATCH 05/12] [REF] l10n_br_account_payment_order: Test CNAB Cod --- .../tests/test_cnab_codes.py | 19 +++++----- .../tests/test_payment_order_change.py | 36 +++++++++---------- .../tests/test_payment_order_inbound.py | 24 ++++++------- 3 files changed, 41 insertions(+), 38 deletions(-) diff --git a/l10n_br_account_payment_order/tests/test_cnab_codes.py b/l10n_br_account_payment_order/tests/test_cnab_codes.py index 3d94596a0aea..19bddd216535 100644 --- a/l10n_br_account_payment_order/tests/test_cnab_codes.py +++ b/l10n_br_account_payment_order/tests/test_cnab_codes.py @@ -40,11 +40,12 @@ def test_cnab_instruction_move_code(self): # Testa o caso do Codigo Duplicado instruction_code_new_form = Form( - self.env["l10n_br_cnab.mov.instruction.code"], - "l10n_br_account_payment_order.l10n_br_cnab_mov_instruction_code_form_view", + self.env["l10n_br_cnab.code"], + "l10n_br_account_payment_order.l10n_br_cnab_code_form_view", ) - instruction_code_new_form.code = "01" + instruction_code_new_form.code = "02" + instruction_code_new_form.code_type = "instruction_move_code" instruction_code_new_form.name = "Remessa*" instruction_code_new_form.bank_ids.add( self.env.ref("l10n_br_base.res_bank_136") @@ -78,11 +79,12 @@ def test_cnab_return_move_code(self): # Caso Codigo Duplicado return_move_code_new_form = Form( - self.env["l10n_br_cnab.return.move.code"], - "l10n_br_account_payment_order.l10n_br_cnab_return_move_code_form_view", + self.env["l10n_br_cnab.code"], + "l10n_br_account_payment_order.l10n_br_cnab_code_form_view", ) - return_move_code_new_form.code = "01" + return_move_code_new_form.code = "02" + return_move_code_new_form.code_type = "return_move_code" return_move_code_new_form.name = "Pago (Título protestado pago em cartório)" return_move_code_new_form.bank_ids.add( self.env.ref("l10n_br_base.res_bank_136") @@ -110,11 +112,12 @@ def test_cnab_boleto_wallet_code(self): # Caso Codigo Duplicado boleto_wallet_code_new_form = Form( - self.env["l10n_br_cnab.boleto.wallet.code"], - "l10n_br_account_payment_order.l10n_br_cnab_boleto_wallet_code_form_view", + self.env["l10n_br_cnab.code"], + "l10n_br_account_payment_order.l10n_br_cnab_code_form_view", ) boleto_wallet_code_new_form.code = "1" + boleto_wallet_code_new_form.code_type = "wallet_code" boleto_wallet_code_new_form.name = ( "Cobrança Simples (Sem Registro e Eletrônica com Registro)" ) diff --git a/l10n_br_account_payment_order/tests/test_payment_order_change.py b/l10n_br_account_payment_order/tests/test_payment_order_change.py index e48edc318cfa..659abddc90d0 100644 --- a/l10n_br_account_payment_order/tests/test_payment_order_change.py +++ b/l10n_br_account_payment_order/tests/test_payment_order_change.py @@ -60,9 +60,9 @@ def test_change_date_maturity_multiple(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_06" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_date_maturity_one(self): """Test Creation of a Payment Order an change ONE due date""" @@ -101,9 +101,9 @@ def test_change_date_maturity_one(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_06" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" # def test_change_payment_mode(self): # invoice = self.invoice_auto @@ -145,9 +145,9 @@ def test_change_not_payment(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_02" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_protest_tittle(self): """Test Creation of a Payment Order an change protest_tittle""" @@ -173,9 +173,9 @@ def test_change_protest_tittle(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_09" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_suspend_protest_keep_wallet(self): """Test Creation of a Payment Order an change suspend_protest_keep_wallet""" @@ -201,9 +201,9 @@ def test_change_suspend_protest_keep_wallet(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_11" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_suspend_grant_rebate(self): """Test Creation of a Payment Order an change grant_rebate""" @@ -230,9 +230,9 @@ def test_change_suspend_grant_rebate(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_04" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_suspend_grant_discount(self): """Test Creation of a Payment Order an change grant_discount""" @@ -259,9 +259,9 @@ def test_change_suspend_grant_discount(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_07" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_suspend_cancel_rebate(self): """Test Creation of a Payment Order an change cancel_rebate""" @@ -287,9 +287,9 @@ def test_change_suspend_cancel_rebate(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_05" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_change_suspend_cancel_discount(self): """Test Creation of a Payment Order an change cancel_discount""" @@ -315,6 +315,6 @@ def test_change_suspend_cancel_discount(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_08" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" diff --git a/l10n_br_account_payment_order/tests/test_payment_order_inbound.py b/l10n_br_account_payment_order/tests/test_payment_order_inbound.py index df3a583dfb23..24d7f58a0b2e 100644 --- a/l10n_br_account_payment_order/tests/test_payment_order_inbound.py +++ b/l10n_br_account_payment_order/tests/test_payment_order_inbound.py @@ -74,8 +74,8 @@ def test_create_payment_order(self): assert ( line.own_number ), "own_number field is not filled in created Move Line." - assert line.mov_instruction_code_id, ( - "mov_instruction_code_id field is not filled" " in created Move Line." + assert line.instruction_move_code_id, ( + "instruction_move_code_id field is not filled" " in created Move Line." ) # testar com a parcela 700 if line.debit == 700.0: @@ -91,8 +91,8 @@ def test_create_payment_order(self): for line in payment_order.payment_line_ids: assert line.own_number, "own_number field is not filled in Payment Line." assert ( - line.mov_instruction_code_id - ), "mov_instruction_code_id field are not filled in Payment Line." + line.instruction_move_code_id + ), "instruction_move_code_id field are not filled in Payment Line." # Ordem de Pagto CNAB não pode ser apagada with self.assertRaises(UserError): @@ -113,8 +113,8 @@ def test_create_payment_order(self): for line in payment_order.payment_line_ids: assert line.own_number, "own_number field is not filled in Payment Line." assert ( - line.mov_instruction_code_id - ), "mov_instruction_code_id field are not filled in Payment Line." + line.instruction_move_code_id + ), "instruction_move_code_id field are not filled in Payment Line." # Ordem de Pagto CNAB não pode ser Cancelada with self.assertRaises(UserError): @@ -334,9 +334,9 @@ def test_payment_inbound_payment_in_cash_full(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_02" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_payment_inbound_payment_in_cash_twice(self): """Pay a invoice in cash, with a payment already registred to in the bank. @@ -430,9 +430,9 @@ def test_payment_inbound_payment_in_cash_twice(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_02" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" def test_payment_inbound_cancel_invoice_alread_registred(self): """Cancel the invoice with a payment that is already registred at the bank. @@ -478,6 +478,6 @@ def test_payment_inbound_cancel_invoice_alread_registred(self): "l10n_br_account_payment_order.manual_test_mov_instruction_code_02" ).id in change_payment_order.payment_line_ids.mapped( - "mov_instruction_code_id" + "instruction_move_code_id" ).ids - ), "Payment Order with wrong mov_instruction_code_id" + ), "Payment Order with wrong instruction_move_code_id" From 7e1094c82c1db412c764b49b7db6de2a4f14bbef Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Tue, 3 Sep 2024 16:09:04 -0300 Subject: [PATCH 06/12] [REF] l10n_br_account_payment_brcobranca: Join CNAB Cod --- .../__manifest__.py | 7 +- .../models/account_payment_line.py | 10 +-- .../models/account_payment_order.py | 2 +- .../parser/cnab_file_parser.py | 7 +- .../tests/test_payment_order.py | 68 +++++++++---------- 5 files changed, 44 insertions(+), 50 deletions(-) diff --git a/l10n_br_account_payment_brcobranca/__manifest__.py b/l10n_br_account_payment_brcobranca/__manifest__.py index d72b04bae749..3b7dd0831afd 100644 --- a/l10n_br_account_payment_brcobranca/__manifest__.py +++ b/l10n_br_account_payment_brcobranca/__manifest__.py @@ -3,10 +3,11 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": "L10n Br Account Payment BRCobranca", - "version": "16.0.1.0.2", + "name": "Boletos e CNAB de cobrança", + "summary": "receivable Boletos and CNAB using the brcobranca lib", + "version": "16.0.2.0.0", "license": "AGPL-3", - "author": "Akretion, " "Odoo Community Association (OCA)", + "author": "Akretion, Odoo Community Association (OCA)", "maintainers": ["rvalyi", "mbcosta"], "website": "https://github.com/OCA/l10n-brazil", "depends": [ diff --git a/l10n_br_account_payment_brcobranca/models/account_payment_line.py b/l10n_br_account_payment_brcobranca/models/account_payment_line.py index 4d0c57c26fa3..d8c5b435bb62 100644 --- a/l10n_br_account_payment_brcobranca/models/account_payment_line.py +++ b/l10n_br_account_payment_brcobranca/models/account_payment_line.py @@ -66,10 +66,7 @@ def _prepare_bank_line_unicred(self, payment_mode_id, linhas_pagamentos): linhas_pagamentos["cod_desconto"] = "1" def _prepare_bank_line_banco_brasil(self, payment_mode_id, linhas_pagamentos): - if ( - self.mov_instruction_code_id.code - == payment_mode_id.cnab_sending_code_id.code - ): + if self.instruction_move_code_id.code == payment_mode_id.sending_code_id.code: linhas_pagamentos["cod_primeira_instrucao"] = ( payment_mode_id.boleto_protest_code or "00" ) @@ -134,10 +131,7 @@ def prepare_bank_payment_line(self, bank_name_brcobranca): bank_method(payment_mode_id, linhas_pagamentos) # Cada Banco pode possuir seus Codigos de Instrução - if ( - self.mov_instruction_code_id.code - == payment_mode_id.cnab_sending_code_id.code - ): + if self.instruction_move_code_id.code == payment_mode_id.sending_code_id.code: if payment_mode_id.boleto_fee_perc: linhas_pagamentos["codigo_multa"] = payment_mode_id.boleto_fee_code linhas_pagamentos["percentual_multa"] = payment_mode_id.boleto_fee_perc diff --git a/l10n_br_account_payment_brcobranca/models/account_payment_order.py b/l10n_br_account_payment_brcobranca/models/account_payment_order.py index 7d27ebe3b1ec..be37a2f6152a 100644 --- a/l10n_br_account_payment_brcobranca/models/account_payment_order.py +++ b/l10n_br_account_payment_brcobranca/models/account_payment_order.py @@ -40,7 +40,7 @@ def _prepare_remessa_banco_brasil(self, remessa_values, cnab_type): def _prepare_remessa_santander(self, remessa_values, cnab_type): remessa_values.update( { - "codigo_carteira": self.payment_mode_id.boleto_wallet_code_id.code, + "codigo_carteira": self.payment_mode_id.wallet_code_id.code, "codigo_transmissao": self.payment_mode_id.cnab_company_bank_code, "conta_corrente": misc.punctuation_rm( self.journal_id.bank_account_id.acc_number diff --git a/l10n_br_account_payment_brcobranca/parser/cnab_file_parser.py b/l10n_br_account_payment_brcobranca/parser/cnab_file_parser.py index a741df308aee..5f4c6421f679 100644 --- a/l10n_br_account_payment_brcobranca/parser/cnab_file_parser.py +++ b/l10n_br_account_payment_brcobranca/parser/cnab_file_parser.py @@ -320,9 +320,7 @@ def process_return_file(self, data): # Codigos de Movimento de Retorno - Liquidação cnab_liq_move_code = [] - for ( - move_code - ) in account_move_line.payment_mode_id.cnab_liq_return_move_code_ids: + for move_code in account_move_line.payment_mode_id.liq_return_move_code_ids: cnab_liq_move_code.append(move_code.code) favored_bank_account = ( @@ -388,11 +386,12 @@ def process_return_file(self, data): return result_row_list def _get_description_occurrence(self, payment_method_cnab, cod_ocorrencia): - cnab_return_move_code = self.env["l10n_br_cnab.return.move.code"].search( + cnab_return_move_code = self.env["l10n_br_cnab.code"].search( [ ("bank_ids", "in", self.bank.id), ("payment_method_ids", "in", payment_method_cnab.id), ("code", "=", cod_ocorrencia), + ("code_type", "=", "return_move_code"), ] ) if cnab_return_move_code: diff --git a/l10n_br_account_payment_brcobranca/tests/test_payment_order.py b/l10n_br_account_payment_brcobranca/tests/test_payment_order.py index 78d9423d55f3..eea5745bfe11 100644 --- a/l10n_br_account_payment_brcobranca/tests/test_payment_order.py +++ b/l10n_br_account_payment_brcobranca/tests/test_payment_order.py @@ -280,8 +280,8 @@ def test_payment_order_invoice_cancel_process(self): for line in payment_order.payment_line_ids: # Caso de Baixa do Titulo self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_write_off_code_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.write_off_code_id.name, ) def test_payment_outside_cnab_writeoff_and_change_tittle_value(self): @@ -324,14 +324,14 @@ def test_payment_outside_cnab_writeoff_and_change_tittle_value(self): if line.amount_currency == 300: # Caso de Baixa do Titulo self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_write_off_code_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.write_off_code_id.name, ) else: # Caso de alteração do valor do titulo por pagamento parcial self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_change_title_value_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.change_title_value_code_id.name, ) self.assertEqual( line.move_line_id.amount_residual, line.amount_currency @@ -390,8 +390,8 @@ def test_cnab_change_due_date(self): ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_change_maturity_date_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.change_maturity_date_code_id.name, ) # Open payment order @@ -436,8 +436,8 @@ def test_cnab_protest(self): ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_protest_title_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.protest_title_code_id.name, ) # Open payment order payment_order.draft2open() @@ -481,13 +481,13 @@ def test_cnab_suspend_protest_and_keep_wallet(self): ] ) - cnab_code_suspend_protest_keep_wallet = ( - self.aml_to_change.payment_mode_id.cnab_code_suspend_protest_keep_wallet_id + suspend_protest_keep_wallet = ( + self.aml_to_change.payment_mode_id.suspend_protest_keep_wallet_code_id ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - cnab_code_suspend_protest_keep_wallet.name, + line.instruction_move_code_id.name, + suspend_protest_keep_wallet.name, ) # Open payment order payment_order.draft2open() @@ -537,8 +537,8 @@ def test_cnab_grant_rebate(self): ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_grant_rebate_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.grant_rebate_code_id.name, ) self.assertEqual(line.rebate_value, 10.0) @@ -546,8 +546,8 @@ def test_cnab_grant_rebate(self): payment_order.draft2open() for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_grant_rebate_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.grant_rebate_code_id.name, ) self.assertEqual(line.rebate_value, 10.0) @@ -591,8 +591,8 @@ def test_cnab_cancel_rebate(self): ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_cancel_rebate_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.cancel_rebate_code_id.name, ) # Open payment order @@ -643,8 +643,8 @@ def test_cnab_grant_discount(self): ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_grant_discount_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.grant_discount_code_id.name, ) self.assertEqual(line.discount_value, 10.0) @@ -652,8 +652,8 @@ def test_cnab_grant_discount(self): payment_order.draft2open() for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_grant_discount_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.grant_discount_code_id.name, ) self.assertEqual(line.discount_value, 10.0) @@ -697,8 +697,8 @@ def test_cnab_cancel_discount(self): ) for line in payment_order.payment_line_ids: self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_cancel_discount_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.cancel_discount_code_id.name, ) # Open payment order @@ -750,8 +750,8 @@ def test_cnab_change_method_not_payment(self): for line in payment_order.payment_line_ids: # Baixa do Titulo self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_write_off_code_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.write_off_code_id.name, ) def test_payment(self): @@ -819,8 +819,8 @@ def test_payment(self): for line in payment_order.payment_line_ids: # Caso de alteração do valor do titulo por pagamento parcial self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_change_title_value_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.change_title_value_code_id.name, ) self.assertEqual(line.move_line_id.amount_residual, line.amount_currency) @@ -877,8 +877,8 @@ def test_payment(self): for line in payment_order.payment_line_ids: # Caso de alteração do valor do titulo por pagamento parcial self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_code_change_title_value_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.change_title_value_code_id.name, ) self.assertEqual(line.move_line_id.amount_residual, line.amount_currency) @@ -941,8 +941,8 @@ def test_payment(self): for line in payment_order.payment_line_ids: # Baixa do Titulo self.assertEqual( - line.mov_instruction_code_id.name, - line.order_id.payment_mode_id.cnab_write_off_code_id.name, + line.instruction_move_code_id.name, + line.order_id.payment_mode_id.write_off_code_code_id.name, ) # TODO: Pedido de Baixa está indo com o valor inicial deveria ser # o ultimo valor enviado ? Já que é um Pedido de Baixa o Banco From 961f133909f550f8baca96b3b026f340b745fc9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B4nio=20Neto?= Date: Fri, 8 Nov 2024 14:34:13 -0300 Subject: [PATCH 07/12] [REF] l10n_br_account_payment_order: Mig Script --- .../migrations/16.0.2.0.0/post-migration.py | 340 ++++++++++++++++++ 1 file changed, 340 insertions(+) create mode 100644 l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py diff --git a/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py b/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py new file mode 100644 index 000000000000..a81246e2bb72 --- /dev/null +++ b/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py @@ -0,0 +1,340 @@ +# Copyright (C) 2024-Today - Akretion (). +# @author Magno Costa +# Copyright (C) 2024-Today - Engenere (). +# @author Antônio S. Pereira Neto +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + + +def unifying_cnab_codes(env): + # Codigo de Instrução do Movimento + env.cr.execute( + """ + SELECT lcmic.id, lcmic.name, lcmic.code, lcmic.bank_id, lcmic.payment_method_id + FROM l10n_br_cnab_mov_instruction_code AS lcmic + WHERE NOT EXISTS ( + SELECT 1 FROM l10n_br_cnab_code AS lcc + WHERE lcc.code = lcmic.code + AND lcc.code_type = 'instruction_move_code' + AND lcc.bank_id = lcmic.bank_id + AND lcc.payment_method_id = lcmic.payment_method_id + ); + """ + ) + for row in env.cr.fetchall(): + # Inserir na tabela l10n_br_cnab_code + env.cr.execute( + """ + INSERT INTO l10n_br_cnab_code ( + name, code, bank_id, payment_method_id, code_type + ) + VALUES (%s, %s, %s, %s, %s) + RETURNING id + """, + (row[1], row[2], row[3], row[4], "instruction_move_code"), + ) + new_id = env.cr.fetchone()[0] + + # Relação com bancos + env.cr.execute( + f""" + SELECT l10n_br_cnab_mov_instruction_code_id + FROM l10n_br_cnab_mov_instruction_code_bank_rel + WHERE bank_id = {row[0]} + """ + ) + bank_ids = [bank_id[0] for bank_id in env.cr.fetchall()] + if bank_ids: + bank_values = [(bank_id, new_id) for bank_id in bank_ids] + env.cr.executemany( + """ + INSERT INTO l10n_br_cnab_code_bank_rel (l10n_br_cnab_code_id, bank_id) + VALUES (%s, %s) + """, + bank_values, + ) + + # Relação com métodos de pagamento + env.cr.execute( + f""" + SELECT l10n_br_cnab_mov_instruction_code_id + FROM l10n_br_cnab_mov_instruction_code_payment_method_rel + WHERE payment_method_id = {row[0]} + """ + ) + payment_method_ids = [ + payment_method_id[0] for payment_method_id in env.cr.fetchall() + ] + if payment_method_ids: + pm_values = [(pm_id, new_id) for pm_id in payment_method_ids] + env.cr.executemany( + """ + INSERT INTO l10n_br_cnab_code_payment_method_rel ( + l10n_br_cnab_code_id, payment_method_id) + VALUES (%s, %s) + """, + pm_values, + ) + + # Codigo de Retorno do Movimento + env.cr.execute( + """ + SELECT lcmic.id, lcmic.name, lcmic.code + FROM l10n_br_cnab_return_move_code AS lcmic + WHERE NOT EXISTS ( + SELECT 1 FROM l10n_br_cnab_code AS lcc + WHERE lcc.code = lcmic.code + AND lcc.code_type = 'return_move_code' + AND lcc.bank_id = lcmic.bank_id + AND lcc.payment_method_id = lcmic.payment_method_id + ); + """ + ) + for row in env.cr.fetchall(): + # Relação bank_ids x return_move_code + bank_id_colunm = "l10n_br_cnab_return_move_code_id" + return_move_code_id_colunm = "bank_id" + env.cr.execute( + f""" + SELECT {bank_id_colunm} + FROM l10n_br_cnab_return_move_code_bank_rel + WHERE {return_move_code_id_colunm} = {row[0]} + """ + ) + bank_ids = [bank_id[0] for bank_id in env.cr.fetchall()] + + # Relação payment_method_ids x return_move_code + payment_method_id_colunm = ( + "l10n_br_cnab_mov_instruction_code_id" + ) # nome tava errado + return_move_code_id_colunm = "payment_method_id" + env.cr.execute( + f""" + SELECT {payment_method_id_colunm} + FROM l10n_br_cnab_return_move_code_payment_method_rel + WHERE {return_move_code_id_colunm} = {row[0]} + """ + ) + payment_method_ids = [ + payment_method_id[0] for payment_method_id in env.cr.fetchall() + ] + env["l10n_br_cnab.code"].create( + { + "name": row[1], + "code": row[2], + "code_type": "return_move_code", + "bank_ids": [(6, 0, bank_ids)], + "payment_method_ids": [(6, 0, payment_method_ids)], + } + ) + + # Codigo da Carteira + env.cr.execute( + """ + SELECT lcmic.id, lcmic.name, lcmic.code, lcmic.bank_id, lcmic.payment_method_id + FROM l10n_br_cnab_boleto_wallet_code AS lcmic + WHERE NOT EXISTS ( + SELECT 1 FROM l10n_br_cnab_code AS lcc + WHERE lcc.code = lcmic.code + AND lcc.code_type = 'wallet_code' + AND lcc.bank_id = lcmic.bank_id + AND lcc.payment_method_id = lcmic.payment_method_id + ); + """ + ) + for row in env.cr.fetchall(): + # Relação bank_ids x boleto_wallet_code + bank_id_colunm = "l10n_br_cnab_boleto_wallet_code_id" + boleto_wallet_id_colunm = "bank_id" + env.cr.execute( + f""" + SELECT {bank_id_colunm} + FROM l10n_br_cnab_boleto_wallet_code_bank_rel + WHERE {boleto_wallet_id_colunm} = {row[0]} + """ + ) + bank_ids = [bank_id[0] for bank_id in env.cr.fetchall()] + + # Relação payment_method_ids x boleto_wallet_code + payment_method_id_colunm = "l10n_br_cnab_boleto_wallet_code_id" + boleto_wallet_id_colunm = "payment_method_id" + env.cr.execute( + f""" + SELECT {payment_method_id_colunm} + FROM l10n_br_cnab_boleto_wallet_code_payment_method_rel + WHERE {boleto_wallet_id_colunm} = {row[0]} + """ + ) + payment_method_ids = [ + payment_method_id[0] for payment_method_id in env.cr.fetchall() + ] + env["l10n_br_cnab.code"].create( + { + "name": row[1], + "code": row[2], + "code_type": "wallet_code", + "bank_ids": [(6, 0, bank_ids)], + "payment_method_ids": [(6, 0, payment_method_ids)], + } + ) + + +def update_payment_mode(env): + fields = [ + ( + "cnab_sending_code_id", + "sending_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_write_off_code_id", + "write_off_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_change_title_value_id", + "change_title_value_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_change_maturity_date_id", + "change_maturity_date_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_protest_title_id", + "protest_title_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_suspend_protest_keep_wallet_id", + "suspend_protest_keep_wallet_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_suspend_protest_write_off_id", + "suspend_protest_write_off_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_grant_rebate_id", + "grant_rebate_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_cancel_rebate_id", + "cancel_rebate_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_grant_discount_id", + "grant_discount_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "cnab_code_cancel_discount_id", + "cancel_discount_code_id", + "instruction_move_code", + "l10n_br_cnab_mov_instruction_code", + ), + ( + "boleto_wallet_code_id", + "wallet_code_id", + "wallet_code", + "l10n_br_cnab_boleto_wallet_code", + ), + ] + for old_field, new_field, code_type, old_table in fields: + sql = f""" + UPDATE account_payment_mode AS apm + SET {new_field} = lcc.id + FROM {old_table} AS ot + JOIN l10n_br_cnab_code AS lcc + ON lcc.code = ot.code + AND lcc.code_type = '{code_type}' + AND lcc.bank_id = ot.bank_id + AND lcc.payment_method_id = ot.payment_method_id + WHERE apm.{old_field} = ot.id; + """ + openupgrade.logged_query(env.cr, sql) + + +def uptade_payment_mode_return_code(env): + openupgrade.logged_query( + env.cr, + """ + INSERT INTO l10n_br_cnab_liq_return_move_code_rel ( + payment_mode_id, + liq_return_move_code_id + ) + SELECT + cc.id, + old_rel.cnab_liq_return_move_code_id + FROM + l10n_br_cnab_return_liquidity_move_code_rel AS old_rel + JOIN + l10n_br_cnab_return_move_code AS crmc ON crmc.id = old_rel.payment_mode_id + JOIN + l10n_br_cnab_code AS cc + ON cc.code = crmc.code + AND cc.bank_id = crmc.bank_id + AND cc.payment_method_id = crmc.payment_method_id + AND cc.code_type = 'return_move_code' + """, + ) + + +def update_move_lines(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE account_move_line AS aml + SET instruction_move_code_id = lcc.id + FROM l10n_br_cnab_mov_instruction_code AS lcmic + JOIN l10n_br_cnab_code AS lcc + ON lcc.code = lcmic.code + AND lcc.code_type = 'instruction_move_code' + AND lcc.bank_id = lcmic.bank_id + AND lcc.payment_method_id = lcmic.payment_method_id + WHERE aml.mov_instruction_code_id = lcmic.id + """, + ) + + +def update_payment_lines(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE account_payment_line AS apl + SET instruction_move_code_id = lcc.id + FROM l10n_br_cnab_mov_instruction_code AS lcmic + JOIN l10n_br_cnab_code AS lcc + ON lcc.code = lcmic.code + AND lcc.code_type = 'instruction_move_code' + AND lcc.bank_id = lcmic.bank_id + AND lcc.payment_method_id = lcmic.payment_method_id + WHERE apl.mov_instruction_code_id = lcmic.id; + """, + ) + + +@openupgrade.migrate() +def migrate(env, version): + if not version: + return + unifying_cnab_codes(env) + update_payment_mode(env) + uptade_payment_mode_return_code(env) + update_move_lines(env) + update_payment_lines(env) From c71a198cea395518d5d00210801558f584715f5e Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Fri, 8 Nov 2024 15:12:04 -0300 Subject: [PATCH 08/12] [FIX+MIG] l10n_br_account_payment_order:Mig Script --- .../migrations/16.0.2.0.0/post-migration.py | 120 +++++++++++++++--- 1 file changed, 100 insertions(+), 20 deletions(-) diff --git a/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py b/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py index a81246e2bb72..5907358b1f65 100644 --- a/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py +++ b/l10n_br_account_payment_order/migrations/16.0.2.0.0/post-migration.py @@ -270,29 +270,98 @@ def update_payment_mode(env): openupgrade.logged_query(env.cr, sql) -def uptade_payment_mode_return_code(env): - openupgrade.logged_query( - env.cr, +def get_cnab_return_code(env, payment_mode_id): + env.cr.execute( + """ + SELECT * + FROM l10n_br_cnab_return_liquidity_move_code_rel """ - INSERT INTO l10n_br_cnab_liq_return_move_code_rel ( - payment_mode_id, - liq_return_move_code_id + ) + liq_codes = env["l10n_br_cnab.code"] + for row in env.cr.fetchall(): + if row[0] != payment_mode_id: + continue + env.cr.execute( + f""" + SELECT name, code, bank_id, payment_method_id + FROM l10n_br_cnab_return_move_code + WHERE id = {row[1]} + """ ) - SELECT - cc.id, - old_rel.cnab_liq_return_move_code_id - FROM - l10n_br_cnab_return_liquidity_move_code_rel AS old_rel - JOIN - l10n_br_cnab_return_move_code AS crmc ON crmc.id = old_rel.payment_mode_id - JOIN - l10n_br_cnab_code AS cc - ON cc.code = crmc.code - AND cc.bank_id = crmc.bank_id - AND cc.payment_method_id = crmc.payment_method_id - AND cc.code_type = 'return_move_code' - """, + for old_code in env.cr.fetchall(): + new_code = env["l10n_br_cnab.code"].search( + [ + ("name", "=", old_code[0]), + ("code", "=", old_code[1]), + ("bank_id", "=", old_code[2]), + ("payment_method_id", "=", old_code[3]), + ] + ) + + if new_code: + liq_codes |= new_code + + return liq_codes + + +def get_wallet_code(env, payment_mode_id): + env.cr.execute( + f""" + SELECT boleto_wallet_code_id + FROM account_payment_mode + WHERE id = {payment_mode_id} + """ + ) + wallet_code = env["l10n_br_cnab.code"] + for row in env.cr.fetchall(): + if row[0] is None: + continue + + env.cr.execute( + f""" + SELECT name, code, bank_id, payment_method_id + FROM l10n_br_cnab_boleto_wallet_code + WHERE id = {row[0]} + """ + ) + for old_code in env.cr.fetchall(): + new_code = env["l10n_br_cnab.code"].search( + [ + ("name", "=", old_code[0]), + ("code", "=", old_code[1]), + ("bank_id", "=", old_code[2]), + ("payment_method_id", "=", old_code[3]), + ("code_type", "=", "wallet_code"), + ] + ) + if new_code: + wallet_code = new_code + + return wallet_code + + +def uptade_payment_mode_return_code(env): + env.cr.execute( + """ + SELECT id FROM account_payment_mode WHERE payment_method_id IN + (SELECT id FROM account_payment_method WHERE code IN ('240', '400', '500') + AND payment_type = 'inbound'); + """ ) + for row in env.cr.fetchall(): + payment_mode = env["account.payment.mode"].browse(row[0]) + liq_codes = get_cnab_return_code(env, row[0]) + if liq_codes: + payment_mode.liq_return_move_code_ids = liq_codes + + wallet_code = get_wallet_code(env, row[0]) + if wallet_code: + sql = f""" + UPDATE account_payment_mode + SET wallet_code_id = {wallet_code.id} + WHERE id = {payment_mode.id} + """ + openupgrade.logged_query(env.cr, sql) def update_move_lines(env): @@ -333,6 +402,17 @@ def update_payment_lines(env): def migrate(env, version): if not version: return + + # Verifica se já houve migração, banco de dados migrados na v14 + payment_mode_migrated = env["account.payment.mode"].search( + [ + ("sending_code_id", "!=", False), + ], + limit=1, + ) + if payment_mode_migrated: + return + unifying_cnab_codes(env) update_payment_mode(env) uptade_payment_mode_return_code(env) From 3351ead1da4f101d83f49b5c9f1578758ff40155 Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Fri, 8 Nov 2024 15:31:15 -0300 Subject: [PATCH 09/12] [REM] l10n_br_account_payment_order:Fields / Views --- l10n_br_account_payment_order/__manifest__.py | 3 - .../models/__init__.py | 26 ++++ .../models/account_move_line.py | 8 -- .../models/account_payment_line.py | 7 -- .../models/account_payment_mode.py | 10 -- .../models/l10n_br_cnab_boleto_fields.py | 96 -------------- .../views/account_move_line.xml | 12 -- .../views/account_payment_line.xml | 4 - .../views/account_payment_mode.xml | 119 ------------------ .../l10n_br_cnab_boleto_wallet_code_view.xml | 87 ------------- ...l10n_br_cnab_mov_instruction_code_view.xml | 87 ------------- .../l10n_br_cnab_return_move_code_view.xml | 86 ------------- 12 files changed, 26 insertions(+), 519 deletions(-) delete mode 100644 l10n_br_account_payment_order/views/l10n_br_cnab_boleto_wallet_code_view.xml delete mode 100644 l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml delete mode 100644 l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml diff --git a/l10n_br_account_payment_order/__manifest__.py b/l10n_br_account_payment_order/__manifest__.py index 86ae425d9f95..82604d353ce8 100644 --- a/l10n_br_account_payment_order/__manifest__.py +++ b/l10n_br_account_payment_order/__manifest__.py @@ -47,11 +47,8 @@ "views/account_payment_mode.xml", "views/l10n_br_cnab_return_log_view.xml", "views/account_move_line.xml", - "views/l10n_br_cnab_return_move_code_view.xml", "views/account_payment_views.xml", - "views/l10n_br_cnab_mov_instruction_code_view.xml", "views/account_move_view.xml", - "views/l10n_br_cnab_boleto_wallet_code_view.xml", # Códigos CNAB "views/l10n_br_cnab_code_view.xml", ], diff --git a/l10n_br_account_payment_order/models/__init__.py b/l10n_br_account_payment_order/models/__init__.py index cad515931773..83d4ffb612e8 100644 --- a/l10n_br_account_payment_order/models/__init__.py +++ b/l10n_br_account_payment_order/models/__init__.py @@ -13,6 +13,32 @@ from . import l10n_br_cnab_return_log from . import ir_attachment from . import l10n_br_cnab_data_abstract + +# TODO: Ao remover os objetos que ficaram obsoletos com a unificação dos Códigos +# no l10n_br_cnab.code acontece o erro abaixo, isso deixa de acontecer em +# versões posteriores a 16.0.2.0.0, porém para evitar problemas como o que ocorreu +# na v14 será melhor aguardar mesmo que por 6 meses ou mesmo apenas na migração +# para a v17 para remover esses objetos e assim evitar qualquer possibilidade +# de problema com migrações +# ERROR db odoo.modules.registry: Failed to load registry +# Traceback (most recent call last): +# File "/usr/local/lib/python3.10/site-packages/odoo/tools/convert.py", +# line 698, in _tag_root +# f(rec) +# File "/usr/local/lib/python3.10/site-packages/odoo/tools/convert.py", line 515, +# in _tag_record +# record = env['ir.model.data']._load_xmlid(xid) +# File "/usr/local/lib/python3.10/site-packages/odoo/addons/base/models/ir_model.py", +# line 2162, in _load_xmlid +# record = self.env.ref(xml_id, raise_if_not_found=False) +# File "/usr/local/lib/python3.10/site-packages/odoo/api.py", line 600, in ref +# record = self[res_model].browse(res_id) +# File "/usr/local/lib/python3.10/site-packages/odoo/api.py", line 550, in __getitem__ +# return self.registry[model_name](self, (), ()) +# File "/usr/local/lib/python3.10/site-packages/odoo/modules/registry.py", +# line 190, in __getitem__ +# return self.models[model_name] +# KeyError: 'l10n_br_cnab.mov.instruction.code' from . import l10n_br_cnab_return_move_code from . import l10n_br_cnab_mov_intruction_code from . import l10n_br_cnab_boleto_wallet_code diff --git a/l10n_br_account_payment_order/models/account_move_line.py b/l10n_br_account_payment_order/models/account_move_line.py index df442be835d7..53819139dc64 100644 --- a/l10n_br_account_payment_order/models/account_move_line.py +++ b/l10n_br_account_payment_order/models/account_move_line.py @@ -98,14 +98,6 @@ class AccountMoveLine(models.Model): copy=False, ) - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - mov_instruction_code_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Código da Instrução para Movimento", - help="Campo G061 do CNAB", - copy=False, - ) instruction_move_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Código da Instrução para Movimento", diff --git a/l10n_br_account_payment_order/models/account_payment_line.py b/l10n_br_account_payment_order/models/account_payment_line.py index 9b3517e546a1..33d58c52d228 100644 --- a/l10n_br_account_payment_order/models/account_payment_line.py +++ b/l10n_br_account_payment_order/models/account_payment_line.py @@ -136,13 +136,6 @@ class AccountPaymentLine(models.Model): default="0", ) - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - mov_instruction_code_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Código da Instrução para Movimento", - help="Campo G061 do CNAB", - ) instruction_move_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Código da Instrução para Movimento", diff --git a/l10n_br_account_payment_order/models/account_payment_mode.py b/l10n_br_account_payment_order/models/account_payment_mode.py index 784a64ae8ba4..06d89aa35284 100644 --- a/l10n_br_account_payment_order/models/account_payment_mode.py +++ b/l10n_br_account_payment_order/models/account_payment_mode.py @@ -91,16 +91,6 @@ def _selection_cnab_processor(self): # l10n_br_cnab.boleto.fields, teria alguma forma de fazer ? # Podem existir diferentes codigos, mesmo no 240 - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_liq_return_move_code_ids = fields.Many2many( - comodel_name="l10n_br_cnab.return.move.code", - relation="l10n_br_cnab_return_liquidity_move_code_rel", - column1="cnab_liq_return_move_code_id", - column2="payment_mode_id", - string="CNAB Liquidity Return Move Code", - tracking=True, - ) liq_return_move_code_ids = fields.Many2many( comodel_name="l10n_br_cnab.code", relation="l10n_br_cnab_liq_return_move_code_rel", diff --git a/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py b/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py index 58d1a5a1c9d2..2dc9167a3db1 100644 --- a/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py +++ b/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py @@ -229,14 +229,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): # Codigos de Instrução do Movimento # Codigo de Remessa/Inclusão de Registro Detalhe Liberado - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_sending_code_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Sending Movement Instruction Code", - help="Sending Movement Instruction Code", - tracking=True, - ) sending_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Sending Movement Instruction Code", @@ -245,14 +237,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Título/Pagamento Direto ao Fornecedor -Baixar - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_write_off_code_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Write Off Movement Instruction Code", - help="Write Off Movement Instruction Code", - tracking=True, - ) write_off_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Write Off Movement Instruction Code", @@ -261,14 +245,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Alteração do Valor do Titulo - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_change_title_value_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Change Title Value Movement Instruction Code", - help="CNAB Movement Instruction Code for Change Title Value.", - tracking=True, - ) change_title_value_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Change Title Value Movement Instruction Code", @@ -277,14 +253,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Alteração da Data de Vencimento - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_change_maturity_date_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Change Maturity Date Movement Instruction Code", - help="CNAB Movement Instruction Code for Change Maturity Date.", - tracking=True, - ) change_maturity_date_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Change Maturity Date Movement Instruction Code", @@ -293,14 +261,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Protestar Título - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_protest_title_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Protest Tittle Instruction Code", - help="CNAB Movement Instruction Code for Protest Tittle.", - tracking=True, - ) protest_title_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Protest Tittle Instruction Code", @@ -309,15 +269,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Suspender Protesto e Manter em Carteira - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_suspend_protest_keep_wallet_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Suspend Protest an Keep in Wallet Instruction Code", - help="CNAB Movement Instruction Code for" - " Suspend Protest and Keep in Wallet.", - tracking=True, - ) suspend_protest_keep_wallet_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Suspend Protest an Keep in Wallet Instruction Code", @@ -327,14 +278,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Suspender Protesto e Baixar Título - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_suspend_protest_write_off_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Suspend Protest an Writte Off Instruction Code", - help="CNAB Movement Instruction Code for" " Suspend Protest and Writte Off.", - tracking=True, - ) suspend_protest_write_off_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Suspend Protest an Writte Off Instruction Code", @@ -343,14 +286,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Conceder Abatimento - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_grant_rebate_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Grant Rebate Instruction Code", - help="CNAB Movement Instruction Code for" " Grant Rebate.", - tracking=True, - ) grant_rebate_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Grant Rebate Instruction Code", @@ -359,14 +294,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Cancelar Abatimento - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_cancel_rebate_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Cancel Rebate Instruction Code", - help="CNAB Movement Instruction Code for" " Cancel Rebate.", - tracking=True, - ) cancel_rebate_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Cancel Rebate Instruction Code", @@ -375,14 +302,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Conceder Desconto - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_grant_discount_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Grant Discount Instruction Code", - help="CNAB Movement Instruction Code for" " Grant Discount.", - tracking=True, - ) grant_discount_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Grant Discount Instruction Code", @@ -391,14 +310,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): ) # Codigo para Cancelar Desconto - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - cnab_code_cancel_discount_id = fields.Many2one( - comodel_name="l10n_br_cnab.mov.instruction.code", - string="Cancel Discount Instruction Code", - help="CNAB Movement Instruction Code for Cancel Discount.", - tracking=True, - ) cancel_discount_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Cancel Discount Instruction Code", @@ -429,13 +340,6 @@ class L10nBrCNABBoletoFields(models.AbstractModel): # Código da Carteira ou Tipo de Cobrança usado por # Santanter 400 e 240 # Bradesco 240 - # TODO: Remover o campo na próxima versão, - # usando apenas para migração para o l10n_br_cnab.code - boleto_wallet_code_id = fields.Many2one( - comodel_name="l10n_br_cnab.boleto.wallet.code", - string="Boleto Wallet Code", - tracking=True, - ) wallet_code_id = fields.Many2one( comodel_name="l10n_br_cnab.code", string="Boleto Wallet Code", diff --git a/l10n_br_account_payment_order/views/account_move_line.xml b/l10n_br_account_payment_order/views/account_move_line.xml index 997421728fd3..c352712eeb9a 100644 --- a/l10n_br_account_payment_order/views/account_move_line.xml +++ b/l10n_br_account_payment_order/views/account_move_line.xml @@ -17,10 +17,6 @@ show - @@ -58,10 +54,6 @@ - @@ -80,10 +72,6 @@ - diff --git a/l10n_br_account_payment_order/views/account_payment_line.xml b/l10n_br_account_payment_order/views/account_payment_line.xml index 4ef6fefdb3b9..a254433ac4f5 100644 --- a/l10n_br_account_payment_order/views/account_payment_line.xml +++ b/l10n_br_account_payment_order/views/account_payment_line.xml @@ -91,10 +91,6 @@ name="movement_type" attrs="{'invisible': [('payment_method_code', '!=', '240')]}" /> - - - - - - - - - - - - - - - - - - - l10n_br_cnab.boleto.wallet.code.tree - l10n_br_cnab.boleto.wallet.code - - - - - - - - - - - - l10n_br_cnab.boleto.wallet.code.search - l10n_br_cnab.boleto.wallet.code - - - - - - - - - - - - - - - - - - - l10n_br_cnab.boleto.wallet.code.form.view - l10n_br_cnab.boleto.wallet.code - -
- - - - - - - - - -
- -
-
-
-
- - - CNAB Boleto Wallet Code - l10n_br_cnab.boleto.wallet.code - tree,form - {'group_by':['bank_id', 'payment_method_id']} - - - - -
diff --git a/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml b/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml deleted file mode 100644 index 8c511fbe8615..000000000000 --- a/l10n_br_account_payment_order/views/l10n_br_cnab_mov_instruction_code_view.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - l10n_br_cnab.mov.instruction.code.tree - l10n_br_cnab.mov.instruction.code - - - - - - - - - - - - l10n_br_cnab.mov.instruction.code.search - l10n_br_cnab.mov.instruction.code - - - - - - - - - - - - - - - - - - - l10n_br_cnab.mov.instruction.code.form.view - l10n_br_cnab.mov.instruction.code - -
- - - - - - - - - -
- -
-
-
-
- - - CNAB Movement Instruction Code - l10n_br_cnab.mov.instruction.code - tree,form - {'group_by':['bank_id', 'payment_method_id']} - - - - -
diff --git a/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml b/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml deleted file mode 100644 index 485fa73ad7dd..000000000000 --- a/l10n_br_account_payment_order/views/l10n_br_cnab_return_move_code_view.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - l10n_br_cnab.return.move.code.tree - l10n_br_cnab.return.move.code - - - - - - - - - - - - l10n_br_cnab.return.move.code.search - l10n_br_cnab.return.move.code - - - - - - - - - - - - - - - - - - - l10n_br_cnab.return.move.code.form.view - l10n_br_cnab.return.move.code - -
- - - - - - - -
- -
-
-
-
-
- - - CNAB Return Move Code - l10n_br_cnab.return.move.code - tree,form - {'group_by':['bank_id', 'payment_method_id']} - - - - -
From c3103405ba688a98ac2f9f0c40698f228ae86d9c Mon Sep 17 00:00:00 2001 From: Magno Costa Date: Fri, 8 Nov 2024 16:07:03 -0300 Subject: [PATCH 10/12] [UPD]l10n_br_account_payment_brcobranca:Pre-Commit --- l10n_br_account_payment_brcobranca/README.rst | 341 +++++++++--------- .../static/description/index.html | 67 ++-- 2 files changed, 203 insertions(+), 205 deletions(-) diff --git a/l10n_br_account_payment_brcobranca/README.rst b/l10n_br_account_payment_brcobranca/README.rst index d8545fe85a1e..c73179965e96 100644 --- a/l10n_br_account_payment_brcobranca/README.rst +++ b/l10n_br_account_payment_brcobranca/README.rst @@ -1,6 +1,6 @@ -================================== -L10n Br Account Payment BRCobranca -================================== +========================== +Boletos e CNAB de cobrança +========================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -44,181 +44,180 @@ Installation **Português** O modulo depende do: -- l10n_br_account_payment_order -- account_move_base_import +- l10n_br_account_payment_order +- account_move_base_import **English** This module depends on: -- l10n_br_account_payment_order -- account_move_base_import +- l10n_br_account_payment_order +- account_move_base_import Configuration ============= **Português** Para configurar esse modulo é preciso: -- Rodar a biblioteca BRCobranca como um micro-serviço - https://github.com/akretion/boleto_cnab_api . -- Informar a variável de ambiente **BRCOBRANCA_API_URL** no arquivo de - configuração do Odoo ou se estiver usando o docky na seção enviroment - https://github.com/akretion/docky-odoo-brasil/blob/12.0/docker-compose.yml#L3 - , exemplo: **BRCOBRANCA_API_URL=http://boleto_cnab_api:9292** -- Verifique se os Códigos de Movimento do CNAB a ser usado existem em - Faturamento > Configurações > Administração > Códigos de Instrução do - Movimento CNAB, se for necessário criar considere fazer um PR para - adicionar como dados aqui - https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_mov_instruction_code_data.xml - . -- Verifique se os Códigos de Retorno do Movimento do CNAB a ser usado - existem em Faturamento > Configurações > Administração > Códigos de - Retorno de Movimento CNAB, se for necessário criar considere fazer um - PR para adicionar como dados aqui - https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_return_move_code_data.xml - . -- Criar a Conta Bancária referente ao CNAB em Faturamento > - Configurações > Contabilidade > Contas Bancárias . -- Automaticamente será criado um Diário Contábil referente a conta - bancária em Faturamento > Configurações > Contabilidade > Diários na - aba **Informações Referentes a Importação** informe as configurações - de Retorno do CNAB nos campos "Tipo de Importação", "Conta de - Recebimento/Pagamento", "Criação de Contra-Partida" e se deve ser - feita a reconciliação automática ao importar o arquivo em - "Reconciliar Automaticamente o Retorno de Pagamento". -- Em Faturamento > Configurações > Administração > Modos de Pagamento - criar um Modo de Pagamento com as informações do CNAB, no campo - "Diário de Banco Fixo" informar o Diário Contábil da conta bancária e - se for o caso, e é recomendado, marcar a opção "Adicionar - automaticamente ao validar a fatura" para não ser preciso fazer - manualmente. -- Caso o CNAB e Banco escolhidos possua um campo especifico que seja - preciso implementar considere fazer um PR no modulo - l10n_br_account_payment_order aqui - https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py#L307 - . -- Configure as permissões de acesso dos usuários, as opções são CNAB - "Usuário" e "Gerente". +- Rodar a biblioteca BRCobranca como um micro-serviço + https://github.com/akretion/boleto_cnab_api . +- Informar a variável de ambiente **BRCOBRANCA_API_URL** no arquivo de + configuração do Odoo ou se estiver usando o docky na seção enviroment + https://github.com/akretion/docky-odoo-brasil/blob/12.0/docker-compose.yml#L3 + , exemplo: **BRCOBRANCA_API_URL=http://boleto_cnab_api:9292** +- Verifique se os Códigos de Movimento do CNAB a ser usado existem em + Faturamento > Configurações > Administração > Códigos de Instrução do + Movimento CNAB, se for necessário criar considere fazer um PR para + adicionar como dados aqui + https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_mov_instruction_code_data.xml + . +- Verifique se os Códigos de Retorno do Movimento do CNAB a ser usado + existem em Faturamento > Configurações > Administração > Códigos de + Retorno de Movimento CNAB, se for necessário criar considere fazer um + PR para adicionar como dados aqui + https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_return_move_code_data.xml + . +- Criar a Conta Bancária referente ao CNAB em Faturamento > + Configurações > Contabilidade > Contas Bancárias . +- Automaticamente será criado um Diário Contábil referente a conta + bancária em Faturamento > Configurações > Contabilidade > Diários na + aba **Informações Referentes a Importação** informe as configurações + de Retorno do CNAB nos campos "Tipo de Importação", "Conta de + Recebimento/Pagamento", "Criação de Contra-Partida" e se deve ser + feita a reconciliação automática ao importar o arquivo em "Reconciliar + Automaticamente o Retorno de Pagamento". +- Em Faturamento > Configurações > Administração > Modos de Pagamento + criar um Modo de Pagamento com as informações do CNAB, no campo + "Diário de Banco Fixo" informar o Diário Contábil da conta bancária e + se for o caso, e é recomendado, marcar a opção "Adicionar + automaticamente ao validar a fatura" para não ser preciso fazer + manualmente. +- Caso o CNAB e Banco escolhidos possua um campo especifico que seja + preciso implementar considere fazer um PR no modulo + l10n_br_account_payment_order aqui + https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/models/l10n_br_cnab_boleto_fields.py#L307 + . +- Configure as permissões de acesso dos usuários, as opções são CNAB + "Usuário" e "Gerente". **English** To configure this module, you need to: -- Run BRCobranca as micro-service - https://github.com/akretion/boleto_cnab_api. -- Inform the envoriment variable BRCOBRANCA_API_URL in the config odoo - file or if are use docky in the section enviroment - https://github.com/akretion/docky-odoo-brasil/blob/12.0/docker-compose.yml#L3 - , example: **BRCOBRANCA_API_URL=http://boleto_cnab_api:9292** -- Check if the CNAB Instruction Movement Code to be use exist in - Invoicing > Configuration > Management > CNAB Movement Instruction - Code if necessary create please consider make PR to add as data in - https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_mov_instruction_code_data.xml - . -- Check if the CNAB Return Move Code to be use exist in Invoicing > - Configuration > Management > CNAB Return Move Code if necessary - create please consider make PR to add as data in - https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_return_move_code_data.xml - . -- Create an Bank Account referent of CNAB in Invoicing > Configuration - > Accounting > Bank Accounts . -- Automatic will be create an Account Journal refer to bank account in - Invoicing > Configuration > Accounting > Journals in tab **Import - related infos** inform parameters of CNAB Return in fields "Type of - Import", "Receivable/Payable Account", "Create Counterpart", and if - should make automatic reconciliation when import the file in - "Automatic Reconcile payment returns". -- In Invoicing > Configuration > Management > Payment Modes create an - Payment Mode with CNAB information, in the field "Fixed Bank Journal" - inform the Account Journal of bank account and mark if "Automatically - add when validating the invoice" so that you don't have to do it - manually. -- Configure user access permissions, CNAB options are "User" and - "Manager". +- Run BRCobranca as micro-service + https://github.com/akretion/boleto_cnab_api. +- Inform the envoriment variable BRCOBRANCA_API_URL in the config odoo + file or if are use docky in the section enviroment + https://github.com/akretion/docky-odoo-brasil/blob/12.0/docker-compose.yml#L3 + , example: **BRCOBRANCA_API_URL=http://boleto_cnab_api:9292** +- Check if the CNAB Instruction Movement Code to be use exist in + Invoicing > Configuration > Management > CNAB Movement Instruction + Code if necessary create please consider make PR to add as data in + https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_mov_instruction_code_data.xml + . +- Check if the CNAB Return Move Code to be use exist in Invoicing > + Configuration > Management > CNAB Return Move Code if necessary create + please consider make PR to add as data in + https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/l10n_br_cnab_return_move_code_data.xml + . +- Create an Bank Account referent of CNAB in Invoicing > Configuration > + Accounting > Bank Accounts . +- Automatic will be create an Account Journal refer to bank account in + Invoicing > Configuration > Accounting > Journals in tab **Import + related infos** inform parameters of CNAB Return in fields "Type of + Import", "Receivable/Payable Account", "Create Counterpart", and if + should make automatic reconciliation when import the file in + "Automatic Reconcile payment returns". +- In Invoicing > Configuration > Management > Payment Modes create an + Payment Mode with CNAB information, in the field "Fixed Bank Journal" + inform the Account Journal of bank account and mark if "Automatically + add when validating the invoice" so that you don't have to do it + manually. +- Configure user access permissions, CNAB options are "User" and + "Manager". Usage ===== **Português** -- Ao criar e Confirmar uma Fatura que tem um Modo de Pagamento que seja - CNAB deverá aparecer o botão de "Imprimir Boleto". -- Caso esteja marcado no Modo de Pagamento a opção de "Adicionar - automaticamente ao validar a fatura" será criada ou adicionada em uma - Ordem de Pagamento as linhas de pagamentos do CNAB, se a opção não - estiver marcada será preciso fazer isso manualmente podendo ser feito - tanto na Fatura quanto na Ordem de Pagamento. -- Ao Confirmar essa Ordem de Pagamento será possível gerar o arquivo de - Remessa CNAB a ser enviado ao Banco, é importante confirmar o envio - do arquivo alterando o status da ordem para "Arquivo Enviado", essa - informação é usada para validar se existe uma instrução CNAB pendente - antes de se poder criar outra. -- Alterações de CNAB como Alteração da Data de Vencimento, Protesto, - Conceder Abatimento e etc podem ser feitas na própria Fatura em - Faturamento > Clientes > Faturas na aba Recebimentos na última coluna - existe o botão "Atualizar Informação CNAB" ao clicar em uma linha - essa opção também aparece, ao fazer uma alteração é criada ou - adicionada em uma Ordem de Pagamento a Instrução de Movimento CNAB - selecionada. -- A importação do arquivo CNAB de Retorno pode ser feita em Pagamentos - > Importar arquivo Batch ou no próprio Diário em Faturamento > - Configurações > Contabilidade > Diários na aba **Informações - Referentes a Importação** o botão Importar arquivo Batch. -- Toda importação de arquivo de retorno cria uma LOG que pode ser - consultado em Pagamentos > LOG de Retorno CNAB. -- Caso o Código de Retorno CNAB recebido seja um dos "Códigos de - Liquidação do Retorno do Movimento" do Modo de Pagamento será criado - uma Entrada de Diário com os valores quando existirem de desconto, - juros/mora, tarifa bancaria, abatimento e valor a ser reconciliado - com a linha da Fatura referente, os lançamentos são separados de - acordo com as Contas Contabéis definidas no Modo de Pagamento, a - linha para reconciliar a linha da Fatura precisam ser iguais por isso - o valor é: valor_recebido_calculado = (valor_recebido + - valor_desconto + valor_abatimento) - valor_juros_mora -- Quando marcada a opção de "Reconciliação Automatica" /a Entrada de - Diário será movida para o status Lançado automaticamente ao importar - o arquivo, se não estiver marcada isso deverá ser feito manualmente. +- Ao criar e Confirmar uma Fatura que tem um Modo de Pagamento que seja + CNAB deverá aparecer o botão de "Imprimir Boleto". +- Caso esteja marcado no Modo de Pagamento a opção de "Adicionar + automaticamente ao validar a fatura" será criada ou adicionada em uma + Ordem de Pagamento as linhas de pagamentos do CNAB, se a opção não + estiver marcada será preciso fazer isso manualmente podendo ser feito + tanto na Fatura quanto na Ordem de Pagamento. +- Ao Confirmar essa Ordem de Pagamento será possível gerar o arquivo de + Remessa CNAB a ser enviado ao Banco, é importante confirmar o envio do + arquivo alterando o status da ordem para "Arquivo Enviado", essa + informação é usada para validar se existe uma instrução CNAB pendente + antes de se poder criar outra. +- Alterações de CNAB como Alteração da Data de Vencimento, Protesto, + Conceder Abatimento e etc podem ser feitas na própria Fatura em + Faturamento > Clientes > Faturas na aba Recebimentos na última coluna + existe o botão "Atualizar Informação CNAB" ao clicar em uma linha essa + opção também aparece, ao fazer uma alteração é criada ou adicionada em + uma Ordem de Pagamento a Instrução de Movimento CNAB selecionada. +- A importação do arquivo CNAB de Retorno pode ser feita em Pagamentos > + Importar arquivo Batch ou no próprio Diário em Faturamento > + Configurações > Contabilidade > Diários na aba **Informações + Referentes a Importação** o botão Importar arquivo Batch. +- Toda importação de arquivo de retorno cria uma LOG que pode ser + consultado em Pagamentos > LOG de Retorno CNAB. +- Caso o Código de Retorno CNAB recebido seja um dos "Códigos de + Liquidação do Retorno do Movimento" do Modo de Pagamento será criado + uma Entrada de Diário com os valores quando existirem de desconto, + juros/mora, tarifa bancaria, abatimento e valor a ser reconciliado com + a linha da Fatura referente, os lançamentos são separados de acordo + com as Contas Contabéis definidas no Modo de Pagamento, a linha para + reconciliar a linha da Fatura precisam ser iguais por isso o valor é: + valor_recebido_calculado = (valor_recebido + valor_desconto + + valor_abatimento) - valor_juros_mora +- Quando marcada a opção de "Reconciliação Automatica" /a Entrada de + Diário será movida para o status Lançado automaticamente ao importar o + arquivo, se não estiver marcada isso deverá ser feito manualmente. **English** -- When creating and confirming an Invoice that has a Payment Mode that - is CNAB, the button should appear "Print Boleto". -- If the option to "Add automatically when validating the invoice" is - marked in the Payment Mode CNAB payment lines will be created or - added to a Payment Order, if the option is not marked, you will need - to do this manually, which can be done both in the Invoice and in the - Payment Order. -- By confirming this Payment Order it will be possible to generate the - CNAB Remessa file to be sent to the Bank, it is important to confirm - the upload of the file by changing the order status to "File - Uploaded", this information is used to validate if there is a pending - CNAB instruction before another one can be created. -- CNAB changes such as Change Due Date, Protest, Grant Rebate, etc. can - be made in the Invoice itself in Invoicing > Customers > Invoices in - the Receivable tab in the last column there is the button "Update - CNAB Information" when clicking on a line this option also appears, - when making a change it is created or added to a Payment Order the - selected CNAB Movement Instruction. -- The import of the Return CNAB file can be done in Payments > Import - Batch file or in the same Journal in Invoicing > Configuration > - Accounting > Journals in the tab **Import related infos** the Import - Batch File button. -- Every return file import creates a LOG that can be consulted in - Payments > CNAB Return LOG. -- If the CNAB Return Code received is one of the "CNAB Liquidity Return - Move Code" of the Payment Mode, a Journal Entry will be created with - the values when there are discount, interest, tariff charge, rebate - and amount to be reconciled with the referring Invoice line, entries - are separated according to the Accounts defined in the Payment Mode, - the line to reconcile the Invoice line need be equal so the value is: - calculated_value_receive = (receive_amount + discount_amount + - rebate_amount) - interest_amount -- When the "Automatic Reconciliation" option is checked, the Entry of - Journal will be moved to the status Posted automatically when - importing the file, if not checked it should be done manually. +- When creating and confirming an Invoice that has a Payment Mode that + is CNAB, the button should appear "Print Boleto". +- If the option to "Add automatically when validating the invoice" is + marked in the Payment Mode CNAB payment lines will be created or added + to a Payment Order, if the option is not marked, you will need to do + this manually, which can be done both in the Invoice and in the + Payment Order. +- By confirming this Payment Order it will be possible to generate the + CNAB Remessa file to be sent to the Bank, it is important to confirm + the upload of the file by changing the order status to "File + Uploaded", this information is used to validate if there is a pending + CNAB instruction before another one can be created. +- CNAB changes such as Change Due Date, Protest, Grant Rebate, etc. can + be made in the Invoice itself in Invoicing > Customers > Invoices in + the Receivable tab in the last column there is the button "Update CNAB + Information" when clicking on a line this option also appears, when + making a change it is created or added to a Payment Order the selected + CNAB Movement Instruction. +- The import of the Return CNAB file can be done in Payments > Import + Batch file or in the same Journal in Invoicing > Configuration > + Accounting > Journals in the tab **Import related infos** the Import + Batch File button. +- Every return file import creates a LOG that can be consulted in + Payments > CNAB Return LOG. +- If the CNAB Return Code received is one of the "CNAB Liquidity Return + Move Code" of the Payment Mode, a Journal Entry will be created with + the values when there are discount, interest, tariff charge, rebate + and amount to be reconciled with the referring Invoice line, entries + are separated according to the Accounts defined in the Payment Mode, + the line to reconcile the Invoice line need be equal so the value is: + calculated_value_receive = (receive_amount + discount_amount + + rebate_amount) - interest_amount +- When the "Automatic Reconciliation" option is checked, the Entry of + Journal will be moved to the status Posted automatically when + importing the file, if not checked it should be done manually. Known issues / Roadmap ====================== -- Incluir a posssibilidade de imprimir o boleto no menu Imprimir da - Fatura, na v12 aparentemente não é possível chamar um metodo apenas - um QWeb, verificar na migração para outras versões. +- Incluir a posssibilidade de imprimir o boleto no menu Imprimir da + Fatura, na v12 aparentemente não é possível chamar um metodo apenas um + QWeb, verificar na migração para outras versões. Changelog ========= @@ -226,38 +225,38 @@ Changelog 14.0.1.0.0 (2022-05-26) ----------------------- -- [MIG] Migration +- [MIG] Migration 12.0.1.0.0 (2021-05-07) ----------------------- -- [MIG] Finish migration -- [IMP] Integrate with module account_move_base_import used to import - CNAB file -- [IMP] Make possible automatic reconciliation and register the values - of Fees, Tariff Bank, Rebate in configured accounts. +- [MIG] Finish migration +- [IMP] Integrate with module account_move_base_import used to import + CNAB file +- [IMP] Make possible automatic reconciliation and register the values + of Fees, Tariff Bank, Rebate in configured accounts. 12.0.1.0.0 (2020-06-12) ----------------------- -- [MIG] Start Migration +- [MIG] Start Migration 10.0.1.0.0 (2019-05-30) ----------------------- -- [MIG] Migration +- [MIG] Migration 8.0.1.0.0 (2018-01-29) ---------------------- -- [REF] Maked functional to print Boleto, create CNAB file and import - CNAB as Extrat Bank the user should be resolved manully the - divergences between the values( Fee, Tariff Bank, Rebate, etc). +- [REF] Maked functional to print Boleto, create CNAB file and import + CNAB as Extrat Bank the user should be resolved manully the + divergences between the values( Fee, Tariff Bank, Rebate, etc). 8.0.1.0.0 (2017-07-01) ---------------------- -- [NEW] First version +- [NEW] First version Bug Tracker =========== @@ -280,21 +279,21 @@ Authors Contributors ------------ -- `Akretion `__: +- `Akretion `__: - - Raphaël Valyi - - Magno Costa + - Raphaël Valyi + - Magno Costa -- `Engenere `__: +- `Engenere `__: - - Antônio S. Pereira Neto + - Antônio S. Pereira Neto Other credits ------------- The development of this module has been financially supported by: -- AKRETION LTDA - https://akretion.com/pt-BR +- AKRETION LTDA - https://akretion.com/pt-BR Maintainers ----------- diff --git a/l10n_br_account_payment_brcobranca/static/description/index.html b/l10n_br_account_payment_brcobranca/static/description/index.html index fe69f9d6567b..fcf73c92d55e 100644 --- a/l10n_br_account_payment_brcobranca/static/description/index.html +++ b/l10n_br_account_payment_brcobranca/static/description/index.html @@ -3,7 +3,7 @@ -L10n Br Account Payment BRCobranca +Boletos e CNAB de cobrança -
-

L10n Br Account Payment BRCobranca

+
+

Boletos e CNAB de cobrança