Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] l10n_br_cnab #1636

Closed
marcos-mendez opened this issue Sep 15, 2021 · 10 comments · Fixed by #1661
Closed

[BUG] l10n_br_cnab #1636

marcos-mendez opened this issue Sep 15, 2021 · 10 comments · Fixed by #1661
Labels

Comments

@marcos-mendez
Copy link

** Descreva o bug **
fiz um pull da branch principal para ter a versão mais atualizada, usei a flag -u all para atualizar todos os modulos e deu este erro

`WARNING riviera-new odoo.modules.loading: Transient module states were reset
2021-09-15 22:34:58,419 157946 ERROR riviera-new odoo.modules.registry: Failed to load registry
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3888, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3802, in _load_records_create
return self.create(values)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 272, in create
threads = super(MailThread, self).create(vals_list)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3583, in create
records = self._create(data_list)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3715, in _create
records._validate_fields(name for data in data_list for name in data['stored'])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 1126, in _validate_fields
check(self)
File "/usr/lib/python3/dist-packages/odoo/custom-addons/l10n-brazil/l10n_br_account_payment_order/models/l10n_br_cnab_data_abstract.py", line 54, in check_code
% (record.code, code_name_exist)
odoo.exceptions.ValidationError: ('The Code 09 already exist 09 - Inclusão do Registro Detalhe Bloqueado for Bank and CNAB type.', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 417, in load_modules
force, status, report, loaded_modules, update_module, models_to_check)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 313, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 222, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package, report=report)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 68, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 802, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 865, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 764, in parse
exc_info[2]
File "/usr/lib/python3/dist-packages/odoo/tools/pycompat.py", line 86, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3888, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3802, in _load_records_create
return self.create(values)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 272, in create
threads = super(MailThread, self).create(vals_list)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3583, in create
records = self._create(data_list)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3715, in _create
records._validate_fields(name for data in data_list for name in data['stored'])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 1126, in _validate_fields
check(self)
File "/usr/lib/python3/dist-packages/odoo/custom-addons/l10n-brazil/l10n_br_account_payment_order/models/l10n_br_cnab_data_abstract.py", line 54, in check_code
% (record.code, code_name_exist)
odoo.tools.convert.ParseError: "The Code 09 already exist 09 - Inclusão do Registro Detalhe Bloqueado for Bank and CNAB type.
None" while parsing /usr/lib/python3/dist-packages/odoo/custom-addons/l10n-brazil/l10n_br_account_payment_order/data/cnab_codes/banco_bradesco_cnab_240_400.xml:115, near

Protestar
09



2021-09-15 22:34:58,428 157946 CRITICAL riviera-new odoo.service.server: Failed to initialize database riviera-new.
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3888, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3802, in _load_records_create
return self.create(values)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 272, in create
threads = super(MailThread, self).create(vals_list)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3583, in create
records = self._create(data_list)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3715, in _create
records._validate_fields(name for data in data_list for name in data['stored'])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 1126, in _validate_fields
check(self)
File "/usr/lib/python3/dist-packages/odoo/custom-addons/l10n-brazil/l10n_br_account_payment_order/models/l10n_br_cnab_data_abstract.py", line 54, in check_code
% (record.code, code_name_exist)
odoo.exceptions.ValidationError: ('The Code 09 already exist 09 - Inclusão do Registro Detalhe Bloqueado for Bank and CNAB type.', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 1162, in preload_registries
registry = Registry.new(dbname, update_module=update_module)
File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 417, in load_modules
force, status, report, loaded_modules, update_module, models_to_check)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 313, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 222, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package, report=report)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 68, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 802, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 865, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 764, in parse
exc_info[2]
File "/usr/lib/python3/dist-packages/odoo/tools/pycompat.py", line 86, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3888, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3802, in _load_records_create
return self.create(values)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 272, in create
threads = super(MailThread, self).create(vals_list)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 462, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3583, in create
records = self._create(data_list)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3715, in _create
records._validate_fields(name for data in data_list for name in data['stored'])
File "/usr/lib/python3/dist-packages/odoo/models.py", line 1126, in _validate_fields
check(self)
File "/usr/lib/python3/dist-packages/odoo/custom-addons/l10n-brazil/l10n_br_account_payment_order/models/l10n_br_cnab_data_abstract.py", line 54, in check_code
% (record.code, code_name_exist)
odoo.tools.convert.ParseError: "The Code 09 already exist 09 - Inclusão do Registro Detalhe Bloqueado for Bank and CNAB type.
None" while parsing /usr/lib/python3/dist-packages/odoo/custom-addons/l10n-brazil/l10n_br_account_payment_order/data/cnab_codes/banco_bradesco_cnab_240_400.xml:115, near

Protestar
09


`

