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

Arquitetura da biblioteca #10

Open
renatonlima opened this issue Sep 18, 2019 · 3 comments
Open

Arquitetura da biblioteca #10

renatonlima opened this issue Sep 18, 2019 · 3 comments
Labels
enhancement New feature or request

Comments

@renatonlima
Copy link
Member

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:

  • Implementar funções de validações de números de documentos existentes no Brasil como: CPF, CNPJ, IE, PIS, Chave de NF-e, Chave de CT-e e etc.

  • Implementar funções de formatação quando existente dos números dos documentos descritos acima.

Proposta de estrutura da Lib

  • erpbrasil.base/fiscal - Pasta contendo funções fiscais:

    • ie.py: Inscrição Estadual;
    • cpf_cnpj.py: CPF / CNPJ;
    • pis.py: PIS/PASEP;
    • nfe.py: NF-e (Funções para gerar chave e formatar chave e etc);
    • cte.py: CT-e (Funções para gerar chave e formatar chave e etc);
    • sat.py: SAT (Funções para gerar chave e formatar chave e etc).
  • erpbrasil.base:

    • util.py: Funções comum usada para a validação em geral como o calculo do modulo11 modulo10, remoção de pontuação e outras funções auxiliares;
    • excecoes.py: Contendo classes de exceções da lib.
  • erpbrasil.base/ibge:

    • estado.py: (Contendo constantes de siglas de UFs e Número dos estados, validação de numeros e sigals.
  • erpbrasil.base/correios:

    • cep.py: Contento funções de validação de CEP e formatação de CEP.
  • erpbrasil.base/financeiro:

    • cnab.py: Contendo funções para a geração do nosso número para cada banco.

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

@renatonlima renatonlima added the enhancement New feature or request label Sep 18, 2019
@hendrixcosta
Copy link
Collaborator

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
Copy link
Member

rvalyi commented Sep 19, 2019

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
Copy link
Member Author

@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.

@mileo mileo pinned this issue Apr 9, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants