\[ \cdot \]

Objetivo

\(\qquad\) Nosso objetivo é fazer uma análise descritiva da lei dos 60 dias para o câncer de mama a nível dos estados brasileiros. Para isso, iremos analisar para cada unidade federativa qual a porcentagem de pacientes que tiveram a lei dos 60 dias descumprida.

\(\qquad\) A Lei dos 60 dias é uma importante lei relacionada a oncologia, sendo uma referência ao tratamento do câncer pelo Sistema Único de Saúde (SUS). Ela estabelece que os pacientes com diagnóstico câncer tenham acesso ao tratamento no prazo máximo de 60 dias, contados a partir do diagnóstico confirmado, conforme a lei nº 12.732, de 22 de novembro de 2012. Essa lei tem como objetivo garantir o acesso dos pacientes oncológicos ao tratamento de forma mais ágil e eficiente, reduzindo as filas de espera e evitando que os pacientes tenham que aguardar por longos períodos para iniciar o tratamento.

\(\qquad\) Para isso, utilizaremos o Painel de Oncologia, que é um painel criado para monitoramento da lei dos 60 dias. Esse painel utiliza dados do sistema ambulatorial (SIASUS), do sistema hospitalar (SIHSUS) e do sistema de informações de Câncer (SISCAN). Os dados de câncer de mama estão disponíveis desde 2013.

\[ \cdots \]

Conceitos necessários

  • Classificação Internacional de Doenças (CID): é um documento elaborado e atualizado pela Organização Mundial da Saúde (OMS). Esse documento fornece códigos para padronizar doenças e outros problemas relacionados a saúde. Isso permite uma sistematização importante para o controle de dados relativos às doenças.

  • Neoplasia maligna: embora todo câncer seja uma neoplasia, nem toda neoplasia é um tumor maligno. O tumor benigno é uma massa com crescimento celular organizado, diferente da neoplasia maligna, que é caracterizada pelo crescimento desordenado das células, o que pode levar à metástase para outros órgãos e tecidos.

\(\qquad\) C50 é o código do câncer de mama, inclui o tecido conjuntivo de mama, mas exclui tumores na pele da mama (que foram inseridos em subcategorias de neoplasias de pele C43.5, C44.5). Quando o CID aparece com 3 dígitos, se trata das subcategorias, como vemos na lista abaixo:

C50.0: Neoplasia maligna do mamilo e aréola.
C50.1: Neoplasia maligna da porção central da mama.
C50.2: Neoplasia maligna do quadrante superior interno da mama.
C50.3: Neoplasia maligna do quadrante inferior interno da mama.
C50.4: Neoplasia maligna do quadrante superior externo da mama.
C50.5: Neoplasia maligna do quadrante inferior externo da mama.
C50.6: Neoplasia maligna da porção axilar da mama.
C50.8: Neoplasia maligna da mama com lesão invasiva.
C50.9: Neoplasia maligna da mama, não especificada.

\(\qquad\) Quando uma doença é reportada, é importante sempre especificar o máximo utilizando as subcategorias. Reportar C50 pode ser qualquer uma das categorias ou até mesmo mais de uma delas e portanto dificulta a rastreabilidade em análises epidemiológicas.

\[ \cdots \]

Carregando os dados

\(\qquad\) Os dados referentes ao diagnóstico de neoplasia maligna de mama (C50 - Neoplasia maligna da mama, já que o Tabnet não permite selecionar subcategorias) foram obtidos através do DataSUS-Tabnet para os anos de 2013 a 2022.

# carregar os pacotes
# library(tidyverse)
# library(kableExtra)
load_data <- function(file, year){
    
    data <- readr::read_delim(file = file, delim = ";", 
                      escape_double = FALSE, trim_ws = TRUE,
                      show_col_types = FALSE,
                      locale = readr::locale(encoding = "ISO-8859-1"))
    data <- data |> 
        dplyr::mutate(
            `UF do diagnóstico` = str_replace(`UF do diagnóstico`,
                                              "^\\d+\\s+",
                                              "")
        ) |> 
        dplyr::mutate(Ano = year) |> 
        dplyr::rename(
            `Sem informação de tratamento (SIT)` = `Sem informação de tratamento`
        ) |> 
        dplyr::mutate("Região" =  case_when(
            `UF do diagnóstico` %in% c("Rondônia", "Acre",
                                       "Amazonas", "Roraima",
                                       "Pará", "Amapá", "Tocantins") ~ "Norte",
            `UF do diagnóstico` %in% c("Maranhão", "Piauí", "Ceará",
                                       "Rio Grande do Norte", "Paraíba",
                                       "Pernambuco", "Alagoas",
                                       "Sergipe", "Bahia") ~ "Nordeste",
            `UF do diagnóstico` %in% c("Minas Gerais", "Espírito Santo",
                                       "Rio de Janeiro", "São Paulo") ~ "Sudeste",
            `UF do diagnóstico` %in% c("Paraná", "Santa Catarina",
                                       "Rio Grande do Sul") ~ "Sul",
            `UF do diagnóstico` %in% c("Mato Grosso do Sul", "Mato Grosso",
                                       "Goiás", "Distrito Federal") ~ "Centro-Oeste"
        ))
    
    return(data)
    
}
data_2013 <- load_data("2013.csv", 2013)
data_2014 <- load_data("2014.csv", 2014)
data_2015 <- load_data("2015.csv", 2015)
data_2016 <- load_data("2016.csv", 2016)
data_2017 <- load_data("2017.csv", 2017)
data_2018 <- load_data("2018.csv", 2018)
data_2019 <- load_data("2019.csv", 2019)
data_2020 <- load_data("2020.csv", 2020)
data_2021 <- load_data("2021.csv", 2021)
data_2022 <- load_data("2022.csv", 2022)
base::rm(load_data)

\[ \cdots \]

Tabelas de dados

\(\qquad\) Empilhanda as bases de dados carregadas. Para o nosso objetivo, também é interessante criar duas novas colunas a partir dos dados. Essas colunas são: Total exceto “Sem informação de tratamento (SIT)” e o percentual de acesso ao tratamento posterior aos 60 dias.

# empilhando as bases
stacked_data <- dplyr::bind_rows(data_2013, data_2014,
                                 data_2015, data_2016,
                                 data_2017, data_2018,
                                 data_2019, data_2020,
                                 data_2021, data_2022)

base::rm(data_2013, data_2014, data_2015, data_2016, data_2017,
         data_2018, data_2019, data_2020, data_2021, data_2022)

# criando duas colunas novas
stacked_data <- stacked_data |> 
    dplyr::mutate(
        `Total (Exc_SIT)` = `Até 30 dias` + `31 - 60 dias` + `Mais de 60`
    ) |> 
    dplyr::mutate(
        `Mais de 60 (% Exc_SIT)` = round((`Mais de 60` / `Total (Exc_SIT)`)*100, 2)
    ) |> # tratando resultado NaN
    dplyr::mutate(
        `Mais de 60 (% Exc_SIT)` = replace_na(`Mais de 60 (% Exc_SIT)`, 0.00))

Ano de 2019

Abaixo, vamos filtrar os dados para o período de 2019 e verificar os percentuais acima de 60 dias nos Estados.

# tabela para o ano de 2019
data_2019 <- stacked_data |>
    dplyr::filter(Ano == 2019 &
                  `UF do diagnóstico` != "Total") |> 
    dplyr::arrange(desc(`Mais de 60 (% Exc_SIT)`))

kableExtra::kable(data_2019) |>
    kableExtra::kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
