Para onde vão os recursos das emendas parlamentares?

Pernambuco em comparação com os demais estados do Nordeste (2014–2026)

1. Introdução

1.1 O problema

Todo ano o Congresso Nacional vota o Orçamento da União, que define como o dinheiro federal será gasto. Nessa votação, deputados e senadores podem propor emendas, que são alterações no orçamento para destinar uma parte desse dinheiro a obras, serviços e programas em estados e municípios. Na prática, é uma das principais formas pelas quais um parlamentar leva recursos federais para a sua base eleitoral, e por isso o assunto aparece tanto nas discussões sobre política e transparência.

As emendas se dividem em tipos, e cada um tem uma regra e um autor diferente:

  • Individual: proposta por um parlamentar. Pode ter finalidade definida (o dinheiro vai para um projeto específico, normalmente por convênio) ou ser uma transferência especial, conhecida como “emenda Pix”, em que o recurso cai direto no caixa do município ou do estado, sem convênio.
  • De bancada: proposta pelos parlamentares de um mesmo estado em conjunto.
  • De comissão: proposta por uma comissão do Congresso (a de Saúde, por exemplo).
  • De relator: ligada ao relator-geral do orçamento. Foi a que gerou o debate sobre o chamado “orçamento secreto”.

A importância dessas emendas mudou bastante com o tempo. Pelas emendas constitucionais de 2015 e 2019 (EC 86/2015 e EC 100/2019), as emendas individuais e de bancada passaram a ser de execução obrigatória, e a EC 105/2019 criou as transferências especiais. Em dezembro de 2022, o Supremo Tribunal Federal (STF) julgou incompatível com a Constituição a prática do “orçamento secreto”, ligada às emendas de relator, e em 2024 voltou a exigir regras de transparência e rastreabilidade. Segundo a Controladoria-Geral da União (CGU), citada pelo STF, R$ 186,3 bilhões foram pagos entre 2019 e 2024 sem que se conhecesse a origem e o destino do dinheiro.

Como estudo em Pernambuco, quis olhar de perto como o estado aparece nesse cenário. A pergunta que guia o trabalho é:

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

1.2 A abordagem

Primeiro limpo e junto as três tabelas do Portal da Transparência, que têm formatos diferentes, valores ausentes e uma mesma emenda repetida em várias linhas. Depois monto uma sequência de gráficos: o quadro geral do Brasil ao longo dos anos, o recorte do Nordeste com Pernambuco em destaque, a parcela do dinheiro que não tem destino claro, quem recebe os recursos, quanto do que foi prometido vira pagamento e, por fim, o que os convênios compram e em que época do ano são assinados. As perguntas que espero responder são:

  1. Quanto cresceu o dinheiro das emendas e quais tipos de emenda ganharam espaço?
  2. Em que posição Pernambuco fica entre os estados do Nordeste, e em que áreas o dinheiro é aplicado?
  3. Quanto do dinheiro é registrado sem um município de destino, e para onde ele realmente vai?
  4. Quem recebe e quem são os autores das emendas em Pernambuco?
  5. Quanto do valor empenhado de fato é pago, e Pernambuco executa mais ou menos que os vizinhos?
  6. O que os convênios compram e quando eles são assinados?

1.3 A técnica

A análise usa a linguagem R. Os dados são importados e limpos com o tidyverse, e as tabelas são unidas pelo Código da Emenda (junção de tabelas). Os resultados são apresentados em gráficos e tabelas interativos (plotly e DT). Para entender o que os convênios compram, uso também uma técnica simples de mineração de texto (tidytext), que conta as palavras mais frequentes no campo de objeto do convênio.

1.4 A quem interessa

O resultado interessa a quem quer entender o dinheiro público de forma concreta: estudantes, jornalistas, cidadãos e quem trabalha com controle social, além de gestores e equipes de municípios, que podem comparar o seu estado com os vizinhos. A ideia é ajudar o leitor a formar uma opinião a partir de dados públicos, e não de discursos de um lado ou do outro, mostrando também o que os números não conseguem dizer.

2. Pacotes requeridos

Cada pacote foi usado com um propósito:

  • tidyverse: conjunto que reúne readr (leitura dos CSV), dplyr e tidyr (manipulação e junção das tabelas), stringr (textos), forcats (variáveis categóricas), lubridate (datas) e ggplot2 (gráficos).
  • scales: formatação dos eixos (reais, porcentagens e bilhões).
  • plotly: deixa os gráficos interativos (passar o mouse mostra os valores).
  • DT: tabelas interativas com busca e ordenação.
  • kableExtra: tabelas estáticas bem formatadas.
  • tidytext: mineração de texto, usada para contar palavras no objeto dos convênios.
library(tidyverse)   # readr, dplyr, tidyr, stringr, ggplot2, forcats, lubridate
library(scales)      # formatação de eixos (R$, %, bi)
library(plotly)      # gráficos interativos
library(DT)          # tabelas interativas
library(kableExtra)  # tabelas estáticas formatadas
library(tidytext)    # mineração de texto (objeto dos convênios)

3. Preparação dos dados

3.1 Fonte dos dados

Os dados vêm do Portal da Transparência do Governo Federal, que publica os registros das emendas parlamentares para consulta pública, com o propósito de permitir o controle social sobre o uso do dinheiro. São livres e gratuitos, e cobrem as emendas de 2014 a 2026 (o ano de 2026 está incompleto, com dados até outubro).

