---
title: "Outpatient Production Data from SIA with healthbR"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Outpatient Production Data from SIA with healthbR}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)
```

## Overview

The **SIA (Sistema de Informacoes Ambulatoriais)** records all outpatient procedures performed in the Brazilian public health system (SUS), including consultations, exams, and high-complexity procedures. It is managed by the Ministry of Health through DATASUS.

| Feature | Details |
|---------|---------|
| Coverage | Per state (UF), all 27 states |
| Years | 2008--2024 |
| Granularity | Monthly (one file per type/UF/month) |
| Unit | One row per outpatient procedure record |
| Format | .dbc files from DATASUS FTP |

## Getting started

```{r setup}
library(healthbR)
library(dplyr)
```

### Check available years

```{r}
sia_years()
sia_years(status = "all")
```

### Module information

```{r}
sia_info()
```

## File types

SIA organizes data into 13 file types. The default is PA (outpatient production):

| Type | Description |
|------|-------------|
| PA | Outpatient production (BPA, default) |
| BI | Individualized BPA |
| AD | APAC - Dialysis |
| AM | APAC - Chemotherapy/Radiotherapy |
| AN | APAC - Nephrology |
| AQ | APAC - Other procedures |
| AR | APAC - Orthopedic Surgery |
| AB | APAC - Bariatric Surgery |
| ACF | APAC - Cleft Lip/Palate |
| ATD | APAC - TFD (Treatment Away from Home) |
| AMP | APAC - Specialized Medicines |
| SAD | RAAS - Home Care |
| PS | RAAS - Psychosocial Care |

## Downloading data

### Basic download (PA type)

```{r}
outpatient <- sia_data(year = 2022, uf = "AC")
```

### Specific type

```{r}
# chemotherapy/radiotherapy APAC records
chemo <- sia_data(year = 2022, uf = "SP", type = "AM")
```

### Specific months

```{r}
outpatient <- sia_data(year = 2022, uf = "SP", month = 1:3)
```

### Filter by procedure

Use SIGTAP procedure code prefixes:

```{r}
# Medical consultations (group 03.01)
consults <- sia_data(year = 2022, uf = "SP", month = 1, procedure = "0301")

# Imaging exams (group 02.04)
imaging <- sia_data(year = 2022, uf = "SP", month = 1, procedure = "0204")
```

### Filter by diagnosis

```{r}
# Diabetes-related outpatient care (E10-E14)
diabetes <- sia_data(year = 2022, uf = "SP", month = 1, diagnosis = "E1")
```

### Select variables

```{r}
outpatient <- sia_data(
  year = 2022,
  uf = "SP",
  month = 1,
  vars = c("PA_PROC_ID", "PA_CIDPRI", "PA_SEXO", "PA_IDADE",
           "PA_MUNPCN", "PA_VALAPR")
)
```

## Key variables (PA type)

| Variable | Description |
|----------|-------------|
| PA_PROC_ID | Procedure code (SIGTAP) |
| PA_CIDPRI | Principal diagnosis (CID-10) |
| PA_SEXO | Sex (1=Male, 2=Female) |
| PA_IDADE | Patient age |
| PA_MUNPCN | Municipality of patient's residence |
| PA_VALAPR | Approved value (R$) |
| PA_QTDAPR | Approved quantity |
| PA_CODUNI | Health facility (CNES code) |
| PA_GESTAO | Management level |
| PA_CONDIC | Processing condition |

### Data dictionary

```{r}
sia_dictionary()
sia_dictionary("PA_SEXO")
```

### Explore variables

```{r}
sia_variables()
sia_variables(search = "valor")

# variables for a specific type
sia_variables(type = "AM")
```

## Example: Top procedures by volume

```{r}
outpatient <- sia_data(year = 2022, uf = "SP", month = 1)

top_procedures <- outpatient |>
  count(PA_PROC_ID, sort = TRUE) |>
  head(20)
```

## Example: Outpatient spending by diagnosis

```{r}
outpatient <- sia_data(year = 2022, uf = "SP", month = 1)

spending <- outpatient |>
  filter(!is.na(PA_CIDPRI), PA_CIDPRI != "") |>
  mutate(
    chapter = substr(PA_CIDPRI, 1, 1),
    value = as.numeric(PA_VALAPR)
  ) |>
  group_by(chapter) |>
  summarise(
    records = n(),
    total_value = sum(value, na.rm = TRUE)
  ) |>
  arrange(desc(total_value))
```

## Example: Chemotherapy APAC records

```{r}
chemo <- sia_data(year = 2022, uf = "SP", type = "AM", month = 1:6)

chemo |>
  count(month, name = "records") |>
  arrange(month)
```

## Smart type parsing

```{r}
# parsed types (default)
outpatient <- sia_data(year = 2022, uf = "AC", month = 1)
class(outpatient$PA_VALAPR)  # double

# all character
outpatient_raw <- sia_data(year = 2022, uf = "AC", month = 1, parse = FALSE)
```

## Cache and lazy evaluation

```{r}
sia_cache_status()
sia_clear_cache()

# lazy query
lazy <- sia_data(year = 2022, uf = "SP", lazy = TRUE)
lazy |>
  filter(PA_CIDPRI >= "E10", PA_CIDPRI <= "E14") |>
  collect()
```

## Further reading

- SIA on DATASUS (`datasus.saude.gov.br`)
- SIGTAP procedure table (`wiki.saude.gov.br/sigtap`)
- [SIH vignette](sih-hospital-admissions.html) for hospital admission data