UF do diagnóstico Até 30 dias 31 - 60 dias Mais de 60 Sem informação de tratamento (SIT) Total Ano Região Total (Exc_SIT) Mais de 60 (% Exc_SIT)
Roraima 10 2 27 8 47 2019 Norte 39 69.23
Mato Grosso do Sul 92 65 273 63 493 2019 Centro-Oeste 430 63.49
Rio de Janeiro 875 605 2482 608 4570 2019 Sudeste 3962 62.65
Santa Catarina 441 383 1240 368 2432 2019 Sul 2064 60.08
Amapá 6 12 27 1 46 2019 Norte 45 60.00
Distrito Federal 123 92 322 106 643 2019 Centro-Oeste 537 59.96
Amazonas 135 34 240 130 539 2019 Norte 409 58.68
São Paulo 2278 2038 5840 2589 12745 2019 Sudeste 10156 57.50
Maranhão 149 114 354 119 736 2019 Nordeste 617 57.37
Paraíba 256 136 521 58 971 2019 Nordeste 913 57.06
Minas Gerais 1226 937 2799 851 5813 2019 Sudeste 4962 56.41
Bahia 619 437 1313 594 2963 2019 Nordeste 2369 55.42
Alagoas 110 115 261 99 585 2019 Nordeste 486 53.70
Tocantins 41 41 91 16 189 2019 Norte 173 52.60
Ceará 434 507 1021 266 2228 2019 Nordeste 1962 52.04
Rio Grande do Sul 977 779 1876 769 4401 2019 Sul 3632 51.65
Mato Grosso 172 82 267 31 552 2019 Centro-Oeste 521 51.25
Rio Grande do Norte 209 209 438 490 1346 2019 Nordeste 856 51.17
Pará 179 178 367 110 834 2019 Norte 724 50.69
Rondônia 78 65 144 209 496 2019 Norte 287 50.17
Goiás 347 196 537 85 1165 2019 Centro-Oeste 1080 49.72
Espírito Santo 276 214 472 138 1100 2019 Sudeste 962 49.06
Pernambuco 612 409 935 1025 2981 2019 Nordeste 1956 47.80
Sergipe 122 98 201 21 442 2019 Nordeste 421 47.74
Acre 9 14 21 0 44 2019 Norte 44 47.73
Piauí 173 181 245 64 663 2019 Nordeste 599 40.90
Paraná 1131 672 1219 796 3818 2019 Sul 3022 40.34
base::rm(data_2019)

\(\qquad\) No ano de 2019, referente ao ano de diagnóstico, os três Estados que pior cumpriram a Lei dos 60 dias foram: Roraima, Mato Grosso do Sul e Rio de Janeiro. Os três que melhor cumpriram foram: Paraná, Piauí e Acre.

\[ \cdots \]

Nacional

\(\qquad\) Abaixo, a tabela referente ao desempenho nacional.

stacked_data_tot <- stacked_data |> 
    dplyr::filter(`UF do diagnóstico` == "Total") |> 
    dplyr::select(c(Ano, `Mais de 60 (% Exc_SIT)`,
                    `Sem informação de tratamento (SIT)`))

kableExtra::kable(stacked_data_tot) |>
    kableExtra::kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
Ano Mais de 60 (% Exc_SIT) Sem informação de tratamento (SIT)
2013 50.93 2660
2014 54.56 2476
2015 54.23 2406
2016 54.28 2180
2017 55.30 2206
2018 53.81 4401
2019 54.44 9614
2020 50.95 9994
2021 50.91 12497
2022 21.11 26510

\[ \cdots \]

Regional

\(\qquad\) Abaixo, a tabela referente ao desempenho regional.

stacked_data_reg <- stacked_data |> 
    dplyr::filter(`UF do diagnóstico` != "Total") |> 
    dplyr::select(c(Ano, `Mais de 60 (% Exc_SIT)`,
                    `Sem informação de tratamento (SIT)`, Região)) |> 
    dplyr::group_by(Ano, Região) |> 
    dplyr::summarize(
        SIT_soma = sum(`Sem informação de tratamento (SIT)`),
        Desempenho_media = mean(`Mais de 60 (% Exc_SIT)`)
    )
## `summarise()` has grouped output by 'Ano'. You can override using the `.groups`
## argument.

kableExtra::kable(stacked_data_reg) |>
    kableExtra::kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
