1 Sumário executivo

A Avaliação de Tecnologias em Saúde deve lidar com bilhões de registros administrativos para apoiar a tomada de decisão de incorporação ou desincorporação de tecnologias do SUS com dados de mundo real. A Sabeis - Sala Aberta de Inteligência em Saúde foi criada para estabelecer marcos de ciência de dados de modo a orfercer dados e análises com ciência aberta, divulgando códigos-fonte e microdados processados. O presente relato tem como objetivo demonstrar a aplicação da Sabeis no cálculo do percentual de uso de procedimentos do SUS ao longo do tempo. Foram anotados 113 protocolos clínicos, viabilizando a avaliação de 735 procedimentos. Foi demonstrado o passo a passo de como realizar a apresentação da difusão percentual de uso (market share) em linguagem R. Espera-se que a documentação oferecida seja instrumento para avaliação sistemática de todos os protocolos clínicos de SUS.

2 Introdução

O Sistema Único de Saúde (SUS) apresenta uma infoestrutura com desafios, devido sobretudo à fragmentação das centenas de Sistemas de Informação em Saúde e oportunidades, por afigurar-se como um repositório com bilhões de registros administrativos com informações clínicas(Ferré 2021).

Encontra-se em vigor a Política Nacional de Informação e Informática (PNIIS), a qual está estruturando um repositório de informações clínicas vinculadas ao mesmo cidadão a cada contato assistencial (BRASIL 2021).

Enquanto não estão disponíveis dados clíicos a Rede Nacional de Dados em Saúde (RNDS), no bojo da Estratégia da Saúde Digital (ESD) promovida pela PNIIS, o gestor deve lidar com os dados administrativos originados do Sistema de Informações Ambulatoriais para realizar Avaliação de Tecnologias em Saúde, sobretudo de medicamentos e tratamentos oncológicos. Por esta razão foi proposta pela Secretaria Executiva da Conitec a Sabeis - Sala Aberta de Inteligência em Saúde (Ferré et al. 2020).

O presente relato foi editado em R Markdown, disponível em https://rpubs.com/labxss/difusao, e constitui uma série de relatos de ciência de dados no escopo da Sabeis, uma vez que o grupo não objetiva apenas entregar dados, mas organizar o conhecimento de modo que outros atores possam realizar as próprias análises, porém, com um apoio metodológico comum que resulte em avaliações compatíveis entre si, reprodutíveis e instaciáveis em outros cenários.

2.1 Objetivos

Extração e cálculo do indicador de difusão de uso (market-share), dos registros de dispensação regidos por Protocolo Clínico e Diretriz Terapêutica, contidos na Sala Aberta de Inteligência em Saúde - Sabeis.

2.1.1 Objetivos específicos

  • Demonstrar a modelagem e extração de dados.
  • Demonstrar o escopo dos dados extraídos.
  • Demonstrar a transformação para visualização.
  • Demonstrar a a visualização.
  • Estabelecer comparativos a título de exemplo.

3 Método

Trata-se de uma prova de conceito pontuando o percurso metodológico de ciência de dados para estudo descritivo do quantitativo de usuários do SUS e valor em reais de cada tecnologia ao ano em relação ao total realizado sob data diretriz clínica.

3.1 Recursos de software e hardware

As agregações foram realizadas com Linguagem de Consulta Estruturada, do inglês, Structured Query Language - SQL sob os paradigmas da modelagem de processamento analítico online, do inglês, Online Analytical Processing (OLAP) e normas de nomenclatura do Departamento de Informática do SUS (DATASUS).

Os dados foram transpostos em tabelas de dimensão e fatos de modo que cada agregação constitui a soma simples da frequência e valores em Reais relativos a eventos discretos (procedimento, diagnóstico, território, características sociodemográficas). A performance de consultas foi otimizada com o recurso da desnormalização das tabelas fato, de modo a reduzir a demanda por cruzamentos com tabelas de dimensão.

A Extração, Transformação e Carga (extract, transform and load - ETL) de dados de dispensação de medicamentos de usuários com medicamentos biológicos em linguagem estruturada de consulta (structured query language - SQL) utilizando-se o Sistema Gerenciador de Banco de Dados (SGBD) PostgreSQL 10.10 (Ubuntu 10.10-0ubuntu0.18.04.1). Na wiki é disponibilizado o endereço para baixar o código-fonte e repositório de dados sob a licença General Public License - GPL 3.014 e Open Database License (ODbL).

Os dados foram processados em computador LG® Gram 7,6 GB RAM, Intel® Core™ i7-7500U CPU @ 2.70GHz × 4, 256,1 GB SSD, Ubuntu 20.04.3 LTS e servidor em nuvem linux Ubuntu 20.04.1 LTS (Focal Fossa) 5.4.0-109-generic x86_64 Quad Core 2300 MHz Common KVM 64 bits L2 cache 16.0 MiB 150.00 GB SSS 12Gb ram.

3.2 Modelagem e extração

O método detalhado de extração, transformação e carga encontra-se em https://rpubs.com/labxss/etlsabeis.

Os dados originais do Sistema de Informação Ambulatorial SIA são coletados a partir do sítio ftp://ftp.datasus.gov.br/dissemin/publicos/SIASUS/200801_/. O formato original é um arquivo DBC, o qual é descompactado com o dbf2dbc.exe, disponível na pasta compactada do tabwin disponível em ftp://ftp.datasus.gov.br/tabwin/tabwin/TAB415.zip emulado no linux com auxílio do wine. O DBD resultante é convertido para CSV utilizando-se dbview e carregado no Sistema Gerenciador de Banco de Dados PostgreSQL com script em linguagem bash. O wine, dbview e o PostgreSQL 10.10 foram instalados a partir do comando apt get disponível no Ubuntu 20.04.3 LTS.

Remark. Os links de diretórios ftp são atualmente acessíveis pelo navegador de arquivos, não pelo navegador de internet.

