OCA / l10n-brazil

Localização brasileira oficial do Odoo.
https://odoo-community.org/psc-teams/brazil-66
GNU Affero General Public License v3.0
236 stars 244 forks source link

[14.0][REF] l10n_br_account_payment_order, l10n_br_account_payment_brcobranca: Separando a Configuração do CNAB do Modo de Pagamento #3243

Open mbcosta opened 1 month ago

mbcosta commented 1 month ago

Unified CNAB Codes in only one object and separated CNAB Configuration from Payment Mode.

Unificando os Códigos CNAB em um único objeto e separando a Configuração do CNAB do Modo de Pagamento, apesar de alterar diversos arquivos nesse PR estão sendo feitas basicamento duas alterações:

1- Unificando os Códigos do CNAB

Para implementar o CNAB alguns campos foram deixados como CHAR e outros como objeto, inicialmente os "Códigos de Instrução e Retorno do Movimento" e recentemente foi incluído o "Código da Carteira" PR https://github.com/OCA/l10n-brazil/pull/2925 , olhando o PR sobre o "Código de Desconto" https://github.com/OCA/l10n-brazil/pull/3121 eu passei a considerar em fazer o mesmo que fiz para o "Código da Carteira" porque no Desconto

            # Código adotado pela FEBRABAN para identificação do desconto.
            # Domínio: 0 = Isento | 1 = Valor Fixo
            # if payment_mode_id.payment_method_code == "240":
            #    if self.discount_value:
            #        linhas_pagamentos["cod_desconto"] = "1"

            # Deveria ser um Padrão porém: 
            # Banco     | Possíveis Códigos de Desconto |
            #           | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
            # __________________________________________
            # Ailos     | X | X |   |   |   |   |   |   |
            # Bradesco  |   | X | X | X | X | X | X | X |
            # CEF       | X | X | X |   |   |   |   |   |
            # Santander | X | X | X | X |   |   |   |   |
            # Sicred    |   | X | X | X |   |   |   | X |  
            # Unicred   | X | X |   |   |   |   |   |   |

Os Bancos Bradesco e SICRED não enviam o caso "0 - Sem Desconto" o caso "1 - Valor Fixo" apenas varia de nomenclatura entre os Bancos porém hoje o código não permite os outros casos ex.: "2 - Percentual Até a Data Informada" , "3 - Valor por Antecipação Dia Corrido", etc e o Bradesco e SICRED parecem enviar o código "7 - Cancelamento de Desconto" ( é preciso confirmar se está faltando preencher esse campo para cancelar o desconto ).

OBS.: Nesse PR não está sendo resolvido essa questão do Desconto o PR já acabou sendo muito extenso e achei melhor deixar para outro PR para diminuir o "DIFF" e facilitar a revisão

Mas ao ver de transformar o campo em um objeto vi que essa solução estava gerando muito Código, Visões e Menus semelhantes quase duplicadas, e se isso fosse feito nos outros campos "Código de Tarifa, Abatimento e Multa" essa quantidade de código seria maior ainda por isso procurei uma forma de reduzir isso, o que fiz foi criar um objeto único "Código CNAB"/l10n_br_cnab.code e incluir um campo Seleção/selection "Tipo do Código"/code_type assim com um único objeto, visão e menu será possível incluir esses códigos evitando esse problema, coloquei a maioria dos possíveis casos

        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"),
        ],

Ao acessar o Faturamento > Configurações é possível acessar o CNAB Codes

image

image

image

Para tentar facilitar a revisão eu separei esse commit em dois o segundo tem apenas as alterações no arquivos data/cnab_codes que são o que acabam gerando mais volume no DIFF

2 - Separando as Configurações do CNAB do Modo de Pagamento

Fazendo a unificação dos códigos do CNAB acabei precisando, devido os scripts de migração, melhorar a definição de alguns campos por isso acabei decidindo fazer um melhoria que é essa separação do que são as informações do CNAB e do Modo de Pagamento/account.payment.mode para isso eu criei um novo objeto o l10n_br_cnab.config e agora no Modo de Pagamento é apenas informado o CNAB usado

