Git Product home page Git Product logo

cnpjrfb's Introduction

cnpjrfb

Sistema web em PHP usando o usando o Adianti FrameWork para consultar os Dados públicos CNPJ fornecidos pela Receita Federal do Brasil.

A Versão 2.0.0 contem as alterações do modelo de dados de 21/03/2021 feito pela RFB.

Agradecimento para todas as pessoas que contribuíram de forma direta ou indireta para o projeto. Abaixo alguns nomes de destaque, pois o sistema de consulta foi baseado nos scripts de carga de dados das pessoas abaixo. Sem essas pessoas o trabalho seria bem mais difícil:

Visão no Celular

Visão no Tablet

Instalando e rodando

O processo de instalação é simples para a parte PHP. Porém a carga do banco de dados pode ser complicada e muito demorada, levando algumas horas até dias dependendo do seu hardware.

Requisitos

  • PHP 7.4 ou superior, a versão 2.1.0 ou superior funciona no PHP 8.1
  • Banco de Dados Relacional, com a carga dos dados conforme modelo. Funciona nos bancos PostgreSQL, MySQL, MariaDB, SQLite !
  • Linux (Debian 10), pode funcionar no Windows porém não foi testado
  • Aproximadamente 50 GB de espaço livre em disco para a instalação:
    • 5 GB arquivos zip da Receita Federal, que pode ser liberado depois da instalação.
    • 18 GB para arquivos texto descompactados, que pode ser liberado depois da instalação
    • 18 GB para banco de dados. Considerando o PostgreSQL.

Informação sobre o Banco de dados e carga ETL

Tabela Quantidade de linhas Tamanho em MB
empresa 45.811.638
estabelecimento 48.421.619
socios 20.426.417
simples 27.893.923
Total 142.553.597

Intalação separada

Parte 1 - PHP

  1. Ter um servidor PHP 7.4 ou superior. Com o drive PDO do banco relacional desejado e para o SqLite
  2. Configura o PHP conforme orientações do Adianti FrameWork 7.3.0
  3. Copie o conteudo da pasta www/cnjrfb do projeto para o seu servidor PHP.
  4. Verifique se tudo dentro de <caminho servidor>/cnjrfb/ tem permissão de execução do servidor web. Se for Linux (Debian/Ubuntu) com Apache pode executar sudo chown -R www-data:www-data
  5. Abra o sistema em um navegador e verifique se os sistema está funcionando. Existe um pequeno banco em SqLite para demonstrar o funcionamento.

ATENÇÃO!! a função de gerar grafo foi removida temporarimente da versão 2.

Parte 2 - a carga dos dados, no banco relacional !

Agora vem parte demorada !

  • Baixe todos os arquivos do site de receita federal. Para quem está usando Linux tem um script para essa parta projeto/dados_receita/output_files/download_files.sh
  • Se conhece python e deseja usar o PostgreSQL faça os procedimentos https://github.com/aphonsoar/Receita_Federal_do_Brasil_-_Dados_Publicos_CNPJ
  • Se não conhece python pode usar o script PHP para carga no banco
    • na pasta projeto/modelo_banco/ vai encontrar os scripts criação do banco de dados, para os SGBD's: SqLite, MySql, MariaDB e PostgreSQL. Se precisar de um MER tem na pasta projeto/modelo_banco/mysql
    • Altere o arquivo de configuração projeto/www/cargabd/config.php
    • rode o script em modo terminal projeto/www/cargabd/index.php
    • vá descençar !! o processo todo em desktop no win10, i5, 16 ram, PHP 7.4 no wamp com config padrão levaria mais de 30 horas.

ATENÇÃO!! devido o volume de dados crie índices, nas colunas que pretender ter o maior volume de pesquisa. Recomendo criar na coluna cnpj_basico em todas as tabelas

Parte 3 - Configurando o PHP para o banco completo !

  • altera o arquivo <caminho servidor>/cnjrfb/app/config/maindatabase.php para apontar para o novo banco de dados. Veja como em Adianti FrameWork 7.3.0
  • PARA quem criu o banco o DATABASE_SCHEMA altere o arquivo <caminho servidor>/cnjrfb/init.php na linha 33 alterando o valor da constante define('DATABASE_SCHEMA',''); para o valor desjado usando o PONTO para separar SCHEMA.TABELA

Intalação com VirtualBox - NÃO ESTÁ COMPLETO