Os dados do SIA são armazenados nas filhas da tabela tf_siasus_pa_diretriz, as quais herdam as características da mãe. Além de ser particionadas nas filhas, a tabela máe é normalizada, isto é, recebe apenas um identificador sequencial das respectivas tabelas de domínio conforme mostrado na figura 3.1.

Diagrama de entidades e relacionamentos da Sala Aberta de Inteligência em Saúde - módulo de medicamentos e oncológicos

Figure 3.1: Diagrama de entidades e relacionamentos da Sala Aberta de Inteligência em Saúde - módulo de medicamentos e oncológicos

A tabela 3.1 mostra as variáveis da SABEIS e respectivas origens nos arquivos DBC, sumariamente descritos no arquivo ftp://ftp.datasus.gov.br/dissemin/publicos/SIASUS/200801_/Doc/Informe_Tecnico_SIASUS_2019_07.pdf e nas definições, em formato DEF, e domínios, em formato CNV e DBF contidos na pasta compactada ftp://ftp.datasus.gov.br/dissemin/publicos/SIASUS/200801_/Auxiliar/TAB_SIA.zip.

Table 3.1: Atributos padronizados na SABEIS e origens do sistema de disseminação tabwin.
ano ano.de.atendimento origem.Tabwin
co carater atendimento Caráter do Atendimento catend
co cep residencia CEP do paciente ap ceppcn, cep
co cidpri CID Principal ap cidpri, causabas, cidpri, diag princ, pa cidpri, sp cidpri
co cidsec CID Secundário ap cidsec, diag sec, diagsec1, diagsec2, diagsec3, diagsec4, diagsec5, diagsec6, diagsec7, diagsec8, diagsec9, pa cidsec, sp cidsec
co cnes estabelecimento Código do Estabelecimento no CNES (Cadastro Nacional de Estabelecimentos de Saúde) ap coduni, cnes, cnes exec, co cnescon, coduni, id unidade, pa coduni, sp cnes
co gestao Código da Unidade de Federação + Código Município de Gestão ou UF0000 se a Unidade está sob Gestão Estadual ap gestao, gestao, pa gestao, sp gestor, uf zi
co ibge municipio evento Código da Unidade da Federação + Código do Município do Estabelecimento ap ufmun, codmunocor, codufmun, id municip, munic mov, pa munat, pa ufmun, ufmun
co ibge municipio residencia Código da UF + Código do Município de Residência do paciente ap munpcn, codmunres, co munres, munic res, munpac, mun res, pa munpcn, ufmunres
co procedimento Código SIGTAP do procedimento ap pripal, co procede, pa codpro, pa proc id, proc id, proc rea, sp procrea
co seq diretriz diretriz CONITEC
co seq procedimento procedimento SIGTAP sequencial
co tipo atendimento Caráter do Atendimento ap_catend, catend
ds esquema 1 ESQUEMA (Sigla ou abrev.) - 5 primeiras posições aq esqu p1
ds esquema 2 ESQUEMA (Sigla ou abrev.) - 10 últimas posições aq esqu p2
ds nascimento Data de nascimento do paciente dt nasc, dtnasc, nasc
dt fim Data de Início ap dtfim, dt saida, fim, sp dtsaida, dt_fim
dt inicio Data de Fim ap dtinic, inicio
no abreviado Nome abreviado da diretriz
no diretriz50 Nome da diretriz com 50 caracteres
no procedimento Nome do procedimento SIGTAP
nu apac Número da APAC. Lei de formação: UFAATsssssssd, onde UF – Unid. da Federação, AA – ano, T – tipo, sssssss – sequencial, d – dígito ap autoriz, autoriz, pa autoriz, pa numapa
nu cnspcn Número do CNS (Cartão Nacional de Saúde) do paciente ap cnspcn, cns pac
nu competencia Mês de atendimento ap cmp, cmpt, cmpt ini, pa cmp, dt_atend
nu competencia max Competência mínima do procedimento, diretriz e ano
nu competencia min Competência mínima do procedimento, diretriz e ano
nu competencia movimentacao Data de Processamento / Movimento (AAAAMM) ap mvm, pa mvm
nu idade Idade do paciente ap nuidade, idade, idadepac, nu idade n, pa idade
pa condic Sigla do Tipo de Gestão no qual o Estado ou Município está habilitado ap condic, condic, pa condic
qt aprovada Quantidade aprovada do procedimento pa qtdapr, qt aprov
qt cnspcn Quantidade de usuários segundo cartão de saúde
qt cnspcn total Quantidade de usuários atendidos para a diretriz no ano
sg sexo Sexo do paciente ap sexo, co sexo, cs sexo, pa sexo, sexo, sexopac
vl altura Altura do paciente em cm am altura, an altura
vl aprovado Valor Total da APAC Aprovado pa valapr, qt proced, val tot, vl aprov, ap_vl_ap
vl peso Peso do paciente em kg am peso, an peso, peso, pesonasc

Atributos selecionados e valores de um usuário do SUS são ilustrados na tabela 3.2.

