04/11/2025

Sobre o Curso

Oferta

Curso: Acesso aos Dados da SABEIS via FTP utilizando a Linguagem R
Grupo Elaborador: Departamento de Gestão e Incorporação de Tecnologias em Saúde (DGITS/SECTICS/MS)
Docentes: Felipe Ferré e Amanda Lyrio
Monitores: Mariá Pereira, Jéssica Barreto, Laís Lessa e Michael Ruberson
Carga Horária: 12 horas · 25 vagas


Público-alvo: Profissionais dos NATS com experiência prévia em R, interessados em ampliar autonomia e agilidade no acesso e tratamento de dados da SABEIS para subsidiar análises e estudos de ATS.

Pré-requisito: Teste prático para comprovar domínio básico de R.

Material sugerido: Apostila do curso.

Atividade

  • Conexão à SABEIS por FTP.
  • Download, estruturação e leitura dos dados em R.
  • Estimativas de demanda aferida em AIO.
  • Avaliação pós-incorporação.

Objetivo
Capacitar participantes a acessar e manipular dados da SABEIS via FTP em R para fortalecer análises em ATS.

Material necessário
- Computador com internet.
- R e RStudio instalados.

Conteúdo programático

05/11 – manhã (8-12h)
Fundamentos práticos dos dados ambulatoriais do SUS e organização do repositório SABEIS.

05/11 – tarde (14-18h)
ETL de dados tabulados via FTP e organização em repositórios estruturados (RData e SQL).

Referências

  • Apresentação
  • FERRÉ, FELIPE; DE OLIVEIRA, GUSTAVO ; DE QUEIROZ, MARIANA ; GONÇALVES, FLÁVIO . 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 Simpósio Brasileiro de Computação Aplicada à Saúde, 2020, Brasil. Anais Principais do Simpósio Brasileiro de Computação Aplicada à Saúde (SBCAS 2020). p. 392. link
  • Felipe Ferré. Modelagem e gestão de banco de dados com SQL e integração com o R. In: Erika Santos de Aragão; Luís Eugenio Portela Fernandes de Souza; Marcio Santos da Natividade; Vinícius de Araújo Mendes. (Org.). Avaliação de impacto das políticas de saúde: um guia para o SUS. 1ed.Brasília: Editora MS, 2023, v. , p. 1-715. link
  • Sabeis - ETL

Tabelas:

GitHUB Sabeis - BD Geral.

Introdução aos dados abertos do SUS e à SABEIS

A Sala Aberta de Inteligência em Saúde (SABEIS)

  • Metodologia de extração, transformação e carga e curadoria de dados.
  • Iniciou em 2019 no âmbito do DGITS/SECTICS/MS (Secretaria Executiva da Conitec).
  • Usa apenas software livre e dados abertos.
  • É mantida por profissionais de saúde a serviço do SUS com tecnologia robusta e simples.
  • Validada com dados oficiais a partir de marcadores de produção.
  • Fonte principal: Ministério da Saúde - FTP de dados ambulatoriais do SUS.
  • Foco em medicamentos do Componente Especializado da Assistência Farmacêutica.
  • Prima em favorecer o diálogo com a sociedade civil e a gestão partindo de dados comuns e metodologia transparente.

A estratégia de disseminação TabNet/TabWin

Acesse o sítio do TabNet para conhecer o elenco de informações disponíveis segundo:

  • Indicadores de Saúde e Pactuações
  • Assistência à Saúde
  • Epidemiológicas e Morbidade
  • Rede Assistencial
  • Estatísticas Vitais
  • Demográficas e Socioeconômicas
  • Inquéritos e Pesquisas
  • Saúde Suplementar (ANS)
  • Informações Financeiras
  • Estatísticas de acesso ao TABNET

TabNet - Assistência à Saúde

TabNet - Produção Ambulatorial

TabNet - Navegação

  • Linha (p.ex., Região, UF, Procedimento, Ano/mês de processamento)
  • Coluna (p.ex, Grupo de Procedimento, Esfera Jurídica)
  • Conteúdo (Qtd. aprovada, Valor aprovado)
  • Período
  • Seleções disponíveis (filtros)

FTP e repositórios públicos do SUS

O FTP (File Transfer Protocol) é um protocolo usado para transferir arquivos entre servidores e computadores.
No contexto do SUS (Sistema Único de Saúde), o FTP é utilizado como repositório público de dados, permitindo que pesquisadores, gestores e analistas baixem grandes bases de informações oficiais.