Faturamento > Configurações > Modo de Pagamento

image

Faturamento > Configurações > CNAB Config

image

Isso é importante porque:

Sobre a Migração

Os scripts de migração devem criar todos os

Depois de rodar a migração você pode verificar esses objetos para confirmar se tudo ocorreu como deveria

image

image

IMPORTANTE: Não atualize um Banco de Dados em Produção diretamente crie um novo Banco para Homologação em caso de algum erro por favor veja de colocar aqui o LOG com a mensagem.

Inicialmente não foi possível excluir o que não será mais usado porque o script de migração precisa buscar os dados, algo semelhante de quando o openupgrade deixa alguns campos como "old", mas isso também é importante para em caso de algum problema os dados ainda estarão no BD mesmo que para uma eventual consulta o que acredito que também vai garantir uma migração tranquila, porém isso vai ser algo temporário e nos próximos PRs eu pretendo ver de eliminar esses objetos, campos e visões.

cc @rvalyi @renatonlima @marcelsavegnago @mileo

OCA-git-bot commented 1 month ago

Hi @rvalyi, some modules you are maintaining are being modified, check this out!

antoniospneto commented 1 month ago

No geral me parece uma boa mudança, deixei umas observações a cima que eu acho que pode ajudar a deixar mais claro. Ainda vou olhar com mais detalhes e testar em base de homologação, valeu!

mileo commented 1 month ago

Unified CNAB Codes in only one object and separated CNAB Configuration from Payment Mode.

Unificando os Códigos CNAB em um único objeto e separando a Configuração do CNAB do Modo de Pagamento, apesar de alterar diversos arquivos nesse PR estão sendo feitas basicamento duas alterações:

1- Unificando os Códigos do CNAB

Para implementar o CNAB alguns campos foram deixados como CHAR e outros como objeto, inicialmente os "Códigos de Instrução e Retorno do Movimento" e recentemente foi incluído o "Código da Carteira" PR #2925 , olhando o PR sobre o "Código de Desconto" #3121 eu passei a considerar em fazer o mesmo que fiz para o "Código da Carteira" porque no Desconto

            # Código adotado pela FEBRABAN para identificação do desconto.
            # Domínio: 0 = Isento | 1 = Valor Fixo
            # if payment_mode_id.payment_method_code == "240":
            #    if self.discount_value:
            #        linhas_pagamentos["cod_desconto"] = "1"

            # Deveria ser um Padrão porém: 
            # Banco     | Possíveis Códigos de Desconto |
            #           | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
            # __________________________________________
            # Ailos     | X | X |   |   |   |   |   |   |
            # Bradesco  |   | X | X | X | X | X | X | X |
            # CEF       | X | X | X |   |   |   |   |   |
            # Santander | X | X | X | X |   |   |   |   |
            # Sicred    |   | X | X | X |   |   |   | X |  
            # Unicred   | X | X |   |   |   |   |   |   |

Os Bancos Bradesco e SICRED não enviam o caso "0 - Sem Desconto" o caso "1 - Valor Fixo" apenas varia de nomenclatura entre os Bancos porém hoje o código não permite os outros casos ex.: "2 - Percentual Até a Data Informada" , "3 - Valor por Antecipação Dia Corrido", etc e o Bradesco e SICRED parecem enviar o código "7 - Cancelamento de Desconto" ( é preciso confirmar se está faltando preencher esse campo para cancelar o desconto ).

OBS.: Nesse PR não está sendo resolvido essa questão do Desconto o PR já acabou sendo muito extenso e achei melhor deixar para outro PR para diminuir o "DIFF" e facilitar a revisão