Table 3.2: Atributos padronizados na SABEIS e origens do sistema de disseminação tabwin.
co seq competencia co seq procedimento co seq municipio residencia nu cnspcn nu apac sg sexo nu idade qt aprovada
1.301 4.109 42 102.484.890.160.306 1.208.200.002.185 M 61 12
1.301 4.104 42 102.484.890.160.306 1.208.200.002.185 M 61 10
1.302 4.104 42 102.484.890.160.306 1.208.200.022.524 M 60 10
1.302 4.109 42 102.484.890.160.306 1.208.200.022.524 M 60 12
1.303 4.104 42 102.484.890.160.306 1.208.200.022.524 M 60 10
1.303 4.109 42 102.484.890.160.306 1.208.200.022.524 M 60 12
1.306 4.109 42 102.484.890.160.306 1.208.200.053.390 M 60 8
1.306 4.317 42 102.484.890.160.306 1.208.200.053.390 M 60 30
1.307 4.317 42 102.484.890.160.306 1.208.200.053.390 M 60 30
1.307 4.109 42 102.484.890.160.306 1.208.200.053.390 M 60 8
1.309 4.317 42 102.484.890.160.306 1.208.200.081.308 M 60 30
1.309 4.109 42 102.484.890.160.306 1.208.200.081.308 M 60 12
1.311 4.104 42 102.484.890.160.306 1.208.200.081.308 M 60 4
1.311 4.109 42 102.484.890.160.306 1.208.200.081.308 M 60 12
1.312 4.109 42 102.484.890.160.306 1.208.200.095.047 M 61 12
1.313 4.104 42 102.484.890.160.306 1.208.200.095.047 M 61 4
1.313 4.109 42 102.484.890.160.306 1.208.200.095.047 M 61 4
1.314 4.317 42 102.484.890.160.306 1.208.200.095.047 M 61 60
1.314 4.104 42 102.484.890.160.306 1.208.200.095.047 M 61 10
1.315 4.288 42 102.484.890.160.306 1.209.200.011.459 M 61 60
1.316 4.104 42 102.484.890.160.306 1.209.200.011.459 M 61 2
1.316 4.317 42 102.484.890.160.306 1.209.200.011.459 M 61 30
1.316 4.109 42 102.484.890.160.306 1.209.200.011.459 M 61 12
1.317 4.104 42 102.484.890.160.306 1.209.200.011.459 M 61 2
1.317 4.109 42 102.484.890.160.306 1.209.200.011.459 M 61 12
1.318 4.109 42 102.484.890.160.306 1.209.200.052.632 M 61 12
1.318 4.317 42 102.484.890.160.306 1.209.200.052.632 M 61 30
1.318 4.104 42 102.484.890.160.306 1.209.200.052.632 M 61 4
1.319 4.109 42 102.484.890.160.306 1.209.200.052.632 M 61 12
1.319 4.317 42 102.484.890.160.306 1.209.200.052.632 M 61 30
1.320 4.317 42 102.484.890.160.306 1.209.200.052.632 M 61 30
1.320 4.109 42 102.484.890.160.306 1.209.200.052.632 M 61 12
1.321 4.109 42 102.484.890.160.306 1.209.200.077.030 M 61 8
1.321 4.288 42 102.484.890.160.306 1.209.200.077.030 M 61 60
1.321 4.317 42 102.484.890.160.306 1.209.200.077.030 M 61 30
1.321 4.104 42 102.484.890.160.306 1.209.200.077.030 M 61 2
1.322 4.109 42 102.484.890.160.306 1.209.200.077.030 M 61 8
1.322 4.288 42 102.484.890.160.306 1.209.200.077.030 M 61 60
1.323 4.288 42 102.484.890.160.306 1.209.200.077.030 M 61 60
1.323 4.109 42 102.484.890.160.306 1.209.200.077.030 M 61 12
1.323 4.317 42 102.484.890.160.306 1.209.200.077.030 M 61 15
1.324 4.109 42 102.484.890.160.306 1.209.200.095.620 M 62 12
1.324 4.288 42 102.484.890.160.306 1.209.200.095.620 M 62 90
1.325 4.109 42 102.484.890.160.306 1.209.200.095.620 M 62 12
1.325 4.288 42 102.484.890.160.306 1.209.200.095.620 M 62 60
1.325 4.104 42 102.484.890.160.306 1.209.200.095.620 M 62 3
1.326 4.109 42 102.484.890.160.306 1.209.200.095.620 M 62 12
1.329 4.706 42 102.484.890.160.306 1.210.200.068.792 M 62 30
1.329 4.652 42 102.484.890.160.306 1.210.200.068.792 M 62 12
1.329 4.526 42 102.484.890.160.306 1.210.200.068.792 M 62 10

A consulta SQL a seguir mostra a agregação que orgina o conjunto de dados de trabalho legível no R com o comando read.csv("data/difusao2022-11-15 - dataset.csv").

select A.*, B.qt_cnspcn qt_cnspcn_total 
from (

   -- calcula o total de usuarios ao ano para a diretriz e o procedimento
   select
        m.ano,
        a.co_seq_procedimento,
        a.co_seq_diretriz ,
        count(DISTINCT a.nu_cnspcn) AS qt_cnspcn,
        sum(a.qt_aprovada) AS qt_aprovada,
        sum(a.vl_aprovado) AS vl_aprovado,
        min(m.co_mes_ano) AS nu_competencia_min,
        max(m.co_mes_ano) AS nu_competencia_max
    FROM bd_sabeis.tf_siasus_pa_diretriz a
    LEFT JOIN bd_geral.td_tempo_ano_mes m ON a.co_seq_competencia = m.co_seq_mes_ano
    group by 1,2,3
    -- -----------
    
    ) A
    left join (
    
    -- calcula o total de usuarios ao ano para a diretriz
    select  m.ano,
        a.co_seq_diretriz ,
        count(DISTINCT a.nu_cnspcn) AS qt_cnspcn,
        min(m.co_mes_ano) AS nu_competencia_min,
        max(m.co_mes_ano) AS nu_competencia_max
    FROM bd_sabeis.tf_siasus_pa_diretriz a
    LEFT JOIN bd_geral.td_tempo_ano_mes m ON a.co_seq_competencia = m.co_seq_mes_ano
    group by 1,2
    -- -----------
    
    ) B
    on A.ano = B.ano and A.co_seq_diretriz=B.co_seq_diretriz;