Ano Região SIT_soma Desempenho_media
2013 Centro-Oeste 144 45.12500
2013 Nordeste 668 45.29667
2013 Norte 88 59.96857
2013 Sudeste 1184 56.57750
2013 Sul 576 44.01000
2014 Centro-Oeste 150 51.91250
2014 Nordeste 884 51.86778
2014 Norte 73 66.03429
2014 Sudeste 774 60.48500
2014 Sul 595 47.33667
2015 Centro-Oeste 127 51.18000
2015 Nordeste 838 54.35556
2015 Norte 80 57.14286
2015 Sudeste 806 58.20750
2015 Sul 555 47.89667
2016 Centro-Oeste 151 51.40000
2016 Nordeste 577 49.11333
2016 Norte 116 63.25143
2016 Sudeste 809 58.28000
2016 Sul 527 47.75000
2017 Centro-Oeste 138 54.77500
2017 Nordeste 467 50.91222
2017 Norte 99 56.20857
2017 Sudeste 855 56.95750
2017 Sul 647 48.82667
2018 Centro-Oeste 246 51.79000
2018 Nordeste 1405 50.44444
2018 Norte 174 57.49429
2018 Sudeste 1620 54.70250
2018 Sul 956 47.28667
2019 Centro-Oeste 285 56.10500
2019 Nordeste 2736 51.46667
2019 Norte 474 55.58571
2019 Sudeste 4186 56.40500
2019 Sul 1933 50.69000
2020 Centro-Oeste 441 56.17500
2020 Nordeste 2635 49.99667
2020 Norte 457 54.34571
2020 Sudeste 4509 51.30500
2020 Sul 1952 45.78333
2021 Centro-Oeste 414 53.23500
2021 Nordeste 3929 49.31444
2021 Norte 308 54.14143
2021 Sudeste 5607 49.98750
2021 Sul 2239 45.28333
2022 Centro-Oeste 1159 22.00500
2022 Nordeste 7370 22.70111
2022 Norte 701 15.74286
2022 Sudeste 11662 22.98750
2022 Sul 5618 19.96667

\[ \cdots \]

Melhor e pior caso

\(\qquad\) Vamos pegar o melhor e o pior desempenho de uma UF durante o período analisado, selecionar um dataframe com apenas esses dois Estados, verificar o desempenho temporal de cada um deles e analisar se o bom/mau desempenho é constante ou foi algo específico.

uf_better <- stacked_data |> 
    dplyr::slice(which.max(stacked_data$`Mais de 60 (% Exc_SIT)`))

kableExtra::kable(uf_better) |>
    kableExtra::kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
UF do diagnóstico Até 30 dias 31 - 60 dias Mais de 60 Sem informação de tratamento (SIT) Total Ano Região Total (Exc_SIT) Mais de 60 (% Exc_SIT)
Sergipe 1 0 19 420 440 2015 Nordeste 20 95
uf_worse <- stacked_data |> 
    dplyr::slice(which.min(stacked_data$`Mais de 60 (% Exc_SIT)`))

kableExtra::kable(uf_worse) |>
    kableExtra::kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
UF do diagnóstico Até 30 dias 31 - 60 dias Mais de 60 Sem informação de tratamento (SIT) Total Ano Região Total (Exc_SIT) Mais de 60 (% Exc_SIT)
Amazonas 160 0 0 18 178 2022 Norte 160 0

\(\qquad\) Os Estados foram Sergipe e Amazonas, respectivamente.

sel_data <- stacked_data |> 
    dplyr::filter(`UF do diagnóstico` %in% c("Sergipe", "Amazonas"))

\[ \cdots \]

Visualização dos dados

Nacional

ggplot2::theme_set(theme_classic())
ggplot2::ggplot(data = stacked_data_tot,
                aes(y = `Mais de 60 (% Exc_SIT)`,
                    x = Ano)) +

    geom_path(size = 1.20, color = "#d62d20") +
    
    labs(title = "CÂNCER DE MAMA - LEI DOS 60 DIAS",
         subtitle = "Variação percentual do descumprimento da lei por ano",
         caption = "Fontes: SIA, SIH e SISCAN",
         x = "",
         y = "Mais de 60 dias (%)") +
    
    ylim(0,60) +
    scale_x_continuous(limits = c(2013, 2022),
                       breaks = seq(2013, 2022, by = 1)) +
    
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

\(\qquad\) Aparentemente, analisando esse dado isoladamente, chama a atenção a melhora do desempenho nacional em 2022. Abaixo, vamos verificar também a evolução da marcação “Sem Informação de Tratamento”.

