rtn-fetcher é uma biblioteca Python para download, extração e transformação de dados do Resultado do Tesouro Nacional (RTN).
O Resultado do Tesouro Nacional (RTN) contém informações fiscais consolidadas do Governo Federal brasileiro, incluindo receitas, despesas e resultado primário. Esta biblioteca facilita o acesso programático a esses dados.
Fonte dos dados: Tesouro Nacional - RTN
uv add "git+https://github.com/Quantilica/rtn-fetcher.git"pip install git+https://github.com/Quantilica/rtn-fetcher.git- Python 3.13+
- openpyxl
- httpx
- beautifulsoup4
Para análise de dados com pandas ou polars:
pip install "rtn-fetcher[pandas] @ git+https://github.com/Quantilica/rtn-fetcher.git"
pip install "rtn-fetcher[polars] @ git+https://github.com/Quantilica/rtn-fetcher.git"from pathlib import Path
from rtn_fetcher import download_latest_file
# Download da planilha mais recente
data_dir = Path("data")
filepath = download_latest_file(data_dir)
print(f"Arquivo baixado: {filepath}")from rtn_fetcher import read_sheet, write_table_to_csv
from pathlib import Path
# Ler aba específica
filepath = Path("data/rtn_202412301200.xlsx")
data, accounts = read_sheet(filepath, "1.2")
# Examinar dados
print(data)
print(f"Dados: {data.nrows} linhas × {data.ncols} colunas")
print(f"Contas: {accounts.nrows} linhas × {accounts.ncols} colunas")
# Exportar para CSV
write_table_to_csv(data, Path("output/rtn_1_2_data.csv"))
write_table_to_csv(accounts, Path("output/rtn_1_2_accounts.csv"))from rtn_fetcher import read_all_sheets
results = read_all_sheets(filepath)
for sheet_name, (data, accounts) in results.items():
print(f"{sheet_name}: {data.nrows} linhas de dados")Converta dados para DataFrames nativos para análise avançada:
from rtn_fetcher import read_sheet, to_pandas
data, accounts = read_sheet(filepath, "1.2")
# Método 1: Usar função
df = to_pandas(data)
# Método 2: Usar método direto
df = data.to_pandas()
# Agora use operações pandas
df_filtered = df[df["year"] >= 2023]
df_pivot = df.pivot_table(values="value", index="account", columns="month")from rtn_fetcher import read_sheet, to_polars
data, accounts = read_sheet(filepath, "1.2")
# Método 1: Usar função
df = to_polars(data)
# Método 2: Usar método direto
df = data.to_polars()
# Agora use operações polars (mais rápido para dados grandes)
df_filtered = df.filter(df["year"] >= 2023)
df_pivot = df.pivot(on="month", index="account", values="value")Use o comando rtn-fetcher export com subcomandos:
# Exportar para arquivo Excel formatado
rtn-fetcher export excel
# Exportar para banco de dados SQLite
rtn-fetcher export sqlite
# Customizar caminho de saída
rtn-fetcher export excel --save-as meus_dados.xlsx
rtn-fetcher export sqlite --save-as meus_dados.db
# Usar arquivo local já baixado (sem nova requisição de rede)
rtn-fetcher export excel --file rtn@20250101T120000.xlsx --save-as meus_dados.xlsxAmbos os comandos baixam automaticamente a planilha mais recente se nenhum --file for especificado.
- Download automático da planilha RTN mais recente
- Detecção de arquivos já baixados (evita downloads duplicados)
- Nomenclatura baseada em timestamp do arquivo
- Acesso à API de metadados das publicações
- Leitura de múltiplas abas da planilha RTN
- Detecção dinâmica de cabeçalhos e linhas de dados nas abas suportadas
- Extração de hierarquia de contas contábeis
- Transformação de formato wide para long (unpivot)
- Expansão automática de códigos hierárquicos
- Conversão de valores em R$ milhões para reais
- Preservação de indicadores em % do PIB como frações
- Separação de períodos em ano/mês ou ano/trimestre
- Conversão para pandas DataFrame (análise flexível)
- Conversão para polars DataFrame (análise de alto desempenho)
- Integração com ecossistema de data science Python
| Abas | Descrição | Período | Unidade |
|---|---|---|---|
| 1.1, 1.2, 1.3, 1.4, 1.5, 1.6 | Séries mensais em valores correntes | Mensal | R$ |
| 1.1-A, 1.2-A, 1.3-A, 1.4-A, 1.5-A | Séries mensais em valores constantes | Mensal | R$ |
| 1.2-B | Série mensal acumulada em 12 meses, IPCA | Mensal | R$ |
| 2.1, 2.2, 2.3, 2.4, 2.5 | Séries anuais em valores correntes | Anual | R$ |
| 2.1-A, 2.2-A, 2.3-A, 2.4-A, 2.5-A | Séries anuais em % do PIB | Anual | Fração do PIB |
| 4.1, 4.2 | Séries trimestrais do Governo Central Orçamentário | Trimestral | R$ |
As abas 3.1 e 3.2 têm layout comparativo de publicação corrente, com cabeçalhos multinível, e ainda não são normalizadas pelo leitor de séries históricas.
Após processamento, os dados ficam em formato long com as seguintes colunas:
| Coluna | Tipo | Descrição |
|---|---|---|
| year | int | Ano de referência |
| month | int | Mês de referência (dados mensais) |
| quarter | int | Trimestre de referência (dados trimestrais) |
| account | str | Código hierárquico da conta |
| value | int/float | Valores monetários em reais; % do PIB como fração |
| Coluna | Tipo | Descrição |
|---|---|---|
| account_code | str | Código hierárquico (ex: "1.2.3") |
| account_name | str | Nome completo da conta |
| account_level | int | Nível hierárquico |
| P_1, P_2, ... | str | Nome de cada parte da hierarquia |
# Dados
year month account value
2024 1 1.1 1500000000
2024 1 1.2 2300000000
2024 2 1.1 1600000000
# Hierarquia
account_code account_name account_level P_1 P_2
1.1 1.1 Receitas Correntes 2 Receitas Receitas Correntes
1.2 1.2 Receitas de Capital 2 Receitas Receitas de CapitalUse o comando rtn-fetcher para operações de sincronização e exportação:
rtn-fetcher --help
rtn-fetcher --version
# Sincronizar todas as publicações RTN (metadados + arquivos)
rtn-fetcher sync
# Baixar apenas o arquivo da série histórica mais recente
rtn-fetcher sync --latest
# Exportar dados para outros formatos
rtn-fetcher export excel
rtn-fetcher export sqlite
# Pipeline completo (sync -> export)
rtn-fetcher pipeline --format excelO comando sync busca metadados da página de publicações do Tesouro Nacional, identifica os links de download e baixa todos os arquivos ainda não presentes no diretório local. Os metadados são cacheados localmente; use --force para atualizá-los.
rtn-fetcher sync -o /data/rtn # Diretório de destino
rtn-fetcher sync --force # Refaz o fetch de metadados mesmo se já existe
rtn-fetcher sync --concurrency 8 # Até 8 downloads simultâneos
rtn-fetcher sync --dry-run # Lista os arquivos sem baixar
rtn-fetcher sync --metadata metadata.json # Usa JSON de metadados existente
rtn-fetcher sync --latest # Apenas a série histórica mais recente
rtn-fetcher --verbose sync # Exibe logs detalhadosrtn-fetcher export excel --save-as rtn_dados.xlsx
rtn-fetcher export sqlite --save-as rtn_dados.db
# Usar arquivo local já baixado (sem nova requisição de rede)
rtn-fetcher export excel --file rtn@20250101T120000.xlsx --save-as rtn_dados.xlsx
rtn-fetcher export sqlite --file rtn@20250101T120000.xlsx --save-as rtn_dados.db
# Sobrescrever banco SQLite existente sem confirmação
rtn-fetcher export sqlite --save-as rtn_dados.db --forceQuando instalado junto com quantilica-cli, o rtn-fetcher é descoberto automaticamente via entry point e montado no hub unificado:
quantilica rtn sync
quantilica rtn sync --latest
quantilica rtn export excel
quantilica rtn export sqlite
quantilica rtn pipeline --format sqliteBaixa a planilha RTN mais recente do servidor do Tesouro Nacional.
Parâmetros:
destination_dir: Diretório onde salvar o arquivo
Retorna:
Pathdo arquivo baixado, ouNonese arquivo já existe
Busca metadados de todas as publicações RTN disponíveis.
Retorna:
- Lista de dicionários com informações das publicações
Lê e normaliza uma aba específica da planilha RTN.
Parâmetros:
filepath: Caminho para o arquivo Excelsheet_name: Nome da aba ("1.2", "1.3", "1.6", "2.2-A", etc.)
Retorna:
- Tupla de
(dados, hierarquia_contas)em formato long normalizado
Exceções:
ValueError: Se a aba não estiver configuradaKeyError: Se a aba não existir no arquivo
Lê e normaliza todas as abas configuradas.
Parâmetros:
filepath: Caminho para o arquivo Excel
Retorna:
- Dicionário mapeando nomes de abas para tuplas
(dados, hierarquia)
Exporta tabela para arquivo CSV.
Parâmetros:
data: Tabela a exportarfilepath: Caminho do arquivo CSV de destino
Estrutura de dados tabular orientada a colunas (dados armazenados por coluna, não por linha).
from rtn_fetcher import Tbl
# Criar tabela
data = Tbl([
["nome", "Alice", "Bob"],
["idade", 25, 30]
])
# Acessar colunas
names = data["nome"] # ["nome", "Alice", "Bob"]
# Propriedades
print(f"Dimensões: {data.nrows} linhas × {data.ncols} colunas")
# Operações
data_subset = data.select("nome")
data_with_city = data.assign(cidade=["SP", "RJ"])
long_data = data.melt(id_cols=["nome"])
renamed = data.rename(nome="name", idade="age")
# Iterar por linhas
for row in data.iter_rows():
print(row)Métodos principais:
select(*columns): Seleciona colunas específicasassign(**columns): Adiciona/atualiza colunasmelt(id_cols, var_name, value_name): Transforma wide → long (unpivot)transpose(): Transpõe tabelainsert(table, index): Insere colunas de outra tabeladrop_rows(rows): Remove linhas por índicedrop_cols(cols): Remove colunas por índicerename(**names): Renomeia colunasiter_rows(): Itera sobre linhasget_header(): Retorna nomes de colunas
Atributos:
data: Matriz de colunas (lista de listas)nrows: Número de linhas (incluindo cabeçalho)ncols: Número de colunas
Extrai linhas brutos de uma aba Excel sem normalização.
Extrai metadados de publicação de HTML.
Constrói hierarquia de contas a partir de tabela de dados.
Extrai código e nome de uma string combinada (ex: "1.2.3 Descrição").
Expande código hierárquico com os nomes de cada nível.
src/rtn_fetcher/
├── __init__.py # API pública
├── cli.py # Interface de linha de comando
├── constants.py # Configurações centralizadas
├── table.py # Estrutura de dados Tbl
├── excel.py # Leitura de arquivos Excel
├── fetcher.py # Download de dados
├── extract.py # Extração de dados brutos
├── account.py # Processamento de hierarquia
└── reader.py # Pipeline de leitura completo
Excel File → extract_data_rows() → build_account_data()
↓
convert_cells_to_values() → melt() → split period columns
↓
(data, account_hierarchy)
- Orientado a colunas: Dados armazenados como lista de colunas para eficiência
- Transformações imutáveis: Operações retornam novas tabelas
- Type hints completos: Melhor IDE support e validação
- Docstrings detalhadas: Documentação em cada função
- Separação de responsabilidades: Cada módulo tem função clara
git clone https://github.com/Quantilica/rtn-fetcher.git
cd rtn-fetcher
uv sync --dev
uv run pytestMIT — veja LICENSE.