Observe a como foi realizada junção com as tabelas relacionais e a preparação dos dados de modo a obter o produto observado no arquivo CSV do conjunto de dados de trabalho.


 select 
       ano,
       co_seq_diretriz,
       no_abreviado,
       no_diretriz50,
       atributo,
       sum(qt_cnspcn) qt_cnspcn,
       sum(qt_aprovada) qt_aprovada,
       sum(vl_aprovado) vl_aprovado,
       min(nu_competencia_min) nu_competencia_min,
       min(nu_competencia_max) nu_competencia_max,
       sum(distinct qt_cnspcn_total) qt_cnspcn_total,
       round(sum(qt_cnspcn)::numeric/sum(distinct qt_cnspcn_total)*100,3) indicador,
       string_agg(distinct co_seq_procedimento::text, ', ') co_seq_procedimento,
       string_agg(distinct co_procedimento::text, ', ') co_procedimento,
       string_agg(distinct no_procedimento::text, ', ') no_procedimento,
       string_agg(distinct sg_procedimento::text, ', ') sg_procedimento
from (       
select a.*,
       case when qt_cnspcn::numeric/qt_cnspcn_total*100 < 10
            then ' outro(s)' 
            else no_procedimento 
             end as atributo,
       s.co_procedimento,
       s.no_procedimento,
       trim(split_part(s.sg_procedimento, '|',1)) sg_procedimento,
       d.no_abreviado,
       d.no_diretriz50
  from bd_sabeis.tf_siasus_pa_diretriz_difusao a
  LEFT JOIN bd_geral.td_sigtap s ON a.co_seq_procedimento = s.co_seq_procedimento  
  LEFT JOIN bd_geral.td_diretriz d ON a.co_seq_diretriz = d.co_seq_diretriz 
  ) a
  group by        ano,
       co_seq_diretriz,
       no_abreviado,
       no_diretriz50,
       atributo

O script R abaixo ilustra como carregar a tabela CSV de trabalho presente no github.

# le arquivo CSV
ds=read.csv("data/difusao2022-11-15 - dataset.csv")

# certifica-se de que detenha apenas diretrizes e procedimentos válidos
ds=subset(ds,ds$co_seq_diretriz>0 & ds$co_procedimento > 0)

O conteúdo do conjunto de dados é ilustrado na tabela 3.3.

Table 3.3: Amostra da tabela de trabalho para cálculo da difusão.
no_abreviado ano qt_cnspcn qt_cnspcn_total vl_aprovado nu_competencia_min nu_competencia_max co_procedimento
acne 2008 5310 5380 415574 200801 200812 601140044
acne 2008 378 5380 13182 200801 200801 601140010, 601140028, 601140036
acromegali 2008 565 895 167061 200801 200812 601310020
acromegali 2008 142 895 881336 200801 200801 601180011, 601180194, 601260015, 601300017, 601300025, 601300033, 601330048, 601350073
acromegali 2008 136 895 1376310 200801 200812 601300041
acromegali 2008 128 895 9286 200801 200812 601310012
adrenal_co 2008 160 161 3475 200801 200812 601340019
adrenal_co 2008 1 161 13 200801 200801 601280016
adrenal_pr 2008 2132 2512 3157682 200801 200812 601320026
adrenal_pr 2008 545 2512 750979 200801 200812 601320018

3.3 Cálculo do indicador de percentual de uso

O usuário do SUS pode utilizar mais de um medicamento, assim, a soma do número de usuários de cada medicamento pode resultar num denominador do indicador superior ao real. A equação (método de cálculo) do indicador de percentual de uso é \(p=n/N\times 100\), onde \(p\) é o percentual, \(n\) é o número de usuários do procedimento e \(N\) é o total de usuários para dada doença ou diretriz clínica. Dessa forma, o \(N\) é obtido com o número de usuários distintos ou count(DISTINCT nu_cnspcn) agrupado por ano e co_seq_diretriz, enquanto o \(n\) é agrupado, inclusive, por co_seq_procedimento.

  ds2=ds[
    sample(x = 1:nrow(ds), size = 10, replace = FALSE),
    c("no_abreviado","ano","no_procedimento","qt_cnspcn","qt_cnspcn_total")
  ]
  ds2$p=round(ds2$qt_cnspcn/ds2$qt_cnspcn_total*100,2)

O cálculo do percentual de uso do procedimento é ilustrado na tabela 3.4.

Table 3.4: Amostra da tabela de trabalho para cálculo da difusão.
no_abreviado ano no_procedimento qt_cnspcn qt_cnspcn_total p
bipolar 2019 OLANZAPINA 5 MG (POR COMPRIMIDO) 7295 62729 11.63
glaucoma 2020 BIMATOPROSTA 0,3 MG/ML SOLUÇÃO OFTÁLMICA (POR FRASCO DE 3 ML) 33425 172841 19.34
acne 2019 ISOTRETINOINA 10 MG (POR CAPSULA) 1361 39433 3.45
leimioma 2018 GOSSERRELINA 10,80 MG INJETAVEL (POR SERINGA PREENCHIDA) 7487 9100 82.27
c_prostata 2011 HORMONIOTERAPIA DO ADENOCARCINOMA DE PRÓSTATA AVANÇADO - 1ª LINHA 3528 5465 64.56
renal 2011 CICLOSPORINA 25 MG (POR CAPSULA) 562 4450 12.63
artrite_ju 2017 METOTREXATO 2,5 MG (POR COMPRIMIDO) 1070 4761 22.47
c_tireoide 2018 QUIMIOTERAPIA DO CARCINOMA DE TIREOIDE AVANÇADO 222 844 26.30
artrite_ps 2019 ETANERCEPTE 50 MG INJETAVEL (POR FRASCO-AMPOLA) 4207 20531 20.49
anemia_ren 2012 ALFAEPOETINA 3.000 UI INJETAVEL (POR FRASCO-AMPOLA) 2335 19918 11.72

3.4 Apresentação da difusão de uso (market share)

A seguir vamos demonstrar a organização de dados para a visualização da difusão percentual de uso em gráfico de barras empilhadas.

