1 Introdução

As emendas parlamentares são a forma pela qual deputados e senadores mudam o Orçamento da União e direcionam dinheiro federal para estados, municípios e instituições. Elas ficaram bastante comentadas nos últimos anos, principalmente por causa da discussão sobre transparência no uso desses recursos.

Neste trabalho eu uso os dados abertos do Portal da Transparência, que são divulgados em três tabelas (Emendas, Por Favorecido e Convênios). A pergunta que guia a análise é:

Para onde vão os recursos das emendas e como Pernambuco se compara aos demais estados do Nordeste?

Para respondê-la, vou (1) limpar e juntar as três tabelas, (2) olhar a evolução do valor empenhado e pago ao longo dos anos, (3) comparar Pernambuco com os outros oito estados da região, (4) ver em quais áreas o dinheiro é aplicado e (5) identificar quem recebe os recursos dentro de Pernambuco.

Algumas palavras do vocabulário orçamentário que aparecem ao longo do texto:

  • Valor empenhado: o governo reserva o dinheiro para aquela despesa (é o compromisso).
  • Valor liquidado: o serviço ou bem foi entregue e a despesa foi conferida.
  • Valor pago: o dinheiro de fato saiu dos cofres.
  • Restos a pagar: despesas empenhadas em um ano que só são pagas em anos seguintes.

2 Pacotes utilizados

library(dplyr)    # manipulação de dados (filter, group_by, summarise, joins)
library(tidyr)    # transformar tabelas (pivot_wider)
library(ggplot2)  # gráficos
library(plotly)   # deixa os gráficos interativos
library(DT)       # tabelas interativas com busca e ordenação
library(scales)   # formatação de números nos gráficos
Pacote Para que foi usado
dplyr filtros, agrupamentos, resumos e junção das tabelas
tidyr reorganizar tabelas entre formato longo e largo
ggplot2 construção dos gráficos
plotly interatividade nos gráficos (passar o mouse mostra os valores)
DT tabelas que o leitor pode pesquisar e ordenar
scales rótulos de números e moeda

3 Preparação dos dados

3.1 Origem e descrição

Os arquivos foram baixados do Portal da Transparência do Governo Federal (dados livres e públicos). São três tabelas em CSV:

  • Emendas: cada linha é um registro orçamentário de uma emenda (ano, tipo, autor, local de aplicação, função, programa, ação e os valores empenhado, liquidado e pago).
  • Por Favorecido: quem recebeu o dinheiro (pessoa, prefeitura, fundo de saúde etc.) e quanto.
  • Convênios: os convênios firmados a partir das emendas (convenente, objeto e valor).

A chave para ligar as tabelas é o Código da Emenda.

3.2 Importação

Os arquivos usam separador ;, vírgula como decimal e codificação latin1. O Código da Emenda tem cerca de 12 dígitos, então foi lido como texto para não virar notação científica. As expressões “Sem informação” e “S/I” foram tratadas como valores ausentes (NA) logo na leitura.

ler <- function(arquivo) {
  read.csv2(arquivo,
            fileEncoding = "latin1",
            check.names = FALSE,
            na.strings = c("", "Sem informação", "S/I"),
            colClasses = c("Código da Emenda" = "character"))
}

emendas    <- ler("EmendasParlamentares.csv")
favorecido <- ler("EmendasParlamentares_PorFavorecido.csv")
convenios  <- ler("EmendasParlamentares_Convenios.csv")

tamanhos <- data.frame(
  tabela  = c("Emendas", "Por Favorecido", "Convênios"),
  linhas  = c(nrow(emendas), nrow(favorecido), nrow(convenios)),
  colunas = c(ncol(emendas), ncol(favorecido), ncol(convenios))
)
tamanhos

3.3 Problemas encontrados e decisões de limpeza