Os dados são divulgados em três tabelas em CSV, ligadas pelo Código da Emenda:

  • Emendas (28 variáveis): cada linha é um registro orçamentário de uma emenda, com ano, tipo, autor, local de aplicação, área do gasto e os valores empenhado, liquidado e pago.
  • Por Favorecido (13 variáveis): quem recebeu o dinheiro (município, fundo, empresa etc.) e quanto.
  • Convênios (12 variáveis): os convênios firmados a partir das emendas, com convenente, objeto e valor.

Um detalhe importante: os valores ausentes não aparecem como NA. Eles vêm escritos como “Sem informação” ou “S/I”, o que exige tratamento antes de qualquer análise.

3.2 Importação

# Os três arquivos vêm do Portal da Transparência com:
#   - separador ";"
#   - codificação latin1 (ISO-8859-1), senão os acentos quebram
#   - vírgula como separador decimal
# Lemos tudo como texto para controlar a conversão de cada coluna na limpeza.
ler_csv <- function(arquivo) {
  read_delim(arquivo, delim = ";",
             locale = locale(encoding = "latin1"),
             col_types = cols(.default = col_character()),
             trim_ws = TRUE)
}

emendas_raw     <- ler_csv("dados/EmendasParlamentares.csv")
favorecidos_raw <- ler_csv("dados/EmendasParlamentares_PorFavorecido.csv")
convenios_raw   <- ler_csv("dados/EmendasParlamentares_Convenios.csv")
# Visão geral das três bases originais (lista -> tabela)
bases <- list(Emendas = emendas_raw,
              Favorecidos = favorecidos_raw,
              `Convênios` = convenios_raw)

tibble(Base    = names(bases),
       Linhas  = map_int(bases, nrow),
       Colunas = map_int(bases, ncol)) |>
  kbl(format.args = list(big.mark = ".", decimal.mark = ",")) |>
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Base Linhas Colunas
Emendas 94.739 28
Favorecidos 828.447 13
Convênios 85.403 12
# Os valores ausentes NÃO estão como NA: aparecem como "Sem informação" ou "S/I".
# Contamos quantas vezes isso ocorre em cada coluna da base de emendas.
codigos_ausentes <- c("Sem informação", "S/I")

emendas_raw |>
  summarise(across(everything(), ~ sum(.x %in% codigos_ausentes))) |>
  pivot_longer(everything(), names_to = "Variável", values_to = "Registros sem informação") |>
  filter(`Registros sem informação` > 0) |>
  arrange(desc(`Registros sem informação`)) |>
  kbl(format.args = list(big.mark = ".", decimal.mark = ",")) |>
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "condensed"))
Variável Registros sem informação
Código Município IBGE 57.031
Município 28.680
Código da Emenda 17.810
Número da emenda 17.810
Código do Autor da Emenda 15.962
Nome do Autor da Emenda 15.962
UF 5.694
Nome Plano Orçamentário 1

As três bases juntas têm 1.008.589 linhas. Só na base de Emendas, “Sem informação” ou “S/I” aparecem 158.950 vezes, concentrados em poucas colunas (tabela acima), e 17.810 linhas não têm Código da Emenda, o que impede a junção com as demais tabelas. Além disso, valores em reais usam o padrão brasileiro (1.234.567,89), as datas vêm como texto e a coluna Ano/Mês junta duas informações.

3.3 Limpeza

# Padroniza nomes de colunas: tira acentos, minúsculas, espaços -> "_"
limpar_nomes <- function(x) {
  x |>
    stringi::stri_trans_general("Latin-ASCII") |>
    str_to_lower() |>
    str_replace_all("[^a-z0-9]+", "_") |>
    str_remove("_$")
}

# Converte "1.234.567,89" (padrão brasileiro) em número
num_br <- function(x) {
  parse_number(x, locale = locale(decimal_mark = ",", grouping_mark = "."))
}

# Tabela de apoio: os 9 estados do Nordeste (nome completo e sigla),
# necessária porque a base de emendas usa o nome e a de favorecidos usa a sigla
nordeste <- tibble(
  uf_sigla = c("AL", "BA", "CE", "MA", "PB", "PE", "PI", "RN", "SE"),
  uf       = c("ALAGOAS", "BAHIA", "CEARÁ", "MARANHÃO", "PARAÍBA",
               "PERNAMBUCO", "PIAUÍ", "RIO GRANDE DO NORTE", "SERGIPE")
)
emendas <- emendas_raw |>
  rename_with(limpar_nomes) |>
  # 1) "Sem informação" e "S/I" viram NA de verdade
  mutate(across(everything(), ~ if_else(.x %in% codigos_ausentes, NA_character_, .x))) |>
  # 2) seleciona e renomeia só as variáveis de interesse
  select(codigo = codigo_da_emenda, ano = ano_da_emenda, tipo = tipo_de_emenda,
         autor = nome_do_autor_da_emenda, localidade = localidade_de_aplicacao_do_recurso,
         municipio, uf, regiao, funcao = nome_funcao,
         empenhado = valor_empenhado, liquidado = valor_liquidado,
         pago = valor_pago, rap_pago = valor_restos_a_pagar_pagos) |>
  # 3) tipos corretos: ano inteiro, valores numéricos, tipo de emenda como fator
  mutate(
    ano = as.integer(ano),
    across(empenhado:rap_pago, num_br),
    tipo = fct_recode(factor(tipo),
      "Individual (finalidade definida)" = "Emenda Individual - Transferências com Finalidade Definida",
      "Individual (transf. especial)"    = "Emenda Individual - Transferências Especiais",
      "Bancada"  = "Emenda de Bancada",
      "Comissão" = "Emenda de Comissão",
      "Relator"  = "Emenda de Relator"),
    # 4) nova variável: nível geográfico da aplicação do recurso
    nivel = case_when(
      str_detect(localidade, "\\(UF\\)") ~ "Estado",
      localidade == "MÚLTIPLO"           ~ "Múltiplo (sem município)",
      str_detect(localidade, " - ")      ~ "Município",
      TRUE                               ~ "Nacional/Regional"
    ),
    # 5) nova variável: total efetivamente pago (no ano + restos a pagar pagos depois)
    pago_total = pago + rap_pago
  )