Sigla Descrição URL
FTP Protocolo de Transferência de Arquivos, usado para mover arquivos entre servidores na internet. Repositório de dados públicos do SUS para download via FTP. ftp://ftp.datasus.gov.br/dissemin/publicos/
SIA Sistema de Informações Ambulatoriais do SUS, gerencia dados sobre atendimentos ambulatoriais. ftp://ftp.datasus.gov.br/dissemin/publicos/SIASUS/200801_/Dados/
SIH Sistema de Informações Hospitalares do SUS, registra dados de internações e procedimentos hospitalares. ftp://ftp.datasus.gov.br/dissemin/publicos/SIHSUS/200801_/Dados/

FTP e repositórios públicos do SUS

Sigla Descrição URL
SIM Sistema de Informações sobre Mortalidade, coleta dados de óbitos registrados no Brasil. ftp://ftp.datasus.gov.br/dissemin/publicos/SIM/CID10/DORES/
SINAN Sistema de Informação de Agravos de Notificação, monitora doenças e agravos de notificação compulsória. ftp://ftp.datasus.gov.br/dissemin/publicos/SINAN/DADOS/FINAIS/
SINASC Sistema de Informações sobre Nascidos Vivos, coleta dados sobre nascimentos no Brasil. ftp://ftp.datasus.gov.br/dissemin/publicos/
CNES Cadastro Nacional de Estabelecimentos de Saúde, registra informações sobre instituições de saúde no Brasil. ftp://ftp.datasus.gov.br/dissemin/publicos/CNES/
OpenDataSUS Portal de dados abertos do SUS, com acesso a diversos conjuntos de dados. https://opendatasus.saude.gov.br/

FTP e repositórios públicos do SUS - Outas fontes

Sigla Descrição URL
SIDRA Sistema IBGE de Recuperação Automática, acesso a dados de pesquisas como a PNAD. https://sidra.ibge.gov.br/pesquisa/pnadct/tabelas
PNAD Pesquisa Nacional por Amostra de Domicílios, coleta dados socioeconômicos e demográficos no Brasil.
ANVISA Portal de dados públicos da ANVISA, com informações regulatórias e sanitárias. https://dados.anvisa.gov.br/, https://dados.gov.br/dados/organizacoes/visualizar/agencia-nacional-de-vigilancia-sanitaria-anvisa
SISAB Sistema de Informação em Saúde para a Atenção Básica (SISAB), Coleta de Dados Simplificado (CDS) e Prontuário Eletrônico do Cidadão (PEC). https://sisab.saude.gov.br/

Contudo, o FTP do DATASUS continua sendo uma das principais fontes de dados brutos utilizados em análises, estudos e políticas públicas na área da saúde.

Fundamentos práticos dos dados ambulatoriais do SUS e organização do repositório da SABEIS.

Intalando bibliotecas

if (!requireNamespace("readr", quietly=TRUE)) install.packages("readr")
if (!requireNamespace("dplyr", quietly=TRUE)) install.packages("dplyr")
if (!requireNamespace("stringr", quietly=TRUE)) install.packages("stringr")
if (!requireNamespace("tidyr", quietly=TRUE)) install.packages("tidyr")
# if (!requireNamespace("RCurl", quietly=TRUE)) install.packages("RCurl")
if (!requireNamespace("curl", quietly=TRUE)) install.packages("curl")
if (!requireNamespace("data.table", quietly=TRUE)) install.packages("data.table")
if (!requireNamespace("DT", quietly=TRUE)) install.packages("DT")
library(readr); library(dplyr); library(stringr); library(tidyr)
library(DT); library(data.table); library(shiny); library(curl);
  • Verifica se o pacote curl está instalado.
  • Caso não esteja, instala automaticamente.
  • Em seguida, carrega o pacote.

Operações de ETL de dados tabulados a partir do FTP e organização em repositórios estruturados (RData e SQL).

listar csv a partir do FTP

Código e resultado

library(curl)
url <- "sftp://45.231.133.29:7891/srv/ftp/dadosabertos/"
userpwd <- "livre:12345"
h <- new_handle(userpwd = userpwd, dirlistonly = TRUE)
con <- curl(url, handle = h)
arquivos <- readLines(con)
close(con)
head(arquivos)
## [1] "."                                                           
## [2] ".."                                                          
## [3] "tf_sia_200801_pa_082_iah_subgrupo604.20250907.1424806.csv.gz"
## [4] "tf_sia_200801_pa_081_inf_subgrupo604.20250907.723034.csv.gz" 
## [5] "tf_sia_200801_pa_096_mel_subgrupo304.20250907.66037.csv.gz"  
## [6] "tf_sia_200801_pa_033_dfe_subgrupo604.20250907.211254.csv.gz"

listar e baixar csv a partir do FTP

Explicação do código