Mas ao ver de transformar o campo em um objeto vi que essa solução estava gerando muito Código, Visões e Menus semelhantes quase duplicadas, e se isso fosse feito nos outros campos "Código de Tarifa, Abatimento e Multa" essa quantidade de código seria maior ainda por isso procurei uma forma de reduzir isso, o que fiz foi criar um objeto único "Código CNAB"/l10n_br_cnab.code e incluir um campo Seleção/selection "Tipo do Código"/code_type assim com um único objeto, visão e menu será possível incluir esses códigos evitando esse problema, coloquei a maioria dos possíveis casos

        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"),
        ],

Ao acessar o Faturamento > Configurações é possível acessar o CNAB Codes

image

image

image

Para tentar facilitar a revisão eu separei esse commit em dois o segundo tem apenas as alterações no arquivos data/cnab_codes que são o que acabam gerando mais volume no DIFF

2 - Separando as Configurações do CNAB do Modo de Pagamento

Fazendo a unificação dos códigos do CNAB acabei precisando, devido os scripts de migração, melhorar a definição de alguns campos por isso acabei decidindo fazer um melhoria que é essa separação do que são as informações do CNAB e do Modo de Pagamento/account.payment.mode para isso eu criei um novo objeto o l10n_br_cnab.config e agora no Modo de Pagamento é apenas informado o CNAB usado

Faturamento > Configurações > Modo de Pagamento

image

Faturamento > Configurações > CNAB Config

image

Isso é importante porque:

  • Deixa a implementação mais "limpa" e objetiva facilitando alterações, manutenções e correções porque a Configuração do CNAB está em um objeto especifico
  • Campos não precisam mais do prefixo "cnab_" ( exceção campos cnab_sequence_id e cnab_company_bank_code achei melhor mante-los assim para evitar confusões )
  • Permite separar ou restringir acessos exemplo o usuário pode acessar o Modo de Pagamento mas não as Configurações do CNAB
  • Casos de multi-localizações em um mesmo banco, tanto a tabela no BD quanto objeto do Modo de Pagamento deixam de ter a quantidade de campos que o CNAB acabava incluindo ali
  • Se necessário é possível relacionar o CNAB a outros objetos ou mover essa configuração por exemplo para o Banco/res.bank ( pensei em fazer isso porém isso pode acabar "engessando" a configuração, é preciso avaliar)

Sobre a Migração

Os scripts de migração devem criar todos os

  • Códigos de CNAB baseados nos que existem no BD
  • Configurações CNAB baseados nas configurações existentes nos Modos de Pagamento
  • Relacionar os Modos de Pagamento com a Configuração CNAB
  • Atualizar todas as account.move.line e account.payment.line com o novo "Código de Instrução de Movimento"

Depois de rodar a migração você pode verificar esses objetos para confirmar se tudo ocorreu como deveria

image

image

IMPORTANTE: Não atualize um Banco de Dados em Produção diretamente crie um novo Banco para Homologação em caso de algum erro por favor veja de colocar aqui o LOG com a mensagem.

Inicialmente não foi possível excluir o que não será mais usado porque o script de migração precisa buscar os dados, algo semelhante de quando o openupgrade deixa alguns campos como "old", mas isso também é importante para em caso de algum problema os dados ainda estarão no BD mesmo que para uma eventual consulta o que acredito que também vai garantir uma migração tranquila, porém isso vai ser algo temporário e nos próximos PRs eu pretendo ver de eliminar esses objetos, campos e visões.

cc @rvalyi @renatonlima @marcelsavegnago @mileo

Muito bom! Vai ajudar a mantermos dados de configuração para as carteiras! Reviso em breve.

mbcosta commented 1 month ago

Force-push para atualizar o README dos módulos, alguns pontos:

rvalyi commented 1 month ago

@mbcosta rola um rebase por favor?

mileo commented 4 weeks ago

@mbcosta já da pra revisar? Ou vc pretende mudar mais coisa?

mbcosta commented 4 weeks ago

valeu @rvalyi @mileo , fiz um Force-Push para fazer o rebase ontem e acabei resolvendo um conflito de arquivo errado e acabou gerando erro nos testes, já corrigido.

Por enquanto a única alteração que estou considerando é separar as alterações nos README em um commit específico, talvez isso seja melhor para revisão, o que acham, seria melhor?