Abaixo um breve tutorial para quem deseja rodar dentro do VirtualBox.

  1. Instalar o VirtualBox
  2. Baixa o ISO do Debian 10 https://www.debian.org/releases/buster/debian-installer/
  3. Instarlar o Debian 10
  4. Instale virtual guest additional https://averagelinuxuser.com/virtualbox-shared-folder/
    • montar CD do Virtual Box
    • logar como root
    • coloque o usuário principal no sudores /sbin/usermod -aG sudo <NOME_USUARIO>
    • executar apt-get update; apt-get -y install build-essential dkms linux-headers-$(uname -r)
    • rodar sh /media/cdrom/VBoxLinuxAdditions.sh
    • reiniciar a VM
    • colocar usuário no grupo virtual box /sbin/usermod -aG vboxsf <NOME_USUARIO>
    • reiniciar a VM
  5. Se for usar pasta compatilhada no VirtualBox faça o mapeamento
    • copiar <projeto>/www/ para /var/www/html/
    • copiar <projeto>/dados_receita/ para /var/opt/dados_receita/
  6. Se for clonar ou baixar esse projeto
    • copiar a pasta dados_receita para /var/opt/dados_receita/
    • copiar www/cnpjrfb para /var/www/httpd/cnpjrfb/
  7. rodar o script vbox_environment_1.sh
  8. rodar o script vbox_environment_2.sh

Intalação via Docker-compose - NÃO ESTÁ COMPLETO

Existem alguns arquivos em Docker-compose para criar todo o ambiente necessários para rodar tudo que é necessário. A ideia é com um comando o usuário consiga ter tudo funcionando sem muito esforço.

  1. Instale o Docker e Docker-compose
  2. clone o projeto
  3. Abriu um terminal na raiz do projeto
  4. Execute o comando docker-compose build para gerar todo o ambiente.
  5. Execute o comando docker-compose -f docker-compose.yml up -d para rodar o ambiente já configurado. O Docker pretender resolver apenas Parte 1 - PHP e a Parte 2 - Python.
  6. Verificando se a instalação está correta: Abra o sistema em um navegador e verifique se os 3 menus dentre home está funcionando: Empresa, Sócios e CNEA.

cnpjrfb's People

Contributors

bjverde avatar dependabot[bot] avatar ruevers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cnpjrfb's Issues

sqlite3.OperationalError: nu such table: main.empresas Conversão para Sqlite

Boa noite @bjverde

Estou na parte 3 da instalação:

Eu coloquei todos os arquivos dentro de uma pasta que criei chamada download.

Depois executei o comando : C:\wamp64\www\cnpjrfb\app\CNPJ-full> python cnpj.py "download" sqlite "data" --dir

Obs. Tinha um arquivo dentro da pasta "data" do CNPJ_full.db com 56kb que tinha dado erro na criação dos indices.

Aí eu apaguei e comecei de novo, aí deu erro esse diferente, que agora não faço ideia do porque:

image

Joins errados

Os Joins entre empresa e socios estão com algum problema, se pega um cnpj ou nome de empresa nao tras os socios e se pega o nome de socio com varias empresas não pega todas, não consegui identificar no codigo pois não conheço muito bem o framework, mas se usar a base toda, vai perceber varias incosistencias desse tipo.

Performance pessima com o banco de dados completos

Com o banco de dados completos o sistema fica muito, mas muito lento, como dba me disponho a ajudar os desenvolvedores a melhorar isso, vou fazer uns testes com mysql, o que deve resolver o problema, pois geralmente é sql porcaria que vem do framework, mas me disponho a ajudar a melhorar no lite, o que ficaria inviavel e demoraria muito pra solucionar eu tendo que estudar e aprender um framework novo, seria mais fácil eu fazer em laravel que já domino. Mas como gostei do projeto e visual, gostaria de ajudar nessa parte, pois estaria reinventado a roda refazendo tudo em laravel.

Versão do Template + Gerar Planilhas

Salve @bjverde e todo pessoal que ajudou no projeto, primeiramente gostaria de agradecer o esforço de todos!
Depois de dias na raça para conseguir mandar os dados para o postgres (eu nem sabia o que tava fazendo), eu consegui finalmente abastecer a base de dados com os dados atualizados de 25/12, fiquei muito feliz! Me interessei pelo seu projeto e mais um momento de raça, consegui implementar o modelo de consulta.
Porém notei que a versão do Template Adianti Framework disponível no site já está em 7.4, e o código foi desenvolvido na 7.3.
Caso não vejam problema nisso, gostaria de saber se podem disponibilizar a 7.3 para download, ou atualizar o projeto para o template 7.4.
Também quero inserir uma função de leads, já que trabalho com comércio, gostaria de saber se é muito complicado, ou se é possível:
Após a aplicação dos filtros, gerar uma planilha do excel contendo:
|Nome da empresa| Telefone 1| Telefone 2| Telefone 3|
Eu sei que dá para extrair a planilha inteira, porém achei o cruzamento de dados no SQL muito mais rápido, leve e prático que no Excel.
Além disso, eu vi que a quantidade de dados está limitada a 1000 na interface, mas acredito que isso seja fácil de resolver mudando algum arquivo de configuração do processo.

