Acessos negados contendo termos relacionados a ‘sigilo’ e ‘artigo 31 da LAI’

Código
library(tidyverse)
#> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
#> ✔ ggplot2 3.3.6      ✔ purrr   0.3.5 
#> ✔ tibble  3.1.8      ✔ dplyr   1.0.10
#> ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
#> ✔ readr   2.1.3      ✔ forcats 0.5.2 
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag()    masks stats::lag()
library(here)
#> here() starts at C:/Users/rdurl/OneDrive/Documentos/monitoramento-lai
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> 
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
library(patchwork)
source(here("src/00-plot-aesthetics.R"), encoding = "utf-8")
#> You will likely need to install these fonts on your system as well.
#> 
#> You can find them in [C:/Users/rdurl/AppData/Local/R/win-library/4.2/hrbrthemes/fonts/roboto-condensed]

Base de dados - visão geral

Foram analisados os Pedidos de Acesso a Informação (pedidos LAI) enviados aos órgãos do Governo Federal e disponibilizados pelo portal FalaBr. Foram selecionados para análise somente as respostas aos pedidos LAI onde o órgão negou acesso ao solicitante (decisao = "Acesso Negado"), totalizando 43.517 respostas analisadas.

Código
base <- readRDS(here("data/base-cgu-filtrada.rds"))

ids_acesso_negado <- base %>%
  filter(base == "Pedidos") %>%
  select(datasets) %>%
  unnest(datasets) %>%
  filter(decisao == "Acesso Negado") %>%
  pull(id_pedido)

nr_protocolo <- base %>%
  filter(base == "Pedidos") %>%
  select(datasets) %>%
  unnest(datasets) %>%
  filter(decisao == "Acesso Negado") %>%
  select(id_pedido, protocolo)

pedidos  <- readRDS(here("data/pedidos-clean.rds"))
recursos <- readRDS(here("data/recursos-clean.rds"))
Código
decisao_agregada <- base %>%
  filter(base == "Pedidos") %>%
  select(datasets) %>%
  unnest(datasets) %>%
  mutate(decisao = if_else(
    decisao %in% c("Acesso Concedido", "Acesso Parcialmente Concedido", "Acesso Negado"),
    decisao, "Outra classificação*"
  )) %>%
  count(ano = year(data_registro), decisao) %>%
  mutate(decisao = reorder(decisao, n))

p1 <- decisao_agregada %>%
  filter(decisao == "Acesso Negado") %>%
  ggplot(aes(x = ano, y = n)) +
  geom_line(size = 1.3, color = cores_aep[["rosa"]], show.legend = F) +
  geom_point(size = 2.5, color = cores_aep[["rosa"]], show.legend = F) +
  labs(
    x = NULL,
    y = "Quantidade",
    title = "Total de acessos negados"
  ) +
  scale_y_continuous(labels = scales::number, expand = c(0, 0), limits = c(0, 8.5e3)) +
  scale_x_continuous(breaks = 2015L:2022L)

p2 <- decisao_agregada %>%
  add_count(ano, wt = n, name = "n_ano") %>%
  mutate(perc = n / n_ano) %>%
  filter(decisao == "Acesso Negado") %>%
  ggplot(aes(x = ano, y = perc)) +
  geom_col(size = 1.3, fill = cores_aep[["rosa"]]) +
  labs(
    x = NULL,
    y = "Percentual",
    title = "% de acessos negados"
  ) +
  scale_y_continuous(labels = scales::percent, expand = c(0, 0), limits = c(0, .12),
                     position = "right") +
  scale_x_continuous(breaks = 2015L:2022L) +
  theme(plot.title = element_text(hjust = 1))

p1 + p2 +
  plot_layout(guides = 'collect') +
  plot_annotation(title = "Pedidos de acesso a informação - governo Federal",
                  theme = theme(plot.title = element_text(hjust = .5)))

Termos pesquisados nas respostas

Foram analisados os conteúdos das respostas dos pedidos selecionados, identificando quais deles mencionam alguma combinação dos termos abaixo:

  • Termos “sigilo”.
  • Termos “dados pessoais”, “informações pessoais”, “Art. 31 da LAI”.
  • Termos “LGPD”, referente á Lei Geral de Proteção de Dados.