# valores ausentes por tabela
nas <- data.frame(
  tabela = c("Emendas", "Por Favorecido", "Convênios"),
  total_NA = c(sum(is.na(emendas)), sum(is.na(favorecido)), sum(is.na(convenios)))
)
nas
# linhas totalmente duplicadas
c(emendas = sum(duplicated(emendas)),
  favorecido = sum(duplicated(favorecido)),
  convenios = sum(duplicated(convenios)))
##    emendas favorecido  convenios 
##          0          0          0
# emendas sem código (não dá para ligar com as outras tabelas)
sem_codigo <- sum(is.na(emendas$`Código da Emenda`))
sem_codigo
## [1] 17810

As decisões foram estas:

  1. Valores ausentes: 611.667 células vazias no total. Mantive as linhas e não preenchi nada, porque a ausência é informação (por exemplo, emenda sem município definido).
  2. Duplicatas: não há linhas totalmente repetidas. Uma mesma emenda aparece em várias linhas (uma por ação, local ou favorecido), o que é esperado.
  3. Emendas sem código: 17.810 linhas não têm Código da Emenda. Elas não entram na junção, mas continuam nas análises que usam só a tabela de Emendas.
  4. Datas e períodos: a data do convênio estava como texto (dd/mm/aaaa) e foi convertida para Date. A coluna Ano/Mês (ex.: 202610) foi separada em ano e mês.
  5. Nomes de colunas: renomeei as colunas que uso para nomes curtos e sem acento.
  6. Estados: a coluna UF vem com o nome por extenso na tabela de Emendas e com a sigla na de Favorecidos. Além disso, algumas linhas da região Nordeste têm UF vazia ou “Múltiplo” (recurso para a região inteira ou para vários estados). Essas linhas foram retiradas da comparação entre estados, porque não dá para atribuí-las a um estado.
emendas <- emendas %>%
  rename(codigo = `Código da Emenda`, ano = `Ano da Emenda`, tipo = `Tipo de Emenda`,
         autor = `Nome do Autor da Emenda`, regiao = Região, uf = UF,
         municipio = Município, funcao = `Nome Função`, subfuncao = `Nome Subfunção`,
         empenhado = `Valor Empenhado`, liquidado = `Valor Liquidado`,
         pago = `Valor Pago`, rap_pagos = `Valor Restos A Pagar Pagos`)

favorecido <- favorecido %>%
  rename(codigo = `Código da Emenda`, tipo = `Tipo de Emenda`,
         favorecido = Favorecido, tipo_fav = `Tipo Favorecido`,
         uf_fav = `UF Favorecido`, municipio_fav = `Município Favorecido`,
         recebido = `Valor Recebido`) %>%
  mutate(ano = `Ano/Mês` %/% 100,
         mes = `Ano/Mês` %% 100)

convenios <- convenios %>%
  rename(codigo = `Código da Emenda`, convenente = Convenente,
         valor_conv = `Valor Convênio`) %>%
  mutate(data_pub = as.Date(`Data Publicação Convênio`, format = "%d/%m/%Y"))

# tipos de emenda com nomes mais curtos
emendas <- emendas %>%
  mutate(tipo = case_when(
    grepl("Finalidade Definida", tipo) ~ "Individual (finalidade definida)",
    grepl("Especiais", tipo)           ~ "Individual (transferência especial)",
    grepl("Bancada", tipo)             ~ "Bancada",
    grepl("Comissão", tipo)            ~ "Comissão",
    grepl("Relator", tipo)             ~ "Relator",
    TRUE ~ tipo))

# base do Nordeste: só linhas que pertencem a um estado específico
nordeste <- emendas %>%
  filter(regiao == "Nordeste", !is.na(uf), uf != "Múltiplo") %>%
  mutate(uf = tools::toTitleCase(tolower(uf)),
         destaque = ifelse(uf == "Pernambuco", "Pernambuco", "Outros estados"))

3.4 Junção das tabelas

Como uma emenda aparece em várias linhas em cada tabela, juntar direto multiplicaria os valores. Por isso, primeiro resumi cada tabela para uma linha por emenda e só depois fiz o left_join pelo código.

