erpbrasil / erpbrasil.base

MIT License
14 stars 15 forks source link

Arquitetura da biblioteca #10

Open renatonlima opened 4 years ago

renatonlima commented 4 years ago

Olá pessoal,

Recentemente eu comecei a refatorar e a implementar algumas melhorias na lib, pensando nisso eu gostaria de fazer algumas propostas para a arquitetura da lib, hoje devida a extração das funções do módulo l10n_br_base do Odoo acabou mantendo a mesma estrutura dos arquivos e acabou ficando não muito organizado, pensando na futura expansão da lib, descrevi dois pontos básicos:

Finalidade da lib

É importante definirmos um escopo para o objetivo da lib, isso é importante para a arquitetura da lib e futuramente em sua evolução, inicialmente eu vejo este escopo:

Proposta de estrutura da Lib

Gostaria de saber a opinião de vocês e sugestões

hendrixcosta commented 4 years ago

cep.py - Não ficaria melhor na pyceps (https://github.com/mstuttgart/pycep-correios)?

cnab.py: Não seria melhor uma biblioteca separada para geração de boletos e do "nosso número"?

rvalyi commented 4 years ago

Ola, eu nao pretendo responder aqui a tudo o que o @renatonlima falou. Mas apenas dizer que eu concordo com o @hendrixcosta nas duas colocaçoes que ele acabou de fazer: botar cep.py et cnap.py em outras sub-bibliotecas.

Vamos aprender com os error da lib pysped que era monolitica, queria fazer tudo e fazia muita coisa mal (e algumas coisas boas), e acabou nao mantida por terceiros e ate rejetada pela Akretion por dar medo nessas partes que a gente não pretendia usar mas que daria trabalho de manter. Sobre o CNAB especificamente, a Akretion fica feliz com https://github.com/kivanio/brcobranca e https://github.com/akretion/boleto_cnab_api e não pretende investir um puto em re-fazer isso em Python. Entendo que em alguns casos, por examplo para ter desempenho melhor, alguém pode querer faze-lo. Mas obrigar o pessoal a ter o custo da manutenção disso no erpbrasil.base tb seria sacanagem e abalaria a adoção da biblioteca.

renatonlima commented 4 years ago

@hendrixcosta,

Eu não havia visto porque fizemos a troca para o pycep recentemente mas já tem uma função para formatar CEPs:

https://github.com/mstuttgart/pycep-correios/blob/develop/pycep_correios/cliente.py#L77

E outra função para validar:

https://github.com/mstuttgart/pycep-correios/blob/develop/pycep_correios/cliente.py#L96

Então neste caso realmente não faz sentido utilizamos a função format_zipcode atualmente no erpbrasil.base.misc:

https://github.com/erpbrasil/erpbrasil.base/blob/master/src/erpbrasil/base/misc.py#L23

Podemos remove-la do erpbrasil.base.

Sobre as funções do erpbrasil.base/financeiro, eu tinha pensado em ter as funções de validação do nosso número e da linha digitável. Mas também concordo que poderíamos usar usar a lib pyboleto ou pyboleto, eu sei que uma destas libs tem a função de geração do nosso número mas não sei se tem as funções de formatação e validação do nosso número e da linha digitável.

Também existia algumas funções de validação de número de cartão de crédito e isso não deveria ficar no pyboleto ou pycnab.

@rvalyi

Por isso é importante deixar bem definido a finalidade da lib para não correr o risco de com o tempo ser implementadas muitas funcionalidades fora do objeto e deixando a lib com dependências desnecessárias. Hoje a lib erpbrasil.base deve conter funções de validação e formatação dos números de documentos, pois estas funções são usadas em vários pontos, por exemplo, é usado a validação do CPF, no CRM, no financeiro, no fiscal e etc.