# Recorte do projeto: somente estados do Nordeste (exclui "Múltiplo"/sem UF)
emendas_ne <- emendas |>
  inner_join(nordeste, by = "uf") |>
  mutate(grupo = if_else(uf_sigla == "PE", "Pernambuco", "Demais estados do NE"))
favorecidos <- favorecidos_raw |>
  rename_with(limpar_nomes) |>
  mutate(across(everything(), ~ if_else(.x %in% codigos_ausentes, NA_character_, .x))) |>
  # "Ano/Mês" vem junto ("202610"): separamos em duas variáveis
  separate_wider_position(ano_mes, widths = c(ano_pag = 4, mes_pag = 2)) |>
  mutate(
    ano_pag = as.integer(ano_pag),
    mes_pag = as.integer(mes_pag),
    valor   = num_br(valor_recebido),
    # categorias com grafia inconsistente na fonte
    tipo_favorecido = recode(tipo_favorecido,
                             "Pessoa Fisica" = "Pessoa Física",
                             "Inscrição Genéric" = "Inscrição Genérica")
  ) |>
  select(codigo = codigo_da_emenda, ano_pag, mes_pag, favorecido, natureza_juridica,
         tipo_favorecido, uf_sigla = uf_favorecido, municipio_fav = municipio_favorecido, valor) |>
  semi_join(nordeste, by = "uf_sigla")   # mantém só favorecidos do Nordeste
convenios <- convenios_raw |>
  rename_with(limpar_nomes) |>
  mutate(
    data_pub = dmy(data_publicacao_convenio),   # "06/01/2016" -> Date
    valor    = num_br(valor_convenio)
  ) |>
  # "JEQUIÉ - BA" -> município + sigla da UF
  separate_wider_delim(localidade_do_gasto, delim = " - ",
                       names = c("local", "uf_sigla"),
                       too_few = "align_start", too_many = "merge") |>
  # convênios estaduais vêm como "PERNAMBUCO (UF)": recuperamos a sigla pelo nome
  mutate(uf_sigla = coalesce(
    uf_sigla,
    nordeste$uf_sigla[match(str_remove(local, " \\(UF\\)"), nordeste$uf)]
  )) |>
  select(codigo = codigo_da_emenda, funcao = nome_funcao, local, uf_sigla,
         data_pub, convenente, objeto = objeto_convenio, valor)

As principais decisões de limpeza foram:

  1. Ausentes: “Sem informação” e “S/I” viraram NA de verdade. Não preenchi nada, porque a ausência também é informação (emenda sem autor ou sem município) e valores em reais não devem ser inventados.
  2. Tipos: o ano virou número inteiro, os valores viram números (convertendo o padrão brasileiro) e o tipo de emenda virou fator, com nomes curtos.
  3. Nomes de colunas: padronizados, sem acento e em minúsculas.
  4. Nível geográfico (variável criada, nivel): classifica o local de aplicação em Estado, Município, Múltiplo (sem município) ou Nacional/Regional.
  5. Pago total (variável criada, pago_total): soma o valor pago no ano com os restos a pagar pagos depois, para medir quanto realmente saiu do caixa.
  6. Recorte do Nordeste: a base de emendas usa o nome do estado e a de favorecidos usa a sigla, então criei uma tabela de apoio com os 9 estados. Linhas sem estado definido ficam fora da comparação entre estados.
  7. Favorecidos: separei o Ano/Mês em duas variáveis, corrigi grafias inconsistentes (“Pessoa Fisica”) e mantive só favorecidos do Nordeste.
  8. Convênios: converti a data de publicação, separei o município da sigla do estado e recuperei a sigla dos convênios estaduais pelo nome.

3.4 Conjunto de dados final

# Amostra condensada da base principal já limpa (não imprimir tudo!)
emendas_ne |>
  slice_sample(n = 50) |>
  select(codigo, ano, tipo, autor, municipio, uf_sigla, nivel, funcao,
         empenhado, pago_total) |>
  datatable(rownames = FALSE, options = list(pageLength = 5, scrollX = TRUE)) |>
  formatCurrency(c("empenhado", "pago_total"), currency = "R$ ",
                 mark = ".", dec.mark = ",")

A base principal do Nordeste (emendas_ne) tem 25.851 linhas, das quais 4.048 são de Pernambuco. Cada linha é um registro orçamentário, e uma mesma emenda pode aparecer em várias linhas. A amostra acima mostra 50 linhas sorteadas, apenas para ilustrar a estrutura.

3.5 Resumo das variáveis

