Git Product home page Git Product logo

cnpj-sqlite's Introduction

CNPJ-SQLITE

Script em python para converter os arquivos de dados públicos de CNPJs para o formato SQLITE. O código é compatível com o layout das tabelas disponibilizadas pela Receita Federal a partir de 2021.

Dados públicos de CNPJs no site da Receita:

Os arquivos csv zipados com os dados de CNPJs estão disponíveis em https://dados.gov.br/dados/conjuntos-dados/cadastro-nacional-da-pessoa-juridica---cnpj ou https://dadosabertos.rfb.gov.br/CNPJ/ (http://200.152.38.155/CNPJ/).

Pré-requisitos:

Python 3.9 ou posterior;
Bibliotecas pandas, dask, sqlalchemy, wget.

Recomenda-se instalar o Anaconda, que já configura o Python e ferramentas de programação;
Verifique se você tem mais de 60GB de disco livre, cerca de 30GB para a base em sqlite e 25GB para os arquivos do site da Receita zip ou descompactados. Os 25GB poderão ser liberados depois de rodar o script.
Baixe o código do projeto pelo botão "Download ZIP" no menu "Code":
image
Isso fará baixar um arquivo zip com o código deste repositório. Descompacte em alguma pasta, por exemplo, na raiz do disco C:

Usando o Anaconda prompt:

Atenção: Você poderia abrir um console do DOS pela lupa do Windows e digitar "cmd", ou pelo menu contextual, mas assim o console não iria estar no "ambiente" correto e as instruções para rodar os scripts não iriam funcionar.

Se você instalou o Anaconda no Windows, todas as operações de linha de comando devem ser no "ambiente" correto utilizando o Anaconda prompt.
image

Quando se está em um ambiente padrão do Anaconda prompt, o console começa com (base) C:\Users\<apelido do usuário>:
image

Utilizando o script:

Use o comando cd para "navegar" o prompt até a pasta com o código deste projeto, por exemplo, cd C:\cnpj-sqlite-main. Isto dependerá do lugar que você descompactou a cópia deste projeto no seu HD.

Instale as bibliotecas necessárias neste projeto usando o comando no Anaconda prompt:
pip install -r requirements.txt

Se desejar apenas uma relação dos arquivos disponíveis no site da Receita Federal, use o seguinte comando no Anaconda prompt, na pasta deste projeto:
python dados_cnpj_lista_url.py

Baixe os arquivos do site da Receita pelo comando no Anaconda prompt na pasta deste projeto
python dados_cnpj_baixa.py
Isto irá baixar os arquivos zipados do site da Receita na pasta "dados-publicos-zip".

O download no site da Receita é lento, pode demorar várias horas (a última vez levou 8 horas)
Se o download estiver muito lento, outra forma de baixar os arquivos é usar um gerenciador de downloads, como o https://portableapps.com/apps/internet/free-download-manager-portable.

Crie uma pasta com o nome "dados-publicos". Se houver arquivos antigos nesta pasta, apague ou mova-os de lugar.

Para iniciar a conversão dos arquivos para o formato sqlite, digite em um console do Anaconda prompt:
python dados_cnpj_para_sqlite.py

O processamento leva cerca de 2hs em um notebook i7 de oitava geração com SSD.