Para quem for fazer a Revisão eu recomendo ao invés de ir direto na aba Arquivos Alterado/Files changed clicar nos Commits para ver por partes, uma breve descrição dos commits:

1 - [REF] l10n_br_account_payment_order: Unified CNAB Codes in only one object and separated CNAB Configuration from Payment Mode

Aqui estão as principais alterações, uma forma de visualizar a separação do Modo de Pagamento das Configurações CNAB é olhar como ficaram os Dados de Demonstração do Modo de Pagamento e do novo arquivo CNAB Config, o que reflete no Banco de Dados, ou também pelo README

2 - [REF] l10n_br_account_payment_order: Unified CNAB Codes Data in only one object

O que gera o maior DIFF porque ao unificar os Códigos CNAB é preciso alterar nos arquivos DATA esse novo objeto e incluir o campo Tipo do Código, o que permite unir os campos, então esse commit é repetitivo é aqui os erros que podem existir são de Digitação, algum nome ou valor de campo errado, nesses casos pode ocorrer Warnings ou mesmo ERROR no LOG.

3 - [REF] l10n_br_account_payment_brcobranca: Unified CNAB Codes in only one object and separated CNAB Configuration from Payment Mode

As alterações necessárias no modulo do BRCobranca para usar o CNAB Config para obter os dados do CNAB e não mas diretamente do Modo de Pagamento e ao consultar algum Código CNAB usar o novo objeto l10n_br_cnab.code e incluir o Tipo do Código se é uma Instrução de Movimento, Retorno do Movimento ou Código de Carteira (por enquanto os possíveis códigos).

Infelizmente não vejo uma forma de extrair essas alterações em PRs menores para facilitar a Revisão sem gerar erro nos testes do CI.

O LOG passou a retornar WARNINGS de campos com nomes iguais e a Cobertura dos Testes diminui com esse PR, porém como escrevi antes isso é temporário e foi necessário manter para rodar os Scripts de Migração, mas também garante que esses Dados podem ser consultados eventualmente em caso de algum problema depois do Merge, acredito que depois de alterar os Códigos de Desconto, Multa, ????? de CHAR para Objetos já poderá ser feito um PR de "limpeza" removendo Campos, Visões e Objetos o que vai resolver esse Warnings no LOG e melhorando a Cobertura dos Testes.

antoniospneto commented 5 days ago

@mbcosta coloquei essa PR em rascunho já que tá sendo quebrado em PR menores ok Vou revisar ali o #3337

mbcosta commented 4 days ago

Com a extração das alterações referentes a Unificar os Códigos CNAB esse PR passou a depender do PR https://github.com/OCA/l10n-brazil/pull/3337 eu incluí aqui os commits para evitar erros mas assim que houver o merge eu vou ver de fazer o rebase e aqui deverá ter apenas os commits referentes a Separar a Configuração CNAB do Modo de Pagamento.

Com essa alteração a Migração também foi dividida:

Aproveitei e também dividi os commits para facilitar a revisão:

Removi as alterações do README para diminuir o DIFF, pretendo fazer em outro PR.

Peço desculpas para quem eu havia falado que o PR estava pronto para Revisão antes, @rvalyi @mileo , porque ao separar vi que alguns Códigos do CNAB do Bradesco e um do AILOS estavam sem informar o novo campo code_type o que identifica se é um Código de Instrução ou Retorno ou Carteira, acredito que agora está tudo certo e que devido a quantidade de Aprovações no PR https://github.com/OCA/l10n-brazil/pull/3337 esse PR agora passa apenas a aguardar o merge mas já é possível fazer a Revisão.

mbcosta commented 2 days ago

Apenas para registrar que com o merge do PR https://github.com/OCA/l10n-brazil/pull/3337 aqui passou a conter apenas a Separação das Configurações CNAB do Modo de Pagamento, agora o DIFF está menor e o PR está mais especifico, os commits também foram divididos, o que deve facilitar a Revisão.