Column Metadata & Schemas
PySUS ships curated YAML schemas for SUS datasets, transcribed from official data dictionaries. These provide column names, descriptions, data types, value codes, and field rules.
Available Schemas
from pysus import available_databases
print(available_databases())
# ["sim", "sinan"]
Currently available:
SIM — Declaração de Óbito (death certificate)
SINAN — 30 disease notification schemas (dengue, peste, chikungunya, malaria, tuberculosis, etc.)
SINAN Diseases
The SINAN schemas cover these diseases:
Disease |
Schema File |
|---|---|
Dengue |
|
Chikungunya |
|
Peste |
|
Malaria |
|
Tuberculosis |
|
Hanseníase |
|
Hepatites |
|
Meningite |
|
Coqueluche |
|
Raiva |
|
Febre Amarela |
|
Chagas |
|
Leishmaniose Tegumentar |
|
Leishmaniose Visceral |
|
Leptospirose |
|
Esquistossomose |
|
Hantavirose |
|
Sífilis Congênita |
|
Sífilis Gestacional |
|
Tetano Neonatal |
|
Tetano |
|
Febre Tifoide |
|
Febre Maculosa |
|
Colera |
|
Difteria |
|
Botulismo |
|
Intoxicação Exógena |
|
Acidente por Animais |
|
Loading Column Metadata
from pysus import load_column_metadata
# Load columns for a specific SINAN disease
columns = load_column_metadata("sinan", "Dengue")
for col in columns[:5]:
print(f"{col['name']}: {col.get('description_pt', '')}")
# Load columns for SIM death certificate
columns = load_column_metadata("sim", "Declaracao de Obito - DO")
Each column dict contains:
name— column name in the data filetype— data type (string,date,integer)description_pt— Portuguese descriptiondescription_en— English description (if available)required— whether the field is mandatorycategories— value code mapping (e.g.,"1-Sim 2-Não 9-Ignorado")characteristics— field rules and notes from the official dictionaryformat— expected format hint (e.g.,"YYYYMMDD")
Searching Columns
Search across all datasets and schemas:
from pysus import search_columns
# Find a column by name across all datasets
results = search_columns(query="CON_CLASSI")
for r in results:
print(f"{r.dataset}/{r.endpoint}: {r.name}")
if r.categories:
print(f" Categories: {r.categories}")
# Restrict to a specific dataset
results = search_columns(dataset="sinan", query="DT_NOTIFIC")
# Restrict to a specific disease
results = search_columns(dataset="sinan", endpoint="peste")
Returns a list of ColumnInfo dataclasses with
attributes: name, description, description_en, dtype,
dataset, endpoint, categories, characteristics,
required, format.
Schema Format
Each YAML file follows this structure:
dengue:
- name: FEBRE
type: string
description_pt: "Informar qual sinal clínico"
type_info: "VARCHAR(1)"
required: true
categories: "1 – Sim 2 – Não"
characteristics: "Campo obrigatório"
- name: DT_NOTIFIC
field: "dt_notificacao"
type: date
description_pt: "Data da notificação"
required: true
format: "YYYYMMDD"
Schema fields:
name— column name (required)type—string,date,integer(required)description_pt— Portuguese descriptiondescription_en— English descriptiontype_info— raw SQL type (e.g.,VARCHAR(1))required— mandatory on the official formcategories— value code mappingcharacteristics— field rules, validation notesformat— expected format hintfield— alternative/alias column name