ggplot2::theme_set(theme_classic())
ggplot2::ggplot(data = stacked_data_tot,
                aes(y = `Sem informação de tratamento (SIT)`,
                    x = Ano)) +

    geom_path(size = 1.20, color = "#56B4E9") +
    
    labs(title = "CÂNCER DE MAMA - LEI DOS 60 DIAS",
         subtitle = "Variação do Total do status 'Sem informação de tratamento' por ano",
         caption = "Fontes: SIA, SIH e SISCAN",
         x = "",
         y = "Status SIT") +
    
    ylim(0,30000) +
    scale_x_continuous(limits = c(2013, 2022),
                       breaks = seq(2013, 2022, by = 1)) +
    
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

\(\qquad\) Podemos perceber que há um aumento significativo dessa marcação. Portanto, é necessário um estudo mais aprofudado porque houve esse aumento e qual é o impacto na melhora do desempenho. Há uma hipótese desta melhorar ter sido verificada apenas pelo aumento das marcações “Sem Informação de Tratamento”.

\[ \cdots \]

Regional

\(\qquad\) Abaixo, vamos analisar a performance regional e a respectiva evolução das marcações “SIT”.

ggplot2::theme_set(theme_classic())
ggplot2::ggplot(data = stacked_data_reg,
                aes(group = Região,
                    y = Desempenho_media,
                    x = Ano)) +
    
    scale_color_manual(values = c("#008744",
                                  "#d62d20",
                                  "#E69F00",
                                  "#56B4E9",
                                  "#A020F0")) +

    geom_path(size = .9, aes(color = Região)) +
    
    labs(title = "CÂNCER DE MAMA - LEI DOS 60 DIAS POR REGIÃO",
         subtitle = "Variação percentual do descumprimento da lei por ano",
         caption = "Fontes: SIA, SIH e SISCAN",
         x = "",
         y = "Mais de 60 dias (%)",
         col = "Região") +
    
    ylim(0,100) +
    scale_x_continuous(limits = c(2013, 2022),
                       breaks = seq(2013, 2022, by = 1)) +
    
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplot2::theme_set(theme_classic())
ggplot2::ggplot(data = stacked_data_reg,
                aes(group = Região,
                    y = SIT_soma,
                    x = Ano)) +
    
    scale_color_manual(values = c("#008744",
                                  "#d62d20",
                                  "#E69F00",
                                  "#56B4E9",
                                  "#A020F0")) +

    geom_path(size = .9, aes(color = Região)) +
    
    labs(title = "CÂNCER DE MAMA - LEI DOS 60 DIAS POR REGIÃO",
         subtitle = "Variação do Total do status 'Sem informação de tratamento' por ano",
         caption = "Fontes: SIA, SIH e SISCAN",
         x = "",
         y = "Status SIT") +
    
    ylim(0,15000) +
    scale_x_continuous(limits = c(2013, 2022),
                       breaks = seq(2013, 2022, by = 1)) +
    
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

\[ \cdots \]

Sergipe e Amazonas

\(\qquad\) Abaixo, vamos analisar a performance dos Estados selecionados com melhor e pior desempenho.

ggplot2::theme_set(theme_classic())
ggplot2::ggplot(data = sel_data,
                aes(group = `UF do diagnóstico`,
                    y = `Mais de 60 (% Exc_SIT)`,
                    x = Ano)) +
    
    scale_color_manual(values = c("#008744",
                                  "#E69F00")) +

    geom_path(size = 1.20, aes(color = `UF do diagnóstico`)) +
    
    labs(title = "CÂNCER DE MAMA - LEI DOS 60 DIAS",
         subtitle = "Variação percentual do descumprimento da lei por ano",
         caption = "Fontes: SIA, SIH e SISCAN",
         x = "",
         y = "Mais de 60 dias (%)",
         col = "Estados") +
    
    ylim(0,100) +
    scale_x_continuous(limits = c(2013, 2022),
                       breaks = seq(2013, 2022, by = 1)) +
    
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

\[ \cdots \]

Conclusão

\(\qquad\) O estudo descritivo fornece uma visão geral da Lei dos 60 dias para o câncer de mama e sua conformidade em nível nacional e regional. No entanto, observou-se que este indicador de desempenho pode ser afetado significativamente pelas marcações de “Sem Informação de Tratamento”. Portanto, um estudo futuro pode investigar as razões desse aumento na falta de informações registradas. Além disso, não foram encontradas grandes diferenças em nível regional.

\[ \cdot \]