Reproduzir
Etapas para reproduzir o comportamento:

  1. Vá para '...'
  2. Clique em '....'
  3. Role para baixo até '....'
  4. Ver erro

Comportamento esperado
atualizar normalmente

** Contexto adicional **
Ambiente em produção

@renatonlima pode me ajudar? o que devo fazer? não entendi o porque do erro

@antoniospneto
Copy link
Contributor

@marcos-mendez isso também aconteceu comigo, eu resolvi apagando os dados das tabelas a baixo antes de atualizar o modulo:

"l10n_br_cnab_mov_instruction_code"
"l10n_br_cnab_mov_instruction_code_bank_rel"
"l10n_br_cnab_mov_instruction_code_payment_method_rel"

"l10n_br_cnab_return_move_code"
"l10n_br_cnab_return_move_code_bank_rel"
"l10n_br_cnab_return_move_code_payment_method_rel"

@antoniospneto
Copy link
Contributor

antoniospneto commented Sep 15, 2021

Eu já tinha percebido isso antes, mas não abri uma issue pois queria tentar achar a fonte do problema antes, eu acho que é algo relacionado a colaboração do @mbcosta nessa PR #1558. houve alteração nos ids dos records na pasta data, ai isso faz com que as informações se repitam, caso você já tenha uma base montada. Talvez tenha faltado um script de migração, eu acho, não olhei muito a fundo.

@marcos-mendez
Copy link
Author

Boa @netosjb!!! SHOW DE BOLA

Salvou em, vou verificar isso, mas realmente, como te disse, tem muita coisa que está sem script de migração e isso afeta e muito a comunidade.

Vou tentar esse macete que você falou e te aviso

@mbcosta
Copy link
Contributor

mbcosta commented Sep 16, 2021

ola @marcos-mendez e @netosjb realmente é o PR que está causando o problema, especificamente esse commit 186bcc9 eu acabei não vendo a questão de migrar os dados, apaga-los e depois atualizar como o @netosjb disse funciona, mas você vai precisar reconfigurar os Modos de Pagamentos que estavam usando algum desses códigos depois, veja também que no PR é removido o conjunto de códigos CNAB 240 genérico, pelo o que vi não há padrão no uso dos códigos mesmo no 240 cada Banco pode usar um conjunto de códigos específicos com diferentes descrições, os arquivos data passaram a ser separados por banco e no começo do conjunto de códigos tem o link para o website da fonte https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/data/cnab_codes/banco_bradesco_cnab_240_400.xml#L5 , desculpem pelo transtorno, nos próximos dias posso ver para incluir o script de migração, PR são bem vindos.

@antoniospneto
Copy link
Contributor

antoniospneto commented Sep 26, 2021

@marcos-mendez conseguiu resolver o problema? Veja se a issue possa ser fechada

@mbcosta
Copy link
Contributor

mbcosta commented Oct 14, 2021

@marcos-mendez @netosjb a solução de apagar os códigos não deve ser feita no caso de algum já ter sido usado em uma Ordem de Debito isso vai deixar as linhas com o campo do Código de Instrução do Movimento vazio e assim a única forma de saber o código que foi usado na linha de uma determinada Ordem será abrindo o arquivo TXT gerado, eu subi ontem a correção com o script de migração.

As "branchs" oficiais são consideradas estáveis e existe um esforço nesse sentido, esse problema foi um erro meu que acabei avaliando um cenário apenas, mais uma vez me desculpem pelo transtorno causado, vou procurar marca-los em novos PRs referentes ao CNAB.

@antoniospneto
Copy link
Contributor

antoniospneto commented Oct 14, 2021

@mbcosta

Verdade, acabei sugerindo uma solução não muito certa, é que no meu caso não deu problema pois eu ainda não tinha iniciado o uso do CNAB.

Tenho bastante interesse no módulo, vou ficar acompanhando as prs e ajudar a revisar, obrigado.

@mbcosta
Copy link
Contributor

mbcosta commented Oct 14, 2021

valeu @netosjb eu que vacilei na resposta

