• Stars
    star
    560
  • Rank 79,541 (Top 2 %)
  • Language
    Python
  • License
    GNU Lesser Genera...
  • Created almost 7 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Captura os dados de sócios das empresas brasileiras na Receita Federal e exporta para um formato legível por humanos

Sócios de Empresas Brasileiras

Script que baixa todos os dados de sócios das empresas brasileiras disponíveis no site da Receita Federal, extrai, limpa e converte para CSV. Para entender melhor sobre quais dados estão disponíveis, consulte a história desse dataset.

Licença

A licença do código é LGPL3 e dos dados convertidos Creative Commons Attribution ShareAlike. Caso utilize os dados, cite a fonte original e quem tratou os dados, como: Fonte: Receita Federal do Brasil, dados tratados por Álvaro Justen/Brasil.IO. Caso compartilhe os dados, utilize a mesma licença.

Dados

Entrada

Os dados publicados pela Receita Federal do Brasil contemplam as seguintes tabelas:

  • Cadastro das empresas, incluindo CNPJ, razão social, nome fantasia, endereço, CNAE fiscal e outros;
  • Cadastro de sócios, contendo CNPJ da empresa, documento do sócio, nome do sócio e outros;
  • CNAEs secundários para cada CNPJ.

Os dados originalmente estão em um formato fixed-width file e cada linha possui um tipo diferente de registro (empresa, sócio, CNAE secundária, header ou trailler), que dificulta qualquer tipo de análise, sendo necessária a conversão para formatos mais amigáveis.

O campo de qualificação do sócio foi definido com base na tabela disponibilizada pela Receita Federal e está disponível no arquivo qualificacao-socio.csv. Em breve também teremos arquivos com os nomes dos CNAEs e situação cadastral (veja mais detalhes aqui).

Saída

Além de extrair os dados do arquivo origingal, o script gera uma nova tabela contendo as empresas que são sócias de outras empresas (para facilitar buscas de holdings).

Caso você não queira/possa rodar o script, acesse diretamente os dados convertidos no Brasil.IO.

Se esse programa e/ou os dados resultantes foram úteis a você ou à sua empresa, considere fazer uma doação ao projeto Brasil.IO, que é mantido voluntariamente.

Como resultado temos os seguintes arquivos:

  • empresa.csv.gz: cadastro das empresas;
  • socio.csv.gz: cadastro dos sócios;
  • cnae-secundaria.csv.gz: lista de CNAEs secundárias;
  • holding.csv.gz: cadastro das empresas que são sócias de outras empresas (é o arquivo socio.csv.gz filtrado por sócios do tipo PJ).

Além disso, os arquivos contidos nas pastas schema e schema-full podem te ajudar a importar os dados para um banco de dados (veja comandos para SQLite e PostgreSQL abaixo).

Nota 1: a extensão .gz quer dizer que o arquivo foi compactado usando gzip. Para descompactá-lo execute o comando gunzip arquivo.gz (não é necessário descompactá-los caso você siga as instruções de importação em SQLite e PostgreSQL).

Nota 2: a codificação de caracteres original é ISO-8859-15, mas o script gera os arquivos CSV em UTF-8.

Nota 3: se você estava usando os dados no formato anterior, veja como converter os novos para o padrão antigo no arquivo sql/04-create-old-views.sql.

Privacidade

Para garantir a privacidade, evitar SPAM e publicar apenas dados corretos, o script deleta/limpa algumas colunas com informações sensíveis ou incorretas. Essa é a forma padrão de funcionamento para não facilitar a exposição desses dados. Os dados censurados são:

  • Na tabela empresa:
    • Deletadas as colunas codigo_pais e nome_pais, pois os dados contidos nelas estão incorretos;
    • Deletada a coluna correio_eletronico, para evitar SPAM;
  • Na tabela socio:
    • Deletadas as colunas codigo_pais e nome_pais, pois os dados contidos nelas estão incorretos;
    • As colunas complemento, ddd_fax, ddd_telefone_1, ddd_telefone_2, descricao_tipo_logradouro, logradouro, numero terão seus dados deletados (ficarão em branco) para empresas que são empreendedores individuais (MEI, EI, EIRELI etc.) e, provavelmente, correspondem aos dados do sócio (endereço residencial, por exemplo);
    • Para os casos de empresas individuais que constarem o CPF na razão social (como é comum no caso de MEIs), o CPF será deletado.