O código retorna no console um vetor de strings, cada elemento representando um arquivo ou pasta disponível no diretório remoto /srv/ftp/dadosabertos do servidor informado.

  • url: endereço do servidor SFTP, incluindo host, porta (7891) e caminho do diretório (/srv/ftp/dadosabertos/).
  • userpwd: credenciais no formato "usuário:senha".
  • getURL() acessa a URL informada.
  • userpwd = userpwd: passa as credenciais de login.
  • ftp.use.epsv = FALSE: desabilita Extended Passive Mode, evitando problemas de compatibilidade.
  • dirlistonly = TRUE: retorna apenas a lista de arquivos/pastas no diretório remoto.
  • strsplit() divide o texto retornado em linhas, separando cada arquivo/pasta.
  • unlist() transforma a lista resultante em vetor.
  • print/head(arquivos) exibe a lista final de arquivos.

Atividade prática em grupo: definição de critérios de seleção de usuários do SUS e extração de dados para construção de coortes.

baixar csv a partir do FTP

Código e resultado

O script conecta-se ao servidor SFTP, autentica com usuário e senha, baixa o arquivo tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz e o salva no computador no diretório de trabalho atual.

library(curl)
url <- "sftp://45.231.133.29:7891/srv/ftp/dadosabertos/tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz"
userpwd <- "livre:12345"
destino <- "tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz"
h <- new_handle(userpwd = userpwd)
# baixa em binário
curl_download(url, destfile = destino, mode = "wb", handle = h)
cat("Arquivo salvo em:", destino, "\n")
## Arquivo salvo em: tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz

Baixando via SFTP/FTP com curl

Este exemplo mostra como baixar um arquivo remoto de um servidor SFTP e salvá-lo localmente no computador usando o pacote curl.

library(curl)

url <- "sftp://45.231.133.29:7891/srv/ftp/dadosabertos/tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz"
userpwd <- "livre:12345"
destino <- "tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz"

# Cria o handle com credenciais
h <- new_handle(userpwd = userpwd)

# Faz o download binário
curl_download(url, destfile = destino, mode = "wb", handle = h)

# Mensagem de confirmação
cat("Arquivo salvo em:", destino, "\n")
  • Imprime no console a mensagem confirmando onde o arquivo foi salvo.

Leitura do arquivo csv.gz baixado

Código e resultado

library(data.table)

arquivo <- "tf_sia_200801_pa_058_fen_subgrupo604.20250907.80541.csv.gz"
df <- fread(arquivo)

# Ver estrutura
dim(df)   # número de linhas e colunas
## [1] 80541    29
df[1:3,9:11]  # primeiras linhas
##          nu_cnspcn co_procedimento co_cidpri
##              <i64>           <int>    <char>
## 1: 262774798516195       604060025      E700
## 2: 262779456962551       604060025      E700
## 3: 262774788120470       604060025      E700

Leitura do arquivo csv.gz baixado

Use data.table::fread() para leitura eficiente de arquivos grandes.

if (!requireNamespace("data.table", quietly=TRUE)) install.packages("data.table")
library(data.table)
  • Carregar em dataframe (data.table)
df <- fread(arquivo)

fread() lê arquivos compactados .gz diretamente, sem necessidade de descompactar antes.

Se os arquivos ocuparem muita memória, use o pacote bigmemory ou ff. Porém, na prática fread é otimizado para milhões de linhas.

Navegue em outras diretrizes

Enriquecendo atributos - Diretriz

library(readr)

td_diretriz_cnv <- read_csv(
  "https://raw.githubusercontent.com/sabeis-ats/bd_geral/refs/heads/main/td_diretriz_cnv.csv"
)

as.data.frame(td_diretriz_cnv)[8:12,5:7]
##    sg_pcdt no_abreviado                       no_diretriz_b
## 8      AIJ   artrite_ju    Artrite Idiopática Juvenil (AIJ)
## 9      APS   artrite_ps                    Artrite Psoríaca
## 10     ART   artrite_re                     Artrite Reativa
## 11     ASM         asma                                Asma
## 12     AME      atrofia Atrofia Muscular Espinhal 5q Tipo 1

Enriquecendo atributos - Doença

library(readr)

td_doenca_cid10 <- read_csv(
  "https://raw.githubusercontent.com/sabeis-ats/bd_geral/refs/heads/main/td_doenca_cid10.csv"
)

as.data.frame(td_doenca_cid10)[8:12,c("co_cid","no_cid","co_capitulo")]
##    co_cid                                          no_cid co_capitulo
## 8    C171                                          Jejuno           2
## 9    C481               Partes especificadas do peritonio           2
## 10   C169                      Estomago, nao especificado           2
## 11   C155                       Terco inferior do esofago           2
## 12   C165 Pequena curvatura do estomago, nao especificada           2

