ETL
Todos os dados manipulados por esse pacote vem da Receita Federal, salvo o arquivo do Tesouro Nacional com os códigos dos municípios do IBGE.
Contexto
Um número de CNPJ tem 3 partes: base, ordem e dígitos verificadores. Isso é importante pois influencia a forma que a Receita Federal disponibiliza os dados, e a forma que o Minha Receita transforma os dados. Por exempo, para o número de CNPJ 19.131.243/0001-97:
| Base | Ordem | Dígitos verificadores |
|---|---|---|
19.131.243 |
0001 |
97 |
Uma mesma pessoa jurídica tem sempre a mesma base, e só varia a ordem (nas filiais dessa mesma pessoa jurídica, por exemplo), e os dígitos verificadores.
Dados
Os dados são disponibilizados mensalmente em um arquivo YYYY-MM.zip que contém todos os arquivos de dados do CNPJ. O grosso dos dados está nos arquivos CSV de estabelecimentos que tem Estabelecimentos* como prefixo, e as linhas desses arquivos tem um número de CNPJ completo como chave.
Os arquivos de regime tributário (entidades-*.zip) são distribuídos separadamente.
Dados que tem a base do CNPJ (apenas 8 primeiros dígitos do número de CNPJ) como chave
Dentro de YYYY-MM.zip:
- Arquivos com o prefixo
Empresas*tem o básico dos dados, como razão social, natureza jurídica e porte. - Arquivos com o prefixo
Socios*tem informações sobre o quadro societário de cada pessoa jurídica. - Arquivo
Simples.ziptem informações sobre adesão das pessoas jurídicas ao Simples e MEI.
Dados que tem o CNPJ completo como chave
- Regime tributário (
entidades-lucro-arbitrado.zip,entidades-lucro-presumido.zip,entidades-lucro-real.zipeentidades-imunes-e-isentas.zip)
Dados com outras chaves
Na leitura desses arquivos existem campos que contém um código numérico, mas sem descrição do significado (por exemplo, temos o código 9701 para o município de Brasília). Esses arquivos são chamados de tabelas de look up:
Dentro de YYYY-MM.zip:
- Arquivo
Cnaes.zipcom descrição dos CNAEs - Arquivo
Motivos.zipcom descrição dos motivos cadastrais - Arquivo
Municipios.zipcom o nome dos municípios - Arquivo
Paises.zipcom o nome dos países - Arquivo
Naturezas.zipcom o nome da natureza jurídica - Arquivo
Qualificacoes.zipcom a descrição da qualificação de cada pessoa do quadro societário
Mais o arquivo do Tesouro Nacional com os códigos dos municípios do IBGE (baixado atutomática e temporariamente durante a execução do ETL).
Estratégia de carregamento dos dados
A etapa de transformação dos dados acontece em três etapas. Primeiro o arquivo YYYY-MM.zip é descomprimido em um diretório temporário. Em seguida, todos os dados relacionais são carregados em um armazenamento de chave e valor em disco. Por último, cada linha dos Estabelecimentos* é lida, enriquecida com esses pares de chave e valor, e então enviada para o banco de dados.
flowchart
subgraph RFB ["Receita Federal"]
subgraph D ["YYYY-MM.zip"]
Est@{ shape: docs, label: "Estabelecimento*.zip"}
Emp@{ shape: docs, label: "Empresa*.zip"}
Soc@{ shape: docs, label: "Socio*.zip"}
Sim@{ shape: doc, label: "Simples.zip"}
Cna@{ shape: doc, label: "Cnaes.zip"}
Mot@{ shape: doc, label: "Motivos.zip"}
Mun@{ shape: doc, label: "Municipios.zip"}
Pai@{ shape: doc, label: "Paises.zip"}
Nat@{ shape: doc, label: "Naturezas.zip"}
Qua@{ shape: doc, label: "Qualificacoes.zip"}
end
subgraph RT ["Regime tributário"]
LuA@{ shape: doc, label: "entidades-lucro-arbitrado.zip"}
LuP@{ shape: doc, label: "entidades-lucro-presumido.zip"}
LuR@{ shape: doc, label: "entidades-lucro-real.zip"}
IeI@{ shape: doc, label: "entidades-imunes-e-isentas.zip"}
end
end
subgraph T ["Tesouro Nacional"]
Tab@{ shape: doc, label: "tabmun.csv"}
end
subgraph TMP ["Temporário"]
Ext@{ shape: db, label: "Extração" }
Bad@{ shape: db, label: "Badger" }
end
ETL1@{ shape: subproc, label: "Etapa 1" }
ETL2@{ shape: subproc, label: "Etapa 2" }
ETL3@{ shape: subproc, label: "Etapa 3" }
DB@{ shape: db, label: "Banco de dados" }
Cna -->|Lê| ETL1
Mot -->|Lê| ETL1
Mun -->|Lê| ETL1
Pai -->|Lê| ETL1
Nat -->|Lê| ETL1
Qua -->|Lê| ETL1
Emp -->|Lê| ETL1
Soc -->|Lê| ETL1
Sim -->|Lê| ETL1
Est -->|Lê| ETL1
ETL1 -->|Arquivos| Ext
Ext -->|Lê| ETL2
LuA -->|Lê| ETL2
LuP -->|Lê| ETL2
LuR -->|Lê| ETL2
IeI -->|Lê| ETL2
Tab -->|Lê| ETL2
ETL2 -->|Escreve| Bad
Ext -->|Lê Estabelecimentos| ETL3
Bad -->|Enriquece| ETL3
ETL3 -->|JSON| DB
| Etapa | Descrição | Armazenamento |
|---|---|---|
| 1 | Descomprime YYYY-MM.zip em diretório temporário em disco |
Disco |
| 2 | Carrega pares de chave e valor para: Cnaes.zip, Motivos.zip, Municipios.zip, Paises.zip, Naturezas.zip, Qualificacoes.zip, Empresas*, Socios*, Simples.zip, regimes tributários (entidades-*.zip) e códigos dos municípios do IBGE |
Badger |
| 3 | Lê os arquivos Estabelecimentos*, enriquece com os dados da etapa anterior e salva os resultados no banco de dados |
Banco de dados |