To felizão que estou quase conseguindo o que quero! Muita gratidão a todos! Tamo junto!

Erro de execução

Parabéns pelo trabalho, o que dá muito mais vida ao esforço do Fábio Serpa.
Eu não sou desenvolvedor então, peço desculpas se a questão seja muito básica.
Eu acredito que tenha feito tudo correto, mas as consultas não funcionam e apresentam o erro da imagem.
Saberia me dizer, o que estou fazendo de errado?

Muito obrigado!
erro

mascara pra cnpj

Pesquisas de cnpj não retornam valor nenhm, falta colocar a mascara

 $formDinCnpjField = new TFormDinCnpjField('cnpj',$cnpjLabel);
    $cnpj = $formDinCnpjField->getAdiantiObj();
    $cnpj->setMask('99.999.999/9999-99',true); <------------AQUI

Na de socios e cnae é so adicionar essa linha e funciona, na de empresas não soube como fazer, continua lento e ruim.

Erro could not find driver

Olá amigo, tudo bem?
Consegui concluir todos os passos do tutorial, aparentemente a carga do banco de dados foi concluída com sucesso.
Mas em todas as pesquisas e consultas ao DB que tento fazer pela interface constam erro "could not find driver". O que posso fazer para retificar o erro? Executei novamente o código de carga dos dados, reiniciei o Apache e limpei os dados de navegação e nada.
Uso Windows 10 + Chrome.
Muito Obrigada!

Erro no grafo

Não consigo gerar o grafo n sei se tem algum error de sintese.
file C:\xampp\htdocs\testemarcelo\cnpjrfb\app\control\forms\GeraGrafoForm.php
function debug
class FormDinHelper
type ::
Debug
O sistema n�o pode encontrar o caminho especificado.

Não consigo Rodar os scripts da parte 2

Bom dia! Antes de explicar o meu problema... eu não sou programador e entendo apenas sobre a lógica de programação.

Segui todo o passo a passo fornecido... intalei o aplicativo, configurei conforme instrução e ele roda com a pequena base de dados que você já deixou pre instalada.

Parte 2
Baixei todos os arquivos .zip e salvei no "C:\xampp\htdocs\dados_receita\output_files"
Descompactei e salvei em "C:\xampp\htdocs\dados_receita\output_files"
conforme instrução nod "readme.txt"

Já em "C:\xampp\htdocs\cargabd" abri o CMD e executei o "index.php"

Resultado do arquivo de erro_log:

[07-Jun-2022 02:12:14 Europe/Berlin] PHP Warning: Undefined array key 22 in C:\xampp\htdocs\cargabd\dao\EstabelecimentoDAO.class.php on line 85

Esse erro apresenta na linha 64 até a 92 referente a esse codigo:

public function insert( array $linhaArquivoCsv ) { $values = array( $linhaArquivoCsv[0] , $linhaArquivoCsv[1] , $linhaArquivoCsv[2] , $linhaArquivoCsv[3] , $linhaArquivoCsv[4] , $linhaArquivoCsv[5] , ValidarHelper::validarData($linhaArquivoCsv[6]) , $linhaArquivoCsv[7] , $linhaArquivoCsv[8] , $linhaArquivoCsv[9] , ValidarHelper::validarData($linhaArquivoCsv[10]) , $linhaArquivoCsv[11] , $linhaArquivoCsv[12] , $linhaArquivoCsv[13] , $linhaArquivoCsv[14] , $linhaArquivoCsv[15] , $linhaArquivoCsv[16] , $linhaArquivoCsv[17] , $linhaArquivoCsv[18] , $linhaArquivoCsv[19] , $linhaArquivoCsv[20] , $linhaArquivoCsv[21] , $linhaArquivoCsv[22] , $linhaArquivoCsv[23] , $linhaArquivoCsv[24] , $linhaArquivoCsv[25] , $linhaArquivoCsv[26] , $linhaArquivoCsv[27] , $linhaArquivoCsv[28] , $linhaArquivoCsv[29] );

Fiz alteração conforme tutoriais no google para:

`public function insert( array $linhaArquivoCsv )
{
$values = array(

    cnpj_basico => $linhaArquivoCsv[0]
    ,cnpj_ordem => $linhaArquivoCsv[1]
    ,cnpj_dv => $linhaArquivoCsv[2]
    ,identificador_matriz_filial => $linhaArquivoCsv[3]
    ,nome_fantasia => $linhaArquivoCsv[4]
    ,situacao_cadastral => $linhaArquivoCsv[5]
    ,data_situacao_cadastral => ValidarHelper::validarData($linhaArquivoCsv[6])
    ,motivo_situacao_cadastral => $linhaArquivoCsv[7]
    ,nome_cidade_exterior => $linhaArquivoCsv[8]
    ,pais => $linhaArquivoCsv[9]
    ,data_inicio_atividade => ValidarHelper::validarData($linhaArquivoCsv[10])
    ,cnae_fiscal_principal => $linhaArquivoCsv[11]
    ,cnae_fiscal_secundaria => $linhaArquivoCsv[12]
    ,tipo_logradouro => $linhaArquivoCsv[13]
    ,logradouro => $linhaArquivoCsv[14]
    ,numero => $linhaArquivoCsv[15]
    ,complemento => $linhaArquivoCsv[16]
    ,bairro => $linhaArquivoCsv[17]
    ,cep => $linhaArquivoCsv[18]
    ,uf => $linhaArquivoCsv[19]
    ,municipio => $linhaArquivoCsv[20]
    ,ddd_1 => $linhaArquivoCsv[21]
    ,telefone_1 => $linhaArquivoCsv[22]
    ,ddd_2 => $linhaArquivoCsv[23]
    ,telefone_2 => $linhaArquivoCsv[24]
    ,ddd_fax => $linhaArquivoCsv[25]
    ,fax => $linhaArquivoCsv[26]
    ,correio_eletronico => $linhaArquivoCsv[27]
    ,situacao_especial => $linhaArquivoCsv[28]
    ,data_situacao_especial => $linhaArquivoCsv[29]

                   
     );
    $result = $this->executeSql($sql, $values);
    return true;
}`

rodei novamente e apresentou o seguinte erro:

[07-Jun-2022 03:44:45 Europe/Berlin] PHP Fatal error: Uncaught Error: Undefined constant "codigo" in C:\xampp\htdocs\cargabd\dao\CnaeDAO.class.php:29
Stack trace:
#0 C:\xampp\htdocs\cargabd\controllers\UploadCsv.class.php(30): CnaeDAO->insert(Array)
#1 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(122): UploadCsv->executar()
#2 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(152): Cargabanco->carregaDadosTabela(Object(CnaeDAO), 'C:\xampp\htdocs...')
#3 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(91): Cargabanco->carregaDadosTabelaDoArquivo(Object(CnaeDAO), 'CNAECSV')
#4 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(39): Cargabanco->carregaDados()
#5 C:\xampp\htdocs\cargabd\index.php(22): Cargabanco->executar()
#6 {main}
thrown in C:\xampp\htdocs\cargabd\dao\CnaeDAO.class.php on line 29
[07-Jun-2022 10:25:29 Europe/Berlin] PHP Fatal error: Uncaught Error: Undefined constant "codigo" in C:\xampp\htdocs\cargabd\dao\CnaeDAO.class.php:29
Stack trace:
#0 C:\xampp\htdocs\cargabd\controllers\UploadCsv.class.php(30): CnaeDAO->insert(Array)
#1 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(122): UploadCsv->executar()
#2 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(152): Cargabanco->carregaDadosTabela(Object(CnaeDAO), 'C:\xampp\htdocs...')
#3 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(91): Cargabanco->carregaDadosTabelaDoArquivo(Object(CnaeDAO), 'CNAECSV')
#4 C:\xampp\htdocs\cargabd\controllers\Cargabanco.class.php(39): Cargabanco->carregaDados()
#5 C:\xampp\htdocs\cargabd\index.php(22): Cargabanco->executar()
#6 {main}
thrown in C:\xampp\htdocs\cargabd\dao\CnaeDAO.class.php on line 29

Não consigo prosseguir dessa parte e abastecer a base de dados mysql na XAMPP.

Desde já agradeço pela sua boa vontade de disponibilizar esse programa para nós.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.