Sobre o CNAB usando o modulo l10n_br_account_payment_brcobranca com os dados de demonstração é possível testar a impressão do Boleto e geração do arquivo TXT a ser enviado ao Banco do Itau/400, Bradesco/400, CEF/240, SICREDI/240, Banco do Brasil/400, UNICRED/400 nesse caso é possível simular o retorno( TXT enviado pelo Banco ) para validar a conciliação dos pagamentos, com um caso de valor recebido Maior e outro Menor, os arquivos estão na pasta l10n_br_account_payment_brcobranca/tests/data https://github.com/OCA/l10n-brazil/tree/12.0/l10n_br_account_payment_brcobranca/tests/data . No caso de outros bancos que já estão implementados na biblioteca BRCobrança https://github.com/kivanio/brcobranca/tree/master é preciso incluir os Códigos CNAB de Instrução e Retorno na pasta https://github.com/OCA/l10n-brazil/tree/12.0/l10n_br_account_payment_order/data/cnab_codes ( os xml_ids que causaram o bug relatado ).

@antoniospneto
Copy link
Contributor

@mbcosta tá bem legal mesmo a implementação, já fiz os testes com o boleto do Itaú, enviei pra banco e deu tudo certo.
Parabéns pelo trabalho e obrigado pelas dicas

@mbcosta
Copy link
Contributor

mbcosta commented Oct 16, 2021

@netosjb um P.S. importante sobre "Tenho bastante interesse no seu módulo"

Apesar de eu ter feito uma parte da implementação do CNAB outras pessoas também contribuíram:

  • Antes de estar aqui isso estava em https://github.com/odoo-brazil/odoo-brazil-banking as primeiras tentativas de integração foram feitas pela KMEE @mileo e outros desenvolvedores de outras empresas, o modulo l10n_br_account_payment_order é uma extração e junção de partes desses módulos, houve um encontro da comunidade em 2017(ou 2016) onde a implementação foi debatida, o que foi decidido é que dentro da localização deveria ter apenas a integração com uma biblioteca externa, para assim ter liberdade de poder escolher diferentes soluções e evitar que localização ficasse sobre-carregada com algo que poderia e seria melhor estar em um repo especifico ( impressão de Boleto e geração ou tratamento de TXT não variam conforme as versões do Odoo são independentes ) e permitir uma integração com outros desenvolvedores que tem interesse em uma biblioteca CNAB mas podem não ter em usar o Odoo, a partir disso foram feitas alterações nos módulos nesse sentido desde a v8.
  • O @rvalyi foi responsável pela escolha do BRCobranca, arquitetura e implementação do API Server https://github.com/akretion/boleto_cnab_api
  • O @renatonlima foi responsável pela arquitetura dentro da localização e validou a parte de conciliação e lançamentos contábeis.
  • Eu acabei executando as especificações e lidando com o problema de falta de padrão dos diferentes CNABs.

O CNAB acaba sendo um assunto extenso basicamente por essa falta de padrão entre eles( o uso de diferentes códigos tanto de Instrução quanto de Retorno), e ainda hoje existem questões em aberto que provavelmente só serão vistas a partir da v14:

  • Os códigos de Instrução e Retorno de outros Bancos que estão implementados no BRCobranca, algo que pode ser feito de forma gradual por ser possível que o usuário cadastre na tela
  • É possível enviar diversos tipos de Instrução de Movimento, hoje só os principais estão implementados Alteração de Data de Vencimento, Valor, solicitação de Protesto, Baixa do Título, e mais alguns que podem ser vistos na aba de Codigos CNAB do Modo de Pagamento, também pode ser visto de forma gradual pois muitos dos códigos não são usados
  • A implementação do CNAB de Pagamento [12.0] TED / DOC / Transferência / Pagamento de Boletos / Pagamento de Impostos através de cnab240 #972, e a possibilidade de usar múltiplos Modos de Pagamento em uma mesma Ordem de Pagamento Feature/cnab multiple payments odoo-brazil/l10n-brazil#112
  • Como tratar os casos de antecipação de Títulos ou mesmo a venda para Factoring
  • Integração com o Banco Inter [NEW] Integração com API do Banco Inter (077) #1035
  • É importante considerar que com o PIX Cobrança o CNAB aos poucos, talvez entre 3 a 5 anos ou menos, acabe deixando de ser usado se tornando algo legado mas por questões de cada empresa algumas ainda podem querer continuar usando.

Portanto apesar de hoje eu estar mais focado em manter e resolver os problemas a implementação do CNAB é resultado do trabalho de várias pessoas e a ideia é que existam mais pessoas para chamar o modulo de "seu" como mantedores para garantir a qualidade mas o modulo pertence a comunidade, com mais pessoas testando, usando e dando retorno sobre os erros a qualidade do modulo acabará sendo maior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants