Coder Social home page Coder Social logo

fabioserpa / cnpj-full Goto Github PK

View Code? Open in Web Editor NEW
478.0 50.0 192.0 410 KB

Utilitário em Python para ler os dados públicos do CNPJ disponibilizados pela Receita Federal e carregá-los em arquivos csv ou sqlite para fácil consumo. Também permite consultas com visualização interativa ou exportação para formatos diversos.

License: GNU General Public License v3.0

Python 83.04% HTML 16.91% Shell 0.05%

cnpj-full's Introduction

Dados Públicos CNPJ - Conversão para CSV/SQLITE e Consultas

Utilitário em Python para carregar a base completa de CNPJ disponibilizada pela Receita Federal (aprox. 85 GB) e transformá-la em arquivos csv ou sqlite para fácil consumo. Processa dados de empresas, sócios e CNAEs. Possibilita também fazer consultas de empresas ou sócios e gravar resultados em CSV ou em grafo de relacionamentos.

Grafo

ATENÇÃO!

A partir de março de 2021, a Receita Federal mudou completamente a forma de disponibilizar os dados públicos do CNPJ. O script de carga deste repositório ainda não foi atualizado para refletir estas alterações, e portanto não funcionará para os novos arquivos disponibilizados a partir desta data.

A boa notícia é que agora os arquivos já estão sendo disponibilizados pela RF em formato CSV, o que, dependendo do seu caso, pode até dispensar o uso deste script.

Os scripts deste repositório no entanto ainda assim serão atualizados para manter funcional a conversão dos dados para formato SQLite, assim como os scripts de consulta.

Conversão para CSV ou SQLITE

A forma recomendada de fazer a carga atualmente é: salvar os múltiplos arquivos zip em uma pasta dedicada e executar:

python3 cnpj.py PASTA_COM_ZIPS sqlite PASTA_DE_SAIDA --dir

ou

python3 cnpj.py PASTA_COM_ZIPS csv PASTA_DE_SAIDA --dir

Configurações prévias

Para executar o script, é necessário que seu sistema contenha essas instalações:

Python

Versão mais atual, caso não consiga executar usando somente o comando python. Para isso, execute no terminal (se estiver usando sistemas GNU/Linux derivados do Debian):

$ sudo apt upgrade python3

Gerenciador de Pacotes do Python (Pip)

A versão mais atual. Se estiver usando Python3:

$ python3 -m pip install --upgrade pip

Instalar Pré-Requisitos:

$ pip install -r requirements.txt

Esse comando instalará as seguintes bibliotecas:

Pandas

A versão mais atual da biblioteca Pandas para Python.

NumPy

A princípio, não é necessário. O script neste repositório usa funções da biblioteca Pandas, que utiliza uma extensão de NumPy chamada NumExpr. Então, caso seu terminal retorne erros por ausência do pacote NumPy, esse é o motivo.

NumExpr

O Pandas usa. É uma extensão que melhora a velocidade de análise no pacote NumPy.

Antes de executar

Atente para o fato de que o arquivo de dados disponibilizado pela RF é muito grande. São aprox. 85 GB de arquivo texto descomprimido. Portanto, é bastante provável que seu computador dedique tempo considerável a essa execução, algo em torno de 2 ou 3 horas.

O script informa no terminal o parcial do processamento, mostrando o "bloco" (conjunto parcial) de linhas que está sendo convertido. Cada bloco contempla 100.000 linhas (registros) da base de dados.

Tamanho das tabelas geradas (versão atualizada em 26/03/2019)

Tabela Tamanho do arquivo Quantidade de linhas
Empresas Aprox. 12gb 40.184.161
CNAES secundárias 1,18gb 45.321.058 *
Sócios 1,71gb 18.613.392

* Observar que esta quantidade de linhas não corresponde ao número de linhas referentes a CNAEs secundários no arquivo original, uma vez que no original todos os CNAEs secundários de uma determinada empresa estão na mesma linha, enquanto na versão convertida é gerada uma linha para cada CNAE secundário associado à empresa.

Como executar

python3 cnpj.py <caminho entrada> <tipo de saída:csv ou sqlite> <pasta saída> [--dir] [--noindex]

Caso a base seja disponibilizada em múltiplos arquivos zip, salvar em uma pasta, usá-la como <caminho entrada> e especificar o argumento --dir.

O argumento opcional --noindex, aplicável somente para saída sqlite, indica que não devem ser gerados índices automaticamente. A criação de índices é muito recomendada e essencial para a funcionalidade de consultas.

Exemplos

python3 cnpj.py "data\F.K032001K.D90308" sqlite "data"

python3 cnpj.py "data" sqlite "output" --dir

python3 cnpj.py "data\DADOS_ABERTOS_CNPJ.zip" sqlite "data" --noindex

Separando arquivos CSV por estado ou municipio

Após ter gerado o arquivo empresas.csv, é possível dividir por estado, ou por cidade

Requisitos

$ python3 -m pip install python-dotenv

Para ambos os scripts é necessário informar a localização do arquivo empresas.csv no arquivo .env

FILES_LOCATION=/media/Arquivos

Após isso basta executar os scripts:

Para separar por UF:

python3 separar_csv_por_uf.py

Para separar por cidade:

python3 separar_csv_por_cidade.py

Consultas

Novidade! Agora é possível fazer consultas que além de trazer empresas e sócios específicos, traz a rede de relacionamentos na profundidade desejada. Os resultados podem ser salvos em formato tabular e/ou em formatos variados de grafos de relacionamento, que podem ser visualizados de forma interativa no navegador ou abertos em softwares que suportem os formatos especificados, como o Gephi.

Essa funcionalidade é exclusiva para a base sqlite gerada usando o cnpj.py. No entanto, pode ser relativamente simples adaptar o código para funcionar com outros SGBDs ou arquivos sqlite gerados usando outra nomenclatura.

Configurações prévias

Para executar o script de consulta, é necessário que seu sistema contenha as instalações especificadas acima e, além disso, é necessário:

Networkx 2.x (pacote de criação, manipulação e análise de grafos/redes)

É IMPRESCINDÍVEL que índices sejam criados nos campos cnpj das tabelas empresas e socios, e nos campos nome_socio e cnpj_cpf_socio da tabela socios. Do contrário, as consultas se tornam insuportavelmente lentas ou até mesmo inviáveis dependendo da profundidade. O script de carga (cnpj.py) foi atualizado para opcionalmente gerar os índices mais importantes automaticamente ao final da carga.

Instruções Básicas:

Uso: python consulta.py <tipo consulta> <item|arquivo input> <caminho output> [--base <arquivo sqlite>] [--nivel <int>] [--csv] [--graphml] [--gexf] [--viz]

Argumentos obrigatórios:

<tipo consulta>: Especifica o tipo de item a ser procurado. Opções:

  • cnpj: Busca empresa pelo número do CNPJ.

  • nome_socio: Busca sócios pelo nome completo.

  • cpf: Busca sócios pelo número do CPF. (Pode trazer vários sócios, uma vez que apenas seis dígitos são fornecidos pela RF)

  • cpf_nome: Busca sócios pelo número do CPF seguido (sem espaço) do nome completo.

  • file: Arquivo que contem mais de um item a ser buscado. Caso o arquivo tenha apenas um dado por linha, será tratado como número de CNPJ. Caso o arquivo tenha mais de um dado separado por ;, o primeiro indica um dos tipos acima, e o segundo o item a ser buscado. (outro separador pode ser definido em SEP_CSV no config.py)

<item|arquivo input>: Item a ser procurado, de acordo com <tipo consulta>.

<caminho output>: Pasta onde serão salvos os arquivos gerados.

Argumentos opcionais:

--base: Especifica o arquivo do banco de dados de CNPJ em formato sqlite. Caso não seja especificado, usa o PATH_BD definido no config.py

--nivel: Especifica a profundidade da consulta em número de "pulos". Exemplo: Caso seja especificado --nivel 1, busca o item e as empresas ou pessoas diretamente relacionadas. Caso não seja especificado, usa o NIVEL_MAX_DEFAULT no config.py

--csv: Para gerar o resultado em arquivos csv. São gerados dois arquivos, pessoas.csv e vinculos.csv.

--graphml: Para gerar o resultado em grafo no formato GRAPHML.

--gexf: Para gerar o resultado em grafo no formato GEXF. Pode ser aberto com o software Gephi

--viz: Para gerar um HTML interativo com o resultado em grafo. Para abrir automaticamente o navegador, informar o PATH_NAVEGADOR no config.py. Do contrário, basta abrir o arquivo grafo.html gerado em <caminho output> com o navegador de preferência.

Exemplos:

python consulta.py cnpj 00000000000191 folder --nivel 1 --viz

python consulta.py file data/input.csv pasta --csv --gexf

python consulta.py nome_socio "FULANO SICRANO" output --graphml --viz

Atenção:

Especifique o nível de profundidade da rede com moderação, uma vez que, dependendo das empresas ou pessoas buscadas, a quantidade de relacionados pode crescer exponencialmente, atingindo facilmente centenas ou milhares de registros, o que resulta na execução intensiva de queries no BD. Nível 3 é um bom parâmetro.

Configuração

No config.py, as seguintes configurações são definidas:

PATH_BD: Caminho para o arquivo de banco de dados da Receita Federal convertido em sqlite. Pode ser sobrescrito em tempo de execução usando o argumento --base.

NIVEL_MAX_DEFAULT: Nível máximo default para a profundidade das buscas. Pode ser sobrescrito em tempo de execução usando o argumento --nivel <num>

PATH_NAVEGADOR: Caminho completo para o executável do navegador preferido se desejar que a visualização seja automaticamente apresentada ao final da execução da consulta (se argumento --viz for utilizado). Caso vazio, apenas gera o html na pasta de saída.

SEP_CSV: Especifica o separador a ser considerado tanto para os arquivos csv de saída (caso seja utilizado o argumento --csv), quanto para o arquivo de entrada no caso do uso de file como <tipo consulta>.

COLUNAS_CSV: Especifica a lista de colunas a serem incluídas no arquivo pessoas.csv quando usado o argumento --csv.

QUALIFICACOES: Especifica a lista de qualificações de sócios a serem consideradas na busca dos relacionamentos. Caso TODAS, qualquer relação de sociedade listada no BD é considerada.

Trabalhando diretamente com a classe RedeCNPJ

O objetivo do consulta.py é disponibilizar uma interface por linha de comando para facilitar a extração/visualização da rede de relacionamentos de empresas e pessoas a partir da base de dados da RF convertida em sqlite. Ele é uma "casca" para a classe RedeCNPJ definida em rede_cnpj.py, onde fica a inteligência de navegação no BD e criação de rede/grafo usando o pacote networkx, além de métodos para conversão em DataFrames pandas e formatos diversos de representação de estruturas em grafo.

Em seu projeto você pode instanciar diretamente a RedeCNPJ especificando a conexão ao BD e o nível máximo de navegação nos relacionamentos, usar os métodos de inserção de empresas/pessoas para montar a rede (sem se preocupar com a navegação para as relacionadas), e usar os métodos para conversão da rede em DataFrame ou formatos diversos de representação de grafos.

E dessa forma você pode também usar o grafo gerado (atributo "G" da classe) para incrementá-lo a partir de outras fontes de dados de interesse para seu caso de uso e usar os diversos algoritmos disponibilizados pela biblioteca networkx, como por exemplo detecção de ciclos.

TO DO

  • Aprimorar a documentação do código (principalmente da classe RedeCNPJ) e as instruções neste README.

cnpj-full's People

Contributors

anthraxisbr avatar fabioserpa avatar franklinbaldo avatar igorasantos avatar marcosconceicao 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  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  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

cnpj-full's Issues

Como contribuir?

Gostaria de contribuir, por exemplo, tenho um script q baixa os CSVs direto da RFB e outras coisas a serem adicionadas. Como faço pra ajudar?

sqlite3.OperationalError: no such table: main.empresas

Tentando rodar em virtualenv com python-3.7 e pandas-0.24.2 instalados:

$ python3 cnpj.py "/path/to/CNPJ" sqlite "/path/to/data" --dir
Iniciando processamento em 2019-06-19 09:55:55.282829

Conversao concluida. Validando quantidades:
Total de registros de empresas: 0 ok
Total de registros de socios: 0 ok
Total de registros de CNAEs: 0 ok

Arquivo SQLITE gerado: /home/bcbernardo/Dados/RFB/CNPJ/20190515/CNPJ_full.db
OBS: Uso de índices altamente recomendado!
              

Criando índices...
Essa operaçao pode levar vários minutos.
    
Traceback (most recent call last):
  File "cnpj.py", line 441, in <module>
    main()
  File "cnpj.py", line 436, in main
    cnpj_index(output_path)
  File "cnpj.py", line 374, in cnpj_index
    cursorBD.execute(sql_stmt)
sqlite3.OperationalError: no such table: main.empresas

Pergunto: o esquema do banco de dados para onde serão carregados os registros já precisa estar definido antes de rodar o script?

Download dos arquivos

Não seria interessante que o programa fizesse o download dos arquivos tbm?

Enfrento o problema de minha conexão ser lenta, então caso o programa fizesse o download para mim seria útil, facilitando tbm quando eu queira atualizar os dados. Assim, estou escrevendo fazendo um branch próprio com esta funcionalidade, gostaria de saber se existe interesse em adiciona-la à este master.

Nota: peço desculpas por qualquer equivoco, dado minha inexperiência sobre programação.

Quantidade de linhas

Fiz o processo apresentado no readme.

Porém a quantidade de linhas ficou divergente.

Empresas 19.651.677
Sócios 9.212.053
CNAES 21.852.345

Está correto?

Dados Públicos CNPJ - Conversão para CSV/SQLITE e Consultas

Boa tarde, parabéns ao desenvolvedores muito bacana a ideia, consegui rodar aqui de boa no entanto quando faço a consulta ele gera o Gráfico abro no navegador mais não aparece as informações da empresa como na documentação aparece um Quadro preto junto ao Gráfico com os dados da empresa... Alguém pode me ajudar? Só aparece o nome dos sócios ligado um ponto ao outro!

Arquivo .csv não é criado e arquivo .sqlite é criado vazio

executei: py -m pip install --upgrade pip e pip install -r requirements.txt (tdo ok)

Baixei os últimos arquivos Dados Públicos CNPJ: Atualizado em 15/10/2021 15h42

copiei o projeto(CNPJ-full) e criei as pastas:
dados-publicos-zip e dados-publicos

coloquei todos os arquivos .zip na pasta dados-publicos-zip

executei o comando:
py cnpj.py dados-publicos-zip csv dados-publicos --dir

o .csv não cria e o .sqlite vem vazio

CNPJ que não existem

Boa tarde, consegui extrair tudo usando os .zip atualizados do site da receita, o problema não é no script, mas com os dados da receita, pego por exemplo, CNPJ do mes de janeiro de 2020, nem todos estão na base pública da receita, mas se for no site da receita e consultar o CNPJ individual ele existe, alguém sabe de algo? de ter muitos cnjs que não tem na base ma existirem?

Exportar para um banco MySQL

Estava fazendo umas gambiarras para fazer isso, então resolvi organizar melhor a ideia, e se alguém já fez algo do tipo gostaria que avaliasse minha solução também.

Falha ao converter string to float após 45mi linhas

O problema acontecia antes de mudar a versão do cnpj.py.
Criei um .bat que chama: Z:\GitHub\dadosCNPJ\venv\Scripts\python.exe cnpj.py "Z:\GitHub\dadosCNPJ\cnpj\F.K032001K.D90511" "csv" "Z:\GitHub\dadosCNPJ"

Estava acompanhando o progresso, a última visualização que tive foi que tinha passado das 45.000.000 linhas (informação de saída do progresso do programa).

Gerou um empresa.csv de 6,513GB, com 22.067.491 linhas (fiz consulta pelo Excel colocando uma coluna de índices)

O arquivo de CNPJ é do dia 22/05/2019 de 97,433GB - F.K032001K.D90511

Ao que me parece, a string que ele não consegue converter para float é " ", um espaço, pois no prompt é o que dá para selecionar, um espaço vazio.

Z:\GitHub\dadosCNPJ>Z:\GitHub\dadosCNPJ\venv\Scripts\python.exe cnpj.py "Z:\GitH
ub\dadosCNPJ\cnpj\F.K032001K.D90511" "csv" "Z:\GitHub\dadosCNPJ"
Traceback (most recent call last):7900000.
File "cnpj.py", line 304, in
main()
File "cnpj.py", line 293, in main
cnpj_full(input_path, tipo_output, output_path)
File "cnpj.py", line 169, in cnpj_full
for i, dado in enumerate(dados):
File "Z:\GitHub\dadosCNPJ\cfwf.py", line 104, in _cfwf_chunck_reader
yield _cfwf_chunck(chunk, type_width, colspecs, names, dtype)
File "Z:\GitHub\dadosCNPJ\cfwf.py", line 94, in _cfwf_chunck
.astype(col_type))
File "Z:\GitHub\dadosCNPJ\venv\lib\site-packages\pandas\core\generic.py", line
5691, in astype
**kwargs)
File "Z:\GitHub\dadosCNPJ\venv\lib\site-packages\pandas\core\internals\manager
s.py", line 531, in astype
return self.apply('astype', dtype=dtype, **kwargs)
File "Z:\GitHub\dadosCNPJ\venv\lib\site-packages\pandas\core\internals\manager
s.py", line 395, in apply
applied = getattr(b, f)(**kwargs)
File "Z:\GitHub\dadosCNPJ\venv\lib\site-packages\pandas\core\internals\blocks.
py", line 534, in astype
**kwargs)
File "Z:\GitHub\dadosCNPJ\venv\lib\site-packages\pandas\core\internals\blocks.
py", line 633, in _astype
values = astype_nansafe(values.ravel(), dtype, copy=True)
File "Z:\GitHub\dadosCNPJ\venv\lib\site-packages\pandas\core\dtypes\cast.py",
line 702, in astype_nansafe
return arr.astype(dtype, copy=True)
ValueError: could not convert string to float:

Z:\GitHub\dadosCNPJ>pause
Pressione qualquer tecla para continuar. . .

Não é possível carregar dados do conjunto de dados 2020-01-25

Obrigado por esse codigo, ta muito bom!

Rodei pra criar um arquivo sqlite usando o ultimo dataset de 2019 e funcionou bem.
Tentei com o dataset mais recente e não funcionou. Rodei algumas vezes e todas elas, recebi o seguinte:

V/c/w/r/c/CNPJ-full (master|✚1…) $ python3 cnpj.py "../cnpj-data/" sqlite "../cnpj-db" --dir --noindex                                      (CNPJ-full)
Iniciando processamento em 2020-03-17 10:29:46.207939
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_01.zip
Bloco 1: até linha 100000. [Emps:0|Socios:0|CNAEs:0]
INFORMACOES DO HEADER:
Nome do arquivo: F.K032001K
Data de gravacao: 20200125
Numero da remessa: 00000001
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_02.zipNAEs:475000]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_03.zipNAEs:1030994]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_04.zipNAEs:1605533]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_06.zipNAEs:2136399]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_07.zipNAEs:2968203]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_08.zip|CNAEs:3990374]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_09.zip|CNAEs:5123967]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_10.zip|CNAEs:6094889]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_11.zip|CNAEs:7297802]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_12.zip|CNAEs:8514294]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_13.zip|CNAEs:9734752]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_14.zip|CNAEs:10800774]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_15.zip|CNAEs:12019058]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_16.zip|CNAEs:13243598]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_17.zip|CNAEs:14384964]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_19.zip|CNAEs:15531292]
Processando arquivo: ../cnpj-data/DADOS_ABERTOS_CNPJ_20.zip|CNAEs:15823708]
Bloco 44: até linha 4400000. [Emps:38842261|Socios:23688771|CNAEs:16275733]
INFORMACOES DE CONTROLE:
Total de registros de empresas: 43101755
Total de registros de socios: 26807594
Total de registros de CNAEs secundarios: 17745669
Total de registros incluindo header e trailler: 87655020

Conversao concluida. Validando quantidades:
Total de registros de empresas: 38882738 !INCONSISTENTE!
Total de registros de socios: 23711369 !INCONSISTENTE!
Total de registros de CNAEs: 16295409 !INCONSISTENTE!
Atencao! Foi detectada inconsistencia entre as quantidades lidas e as informacoes de controle do arquivo.

Arquivo SQLITE gerado: ../cnpj-db/CNPJ_full.db
OBS: Uso de índices altamente recomendado!

Processamento concluido em 2020-03-17 11:50:54.066860

Você rodou com o dataset atual? funcionou pra você? tem alguma idea?

Erro - Divisão por Cidade

Estou recebendo este erro ao separar arquivo por Cidade, alguém já teve este erro?

Traceback (most recent call last):
File "separar_csv_por_cidade.py", line 36, in
uf_file.writelines(line)
File "C:\Users\Alex Basto\AppData\Local\Programs\Python\Python37\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x8f' in position 0: character maps to

Erro ao transformar os arquivos zipados para SQLite

Pessoal, boa tarde

fiz o download dos arquivos zip e iniciei transformação em SQLipe,
No aquivo DADOS_ABERTOS_CNPJ_11 deu o erro abaixo, não estou conseguindo arrumar, alguem poderia me ajudar?

C:\Users\lgalmeida\Desktop\CNPJ-full-master>cnpj.py arquivos_zipados sqlite BancodeDados --dir
Iniciando processamento em 2019-12-11 08:31:33.288620
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_01.zip
Bloco 1: até linha 200000. [Emps:0|Socios:0|CNAEs:0]
INFORMACOES DO HEADER:
Nome do arquivo: F.K032001K
Data de gravacao: 20191109
Numero da remessa: 00000001
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_02.zip:464741]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_03.zip:1011468]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_04.zip:1576118]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_05.zip:2097973]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_06.zip:2938221]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_07.zipEs:3768101]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_08.zipEs:4767635]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_09.zipEs:5876265]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_10.zipEs:6857512]
Processando arquivo: arquivos_zipados\DADOS_ABERTOS_CNPJ_11.zipEs:8006986]
Traceback (most recent call last):20228564|Socios:15969481|CNAEs:8439963]
File "C:\Users\lgalmeida\Desktop\CNPJ-full-master\cnpj.py", line 463, in
main()
File "C:\Users\lgalmeida\Desktop\CNPJ-full-master\cnpj.py", line 455, in main
cnpj_full(input_list, tipo_output, output_path)
File "C:\Users\lgalmeida\Desktop\CNPJ-full-master\cnpj.py", line 223, in cnpj_full
for i_bloco, bloco in enumerate(dados):
File "C:\Users\lgalmeida\Desktop\CNPJ-full-master\cfwf.py", line 107, in _cfwf_chunck_reader
yield _cfwf_chunck(chunk, type_width, colspecs, names, dtype)
File "C:\Users\lgalmeida\Desktop\CNPJ-full-master\cfwf.py", line 97, in _cfwf_chunck
.astype(col_type))
File "C:\Users\lgalmeida\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\generic.py", line 5691, in astype
**kwargs)
File "C:\Users\lgalmeida\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\managers.py", line 531, in astype
return self.apply('astype', dtype=dtype, **kwargs)
File "C:\Users\lgalmeida\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\managers.py", line 395, in apply
applied = getattr(b, f)(**kwargs)
File "C:\Users\lgalmeida\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\blocks.py", line 534, in astype
**kwargs)
File "C:\Users\lgalmeida\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\blocks.py", line 633, in _astype
values = astype_nansafe(values.ravel(), dtype, copy=True)
File "C:\Users\lgalmeida\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\dtypes\cast.py", line 702, in astype_nansafe
return arr.astype(dtype, copy=True)
ValueError: could not convert string to float:

Erro no zip

Olá
Por favor, o arquivo que baixo da Receita - DADOS_ABERTOS_CNPJ.zip
(5.147.030.696 bytes) - apresenta um erro quando descompacto - uso o
Peazip: ele não descompacta todo, mostra Erro fatal ocorreu em 3m57s -
podem estar bloqueados, não acessível ou corrompidos