O trecho de código-fonte a seguir é em linguagem R.

Biblioteca:

library(ggplot2)

A query a seguir prepara os dados para a entrada na função de plotagem.

# obtem apenas dados referentes à diretriz atrite psoríaca
ds3=subset(
  ds,
  ds$no_abreviado == 'artrite_ps'
)

ds3$p=0 # cria variavel zerada

# para cada ano,calcula o fator de visualização
for (vano in levels(as.factor(ds3$ano))) {
  soma=sum(subset(ds3,ano==vano)$indicador)
  ds3[ds3$ano==vano,"p"]=ds3[ds3$ano==vano,"indicador"]/soma
}

# ds3$indicador=as.character(round(ds3$indicador*100))
ds3$p=round(ds3$p*100,3)
ds3$qt_cnspcn=format(
  ds3$qt_cnspcn, big.mark = ".", decimal.mark = ",", scientific = F
)
# redistribui

# atribuio uma variavel como rotulo 
colnames(ds3)[colnames(ds3)=="qt_cnspcn"]="rotulo"
ds3$atributo=ds3$grupo

dataframe=ds3

A função plot_difusao encapsula o gráfico de barras empilhadas, passando como parâmetros:

  • dataframe para o conjunto de dados do tipo datatable.
  • titulo para o título do gráfico.
  • rotulo_x para o rótulo do eixo das abscissas (horizontal).
  • rotulo_y para o rótulo do eixo das ordenadas (vertical).
plot_difusao <- function(dataframe, titulo, rotulo_x, rotulo_y) {
  g = ggplot(
      dataframe,
      aes(
        fill = atributo,
        y = p,
        x = ano,
        label = rotulo
      )
    ) +
      geom_bar(stat = "identity") +
      xlab(rotulo_y) +
      ylab(rotulo_x) +
      labs(x="")+
      scale_x_continuous(breaks = round(seq(min(dataframe$ano), max(dataframe$ano), by = 1),1)) +
      scale_y_continuous(breaks = seq(0, 10, by = 10)) +
      geom_text(size = 3, position = position_stack(vjust = 0.5)) +
      coord_flip() +
#      scale_fill_brewer(palette = "Pastel1") +
      theme(
        legend.position = "top",
        legend.text = element_text(size = rel(0.6)),
        axis.title.x = element_text(size = rel(1.0)),
        axis.title.y = element_text(size = rel(1.0)),
        axis.text.x = element_text(size = rel(1.0)),
        axis.text.y = element_text(size = rel(1.0))
      ) +
  scale_fill_discrete(name=NULL)
  return(g)  
}

plot_difusao(
  ds3,
  "",
  "usuários (%)",
  "ano"
)
Resultado do script R plot_difusao.

Figure 3.2: Resultado do script R plot_difusao.

4 Resultados

4.1 Diretrizes anotadas

A linha de comando abaixo aloca na variável diretrizes o resultado de mapeamento dos Protocolos Clínicos e Diretrizez Terapêuticas.

diretrizes=read.csv("data/difusao2022-11-15 - diretriz.csv")

Foram anotadas 113 diretrizes, listadas na tabela 4.1. Anotar significa que as distrizes estão mapedas e podem ser lidas por humanos e por máquinas. Assim é possível extrair de forma automatizada os tratamentos medicamentosos e oncológicos do SIA.