emendas_cod <- emendas %>%
  filter(!is.na(codigo)) %>%
  group_by(codigo) %>%
  summarise(ano = first(ano), tipo = first(tipo), autor = first(autor),
            empenhado = sum(empenhado), pago = sum(pago), .groups = "drop")

favorecido_cod <- favorecido %>%
  group_by(codigo) %>%
  summarise(n_favorecidos = n_distinct(favorecido),
            total_recebido = sum(recebido), .groups = "drop")

convenios_cod <- convenios %>%
  group_by(codigo) %>%
  summarise(n_convenios = n(), total_convenios = sum(valor_conv), .groups = "drop")

emendas_final <- emendas_cod %>%
  left_join(favorecido_cod, by = "codigo") %>%
  left_join(convenios_cod,  by = "codigo") %>%
  mutate(tem_convenio = !is.na(n_convenios),
         taxa_execucao = ifelse(empenhado > 0, pago / empenhado, NA))

dim(emendas_final)
## [1] 76795    12

A nova variável taxa_execucao (pago ÷ empenhado) mede quanto do que foi prometido já virou pagamento.

Uma amostra da base final (as 100 primeiras linhas):

emendas_final %>%
  head(100) %>%
  mutate(across(c(empenhado, pago, total_recebido, total_convenios), ~ round(.x, 2))) %>%
  datatable(options = list(pageLength = 5, scrollX = TRUE), rownames = FALSE)

3.5 Resumo das variáveis principais

emendas %>%
  select(ano, empenhado, liquidado, pago) %>%
  summary()
##       ano         empenhado            liquidado              pago          
##  Min.   :2014   Min.   :    -35865   Min.   :0.000e+00   Min.   :0.000e+00  
##  1st Qu.:2017   1st Qu.:    255000   1st Qu.:0.000e+00   1st Qu.:0.000e+00  
##  Median :2019   Median :    593000   Median :1.400e+03   Median :0.000e+00  
##  Mean   :2020   Mean   :   3619591   Mean   :2.077e+06   Mean   :2.055e+06  
##  3rd Qu.:2023   3rd Qu.:   1989839   3rd Qu.:6.000e+05   3rd Qu.:5.621e+05  
##  Max.   :2026   Max.   :5019577208   Max.   :5.020e+09   Max.   :5.020e+09

4 Análise exploratória

4.1 Quanto foi empenhado e quanto foi pago a cada ano?

por_ano <- emendas %>%
  group_by(ano) %>%
  summarise(empenhado = sum(empenhado) / 1e9,
            pago = sum(pago) / 1e9,
            rap_pagos = sum(rap_pagos) / 1e9,
            taxa = pago / empenhado * 100)

g1 <- por_ano %>%
  select(ano, Empenhado = empenhado, Pago = pago) %>%
  pivot_longer(-ano, names_to = "situacao", values_to = "valor") %>%
  ggplot(aes(factor(ano), valor, fill = situacao, text = paste0(situacao, ": R$ ", round(valor, 1), " bi"))) +
  geom_col(position = "dodge") +
  scale_fill_manual(values = c(Empenhado = "grey70", Pago = "#1b6ca8")) +
  labs(x = NULL, y = "R$ bilhões", fill = NULL,
       title = "Emendas parlamentares no Brasil: empenhado x pago por ano") +
  theme_minimal()
ggplotly(g1, tooltip = "text")

O valor pago cresce bastante a partir de 2020. O maior valor pago está em 2025 (R$ 31,5 bi). Nos anos de 2014 e 2015 a taxa de execução aparece muito baixa (2,2% e 0,7%), mas isso não quer dizer que o dinheiro não foi gasto: ele foi pago depois, como restos a pagar (R$ 4,5 bi só para as emendas de 2014). Já o ano de 2026 ainda está em andamento, então seus números tendem a crescer.

4.2 Pernambuco no Nordeste

4.2.1 Valor pago por estado

por_uf <- nordeste %>%
  group_by(uf, destaque) %>%
  summarise(pago = sum(pago) / 1e9, empenhado = sum(empenhado) / 1e9, .groups = "drop") %>%
  arrange(desc(pago))