No Terminal também: unzip DADOS_ABERTOS_CNPJ.zip
Archive: DADOS_ABERTOS_CNPJ.zip
warning [DADOS_ABERTOS_CNPJ.zip]: 852063295 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [DADOS_ABERTOS_CNPJ.zip]: start of central directory not found;
zipfile corrupt.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)

Você também teve esse erro?

Parabéns pela iniciativa!

Abraço

Arquivos CSV dump

Olá,

vocês tem os arquivos após tratamento disponíveis para download?

Não estou conseguindo baixar os dados da receita para processar com o pacote de vocês.

Valeu :)

Erro em conversão float

Baixei recentemente a base, e esta dando o seguinte erro ao executar o arquivo DADOS_ABERTOS_CNPJ_10.zip, os demais exportou sem problemas.

Iniciando processamento em 2021-02-09 09:15:26.677458
Processando arquivo: input/DADOS_ABERTOS_CNPJ_10.zip
capital_social <class 'float'>ps:201650|Socios:82612|CNAEs:115738]
line_type
1 00000000500000
1 00000001500000
1 00000000500000
1 00000005000000
1 00000000000100
...
1 00000000000000
1 00000000000000
1 00000001500000
1 00000000500000
1 00000000000100
Name: capital_social, Length: 94446, dtype: object
Traceback (most recent call last):
File "/media/thiago/THIAGOSTORE/projects/CNPJ-full/cfwf.py", line 103, in _cfwf_chunck
data_dict[ltype][col_name] = (data_dict[ltype][col_name]
File "/home/thiago/.pyenv/versions/3.8.6/envs/cnpj/lib/python3.8/site-packages/pandas/core/generic.py", line 5874, in astype
new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
File "/home/thiago/.pyenv/versions/3.8.6/envs/cnpj/lib/python3.8/site-packages/pandas/core/internals/managers.py", line 631, in astype
return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
File "/home/thiago/.pyenv/versions/3.8.6/envs/cnpj/lib/python3.8/site-packages/pandas/core/internals/managers.py", line 427, in apply
applied = getattr(b, f)(**kwargs)
File "/home/thiago/.pyenv/versions/3.8.6/envs/cnpj/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 673, in astype
values = astype_nansafe(vals1d, dtype, copy=True)
File "/home/thiago/.pyenv/versions/3.8.6/envs/cnpj/lib/python3.8/site-packages/pandas/core/dtypes/cast.py", line 1097, in astype_nansafe
return arr.astype(dtype, copy=True)
ValueError: could not convert string to float: ''

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "cnpj.py", line 463, in
main()
File "cnpj.py", line 455, in main
cnpj_full(input_list, tipo_output, output_path)
File "cnpj.py", line 223, in cnpj_full
for i_bloco, bloco in enumerate(dados):
File "/media/thiago/THIAGOSTORE/projects/CNPJ-full/cfwf.py", line 119, in _cfwf_chunck_reader
yield _cfwf_chunck(chunk, type_width, colspecs, names, dtype)
File "/media/thiago/THIAGOSTORE/projects/CNPJ-full/cfwf.py", line 109, in _cfwf_chunck
raise Exception(e)
Exception: could not convert string to float: ''

Erro no separar_csv_por_uf.py

O código para separar por uf o csv, não está pegando a ultima linha do csv, fiz uns testes com um csv menor e todos deram o mesmo erro.

Erro separar csv por uf

Boa tarde,

estou com o seguinte erro ao tentar separar o arquivo empresas.csv por uf.

E:\CNPJ-full-master\extra_csv>py separar_csv_por_uf.py
Traceback (most recent call last):
File "separar_csv_por_uf.py", line 9, in
with codecs.open(location + file, 'r+', 'utf-8') as empresas:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

O arquivo env.example está assim:
FILES_LOCATION=\E:\TEMP

Erro ao processar aquivo

Teria como me ajudar a usar o código, estou tentando e o mesmo da erro ao transformar em csv.

python3 cnpj.py ./dados1\ (1)/ csv /home/matheus/
Iniciando processamento em 2019-11-20 23:09:44.467879
Processando arquivo: ./dados1 (1)/
Traceback (most recent call last):
File "cnpj.py", line 463, in
main()
File "cnpj.py", line 455, in main
cnpj_full(input_list, tipo_output, output_path)
File "cnpj.py", line 220, in cnpj_full
encoding='ISO-8859-15')
File "/home/matheus/Downloads/FlareGet/Others/CNPJ-full-master/cfwf.py", line 49, in read_cfwf
encoding=encoding)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 803, in read_fwf
return _read(filepath_or_buffer, kwds)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 429, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 895, in init
self._make_engine(self.engine)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 1132, in _make_engine
self._engine = klass(self.f, **self.options)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 3605, in init
PythonParser.init(self, f, **kwds)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 2225, in init
memory_map=self.memory_map)
File "/home/matheus/anaconda3/lib/python3.7/site-packages/pandas/io/common.py", line 424, in _get_handle