Caso queira rodar o script sem o modo censura, altere o script run.sh e adicione a opção --no_censorship para o script extract_dump.py.

Dados auxiliares

  • Cadastro Nacional de Atividades Empresariais (CNAE): existe um spider que baixa os metadados das atividades empresariais (CNAEs) do site do IBGE. Veja a função extract_cnae no arquivo run.sh, ela baixará os dados para as versões 1.0, 1.1, 2.0, 2.1, 2.2 e 2.3 e salvará em data/output. Nota: esse script será melhorado/alterado, veja a issue #36.
  • Natureza jurídica: o arquivo data/natureza-juridica.csv contém o cadsatro de naturezas jurídicas das empresas (coluna codigo_natureza_juridica da tabela empresa). Esse arquivo é gerado pelo script natureza_juridica.py, que baixa os dados do site da Receita Federal.

Rodando

Instalando as Dependências

Esse script depende de Python 3.7, de algumas bibliotecas e do software aria2. Depois de instalar o Python 3.7 e o aria2, instale as bibliotecas executando:

pip install -r requirements.txt

Executando

Então basta executar o script run.sh para baixar os arquivos necessários e fazer as conversões:

./run.sh

Você poderá rodar etapas separadamente também (leia o script run.sh para mais detalhes).

Agilizando o Download

O servidor da Receita Federal onde os dados estão hospedados é muito lento e, por isso, o Brasil.IO disponibiliza um mirror de onde o download pode ser feito mais rapidamente. Para executar o script baixando os dados do mirror, execute:

./run.sh --use-mirror

Nota: os mirrors do Brasil.IO ainda estão em fase de testes e não é garantido que estejam sempre atualizados.

Importando em Bancos de Dados

Depois de executar o script ou baixar os dados já convertidos, o ideal é importá-los em um banco de dados para facilitar consultas. Com a interface de linha de comando da rows é possível importá-los rapidamente em bancos SQLite e PostgreSQL.

Nota 1: depois de importar os dados em um banco de dados é recomendável a criação de índices para agilizar as consultas. Um índice bem comum é na coluna cnpj (de todas as tabelas), para facilitar encontrar uma determinada empresa, seus sócios e CNAEs secundários através do CNPJ. Exemplo: CREATE INDEX IF NOT EXISTS idx_empresa_cnpj ON empresa (cnpj);. Veja o arquivo sql/create-indexes.sql para uma lista de índices sugeridos; veja também os outros arquivos da pasta sql/ para criação de tabelas auxiliares, chaves primárias e estrangeiras e o arquivo import-postgresql.sh para automatizar o processo de importação e criação dos índices.

Nota 2: caso utilize a opção --no_censorship, utilize os arquivos da pasta schema-full em vez da pasta schema, pois a versão "sem censura" possui mais colunas.

SQLite

Instale a CLI da rows e a versão de desenvolvimento da biblioteca rodando (requer Python 3.7+):

pip install rows[cli]
pip install -U https://github.com/turicas/rows/archive/develop.zip

Agora, com os arquivos na pasta data/output basta executar os seguintes comandos:

DB_NAME="data/output/socios-brasil.sqlite"
rows csv2sqlite --schemas=schema/empresa.csv data/output/empresa.csv.gz "$DB_NAME"
rows csv2sqlite --schemas=schema/holding.csv data/output/holding.csv.gz "$DB_NAME"
rows csv2sqlite --schemas=schema/socio.csv data/output/socio.csv.gz "$DB_NAME"
rows csv2sqlite --schemas=schema/cnae-secundaria.csv data/output/cnae-secundaria.csv.gz "$DB_NAME"

Pegue um café, aguarde alguns minutos e depois desfrute do banco de dados em data/output/socios-brasil.sqlite. :)

PostgreSQL

Instale a CLI da rows, as dependências do PostgreSQL e a versão de desenvolvimento da biblioteca rodando (requer Python 3.7+):