# Tabela-resumo construída manualmente (em vez de str()/summary())
tibble(
  `Variável` = c("ano", "tipo", "autor", "uf_sigla", "nivel", "funcao",
                 "empenhado", "pago_total"),
  Tipo = map_chr(emendas_ne[c("ano", "tipo", "autor", "uf_sigla", "nivel",
                              "funcao", "empenhado", "pago_total")], ~ class(.x)[1]),
  `Descrição` = c("Ano da emenda", "Tipo de emenda", "Parlamentar, bancada ou comissão",
                  "Estado de aplicação", "Nível geográfico (variável criada)",
                  "Área de governo", "Valor empenhado (R$)",
                  "Pago no ano + restos a pagar pagos (variável criada)"),
  Resumo = c(
    paste(range(emendas_ne$ano), collapse = "–"),
    paste(nlevels(emendas_ne$tipo), "categorias"),
    paste(n_distinct(emendas_ne$autor, na.rm = TRUE), "autores;",
          sum(is.na(emendas_ne$autor)), "sem informação"),
    "9 estados",
    paste(n_distinct(emendas_ne$nivel), "categorias"),
    paste(n_distinct(emendas_ne$funcao), "funções"),
    dollar(sum(emendas_ne$empenhado, na.rm = TRUE) / 1e9, prefix = "R$ ", suffix = " bi",
           big.mark = ".", decimal.mark = ",", accuracy = 0.1),
    dollar(sum(emendas_ne$pago_total, na.rm = TRUE) / 1e9, prefix = "R$ ", suffix = " bi",
           big.mark = ".", decimal.mark = ",", accuracy = 0.1)
  )
) |>
  kbl() |>
  kable_styling(bootstrap_options = c("striped", "hover"))
Variável Tipo Descrição Resumo
ano integer Ano da emenda 2014–2026
tipo factor Tipo de emenda 5 categorias
autor character Parlamentar, bancada ou comissão 492 autores; 4661 sem informação
uf_sigla character Estado de aplicação 9 estados
nivel character Nível geográfico (variável criada) 3 categorias
funcao character Área de governo 25 funções
empenhado numeric Valor empenhado (R\() </td> <td style="text-align:left;"> R\) 74,9 bi
pago_total numeric Pago no ano + restos a pagar pagos (variável criada) R$ 67,1 bi

Os valores acima mostram que a base do Nordeste cobre 2014 a 2026, com R$ 74,9 bi empenhados e R$ 67,1 bi pagos no total. A variável autor tem 4.661 linhas sem informação, o que será relevante na análise dos autores.

4. Análise exploratória

# Tema e formatos reutilizados em todos os gráficos
tema <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"), legend.position = "bottom")
cor_pe <- "#C0392B"; cor_ne <- "grey65"
reais_bi <- label_number(scale = 1e-9, prefix = "R$ ", suffix = " bi",
                         big.mark = ".", decimal.mark = ",")

4.1 O volume explodiu

A primeira pergunta é sobre o tamanho do dinheiro: quanto as emendas cresceram e quais tipos ganharam espaço? Aqui o recorte é o Brasil inteiro, porque as emendas de relator e de comissão quase nunca são atribuídas a um estado específico e desapareceriam de uma análise só do Nordeste.

# Brasil inteiro: valor empenhado por ano e tipo (2026 = ano incompleto)
g_evolucao <- emendas |>
  group_by(ano, tipo) |>
  summarise(empenhado = sum(empenhado, na.rm = TRUE), .groups = "drop") |>
  ggplot(aes(ano, empenhado, fill = tipo)) +
  geom_area(alpha = 0.9) +
  scale_y_continuous(labels = reais_bi) +
  scale_x_continuous(breaks = 2014:2026) +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Valor empenhado em emendas parlamentares — Brasil",
       subtitle = "2026 parcial (dados até outubro)",
       x = NULL, y = "Valor empenhado", fill = "Tipo de emenda") +
  tema

ggplotly(g_evolucao) |> layout(legend = list(orientation = "h", y = -0.2))

O que o gráfico mostra. O valor empenhado por ano passou de R$ 3,4 bi em 2015 para R$ 47,1 bi em 2025, o maior da série, o que é um crescimento enorme em poucos anos. Duas mudanças chamam atenção na composição. As emendas de relator chegam a ser as maiores em alguns anos (R$ 21,2 bi em 2020), existem até 2022 e somem a partir de 2023, o ano seguinte à decisão do STF contra o “orçamento secreto”. No mesmo período, as emendas de comissão saltam de R$ 0,3 bi em 2022 para R$ 11,7 bi em 2024. Já as transferências especiais surgem em 2020 e passam a ser parte permanente do total.

Como ler. O desaparecimento de um tipo e o crescimento de outro no mesmo momento sugere que parte do dinheiro mudou de “etiqueta” depois da decisão do STF. Os dados mostram a coincidência no tempo, mas não provam que foi isso que aconteceu, porque o Portal só informa a classificação oficial de cada emenda. Lembre também que 2026 é um ano incompleto.

4.2 Pernambuco no Nordeste

A comparação central do trabalho começa aqui. Só entram as linhas do Nordeste que têm estado definido, para que cada real possa ser atribuído a um estado.

# Total empenhado por estado do Nordeste, destacando PE
emendas_ne |>
  group_by(uf_sigla) |>
  summarise(empenhado = sum(empenhado, na.rm = TRUE)) |>
  ggplot(aes(fct_reorder(uf_sigla, empenhado), empenhado,
             fill = uf_sigla == "PE")) +
  geom_col() +
  coord_flip() +
  scale_fill_manual(values = c(`TRUE` = cor_pe, `FALSE` = cor_ne), guide = "none") +
  scale_y_continuous(labels = reais_bi) +
  labs(title = "Total empenhado por estado do Nordeste (2014–2026)",
       x = NULL, y = "Valor empenhado") +
  tema