Gerando SQLite vazio

Estou executando o script sem problemas, instalei todas as dependências, ele processa os arquivos sem exibir nenhum erro, porem esta gerando um arquivo .db sem dados

Finalização do Processo:
Processo Finalizado

Arquivo gerado:
Arquivo Final

Alguém teve este problema ou sabe como resolver?
Obrigado!

Suporte a outros bancos via SQLAlchemy

Gostaria de saber se existe o interesse adicionar suporte para outros bancos via SQLAlchemy?

Estou realizando alguns testes ref. a importação dos dados para PostgreSQL e verifiquei que é relativamente simples adicionar o suporte, porém não quero fazer PRs desnecessariamente.

Dúvidas sobre as CNAEs

Olá,

Em 2007 houve uma grande mudança na metodologia da classificação de atividades no Brasil (CNAE 1.0 para CNAE 2.0). A minha dúvidas é se no arquivo fonte da Receita Federal do Brasil há a data de atualização das CNAEs das empresas? Ou alguma informação que faça referência a inserção de CNAEs secundárias. Utilizando o cnpj.py para compilar os dados da Receita, não obtive a data de inserção, alteração de CNAEs (primária ou secundária).

Aproveitando, gostaria de parabenizar e agradecer pela ferramenta de compilação dos dados públicos de cadastro da RFB. Está ajudando muito em minhas pesquisas acadêmicas.

Organizar visualização no viz em html

É possível organizar a visualização de alguma maneira? por exemplo, em consultas do nivel 2 ou mais os sócios e empresas se sobrepõem e é dificil visualizar quem é quem, é preciso arrastar as "bolinhas" até que eles se auto organizem.
Existe alguma maneira de agrupar os resultados automaticamente em torno dos sócios, por exemplo?
Agradeço desde já

Como pesquisar apenas endereço (ou apenas alguns campos em específico)

Pessoal, sou muito novato no mundo da programação, então tomara que compreendam minha pergunta:

Quero usar o aplicativo para buscar o endereço de empresas através do CNPJ, mas (se possível) gostaria que o resultado retornasse no próprio python e não em um arquivo exportado. (não sei se usei os termos corretos)

Por exemplo, ao usar o comando:
python consulta.py cnpj 00000000000191

O resultado fosse um array (ou algo parecido) contendo as informações daquele CNPJ, como na foto de capa do aplicativo:
a

Isso é possível?

Sistema de Consulta Web

Pessoal,

Baseado no resultado do CNPJ-full, estou construido um sistema de consulta na web. A ideia é quem tenha um tela de consultas rápidas e fáceis. Incluído a ideia de gerar o Grafo. No momento ainda está bem no início.

Site do projeto https://github.com/bjverde/cnpjrfb

Tela de Exemplo

Divisão por UF

Esta ocorrendo erro ao separar .csv por UF, no arquivo ".env.example" eu deixei desta forma:
"FILES_LOCATION=/output/"
"FILES_LOCATION=/output"

No meu computador o arquivo esta na pasta "C:\Users\meunome\AppData\Local\Programs\Python\Python37-32\output\empresas.csv"

ERRO: ("Traceback (most recent call last):
File "separar_csv_por_uf.py", line 10, in
with codecs.open(location + file, 'r+', 'utf-8') as empresas:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

Não sei oque pode ser, pode me ajudar?

Ponto e vírgula dentro de valores, interferindo na importação do csv com o pandas

            Me deparei com um problema, ao importar o csv gerado pelo seu script com o módulo pandas. Mais especificamente , ao usar a função df.read_csv()  . Existem alguns valores dentro da coluna 'complemento' que tem um ponto e vírgula .

"LETRA:A;".
Mesmo eu estipulando o separador como uma vírgula, a função do pandas lê o ponto e vírgula como um separador , e cria um campo de valor vazio, comprometendo a legibilidade da tabela. Estou terminando um script que faz algumas modificações na tabela , como substituir o número CNAE pelo seu significado,entre outros , e também de nomear as colunas. E depois manda tudo pra um banco de dados SQL.
Você acredita que seria possível inserir um código que identificasse quais strings tem um ' ; ' ou até mesmo uma vírgula(poderia usar o REGEX) e a excluísse? Em quais dos arquivos poderia incluí-lo?

Exportar no formato .sql

É possível exportar no formato .sql?

e como faz pra subir um arquivo tão grande como esse ?

ERRO: Nenhum arquivo válido encontrado no diretório!

Fiz da seguinte forma:

ronaldo@rpo-pc:~/Desktop/CNPJ-full-master$ python3 cnpj.py media/ronaldo/Arquivos/Projetos/Empresas-Projeto-CNPJ/cnpj_cadastro/dados/ sqlite media/ronaldo/Arquivos/Projetos/Empresas-Projeto-CNPJ/cnpj_cadastro/dados/ --dir

ERRO: Nenhum arquivo válido encontrado no diretório!

Aponteir o diretorio que salvei os arquivos que se encontram zipados exatamente do jeito que forma baixados. Podem ajudar?

Utilização

Poderia me auxiliar à utilizar essa ferramenta através do windows, com python 3?

Consigo executar via PowerShell?

Obrigado.

Erro de encoding

Iniciando processamento em 2019-10-11 14:08:52.841146
Processando arquivo: ../DADOS_ABERTOS_CNPJ_01.zip
Traceback (most recent call last):
  File "cnpj.py", line 463, in <module>
    main()
  File "cnpj.py", line 455, in main
    cnpj_full(input_list, tipo_output, output_path)
  File "cnpj.py", line 229, in cnpj_full
    end='\r')
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 11: ordinal not in range(128)