g2 <- ggplot(por_uf, aes(reorder(uf, pago), pago, fill = destaque,
                         text = paste0(uf, ": R$ ", round(pago, 2), " bi pagos"))) +
  geom_col() +
  coord_flip() +
  scale_fill_manual(values = c("Pernambuco" = "#d62728", "Outros estados" = "grey65")) +
  labs(x = NULL, y = "Valor pago (R$ bilhões, 2014–2026)", fill = NULL,
       title = "Emendas pagas por estado do Nordeste") +
  theme_minimal()
ggplotly(g2, tooltip = "text")

Pernambuco aparece em 4º lugar no valor pago, com R$ 6,3 bi, o que corresponde a 12,8% do que foi pago aos nove estados do Nordeste. O estado que mais recebeu foi Bahia (R$ 9,1 bi).

Atenção: este é o valor absoluto. Estados maiores tendem a receber mais, e eu não controlei pelo tamanho da população, porque ela não faz parte dos dados originais (isso fica como limitação, comentada nas conclusões).

4.2.2 A participação de Pernambuco mudou ao longo dos anos?

part_pe <- nordeste %>%
  group_by(ano) %>%
  summarise(participacao = sum(empenhado[uf == "Pernambuco"]) / sum(empenhado) * 100)

g3 <- ggplot(part_pe, aes(ano, participacao,
                          text = paste0(ano, ": ", round(participacao, 1), "%"))) +
  geom_line(color = "#d62728", group = 1) +
  geom_point(color = "#d62728") +
  scale_x_continuous(breaks = part_pe$ano) +
  labs(x = NULL, y = "% do empenhado no Nordeste",
       title = "Participação de Pernambuco no total empenhado ao Nordeste") +
  theme_minimal()
ggplotly(g3, tooltip = "text")

A participação fica na faixa de 10,5% a 14,4% ao longo dos anos, ou seja, Pernambuco mantém um papel parecido de um ano para o outro, sem grandes saltos.

4.3 Em que áreas o dinheiro é aplicado?

funcoes <- nordeste %>%
  mutate(grupo = ifelse(uf == "Pernambuco", "Pernambuco", "Demais estados do NE")) %>%
  group_by(grupo, funcao) %>%
  summarise(v = sum(empenhado), .groups = "drop") %>%
  group_by(grupo) %>%
  mutate(prop = v / sum(v) * 100) %>%
  ungroup()

top_funcoes <- funcoes %>%
  group_by(funcao) %>% summarise(m = max(prop)) %>% slice_max(m, n = 6) %>% pull(funcao)

g4 <- funcoes %>%
  filter(funcao %in% top_funcoes) %>%
  ggplot(aes(reorder(funcao, prop), prop, fill = grupo,
             text = paste0(grupo, ": ", round(prop, 1), "%"))) +
  geom_col(position = "dodge") +
  coord_flip() +
  scale_fill_manual(values = c("Pernambuco" = "#d62728", "Demais estados do NE" = "grey65")) +
  labs(x = NULL, y = "% do valor empenhado", fill = NULL,
       title = "Principais áreas (funções) das emendas") +
  theme_minimal()
ggplotly(g4, tooltip = "text")

A Saúde domina: ela concentra 56,3% do que foi empenhado em Pernambuco e 56,5% nos demais estados. O perfil de Pernambuco é, portanto, muito parecido com o do resto do Nordeste. “Encargos especiais” e “Urbanismo” completam o grupo das três maiores áreas nos dois casos.

4.4 Que tipos de emenda mais cresceram?

tipos <- nordeste %>%
  group_by(ano, tipo) %>%
  summarise(v = sum(empenhado) / 1e9, .groups = "drop")

g5 <- ggplot(tipos, aes(ano, v, fill = tipo,
                        text = paste0(tipo, ": R$ ", round(v, 2), " bi"))) +
  geom_col() +
  scale_x_continuous(breaks = unique(tipos$ano)) +
  labs(x = NULL, y = "R$ bilhões empenhados", fill = NULL,
       title = "Nordeste: valor empenhado por tipo de emenda") +
  theme_minimal() +
  theme(legend.position = "bottom")
