Busca CNPJ #235
Replies: 28 comments
-
Acho bacana essa sugestão e até onde sei a receita não tem uma API para isso, e só permitem consultar um CNPJ colocando um captcha Pelo que eu me lembre, eles lançam uma vez a cada três meses (ou algo do tipo) um arquivo contendo os CNPJs cadastrados com informações extras. Vou até baixar o arquivo para dar uma olhada depois, mas acho que uma solução possível (mas não sei o quão viável é, devido à necessidade de espaço/db no servidor), ter algum endpoint que possa ser batido e o servidor baixar, descompactar o arquivo, decodificar e importar esses dados, e outro endpoint para consultas. Edit: Se eu conseguir evoluir em algo eu abro um PR com essa sugestão |
Beta Was this translation helpful? Give feedback.
-
Fazer um script que baixe isso a cada trimeste quando a Receita atualizar, geraria também um histórico ao longo do tempo. Isso porque acredito que a base não seja estática. Se a empresa mudou alguma informação cadastral, essa mudança ficaria registrada nesse histórico. Quanto à questão de espaço, não sei se o backend que vocês estão utilizando é suficiente e aceita algum banco de dados relacional, pois a base realmente é grande. A ideia é muito boa e facilitaria as aplicações a implementarem alguma funcionalidade que exige dados a respeito de um CNPJ. Caso não existisse, todos os desenvolvedores teriam de fazer um script para descompactar, criar o banco e realizar as consultas. Um retrabalho considerável. |
Beta Was this translation helpful? Give feedback.
-
Eu uso esse serviço a alguns meses. Não necessita captcha. Exemplo de retorno
|
Beta Was this translation helpful? Give feedback.
-
Fiz exatamente o processo de baixar os 20 arquivos, junta-los e transforma-los num CSV GIGANTE! (~12Gb), depois de algumas tentativas de importar o CSV para o MySQL (Escolha predefinida pela empresa, não me culpem se existe solução melhor), o tamanho acabou ficando em 9,9Gb + indexes. O Repo que faz a junção dos arquivos é esse: Também trabalhei num projeto que fazia o scrapping do site da receita, mostrando o captcha para o usuário resolver. Me disponho a colaborar nessa API, se alguém ja estiver fazendo algo. |
Beta Was this translation helpful? Give feedback.
-
Index em um campo de texto em um banco relacional creio que mantenha um consumo razoavel no servidor do banco. Olhando este cenario. Teria alguma possibilidade de fragmentar as informações e hospeda-las em cdn, com index em codigo para ser consumido? ou to falando besteira? |
Beta Was this translation helpful? Give feedback.
-
Muito interessante, mas em caso de atualização dos dados da receita como fica? Acredito que a disponibilização dos dados por ela é feita pós a atualização por requisição por ela. Seria interessante pós uma requisição ser feita, responder com o que está na base de dados, mas agendar no backend uma solicitação para verificação em caso de atualizado, desse modo se tenta atualizar o que está sendo requisitado. |
Beta Was this translation helpful? Give feedback.
-
@farukaf Não entendi bem sua ideia, pois CDN, até onde sei, não serve para BD. Acho que querendo ou não, vamos precisar de um banco com no min 10gb (se não fizermos o versionamento de alterações da empresa). |
Beta Was this translation helpful? Give feedback.
-
@Juloko Como a receita atualiza esses 20 arquivos a cada 3 meses, temos que fazer o processo completo a cada atualização. Mas existe um limbo ai no meio, pois empresas alteradas ou abertas desde a ultima atualização (no máximo 3 meses), não existirão no BD, e portanto, teriamos que fazer o scrapping, com o usuario preenchendo o captcha. Quanto a cada requisição, solicitar que faça o scrapping, teríamos que burlar o captcha, pra que o processo seja automático. |
Beta Was this translation helpful? Give feedback.
-
Burlar o capcha não me parece uma boa idéia, se ele está lá é porque alguém quer segurança, alguém paga uma infra ali por trás e quer que apenas os usuários humanos passem... Julgo justo e acho que tentar burlar é algo que não deveria ser uma opção de caminho. Quanto a CDN, não cacheia bases de dados, mas cacheia respostas de APIs, e se você usar com estratégias de stales while revalidade, que é o que citou, ela vai responder na hora com o que tem em cache porém estará agendada para que aquele cache expire e ela revalide, mas o user sempre consome do cache o que da uma latência baixíssima. Isto a Vercel e o Next fazem para nós já, o projeto atual na busca do cep já usa o stale while revalidade da vercel. @filipedeschamps quem vai saber falar aqui, mas creio que a ideia não é ter uma base de dados neste projeto, mas sim servir como um centralizador/agregador, uma interface e um cache para as apis mais úteis e utilizadas no Brasil. Acredito que é assim a busca do CEP, fazemos a busca nos correios, a resposta fica cacheada aqui, a primeira requisição de certo endereço levará um pouco a mais, as próximas terão latência baixíssima pois virão do cache do next/vercel. Abraço! |
Beta Was this translation helpful? Give feedback.
-
O correto é um banco de dados. Relacional ou não. Mas já não poderia ir utilizando o receitaws até que desenvolva outra opção? |
Beta Was this translation helpful? Give feedback.
-
Então a melhor opção (1) que temos até agora é consultar a ReceitaWS como os módulos existentes do BrasilAPI já faz. Além disso podemos usar o módulo do @biutas (2) para consultar o próprio site da receita, mas aí teria o captcha. Caso ele fosse quebrado, essa seria a melhor opção. Por fim, essa ideia de baixar o ZIP da Receita (3) o @biutas também já fez em Python. Daí podemos deixar em standby até alguma sugestão de backend pra armazenar o banco surgir. Como o @farukaf disse, podemos implementar a opção (1) já que é a mais viável. Seguindo para opção (2), e por fim a (3) caso encontrassemos uma solução para backend. |
Beta Was this translation helpful? Give feedback.
-
Concordo que burlar captcha não é legal, da mesma forma que a receita WS tem limite de consulta de 3/minuto. Teríamos que ver qual a orientação, se podemos ter base de dados no projeto. |
Beta Was this translation helpful? Give feedback.
-
Eu sei que a ideia é ser uma coisa independente, mas acredito se alguém conhecer pessoas envolvidas nesses orgãos governamentais, eles talvez proveriam uma maneira mais fácil de realizar essas funções, ou até mesmo façam propaganda dessa solução para o uso mais abrangente. |
Beta Was this translation helpful? Give feedback.
-
Vou fazer um passo-a-passo do que acho que seria interessante: Passo 1 - Baixar os arquivos da receita de vários gb conforme comentaram acima Passo 2- Criar um scrpit ETL (Extract, transform and load) para:
Os dados poderiam ser salvos em um serviço de armazenamento como o S3 por exemplo. Passo 3 - (opcional) - automatizar o download os arquivos e executar o script ETL. Mas de início pode ser feito de forma manual mesmo, já que os dados são disponibilizados a cada 3 meses. Passo 5 - Ao fazer uma requisição para servidor.com/api/cnpj/numero-do-cnpj.json será retornado o conteúdo do arquivo, sem precisar de um banco de dados, com custo computacional quase zero. E ainda com o beneficio de aproveitar a infraestrutura de cache do backend. |
Beta Was this translation helpful? Give feedback.
-
@ivanmonteiro Foi o que eu comentei anteriormente... de uma forma menos didatica... |
Beta Was this translation helpful? Give feedback.
-
Não só é viável como o índice de pacotes do Rust é armazenado assim, em formato de árvore, no GitHub |
Beta Was this translation helpful? Give feedback.
-
@farukaf seria inviável para clonar e trabalhar com este tanto de arquivos no repositório, se fosse para o lado de bases de dados o redis seria muito legal por ser chave valor, bateria qualquer base relacional ou não... mas este caminho de usar jsons seria ótimo mesmo, até melhor, encapsular em uma api onde retornaríamos se não encontrasse seria legal. Mas aqui no GH acho que seria bem ruim, o S3 teria custo, só se a Vercel tiver storage lá também e topar colocar lá, já que são sponsor oficial mesmo hehe Ou termos um repositório a parte para usar de banco de dados destes jsons... |
Beta Was this translation helpful? Give feedback.
-
Quanto ao Github acho que seria complicado principalmente no quanto vai demorar para fazer o primeiro push e as atuailizações futuras. Apesar de não imporem limites, fora o tamanho do arquivo que é no máximo 100mb, eles recomendam que o repositório tenha menos de 1gb para não sobrecarregar os servidores do Github.
Aparentemente o storage da Vercel é bem limitado (limite de 16.000 arquivos). Quanto a um redis acho que poderia ser legal, mas também tem o problema do custo de manter essa infraestrutura... |
Beta Was this translation helpful? Give feedback.
-
O índice de pacotes do Rust possui "somente" Se conseguissemos dividir esses CNPJs em 4096 pastas diferentes, teríamos algo em torno de 10 mil arquivos por pasta, o que é um bom número para um sistema de arquivos. O script ETL poderia alterar o JSON somente das empresas que tiveram algum dado modificado. O primeiro commit seria de 22 GB, e os seguintes talvez 10% do tamanho. |
Beta Was this translation helpful? Give feedback.
-
Da para ser utilizado alguma estrutura de compactação. Basta criar uma prova de conceito. E realizar alguns testes... |
Beta Was this translation helpful? Give feedback.
-
Opa, não pensei que iria render tanto hehe. Acredito que o mais simples de se fazer, é criar um subprojeto para o CNPJ onde nós mantemos uma base no tipo Receitaws, porem tem custos para manter isso. Uma saída seria cobrar, para manter o custo, claro que sem lucros. E como contrapartida para quem pagasse por nossa base de dados, liberaria histórico de alteração e outros tipos de consultas. Fazendo isso já teríamos o acesso a API pelo BrasilApi sem limite de consultas. |
Beta Was this translation helpful? Give feedback.
-
@guilhermelpp Gostei da sua ideia, já que o projeto não prevê uma base de dados, poderiamos criar a nossa API, cobra-la para manter, e então colocar aqui no BrasilAPI. Alguém teria noção de custo para manter essa infra? AWS, GCP, Azure? |
Beta Was this translation helpful? Give feedback.
-
https://aws.amazon.com/pt/dynamodb/?did=ft_card&trk=ft_card DynamoDB da AWS diz ser gratuito até 25gb. Nuunca trabalhei com esse DB. Ele atende o que precisamos? |
Beta Was this translation helpful? Give feedback.
-
É uma boa ideia saber quem vai querer usar essa API, porque corre-se o risco de gastar um tempo fazendo todo o sistema e no final, não conseguir alcançar o público. Isto é, eles vão preferir continuar pagando o concorrente que eles já conhecem e confiam. Precisamos saber quanto a ReceitaWS cobra pelo uso da API deles e se a nossa tem capacidade de ser tão boa quanto. As vezes eles mesmo podem ter algum recurso mais elaborado para obter informações precisas e atualizadas das empresas. Esses são alguns pontos importantes a levantar porque algum investimento será preciso pra manter a base. |
Beta Was this translation helpful? Give feedback.
-
Exato, sei que é possível obter os dados em outros orgãos, pois algumas empresas fornecem "quais empresas abriram ontem", mas desconheço onde busca essa info. |
Beta Was this translation helpful? Give feedback.
-
@farukaf Se for para o lado da AWS não precisa ser o dynamo, usem o RDS onde você tera free tier em mysql, postgres e diversos outros bancos. Quanto a api de início indo pela AWS usaria lambda function onde teria 1 milhão de lambdas executadas sem custo. Já tem banco de dados e sistema online processando 1 milhão de requests sem custo, passando de 1 milhão de requests suponho que o projeto já terá como se manter bem fora da camada free tier. Apenas a questão da base de dados, se a api será para busca do CNPJ, e é um dado que tem que ser inteiro, eu iria de Redis, com certeza ele baterá qualquer banco relacional e até o no sql. Porém pode ser que de início ele não seja viável por custos, mas que também são baixos. |
Beta Was this translation helpful? Give feedback.
-
@wilsonneto-dev o tier gratuido do RDS é de 20gb por 12 meses... mas é uma opção... o ideal seria uma solução gratuita até conseguir esse apoio financeiro. |
Beta Was this translation helpful? Give feedback.
-
@guilhermelpp , essa rota foi implementada https://brasilapi.com.br/docs#tag/CNPJ |
Beta Was this translation helpful? Give feedback.
-
Olá Pessoal, essa é uma das minhas primeiras Issues no github, então desculpe se cometer algum erro. Programação para mim é um hobbie, já que atuo como Engenheiro Civil.
Vamos ao que interessa, acredito que a API tenha um proposito de produtividade no final das contas, não só para o programador mas também para o usuário que utilizar o sistema. E para mim sempre foi uma coisa muito chata cadastrar empresas. E a chateação aumenta, quando vai no site da receita e digita o CNPJ e todos dados aparecem (não sei se eles liberam alguma API, nunca consegui achar nada), então acho que seria algo útil uma implementação onde digita o CNPJ e os dados principais são retornados.
Ah e parabéns pela iniciativa, vou tentar ajudar também. Bom que me ajuda nos meus estudos de javascript e nodeJS.
Beta Was this translation helpful? Give feedback.
All reactions