Código
termos <- pedidos %>%
  filter(id_pedido %in% ids_acesso_negado) %>%
  tidylog::left_join(nr_protocolo) %>%
  transmute(
    id_pedido = id_pedido,
    protocolo = protocolo,
    data_registro = data_registro,
    data_resposta = data_resposta,
    orgao = orgao,
    detalhamento = detalhamento_clean,
    resposta_pedido = resposta_clean,
    resumo = resumo_clean,
    menciona_lai_pedido = str_detect(detalhamento_clean, "LAI"),
    menciona_lai_resposta = str_detect(resposta_clean, "LAI"),
    menciona_dados_pessoais_pedido = str_detect(detalhamento_clean, "dados_pessoais|informacoes pessoais|informacao pessoal|art 31|artigo 31"),
    menciona_dados_pessoais_resposta = str_detect(resposta_clean, "dados_pessoais|informacoes pessoais|informacao pessoal|art 31|artigo 31"),
    menciona_lgpd_pedido = str_detect(detalhamento_clean, "LGPD"),
    menciona_lgpd_resposta = str_detect(resposta_clean, "LGPD"),
    menciona_sigilo_pedido = str_detect(detalhamento_clean, "sigilo"),
    menciona_sigilo_resposta = str_detect(resposta_clean, "sigilo"),
    # menciona_artigo_31_pedido = str_detect(detalhamento_clean, "(artigo 31|art 31)"),
    # menciona_artigo_31_resposta = str_detect(resposta_clean, "(artigo 31|art 31)")
  )
#> Joining, by = "id_pedido"
#> left_join: added one column (protocolo)
#> Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
#> 'big.mark' and 'decimal.mark' are both ',', which could be confusing

#> Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
#> 'big.mark' and 'decimal.mark' are both ',', which could be confusing

#> Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
#> 'big.mark' and 'decimal.mark' are both ',', which could be confusing

#> Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
#> 'big.mark' and 'decimal.mark' are both ',', which could be confusing
#>            > rows only in x        0
#>            > rows only in y  (     0)
#>            > matched rows     43,517
#>            >                 ========
#>            > rows total       43,517

