// Inteligência do Sistema Financeiro Nacional
11 relatórios do IFData/BACEN coletados, normalizados e enriquecidos via pipeline serverless — série histórica consolidada desde 2014, métricas derivadas e schema consistente, prontos para consumo em CSV, Python ou BI.
O IFData do BACEN é público, mas difícil de consumir. Sem série histórica consolidada, paginação manual, quebras de série e endpoints instáveis. O PulseIFData resolve isso.
Dados desde 2014 em um único CSV. Sem iterar trimestre × relatório × tipo de IF na API OData do BACEN.
35 contas COSIF mapeadas semanticamente em colunas legíveis. UTF-8, decimal ponto, datas YYYY-MM-DD.
HHI de concentração, participação de mercado por IF, rankings e variações QoQ/YoY — calculadas automaticamente sobre a série consolidada.
Cruzamento nativo com PulseFlat (SELIC, CDI) para análises como NIM ajustado ao ciclo de juros.
IfDataCadastro retorna HTTP 500 para todos os períodos. O pipeline usa fallback via CodInst extraído dos dados financeiros + mapeamento manual das maiores IFs.
O BACEN alterou o plano COSIF em março/2025. O pipeline mantém equivalências em cosif_de_para.csv para preservar comparabilidade histórica.
Coletados para 3 tipos de instituição (conglomerado prudencial, conglomerado financeiro, IF individual). Relatórios de crédito retornam dados apenas para tipos 2 e 3.
Pipeline serverless com orquestração paralela via ThreadPoolExecutor. Checkpointing incremental evita re-coleta de trimestres já processados.
GitHub Actions com cron trimestral monitora novo período disponível no endpoint OData do BACEN (olinda.bcb.gov.br/ifdata/v1). Pode ser disparado manualmente pelo orquestrador.
O scraper itera ano → trimestre → relatório → tipo de IF com paginação $top/$skip. CSVs brutos salvos em data/raw/ como checkpoint — trimestres já coletados são ignorados em re-execuções.
35 contas COSIF mapeadas via cosif_semantic_mapping.csv são pivotadas em colunas legíveis. ROE, ROA e NIM calculados. Cadastro de IFs enriquecido via fallback CodInst. Equivalências de quebra de série aplicadas via cosif_de_para.csv.
Sobre a série consolidada (ifdata_historical.csv): market share por IF e segmento, HHI de concentração (0–10000), rankings por ativo total e carteira, variações QoQ e YoY.
CSVs versionados em git commit → push. Catálogo datasets.json regenerado automaticamente. Status da execução salvo em pipeline_status.json e pipeline_status.js — carregado pelo dashboard em tempo real.
CSVs gerados e versionados pelo pipeline. Atualizados a cada nova divulgação trimestral do BACEN.
| Dataset | Descrição | Frequência | Fonte | Download |
|---|
Todos os CSVs seguem o padrão: UTF-8, separador vírgula, decimal ponto, datas YYYY-MM-DD.
| Campo | Tipo | Descrição |
|---|---|---|
| data_base | date | Data de referência do trimestre (YYYY-MM-DD) |
| cod_inst | string | Código da instituição no IFData (CodInst) |
| nome_if | string | Nome da instituição financeira |
| tipo_inst | int | Tipo: 1=conglomerado prudencial, 2=conglomerado financeiro, 3=IF individual |
| ativo_total | float | Ativo total (R$ mil) — mapeado semanticamente de contas COSIF |
| patrimonio_liquido | float | Patrimônio líquido (R$ mil) |
| resultado_periodo | float | Resultado do período (R$ mil) |
| roe | float | Return on equity — calculado pelo pipeline |
| roa | float | Return on assets — calculado pelo pipeline |
| nim | float | Net Interest Margin — calculado pelo pipeline |
| indice_basileia | float | Índice de Basileia (%) — relatório 05 |
| segmento | string | Segmento prudencial S1–S5 — relatório 06 |
| Campo | Tipo | Descrição |
|---|---|---|
| cod_inst | string | Código da instituição no IFData (CodInst) — chave primária |
| nome_if | string | Nome da instituição financeira (mapeamento manual para as maiores IFs) |
| segmento | string | Segmento prudencial BACEN: S1, S2, S3, S4, S5 |
| fonte_cadastro | string | "api" ou "fallback" — indica se veio da API ou do fallback CodInst |
| data_base | date | Trimestre mais recente em que a IF aparece nos dados |
| Campo | Tipo | Descrição |
|---|---|---|
| data_base | date | Data de referência do trimestre |
| cod_inst | string | Código da instituição financeira (CodInst) |
| nome_if | string | Nome da instituição financeira |
| market_share_pct | float | Participação de mercado no ativo total do segmento (%) |
| hhi_segmento | float | Índice Herfindahl-Hirschman de concentração (0–10000) |
| var_qoq | float | Variação do ativo total vs. trimestre anterior (%) |
| var_yoy | float | Variação do ativo total vs. mesmo trimestre do ano anterior (%) |
| ranking_ativo | int | Posição no ranking por ativo total no trimestre |
| ranking_carteira | int | Posição no ranking por carteira de crédito total |
Clone, habilite o Actions e os dados chegam automaticamente a cada nova divulgação do BACEN. Sem dependências proprietárias.
Faça o fork ou clone direto do PulseIFData para sua conta GitHub.
pip install -r requirements.txt — apenas pandas, requests, PyYAML e aiohttp.
Na aba Actions, clique em Enable Actions. O pipeline já está configurado para monitorar novas divulgações do BACEN.
Actions → Coleta e Atualização IFData → Run workflow para verificar extração + normalização antes do próximo trimestre.
Aponte Python, Excel ou BI para as URLs raw do GitHub. Os dados são versionados e imutáveis — cada trimestre fica registrado permanentemente.
# 1. Clone git clone https://github.com/PulseDataLabs/PulseIFData.git cd PulseIFData # 2. Dependências pip install -r requirements.txt # 3. Pipeline completo (extração + normalização + derivadas + catálogo) python run_all.py # Ou etapas individuais: python run_all.py --scraper-only # só extração python run_all.py --normalize-only # só normalização python run_all.py --derivadas-only # só métricas derivadas python run_all.py --generate-catalog # regenera datasets.json python run_all.py --sequential # execução sequencial (sem paralelo) # 4. Consumo direto em Python: import pandas as pd BASE = "https://raw.githubusercontent.com/PulseDataLabs/PulseIFData/main/" # Série histórica consolidada (10+ anos) df = pd.read_csv(BASE + "data/processed/ifdata_historical.csv") # Rankings mais recentes df_rank = pd.read_csv(BASE + "data/derivadas_rankings.csv")