Table 4.1: Diretrizes anotadas.
co_pcdt no_abreviado no_diretriz50 co_cid_hash
ACR acromegali Acromegalia E220
EST c_estomago Adenocarcinoma de estômago C160 C161 C163 C164 C165 C166 C168 C169
PRO c_prostata Adenocarcinoma de Próstata C61 D75
AMN anemia_apl Anemia Aplástica, Mielodisplasia e Neutropenia D460 D461 D467 D610 D611 D612 D613 D618 D70 Z948
AHA anemia_hem Anemia Hemolítica Autoimune D590 D591
ANI anemia_ren Anemia na Doença Renal Crônica N180 N188
FER anemia_fer Anemia por Deficiência de Ferro D500 D508
AC1 angiodema Angioedema D841
APA aplasia Aplasia Pura Adquirida Crônica da série vermelha D600
AIJ artrite_ju Artrite Idiopática Juvenil M080 M081 M082 M083 M084 M088 M089
APS artrite_ps Artrite Psoríaca M070 M072 M073
ART artrite_re Artrite Reativa M023 M032 M036 M021
AR artrite_re Artrite Reumatoide e Artrite Idiopática Juvenil M050 M051 M052 M053 M058 M060 M068
ASM asma Asma J450 J451 J458
AME atrofia Atrofia Muscular Espinhal G120 G121
CCP c_cabeca Câncer de Cabeça e Pescoço C00 C01 C02 C03 C04 C05 C06 C09 C10 C11 C12 C13 C14 C32
CCR c_colon Câncer de Cólon e Reto C18 C180 C181 C182 C183 C184 C185 C186 C187 C188 C189 C19 C20
CFI c_figado Câncer de Fígado - Adultos C220
CPU c_pulmao Câncer de Pulmão C34 C340 C341 C342 C343 C348 C349
CRE c_renal Carcinoma de Células Renais C64
ESO c_esofago Carcinoma de Esôfago C150 C151 C152 C153 C154 C155 C158 C159
CMA c_mama Carcinoma de Mama C500 C501 C502 C503 C504 C505 C506 C508 C509
CTI c_tireoide Carcinoma Diferenciado de Tireóide C73
CBI colangite Colangite Biliar Primária K743
AUT autismo Comportamento Agressivo no Autismo F840 F841 F843 F845 F848
DBI biotinidas Deficiência de Biotinidase E889
DP dermatomio Dermatomiosite e Polimiosite M330 M331 M332
DM1 diabetes_1 Diabete Melito Tipo 1 E100 E101 E102 E103 E104 E105 E106 E107 E108 E109
DM2 diabetes_2 Diabete Melito Tipo 2 E11 E112 E113 E114 E115 E116 E117 E118 E119
DI diabetes_i Diabetes Insípido E232
MMP mesot_mag Diagnóstico do Mesotelioma Maligno de Pleura C450 C459
ICR insuf_card Insuficiência Cardíaca - Fração de Ejeção Reduzida I500 I501 I509
COV covid_19 COVID-19 B342 U04 U049 U071 U072
LLA leucemia_l Leucemia Linfoblástica Aguda Philadelphia C910 C835
DIS dislipidem Dislipidemia para a Prevenção de Eventos Cardiov. E780 E781 E782 E783 E784 E785 E786 E788
DFE distonias Distonias focais e Espasmo Hemifacial G243 G244 G245 G248 G513 G518
DMO osseo Distúrbio Mineral Ósseo na Doença Renal Crônica E833 N180 N250
DA alzheimer Doença de Alzheimer F000 F001 F002 G300 G301 G308
CRN crohn Doença de Crohn K500 K501 K508
GAU gaucher Doença de Gaucher E752
PAG paget Doença de Paget M880 M888
PKS parkinson Doença de Parkinson G20
POP pompe Doença de Pompe E740
WIL wilson Doença de Wilson E830
FAL falciforme Doença Falciforme D561 D568 D570 D571 D572
DPO dpoc Doença Pulmonar Obstrutiva Crônica -DPOC J440 J441 J448
CRO dor_cronic Dor Crônica R521 R522
END endometrio Endometriose N800 N801 N802 N803 N804 N805 N808
EPI epilepsia Epilepsia G400 G401 G402 G403 G404 G405 G406 G407 G408
ELA esclerose Esclerose Lateral Amiotrófica G122
EM esclerose Esclerose Múltipla G35
ES esclerose Esclerose Sistêmica M340 M341 M348
ESP espasticid Espasticidade G041 G800 G801 G802 G811 G821 G824 I690 I691 I692 I693 I694 I698 T905 T908
ANC espondilit Espondilite Ancilosante M45 M468
ESS espondilos Espondilose M471 M472 M478
EQZ esquizofre Esquizofrenia F200 F201 F202 F203 F204 F205 F206 F208
FEN fenilceton Fenilcetonúria E700 E701
FPP fibrose_ci Fibrose Cística - Pulmonar e Ins. Pancreatica E840 E841 E848
GLA glaucoma Glaucoma H401 H402 H403 H404 H405 H406 H408 Q150
HEI hemangioma Hemangioma Infantil D180
HA hepatite_a Hepatite Autoimune K754
HPC hep_b_tran Hep B – Coinfecções, Reinfec Profilaxia pós-transp B160 B162 B180 B181
HCC hepatite_c Hepatite C e coinfecções B171 B182
HIS hidradenit Hidradenite Supurativa L732
HAC adrenal_co Hiperplasia Adrenal Congênita E250
HIC hiperprola Hiperprolactinemia E221
HAP hipertensa Hipertensão Arterial Pulmonar I270 I272 I278
HIP hipopparat Hipoparatireoidismo E200 E201 E208 E892
HPC hipotireoi Hipotireoidismo Congênito E030 E031
IH ictiose Ictioses Hereditárias Q800 Q801 Q802 Q803 Q808 Q809
ANT imunosufic Imunodeficiência Primária D800 D801 D803 D805 D806 D807 D808 D830 D832 D838
CAR cardiaco Imunossupressão no Transplante Cardíaco T862 Z941
HAP hepatico_a Imunossup. no Transpl. Hepático em Adulto e Pediat T864 Z944
REN renal Imunossupressão no Transplante Renal T861 Z940
INF infarto Infarto Agudo do Miocárdio I200 I201 I210 I211 I212 I213 I214 I219 I220 I221 I228 I229 I230 I231 I232 I233 I234 I235 I236 I238 I240 I248 I249
IAP adrenal_pr Insuficiência Adrenal E230 E233 E271 E272 E273 E274
IPE insuficien Insuficiência Pancreática Exócrina K860 K861 K903
ACN acne Acne grave L700 L701 L708
LU leimioma Leimioma de útero D250 D251 D252
LKA c_leucemia Leucemia Linfoblástica Aguda Cromossoma Philadelph C910
LMA c_leucemia Leucemia Mieloide Aguda - Adultos C920 C921 C923 C924 C925 C927 C930 C931 C937 C940 C942 C943
LIM linfangiol Linfangioleiomiomatose J848
LHA c_linfoma Linfoma de Hodgkin no Adulto C810 C811 C812 C813 C817 C819
LCB c_celula_b Linfoma Difuso de Grandes Células B - Adultos C833
LF c_folicula Linfoma Folicular C820 C821 C822 C827 C829
LES lupus Lúpus Eritematoso Sistêmico L930 L931 M321 M328
MC c_cutaneo Melanoma Cutâneo C43 C430 C431 C432 C433 C434 C436 C437 C438 C439 D03 D030 D031 D032 D033 D034 D035 D036 D037
MG miastenia Miastenia Gravis G700
MM c_mieloma Mieloma Múltiplo C900 C901 C902 D472
M1 mucopoliss Mucopolissacaridose tipo I E760
M2 mucopoliss Mucopolissacaridose tipo II E761
M467 mucopoliss Mucopolissacaridose tipo IV A VI VII E762
OVA c_ovario Neoplasia Maligna Epitelial de Ovário C56 C570 C786
OST osteoporos Osteoporose M800 M801 M802 M803 M804 M805 M808 M810 M811 M812 M813 M814 M815 M816 M818 M820 M821 M828
PAF polineurop Polineuropatia Amiloidótica Familiar E851
PSO psoriase Psoríase L400 L401 L404 L408
PUB puberdade Puberdade Precoce Central E228
PTI purpura Púrpura Trombocitopênica Idiopática D693
RO raquitismo Raquitismo e Osteomalácia E550 E559 E643 E833 M830 M831 M832 M833 M838
RU retocolite Retocolite Ulcerativa K510 K512 K513 K515 K518
SGB guillain_b Síndrome de Guillain-Barré G610
SOP ovario_pol Síndrome de Ovários Policísticos E282 L680
TUR turner Síndrome de Turner Q960 Q961 Q962 Q963 Q964 Q968
NAC nefrotica_ Síndrome Nefrótica Primária em Adultos e crianças N040 N041 N042 N043 N044 N045 N046 N047 N048 N049
SF sobrecarga Sobrecarga de Ferro E831 T454
MIE mielodispl Síndrome Mielodisplásica D460 D461 D464
BIP bipolar Transtorno Afetivo Bipolar do tipo I F311 F312 F313 F314 F315 F316 F317
TEZ esquizoafe Transtorno Esquizoafetivo F250 F251 F252
TVG tromboembo Tromboembolismo Venoso em Gestantes com Trombofili D688 I820 I821 I822 I823 I828 O223 O225
TC c_cerebral Tumor Cerebral - Adultos C710 C711 C712 C713 C714 C715 C716 C717 C718 C719
TEG c_gastro Tumor do Estroma Gastrointestinal C150 C151 C152 C153 C154 C155 C158 C159 C160 C161 C162 C163 C164 C165 C166 C168 C169 C170 C171 C172 C173 C178 C179 C180 C181 C182 C183 C184 C185 C186 C187 C188 C189 C19 C20 C268 C474 C481 C493
UVE uveite Uveítes Não-Infecciosas H150 H201 H301 H302 H308
LHT c_leucemia Leucemia/Linfoma Associação ao Vírus HTLV-1 C844 C915

