Skip to content
Rebecca Pontes Salles edited this page 4 days ago · 25 revisions

Fluxo ETL: SIHSUS

A documentação a seguir apresenta o processo ETL (extract, transform, load) aplicado aos dados do Sistema de Informações Hospitalares do SUS (SIHSUS) do DATASUS para indexação na Plataforma de Ciência de Dados aplicada à Saúde (PCDaS). O processo ETL aplicado consiste basicamente em:

Extract:

  • Acessar o servidor FTP do DATASUS e baixar os arquivos com extensão .dbc contendo os microdados do SIHSUS para cada estado, para cada ano e para cada mês disponível/desejado;
  • Converter os arquivos baixados para a extensão .dbf;
  • Ler e unir os arquivos em um único conjunto de dados para posterior tratamento.

Transform:

  • Tratar o conjunto de dados adquirido de maneira a:
    • Decodificar e enriquecer os dados de acordo com dicionário de dados do SIHSUS;
    • Enriquecer os dados relacionados a município;
    • Enriquecer os dados relacionados a UF;
    • Enriquecer os dados relacionados a Classificação Estatística Internacional de Doenças e Problemas Relacionados com a Saúde (CID10);
    • Enriquecer os dados relacionados a datas e idade;
    • Enriquecer os dados relacionados a coordenadas.

Load:

  • Indexar dados tratados do SIHSUS em banco de dados NoSQL Elasticsearch localizado em infraestrutura do PCDaS no Laboratório Nacional de Computação Científica (LNCC);
  • Coletar log de indexação.

A implementação de todo o fluxo ETL descrito foi feita no ambiente da ferramenta Dataiku Data Science Studio (DSS). Este processo ETL é reexecutado para cada ano e para cada mês selecionado disponível no servidor FTP do DATASUS. Uma visão geral do fluxo ETL é apresentada no diagrama a seguir:

                 Fase Extract                                        Fase Transform                                      Fase Load

Detalhes de código/dados da implementação do fluxo ETL são apresentados a seguir.


Fase Extract:

1: Acessando o servidor FTP do DATASUS e baixando os arquivos com extensão .dbc contendo os dados do SIH para cada estado, para cada ano e para cada mês disponível/desejado;

Código R:
Função para fazer download de arquivos .dbc do SIHSUS a partir do FTP do Datasus:
download.dbc <- function(ftp_path,
                         dest_files_path = getwd(),
                         estados = NULL, anos = NULL, meses = NULL){
  require(RCurl)
  require(tidyverse)
  require(stringr)
  
  anos <- str_pad(as.numeric(anos)-2000, 2, pad = "0")
  meses <- str_pad(meses, 2, pad = "0")
  
  url <- ftp_path
  #userpwd <- "yourUser:yourPass"
  #recupera o nome dos arquivos em ftp_path
  filenames <- getURL(url, userpwd = NULL,
                      ftp.use.epsv = FALSE,dirlistonly = TRUE)
  filenames <- unlist(strsplit(filenames,"\n"))
  filenames <- data.frame(filename=filenames)
  filenames <- data.frame(lapply(filenames, as.character), stringsAsFactors=FALSE)
  
  #filtra os estados desejados se estes forem especificados
  if(!is.null(estados)){
    filenames <- filenames %>%
      filter(str_detect(filename, paste(estados,sep="",collapse = '|')))
  }
  #filtra os anos e meses desejados se estes forem especificados
  aamm <- as.vector(outer(anos, meses, paste, sep=""))
  #filtra os anos e meses desejados se estes forem especificados
  if(!is.null(aamm)){
    filenames <- filenames %>%
      filter(str_detect(filename, paste(aamm,sep="",collapse = '|')))
  }
  
  #faz download dos arquivos selecionados e salva os arquivos em dest_files_path
  for (filename in filenames$filename) {
    download.file(paste(url, filename, sep = ""), paste(dest_files_path, "/", filename, sep = ""))
  }
  
  #retorna um data.frame com os nomes e caminho dos arquivos
  return(data.frame(file_name=filenames$filename,file_path=dest_files_path))
}
Código para fazer download de arquivos .dbc do SIHSUS a partir do FTP do Datasus:
#============[INTERAÇÂO DSS]============
library(dataiku)
library(dplyr)
#===========================================

#Caminho para função "download.dbc"
path.script = "https://github.com/bigdata-icict/ETL-Dataiku-DSS/raw/master/SIH/download.dbc.r"

#Caminho FTP Datasus
ftp_path = "ftp://ftp.datasus.gov.br/dissemin/publicos/SIHSUS/200801_/Dados/"

#============[EDITAR]============
#Local para salvamento dos arquivos .dbc
path.data = "path_dbc_files"
#================================

#============[OPCIONAL]============
#filtros de estado e/ou anos
estados = NULL #outro exemplo: c("RJ")
anos = 2018 #outro exemplo: 2000:2014
meses = 12 #outro exemplo: 1:12
#==================================