termos_categoria <- termos %>%
  transmute(
    id_pedido,
    protocolo,
    data_registro,
    orgao,
    detectado = case_when(
    (#1
      menciona_lai_resposta &
     !menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Termos não detectados",
    (#2
     !menciona_lai_resposta &
     !menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Termos não detectados",
    (#3
      menciona_lai_resposta &
      menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Menciona somente termos 'sigilo'",
    (#4
      menciona_lai_resposta &
      menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Menciona os termos 'sigilo' e 'dados pessoais'",
    (#5
      menciona_lai_resposta &
     !menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Menciona somente termos 'dados pessoais'",
    (#6
     !menciona_lai_resposta &
      menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Menciona somente termos 'sigilo'",
    (#7
     !menciona_lai_resposta &
     !menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Menciona somente termos 'dados pessoais'",
    (#8
     !menciona_lai_resposta &
      menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
     !menciona_lgpd_resposta
    ) ~ "Menciona os termos 'sigilo' e 'dados pessoais'",
    (#9
      menciona_lai_resposta &
     !menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona os termos 'dados pessoais' e 'LGPD'",
    (#10
      menciona_lai_resposta &
      menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona os termos 'sigilo', 'dados pessoais' e 'LGPD'",
    (#11
     !menciona_lai_resposta &
     !menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona os termos 'dados pessoais' e 'LGPD'",
    (#12
      menciona_lai_resposta &
     !menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona somente termos 'LGPD'",
    (#13
     !menciona_lai_resposta &
     !menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona somente termos 'LGPD'",
    (#14
      menciona_lai_resposta &
      menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona os termos 'sigilo' e 'LGPD'",
    (#15
     !menciona_lai_resposta &
      menciona_sigilo_resposta &
      menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona os termos 'sigilo', 'dados pessoais' e 'LGPD'",
    (#16
     !menciona_lai_resposta &
      menciona_sigilo_resposta &
     !menciona_dados_pessoais_resposta &
      menciona_lgpd_resposta
    ) ~ "Menciona os termos 'sigilo' e 'LGPD'",
    TRUE ~ NA_character_
  ))


termos %>%
  select(ends_with("_resposta"), -data_resposta) %>%
  count(
    menciona_lai_resposta,
    menciona_sigilo_resposta,
    menciona_dados_pessoais_resposta,
    menciona_lgpd_resposta,
    sort = TRUE
  ) %>%
  mutate(ord = row_number()) %>%
  group_by(ord) %>%
  nest() %>%
  deframe() %>%
  map(
    pivot_longer,
    cols = c(menciona_lai_resposta,
             menciona_sigilo_resposta,
             menciona_dados_pessoais_resposta,
             menciona_lgpd_resposta),
    names_to = "termo",
    values_to = "detectado"
  )
#> $`1`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1 16890 menciona_lai_resposta            TRUE     
#> 2 16890 menciona_sigilo_resposta         FALSE    
#> 3 16890 menciona_dados_pessoais_resposta FALSE    
#> 4 16890 menciona_lgpd_resposta           FALSE    
#> 
#> $`2`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1 14185 menciona_lai_resposta            FALSE    
#> 2 14185 menciona_sigilo_resposta         FALSE    
#> 3 14185 menciona_dados_pessoais_resposta FALSE    
#> 4 14185 menciona_lgpd_resposta           FALSE    
#> 
#> $`3`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1  5167 menciona_lai_resposta            TRUE     
#> 2  5167 menciona_sigilo_resposta         TRUE     
#> 3  5167 menciona_dados_pessoais_resposta FALSE    
#> 4  5167 menciona_lgpd_resposta           FALSE    
#> 
#> $`4`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1  2693 menciona_lai_resposta            TRUE     
#> 2  2693 menciona_sigilo_resposta         TRUE     
#> 3  2693 menciona_dados_pessoais_resposta TRUE     
#> 4  2693 menciona_lgpd_resposta           FALSE    
#> 
#> $`5`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1  1683 menciona_lai_resposta            TRUE     
#> 2  1683 menciona_sigilo_resposta         FALSE    
#> 3  1683 menciona_dados_pessoais_resposta TRUE     
#> 4  1683 menciona_lgpd_resposta           FALSE    
#> 
#> $`6`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1  1647 menciona_lai_resposta            FALSE    
#> 2  1647 menciona_sigilo_resposta         TRUE     
#> 3  1647 menciona_dados_pessoais_resposta FALSE    
#> 4  1647 menciona_lgpd_resposta           FALSE    
#> 
#> $`7`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1   396 menciona_lai_resposta            FALSE    
#> 2   396 menciona_sigilo_resposta         FALSE    
#> 3   396 menciona_dados_pessoais_resposta TRUE     
#> 4   396 menciona_lgpd_resposta           FALSE    
#> 
#> $`8`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1   305 menciona_lai_resposta            FALSE    
#> 2   305 menciona_sigilo_resposta         TRUE     
#> 3   305 menciona_dados_pessoais_resposta TRUE     
#> 4   305 menciona_lgpd_resposta           FALSE    
#> 
#> $`9`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1   202 menciona_lai_resposta            TRUE     
#> 2   202 menciona_sigilo_resposta         FALSE    
#> 3   202 menciona_dados_pessoais_resposta TRUE     
#> 4   202 menciona_lgpd_resposta           TRUE     
#> 
#> $`10`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1   186 menciona_lai_resposta            TRUE     
#> 2   186 menciona_sigilo_resposta         TRUE     
#> 3   186 menciona_dados_pessoais_resposta TRUE     
#> 4   186 menciona_lgpd_resposta           TRUE     
#> 
#> $`11`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1    54 menciona_lai_resposta            FALSE    
#> 2    54 menciona_sigilo_resposta         FALSE    
#> 3    54 menciona_dados_pessoais_resposta TRUE     
#> 4    54 menciona_lgpd_resposta           TRUE     
#> 
#> $`12`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1    44 menciona_lai_resposta            TRUE     
#> 2    44 menciona_sigilo_resposta         FALSE    
#> 3    44 menciona_dados_pessoais_resposta FALSE    
#> 4    44 menciona_lgpd_resposta           TRUE     
#> 
#> $`13`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1    32 menciona_lai_resposta            FALSE    
#> 2    32 menciona_sigilo_resposta         FALSE    
#> 3    32 menciona_dados_pessoais_resposta FALSE    
#> 4    32 menciona_lgpd_resposta           TRUE     
#> 
#> $`14`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1    15 menciona_lai_resposta            TRUE     
#> 2    15 menciona_sigilo_resposta         TRUE     
#> 3    15 menciona_dados_pessoais_resposta FALSE    
#> 4    15 menciona_lgpd_resposta           TRUE     
#> 
#> $`15`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1    14 menciona_lai_resposta            FALSE    
#> 2    14 menciona_sigilo_resposta         TRUE     
#> 3    14 menciona_dados_pessoais_resposta TRUE     
#> 4    14 menciona_lgpd_resposta           TRUE     
#> 
#> $`16`
#> # A tibble: 4 × 3
#>       n termo                            detectado
#>   <int> <chr>                            <lgl>    
#> 1     4 menciona_lai_resposta            FALSE    
#> 2     4 menciona_sigilo_resposta         TRUE     
#> 3     4 menciona_dados_pessoais_resposta FALSE    
#> 4     4 menciona_lgpd_resposta           TRUE

A base de dados da CGU não é completa, pois os pedidos contendo dados pessoais e informações consideradas sensíveis são descartados e o seu conteúdo não é divulgado. Os critérios para descarte desses pedidos da transparência ativa é adotado pelos órgãos do governo Federal e pela CGU e não é claro. Tal incompletude dos dados resulta em subnotificação das detecções dos termos, uma vez que eles dizem respeito aos temas “sigilo” e “dados pessoais”.

Outra fonte de subnotificação importante é a ausência de dados da Caixa Econômica Federal (CEF). A CEF era um dos principais órgãos solicitados via LAI sendo responsável por pelo menos x% de todas as solicitações disponibilizadas pelo FalaBr entre 2015 e 2018.

Código
base[1, 2] %>%
  unnest(datasets) %>%
  inner_join(nr_protocolo) %>%
  count(
    ano = year(data_registro),
    orgao = if_else(orgao == "CEF – Caixa Econômica Federal", orgao, "Demais órgãos")
  ) %>%
  add_count(ano, wt = n, name = "n_total") %>%
  mutate(perc = n / n_total) %>%
  ggplot(aes(x = ano, y = perc, fill = orgao)) +
  ggchicklet::geom_chicklet() +
  geom_text(
    aes(label = if_else(orgao == "Demais órgãos",
                    NA_character_, scales::percent(perc,
                                                   accuracy = .1,
                                                   decimal_mark = ",",
                                                   big.mark = " "))),
    color = "white",
    vjust = 1
  ) +
  scale_fill_manual(
    values = c(
      "CEF – Caixa Econômica Federal" = cores_aep[["rosa"]],
      "Demais órgãos" = cores_aep[["laranja"]]
    )
  ) +
  hrbrthemes::scale_y_percent(limits = c(0, 1), n.breaks = 6) +
  labs(
    title = "Pedidos LAI com acesso negado",
    x = NULL, y = NULL,
    subtitle = "% da Caixa (CEF) no total de negativas",
    fill = NULL
  ) +
  scale_x_continuous(breaks = 2015L:2022L)
#> Joining, by = c("id_pedido", "protocolo")
#> Warning: Removed 8 rows containing missing values (geom_text).

A busca pelos termos não é perfeita e pode conter imprecisões e detecções que não correspondem ao contexto de interesse. Para aumentar a precisão da detecção o conteúdo das respostas foram normalizados com remoção de acentos, pontuações, caracteres especiais e substituição de letras maiúsculas por minúsculas. A detecção dos termos foi feita com o auxílio de expressões regulares definidas neste script.

A quantidade de pedidos em que os termos foram detectados podem ser vistos na figura abaixo:

Código
termos_categoria %>%
  mutate(detectado = if_else(detectado == "Termos não detectados", detectado, "Termos detectados")) %>%
  count(detectado, sort = T) %>%
  ggplot(aes(x = detectado, y = n, fill = detectado)) +
  ggchicklet::geom_chicklet() +
  geom_text(aes(label = scales::number(n))) +
  scale_y_continuous(labels = scales::number) +
  scale_fill_manual(values = c("Termos não detectados" = cores_aep[["laranja"]],
                               "Termos detectados" = cores_aep[["rosa"]])) +
  labs(
    title = "Detecção de termos relacionados a sigilo, dados pessoais e LGPD",
    y = "Quantidade de pedidos",
    x = NULL,
    fill = NULL
  )

Onde os termos foram detectados, foram agrupadas as combinações de sua utilização:

Código
termos_categoria %>%
  filter(detectado != "Termos não detectados") %>%
  count(ano = year(data_registro), detectado, sort = T) %>%
  ggplot(aes(x = ano, y = n)) +
  ggchicklet::geom_chicklet(fill = cores_aep[["rosa"]]) +
  geom_text(
    aes(label = if_else(n > 0, scales::number(n), "")),
    vjust = -.6
  ) +
  facet_wrap(~ reorder(detectado, -n), ncol = 1) +
  scale_y_continuous(labels = scales::number, limits = c(0, 1.4e3)) +
  scale_x_continuous(breaks = 2015L:2022L)

Código
  labs(
    x = NULL,
    y = "Quantidade",
    title = "Combinações dos termos detectados",
    subtitle = "Pedidos LAI com acesso negado ao solicitante"
  )
#> $x
#> NULL
#> 
#> $y
#> [1] "Quantidade"
#> 
#> $title
#> [1] "Combinações dos termos detectados"
#> 
#> $subtitle
#> [1] "Pedidos LAI com acesso negado ao solicitante"
#> 
#> attr(,"class")
#> [1] "labels"

A figura abaixo apresenta o percentual de acessos negados que mencionaram as combinações de textos.

Código
termos_categoria %>%
  mutate(detectado = if_else(str_detect(detectado, "LGPD"), "Menciona LGPD*", detectado)) %>%
  count(ano = year(data_registro), detectado, sort = T) %>%
  add_count(ano, wt = n, name = "n_total") %>%
  mutate(perc = n / n_total) %>%
  filter(detectado != "Termos não detectados") %>%
  ggplot(aes(x = ano, y = perc, color = reorder(detectado, -perc))) +
  geom_line(size = 1.5) +
  geom_point(size = 2) +
  theme(legend.position = c(.75, .85),
        panel.grid.minor.y = element_line(),
        legend.background = element_rect(fill = "white")) +
  hrbrthemes::scale_y_percent(limits = c(0, .3), n.breaks = 6) +
  scale_x_continuous(breaks = 2015L:2022L) +
  scale_color_manual(values = c(
    "Menciona somente termos 'sigilo'" = cores_aep[["laranja"]],
    "Menciona os termos 'sigilo' e 'dados pessoais'" = cores_aep[["rosa"]],
    "Menciona somente termos 'dados pessoais'" = cores_aep[["marrom"]],
    "Menciona LGPD*" = cores_tb[["azul"]]
  )) +
  labs(
    x = NULL,
    y = "Percentual de acessos negados que mencionam os termos",
    color = "Combinações dos termos detectados",
    title = "Frequência de uso de termos em acessos negados",
    subtitle = "Pedidos LAI com acesso negado ao solicitante",
    caption = "* Todas as combinações para LGPD foram agrupadas em uma única categoria"
  )

Em linhas gerais, a distribuição da frequência de negativas que alegam sigilos ou exposição de informações sensíveis e pessoais não se alteraram ao longo dos anos. Entretanto isso deve ser visto com ressalvas, uma vez que a Caixa Econômica Federal não disponibiliza pedidos LAI em transparência ativa. Nos últimos anos aumentaram a frequência da utilização de termos relacionados a dados pessoais e, mais recentemente, a Lei Geral de Proteção de Dados.

Código
termos_categoria %>%
  mutate(detectado = if_else(str_detect(detectado, "LGPD"), "Menciona LGPD*", detectado)) %>%
  count(ano = year(data_registro), detectado, sort = T) %>%
  add_count(ano, wt = n, name = "n_total") %>%
  mutate(perc = n / n_total) %>%
  ggplot(aes(x = ano, y = perc, fill = reorder(detectado, -perc))) +
  geom_area(position = "stack", color = "black", alpha = .7) +
  theme(legend.position = c(.75, .85),
        panel.grid.minor.y = element_line(),
        legend.background = element_rect(fill = "white")) +
  hrbrthemes::scale_y_percent(limits = c(0, 1), n.breaks = 6) +
  scale_x_continuous(breaks = 2015L:2022L) +
  scale_fill_manual(values = c(
    "Termos não detectados" = cores_tb[["cinza_quase_branco"]],
    "Menciona somente termos 'sigilo'" = cores_aep[["laranja"]],
    "Menciona os termos 'sigilo' e 'dados pessoais'" = cores_aep[["rosa"]],
    "Menciona somente termos 'dados pessoais'" = cores_aep[["marrom"]],
    "Menciona LGPD*" = cores_tb[["azul"]]
  )) +
  labs(
    x = NULL,
    y = "Percentual de acessos negados que mencionam os termos\n(Acumulado)",
    fill = "Combinações dos termos detectados",
    title = "Frequência de uso de termos em acessos negados",
    subtitle = "Pedidos LAI com acesso negado ao solicitante",
    caption = "* Todas as combinações para LGPD foram agrupadas em uma única categoria"
  )