# Participação de PE no total do Nordeste, ano a ano
emendas_ne |>
  group_by(ano, grupo) |>
  summarise(empenhado = sum(empenhado, na.rm = TRUE), .groups = "drop_last") |>
  mutate(part = empenhado / sum(empenhado)) |>
  filter(grupo == "Pernambuco") |>
  ggplot(aes(ano, part)) +
  geom_line(color = cor_pe, linewidth = 1) +
  geom_point(color = cor_pe, size = 2) +
  scale_y_continuous(labels = label_percent(decimal.mark = ","), limits = c(0, 0.2)) +
  scale_x_continuous(breaks = 2014:2026) +
  labs(title = "Fatia de Pernambuco no valor empenhado do Nordeste",
       x = NULL, y = "Participação") +
  tema

O que os gráficos mostram. Pernambuco aparece em 3º lugar no valor empenhado, com R$ 10,1 bi, o que corresponde a 13,5% do total dos nove estados do Nordeste. Em valor efetivamente pago, a posição é 3ª. O estado que mais recebeu foi Bahia (R$ 14,5 bi). Ao longo dos anos, a fatia de Pernambuco varia de 10,5% (em 2018) a 14,4% (em 2026), sem grandes saltos.

Como ler. Mesmo com o dinheiro total crescendo muito, a participação de Pernambuco quase não muda, o que sugere que a distribuição entre os estados é bastante estável. Atenção: esses são valores absolutos. Estados com mais habitantes e mais municípios tendem a receber mais, e a análise não controla pelo tamanho da população, porque ela não faz parte dos dados (limitação comentada nas conclusões).

Em que áreas o dinheiro é aplicado?

Cada emenda é classificada em uma função (a área do gasto, como Saúde ou Educação). Comparar Pernambuco com o resto do Nordeste mostra se o estado tem um perfil diferente.

# Parcela do valor empenhado por função, PE x demais estados do NE
funcoes_ne <- emendas_ne |>
  group_by(grupo, funcao) |>
  summarise(emp = sum(empenhado, na.rm = TRUE), .groups = "drop_last") |>
  mutate(prop = emp / sum(emp)) |>
  ungroup()

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

g_funcoes <- funcoes_ne |>
  filter(funcao %in% top_funcoes) |>
  ggplot(aes(prop, fct_reorder(funcao, prop), fill = grupo,
             text = paste0(grupo, ": ", percent(prop, 0.1)))) +
  geom_col(position = "dodge") +
  scale_x_continuous(labels = label_percent()) +
  scale_fill_manual(values = c("Pernambuco" = cor_pe, "Demais estados do NE" = cor_ne)) +
  labs(title = "Em que áreas o dinheiro é aplicado?",
       subtitle = "Parcela do valor empenhado por função",
       x = NULL, y = NULL, fill = NULL) +
  tema

ggplotly(g_funcoes, tooltip = "text") |> layout(legend = list(orientation = "h", y = -0.2))

O que o gráfico mostra. A Saúde domina: concentra 56,3% do valor empenhado em Pernambuco e 56,5% nos demais estados. As três maiores áreas em Pernambuco são Saúde, Encargos especiais e Urbanismo.

Como ler. O perfil de Pernambuco é praticamente igual ao do resto do Nordeste. Mais da metade do dinheiro vai para a saúde, o que indica que, na prática, as emendas funcionam como um reforço ao orçamento da saúde nos municípios.

4.3 O dinheiro “sem endereço”

Nem todo registro diz para qual município o dinheiro vai. Muitos aparecem como “Múltiplo”, ou seja, o recurso está ligado a um estado, mas sem um município definido. Isso dificulta saber, olhando só a base de emendas, onde o dinheiro de fato chegou.

# Proporção do valor por nível geográfico, por estado
emendas_ne |>
  group_by(uf_sigla, nivel) |>
  summarise(empenhado = sum(empenhado, na.rm = TRUE), .groups = "drop_last") |>
  mutate(prop = empenhado / sum(empenhado)) |>
  ggplot(aes(uf_sigla, prop, fill = nivel)) +
  geom_col() +
  scale_y_continuous(labels = label_percent()) +
  scale_fill_manual(values = c("Município" = "#2E86C1", "Estado" = "#85C1E9",
                               "Múltiplo (sem município)" = "#E67E22")) +
  labs(title = "Para onde o recurso foi registrado?",
       subtitle = "Parcela do valor empenhado por nível geográfico",
       x = NULL, y = NULL, fill = NULL) +
  tema

O que o gráfico mostra. No Nordeste, 66,8% do valor empenhado está registrado como “Múltiplo”. Em Pernambuco são 66,7%, praticamente a média da região. Entre os estados, a parcela vai de 58% (Sergipe) a 75,1% (Piauí).

Como ler. Mais da metade do dinheiro do Nordeste não diz, na base de emendas, para qual município foi. Isso não significa que o dinheiro sumiu, e a próxima seção usa a tabela de favorecidos para descobrir o destino. Mas é um bom exemplo de como os dados abertos exigem trabalho extra para serem úteis.

E por tipo de emenda?

O mesmo problema aparece de forma diferente em cada tipo. O gráfico abaixo usa o Brasil inteiro e mostra, para cada tipo, como o valor se distribui entre os níveis geográficos.

g_nivel_tipo <- emendas |>
  group_by(tipo, nivel) |>
  summarise(empenhado = sum(empenhado, na.rm = TRUE), .groups = "drop_last") |>
  mutate(prop = empenhado / sum(empenhado)) |>
  ungroup() |>
  ggplot(aes(prop, fct_reorder(tipo, prop * (nivel == "Município")), fill = nivel,
             text = paste0(nivel, ": ", percent(prop, 0.1)))) +
  geom_col() +
  scale_x_continuous(labels = label_percent()) +
  scale_fill_manual(values = c("Município" = "#2E86C1", "Estado" = "#85C1E9",
                               "Múltiplo (sem município)" = "#E67E22",
                               "Nacional/Regional" = "#7F8C8D")) +
  labs(title = "Nível geográfico do registro, por tipo de emenda — Brasil",
       x = NULL, y = NULL, fill = NULL) +
  tema