Ao final, será gerado um arquivo cnpj.db, no formato sqlite, com cerca de 30GB, que poderá ser aberto no DB Browser for SQLITE (https://sqlitebrowser.org/).

O arquivo cnpj.db poderá ser usado no meu projeto rede-cnpj (https://github.com/rictom/rede-cnpj), que permite visualização gráfica de relacionamentos entre empresas e sócios. Este projeto está rodando online em https://www.redecnpj.com.br.
O projeto https://github.com/rictom/cnpj_consulta também utiliza o arquivo cnpj.db para visualizar os dados de cnpj em formato de tabela.

## Problema recorrente: Se por acaso ocorrer um erro do tipo "Engine object has no attribute execute", altere a versão da biblioteca sqlalchemy pelo comando: pip install sqlalchemy==1.4.47

Versão aplicativo Windows 10 do script:

Se você não tem familiaridade com python, pode utilizar o aplicativo em https://www.redecnpj.com.br/rede/pag/aplicativo.html#rede_programa_baixar que serve para baixar a base do site de dados abertos da Receita Federal e faz a conversão para sqlite. Baixe e rode APENAS as partes 1 e 2 do programa. Leia o manual antes de executar.

Arquivo sqlite com a base CNPJ:

O arquivo final poderá ser aberto no DBBrowser for SQLITE.

image
Lista das tabelas do arquivo cnpj.db no DBBrowser.

Conversão para mysql:

O script em https://github.com/rictom/cnpj-mysql faz o carregamento dos dados para o banco de dados em MYSQL.

Histórico de versões

versão 0.5 (janeiro/2024)

  • utilizando sqlite3 ao invés de sqlalchemy para gerar conexão, de forma que não há mais dependência de sqlalchemy<2.x

versão 0.4 (setembro/2022)

  • inclusão de índice na coluna "nome fantasia" da tabela estabelecimento.

versão 0.3 (maio/2022)

  • inclusão de índice na coluna representante_legal da tabela sócios.

versão 0.2 (janeiro/2022)

  • removido código não utilizado

versão 0.1 (julho/2021)

  • primeira versão

cnpj-sqlite's People

Contributors

rictom 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

cnpj-sqlite's Issues

sqlite3.DatabaseError: database disk image is malformed

Olá

Tentei executar o script 3 vezes, nas 3 ocorreu esse erro abaixo. Já tentei excluir e baixar novamente os arquivos ZIP, mas não deu certo (mesmo erro).

Início: Tue Jan 23 11:30:36 2024
Tue Jan 23 11:30:36 2024 descompactando dados-publicos-zip\Cnaes.zip
Tue Jan 23 11:30:36 2024 descompactando dados-publicos-zip\Empresas0.zip
Tue Jan 23 11:30:54 2024 descompactando dados-publicos-zip\Empresas1.zip
Tue Jan 23 11:30:59 2024 descompactando dados-publicos-zip\Empresas2.zip
Tue Jan 23 11:31:05 2024 descompactando dados-publicos-zip\Empresas3.zip
Tue Jan 23 11:31:10 2024 descompactando dados-publicos-zip\Empresas4.zip
Tue Jan 23 11:31:15 2024 descompactando dados-publicos-zip\Empresas5.zip
Tue Jan 23 11:31:20 2024 descompactando dados-publicos-zip\Empresas6.zip
Tue Jan 23 11:31:26 2024 descompactando dados-publicos-zip\Empresas7.zip
Tue Jan 23 11:31:31 2024 descompactando dados-publicos-zip\Empresas8.zip
Tue Jan 23 11:31:36 2024 descompactando dados-publicos-zip\Empresas9.zip
Tue Jan 23 11:31:42 2024 descompactando dados-publicos-zip\Estabelecimentos0.zip
Tue Jan 23 11:32:44 2024 descompactando dados-publicos-zip\Estabelecimentos1.zip
Tue Jan 23 11:33:02 2024 descompactando dados-publicos-zip\Estabelecimentos2.zip
Tue Jan 23 11:33:21 2024 descompactando dados-publicos-zip\Estabelecimentos3.zip
Tue Jan 23 11:33:40 2024 descompactando dados-publicos-zip\Estabelecimentos4.zip
Tue Jan 23 11:34:00 2024 descompactando dados-publicos-zip\Estabelecimentos5.zip
Tue Jan 23 11:34:20 2024 descompactando dados-publicos-zip\Estabelecimentos6.zip
Tue Jan 23 11:34:38 2024 descompactando dados-publicos-zip\Estabelecimentos7.zip
Tue Jan 23 11:34:57 2024 descompactando dados-publicos-zip\Estabelecimentos8.zip
Tue Jan 23 11:35:16 2024 descompactando dados-publicos-zip\Estabelecimentos9.zip
Tue Jan 23 11:35:35 2024 descompactando dados-publicos-zip\Motivos.zip
Tue Jan 23 11:35:35 2024 descompactando dados-publicos-zip\Municipios.zip
Tue Jan 23 11:35:35 2024 descompactando dados-publicos-zip\Naturezas.zip
Tue Jan 23 11:35:35 2024 descompactando dados-publicos-zip\Paises.zip
Tue Jan 23 11:35:35 2024 descompactando dados-publicos-zip\Qualificacoes.zip
Tue Jan 23 11:35:35 2024 descompactando dados-publicos-zip\Simples.zip
Tue Jan 23 11:36:02 2024 descompactando dados-publicos-zip\Socios0.zip
Tue Jan 23 11:36:11 2024 descompactando dados-publicos-zip\Socios1.zip
Tue Jan 23 11:36:14 2024 descompactando dados-publicos-zip\Socios2.zip
Tue Jan 23 11:36:18 2024 descompactando dados-publicos-zip\Socios3.zip
Tue Jan 23 11:36:21 2024 descompactando dados-publicos-zip\Socios4.zip
Tue Jan 23 11:36:24 2024 descompactando dados-publicos-zip\Socios5.zip
Tue Jan 23 11:36:27 2024 descompactando dados-publicos-zip\Socios6.zip
Tue Jan 23 11:36:31 2024 descompactando dados-publicos-zip\Socios7.zip
Tue Jan 23 11:36:34 2024 descompactando dados-publicos-zip\Socios8.zip
Tue Jan 23 11:36:37 2024 descompactando dados-publicos-zip\Socios9.zip
carregando tabela dados-publicos\F.K03200$Z.D40113.CNAECSV
carregando tabela dados-publicos\F.K03200$Z.D40113.MOTICSV
carregando tabela dados-publicos\F.K03200$Z.D40113.MUNICCSV
carregando tabela dados-publicos\F.K03200$Z.D40113.NATJUCSV
carregando tabela dados-publicos\F.K03200$Z.D40113.PAISCSV
carregando tabela dados-publicos\F.K03200$Z.D40113.QUALSCSV
carregando: arq='dados-publicos\K3241.K03200Y0.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:36:44 2024
fim parcial... Tue Jan 23 11:38:42 2024
carregando: arq='dados-publicos\K3241.K03200Y1.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:38:42 2024
fim parcial... Tue Jan 23 11:39:15 2024
carregando: arq='dados-publicos\K3241.K03200Y2.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:39:15 2024
fim parcial... Tue Jan 23 11:39:46 2024
carregando: arq='dados-publicos\K3241.K03200Y3.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:39:46 2024
fim parcial... Tue Jan 23 11:40:20 2024
carregando: arq='dados-publicos\K3241.K03200Y4.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:40:20 2024
fim parcial... Tue Jan 23 11:40:56 2024
carregando: arq='dados-publicos\K3241.K03200Y5.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:40:56 2024
fim parcial... Tue Jan 23 11:41:32 2024
carregando: arq='dados-publicos\K3241.K03200Y6.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:41:32 2024
fim parcial... Tue Jan 23 11:42:06 2024
carregando: arq='dados-publicos\K3241.K03200Y7.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:42:06 2024
fim parcial... Tue Jan 23 11:42:44 2024
carregando: arq='dados-publicos\K3241.K03200Y8.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:42:44 2024
fim parcial... Tue Jan 23 11:43:23 2024
carregando: arq='dados-publicos\K3241.K03200Y9.D40113.EMPRECSV'
lendo csv ... Tue Jan 23 11:43:23 2024
fim parcial... Tue Jan 23 11:44:00 2024
carregando: arq='dados-publicos\K3241.K03200Y0.D40113.ESTABELE'
lendo csv ... Tue Jan 23 11:44:00 2024
fim parcial... Tue Jan 23 11:51:44 2024
carregando: arq='dados-publicos\K3241.K03200Y1.D40113.ESTABELE'
lendo csv ... Tue Jan 23 11:51:44 2024
fim parcial... Tue Jan 23 11:54:02 2024
carregando: arq='dados-publicos\K3241.K03200Y2.D40113.ESTABELE'
lendo csv ... Tue Jan 23 11:54:02 2024
fim parcial... Tue Jan 23 11:56:03 2024
carregando: arq='dados-publicos\K3241.K03200Y3.D40113.ESTABELE'
lendo csv ... Tue Jan 23 11:56:03 2024
fim parcial... Tue Jan 23 11:58:03 2024
carregando: arq='dados-publicos\K3241.K03200Y4.D40113.ESTABELE'
lendo csv ... Tue Jan 23 11:58:03 2024
fim parcial... Tue Jan 23 12:00:07 2024
carregando: arq='dados-publicos\K3241.K03200Y5.D40113.ESTABELE'
lendo csv ... Tue Jan 23 12:00:07 2024
fim parcial... Tue Jan 23 12:02:14 2024
carregando: arq='dados-publicos\K3241.K03200Y6.D40113.ESTABELE'
lendo csv ... Tue Jan 23 12:02:14 2024
fim parcial... Tue Jan 23 12:04:12 2024
carregando: arq='dados-publicos\K3241.K03200Y7.D40113.ESTABELE'
lendo csv ... Tue Jan 23 12:04:12 2024
fim parcial... Tue Jan 23 12:06:08 2024
carregando: arq='dados-publicos\K3241.K03200Y8.D40113.ESTABELE'
lendo csv ... Tue Jan 23 12:06:08 2024
fim parcial... Tue Jan 23 12:08:04 2024
carregando: arq='dados-publicos\K3241.K03200Y9.D40113.ESTABELE'
lendo csv ... Tue Jan 23 12:08:04 2024
fim parcial... Tue Jan 23 12:10:02 2024
carregando: arq='dados-publicos\K3241.K03200Y0.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:10:02 2024
fim parcial... Tue Jan 23 12:10:57 2024
carregando: arq='dados-publicos\K3241.K03200Y1.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:10:57 2024
fim parcial... Tue Jan 23 12:11:19 2024
carregando: arq='dados-publicos\K3241.K03200Y2.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:11:19 2024
fim parcial... Tue Jan 23 12:11:41 2024
carregando: arq='dados-publicos\K3241.K03200Y3.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:11:41 2024
fim parcial... Tue Jan 23 12:12:03 2024
carregando: arq='dados-publicos\K3241.K03200Y4.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:12:03 2024
fim parcial... Tue Jan 23 12:12:23 2024
carregando: arq='dados-publicos\K3241.K03200Y5.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:12:23 2024
fim parcial... Tue Jan 23 12:12:44 2024
carregando: arq='dados-publicos\K3241.K03200Y6.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:12:44 2024
fim parcial... Tue Jan 23 12:13:07 2024
carregando: arq='dados-publicos\K3241.K03200Y7.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:13:07 2024
fim parcial... Tue Jan 23 12:13:31 2024
carregando: arq='dados-publicos\K3241.K03200Y8.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:13:31 2024
fim parcial... Tue Jan 23 12:13:53 2024
carregando: arq='dados-publicos\K3241.K03200Y9.D40113.SOCIOCSV'
lendo csv ... Tue Jan 23 12:13:53 2024
fim parcial... Tue Jan 23 12:14:13 2024
carregando: arq='dados-publicos\F.K03200$W.SIMPLES.CSV.D40113'
lendo csv ... Tue Jan 23 12:14:13 2024
fim parcial... Tue Jan 23 12:18:15 2024
Inicio sqls: Tue Jan 23 12:18:15 2024

executando parte 1/21:

ALTER TABLE empresas ADD COLUMN capital_social real
fim parcial... Tue Jan 23 12:18:15 2024

executando parte 2/21:

update empresas
set capital_social = cast( replace(capital_social_str,',', '.') as real)
Traceback (most recent call last):
File "E:\Novo Script para criar DB de CNPJ\cnpj-sqlite-main\cnpj-sqlite-main\dados_cnpj_para_sqlite.py", line 196, in
engine.execute(sql)
sqlite3.DatabaseError: database disk image is malformed

Process finished with exit code 1

[Dúvida] Erro de sintaxe SQLITE3

Boa noite!
Tudo bem?

Estou com dificuldades em concatenar umas tabelas de forma que não se dupliquem por causa do nome dos socios, então estou apelando para o GROUP_CONCAT().

Porém, da forma que estou fazendo no Python não é retornado um erro e fica em loop eterno. Pode tentar me ajudar?

Testes de queries funcionais:

 '''
    SELECT 
    socios.cnpj, 
    GROUP_CONCAT(socios.nome_socio) AS "SoCIOS"
    FROM socios
    GROUP BY socios.cnpj
    LIMIT 1;
'''

Dessa forma o nome dos sócios ficam em uma linha, impedindo duplicata.

  """
  SELECT *
  FROM estabelecimento
  INNER JOIN socios ON estabelecimento.cnpj_basico=socios.cnpj_basico
  LEFT JOIN empresas ON estabelecimento.cnpj_basico=empresas.cnpj_basico
  LIMIT 5;
  """

Dessa forma, consigo unir 3 tabelas para gerar um DataFrame com Pandas. Porém, os nomes duplicam os resultados da consulta de acordo com a quantidade de nomes de sócios para a mesma chave.

Minhas tentativas de solução para realizar aquelas duas operações em uma query:

"""
SELECT 
estabelecimento.cnae_fiscal,
estabelecimento.nome_fantasia,
empresas.razao_social,
(SELECT GROUP_CONCAT(socios.nome_socio) FROM socios WHERE estabelecimento.cnpj_basico = socios.cnpj_basico) AS "Socios"
FROM estabelecimento
INNER JOIN socios ON estabelecimento.cnpj_basico=socios.cnpj_basico
LEFT JOIN empresas ON estabelecimento.cnpj_basico=empresas.cnpj_basico
GROUP BY estabelecimento.cnpj_basico
LIMIT 4;
"""

"""
SELECT 
estabelecimento.cnae_fiscal,
estabelecimento.nome_fantasia,
empresas.razao_social,
(SELECT GROUP_CONCAT(socios.nome_socio) FROM socios) AS "Socios"
FROM estabelecimento
INNER JOIN socios ON estabelecimento.cnpj_basico=socios.cnpj_basico
LEFT JOIN empresas ON estabelecimento.cnpj_basico=empresas.cnpj_basico
GROUP BY estabelecimento.cnpj_basico
LIMIT 4;
"""

"""
SELECT 
estabelecimento.cnae_fiscal,
estabelecimento.nome_fantasia,
empresas.razao_social,
GROUP_CONCAT(socios.nome_socio) AS "Socios"
FROM estabelecimento
INNER JOIN socios ON estabelecimento.cnpj_basico=socios.cnpj_basico
LEFT JOIN empresas ON estabelecimento.cnpj_basico=empresas.cnpj_basico
GROUP BY estabelecimento.cnpj_basico
LIMIT 4;
"""

Todas essas tentativas não me retornam dados nem erros. O python fica eternamente carregando/rodando e nada acontece.

Consulta por CNAE

Tudo bem?

Estou tentando fazer uma consulta por CNAE, mas não consegui usar os scripts de exemplo para isso (não sou programador). Como faço pra consultar filtrando por CNAE? obrigado desde já!

SQLALCHEMY 2.0

Olá tudo bem 👍

Estou aprendendo a programação e olhando seu projeto sobre o sqlalchemy que está na versão 2.0 , não deu erro, mas apareceu esse aviso para silenciar as mensagens.

image

Algo que possamos fazer para solução ou somente comentar no código mesmo e silenciar os avisos.

Parabéns pelo projeto.

urllib.error.ContentTooShortError

Olá, com a última atualização da base de dados ao utilizar a ferramenta tive esse mesmo erro duas vezes, uma vez ontem e outra hoje, não posso confirmar se foi no mesmo arquivo.
Pelo que li ocorre quando o Content-Length do response da request retorna um valor diferença que baixado
image

Pode ser instabilidade do servidor da receita, será que tem algum outro pacote melhor que o urllib?

ERRO AO CARREGAR TABELA

Bom dia, o script descompactou os arquivos, mas ocorre o seguinte erro a partir do carregamento da primeira tabela (CNAE):
carregando tabela C:\dados-publicos\F.K03200$Z.D30408.CNAECSV
Traceback (most recent call last):
File "C:\Users\Tributos\Downloads\rede-cnpj-master\dados_cnpj_para_sqlite.py", line 50, in
carregaTabelaCodigo('.CNAECSV', 'cnae')
File "C:\Users\Tributos\Downloads\rede-cnpj-master\dados_cnpj_para_sqlite.py", line 47, in carregaTabelaCodigo
engine.execute(f'CREATE INDEX idx_{nomeTabela} ON {nomeTabela}(codigo);')
^^^^^^^^^^^^^^
AttributeError: 'Engine' object has no attribute 'execute'

Process finished with exit code 1

Segundo código que preciso de ajuda

Em continuidade a minha pergunta anterior, preciso de um código/script que eu insiro o CNAE e puxa todas as tabelas de todo o Brasil (no exemplo anterior eu colocaria a UF, mas aqui é para o Brasil todo);

SELECT
*
FROM
estabelecimentos empresas,
estabelecimentos empresas
WHERE
estabelecimentos.cnpj = estabelecimentos.cnpj AND empresas.cnae_fiscal LIKE '0810%'

Mas preciso de uma ajuda.

Busca a partir de nome fantasia

É possivel buscar por dados como cnpj, telefone e endereço a partir do nome fantasia do estabelecimento ?
Trabalho na área de prospecção de uma empresa em busca de potenciais clientes, e estou tentar por em prática meus estudos em python!

Dados antigos da receita

Boa tarde Amigos!
Alguém que já trabalhe com dados da receita há mais tempo tem os dados de estabelecimentos que foram disponibilizados pela receita federal no inicio de 2020?

Att, Pedro

Erro

Prezado, não sou técnico e gostaria, se possível, de uma ajuda

Quando executo o script, apresenta este erro:
Sun Jan 29 21:13:17 2023 descompactando dados-publicos-zip\Socios9.zip
carregando tabela dados-publicos\F.K03200$Z.D30114.CNAECSV
Traceback (most recent call last):
File "K:\Nova pasta\dados_cnpj_para_sqlite.py", line 50, in
carregaTabelaCodigo('.CNAECSV','cnae')
File "K:\Nova pasta\dados_cnpj_para_sqlite.py", line 48, in carregaTabelaCodigo
engine.execute(f'CREATE INDEX idx_{nomeTabela} ON {nomeTabela}(codigo);')
^^^^^^^^^^^^^^
AttributeError: 'Engine' object has no attribute 'execute'

O que pode ser?

Arquivos do Google Drive: estabelecimento sem Natureza Jurídica

Fiz o download dos arquivos que estão disponíveis no Google Drive.

Entretando, percebi que na tabela estabelecimento não consta a coluna Natureza Jurídica.

Ficou apenas a tabela com as descrições da Natureza Jurídica.

A RFB retirou essa informação ou ela foi excluída no tratamento?

Arquivo sqlite, referência 9/10/2021 (.D11009.), está disponível no google drive, zipado em 3 pedaços: https://drive.google.com/drive/folders/1Gkeq27aHv6UgT8m30fc4hZWMPqdhEHWr?usp=sharing

Unificação de tabela

Olá, Existe a possibilidade de unir a tabela "SIMPLES" com a informação do OPC MEI na tabela "ESTABELECIMENTOS"? pois preciso das informações que existem na aba "ESTABELECIMENTO" com filtro do OPC_MEI em "S"

DROP COLUMN etapa 3/21

  • Arquivo executado: dados_cnpj_para_sqlite.py

Durante alguns testes, notei um problema na etapa 3. O erro é em relação a uma parte da variável sql, especificamente na query ALTER TABLE empresas DROP COLUMN capital_social_str;. Fiz o debug do código e removendo essa linha tudo ocorre perfeitamente. Pelo que pude compreender, a remoção dessa linha não interfere no resultado final já que provavelmente esta coluna não será utilizada posteriormente. Talvez o único ônus, ao meu entender, é na performance e no espaço ocupado. Percebi também que essa linha foi adicionada na última alteração desse arquivo, então pode não ter sido testada.
Durante a etapa do debug rodei a seguinte query: PRAGMA table_info(empresas); No output desta query consta a coluna capital_social_str. Ou seja, o erro não é pela inexistência da coluna.

Não cheguei a tentar corrigir o problema. Caso encontre alguma solução atualizo aqui.

** OS: debian 11

Adicionar no script do Sqlite suporte a Primary Keys para CI/CD com ORMs

Primeiramente. Obrigado pelo trabalho e disponibilização de tempo e do projeto publicamente.

Agora indo ao problema:
Eu gostaria de usar ORMs que facilitam o desenvolvimento de queries (Prisma ou Drizzle).

O problema é que criando a DB sem uma PK ele simplesmente me pede para adicionar uma PK, e como eu planejo deixar o DB atualizado sempre é um processo que poderia (talvez?) ser incrementado no próprio script.

É uma ideia, se for viável a criação das tabelas com uma coluna para cada tabela com um id auto incrementável.

Exemplo do Prisma:

  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = "file:../db/cnpj.db"
}

/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model referencia {
  id         Int     @id @default(autoincrement())
  referencia String?
  valor      String?

  @@map("_referencia")
  @@ignore
}

/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
model cnae {
  codigo    String?
  descricao String?

  @@index([codigo], map: "idx_cnae")
  @@ignore
}

model empresas {
  cnpj_basico                 String? @id
  razao_social                String?
  natureza_juridica           String?
  qualificacao_responsavel    String?
  porte_empresa               String?
  ente_federativo_responsavel String?
  capital_social              Float?

  @@index([razao_social], map: "idx_empresas_razao_social")
  @@index([cnpj_basico], map: "idx_empresas_cnpj_basico")
  @@ignore
}

[...]

Se houver viabilidade posso tentar e enviar pra cá, venho aqui primeiro por que phyton não é meu forte.

IndexError: list index out of range

Quando executo o código:

python dados_cnpj_para_sqlite.py

Ele me retorna esse erro aqui:

Traceback (most recent call last):
  File "C:\Users\bielk\OneDrive\Documentos\Banco Receita\cnpj-sqlite-main\dados_cnpj_para_sqlite.py", line 52, in <module>
    carregaTabelaCodigo('.CNAECSV','cnae')
  File "C:\Users\bielk\OneDrive\Documentos\Banco Receita\cnpj-sqlite-main\dados_cnpj_para_sqlite.py", line 46, in carregaTabelaCodigo
    arquivo = list(glob.glob(os.path.join(pasta_saida, '*' + extensaoArquivo)))[0]
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

Quando tento executar de novo, acontece isso:

O arquivo dados-publicos\cnpj.db já existe. Apague-o primeiro e rode este script novamente.

Criação do CNPJ.db

Bom Dia,
Primeiramente,
Gostaria de lhe parabenizar pelo projeto.
Em seguida lhe informo que não estou conseguindo finalizar a instalação local.
Tutorial para o Test tudo certo.
Agora, para usar a Base Completa, travou.
Segui o passo a passo, baixando todos os arquivos, criando pastas, instalando bibliotecas pelo pip txt, mas quando coloco para rodar o python dados_cnpj_para_sqlite.py

Aparece a seguinte mensagem de erro:

image

(...) line 72 <title>cnpj-sqlite/dados_cnpj_lista_url.py at main · rictom/cnpj-sqlite · GitHub</title>

SyntaxError: invalid character '·' (U+00B7)

Como resolver?
Lhe agradeço imensamente,

erro

image
o que fiz de errado para está assim?

Erro ao executar o script "dados_cnpj_para_sqlite.py"

Boa noite!
Todos os arquivos ZIP baixados, utilizando o script e ao ser executado o script : dados_cnpj_para_sqlite.py, apresenta o erro abaixo.
Execução Em Linux Kali.

python3 dados_cnpj_para_sqlite.py

Início: Sun May 28 19:31:41 2023
Sun May 28 19:31:41 2023 descompactando dados-publicos-zip/Socios8.zip
Sun May 28 19:31:42 2023 descompactando dados-publicos-zip/Estabelecimentos4.zip
Sun May 28 19:31:47 2023 descompactando dados-publicos-zip/Empresas3.zip
Sun May 28 19:31:48 2023 descompactando dados-publicos-zip/Socios1.zip
Sun May 28 19:31:49 2023 descompactando dados-publicos-zip/Empresas6.zip
Sun May 28 19:31:50 2023 descompactando dados-publicos-zip/Socios0.zip
Sun May 28 19:31:52 2023 descompactando dados-publicos-zip/Estabelecimentos1.zip
Traceback (most recent call last):
File "/home/rede/cnpj-sqlite/dados_cnpj_para_sqlite.py", line 40, in
zip_ref.extractall(pasta_saida)
File "/usr/lib/python3.11/zipfile.py", line 1677, in extractall
self._extract_member(zipinfo, path, pwd)
File "/usr/lib/python3.11/zipfile.py", line 1732, in _extract_member
shutil.copyfileobj(source, target)
File "/usr/lib/python3.11/shutil.py", line 197, in copyfileobj
buf = fsrc_read(length)
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/zipfile.py", line 951, in read
data = self._read1(n)
^^^^^^^^^^^^^^
File "/usr/lib/python3.11/zipfile.py", line 1041, in _read1
self._update_crc(data)
File "/usr/lib/python3.11/zipfile.py", line 969, in _update_crc
raise BadZipFile("Bad CRC-32 for file %r" % self.name)
zipfile.BadZipFile: Bad CRC-32 for file 'K3241.K03200Y1.D30513.ESTABELE'

Select From Where no DB Browser

Ricardo, obrigado pela disponibilização desta base de dados nessa forma organizada que você fez.
Utilizo o DB Browser e tenho 2 necessidades:

  1. Insiro o CNAE e o ESTADO, e retornam todos os dados das tabelas: _referencia, cnae, empresas, estabelecimento, motivo, município, natureza_juridica, pais, qualificacao_socio, simples e socios de forma organizada. Então eu extraio em CSV e utilizo no Excel.

Tentei esse código e não consegui:

SELECT
*
FROM
estabelecimentos empresaas,
estabelecimentos empresas
WHERE
estabelecimentos.cnpj = socios.cnpj AND
estabelecimentos.cnae_fiscal LIKE '8112%' AND
estabelecimentos.uf = 'SP'

Pode me ajudar?

Filtrando cooperativas e exportando o .csv

Boa noite!

Primeiro gostaria de agradecer a esse pacote! Facilitou muito a vida!

Mas ainda estou com uma dificuldade. É a primeira vez que trabalho com os dados do CNPJ neste formato e utilizando este programa. Não consegui importar para o postgreSQL.

Destes dados, preciso separar aquelas CNPJ que são de cooperativas, ou seja com natureza_juridica = 2143 ou natureza_juridica = 2330.

Isto já irá reduzir bastente o tamanho dos arquivos e poderei trabalhar mais fácil com ele em meu computador, usando o R.

Entretanto, não estou conseguindo fazer o filtro e nem encontrando como salvar as tabelas do possível resultado em outro formato.

select t.*, te.*, ts.*
from empresas te
left join estabelecimento t on t.cnpj_basico=te.cnpj_basico
left join socios ts on ts.cnpj_basico=te.cnpj_basico
where te.natureza_juridica like '2143' 
and te.natureza_juridica like '2330'

Meses anteriores

Opa, já agradeço por disponibilizar os dados abertos de CNPJ em SQLITE atualizados.

Gostaria de saber se você teria como disponibilizar os arquivos dos últimos 12 meses?
Ou melhor, arquivos de 07/2021, 01/2022 e 07/2022?

Produtores Rurais

Prezados, peço uma ajuda;

por favor, como posso retornar os dados de Natureza Jurídica "4120 - produtor rural"?

preciso ter uma base completa com dados (nome, endereço, telefone, etc) de Produtores Rurais; por favor, podem me ajudar qual o script para uso no DB Browser?

Erro executando parte 5/21

Olá, estou rodando o script. Todos os arquivos foram baixados. Deixei o script rodando a madrugada e ocorreu o seguinte erro:

"sqlite3.OperationalError: database or disk is full"

Segue a íntegra:

C:\Users\arake\OneDrive\Documentos\rede-cnpj-master\cnpj-sqlite-main\dados_cnpj_para_sqlite.py:48: RemovedIn20Warning: Deprecated API features detected! These feature(s) are not compatible with SQLAlchemy 2.0. To prevent incompatible upgrades prior to updating applications, ensure requirements files are pinned to "sqlalchemy<2.0". Set environment variable SQLALCHEMY_WARN_20=1 to show all deprecation warnings. Set environment variable SQLALCHEMY_SILENCE_UBER_WARNING=1 to silence this message. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
engine.execute(f'CREATE INDEX idx_{nomeTabela} ON {nomeTabela}(codigo);')
carregando tabela dados-publicos\F.K03200$Z.D30513.MOTICSV
carregando tabela dados-publicos\F.K03200$Z.D30513.MUNICCSV
carregando tabela dados-publicos\F.K03200$Z.D30513.NATJUCSV
carregando tabela dados-publicos\F.K03200$Z.D30513.PAISCSV
carregando tabela dados-publicos\F.K03200$Z.D30513.QUALSCSV
carregando: arq='dados-publicos\K3241.K03200Y0.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:36:37 2023
fim parcial... Sat May 20 19:39:28 2023
carregando: arq='dados-publicos\K3241.K03200Y1.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:39:28 2023
fim parcial... Sat May 20 19:40:15 2023
carregando: arq='dados-publicos\K3241.K03200Y2.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:40:15 2023
fim parcial... Sat May 20 19:40:59 2023
carregando: arq='dados-publicos\K3241.K03200Y3.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:40:59 2023
fim parcial... Sat May 20 19:41:47 2023
carregando: arq='dados-publicos\K3241.K03200Y4.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:41:47 2023
fim parcial... Sat May 20 19:42:39 2023
carregando: arq='dados-publicos\K3241.K03200Y5.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:42:39 2023
fim parcial... Sat May 20 19:43:27 2023
carregando: arq='dados-publicos\K3241.K03200Y6.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:43:27 2023
fim parcial... Sat May 20 19:44:12 2023
carregando: arq='dados-publicos\K3241.K03200Y7.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:44:12 2023
fim parcial... Sat May 20 19:44:58 2023
carregando: arq='dados-publicos\K3241.K03200Y8.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:44:58 2023
fim parcial... Sat May 20 19:45:49 2023
carregando: arq='dados-publicos\K3241.K03200Y9.D30513.EMPRECSV'
lendo csv ... Sat May 20 19:45:49 2023
fim parcial... Sat May 20 19:46:39 2023
carregando: arq='dados-publicos\K3241.K03200Y0.D30513.ESTABELE'
lendo csv ... Sat May 20 19:46:39 2023
fim parcial... Sat May 20 19:58:11 2023
carregando: arq='dados-publicos\K3241.K03200Y1.D30513.ESTABELE'
lendo csv ... Sat May 20 19:58:11 2023
fim parcial... Sat May 20 20:01:34 2023
carregando: arq='dados-publicos\K3241.K03200Y2.D30513.ESTABELE'
lendo csv ... Sat May 20 20:01:34 2023
fim parcial... Sat May 20 20:04:57 2023
carregando: arq='dados-publicos\K3241.K03200Y3.D30513.ESTABELE'
lendo csv ... Sat May 20 20:04:57 2023
fim parcial... Sat May 20 20:09:31 2023
carregando: arq='dados-publicos\K3241.K03200Y4.D30513.ESTABELE'
lendo csv ... Sat May 20 20:09:31 2023
fim parcial... Sat May 20 20:12:40 2023
carregando: arq='dados-publicos\K3241.K03200Y5.D30513.ESTABELE'
lendo csv ... Sat May 20 20:12:40 2023
fim parcial... Sat May 20 20:15:50 2023
carregando: arq='dados-publicos\K3241.K03200Y6.D30513.ESTABELE'
lendo csv ... Sat May 20 20:15:50 2023
fim parcial... Sat May 20 20:19:00 2023
carregando: arq='dados-publicos\K3241.K03200Y7.D30513.ESTABELE'
lendo csv ... Sat May 20 20:19:00 2023
fim parcial... Sat May 20 20:22:10 2023
carregando: arq='dados-publicos\K3241.K03200Y8.D30513.ESTABELE'
lendo csv ... Sat May 20 20:22:10 2023
fim parcial... Sat May 20 20:25:24 2023
carregando: arq='dados-publicos\K3241.K03200Y9.D30513.ESTABELE'
lendo csv ... Sat May 20 20:25:24 2023
fim parcial... Sat May 20 20:31:44 2023
carregando: arq='dados-publicos\K3241.K03200Y0.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:31:44 2023
fim parcial... Sat May 20 20:33:24 2023
carregando: arq='dados-publicos\K3241.K03200Y1.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:33:24 2023
fim parcial... Sat May 20 20:34:00 2023
carregando: arq='dados-publicos\K3241.K03200Y2.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:34:00 2023
fim parcial... Sat May 20 20:34:33 2023
carregando: arq='dados-publicos\K3241.K03200Y3.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:34:33 2023
fim parcial... Sat May 20 20:35:06 2023
carregando: arq='dados-publicos\K3241.K03200Y4.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:35:06 2023
fim parcial... Sat May 20 20:35:42 2023
carregando: arq='dados-publicos\K3241.K03200Y5.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:35:42 2023
fim parcial... Sat May 20 20:36:17 2023
carregando: arq='dados-publicos\K3241.K03200Y6.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:36:17 2023
fim parcial... Sat May 20 20:36:55 2023
carregando: arq='dados-publicos\K3241.K03200Y7.D30513.SOCIOCSV'
lendo csv ... Sat May 20 20:36:55 2023
fim parcial... Sat May 20 21:37:25 2023
carregando: arq='dados-publicos\K3241.K03200Y8.D30513.SOCIOCSV'
lendo csv ... Sat May 20 21:37:25 2023
fim parcial... Sat May 20 21:38:10 2023
carregando: arq='dados-publicos\K3241.K03200Y9.D30513.SOCIOCSV'
lendo csv ... Sat May 20 21:38:10 2023
fim parcial... Sat May 20 21:38:44 2023
carregando: arq='dados-publicos\F.K03200$W.SIMPLES.CSV.D30513'
lendo csv ... Sat May 20 21:38:44 2023
fim parcial... Sat May 20 21:45:25 2023
Inicio sqls: Sat May 20 21:45:25 2023

executando parte 1/21:

ALTER TABLE empresas ADD COLUMN capital_social real
fim parcial... Sat May 20 21:45:25 2023

executando parte 2/21:

update empresas
set capital_social = cast( replace(capital_social_str,',', '.') as real)
fim parcial... Sun May 21 03:56:27 2023

executando parte 3/21:

ALTER TABLE empresas DROP COLUMN capital_social_str
fim parcial... Sun May 21 04:00:00 2023

executando parte 4/21:

ALTER TABLE estabelecimento ADD COLUMN cnpj text
fim parcial... Sun May 21 04:00:00 2023

executando parte 5/21:

Update estabelecimento
set cnpj = cnpj_basico||cnpj_ordem||cnpj_dv
Traceback (most recent call last):
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: database or disk is full

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\arake\OneDrive\Documentos\rede-cnpj-master\cnpj-sqlite-main\dados_cnpj_para_sqlite.py", line 194, in
engine.execute(sql)
File "", line 2, in execute
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\util\deprecations.py", line 468, in warned
return fn(*args, **kwargs)
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 3257, in execute
return connection.execute(statement, *multiparams, **params)
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1365, in execute
return self._exec_driver_sql(
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1669, in _exec_driver_sql
ret = self._execute_context(
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1943, in _execute_context
self.handle_dbapi_exception(
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 2124, in handle_dbapi_exception
util.raise
(
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 211, in raise

raise exception
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "C:\Users\arake\anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database or disk is full
[SQL:
Update estabelecimento
set cnpj = cnpj_basico||cnpj_ordem||cnpj_dv]
(Background on this error at: https://sqlalche.me/e/14/e3q8)

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.