Logo, é possível gerar número igual ou superior de gráficos de difusão ao do número de diretrizes anotadas.

Porém, a difusão do percentual de uso pode não ser fidedigna se compararmos medicamentos de linhas terapêuticas distintas, sendo necessário selecionar ou remover para tornar a visualização mais acurada.

A função subset extrai os dados da diretriz escolhida com o filtro artrite_ps.

# obtem apenas dados referentes à diretriz atrite psoríaca
ds4=read.csv("data/difusao2022-11-15 - dataset completo.csv")
ds4=subset(
  ds4,
  ds4$no_abreviado == 'artrite_ps'
)

ds4$p=0

Agora precisamos listar os medicamentos diferentes para saber quais vamos excluir.

   linhas_distintas <- !duplicated(ds4[,c("co_procedimento","atributo")])
   procedimento <- ds4[linhas_distintas,c("co_procedimento","atributo")]

A tabela @ref{tab:tabprocedimento} mostra os procedimentos distintos para a diretriz selecionada.

Table 4.2: Procedimentos distintos da diretriz selecionada.
co_procedimento atributo
604010095 SULF500 SULFASSALAZINA 500 MG (POR COMPRIMIDO)
604320043 LEFL20 LEFLUNOMIDA 20 MG (POR COMPRIMIDO)
604380011 ADAL40 ADALIMUMABE 40 MG INJETAVEL (POR SERINGA PREENCHID
604380020 ETAN25 ETANERCEPTE 25 MG INJETAVEL (POR FRASCO-AMPOLA)
604380038 ETAN50 ETANERCEPTE 50 MG INJETAVEL (POR FRASCO-AMPOLA)
604380054 INFL1010 INFLIXIMABE 10 MG/ML INJETAVEL (POR FRASCO-AMPOLA
604530021 METO25 METOTREXATO 2,5 MG (POR COMPRIMIDO)
604340036 CICLOSP50 CICLOSPORINA 50 MG (POR CAPSULA)
604340044 CICLOSP100 CICLOSPORINA 100 MG (POR CAPSULA)
604530030 METO252 METOTREXATO 25 MG/ML INJETAVEL (POR AMPOLA DE 2 ML
604340052 CICLOSP10050 CICLOSPORINA 100 MG/ML SOLUCAO ORAL (POR FRASCO DE
604340028 CICLOSP25 CICLOSPORINA 25 MG (POR CAPSULA)
604380089 GOLI50 GOLIMUMABE 50 MG INJETÁVEL (POR SERINGA PREENCHIDA
604720017 NAPR250 NAPROXENO 250 MG (POR COMPRIMIDO)
604720025 NAPR500 NAPROXENO 500 MG (POR COMPRIMIDO)
604690029 SECU150 SECUQUINUMABE 150 MG/ML SOLUÇÃO INJETÁVEL (POR SER
604380100 ETAN50A ETANERCEPTE 50 MG INJETÁVEL (POR FRASCO-AMPOLA OU
604320159 CITR5 CITRATO DE TOFACIFITINIBE 5 MG (POR COMPRIMIDO)
604380070 CERT200 CERTOLIZUMABE PEGOL 200 MG/ML INJETÁVEL (POR SERIN
604380119 INMGMLIN1010 (INFLIXIMABE 10 MG /ML INJETÁVEL(POR FRASCO-AMPOLA
604380127 ADMGINPO40 ADALIMUMABE 40 MG INJETÁVEL ( POR SERINGA PREENCHI

Agora, basta listar e filtrar os desejados. Abaixo é filtrado tando pelo número de biológicos, quanto pela categoria “outro(s)”.

procedimentos_selecionados=c(
604380011, # ADAL40 ADALIMUMABE 40 MG INJETAVEL (POR SERINGA PREENCHID
604380020, # ETAN25 ETANERCEPTE 25 MG INJETAVEL (POR FRASCO-AMPOLA)
604380038, # ETAN50 ETANERCEPTE 50 MG INJETAVEL (POR FRASCO-AMPOLA)
604380054, # INFL1010 INFLIXIMABE 10 MG/ML INJETAVEL (POR FRASCO-AMPOLA
604380089, # GOLI50 GOLIMUMABE 50 MG INJETÁVEL (POR SERINGA PREENCHIDA
604690029, # SECU150 SECUQUINUMABE 150 MG/ML SOLUÇÃO INJETÁVEL (POR SER
604380100, # ETAN50A ETANERCEPTE 50 MG INJETÁVEL (POR FRASCO-AMPOLA OU
604320159, # CITR5 CITRATO DE TOFACIFITINIBE 5 MG (POR COMPRIMIDO)
604380070, # CERT200 CERTOLIZUMABE PEGOL 200 MG/ML INJETÁVEL (POR SERIN
604380119, # INMGMLIN1010 (INFLIXIMABE 10 MG /ML INJETÁVEL(POR FRASCO-AMPOLA
604380127 # ADMGINPO40 ADALIMUMABE 40 MG INJETÁVEL ( POR SERINGA PREENCHI
)

ds4=subset(
  ds4, co_procedimento %in% procedimentos_selecionados &
    grupo != "outro(s)"
)

Agora é necessário redistribuir o fator p do empilhamento das barras horizontais.

# para cada ano,calcula o fator de visualização
for (vano in levels(as.factor(ds4$ano))) {
  soma=sum(subset(ds4,ano==vano)$indicador)
  ds4[ds4$ano==vano,"p"]=ds4[ds4$ano==vano,"indicador"]/soma
}

ds4$p=round(ds4$p*100,3)
ds4$qt_cnspcn=format(
  ds4$qt_cnspcn, big.mark = ".", decimal.mark = ",", scientific = F
)

# atribuio uma variavel como rotulo 
colnames(ds4)[colnames(ds4)=="qt_cnspcn"]="rotulo"
# ds4$atributo=ds4$grupo

dataframe=ds4

A figura ?? mostra o resultado da difusão com itens selecionados.

plot_difusao <- function(dataframe, titulo, rotulo_x, rotulo_y) {
  g = ggplot(
      dataframe,
      aes(
        fill = atributo,
        y = p,
        x = ano,
        label = rotulo
      )
    ) +
      geom_bar(stat = "identity") +
      xlab(rotulo_y) +
      ylab(rotulo_x) +
      labs(x="")+
      scale_x_continuous(breaks = round(seq(min(dataframe$ano), max(dataframe$ano), by = 1),1)) +
      scale_y_continuous(breaks = seq(0, 10, by = 10)) +
      geom_text(size = 3, position = position_stack(vjust = 0.5)) +
      coord_flip() +
#      scale_fill_brewer(palette = "Pastel1") +
      theme(
        legend.position = "top",
        legend.text = element_text(size = rel(0.6)),
        axis.title.x = element_text(size = rel(1.0)),
        axis.title.y = element_text(size = rel(1.0)),
        axis.text.x = element_text(size = rel(1.0)),
        axis.text.y = element_text(size = rel(1.0))
      ) +
  scale_fill_discrete(name=NULL)
  return(g)  
}

plot_difusao(
  ds4,
  "",
  "usuários (%)",
  "ano"
)
Difusão percentual de uso de medicamentos biológicos para artrite psoríaca.

Figure 4.1: Difusão percentual de uso de medicamentos biológicos para artrite psoríaca.

O código-fonte encontra-se depositado no github e está à disposição da equipe da Sabeis, como mostrado na figura 4.2

Diagrama de entidades e relacionamentos da Sala Aberta de Inteligência em Saúde - módulo de medicamentos e oncológicos

Figure 4.2: Diagrama de entidades e relacionamentos da Sala Aberta de Inteligência em Saúde - módulo de medicamentos e oncológicos

5 Considerações

O denominador pré-calculado com o total de usuários associados à diretriz é um artifício que não compromete o recurso gráfico das barras empilhadas, uma vez que, ainda que venhamos a selecionar grupos de medicamentos ou oncológicos para comparação, o denominador persiste o mesmo para todos. Dessa forma, o percentual recalculado com base nos itens presentes sempre será 100%, ainda que os valores sejam o número de usuários.

Outro recurso proposto é a frequência de usuários distintos no período escolhido para o cálculo do denominador. Assim, é assegurado que não há repetição no denominador, o que poderia distorcer quando dois itens são mais frequentemente associados do que os demais.

O recurdo wiki em Rmarkdown trouxe transparência na extração, transformação, carga e análise e apresentação de resultados, algo essencial para a gestão do conhecimento de ciência de dados. Assim, espera-se que a equipe possa evoluir os algoritmos, automatizar relatórios e estabelecer novos patamares na Avaliação de Tecnologias em Saúde (ATS).

6 References

BRASIL. 2021. “Portaria GM/MS Nº 1.768, de 30 de Julho de 2021. Altera o Anexo XLII Da Portaria de Consolidação GM/MS Nº 2, de 28 de Setembro de 2017, Para Dispor Sobre a Polı́tica Nacional de Informação e Informática Em Saúde (PNIIS).” Ministério Da Saúde, Diário Oficial Da União.
Ferré, Felipe. 2021. “Infoestrutura Para Apoio à Decisão Estratégica No SUS.” In Reflexões e Futuro, edited by Alethele de Oliveira Santos and Luciana Toledo Lopes, 6:114–27. Coleção Covid-19. CONASS.
Ferré, Felipe, Gustavo de Oliveira, Mariana de Queiroz, and Flávio Gonçalves. 2020. “Sala de Situação Aberta Com Dados Administrativos Para Gestão de Protocolos Clı́nicos e Diretrizes Terapêuticas de Tecnologias Providas Pelo SUS.” In Anais Principais Do XX Simpósio Brasileiro de Computação Aplicada à Saúde, 392–403. SBC.