#Carrega função "download.dbc"
if(!exists("download.dbc", mode="function")) source(path.script)

# Computa retorno da receita: nome dos arquivos .dbc baixados
datasus_files_list <- download.dbc(ftp_path = ftp_path,
                                   dest_files_path = path.data,
                                   estados = estados,
                                   anos = anos,
                                   meses=meses)

#=============[INTERAÇÂO DSS]=============== -> Alternativa: salvar data.frame em arquivo .csv 
# Retornando resultados para dataset do DSS
dkuWriteDataset(datasus_files_list,"datasus",schema = TRUE)
#===========================================
Retorno (exemplo):

2: Convertendo os arquivos baixados para a extensão .dbf e então lendo e unindo os arquivos em um único conjunto de dados no DSS para posterior tratamento.

Código R:
Função para converter, ler e unir os arquivos de dados do SIHSUS:
load.dbc <- function(files){
  require(read.dbc)
  
  df_from_DBC = data.frame()
  
  for(f in files){
    bind_rows( df_from_DBC, read.dbc(f) ) -> df_from_DBC
  }
  
  return(df_from_DBC)
}
Código para converter, ler e unir arquivos de dados do SIHSUS e escrever conjunto de dados resultantes no DSS:
#============[INTERAÇÂO DSS]============
library(dataiku)
library(dplyr)
#===========================================

#Instala o pacote "read.dbc"
#install.packages("read.dbc") 

#Caminho para função "load.dbc"
path.script = "https://github.com/bigdata-icict/ETL-Dataiku-DSS/raw/master/load.dbc.r"

#Carrega função "load.dbc"
if(!exists("load.dbc", mode="function")) source(path.script)

#============[INTERAÇÂO DSS]============  -> Alternativa: leitura de data.frame a partir de arquivo .csv
#Acessa lista de arquivos baixados para posterior conversão e leitura 
datasus_files_list <- dkuReadDataset("datasus")
#===========================================

#Concatena caminhos e nomes dos arquivos
datasus_files_list <- paste(datasus_files_list$file_path,datasus_files_list$file_name,sep="")

# Computa retorno da receita: dados do SIHSUS advindos de todos os arquivos .dbc baixados
df_from_DBC <- load.dbc(datasus_files_list)

#============[INTERAÇÂO DSS]============ -> Alternativa: salvar data.frame em arquivo .csv
# Retornando resultados para dataset do DSS
dkuWriteDataset(df_from_DBC, "DATA",schema = TRUE)
#===========================================
Retorno (exemplo):


Fase Transform:

A transformação/preparação dos dados foi feita utilizando-se funcionalidades (processors) disponíveis no ambiente da ferramenta Dataiku Data Science Studio (DSS). A receita ("recipe") utilizada está disponível para download/visualização através dos arquivos json:

prepare_DATA.json e prepare_DATA.shaker

Alguns detalhes do tratamento dos dados são apresentados a seguir, onde colunas com nomes em maiúsculo representam dados originais advindos do DATASUS e colunas com nomes em minúsculo representam dados resultantes de tratamento:

1: Decodificando e enriquecendo os dados:

Coluna Códigos Coluna resultante
UTI_MES_TO {000:"Não", 001:"Sim", 999:"Sim"} def_diarias_uti
SEQ_AIH5 {000:"Seqüencial zerado", 001:"Seq 1", 002:"Seq 2", 003:"Seq 3", 004:"Outros", 999:"Outros"} def_seq_aih5
IDENT {1:"Normal", 5:"Longa permanência"} def_ident
VINCPREV {1:"Autônomo", 2:"Desempregado", 3:"Aposentado", 4:"Não segurado", 5:"Empregado", 6:"Empregador"} def_vincprev
NATUREZA {00:"", 99:"", 10:"Público", 30:"Público", 31:"Público", 40:"Público", 41:"Público", 50:"Público", 20:"Privado", 22:"Privado", 60:"Privado", 61:"Privado", 63:"Privado", 80:"Privado", 70:"Universitário", 90:"Universitário", 91:"Universitário", 93:"Universitário", 94:"Universitário", 92:"Universitário"} def_regime
NUM_FILHOS {0:"Sem filhos/Não inform", 1:"1 filho", 2:"2 filhos", 3:"3 filhos", 4:"4 a 5 filhos", 5:"4 a 5 filhos", 6:"6 a 9 filhos", 7:"6 a 9 filhos", 8:"6 a 9 filhos", 9:"6 a 9 filhos", 10:"10 filhos ou mais", 99:"10 filhos ou mais"} def_num_filhos
REGCT {7101:"S/crédito na média complex ambulatorial (exc FAEC)", 7102:"S/crédito na média complex hospitalar (exc FAEC)", 7103:"S/crédito na alta complex ambulatorial (exc FAEC)", 7104:"S/crédito na alta complex hospitalar (exc FAEC)", 7105:"S/crédito nos procedimentos financ FAEC", 7106:"S/crédito total incluindo FAEC", 7107:"S/crédito nas ações esp odonto (CEO I II III)", 7108:"S/crédito incentivo Saúde do Trabalhador exc FAEC", 7109:"S/crédito total HU/MEC", 7110:"S/crédito total Minist Saúde", 7111:"S/crédito NASF exc FAEC", 0000:"Sem regra contratual"} def_regct
FAEC_TP {010000:"Atenção Básica (PAB)", 020000:"Assistência Farmacêutica", 040000:"FAEC - Subtipo de financiamento ignorado", 040001:"Coleta de material", 040002:"Diagnóstico em laboratório clínico", 040003:"Coleta/exame anátomo-patológico colo uterino", 040004:"Diagnóstico em neurologia", 040005:"Diagnóstico em otorrinolaringologia/fonoaudiologia", 040006:"Diagnóstico em psicologia/psiquiatria", 040007:"Consultas médicas/outr profissionais nív superior", 040008:"Atenção domiciliar", 040009:"Atend/acomp reab fís, mental, visual, múlt defic", 040010:"Atendimento/acompanhamento psicossocial", 040011:"Atendimento/acompanhamento em saúde do idoso", 040012:"Atendimento/acompanhamento de queimados", 040013:"Atend/acomp diagn doenças endócr,metabólic e nutr", 040014:"Trat doenças sistema nervoso central e periférico", 040015:"Tratamento de doenças do aparelho da visão", 040016:"Tratamento em oncologia", 040017:"Nefrologia", 040018:"Tratamentos odontológicos", 040019:"Cirurgia do sistema nervoso central e periférico", 040020:"Cirurgias de ouvido, nariz e garganta", 040021:"Deformidade labio-palatal e crânio-facial", 040022:"Cirurgia do aparelho da visão", 040023:"Cirurgia do aparelho circulatório", 040024:"Cirurgia apar digest, órgãos anexos e pared abdom", 040025:"Cirurgia do aparelho geniturinário", 040026:"Tratamento de queimados", 040027:"Cirurgia reparadora para lipodistrofia", 040028:"Outras cirurgias plásticas/reparadoras", 040029:"Cirurgia orofacial, 040030:"Sequenciais", 040032:"Transplantes de órgãos, tecidos e células", 040033:"Medicamentos para transplante", 040035:"OPM em odontologia", 040036:"OPM em queimados", 040038:"OPM para transplantes", 040039:"Incentivos ao pré-natal e nascimento", 040040:"Incentivo ao registro cívil de nascimento", 040041:"Central Nacional Regulação Alta Complexidade CNRAC", 040042:"Reguladores ativ hormonal - inibidores prolactina", 040043:"Política Nacional de Cirurgias Eletivas", 040044:"Redesignação e acompanhamento", 040045:"Projeto Olhar Brasil", 040046:"Mamografia para rastreamento", 040047:"Projeto Olhar Brasil – consulta", 040048:"Projeto Olhar Brasil – óculos", 040049:"Implementar Cirg. CV Pediátrica", 040050:"Cirurgias eletivas - componente I", 040051:"Cirurgias eletivas - componente II", 040052:"Cirurgias eletivas - componente III", 040053:"Prótese mamária – exames", 040054:"Prótese mamária – cirurgia", 021012:"FAEC CNRAC (21012-cód ant à tab unif-vál p/2008-01)", 021014:"FAEC Eletiv(21014-cód ant à tab unif-vál p/2008-01)", 050000:"Incentivo – MAC", 060000:"Média e Alta Complexidade (MAC)", 070000:"Vigilância em Saúde"} def_faec_tp
DIAS_PERM {0000:"0 dias", 0001:"1 dia", 0002:"2 dias", 0003:"3 dias", 0004:"4 dias", 0005:"5 dias", 0006:"6 dias", 0007:"7 dias", 0014:"8-14 dias", 0021:"15-21 dias", 0028:"22-28 dias", 9999:"29 dias e +"} def_dias_perm
UTI_MES_TO {001:"Sim", 999:"Sim", 000:"Não"} def_uti_mes_to
CAR_INT {1:"Eletivo", 2:"Urgência", 3:"Acidente no local trabalho ou a serv da empresa", 4:"Acidente no trajeto para o trabalho", 5:"Outros tipo de acidente de trânsito", 6:"Out tp lesões e envenen por agent quím físicos"} def_car_int
N_AIH {1:"AIH Normal", 2:"APAC Normal", 3:"AIH CNRAC", 4:"APAC CNRAC", 5:"AIH Campanha de Cirurgias Eletivas", 6:""} def_n_aih
SEXO {1:"Masculino", 2:"Feminino", 3:"Feminino", 0:"", 9:""} def_sexo
IDENT {1:"Normal", 5:"Longa permanência", 0:"", 9:""} def_ident
MARCA_UTI {00:"Não utilizou UTI", 74:"UTI adulto - tipo I", 75:"UTI adulto - tipo II", 76:"UTI adulto - tipo III", 77:"UTI infantil - tipo I", 78:"UTI infantil - tipo II", 79:"UTI infantil - tipo III", 80:"UTI neonatal - tipo I", 81:"UTI neonatal - tipo II", 82:"UTI neonatal - tipo III", 83:"UTI de queimados", 85:"UTI coronariana tipo II - UCO tipo II", 86:"UTI coronariana tipo III - UCO tipo III", 99:"UTI Doador", 01:"Utilizou mais de um tipo de UTI"} def_marca_uti
COBRANCA {11:"Alta curado", 12:"Alta melhorado", 14:"Alta a pedido", 15:"Alta com previsão de retorno p/acomp do paciente", 16:"Alta por evasão", 18:"Alta por outros motivos", 19:"Alta de paciente agudo em psiquiatria", 21:"Permanência por características próprias da doença", 22:"Permanência por intercorrência", 23:"Permanência por impossibilidade sócio-familiar", 24:"Permanência proc doação órg, tec, cél-doador vivo", 25:"Permanência proc doação órg, tec, cél-doador morto", 26:"Permanência por mudança de procedimento", 27:"Permanência por reoperação", 28:"Permanência por outros motivos", 29:"Transferência para internação domiciliar", 32:"Transferência para internação domiciliar", 31:"Transferência para outro estabelecimento", 41:"Óbito com DO fornecida pelo médico assistente", 42:"Óbito com DO fornecida pelo IML", 43:"Óbito com DO fornecida pelo SVO", 51:"Encerramento administrativo", 61:"Alta da mãe/puérpera e do recém-nascido", 17:"Alta da mãe/puérpera e do recém-nascido", 62:"Alta da mãe/puérpera e permanência recém-nascido", 13:"Alta da mãe/puérpera e permanência recém-nascido", 63:"Alta da mãe/puérpera e óbito do recém-nascido", 64:"Alta da mãe/puérpera com óbito fetal", 65:"Óbito da gestante e do concepto", 66:"Óbito da mãe/puérpera e alta do recém-nascido", 67:"Óbito da mãe/puérpera e permanência recém-nascido"} def_cobranca
NAT_JUR {1015:"Órgão Público do Poder Executivo Federal", 1023:"Órgão Público do Poder Exec Estadual ou Distr Fed", 1031:"Órgão Público do Poder Executivo Municipal", 1040:"Órgão Público do Poder Legislativo Federal", 1058:"Órgão Público do Poder Legisl Estadual ou Dist Fed", 1066:"Órgão Público do Poder Legislativo Municipal", 1074:"Órgão Público do Poder Judiciário Federal", 1082:"Órgão Público do Poder Judiciário Estadual", 1104:"Autarquia Federal", 1112:"Autarquia Estadual ou do Distrito Federal", 1120:"Autarquia Municipal", 1139:"Fundação Federal", 1147:"Fundação Estadual ou do Distrito Federal", 1155:"Fundação Municipal", 1163:"Órgão Público Autônomo Federal", 1171:"Órgão Público Autônomo Estadual ou Distr Federal", 1180:"Órgão Público Autônomo Estadual ou Distr Federal", 1198:"Comissão Polinacional", 1201:"Fundo Público", 1210:"Associação Pública", 2011:"Empresa Pública", 2038:"Sociedade de Economia Mista", 2046:"Sociedade Anônima Aberta", 2054:"Sociedade Anônima Fechada", 2062:"Sociedade Empresária Limitada", 2070:"Sociedade Empresária em Nome Coletivo", 2089:"Sociedade Empresária em Comandita Simples", 2097:"Sociedade Empresária em Comandita por Ações", 2127:"Sociedade em Conta de Participação", 2135:"Empresário (Individual)", 2143:"Cooperativa", 2151:"Consórcio de Sociedades", 2160:"Grupo de Sociedades", 2178:"Estabelecimento no Brasil de Sociedade Estrangeira", 2194:"Estab no Brasil Empr Binacional Argentina-Brasil", 2216:"Empresa Domiciliada no Exterior", 2224:"Clube/Fundo de Investimento", 2232:"Sociedade Simples Pura", 2240:"Sociedade Simples Limitada", 2259:"Sociedade Simples em Nome Coletivo", 2267:"Sociedade Simples em Comandita Simples", 2275:"Empresa Binacional", 2283:"Consórcio de Empregadores", 2291:"Consórcio Simples", 2305:"Empr Individ Responsab Limitada (Natur Empresária)", 2313:"Empr Individ Responsab Limitada (Natureza Simples)", 3034:"Serviço Notarial e Registral (Cartório)", 3069:"Fundação Privada", 3077:"Serviço Social Autônomo", 3085:"Condomínio Edilício", 3107:"Comissão de Conciliação Prévia", 3115:"Entidade de Mediação e Arbitragem", 3123:"Partido Político", 3131:"Entidade Sindical", 3204:"Estab no Brasil de Fundação ou Associação Estrang", 3212:"Fundação ou Associação Domiciliada no Exterior", 3220:"Organização Religiosa", 3239:"Comunidade Indígena", 3247:"Fundo Privado", 3999:"Associação Privada", 4014:"Empresa Individual Imobiliária", 4022:"Segurado Especial", 4081:"Contribuinte Individual", 4090:"Candidato a Cargo Político Eletivo", 4111:"Leiloeiro", 5010:"Organização Internacional", 5029:"Representação Diplomática Estrangeira", 5037:"Outras Instituições Extraterritoriais", 0000:""} def_nat_jur
GESTAO {0:"Estadual", 2:"Estadual plena", 1:"Municipal planea assist", 3:"", 4:"", E:"Estadual plena", M:"Municipal plena assist", 5:"", 6:"", 7:"", 8:"", 9:""} def_gestao
IND_VDRL {0:"Não", 1:"Sim"} def_ind_vdrl
COD_IDADE {2:"Dias", 3:"Meses", 4:"Anos", 0:""} def_cod_idade
MORTE {0:"Sem óbito", 1:"Com óbito"} def_morte
HOMONIMO {0:"Não", 1:"Sim"} def_homonimo
INSTRU {1:"Analfabeto", 2:"1º grau", 3:"2º grau", 4:"3º grau", 0:"", 9:""} def_instru
CONTRACEP1 {01:"LAM", 02:"Ogino Kaus", 03:"Temperatura basal", 04:"Billings", 05:"Cinto térmico", 06:"DIU", 07:"Diafragma", 08:"Preservativo", 09:"Espermicida", 10:"Hormônio oral", 11:"Hormônio injetável", 12:"Coito interrompido", 00:"", 99:""} def_contracep1
CONTRACEP2 {01:"LAM", 02:"Ogino Kaus", 03:"Temperatura basal", 04:"Billings", 05:"Cinto térmico", 06:"DIU", 07:"Diafragma", 08:"Preservativo", 09:"Espermicida", 10:"Hormônio oral", 11:"Hormônio injetável", 12:"Coito interrompido", 00:"", 99:""} def_contracep2
GESTRISCO {0:"Não", 1:"Sim"} def_gestrisco
INFEHOSP {0:"Não", 1:"Sim"} def_infehosp
COMPLEX {01:"Atenção Básica", 02:"Média complexidade", 03:"Alta complexidade", 00:"", 99:""} def_complex
FINANC {01:"Atenção Básica (PAB)", 02:"Assistência Farmacêutica", 04:"Fundo de Ações Estratégicas e Compensações FAEC", 05:"Incentivo – MAC", 06:"Média e Alta Complexidade (MAC)", 07:"Vigilância em Saúde", 00:"", 99:""} def_financ
RACA_COR {01:"Branca", 02:"Preta", 03:"Parda", 04:"Amarela", 05:"Indígena", 99:"Sem Informação"} def_raca_cor
MARCA_UCI {00:"Não utilizou UCI", 01:"Unidade de cuidados intermed neonatal convencional", 02:"Unidade de cuidados intermed neonatal canguru", 03:"Unidade intermediária neonatal"} def_marca_uci
TPDISEC1 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec1
TPDISEC2 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec2
TPDISEC3 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec3
TPDISEC4 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec4
TPDISEC5 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec5
TPDISEC6 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec6
TPDISEC7 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec7
TPDISEC8 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec8
TPDISEC9 {1:"Pré-existente", 2:"Adquirido", 0:""} def_tpdisec9
Enriquecimentos com base em tabelas auxiliares:

Os enriquecimentos dos dados do SIHSUS descritos a seguir foram baseados em dados disponíveis em planilhas auxiliares:

Tabelas Auxiliares - SIH

Enriquecendo os dados relacionados a região:

O enriquecimento dos dados do SIHSUS relacionados a região foram baseados nos dados disponíveis no seguinte arquivo (planilha "REGUF"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Fazer junção ("left join") com base na coluna 'MUNIC_MOV' na planilha 'REGUF' e extração da coluna 'value' int_REGIAO
MUNIC_RES Fazer junção ("left join") com base na coluna 'MUNIC_RES' na planilha 'REGUF' e extração da coluna 'value' res_REGIAO
Enriquecendo os dados relacionadas ao tipo da AIH:

O enriquecimento dos dados do SIH relacionados ao tipo da AIH foram feitos deste modo.

Coluna base Operação Colunas resultantes
N_AIH Fazer truncagem (“truncate”) de 1 caractere e junção (“left join”) com a seguinte sequência: {1:”AIH normal”, 2: “APAC Normal”, 3: “AIH CNRAC”, 4: “APAC CNRAC”, 5: “AIH Campanha de Cirurgias Eletivas”} def_identific
Enriquecendo os dados relacionadas a região metropolitana:

O enriquecimento dos dados do SIH relacionados a região metropolitana foram baseados nos dados disponíveis no seguinte arquivo (planilha "RMETRBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “RMETRBR” e extração da coluna “value” def_reg_metr_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “RMETRBR” e extração da coluna “value” def_reg_metr_res
Enriquecendo os dados relacionados a CIR:

O enriquecimento dos dados do SIH relacionados a CIR foram baseados nos dados disponíveis no seguinte arquivo (planilha "CIRBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “CIRBR” e extração da coluna “value” def_cir_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “CIRBR” e extração da coluna “value” def_cir_res
Enriquecendo os dados relacionados a aglomerados:

O enriquecimento dos dados do SIH relacionados a aglomerados foram baseados nos dados disponíveis no seguinte arquivo (planilha "AGLBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “AGLBR” e extração da coluna “value” def_aglr_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “AGLBR” e extração da coluna “value” def_aglr_res
Enriquecendo os dados relacionados a mesorregião:

O enriquecimento dos dados do SIH relacionados a mesorregião foram baseados nos dados disponíveis no seguinte arquivo (planilha "MESOBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “MESOBR” e extração da coluna “value” def_meso_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “MESOBR” e extração da coluna “value” def_meso_res
Enriquecendo os dados relacionados a microrregião:

O enriquecimento dos dados do SIH relacionados a microrregião foram baseados nos dados disponíveis no seguinte arquivo (planilha "MICROBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “MICROBR” e extração da coluna “value” def_micro_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “MICROBR” e extração da coluna “value” def_micro_res
Enriquecendo os dados relacionados a região de saúde:

O enriquecimento dos dados do SIH relacionados a região de saúde foram baseados nos dados disponíveis no seguinte arquivo (planilha "RSAUDBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “RSAUDBR” e extração da coluna “value” def_rsaud_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “RSAUDBR” e extração da coluna “value” def_rsaud_res
Enriquecendo os dados relacionados a centro de saúde:

O enriquecimento dos dados do SIH relacionados a centro de saúde foram baseados nos dados disponíveis no seguinte arquivo (planilha "CSAUDBR"):

Coluna base Operação Colunas resultantes
MUNIC_MOV Junção (“left join”) com base na coluna “MUNIC_MOV” na planilha “CSAUDBR” e extração da coluna “value” def_csaud_int
MUNIC_RES Junção (“left join”) com base na coluna “MUNIC_RES” na planilha “CSAUDBR” e extração da coluna “value” def_csaud_res
Enriquecendo os dados relacionados a esfera jurídica:

O enriquecimento dos dados do SIH relacionados a esfera jurídica foram baseados nos dados disponíveis no seguinte arquivo (planilha "ESFERAJUR"):

Coluna base Operação Colunas resultantes
NAT_JUR Junção (“left join”) com base na coluna “NAT_JUR” na planilha “ESFERAJUR” e extração da coluna “value” def_esferajur
Enriquecendo os dados relacionados a etnia:

O enriquecimento dos dados do SIH relacionados a etnia foram baseados nos dados disponíveis no seguinte arquivo (planilha "ETNIA"):

Coluna base Operação Colunas resultantes
ETNIA Junção (“left join”) com base na coluna “ETNIA” na planilha “ETNIA” e extração da coluna “value” def_etnia
def_etnia Substituição dos valores “NÃO INFORMADO” por missing (NA) def_etnia
Enriquecendo os dados relacionados a nacionalidade:

O enriquecimento dos dados do SIH relacionados a nacionalidade foram baseados nos dados disponíveis no seguinte arquivo (planilha "NACION3D"):

Coluna base Operação Colunas resultantes
NACIONAL Junção (“left join”) com base na coluna “NACIONAL” na planilha “NACION3D” e extração da coluna “value” def_nacionalidade
Enriquecendo os dados relacionados a CBO:

O enriquecimento dos dados do SIH relacionados a CBO foram baseados nos dados disponíveis no seguinte arquivo (planilha "CBO"):

Coluna base Operação Colunas resultantes
CBO Junção (“left join”) com base na coluna “CBO” na planilha “CBO” e extração da coluna “value” def_cbo
Enriquecendo os dados relacionados a CNAE:

O enriquecimento dos dados do SIH relacionados a CNAE foram baseados nos dados disponíveis no seguinte arquivo (planilha "CNAE"):

Coluna base Operação Colunas resultantes
CNAER Junção (“left join”) com base na coluna “CNAER” na planilha “CNAE” e extração da coluna “value” def_cnae
Enriquecendo os dados relacionados a leitos:

O enriquecimento dos dados do SIH relacionados a leitos foram baseados nos dados disponíveis no seguinte arquivo (planilha "LEITOS"):

Coluna base Operação Colunas resultantes
ESPEC Junção (“left join”) com base na coluna “ESPEC” na planilha “LEITOS” e extração da coluna “value” def_leitos
Enriquecendo os dados relacionados a procedimento realizado:

O enriquecimento dos dados do SIH relacionados a procedimento realizado foram baseados nos dados disponíveis no seguinte arquivo (planilha "TB_SIGTAB"):

Coluna base Operação Colunas resultantes
PROC_REA Junção (“left join”) com base na coluna “PROC_REA” na planilha “TB_SIGTAB” e extração da coluna “value” def_procedimento_realizado
Enriquecendo os dados relacionados a procedimento solicitado:

O enriquecimento dos dados do SIH relacionados a procedimento solicitado foram baseados nos dados disponíveis no seguinte arquivo (planilha "TB_SIGTAB"):

Coluna base Operação Colunas resultantes
PROC_SOLIC Junção (“left join”) com base na coluna “PROC_SOLIC” na planilha “TB_SIGTAB” e extração da coluna “value” def_procedimento_solicitado

2: Enriquecendo os dados relacionados a município (residência e internação):

O enriquecimento dos dados do SIHSUS relacionados a município foram baseados nos dados disponíveis no seguinte arquivo:

Dados - Município

Coluna base Operação Colunas resultantes
MUNIC_RES Truncar para um máximo de 6 caracteres res_MUNCOD
res_MUNCOD Fazer junção ("left join") com base na coluna 'MUNCOD' em 'municipios' ["res_MUNCOD", "res_MUNNOME", "res_MUNNOMEX", "res_AMAZONIA", "res_FRONTEIRA", "res_CAPITAL", "res_CODIGO_UF", "res_MSAUDCOD", "res_RSAUDCOD", "res_CSAUDCOD", "res_LATITUDE", "res_LONGITUDE", "res_ALTITUDE", "res_AREA", "res_codigo_adotado"]
MUNIC_MOV Truncar para um máximo de 6 caracteres int_MUNCOD
int_MUNCOD Fazer junção ("left join") com base na coluna 'MUNCOD' em 'municipios' ["int_MUNCOD", "int_MUNNOME", "int_MUNNOMEX", "int_AMAZONIA", "int_FRONTEIRA", "int_CAPITAL", "int_CODIGO_UF", "int_MSAUDCOD", "int_RSAUDCOD", "int_CSAUDCOD", "int_LATITUDE", "int_LONGITUDE", "int_ALTITUDE", "int_AREA", "int_codigo_adotado"]

3: Enriquecendo os dados relacionados a UF (residência e internação):

O enriquecimento dos dados do SIHSUS relacionados a UF foram baseados nos dados disponíveis no seguinte arquivo:

Dados - UF

Coluna base Operação Colunas resultantes
res_UFCOD Fazer junção ("left join") com base na coluna 'CODIGO' em 'ufs' ["res_SIGLA_UF", "res_CODIGO_UF", "res_NOME_UF"]
int_UFCOD Fazer junção ("left join") com base na coluna 'CODIGO' em 'ufs' ["int_SIGLA_UF", "int_CODIGO_UF", "int_NOME_UF"]

4: Enriquecendo os dados relacionados a CID 10:

O enriquecimento dos dados do SIHSUS relacionados a CID10 foram baseados nos dados disponíveis nos seguintes arquivos:

CID10 - Capítulos, CID10 - Grupos, CID10 - Categorias, CID10 - Subcategorias

Enriquecendo os dados relacionados ao diagnóstico principal:

O enriquecimento dos dados do SIHSUS relacionados a diagnóstico principal foi realizado conforme abaixo.

Coluna base Operação Colunas resultantes
DIAG_PRINC Copia para nova variável diag_princ
diag_princ Truncagem (truncate) de 3 caracteres diag_princ
diag_princ Junção (left join) com base na coluna “diag_princ” na planilha “cid10_capitulos” e extração da coluna “value” def_diag_princ_cap
diag_princ Junção (left join) com base na coluna “diag_princ” na planilha “cid10_grupos” e extração da coluna “value” def_diag_princ_grupo
diag_princ Junção (left join) com base na coluna “diag_princ” na planilha “cid10_categorias” e extração da coluna “value” def_diag_princ_cat
diag_princ Remoção (drop) da variável “diag_princ” ---
DIAG_PRINC Junção (left join) com base na coluna “DIAG_PRINC” na planilha “cid10_subcategorias” e extração da coluna “value” def_diag_princ_subcat
Enriquecendo os dados relacionados ao primeiro diagnóstico secundário:

O enriquecimento dos dados do SIHSUS relacionados ao primeiro diagnóstico secundário foi realizado conforme abaixo.

Coluna base Operação Colunas resultantes
DIAGSEC1 Copia para nova variável diag_secun
diag_secun Truncagem (truncate) de 3 caracteres diag_secun
diag_secun Junção (left join) com base na coluna “diag_secun” na planilha “cid10_capitulos” e extração da coluna “value” def_secun1_princ_cap
diag_secun Junção (left join) com base na coluna “diag_secun” na planilha “cid10_grupos” e extração da coluna “value” def_diag_secun1_grupo
diag_secun Junção (left join) com base na coluna “diag_secun” na planilha “cid10_categorias” e extração da coluna “value" def_diag_secun1_cat
diag_secun Remoção (drop) da variável “diag_secun” ---
DIAGSEC1 Junção (left join) com base na coluna “DIAGSEC1” na planilha “cid10_subcategorias” e extração da coluna “value” def_diag_secun1_subcat

5: Enriquecendo os dados relacionados a datas e idade:

Coluna base Operação Coluna resultante
DT_INTER Criação de variável de data de internação com base no formato "yyyyMMdd" dt_inter
DT_SAIDA Criação de variável de data de saída com base no formato "yyyyMMdd" dt_saida
dt_inter Extração do ano da internação ano_internacao
dt_inter Extração do dia da semana da internação dia_semana_internacao
dt_saida Extração do ano da saída ano_saida
dt_saida Extração do dia da semana da saída dia_semana_saida
IDADE Criar variável de idade em anos, considerando a variável “COD_IDADE” (0 se idade em mêses ou dias (cod_idade < 4)) def_idade_anos
def_idade_anos Criar variável de faixa etária utilizando o seguinte critério {'<1a': idade < 1; '1-4a': idade >= 1 e idade < 5; '5-14a': idade >= 5 e idade < 15; '15-49a': idade >= 15 and idade < 50; '50e+a':idade >= 50} def_idade_bas
def_idade_anos Criar variável de faixa etária utilizando o seguinte critério {'<1a': idade < 1; '1-4a': idade >= 1 e idade < 5; '5-14a': idade >= 5 e idade < 15; '15-24a': idade >= 15 and idade < 25; '25-34a': idade >= 25 and idade < 35; '35-44a': idade >= 35 and idade < 45; '45-54a': idade >= 45 and idade < 55; '55-64a': idade >= 55 and idade < 65; '65e+a': idade >= 65} def_idade_pub
def_idade_anos Criar variável de faixa etária utilizando o seguinte critério {'<1a': idade < 1; '1-4a': idade >= 1 e idade < 5; '5-9a': idade >= 5 e idade < 10; '10-14a': idade >= 10 and idade < 15; '15-19a': idade >= 15 and idade < 20; '20-24a': idade >= 20 and idade < 25; '25-29a': idade >= 25 and idade < 30; '30-34a': idade >= 30 and idade < 35; '35-39a': idade >= 35 and idade < 40; '40-44a': idade >= 40 and idade < 45; '45-49a': idade >= 45 and idade < 50; '50-54a': idade >= 50 and idade < 55; '55-59a': idade >= 55 and idade < 60; '60-64a': idade >= 60 and idade < 65; '65-69a': idade >= 65 and idade < 70; '70-74a': idade >= 70 and idade < 75; '75-79a': idade >= 75 and idade < 80; '80e+a': idade >= 80} def_idade_18

6: Enriquecendo os dados relacionados a coordenadas (residência e internação):

Coluna base Operação Coluna resultante
res_LATITUDE e res_LONGITUDE Concatenar coordenadas res_coordenadas
int_LATITUDE e int_LONGITUDE Concatenar coordenadas int_coordenadas

Retorno da fase de tratamento (exemplo):


Fase Load:

1: Indexando dados tratados do SIHSUS em banco de dados NoSQL Elasticsearch:

Uma vez finalizada a trasformação/preparação dos dados, estes são indexados em um servidor de banco de dados NoSQL Elasticsearch localizado em infraestrutura da PCDaS no LNCC.

Código Python:
O código utilizado para indexação está disponível em formato Jupyter Notebook: Notebook Python
Retorno - log de indexação (exemplo):


Dados e dicionário de variáveis - SIHSUS:

O download e a prévia do conjunto de dados resultante de todo o tratamento realizado e indexado no Elasticsearch estão disponíveis na PCDaS, assim como o dicionário de variáveis.


Dashboards Kibana:

Os dados SIHSUS indexados no Elasticsearch possibilitam o desenvovimento de dashboards Kibana para a visualização simples, rápida e dinâmica de grandes quantidades de dados. Os dashboards desenvolvidos estão disponíveis para visualização na PCDaS na seção de Análise Visual

Clone this wiki locally
You can’t perform that action at this time.