pip install rows[cli]
pip install rows[postgresql]
pip install -U https://github.com/turicas/rows/archive/develop.zip

Agora, com os arquivos na pasta data/output basta executar os seguintes comandos (não esqueça de preencher a variável POSTGRESQL_URI corretamente):

POSTGRESQL_URI="postgres://<user>:<pass>@<host>:<port>/<dbname>"  # PREENCHA!
rows pgimport --schema=schema/empresa.csv data/output/empresa.csv.gz $POSTGRESQL_URI empresa
rows pgimport --schema=schema/socio.csv data/output/empresa-socia.csv.gz $POSTGRESQL_URI empresa_socia
rows pgimport --schema=schema/socio.csv data/output/socio.csv.gz $POSTGRESQL_URI socio
rows pgimport --schema=schema/cnae-secundaria.csv data/output/cnae-secundaria.csv.gz $POSTGRESQL_URI cnae_secundaria

Pegue um café, aguarde alguns minutos e depois desfrute do banco de dados em $POSTGRESQL_URI. :)

Outras Implementações

Em R:

Em Python:

More Repositories

1

brasil.io

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)
Python
915
star
2

rows

A common, beautiful interface to tabular data, no matter the format
Python
865
star
3

covid19-br

Dados diários mais recentes do coronavírus por município brasileiro
Python
530
star
4

salarios-magistrados

Baixa as planilhas de salários de magistrados, extrai os contracheques, limpa e exporta pra CSV
Python
250
star
5

eleicoes-brasil

Scripts para capturar dados do Repositório de Dados Eleitorais do TSE, limpá-los, normalizá-los e agrupá-los
Python
147
star
6

sbc

SBC - Use SSH Like a Boss!
Shell
81
star
7

Ethernet_ENC28J60

[NOT MAINTAINED, NOT COMPLETED] Implementation of an Arduino-compatible socket layer library that uses Microchip ENC28J60 Ethernet controller.
C
76
star
8

crau

Easy-to-use Web archiver
Python
56
star
9

transparencia-gov-br

Scraper do Portal da Transparência do Governo Federal, em Python 3
Python
51
star
10

nubank-to-csv

Script para converter a fatura do NuBank (em PDF) para um CSV lindão
Python
50
star
11

genero-nomes

Classifica nomes por gênero de acordo com API do IBGE
Python
49
star
12

braindump

braindump: low-tech dump of my neurons
45
star
13

capturando-dados-sem-dor-de-cabeca

Material do tutorial "Capturando dados sem dor de cabeça"
Python
42
star
14

mongodict

MongoDB-backed Python dict-like interface
Python
39
star
15

outputty

NOT MAINTAINED ANYMORE. SEE "rows"
Python
37
star
16

cursos-prouni

Baixa dados relativos aos cursos que possuem bolsas integrais e parciais no PROUNI
Python
33
star
17

templater

Extract, parse and populate templates from strings
Python
27
star
18

gastos-deputados

Script que baixa, extrai e limpa dados de gastos da cota parlamentar
Python
26
star
19

censo-ibge

Scripts de captura para dados do Censo IBGE
Python
22
star
20

mandados-de-prisao

NÃO FUNCIONA MAIS POR CONTA DA NOVA VERSÃO DO BNMP. Scripts que coletam mandados da Base Nacional de Mandados de Prisão
Python
20
star
21

arduinoMakefile

[OUTDATED/NOT MAINTAINED] Simple Makefile (that works) for compile and upload Arduino sketches
Java
20
star
22

processos-stf

Script que baixa todos os processos do STF baseado na listagem disponível nas atas de distribuição
Python
15
star
23

droiduino

Control your house via Internet using your Android phone with Python and Arduino!
Python
14
star
24

pastebin-cli

Command-line interface to paste code/text to pastebin.com
Python
14
star
25

brasil

Python library to access Brazilian data through Brasil.IO API
Python
12
star
26

plotter

Plot data from CSV using Python, matplotlib and outputty
Python
11
star
27

DS1307

Arduino library for reading and setting date and time for the DS1307 Real-Time Clock IC
Java
11
star
28