Enriquecendo atributos - Procedimento

library(readr)

td_sigtap <- read_csv(
  "https://raw.githubusercontent.com/sabeis-ats/bd_geral/refs/heads/main/td_sigtap.csv"
)

as.data.frame(td_sigtap)[8:12,c("co_procedimento","no_procedimento")]
##    co_procedimento
## 8        102010480
## 9        102010498
## 10       102010013
## 11       201010011
## 12       201010119
##                                                                                                        no_procedimento
## 8  FISCALIZAÇÃO DO USO DE PRODUTOS FUMÍGENOS DERIVADOS DO TABACO EM AMBIENTES COLETIVOS FECHADOS, PÚBLICOS OU PRIVADOS
## 9          LAUDO DE ANÁLISE LABORATORIAL DO PROGRAMA DE MONITORAMENTO DE ALIMENTOS RECEBIDOS PELA VIGILÂNCIA SANITÁRIA
## 10                                                                                                 APLICACAO DE  MULTA
## 11                                                                                                        AMNIOCENTESE
## 12                                                                                                   BIOPSIA DE CORNEA

Enriquecendo atributos - Território

library(readr)

td_municipio <- read_csv(
  "https://raw.githubusercontent.com/sabeis-ats/bd_geral/refs/heads/main/municipio_regiao_saude_amazonia_legal_ips.csv"
)

as.data.frame(td_municipio)[8:12,c("Codigo_Municipio","Municipio","UF_x")]
##    Codigo_Municipio                Municipio     UF_x
## 8            110001    Alta Floresta D'Oeste Rondonia
## 9            110032    Sao Miguel do Guapore Rondonia
## 10           110025        Presidente Medici Rondonia
## 11           110149 Sao Francisco do Guapore Rondonia
## 12           110005               Cerejeiras Rondonia

Cruzando tabelas

# csvs: vetor de nomes de arquivos já retornado por listar_csv_py(...)

# 1) tabela com código (3 dígitos) extraído da 5ª parte do nome + qt_registro após o primeiro ponto
codigos_arquivos <- tibble(no_arquivo = arquivos) %>%
  mutate(
    quinta_parte = str_split(no_arquivo, "_", simplify = TRUE)[, 5],
    codigo = str_extract(quinta_parte, "^[0-9]{3}"),
    qt_registro = str_extract(no_arquivo, "(?<=\\.)[0-9]+")
  ) %>%
  filter(!is.na(codigo))

Cruzando tabelas

# 2) normalizar nu_diretriz para 3 dígitos
if (is.numeric(td_diretriz_cnv$nu_diretriz)) {
  tdc <- td_diretriz_cnv %>%
    mutate(nu_diretriz_chr = sprintf("%03d", as.integer(nu_diretriz)))
} else {
  tdc <- td_diretriz_cnv %>%
    mutate(nu_diretriz_chr = str_pad(str_extract(nu_diretriz, "\\d+"), 3, pad = "0"))
}

Cruzando tabelas

# 3) join e seleção de colunas pedidas
pcdt <- codigos_arquivos %>%
  inner_join(tdc, by = c("codigo" = "nu_diretriz_chr")) %>%
  mutate(
    co_cid = str_replace_all(co_cid, ",", ", ")
  ) %>%
  select(
    nu_diretriz, no_diretriz, co_cid, sg_pcdt, no_diretriz10, sg_tipo,
    no_arquivo, qt_registro
  )

head(pcdt,3)
## # A tibble: 3 × 8
##   nu_diretriz no_diretriz        co_cid sg_pcdt no_diretriz10 sg_tipo no_arquivo
##   <chr>       <chr>              <chr>  <chr>   <chr>         <chr>   <chr>     
## 1 082         Insuficiência Adr… E230,… IAH     <NA>          <NA>    tf_sia_20…
## 2 081         Infarto Agudo do … I200,… INF     IAM           Linhas… tf_sia_20…
## 3 096         Melanoma Cutâneo   C43, … MEL     Melanoma C    ddt     tf_sia_20…
## # ℹ 1 more variable: qt_registro <chr>

Navegue pelos df carregados

Informações complementares

Referências complementares

  • Ferré, Felipe. Infoestrutura para apoio à decisão estratégica no SUS. In: Alethele de Oliveira Santo; Luciana Tolêdo Lopes. (Org.). Coleção Covid-19. 1ed.Brasília: Conselho Nacional de Secretários de Saúde, 2021, v. 6, p. 114-135. link
  • Prova de conceito SABEIS de 2019 painel
  • Prova de conceito SABEIS de 2019 wiki
  • Prova de conceito SABEIS de 2019 git