ggplotly(g_nivel_tipo, tooltip = "text") |> layout(legend = list(orientation = "h", y = -0.2))

O que o gráfico mostra. A parcela do valor sem município definido (Múltiplo ou Nacional/Regional) é de 90% nas emendas de relator e 96,8% nas de comissão, contra 68,3% nas individuais com finalidade definida.

Como ler. Mesmo nas individuais, mais da metade do valor fica sem município definido, mas nas emendas de relator e de comissão o problema é quase total. Quanto mais “coletivo” é o tipo de emenda, menos a base permite saber para onde o dinheiro foi. É justamente essa dificuldade de rastrear que o STF exigiu corrigir em 2024. Isso também limita a comparação entre estados, que só vale para a parte do dinheiro com destino conhecido.

4.4 Seguindo o dinheiro: quem recebe

# JUNÇÃO 1: emendas de PE registradas como "Múltiplo" x favorecidos.
# A tabela de favorecidos revela em qual município o dinheiro realmente caiu.
codigos_multiplo_pe <- emendas_ne |>
  filter(uf_sigla == "PE", nivel == "Múltiplo (sem município)", !is.na(codigo)) |>
  distinct(codigo)

destino_multiplo <- favorecidos |>
  inner_join(codigos_multiplo_pe, by = "codigo") |>
  filter(uf_sigla == "PE") |>
  group_by(municipio_fav) |>
  summarise(recebido = sum(valor, na.rm = TRUE),
            n_favorecidos = n_distinct(favorecido)) |>
  arrange(desc(recebido))

destino_multiplo |>
  mutate(part = recebido / sum(recebido)) |>
  datatable(rownames = FALSE,
            colnames = c("Município", "Valor recebido", "Nº de favorecidos", "Participação"),
            caption = "Para onde foi o dinheiro 'Múltiplo' de Pernambuco") |>
  formatCurrency("recebido", currency = "R$ ", mark = ".", dec.mark = ",") |>
  formatPercentage("part", 1)

O que a tabela mostra. Cruzando as emendas de Pernambuco registradas como “Múltiplo” com a tabela de favorecidos, o dinheiro (R$ 3,8 bi) aparece distribuído em 184 municípios. O maior destinatário é Recife, com 5,7% do total, e o restante fica bem espalhado.

Como ler. A junção das tabelas recupera uma informação que a base de emendas sozinha não mostra: o dinheiro “sem endereço” tem endereço, e ele está bastante distribuído pelo interior do estado. Esse é o principal ganho de juntar as três tabelas.

Quem recebe esse dinheiro? O gráfico abaixo compara a natureza jurídica do favorecido em Pernambuco e nos demais estados.

# Quem recebe: natureza jurídica do favorecido, PE x demais estados do NE
favorecidos |>
  filter(valor > 0) |>   # descarta estornos (valores negativos)
  mutate(grupo = if_else(uf_sigla == "PE", "Pernambuco", "Demais estados do NE"),
         natureza_juridica = replace_na(natureza_juridica, "Sem informação"),
         natureza = fct_lump_n(natureza_juridica, n = 6, w = valor,
                               other_level = "Outros")) |>
  group_by(grupo, natureza) |>
  summarise(valor = sum(valor, na.rm = TRUE), .groups = "drop_last") |>
  mutate(prop = valor / sum(valor)) |>
  ggplot(aes(prop, fct_reorder(natureza, prop), fill = grupo)) +
  geom_col(position = "dodge") +
  scale_x_continuous(labels = label_percent()) +
  scale_fill_manual(values = c("Pernambuco" = cor_pe, "Demais estados do NE" = cor_ne)) +
  labs(title = "Quem recebe o dinheiro das emendas?",
       subtitle = "Parcela do valor recebido por natureza jurídica do favorecido",
       x = NULL, y = NULL, fill = NULL) +
  tema

O que o gráfico mostra. Em Pernambuco, 72,9% do valor vai para municípios e seus fundos públicos (administração direta municipal), contra 73,8% nos demais estados. As empresas privadas (sociedades empresárias limitadas) recebem 10,4% em Pernambuco e 7,3% no resto do Nordeste.

Como ler. O dinheiro chega principalmente a governos locais, o que combina com o peso da função Saúde. A fatia de empresas privadas é maior em Pernambuco, e vale uma olhada mais detalhada em um estudo futuro para entender o que elas fornecem.

Por fim, quem são os autores das emendas de Pernambuco?

# Os 10 maiores autores de emendas para PE
emendas_ne |>
  filter(uf_sigla == "PE") |>
  mutate(autor = replace_na(autor, "Sem informação")) |>
  group_by(autor) |>
  summarise(Emendas = n(), Empenhado = sum(empenhado, na.rm = TRUE)) |>
  slice_max(Empenhado, n = 10) |>
  mutate(Empenhado = dollar(Empenhado, prefix = "R$ ", big.mark = ".", decimal.mark = ",")) |>
  kbl(col.names = c("Autor", "Nº de emendas", "Valor empenhado")) |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) |>
  row_spec(1, bold = TRUE)