ggplotly(g5, tooltip = "text")

Aqui aparece uma mudança de regra visível no gráfico: as emendas de relator aparecem em alguns anos entre 2016 e 2020 e depois somem, enquanto as transferências especiais (emendas individuais enviadas direto ao município, sem convênio) surgem em 2020 e passam a ocupar uma parte grande do total. Também cresce a emenda de bancada.

4.5 Quem recebe o dinheiro em Pernambuco?

A tabela Por Favorecido mostra os destinatários finais. Filtrando os favorecidos de Pernambuco (UF Favorecido = PE):

fav_pe <- favorecido %>%
  filter(uf_fav == "PE") %>%
  group_by(favorecido, tipo_fav) %>%
  summarise(recebido_mi = sum(recebido) / 1e6, pagamentos = n(), .groups = "drop") %>%
  arrange(desc(recebido_mi))

fav_pe %>%
  mutate(recebido_mi = round(recebido_mi, 1)) %>%
  head(50) %>%
  datatable(rownames = FALSE, colnames = c("Favorecido", "Tipo", "Recebido (R$ milhões)", "Nº de pagamentos"),
            options = list(pageLength = 10))

Entre os favorecidos em Pernambuco, 98,2% do valor foi para pessoas jurídicas (prefeituras, fundos e empresas). O primeiro lugar da lista é FUNDO MUNICIPAL DE SAUDE (1.303 milhões), mas esse nome é genérico e reúne os fundos de saúde de vários municípios que têm o mesmo nome no cadastro (1757 pagamentos), então não é um único destinatário. Entre os nomes que identificam um só destinatário aparecem o Estado de Pernambuco e prefeituras como Petrolina e Caruaru. Isso combina com o peso da função Saúde visto antes.

4.6 As emendas têm convênio?

Usando a base já juntada (emendas_final):

conv_tipo <- emendas_final %>%
  group_by(tipo) %>%
  summarise(emendas = n(), com_convenio = mean(tem_convenio) * 100, .groups = "drop") %>%
  arrange(desc(com_convenio))

conv_tipo %>%
  mutate(com_convenio = round(com_convenio, 1)) %>%
  datatable(rownames = FALSE, colnames = c("Tipo de emenda", "Nº de emendas", "% com convênio"),
            options = list(dom = "t"))

5 Conclusões

  • Visão geral: o dinheiro das emendas pagas pelo governo federal cresceu muito depois de 2020, e a maior parte vai para a área de Saúde, tanto no Brasil quanto em Pernambuco.
  • Pernambuco no Nordeste: o estado fica em 4º lugar em valor pago (R$ 6,3 bi, 12,8% do Nordeste), atrás de Bahia, Ceará, Maranhão. Sua participação é estável ao longo dos anos (10,5% a 14,4%).
  • Perfil de gastos: Pernambuco aplica as emendas em áreas muito parecidas com as dos vizinhos, com Saúde acima de 50% do total.
  • Mudança de regras: as emendas de relator desaparecem e as transferências especiais ganham espaço, o que muda o jeito de acompanhar o dinheiro (sem convênio, o rastreamento fica mais difícil).
  • Quem recebe: a maior parte vai para prefeituras e fundos municipais de saúde.

Limitações

  1. Os valores são absolutos. Para dizer se Pernambuco recebe “pouco” ou “muito”, seria preciso comparar por habitante, o que exigiria juntar uma tabela de população (por exemplo, do IBGE). Isso seria um próximo passo natural.
  2. As linhas do Nordeste sem estado definido (“Múltiplo” ou vazias) ficaram fora da comparação entre estados.
  3. Parte das emendas não tem código e não pôde ser ligada às tabelas de favorecidos e convênios.
  4. O ano de 2026 ainda está em andamento e não deve ser comparado com anos fechados.

6 Referências