codes, Cities by state, city lookup • CEP - Postal codes, address lookup via ViaCEP • CPF, CNPJ - Brazilian personal and business ID validation & generation • PIS - Social integration program number validation • CNH - Driver's license validation • RENAVAM - Vehicle registration validation • Título Eleitoral - Voter ID validation & generation • Inscrição Estadual - State registration (IE) by UF • Email - Email format validation • Phone - Brazilian phone number validation (mobile & landline) • Capitalize - Smart capitalization with Portuguese rules • Currency - Brazilian Real (BRL) formatting & parsing • License Plate - Traditional & Mercosul plate validation & conversion • Processo Jurídico - Court case number validation BIBLIOTECA
com clojure ou colaborar com open source -> clojure basico • Mindset clojure • Diferencas entre clojure e clojurescript • Um pouco sobre como foi meu processo de pensar / fazer / organizar a lib
códigos) • Tabela de cidades por estado • Tabelas e pesos para cálculos de DV (CPF, CNPJ, PIS) • Regras por UF da inscrição estadual. Transformar esses dados em json ou outros formatos em .edn e consumir eles.
(123.456.789-09) • 1 digitos verificador(MOD11) com pesos decrescentes a partir de 10 • 2 digito verificador(MOD11) com pesos decrescentes a partir de 11 • nono digito regional (SP: 8, PR: 9, DF: 1)
Valid?: a. Remove a mascara ou valida com regex b. Tamanho(11 digitos) c. CheckSum(DV1 e DV2) Todas validam digito verificador com modulo 11 • Generate: a. Gera 9 numeros aleatorios b. Gera digitos validos por checksum c. Em algumas libs há variação por UF(influencia no 9 digitos do CPF)
9 8 7 6 5 4 3 2 ] RENAVAM: 1 DV com mod 11 com pesos: [3 2 9 8 7 6 5 4 3 2] Resto 0 ou vira DV 0 senao DV = 11 - resto Titulo Eleitoral: DV1 use os 8 primeiros digitos com pesos [2 3 4 5 6 7 8 9] DV2 usa UF + DV1 com pesos [7 8 9]
mascaras) • Aplicar pesos (podem ser fixos, ou algum padrão) • Calcular o resto do modulo (na maior parte das vezes mod11) • Transformar o resto em digito (regras a serem aplicadas)
padrão. - Tudo em clojure são funções. Ate operadores. Entao *, + sao funções que estão sendo passadas no map, reduce - Map: Aplica uma função para todos items de uma lista - Ele multiplica os digitos com os pesos - Reduce: Aplica uma função cumulativa para todos os items - Soma todos os resultados
runtimes Usar funções muito específicas de java provavelmente vão piorar a compatibilidade E pesquisando de fato o babashka nao teria compatibilidade com lib java
clojure separar em funções claras e simples pra poder navegar. • COMPLETO: Cobrir o maximo possivel de features corretamente • BOA QUALIDADE: Testes, code quality, workflows, fmt. • .DOC FIRST: Criar o máximo possível de documentação para facilitar consulta seja por humanos normais querendo entender a logica por tras ou IA.
estilo meio funcional Separação por domínio ou feature Exposição pública da API da lib (lib.rs, __init__.py, index.js) Arquivos focados: validator, formatter, generator
4 linhas Passo a passo do processo deve estar claro em lets legiveis Se a logica começou a ficar um pouco mais complicada separa-se em outro passo em funções auxiliares Se um processo no core ta grande, separar em arquivos especificos.
(is-valid-ddd?) • Celular: Numero pode ser que comeca com 9 e tem 9 digitos dps do DDD valid-mobile-first-number? valid-mobile-length? • Fixo(landline): Comeca com 2,3,4,5 e tem 8 digitos. valid-landline-first-number? valid-landline-length? • (11) 98765-4321 ou 11 98765 4321 ou +55 11 98765-4321
penalização ◦ os pesos são aplicados de forma decrescente a partir de um valor inicial ◦ não basta olhar só pesos; a transformação do resultado também muda via regra ◦ 1 digitos verificadores no final(MOD11) com pesos decrescentes (10 a 2) ◦ [10, 9, 8, 7, 6, 5, 4, 3, 2] • Processo Juridico ◦ Nao segue padrao peso por posicao, usa logica especifica por CNJ, com rearranjo e verificacao de mod ◦ Inscricao Estadual
10 e 11 • Nao e so vetor de pesos, a transformação do resultado muda via regra • Formatos: Linha digitavel, boleto normal, boleto de arrecadacao • Transformações de um pro outro -> barcore -> linha digitavel • Parse de boleto(data validade, banco, valor
dígitos ◦ Vetor de pesos(ex: comeca no 3, decrementa e faz wrap de 1 a 9) ◦ Ponto de reinicio do peso ◦ Qual o modulo ◦ Qual a regra do resto do módulo ◦ Estado q mudou a regra em 99 mas ainda tem q estar válido entao tem duas regras
negocio - Bem detalhados nas funções específicas dos submódulos(Clojars) - Docs explicando regras especificas de validacao de cada documento (sanity check)
clojure separar em funções claras e simples pra poder navegar. • COMPLETO: Cobrir o maximo possivel de features corretamente • BOA QUALIDADE: Testes, code quality, workflows, fmt. • .DOC FIRST: Criar o máximo possível de documentação para facilitar consulta seja por humanos normais querendo entender a logica por tras ou IA.
parte de inscricao estadual ainda pode ficar mais clara / genérica - Lib de JS -> Formatter - Algumas features faltando - Em currency n transforma em dinheiro em “frase” - Alguns geradores de teste de podem ser úteis - Talvez usar esses gerados em testes - Gerar img de boleto - CNPJ não recebe branch como argumento