Autor Nº de emendas Valor empenhado
BANCADA DE PERNAMBUCO 95 R$ 2.295.222.336
Sem informação 432 R$ 588.861.834
HUMBERTO COSTA 151 R$ 339.023.218
EDUARDO DA FONTE 100 R$ 254.288.532
AUGUSTO COUTINHO 171 R$ 249.287.512
FERNANDO COELHO FILHO 73 R$ 238.434.228
PASTOR EURICO 104 R$ 236.163.866
FERNANDO MONTEIRO 118 R$ 219.858.902
FELIPE CARRERAS 73 R$ 208.950.651
ANDRE FERREIRA 44 R$ 196.927.465

O que a tabela mostra. O maior autor de emendas para Pernambuco é Bancada de Pernambuco, com R$ 2,3 bi, o que reforça o peso das emendas coletivas. Entre os parlamentares individuais, o primeiro da lista é Humberto Costa. Chama atenção que 432 registros (R$ 0,6 bi) não têm autor informado.

Como ler. A falta de autor em parte relevante do valor é mais uma limitação de transparência dos dados: não dá para dizer quem indicou todo o dinheiro que chegou ao estado.

4.5 O dinheiro chega?

Empenhar é prometer; pagar é entregar. Esta seção mede quanto do que foi empenhado se transforma em pagamento. O recorte vai até 2025 para evitar o ano incompleto.

# Formato LARGO -> LONGO: empenhado/liquidado/pago viram linhas (etapas)
funil <- emendas_ne |>
  filter(ano <= 2025) |>                       # exclui o ano incompleto
  group_by(grupo) |>
  summarise(across(c(empenhado, liquidado, pago_total), ~ sum(.x, na.rm = TRUE))) |>
  pivot_longer(-grupo, names_to = "etapa", values_to = "valor") |>
  group_by(grupo) |>
  mutate(pct = valor / valor[etapa == "empenhado"],
         etapa = factor(etapa, levels = c("empenhado", "liquidado", "pago_total"),
                        labels = c("Empenhado", "Liquidado (no ano)", "Pago (total)")))

ggplot(funil, aes(etapa, pct, fill = grupo)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = percent(pct, accuracy = 0.1, decimal.mark = ",")),
            position = position_dodge(0.9), vjust = -0.4, size = 3.5) +
  scale_y_continuous(labels = label_percent(), limits = c(0, 1.1)) +
  scale_fill_manual(values = c("Pernambuco" = cor_pe, "Demais estados do NE" = cor_ne)) +
  labs(title = "Do empenho ao pagamento (2014–2025)",
       x = NULL, y = "% do valor empenhado", fill = NULL) +
  tema

# Taxa de execução por estado (variável criada: pago_total / empenhado)
execucao <- emendas_ne |>
  filter(ano <= 2025) |>
  group_by(uf_sigla) |>
  summarise(empenhado = sum(empenhado, na.rm = TRUE),
            pago = sum(pago_total, na.rm = TRUE)) |>
  mutate(taxa = pago / empenhado)

g_exec <- ggplot(execucao, aes(taxa, fct_reorder(uf_sigla, taxa),
                               color = uf_sigla == "PE",
                               text = paste0(uf_sigla, ": ", percent(taxa, 0.1)))) +
  geom_segment(aes(x = 0.85, xend = taxa, yend = uf_sigla)) +
  geom_point(size = 4) +
  scale_color_manual(values = c(`TRUE` = cor_pe, `FALSE` = cor_ne), guide = "none") +
  scale_x_continuous(labels = label_percent()) +
  labs(title = "Taxa de execução das emendas por estado (2014–2025)",
       x = "Pago / empenhado", y = NULL) +
  tema

ggplotly(g_exec, tooltip = "text") |> layout(showlegend = FALSE)

O que os gráficos mostram. Em Pernambuco, 90% do valor empenhado já foi pago, contra 91,9% nos demais estados. O que foi liquidado dentro do próprio ano é menor: 61,6% em Pernambuco e 65,3% nos outros. Entre os nove estados, Pernambuco ocupa a posição 6 na taxa de execução (1 é o estado que mais executa), com taxas variando de 88,5% a 94,3%.

Como ler. A diferença entre “liquidado no ano” e “pago total” mostra que boa parte do dinheiro é paga depois, como restos a pagar. As taxas dos estados são parecidas, e Pernambuco fica na média: executa quase tanto quanto os vizinhos, sem se destacar para cima nem para baixo.

4.6 O que se compra e quando

A tabela de convênios permite olhar dois aspectos: quando os convênios são publicados e o que eles compram. Aqui uso a segunda junção do trabalho, que traz o ano e o tipo da emenda para dentro da tabela de convênios.

# JUNÇÃO 2: convênios ganham o ano e o tipo da emenda a partir da base principal
info_emenda <- emendas |>
  filter(!is.na(codigo)) |>
  distinct(codigo, .keep_all = TRUE) |>
  select(codigo, ano_emenda = ano, tipo)

convenios_ne <- convenios |>
  semi_join(nordeste, by = "uf_sigla") |>
  left_join(info_emenda, by = "codigo")
# Mapa de calor: quantos convênios são publicados em cada mês de cada ano
convenios_ne |>
  filter(!is.na(data_pub), year(data_pub) >= 2014) |>   # mesmo período das emendas
  mutate(mes = factor(month(data_pub), levels = 1:12,
                      labels = c("jan", "fev", "mar", "abr", "mai", "jun",
                                 "jul", "ago", "set", "out", "nov", "dez"))) |>
  count(ano = year(data_pub), mes) |>
  ggplot(aes(mes, factor(ano), fill = n)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "#FDEDEC", high = cor_pe) +
  labs(title = "A corrida de fim de ano",
       subtitle = "Convênios publicados por mês — estados do Nordeste",
       x = NULL, y = NULL, fill = "Convênios") +
  tema + theme(legend.position = "right")

