Inteligência do Sistema Financeiro Nacional — dados do IFData/BACEN estruturados, normalizados e entregues para uso institucional.
O IFData do BACEN é público, mas a experiência de uso é terrível:
- A API OData exige queries manuais por relatório × trimestre × tipo de instituição
- Sem série histórica consolidada — cada query retorna um trimestre isolado
- Paginação necessária para relatórios com muitos registros
- Quebras de série no plano COSIF (ex: mar/2025) que quebram comparações históricas
- Endpoint
IfDataCadastroretorna HTTP 500 — cadastro de IFs está indisponível via API
O PulseIFData resolve isso: coleta, normaliza e entrega tudo em schema fixo.
| Produto | Cobre | Gap |
|---|---|---|
| PulseFlat | Macro e mercado (taxas, câmbio, fundos, índices) | Não cobre instituições financeiras individuais |
| PulseRatings | Risco de crédito externo (S&P, Moody's, Fitch) | Não cobre o SFN doméstico |
| PulseIFData | Inteligência competitiva do SFN | Complementar — inadimplência, market share, crescimento por IF |
Cruzamento exclusivo: PulseIFData + PulseFlat (SELIC, CDI) → NIM ajustado ao ciclo de juros.
PulseIFData/
├── scrapers/
│ ├── utils/
│ │ ├── base.py # BaseScraper (herdado do ecossistema)
│ │ └── odata.py # Paginação OData, checkpointing, períodos
│ ├── bacen_ifdata.py # Scraper financeiro (11 relatórios × 3 tipos)
│ └── bacen_ifdata_cadastro.py # Scraper de cadastro (fallback CodInst)
├── scripts/
│ ├── normalizer.py # Pivot semântico + indicadores + join cadastro
│ ├── derivadas.py # Market share, HHI, rankings, variações QoQ/YoY
│ ├── enriquecer_cadastro.py # Enriquecimento de cadastro com fallback
│ ├── generate_catalog.py # Gera datasets.json
│ ├── upload_meta_csvs.py # Carrega CSVs auxiliares/configuração no Oracle DB
│ └── utils/ux.py # Terminal UX colorida
├── utils/
│ ├── base.py # salvar_csv, monkey-patch HTTP, helpers
│ └── db.py # Conectividade e persistência no Oracle DB via SQLAlchemy
├── config/
│ ├── settings.yaml # Endpoints OData, relatórios, range temporal
│ ├── cosif_semantic_mapping.csv # 35 contas COSIF mapeadas semanticamente
│ └── cosif_de_para.csv # Equivalências para quebra COSIF 2025
├── data/
│ ├── raw/ # CSVs trimestrais brutos (checkpoint)
│ ├── processed/ # Série consolidada pivoted + indicadores
│ ├── cadastro_ifs.csv # Cadastro enriquecido de IFs
│ ├── datasets.json # Catálogo de datasets
│ └── pipeline_status.json # Status da última execução
├── .github/workflows/main.yml # GitHub Actions (cron trimestral + Pages + Oracle DB Load)
├── run_all.py # Orquestrador do pipeline
├── index.html # Dashboard estático (GitHub Pages)
└── tests/ # Testes unitários
flowchart TD
A[API OData olinda.bcb.gov.br] --> B[scrapers/bacen_ifdata.py]
B --> C[data/raw/ checkpoints]
C --> D[scripts/normalizer.py]
C --> E[scripts/enriquecer_cadastro.py]
D --> F[data/processed/ifdata_historical_lite.csv]
D --> G[scripts/derivadas.py]
G --> H[data/derivadas_*.csv]
E --> I[data/cadastro_ifs.csv]
%% Carga do Banco de Dados
F --> K[(Oracle Cloud Autonomous Database)]
H --> K
I --> K
%% Interface Web
F --> J[index.html / consulta.html]
H --> J
I --> J
Fluxo:
- Detecção: pipeline cron do GitHub Actions verifica periodicamente novo trimestre.
- Extração: itera por ano → trimestre → relatório → tipo de IF, com paginação
$top/$skipe checkpointing emdata/raw/. - Normalização: pivota COSIF accounts → colunas semânticas, calcula ROE/ROA/NIM, join cadastro.
- Derivadas: calcula de forma vetorizada market share, HHI (0–10000), rankings, variações QoQ + YoY.
- Persistência: salva arquivos locais CSV para o dashboard estático e executa a carga paralela/incremental por lotes no Oracle Cloud Autonomous Database via SQLAlchemy Core.
- Publicação: publica o dashboard atualizado via GitHub Pages.
| # | Relatório | Categoria |
|---|---|---|
| 1 | Resumo | Balanço |
| 2 | Ativo | Balanço |
| 3 | Passivo | Balanço |
| 4 | Demonstração de Resultado | Balanço |
| 5 | Informações de Capital | Balanço |
| 6 | Segmentação | Cadastro |
| 7 | Carteira de Crédito por indexador | Crédito |
| 8 | Carteira de Crédito por nível de risco | Crédito |
| 9 | Carteira de Crédito por região geográfica | Crédito |
| 11 | Carteira de Crédito PF — modalidade e prazo | Crédito |
| 13 | Carteira de Crédito PJ — modalidade e prazo | Crédito |
Série histórica desde 2014 (10+ anos), atualização trimestral.
| Dataset | Descrição | Categoria |
|---|---|---|
cadastro_ifs.csv |
Cadastro de IFs (CodInst + nomes conhecidos) | cadastro |
ifdata_historical_10y.csv |
Série consolidada pivoted com indicadores | balanco |
derivadas_market_share.csv |
Participação de mercado por IF (%) | derivadas |
derivadas_hhi.csv |
HHI de concentração (0–10000) | derivadas |
derivadas_rankings.csv |
Rankings por ativo total e carteira | derivadas |
derivadas_var.csv |
Variações QoQ e YoY | derivadas |
- IfDataCadastro (endpoint de cadastro de IFs) retorna HTTP 500 para todos os períodos testados. O pipeline usa fallback extraindo CodInst dos dados financeiros + mapeamento manual das maiores IFs.
- Relatórios de crédito (7–13) retornam vazios para tipo 1 (conglomerados prudenciais).
- COSIF sofreu quebra de série em março/2025 —
config/cosif_de_para.csvmantém as equivalências.
git clone https://github.com/PulseDataLabs/PulseIFData.git
cd PulseIFDataEscolha uma das opções abaixo para preparar o ambiente virtual do Python:
O uv é um gerenciador de pacotes e ambientes Python escrito em Rust, sendo ordens de grandeza mais rápido que o pip tradicional.
# Instale o uv globalmente (caso não possua)
pip install uv # Ou: curl -LsSf https://astral.sh/uv/install.sh | sh
# Crie o ambiente virtual (.venv)
uv venv
# Ative o ambiente virtual
source .venv/bin/activate # No Linux/macOS
# .venv\Scripts\activate # No Windows
# Instale as dependências de forma instantânea
uv pip install -r requirements.txt# Crie o ambiente virtual (.venv)
python3 -m venv .venv
# Ative o ambiente virtual
source .venv/bin/activate # No Linux/macOS
# .venv\Scripts\activate # No Windows
# Atualize o pip e instale as dependências
pip install --upgrade pip
pip install -r requirements.txtO pipeline agora integra-se nativamente com a sua instância do Oracle Cloud Autonomous Database usando SQLAlchemy e oracledb Thin.
Crie um arquivo .env na raiz do projeto (este arquivo é ignorado pelo Git) e cadastre suas variáveis de ambiente:
ORACLE_DB_USER=ADMIN
ORACLE_DB_PASSWORD=sua_senha_do_banco
ORACLE_DB_DSN=ntixxtliyupeq3yw_high
ORACLE_DB_WALLET_DIR=wallet/
ORACLE_DB_WALLET_PASSWORD=sua_senha_da_wallet # opcionalSe o diretório wallet/ contiver os arquivos de credenciais descompactados (cwallet.sso, tnsnames.ora, etc.), a conexão usará Mutual TLS (mTLS) automaticamente. Caso o diretório esteja vazio ou ausente, o pipeline tentará se conectar via One-Way TLS direta.
# Execução padrão (extração + normalização + derivadas + catálogo + carga no banco)
python run_all.py
# Ignorar carga de banco de dados (ideal para testes locais rápidos)
python run_all.py --skip-db
# Apenas extração
python run_all.py --scraper-only
# Apenas normalização
python run_all.py --normalize-only
# Apenas derivadas
python run_all.py --derivadas-only
# Execução apenas de upload de tabelas auxiliares/CSVs
python scripts/upload_meta_csvs.py
# Regenerar catálogo de metadados
python run_all.py --generate-catalogVocê pode consultar as tabelas relacionais geradas diretamente com qualquer cliente SQL conectado à sua instância Oracle Cloud:
IFDATA_HISTORICAL: Série histórica completa consolidada.IFDATA_MARKET_SHARE: Market share calculado por IF.IFDATA_HHI: Concentração de mercado (HHI) por trimestre.IFDATA_RANKINGS: Ranking de instituições por ativo e carteira de crédito.IFDATA_VARIACOES: Variações trimestrais QoQ e anuais YoY.CADASTRO_IFS: Cadastro de IFs com mapeamento de CNPJ e CodInst.BACEN_BALANCETES_BANCOS,BACEN_CONGLOMERADOS, etc.: Tabelas auxiliares e de configuração de dados.
import pandas as pd
# Série histórica lite (últimos 3 anos para consumo web)
url = "https://raw.githubusercontent.com/PulseDataLabs/PulseIFData/main/data/processed/ifdata_historical_lite.csv"
df = pd.read_csv(url)
# Dataset específico
url_ranking = "https://raw.githubusercontent.com/PulseDataLabs/PulseIFData/main/data/derivadas_rankings.csv"
df_rank = pd.read_csv(url_ranking)Os CSVs seguem o padrão: UTF-8, separador vírgula, decimal ponto, datas YYYY-MM-DD.
Dados públicos do IFData/BACEN — ODbL. Código sob licença MIT.