luminaria-rgb

Luminária RGB controlada por Arduino e Android, via Ethernet
Java
10
star
29

pybitcask

A pure-Python implementation of Basho's bitcask key-value store.
Python
10
star
30

no-silence

Automatically detect and delete silince parts in videos
Python
10
star
31

pycopy

API wrapper to Copy.com compatible with Dropbox API
Python
9
star
32

dados-parana

Scrapers que capturam dados sobre o estado do Paraná e seus municípios
Python
9
star
33

autuacoes-ambientais-ibama

Extrator de PDFs de Autuações Ambientais do IBAMA
Python
8
star
34

shapefiles-brasil

Coleta shapefiles do IBGE, converte para GeoJSON e gera versões simplificadas
Python
8
star
35

festival-de-curitiba

Scraper que baixa os eventos que acontecerão no Festival de Curitiba (2019)
Python
7
star
36

slides

Slides of my talks
HTML
7
star
37

vortaroj

A Python dict that speaks many languages
Python
7
star
38

learning-sockets

Python
7
star
39

data-worker

Conjunto de scripts que roda scripts de coleta, extração e limpeza de dados do Brasil.IO
Shell
7
star
40

dotfiles

Some of my dotfiles
Shell
6
star
41

tweetlamp

Activate/deactivate any AC device by tweets using Arduino
Python
6
star
42

easygpg

Easy-to-use command-line interface to GnuPG
Python
5
star
43

turicas.github.io

Personal web page
HTML
5
star
44

tabula-docker

Script to build docker images for Tabula releases using Eclipse Temurin
Shell
5
star
45

simulado-detran-rj

Crawler das questões do simulado do DETRAN-RJ
Python
4
star
46

tomada-bluetooth

Tomada controlada por Bluetooth pelo Android
Java
4
star
47

curso-python-verao-2012

Resposta de alguns exercícios do curso de Python (EMAp/FGV, verão 2012)
Python
4
star
48

lista-anistiados

Script que extrai a lista de anistiados em PDF (2015 e 2018) e gera CSV
Python
4
star
49

async_process_executor

Python class to asynchronously execute tasks in processes
Python
3
star
50

websitetopdf

Simple app to demonstrate the usage of simplefractal/heroku-buildpack-wkhtmltopdf
Python
3
star
51

ddwrtdb

Simple CLI to search on DD-WRT router database and retrieve router information
Python
3
star
52

curriculum-vitae

My curriculum, in LaTex :)
TeX
3
star
53

fabric-recipes

Some useful fabric recipes
Python
3
star
54

SNES

Arduino library to get state of the buttons of a SNES controller.
C++
3
star
55

countdown-traffic-light

Python+Arduino-based countdown for 5min lightning talks that acts as a traffic-light
Python
3
star
56

nlplaying

My playings in Natural Language Processing, in Python.
Python
3
star
57

pytches

Play old-style musics using Python and beep (Unix)
Python
2
star
58

agensgraph-docker

Agensgraph Docker image based on official PostgreSQL image
Shell
2
star
59

cursodearduino.com.br

Site do Curso de Arduino
HTML
2
star
60

row

Reference implementation of a new tabular data format created by dataprotocols
Python
2
star
61

strobo

Python
2
star
62

carmomaq

Utilities to collect data and control Carmomaq coffee roasters
Python
2
star
63

old-pypelinin-text

Pipelines to process text in Python
Python
1
star
64

google-developer-day-2011

Minha implementação para resolver a provinha para entrar no Google Developer Day 2011 Brasil/São Paulo - e eu passei! \o/
Python
1
star
65

git_inspect

Tools to inspect git repositories
Python
1
star
66

site-teste

Python
1
star
67

Genuino

Jogo da memória para Arduino
Java
1
star
68

slides-ssh-avancado-e-sbc

Slides of my talks
JavaScript
1
star
69

ptwp_tagger

Tagging Portuguese Wikipedia with PyPLN and Palavras
Python
1
star
70

jsock

Key-value-based, HMAC-signed, non-blocking sockets for Python
Python
1
star
71

site-render

Python
1
star