Introdução
Esta vinheta descreve o uso da função RREOdata(). Seu
objetivo é abstrair a complexidade da API do SICONFI, permitindo a
extração rápida e estruturada dos dados do Relatório Resumido de
Execução Orçamentária (RREO).
O Tesouro Nacional disponibiliza uma API robusta para que analistas e
gestores possam avaliar o balanço orçamentário, despesas por função e
apuração da Receita Corrente Líquida (RCL) de todos os entes da
federação. Contudo, a estrutura bruta retornada pela API (como a
marcação temporal <MR-X> para meses de referência)
exige um longo trabalho de limpeza e estruturação antes que os dados
possam ser analisados.
A função RREOdata() resolve esse problema de forma
definitiva. Além de realizar a extração em lote (permitindo passar
vetores de municípios, anos e bimestres simultaneamente), ela traduz
automaticamente os metadados do SICONFI para formatos padronizados,
prontos para a ciência de dados.
Para iniciar, carregamos os pacotes necessários:
Exemplo 1: Análise Longitudinal (Série Histórica)
Neste exemplo, extraímos o Anexo 03 (Demonstrativo da Receita Corrente Líquida) do Estado de Goiás para múltiplos anos, criando uma visualização clara da evolução da arrecadação ao longo do tempo.
# Extraindo dados do 6º bimestre (fechamento anual) de 2020 a 2023
df_rreo_go <- RREOdata(
cod.ibge = 52,
year = 2020:2023,
period = 6,
annex = 3
)
# Filtrando a Receita Corrente Líquida consolidada e plotando
df_rreo_go %>%
filter(
cod_conta == "RREO3ReceitaCorrenteLiquida",
coluna == "TOTAL (ÚLTIMOS 12 MESES)"
) %>%
ggplot(aes(x = exercicio, y = valor)) +
geom_line(color = "#e67e22", linewidth = 1.2) +
geom_point(color = "#d35400", size = 3) +
geom_text(
aes(label = paste0("R$ ", round(valor/1e9, 1))),
fontface = "bold",
vjust = -1.5,
size = 4,
colour = "#2c3e50"
) +
labs(
x = "Exercício",
y = "",
title = 'Evolução da Receita Corrente Líquida - Estado de Goiás',
subtitle = '(Valores Nominais, em Bilhões de Reais)',
caption = "Fonte: Elaborado com RREORGFdataR via SICONFI."
) +
scale_y_continuous(labels = scales::comma, expand = expansion(mult = c(0.1, 0.2))) +
theme_classic() +
theme(
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.line.y = element_blank(),
plot.title = element_text(face = "bold", size = 12),
plot.caption.position = "panel"
)
Exemplo 2: Análise Transversal (Comparação entre Entes)
A nova arquitetura vetorizada permite passar múltiplos códigos IBGE de uma só vez. Abaixo, comparamos as Despesas Empenhadas (Anexo 01) de três grandes municípios goianos no 1º bimestre de 2023.
# Passando um vetor de municípios: Goiânia, Aparecida de Goiânia e Anápolis
df_municipios <- RREOdata(
cod.ibge = c(5208707, 5201405, 5201108),
year = 2023,
period = 1,
annex = 1
)
# Comparando Despesas Empenhadas
df_municipios %>%
filter(
conta == "PESSOAL E ENCARGOS SOCIAIS",
coluna == "DESPESAS EMPENHADAS ATÉ O BIMESTRE (f)"
) %>%
mutate(
municipio = case_when(
cod_ibge == 5208707 ~ "Goiânia",
cod_ibge == 5201405 ~ "Aparecida de G.",
cod_ibge == 5201108 ~ "Anápolis"
)
) %>%
# PASSO CRÍTICO: Agrupar e somar para garantir uma única linha por ente
group_by(municipio) %>%
summarise(valor = sum(valor, na.rm = TRUE), .groups = "drop") %>%
# Ordenação movida para depois da sumarização
mutate(municipio = reorder(municipio, valor)) %>%
ggplot(aes(x = municipio, y = valor, fill = municipio)) +
geom_col(show.legend = FALSE) +
geom_text(
aes(label = paste0("R$ ", round(valor/1e6, 1), " Mi")),
hjust = -0.1,
fontface = "bold",
color = "#34495e"
) +
coord_flip() +
scale_fill_brewer(palette = "Blues") +
labs(
title = "Despesas Empenhadas com Pessoal (1º Bimestre de 2023)",
x = "", y = ""
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.3))) +
theme_minimal() +
theme(
axis.text.x = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank()
)
Exemplo 3: Criação de Banco de Dados (Persistência em Parquet)
Para análises massivas, como o acompanhamento de todos os estados brasileiros ao mesmo tempo, consultar a API interativamente pode ser demorado.
A função RREOdata() possui integração nativa com o
pacote arrow. Utilizando o argumento
save_path, você pode fazer o download em lote e persistir
os dados imediatamente em formato .parquet, otimizando
armazenamento e velocidade de leitura futura.
# 1. Extração em lote para todos os estados, salvando direto no HD
RREOdata(
cod.ibge = "all_states",
year = 2023,
period = 1:6,
annex = 1,
save_path = "dados_rreo_estados_2023.parquet"
)
# 2. Leitura otimizada (Lazy Loading) do arquivo gerado
library(arrow)
dataset_rreo <- open_dataset("dados_rreo_estados_2023.parquet")
# O motor C++ do Arrow filtra os dados sem carregar tudo na memória RAM
dados_mg <- dataset_rreo %>%
filter(cod_ibge == 31) %>% # IBGE de Minas Gerais
collect() # Traz apenas o resultado para o R