--- title: "Introduction to datasus" author: "Renato Prado Siqueira" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Introduction to datasus} %\VignetteEngine{knitr::rmarkdown} \usepackage[utf8]{inputenc} --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, collapse = TRUE, comment = "#>") ``` ## A R Interface to the DATASUS's data The "datasus" R package provides direct access to TABNET/DATASUS from R. It covers vital statistics (SIM and SINASC), hospital production and morbidity (SIH/SUS), ambulatory production (SIA/SUS), the National Registry of Health Establishments (CNES), resident population estimates, and notifiable conditions (SINAN). Historical immunization, nutritional surveillance and financing tables and current SISCAN exam tables are also available. ## Installation To install the development version hosted on Github: ```{r, eval=FALSE} library(devtools) install_github("rpradosiqueira/datasus") ``` ## Functions Each system has one catalog-driven query function. Use `datasus_catalogo()` for local discovery and `datasus_opcoes()` to inspect the dimensions and filters currently published by TABNET. The historical SIM and SINASC functions remain as deprecated compatibility wrappers. ## Examples ### SIM and SINASC The unified vital-statistics functions cover all historical geographic forms. `abrangencia = "uf"` returns region/state results; the default municipal form covers Brazil, or one state when `uf` is supplied: ```{r, eval = FALSE} datasus_catalogo("sim") datasus_opcoes("sim", "obitos", abrangencia = "uf") obitos_uf <- sim( "obitos", abrangencia = "uf", periodo = 2024 ) obitos_municipios <- sim( "obitos", uf = "MS", periodo = 2024, filtros = list(sexo = "Masculino") ) nascimentos <- sinasc(uf = "MS", periodo = 2024) datasus_proveniencia(obitos_uf) ``` ### SIH/SUS, SIA/SUS and CNES The three health-services systems share one interface. First inspect the offline catalog and, when needed, the choices exposed by the current TABNET form: ```{r, eval = FALSE} datasus_catalogo() datasus_catalogo("cnes") op <- datasus_opcoes("sih", uf = "MS") op$conteudo op$filtros$carater_atendimento ``` Queries accept an exact period, `"last"`, or a year: ```{r, eval = FALSE} sih_producao( uf = "MS", conteudo = "Internações", periodo = 2025, filtros = list(carater_atendimento = "Urgência") ) sia_producao(uf = "MS", conteudo = "Qtd.aprovada") cnes(uf = "MS") cnes(conjunto = "leitos_internacao", uf = "MS") ``` ### Population, hospital morbidity and SINAN The same interface also covers population denominators, diagnosis-oriented hospital morbidity, and 46 disease-specific SINAN datasets: ```{r, eval = FALSE} populacao_residente(uf = "MS", periodo = 2021) sih_morbidade( uf = "MS", linha = "Capítulo CID-10", conteudo = "Internações", periodo = 2025 ) datasus_catalogo("sinan") sinan("dengue", uf = "MS", periodo = 2025) ``` ### PNI, SISCAN, SISVAN and financing The catalog also contains the legacy PNI, SISVAN and financing tables and 15 SISCAN exam datasets: ```{r, eval = FALSE} pni_imunizacoes(uf = "MS") pni_imunizacoes("cobertura", uf = "MS") siscan(uf = "MS") siscan("mamografia_residencia", uf = "MS", periodo = 2025) sisvan(uf = "MS") financiamento_sus(uf = "MS") ``` ### OpenDataSUS microdata OpenDataSUS publishes modern surveillance datasets as annual downloadable resources. Search the portal and inspect the available files before starting a large download: ```{r, eval = FALSE} opendatasus_catalogo("dengue") opendatasus_recursos("arboviroses-dengue") ``` Convenience functions cover SIVEP-Gripe, current dengue microdata and Mpox. Use `n_max` to inspect a small sample first: ```{r, eval = FALSE} srag <- sivep_gripe(ano = 2025, n_max = 1000) dengue <- sinan_dengue(ano = 2025, n_max = 1000) cases <- sinan_mpox(ano = 2025, n_max = 1000) adverse_events <- esavi(n_max = 1000) mild_cases <- esus_sindrome_gripal( uf = "MS", ano = "last", n_max = 1000, colunas = c( "dataNotificacao", "municipioIBGE", "idade", "sexo" ), normalizar = TRUE ) doses <- pni_doses( ano = "last", mes = "last", n_max = 1000, normalizar = TRUE ) occupancy <- ocupacao_hospitalar( ano = "last", n_max = 1000, normalizar = TRUE ) datasus_proveniencia(dengue) datasus_validar_esquema( doses, "pni_doses", campos = c("data_vacinacao", "cnes") ) ``` Files are downloaded atomically and cached. The provenance metadata includes the official URL, resource identifier, update and download times, local path and MD5 checksum. Set `atualizar = TRUE` to force a fresh copy. The syndrome gripal wrapper resolves annual state files, PNI resolves one monthly file, and `"last"` follows the latest partition actually published in the live catalog rather than assuming the current calendar period. Historical state resources may contain many physical lots in their description. `opendatasus_arquivos()` expands these links and `esus_sindrome_gripal()` joins them transparently while applying `n_max` across the complete state selection. Use `opendatasus_processar()` when even selected columns should not be held in memory: ```{r, eval = FALSE} sg_resources <- opendatasus_recursos( "notificacoes-de-sindrome-gripal-leve-2020" ) sg_ms <- sg_resources$id[ sg_resources$formato == "CSV" & grepl("^Dados MS", sg_resources$nome) ] summary <- opendatasus_processar( "notificacoes-de-sindrome-gripal-leve-2020", recurso = sg_ms, ano = NULL, colunas = c("municipioIBGE", "resultadoTeste"), tamanho_bloco = 50000, sistema = "sindrome_gripal", FUN = function(dados, posicao, arquivo) { table(dados$codigo_municipio_residencia) } ) ``` ### Raw DBC/DBF microdata Record-level SIM, SINASC and SIH files use the same discovery, download and read workflow: ```{r, eval = FALSE} microdados_catalogo() microdados_arquivos("sih", ano = 2024, mes = 1, uf = "AC") admissions <- sih_microdados( ano = 2024, mes = 1, uf = "AC", colunas = c("MUNIC_RES", "DT_INTER", "DIAG_PRINC", "VAL_TOT"), n_max = 1000, normalizar = TRUE ) datasus_dicionario("sih") datasus_proveniencia(admissions) ``` DBC files are decoded directly in memory. Selecting columns and limiting rows is strongly recommended while exploring large monthly files. ### Territorial reference The current IBGE hierarchy is available offline and links six-digit DATASUS municipality codes to full seven-digit IBGE identifiers: ```{r, eval = FALSE} datasus_territorios("regiao") datasus_territorios("uf") datasus_territorios("municipio", uf = "MS") normalizar_codigo_ibge(c("500270", "500370")) cases <- data.frame( codmun = c("500270", "500370"), ano = 2025, casos = c(10, 5) ) adicionar_territorio(cases, "codmun") ``` Use `completar_territorios()` to create absent combinations for an explicit period or territorial universe: ```{r, eval = FALSE} completar_territorios( cases, codigo = "codmun", periodo = "ano", periodos = 2023:2025, preencher = list(casos = 0) ) ``` This hierarchy describes current territories. The package does not automatically redistribute historical observations after boundary changes. ### Epidemiological analysis The package includes dependency-free helpers for common calculations. The integrated indicator engine aggregates numerator and denominator counts before calculating grouped estimates: ```{r, eval = FALSE} calcular_taxa(eventos = c(10, 25), populacao = c(10000, 20000)) intervalo_taxa(eventos = 10, populacao = 10000) taxa_incidencia( dados, casos = "casos", populacao = "populacao", grupo = c("codigo_municipio", "ano"), confianca = 0.95 ) taxa_mortalidade(dados, "obitos", "populacao", grupo = "ano") proporcao(dados, "vacinados", "elegiveis", grupo = "ano") letalidade(dados, "obitos", "casos", grupo = "ano") ``` Use `juntar_populacao()` to make the denominator relationship explicit. Population keys must be unique, observation order is preserved, and missing matches raise an error by default: ```{r, eval = FALSE} dados <- juntar_populacao( eventos, denominadores, por = c(codmun = "codigo_municipio", ano = "ano"), coluna_populacao = "habitantes" ) ``` Calendar and smoothing helpers remain vectorized: ```{r, eval = FALSE} semana_epidemiologica(as.Date(c("2025-01-01", "2026-01-01"))) calendario_epidemiologico(2026) media_movel(casos_diarios, janela = 7) ``` Direct standardization can use the bundled WHO 2000--2025, Segi or Scandinavian reference weights: ```{r, eval = FALSE} padronizar_idade( eventos = obitos_por_idade, populacao = habitantes_por_idade, idade = faixa_etaria, populacao_padrao = populacao_padrao("oms"), grupo = ano, confianca = 0.95 ) ``` ## Query conventions Dimension and filter values can be supplied using the labels displayed by TABNET, their raw values, or a one-based index where documented. Named filters should always use the stable keys returned by `datasus_opcoes()`. Online access for mortality data by municipality: ![](fig1.png)