fidelisrafael / brazilian_documents

Coleção de validadores e geradores para documentos oficiais brasileiros, como: Inscrição Estadual, CPF, CNPJ.
MIT License
74 stars 10 forks source link

A validação de dígitos iniciais é realmente necessária? #11

Open neilvcarvalho opened 3 years ago

neilvcarvalho commented 3 years ago

Opa, Rafael, beleza?

Notei que todos os PRs que eu submeti aqui foram depois que encontrei algum caso real em que os dígitos iniciais fugiam dos definidos no código. Esses casos possuem condicionais nos testes compartilhados entre todos os estados, pois a maioria tem definido uma única sequência de dígitos.

Isso faz sentido em alguns estados que usam os primeiros dígitos como o código do estado. AL, por exemplo, define que todos começam com 24: http://www.sintegra.gov.br/Cad_Estados/cad_AL.html. Sergipe, no entanto, apesar de todos os exemplos que encontrei começarem com 27 (que pode ser o código do estado, não sei), não explicita isso nas regras: http://www.sintegra.gov.br/Cad_Estados/cad_AL.html

Daí pergunto: faz sentido a gem limitar a dígitos específicos, se a documentação do site do Sintegra não explicita isso? E tenho minhas dúvidas até sobre os que explicitam, já que, eventualmente, eles passam a usar outros dígitos, conforme novas empresas são abertas.

fidelisrafael commented 3 years ago

Opa @neilvilela tudo bom? Desculpa a demora pra responder aqui, final de ano é fogo!

Mas então, eu não sei exatamente se isso é uma boa ideia, pois a documentação do Sintegra é muito ruim, eles mesmos não deixam claras as regras (e elas parecem existir).

Quando estava desenvolvendo a versão inicial, lembro de ter lido alguns posts em foruns para poder entender melhor, e é realmente muito precária essas direções que o Sintegra tem, embora na maioria das páginas eles tenham essas informações dos digitos iniciais;

Mas eu acho que se tivermos uma POC para analizar, podemos decidir melhor, agradeço seu interesse a ajuda no projeto @neilvilela, sempre existem melhorias possiveis e a gente vai descobrindo como melhorar.

PS: Eu pensava na epoca em uma feature tipo BRDocuments::IE.scan(number) que receberia um IE de qualquer estado do Brasil e poderia retornar algo como:

puts BRDocuments::IE.scan("24.885944-7")
# { state: "AL", document_number: "24.885944-7", is_valid: true }

Algo assim, mas na prático não creio que isso seja realmente utilizado, já que IE está sempre associada com um estado, porém seria possivel "descobrir" qual estado determinada IE pertence caso você não saiba o estado, o que parece bacana, mas inutil na pratica hahaha!

neilvcarvalho commented 3 years ago

É... Acho que esse scan seria bem bacana, mas cada vez menos praticável, já que tem muito overlap entre esses dígitos iniciais (quando não documentados). Só os que começam com o código do estado têm mais chances de acertar :(

fidelisrafael commented 3 years ago

Sim, mas sempre há formas de melhorar, se tu tiver alguma sugestão ou quiser discutir implementações pode enviar, minha ideia é manter a lib atualizada e usavel, realmente não cobre 100% dos casos do Brasil mas acredito que agora é ir expandindo esses casos (Você já encontrou alguma documentação super clara sobre esses códigos em algum lugar?)