Pipeline de ETL para baixar, transformar e carregar em banco de dados relacional os dados públicos de CNPJ e Simples Nacional disponibilizados pela Receita Federal do Brasil.
Todos os meses a Receita publica os dados completos de todas as empresas do país em arquivos compactados, sem estrutura pronta para uso. Este projeto automatiza o processo inteiro: baixa os arquivos, descompacta, modela o banco automaticamente e insere tudo, seja em modo interativo (com menu) ou headless (para rodar em cron/CI).
Baseado no projeto original de aphonsoar, com endpoints corrigidos, ganho de performance na extração e compatibilidade atualizada. Créditos e histórico de licenciamento em
LICENSE.
- Zero configuração manual de schema: o DDL é gerado automaticamente a partir dos dados.
- Dois modos de execução: menu interativo para uso manual, ou headless para automação.
- Download concorrente: múltiplas threads configuráveis para acelerar a extração.
- Carga incremental: opção de preservar dados existentes e inserir só o que é novo.
- Competência automática: busca sozinho o mês mais recente disponibilizado pela Receita, ou você fixa um mês específico.
- Extract: download automatizado (com concorrência) direto do portal de dados abertos da Receita Federal.
- Transform: descompactação e adequação dos arquivos no sistema de arquivos local.
- Load: geração automática da modelagem (DDL) e inserção em massa no banco relacional.
.
├── src/
│ ├── start_etl.py
│ ├── configs/
│ │ └── .env_template
│ └── etl/
│ ├── cli.py
│ ├── config.py
│ ├── logging_config.py
│ ├── db/
│ │ └── postgres.py
│ ├── services/
│ │ ├── admin_service.py
│ │ └── etl_service.py
│ ├── pipeline/
│ │ ├── download.py
│ │ ├── extract.py
│ │ └── load.py
│ ├── ui/
│ │ ├── console.py
│ │ └── menu.py
│ └── schema/
│ └── tables.py
├── sql/
│ └── banco_de_dados.sql
└── requirements.txt
Pré-requisitos: Python 3.8+, um banco relacional (ex: PostgreSQL) e Git.
git clone https://github.com/lvcas-dotcom/cnpj-etl-pipeline.git
cd cnpj-etl-pipeline
cp src/configs/.env_template src/configs/.env
# edite o .env com suas credenciais de banco
pip install -r requirements.txtModo interativo (menu):
python src/start_etl.py --env src/configs/.envModo headless (automação/CRON):
python src/start_etl.py --no-menu --env src/configs/.envVariáveis de ambiente (.env):
| Variável | Descrição |
|---|---|
DATA_MONTH |
Competência específica no formato YYYY-MM. Se omitido, busca a mais recente. |
DOWNLOAD_WORKERS |
Número de threads para paralelizar o download. |
Argumentos CLI:
| Argumento | Descrição |
|---|---|
--no-drop |
Execução incremental: preserva dados existentes, insere só o novo. |
--create-db |
Cria apenas a estrutura do banco e encerra, sem baixar ou inserir dados. |
Prefere setup manual do banco? O DDL completo está em
sql/banco_de_dados.sql.
MIT. Veja LICENSE para créditos e histórico completo.