O script retorna um resultado vazio

Recentemente a Receita Federal liberou uma nova versão dos dados públicos CNPJ (07/ago/2019). Baixei os arquivos e extraí todos, gerando 20 arquivos de 5.08Gb cada, porém, quando rodo o script cnpj.py, especificando o caminho de entrada e saída, o resultado retornado é:

Total de registros de empresas: 0 ok
Total de registros de socios: 0 ok
Total de registros de CNAEs: 0 ok

Alguém também está enfrentando este problema com o novo arquivo?

Retorno Vazio

(base) Mesa-Luciano:CNPJ-full-mastedr Fagner$ python3 cnpj.py "/Users/jonatas/Desktop/CNPJ-full-mastedr/dados.zip" csv "data"
Iniciando processamento em 2019-06-25 10:25:43.261103
Processando arquivo: /Users/jonatas/Desktop/CNPJ-full-mastedr/dados.zip
Processando bloco 1: até linha 200000.
Conversao concluida. Validando quantidades:
Total de registros de empresas: 0 ok
Total de registros de socios: 0 ok
Total de registros de CNAEs: 0 ok
Arquivos CSV gerados na pasta data.
Processamento concluido em 2019-06-25 10:25:43.275502

Saberia me informar o por que isso ocorre?Ele cria mas vem vazio

Erro ao executar

Não estou conseguindo executar o comando python3 cnpj.py <tipo de saída:csv ou sqlite> <pasta saída> --dir

Apresenta um erro de sintaxe:

python3 cnpj.py '/Dados_Públicos_Receita_Federal' csv '/analise_cnpj' --dir

File "", line 1
python3 cnpj.py '/Dados_Públicos_Receita_Federal' csv '/analise_cnpj' --dir
^
SyntaxError: invalid syntax

O jupyter notebook está aberto na pasta TI,
Nesta pasta tem a pasta Dados_Publicos_Receita_Federal que informei acima e também nesta mesma pasta TI está a pasta de saída analise_cnpj.

Poderiam me ajudar?

Resolvido, faltou importar o código

Adicionar requirements.txt

Seria uma boa ter esse arquivo. Assim a instalacao dos pacotes fica assim:

pip install -r requirements.txt

Atualização trimestral Nov/19

Boa Noite! Alguém tem informações se a receita irá atualizar a base esse mês? Geralmente eles atualizam com 3 meses, mas até agora nada.

Erro de permissão

olá, estou tentando rodar a linha

python3 cnpj.py "E:\Leticia\Documents\DADOS_ABERTOS_CNPJ\F.K032001K.D81106D" csv "E:\Leticia\Documents\DADOS_ABERTOS_CNPJ"

Porem, fica me dando esse erro:

Traceback (most recent call last):
  File "cnpj.py", line 258, in <module>
    main()
  File "cnpj.py", line 255, in main
    cnpj_full(input_path, tipo_output, output_path)
  File "cnpj.py", line 154, in cnpj_full
    chunksize=CHUNKSIZE)
  File "E:\Leticia\Documents\projetos\CNPJ-full\CNPJ-full\cfwf.py", line 46, in read_cfwf
    nrows=nrows)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\parsers.py", line 803, in read_fwf
    return _read(filepath_or_buffer, kwds)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\parsers.py", line 429, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\parsers.py", line 895, in __init__
    self._make_engine(self.engine)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\parsers.py", line 1132, in _make_engine
    self._engine = klass(self.f, **self.options)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\parsers.py", line 3605, in __init__
    PythonParser.__init__(self, f, **kwds)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\parsers.py", line 2225, in __init__
    memory_map=self.memory_map)
  File "E:\Program Files\Python37\lib\site-packages\pandas\io\common.py", line 427, in _get_handle
    f = open(path_or_buf, mode, errors='replace', newline="")
PermissionError: [Errno 13] Permission denied: 'E:\\Leticia\\Documents\\DADOS_ABERTOS_CNPJ\\F.K032001K.D81106D'

Estou rodando com o PowerShell em modo admin. Poderia me dar uma ajuda sobre o que está acontecendo?

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.