O que o mapa de calor mostra. Dos convênios do Nordeste publicados desde 2014, 54,1% foram publicados em dezembro e janeiro. Os meses do meio do ano têm muito menos, e fevereiro a abril quase não têm publicação.

Como ler. Os convênios se concentram na virada do ano, o que sugere uma “corrida” para formalizar o dinheiro no fim do exercício, com a assinatura vindo logo depois. Os dados mostram o padrão, mas não explicam o motivo.

E o que esses convênios compram? A contagem de palavras do campo “objeto do convênio” dá uma ideia.

# Mineração de texto: palavras mais frequentes no objeto dos convênios de PE
stop_pt <- c("de", "da", "do", "das", "dos", "e", "em", "para", "a", "o", "no",
             "na", "com", "por", "ao", "as", "os", "um", "uma",
             # palavras genéricas do próprio campo, que não dizem o que é comprado
             "municipio", "pe", "pernambuco", "sao", "diversas", "realizacao", "unidade")

convenios_ne |>
  filter(uf_sigla == "PE") |>
  unnest_tokens(palavra, objeto) |>
  filter(!palavra %in% stop_pt, !str_detect(palavra, "^\\d+$")) |>
  count(palavra, sort = TRUE) |>
  slice_head(n = 15) |>
  ggplot(aes(n, fct_reorder(palavra, n))) +
  geom_col(fill = cor_pe) +
  labs(title = "O que os convênios de Pernambuco compram?",
       subtitle = "Palavras mais frequentes no campo 'objeto do convênio'",
       x = "Frequência", y = NULL) +
  tema

O que o gráfico mostra. Entre os 2.514 convênios de Pernambuco, as palavras mais frequentes no objeto são aquisicao, equipamento, material, permanente, pavimentacao e saude (o campo original vem sem acento).

Como ler. Os convênios se dividem principalmente em dois grupos: equipamentos e atenção à saúde (aquisição de equipamentos e material permanente, atenção especializada) e obras urbanas (pavimentação de ruas e vias, recapeamento). Isso combina com o peso da Saúde e do Urbanismo visto antes. Como a análise conta palavras e não lê o sentido completo, ela mostra uma tendência, não um valor exato por categoria.

5. Conclusões

5.1 Resposta à pergunta

A pergunta era para onde vão os recursos das emendas e como Pernambuco se compara aos demais estados do Nordeste. Os dados mostram que o dinheiro cresceu muito (de R$ 3,4 bi em 2015 para R$ 47,1 bi em 2025), que mais da metade vai para a Saúde e que chega principalmente a municípios e fundos municipais de saúde. Pernambuco fica em 3º lugar no Nordeste em valor empenhado (R$ 10,1 bi, 13,5% da região), atrás de Bahia e Ceará, com participação estável ao longo dos anos. Em perfil de gasto e de execução, o estado é muito parecido com os vizinhos.

5.2 Resumo do método

Importei as três tabelas do Portal da Transparência, tratei os valores ausentes, converti valores e datas, criei variáveis (nivel e pago_total) e uni as tabelas pelo Código da Emenda, resumindo antes cada uma para evitar duplicação de valores. Em seguida, construí gráficos e tabelas interativos e usei mineração de texto simples para os convênios.

5.3 Principais achados

  1. Mudança de tipos: as emendas de relator vão até 2022 e somem depois da decisão do STF, enquanto as de comissão e as transferências especiais crescem.
  2. Dinheiro “sem endereço”: 66,8% do valor do Nordeste é registrado como “Múltiplo”. Cruzando com os favorecidos, em Pernambuco ele aparece espalhado por 184 municípios.
  3. Execução: Pernambuco paga 90% do que empenhou (posição 6 entre os nove estados), e boa parte do pagamento vem depois, como restos a pagar.
  4. Calendário: 54,1% dos convênios são publicados em dezembro e janeiro.
  5. Autoria: 432 registros de Pernambuco (R$ 0,6 bi) não têm autor informado.

5.4 Implicações

O crescimento das emendas, junto com tipos em que é mais difícil saber o destino (relator, comissão e transferências especiais, que dispensam convênio), muda a pergunta de fundo: deixa de ser apenas quanto Pernambuco recebe e passa a ser quanto desse dinheiro conseguimos rastrear. Para quem fiscaliza ou estuda o tema, mostra a importância de juntar bases diferentes (como feito com os favorecidos), porque sozinha a base de emendas esconde parte do destino. Para os gestores, a concentração de convênios no fim do ano é um sinal para planejar projetos com antecedência.

5.5 Limitações

  1. Valores absolutos: não controlei pela população. 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, Instituto Brasileiro de Geografia e Estatística). É um próximo passo natural.
  2. Dinheiro sem estado ou sem município: as linhas sem estado definido ficam fora da comparação entre estados, e as registradas como “Múltiplo” só foram recuperadas parcialmente pela tabela de favorecidos. Esse é justamente o dinheiro mais difícil de rastrear.
  3. Emendas sem código (17.810 linhas) não podem ser ligadas às outras tabelas.
  4. 2026 incompleto: o ano tem dados até outubro e não deve ser comparado com anos fechados.
  5. Associação não é causa: a coincidência entre o fim das emendas de relator e o crescimento das de comissão é um padrão nos dados, não uma prova da causa.
  6. Mineração de texto simples: a contagem de palavras mostra tendências, não classifica cada convênio.

Referências