DATASUS SIH/SUS MCP
An MCP server providing access to Brazil's public hospital admissions data (SIH/SUS) from 1992 to 2025. It allows agents to query ICD-10 causes, ICSAP indicators, hospitalization trends, and rates per 100,000 inhabitants using Streamable HTTP, with provenance blocks citing DATASUS in every response.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://sih.sidneybissoli.com/mcpWhat its tools do
12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Query hospital admissions for specific diseases and regions
- Analyze ICSAP trends over time
- Compare hospitalization rates between Brazilian states
- Retrieve available data years and freshness
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- sih-br-mcp 1.8.2
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 12 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
12 advertised
list_csap_groups — Grupos CSAP (Portaria 221/2008)
Lista os 19 grupos de Condições Sensíveis à Atenção Primária (CSAP) conforme Portaria MS/SAS 221/2008. Retorna código, nome e códigos CID-10 de cada grupo.
{
"type": "object",
"properties": {
"group_code": {
"type": "string",
"description": "Código do grupo específico (ex: 'g01'). Se omitido, retorna todos."
},
"include_cid_codes": {
"type": "boolean",
"description": "Se true, inclui lista de códigos CID-10 (default: false)"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"total_groups",
"source",
"groups"
]
},
{
"required": [
"group"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"error": {
"type": "string",
"description": "Grupo CSAP não encontrado"
},
"group": {
"type": "object",
"required": [
"id",
"code",
"name_pt",
"name_en",
"diagnoses"
],
"properties": {
"id": {
"type": "number",
"description": "Número do grupo na Portaria, 1–19"
},
"code": {
"type": "string",
"description": "Código do grupo, g01–g19"
},
"name_en": {
"type": "string",
"description": "Nome em inglês"
},
"name_pt": {
"type": "string",
"description": "Nome em português"
},
"cid_codes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Todos os códigos CID-10 do grupo; só com `include_cid_codes: true`"
},
"diagnoses": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"cid10"
],
"properties": {
"name": {
"type": "string",
"description": "Diagnóstico"
},
"cid10": {
"type": "array",
"items": {
"type": "string"
},
"description": "Códigos CID-10 do diagnóstico"
}
},
"additionalProperties": false
},
"description": "Diagnósticos que compõem o grupo, com seus códigos"
}
},
"description": "O grupo pedido por `group_code`",
"additionalProperties": false
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"name",
"cid_count"
],
"properties": {
"code": {
"type": "string",
"description": "Código do grupo, g01–g19"
},
"name": {
"type": "string",
"description": "Nome do grupo em português"
},
"cid_codes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Códigos CID-10 do grupo; só com `include_cid_codes: true`"
},
"cid_count": {
"type": "number",
"description": "Quantos códigos CID-10 compõem o grupo"
}
},
"additionalProperties": false
},
"description": "Os 19 grupos, na ordem da Portaria"
},
"source": {
"type": "string",
"description": "Norma que define a lista (Portaria MS/SAS 221/2008)"
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"total_groups": {
"type": "number",
"description": "Número de grupos na lista (19)"
}
},
"description": "Os 19 grupos CSAP (lista completa) ou um grupo só, quando `group_code` é informado; `error` quando o código não existe",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_cid_chapters — Capítulos da CID-10
Lista os 22 capítulos da CID-10 com seus códigos e faixas de diagnóstico. Os cubos de 1992–1997 (diagnóstico em CID-9) trazem `cid_chapter` como o capítulo CID-10 equivalente (mapa por categoria em src/data/cid9-chapters.json).
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"total_chapters",
"chapters"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"chapters": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"roman",
"range",
"name_pt",
"name_en"
],
"properties": {
"code": {
"type": "string",
"description": "Capítulo em algarismo romano (chave usada em `cid_chapter` é o número, 1–22)"
},
"range": {
"type": "string",
"description": "Intervalo de códigos CID-10 (ex.: A00-B99)"
},
"roman": {
"type": "string",
"description": "Capítulo em algarismo romano"
},
"name_en": {
"type": "string",
"description": "Nome em inglês"
},
"name_pt": {
"type": "string",
"description": "Nome em português"
}
},
"additionalProperties": false
},
"description": "Os capítulos, na ordem da CID"
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"total_chapters": {
"type": "number",
"description": "Número de capítulos (22)"
}
},
"description": "Os 22 capítulos da CID-10 (versão 2019), com intervalo de códigos e nomes",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_available_years — Anos disponíveis e frescor dos cubos
Retorna os anos disponíveis nos dados do SIH-SUS carregados e o frescor dos cubos em relação ao espelho healthbr-data (`freshness.status`: current, stale, unknown, pending ou disabled; quando stale, lista por ano as partições reeditadas pelo MS, regeneradas, retiradas ou novas na janela). Por ano, o que muda entre as eras do SIH: `race_available` (raça/cor só de 2008), `cid_revision` (9 = CID-9 de 6 dígitos em 1992–1997, 10 = CID-10; 1997 tem as duas), `icsap_list_revision` (cid9-derivada, não oficial, em 1992–1997), `uf_basis` (arquivo em 1992–1997, residencia de 1998), `municipality_available`, `currency` e `records_date_imputed`.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"years",
"data_range",
"note",
"race_available",
"years_without_race",
"cid_revision",
"years_cid9",
"icsap_available",
"icsap_list_revision",
"uf_basis",
"years_uf_arquivo",
"municipality_available",
"currency",
"records_date_imputed",
"csap_universe",
"population_years",
"cubes_channel",
"freshness"
]
},
{
"required": [
"error",
"years"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"note": {
"type": "string",
"description": "Aviso sobre o que `years` significa"
},
"error": {
"type": "string",
"description": "Falha ao listar os anos"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com cubos Parquet presentes localmente"
},
"currency": {
"type": "object",
"description": "Moeda de `value` — chave é o ano (string)",
"additionalProperties": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"required": [
"from",
"to",
"code",
"symbol",
"name"
],
"properties": {
"to": {
"type": "string",
"description": "Última competência (AAAA-MM)"
},
"code": {
"type": "string",
"description": "Código ISO 4217 (BRE, BRR, BRL)"
},
"from": {
"type": "string",
"description": "Primeira competência (AAAA-MM)"
},
"name": {
"type": "string",
"description": "Nome da moeda"
},
"symbol": {
"type": "string",
"description": "Símbolo (Cr$, CR$, R$)"
}
},
"additionalProperties": false
},
"description": "Moeda de `value` por competência; null quando o sidecar não informa"
}
},
"uf_basis": {
"type": "object",
"description": "Base do eixo `uf` — chave é o ano (string)",
"additionalProperties": {
"enum": [
"residencia",
"arquivo"
],
"description": "Base do eixo `uf`"
}
},
"freshness": {
"type": "object",
"required": [
"status",
"checked_at",
"method",
"manifest_url",
"manifest_last_updated_local",
"manifest_last_updated_remote",
"cubes",
"error"
],
"properties": {
"cubes": {
"type": "array",
"items": {
"type": "object",
"required": [
"cube_year",
"reedited",
"reprocessed",
"removed",
"new_in_window",
"behind"
],
"properties": {
"behind": {
"type": "boolean",
"description": "true quando alguma lista acima tem item"
},
"removed": {
"type": "array",
"items": {
"type": "string"
},
"description": "Partições que saíram do manifesto"
},
"reedited": {
"type": "array",
"items": {
"type": "string"
},
"description": "Partições cujo .dbc de origem mudou (reedição do MS)"
},
"cube_year": {
"type": "number",
"description": "Ano do cubo"
},
"reprocessed": {
"type": "array",
"items": {
"type": "string"
},
"description": "Partições regeneradas pelo espelho"
},
"new_in_window": {
"type": "array",
"items": {
"type": "string"
},
"description": "Competências publicadas depois do build"
}
},
"additionalProperties": false
},
"description": "Cubos atrasados frente ao espelho"
},
"error": {
"type": [
"string",
"null"
],
"description": "Erro da checagem; null quando não houve"
},
"method": {
"enum": [
"range",
"full",
null
],
"description": "Como checou: sonda parcial ou manifesto inteiro"
},
"status": {
"enum": [
"disabled",
"pending",
"current",
"stale",
"unknown"
],
"description": "Frescor dos cubos frente ao espelho"
},
"checked_at": {
"type": [
"string",
"null"
],
"description": "Instante (UTC) da última checagem; null se nunca terminou"
},
"manifest_url": {
"type": [
"string",
"null"
],
"description": "URL do manifesto do espelho"
},
"manifest_last_updated_local": {
"type": [
"string",
"null"
],
"description": "Manifesto com que os cubos foram gerados"
},
"manifest_last_updated_remote": {
"type": [
"string",
"null"
],
"description": "Manifesto público lido agora"
}
},
"description": "Frescor dos cubos locais frente ao espelho healthbr-data",
"additionalProperties": false
},
"data_range": {
"type": "object",
"required": [
"total_years"
],
"properties": {
"last_year": {
"type": "number",
"description": "Último ano local; ausente quando não há cubo"
},
"first_year": {
"type": "number",
"description": "Primeiro ano local; ausente quando não há cubo"
},
"total_years": {
"type": "number",
"description": "Quantos anos"
}
},
"description": "Intervalo dos anos locais",
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"years_cid9": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos em que o cubo usa CID-9 (1992–1997)"
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"cid_revision": {
"type": "object",
"description": "Internações por revisão da CID — chave é o ano (string)",
"additionalProperties": {
"type": "object",
"description": "Revisão da CID (\"9\" ou \"10\") → internações",
"additionalProperties": {
"type": [
"number",
"null"
],
"description": "Internações naquela revisão; null quando o sidecar não traz o total"
}
}
},
"csap_universe": {
"type": "object",
"description": "Universo do % ICSAP — chave é o ano (string)",
"additionalProperties": {
"type": [
"object",
"null"
],
"required": [
"method",
"records_in_universe",
"excluded"
],
"properties": {
"method": {
"type": "string",
"description": "Método (csapAIH)"
},
"excluded": {
"type": "object",
"description": "Motivo de exclusão → internações",
"additionalProperties": {
"type": "number",
"description": "Internações fora do universo por este motivo"
}
},
"records_in_universe": {
"type": [
"number",
"null"
],
"description": "Internações dentro do universo"
}
},
"description": "Universo do % ICSAP como o csapAIH; null em cubo anterior ao builder 2.6.0",
"additionalProperties": false
}
},
"cubes_channel": {
"type": "object",
"required": [
"enabled",
"base_url",
"published_years",
"cache_dir",
"manifest_source"
],
"properties": {
"note": {
"type": "string",
"description": "Como o cache baixa os anos pedidos"
},
"enabled": {
"type": "boolean",
"description": "false quando o cache de cubos está desligado"
},
"base_url": {
"type": "string",
"description": "URL do canal público de cubos"
},
"cache_dir": {
"type": [
"string",
"null"
],
"description": "Pasta do cache local; null quando desligado"
},
"manifest_source": {
"enum": [
"remote",
"disk",
"none",
"disabled"
],
"description": "De onde veio o manifesto"
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos publicados no manifesto do canal"
},
"manifest_generated_at": {
"type": [
"string",
"null"
],
"description": "Quando o manifesto foi gerado; null sem manifesto"
}
},
"description": "Canal público dos cubos e cache local",
"additionalProperties": false
},
"race_available": {
"type": "object",
"description": "Raça/cor disponível — chave é o ano (string)",
"additionalProperties": {
"type": "boolean",
"description": "true quando o cubo tem raça/cor"
}
},
"icsap_available": {
"type": "object",
"description": "ICSAP disponível — chave é o ano (string)",
"additionalProperties": {
"type": "boolean",
"description": "true quando o cubo tem a marcação ICSAP"
}
},
"population_years": {
"type": [
"object",
"null"
],
"required": [
"first_year",
"last_year",
"detailed",
"aggregated"
],
"properties": {
"detailed": {
"type": [
"object",
"null"
],
"required": [
"first_year",
"last_year",
"source",
"age"
],
"properties": {
"age": {
"type": "string",
"description": "Grão etário do arquivo"
},
"source": {
"type": "string",
"description": "Arquivo parquet que serve o intervalo"
},
"last_year": {
"type": "number",
"description": "Último ano coberto"
},
"age_groups": {
"type": "array",
"items": {
"type": "string"
},
"description": "Faixas etárias quinquenais (só no arquivo agregado)"
},
"first_year": {
"type": "number",
"description": "Primeiro ano coberto"
}
},
"description": "pop_uf.parquet — idade simples por UF e sexo (projeções IBGE, 2000+)",
"additionalProperties": false
},
"last_year": {
"type": "number",
"description": "Último ano com população por UF"
},
"aggregated": {
"type": [
"object",
"null"
],
"required": [
"first_year",
"last_year",
"source",
"age"
],
"properties": {
"age": {
"type": "string",
"description": "Grão etário do arquivo"
},
"source": {
"type": "string",
"description": "Arquivo parquet que serve o intervalo"
},
"last_year": {
"type": "number",
"description": "Último ano coberto"
},
"age_groups": {
"type": "array",
"items": {
"type": "string"
},
"description": "Faixas etárias quinquenais (só no arquivo agregado)"
},
"first_year": {
"type": "number",
"description": "Primeiro ano coberto"
}
},
"description": "pop_uf_agregado.parquet — faixa etária quinquenal por UF e sexo (1991–1999)",
"additionalProperties": false
},
"first_year": {
"type": "number",
"description": "Primeiro ano com população por UF (união dos dois arquivos)"
}
},
"description": "Cobertura dos arquivos de população por UF: o que as ferramentas de taxa aceitam",
"additionalProperties": false
},
"years_uf_arquivo": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos em que `uf` é a do estabelecimento (1992–1997)"
},
"years_without_race": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos sem raça/cor (1998–2007)"
},
"icsap_list_revision": {
"type": "object",
"description": "Lista ICSAP por revisão da CID — chave é o ano (string)",
"additionalProperties": {
"type": "object",
"description": "Revisão → lista",
"additionalProperties": {
"type": "string",
"description": "Lista usada (portaria-221-2008 ou cid9-derivada)"
}
}
},
"records_date_imputed": {
"type": "object",
"description": "Datas imputadas — chave é o ano (string)",
"additionalProperties": {
"type": "number",
"description": "Internações que entraram com data imputada"
}
},
"municipality_available": {
"type": "object",
"description": "Município disponível — chave é o ano (string)",
"additionalProperties": {
"type": "boolean",
"description": "false quando `municipality_code` é nulo em todas as linhas"
}
}
},
"description": "Anos com cubo local, o que cada ano carrega (revisão da CID, raça/cor, município, moeda, universo ICSAP), cobertura da população, canal de cubos e frescor",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_hospitalizations — Internações do SUS com filtros
Consulta dados de internações hospitalares do SUS com filtros flexíveis. Permite agregar por múltiplas dimensões (UF, CID, sexo, idade, raça, ano/mês). Raça/cor só existe de 2008 em diante: em 1998–2007 `race` é nulo (ver get_available_years.race_available). Série desde 1992: em 1992–1997 o diagnóstico é CID-9 decodificado por tabela (`cid_group` = categoria de 3 dígitos, `cid_chapter` = capítulo CID-10 equivalente; agrupar por `cid_revision` separa 9 e 10 — 1997 tem os dois), `uf` é a UF do ARQUIVO (estabelecimento), não de residência, e `value` é nominal na moeda da época — ver get_available_years (uf_basis, currency) e as `notes` da resposta. `exclusion` (agrupável) marca as internações fora do universo do % ICSAP do csapAIH (procedimento_obstetrico, parto, longa_permanencia; nula = dentro).
{
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lista de UFs (ex: ['SP', 'RJ']). Se omitido, todas."
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"race": {
"type": "array",
"items": {
"type": "string"
},
"description": "Raça/cor (branca, preta, parda, amarela, indigena, ignorado). Só existe de 2008 em diante: em 1998–2007 race é nulo e o filtro não alcança esses anos."
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para consultar (ex: [2023, 2024]); série de 1992 em diante"
},
"limit": {
"type": "integer",
"description": "Limitar número de resultados"
},
"month": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Meses (1-12). Se omitido, todos."
},
"age_max": {
"type": "integer",
"description": "Idade máxima em anos"
},
"age_min": {
"type": "integer",
"description": "Idade mínima em anos"
},
"is_csap": {
"type": "boolean",
"description": "Filtrar apenas CSAP (true) ou não-CSAP (false)"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"month",
"uf",
"cid_chapter",
"cid_revision",
"cid_group",
"sex",
"age",
"race",
"exclusion",
"is_csap",
"csap_group"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"cid_chapter": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Capítulos CID-10 (1-22). Se omitido, todos."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"data",
"summary",
"filters_applied"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"n_hospitalizations",
"total_days",
"total_value",
"deaths"
],
"properties": {
"uf": {
"type": "string",
"description": "UF de residência — do estabelecimento em 1992–1997 (group_by: uf)"
},
"age": {
"type": "number",
"description": "Idade em anos (group_by: age)"
},
"sex": {
"type": "string",
"description": "Sexo: M ou F (group_by: sex)"
},
"race": {
"type": [
"string",
"null"
],
"description": "Raça/cor; null em 1998–2007, quando a AIH não trazia o campo (group_by: race)"
},
"year": {
"type": "number",
"description": "Ano da internação (DT_INTER) — group_by: year"
},
"month": {
"type": "number",
"description": "Mês, 1–12 (group_by: month)"
},
"deaths": {
"type": [
"number",
"null"
],
"description": "Óbitos; null quando o recorte não tem nenhuma linha"
},
"is_csap": {
"type": "boolean",
"description": "Internação por condição sensível à atenção primária (group_by: is_csap)"
},
"cid_group": {
"type": "string",
"description": "Categoria CID de 3 dígitos (group_by: cid_group)"
},
"exclusion": {
"type": [
"string",
"null"
],
"description": "Motivo de exclusão do universo csapAIH; null quando dentro do universo (group_by: exclusion)"
},
"csap_group": {
"type": [
"string",
"null"
],
"description": "Grupo CSAP g01–g19; null quando a internação não é sensível (group_by: csap_group)"
},
"total_days": {
"type": [
"number",
"null"
],
"description": "Dias de permanência; null quando o recorte não tem nenhuma linha"
},
"cid_chapter": {
"type": "number",
"description": "Capítulo da CID, 1–22 (group_by: cid_chapter)"
},
"total_value": {
"type": [
"number",
"null"
],
"description": "Valor total pago (R$); null quando o recorte não tem nenhuma linha"
},
"cid_revision": {
"type": "number",
"description": "Revisão da CID do diagnóstico: 9 ou 10 (group_by: cid_revision)"
},
"n_hospitalizations": {
"type": [
"number",
"null"
],
"description": "Internações; null quando o recorte não tem nenhuma linha"
}
},
"description": "Uma linha por combinação de `group_by` (só as colunas pedidas aparecem)",
"additionalProperties": false
},
"description": "Linhas agrupadas (vazio no caminho de erro-mole)"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"summary": {
"type": "object",
"required": [
"total_hospitalizations",
"total_days",
"total_value",
"deaths",
"hospital_mortality_rate",
"records_returned"
],
"properties": {
"deaths": {
"type": "number",
"description": "Óbitos"
},
"total_days": {
"type": "number",
"description": "Dias de permanência"
},
"total_value": {
"type": "number",
"description": "Valor pago (R$), duas casas"
},
"records_returned": {
"type": "number",
"description": "Linhas em `data`"
},
"total_hospitalizations": {
"type": "number",
"description": "Internações no recorte inteiro"
},
"hospital_mortality_rate": {
"type": "number",
"description": "Óbitos / internações × 100, duas casas"
}
},
"description": "Totais do recorte inteiro (não do trecho devolvido, quando truncado)",
"additionalProperties": false
},
"truncated": {
"type": "object",
"required": [
"returned",
"total"
],
"properties": {
"total": {
"type": "number",
"description": "Linhas que a consulta produziu"
},
"returned": {
"type": "number",
"description": "Linhas devolvidas (o teto)"
}
},
"description": "Presente só quando `data` foi truncado no teto de linhas; os totais em `summary` são do conjunto inteiro",
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"filters_applied": {
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lista de UFs (ex: ['SP', 'RJ']). Se omitido, todas."
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"race": {
"type": "array",
"items": {
"type": "string"
},
"description": "Raça/cor (branca, preta, parda, amarela, indigena, ignorado). Só existe de 2008 em diante: em 1998–2007 race é nulo e o filtro não alcança esses anos."
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para consultar (ex: [2023, 2024]); série de 1992 em diante"
},
"limit": {
"type": "integer",
"description": "Limitar número de resultados"
},
"month": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Meses (1-12). Se omitido, todos."
},
"age_max": {
"type": "integer",
"description": "Idade máxima em anos"
},
"age_min": {
"type": "integer",
"description": "Idade mínima em anos"
},
"is_csap": {
"type": "boolean",
"description": "Filtrar apenas CSAP (true) ou não-CSAP (false)"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"month",
"uf",
"cid_chapter",
"cid_revision",
"cid_group",
"sex",
"age",
"race",
"exclusion",
"is_csap",
"csap_group"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"cid_chapter": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Capítulos CID-10 (1-22). Se omitido, todos."
}
},
"description": "Os argumentos recebidos, ecoados",
"additionalProperties": false
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Internações do cubo de causas, agrupadas conforme `group_by`, com totais do recorte inteiro; `error` quando nenhum ano pedido tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_hospitalization_trends — Séries temporais de internações
Retorna séries temporais de internações (mensal ou anual). Útil para análise de tendências e sazonalidade. O ano e o mês são os da INTERNAÇÃO (DT_INTER), não a competência de faturamento; o ano mais recente cresce até a janela dele fechar (AIH faturada com atraso), e o DATASUS reedita arquivos de competências passadas — cada número é a versão do download do espelho. Série desde 1992; em 1992–1997 `uf` é a UF do arquivo (estabelecimento) e as internações sem data na fonte (1992-01..04 e 1993-01) entram no mês de faturamento — ver get_available_years e as `notes`.
{
"type": "object",
"required": [
"year_start",
"year_end"
],
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para filtrar"
},
"year_end": {
"type": "integer",
"description": "Ano final"
},
"year_start": {
"type": "integer",
"description": "Ano inicial"
},
"cid_chapter": {
"type": "integer",
"description": "Capítulo CID-10 específico"
},
"granularity": {
"enum": [
"monthly",
"yearly"
],
"type": "string",
"description": "Granularidade temporal (default: yearly)"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"granularity",
"period",
"series"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {},
"description": "Sempre vazio: só aparece no caminho de erro-mole do funil"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"period": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": [
"number",
"string"
],
"description": "Ano (anual) ou AAAA-MM (mensal) final"
},
"start": {
"type": [
"number",
"string"
],
"description": "Ano (anual) ou AAAA-MM (mensal) inicial"
}
},
"description": "Intervalo pedido",
"additionalProperties": false
},
"series": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"year",
"n_hospitalizations",
"deaths"
],
"properties": {
"year": {
"type": "number",
"description": "Ano da internação (DT_INTER)"
},
"deaths": {
"type": "number",
"description": "Óbitos no ano"
},
"n_hospitalizations": {
"type": "number",
"description": "Internações no ano"
}
},
"description": "Ponto anual",
"additionalProperties": false
},
{
"type": "object",
"required": [
"year_month",
"n",
"deaths"
],
"properties": {
"n": {
"type": "number",
"description": "Internações no mês"
},
"deaths": {
"type": "number",
"description": "Óbitos no mês"
},
"year_month": {
"type": "string",
"description": "Ano-mês da INTERNAÇÃO (DT_INTER), AAAA-MM — não a competência de faturamento; só nas internações sem DT_INTER na fonte (1992-01..04, 1993-01) é a competência"
}
},
"description": "Ponto mensal",
"additionalProperties": false
}
]
},
"description": "Um ponto por ano ou por mês, em ordem cronológica"
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"granularity": {
"enum": [
"yearly",
"monthly"
],
"description": "Grão da série"
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Série temporal de internações, anual (`year`) ou mensal (`year_month`); `error` quando nenhum ano do intervalo tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}compare_regions — Comparação entre UFs e regiões
Compara internações entre UFs ou regiões do Brasil. Gera rankings e identifica variações regionais. Em 1992–1997 `uf` é a UF do arquivo (estabelecimento), não de residência — ver get_available_years.uf_basis e as `notes`.
{
"type": "object",
"properties": {
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para consultar"
},
"limit": {
"type": "integer",
"description": "Número de resultados (default: 10)"
},
"metric": {
"enum": [
"n",
"deaths"
],
"type": "string",
"description": "Métrica para ranking (default: n)"
},
"is_csap": {
"type": "boolean",
"description": "Filtrar apenas CSAP"
},
"compare_by": {
"enum": [
"uf",
"region"
],
"type": "string",
"description": "Comparar por UF ou região (default: uf)"
},
"cid_chapter": {
"type": "integer",
"description": "Capítulo CID-10 específico"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"compare_by",
"metric",
"ranking",
"total_locations"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {},
"description": "Sempre vazio: só aparece no caminho de erro-mole do funil"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"metric": {
"enum": [
"n",
"deaths"
],
"description": "Métrica que ordena o ranking"
},
"ranking": {
"type": "array",
"items": {
"type": "object",
"required": [
"rank",
"uf",
"n_hospitalizations",
"deaths",
"mortality_rate"
],
"properties": {
"uf": {
"type": "string",
"description": "UF"
},
"rank": {
"type": "number",
"description": "Posição, 1 = maior"
},
"deaths": {
"type": "number",
"description": "Óbitos"
},
"mortality_rate": {
"type": "number",
"description": "Óbitos / internações × 100, duas casas"
},
"n_hospitalizations": {
"type": "number",
"description": "Internações"
}
},
"additionalProperties": false
},
"description": "Ranking em ordem decrescente da métrica"
},
"compare_by": {
"enum": [
"uf",
"region"
],
"description": "Eixo da comparação (hoje ambos agrupam por UF)"
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"total_locations": {
"type": "number",
"description": "Quantas localidades no ranking"
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Ranking de UFs por internações ou óbitos; `error` quando nenhum ano pedido tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_icsap — Internações por condições sensíveis (ICSAP)
Consulta internações por Condições Sensíveis à Atenção Primária (ICSAP). Permite filtros por grupo CSAP, UF, município, sexo, idade e raça. Raça/cor só existe de 2008 em diante: em 1998–2007 `race` é nulo (ver get_available_years.race_available). Série desde 1992: em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+), `uf` é a UF do arquivo e `municipality_code` é nulo — ver get_available_years (icsap_list_revision, uf_basis) e as `notes`. Percentual no universo do pacote R csapAIH por padrão (`universe`): fora do numerador e do denominador as internações por procedimento obstétrico, parto e longa permanência.
{
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para filtrar"
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"race": {
"type": "array",
"items": {
"type": "string"
},
"description": "Raça/cor (branca, preta, parda, amarela, indigena, ignorado). Só existe de 2008 em diante: em 1998–2007 race é nulo e o filtro não alcança esses anos."
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para consultar"
},
"age_max": {
"type": "integer",
"description": "Idade máxima"
},
"age_min": {
"type": "integer",
"description": "Idade mínima"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"uf",
"municipality_code",
"cid_revision",
"csap_group",
"sex",
"age",
"race"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"universe": {
"enum": [
"csapaih",
"all"
],
"type": "string",
"description": "Universo do % ICSAP: 'csapaih' (padrão) tira do numerador e do denominador as internações por procedimento obstétrico, com diagnóstico de parto (O80-O84) e as AIH de longa permanência, como o pacote R csapAIH (Nedel); 'all' conta todas as internações."
},
"csap_group": {
"type": "array",
"items": {
"type": "string"
},
"description": "Grupos CSAP (ex: ['g01', 'g05'])"
},
"municipality_code": {
"type": "string",
"description": "Código IBGE do município (6 dígitos)"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"data",
"notes",
"summary",
"filters_applied"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"n_icsap",
"n_total",
"icsap_percentage",
"total_days",
"total_value",
"deaths"
],
"properties": {
"uf": {
"type": "string",
"description": "UF de residência — do estabelecimento em 1992–1997 (group_by: uf)"
},
"age": {
"type": "number",
"description": "Idade em anos (group_by: age)"
},
"sex": {
"type": "string",
"description": "Sexo: M ou F (group_by: sex)"
},
"race": {
"type": [
"string",
"null"
],
"description": "Raça/cor; null em 1998–2007 (group_by: race)"
},
"year": {
"type": "number",
"description": "Ano da internação (DT_INTER) — group_by: year"
},
"deaths": {
"type": "number",
"description": "Óbitos nas ICSAP"
},
"n_icsap": {
"type": "number",
"description": "Internações por condições sensíveis à atenção primária no universo escolhido"
},
"n_total": {
"type": "number",
"description": "Total de internações no universo escolhido (denominador)"
},
"csap_group": {
"type": [
"string",
"null"
],
"description": "Grupo CSAP g01–g19 (group_by: csap_group)"
},
"total_days": {
"type": "number",
"description": "Dias de permanência das ICSAP"
},
"total_value": {
"type": "number",
"description": "Valor pago das ICSAP (R$)"
},
"cid_revision": {
"type": "number",
"description": "Revisão da CID: 9 ou 10 (group_by: cid_revision)"
},
"icsap_percentage": {
"type": "number",
"description": "n_icsap / n_total × 100, duas casas"
},
"municipality_code": {
"type": [
"string",
"null"
],
"description": "Código IBGE do município de residência (6 dígitos); null em 1992–1997 (group_by: municipality_code)"
}
},
"description": "Uma linha por combinação de `group_by` (só as colunas pedidas aparecem)",
"additionalProperties": false
},
"description": "Linhas agrupadas (vazio no caminho de erro-mole)"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"summary": {
"type": "object",
"required": [
"total_icsap",
"total_hospitalizations",
"icsap_percentage",
"total_days",
"total_value",
"deaths",
"records_returned"
],
"properties": {
"deaths": {
"type": "number",
"description": "Óbitos nas ICSAP"
},
"total_days": {
"type": "number",
"description": "Dias de permanência das ICSAP"
},
"total_icsap": {
"type": "number",
"description": "ICSAP no recorte inteiro"
},
"total_value": {
"type": "number",
"description": "Valor pago das ICSAP (R$)"
},
"icsap_percentage": {
"type": "number",
"description": "total_icsap / total_hospitalizations × 100, duas casas"
},
"records_returned": {
"type": "number",
"description": "Linhas em `data`"
},
"total_hospitalizations": {
"type": "number",
"description": "Internações no universo (denominador)"
}
},
"description": "Totais do recorte inteiro, calculados sem agrupamento",
"additionalProperties": false
},
"truncated": {
"type": "object",
"required": [
"returned",
"total"
],
"properties": {
"total": {
"type": "number",
"description": "Linhas que a consulta produziu"
},
"returned": {
"type": "number",
"description": "Linhas devolvidas (o teto)"
}
},
"description": "Presente só quando `data` foi truncado no teto de linhas; os totais em `summary` são do conjunto inteiro",
"additionalProperties": false
},
"provenance": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"description": "Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, população…); licenças nunca se fundem"
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"filters_applied": {
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para filtrar"
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"race": {
"type": "array",
"items": {
"type": "string"
},
"description": "Raça/cor (branca, preta, parda, amarela, indigena, ignorado). Só existe de 2008 em diante: em 1998–2007 race é nulo e o filtro não alcança esses anos."
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para consultar"
},
"age_max": {
"type": "integer",
"description": "Idade máxima"
},
"age_min": {
"type": "integer",
"description": "Idade mínima"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"uf",
"municipality_code",
"cid_revision",
"csap_group",
"sex",
"age",
"race"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"universe": {
"enum": [
"csapaih",
"all"
],
"type": "string",
"description": "Universo do % ICSAP: 'csapaih' (padrão) tira do numerador e do denominador as internações por procedimento obstétrico, com diagnóstico de parto (O80-O84) e as AIH de longa permanência, como o pacote R csapAIH (Nedel); 'all' conta todas as internações."
},
"csap_group": {
"type": "array",
"items": {
"type": "string"
},
"description": "Grupos CSAP (ex: ['g01', 'g05'])"
},
"municipality_code": {
"type": "string",
"description": "Código IBGE do município (6 dígitos)"
}
},
"description": "Os argumentos recebidos, ecoados",
"additionalProperties": false
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Internações por condições sensíveis à atenção primária, agrupadas conforme `group_by`, com totais e a nota do universo; `error` quando nenhum ano pedido tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_icsap_indicators — Indicadores de ICSAP
Calcula indicadores de ICSAP: percentual (ICSAP/Total×100). Métricas-chave para avaliar a Atenção Primária. Agrupar por raça só faz sentido de 2008 em diante: em 1998–2007 `race` é nulo (ver get_available_years.race_available). Em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+) e `uf` é a UF do arquivo — ver as `notes`. Percentual no universo do pacote R csapAIH por padrão (`universe`): fora do numerador e do denominador as internações por procedimento obstétrico, parto e longa permanência.
{
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para calcular"
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para calcular"
},
"age_max": {
"type": "integer",
"description": "Idade máxima"
},
"age_min": {
"type": "integer",
"description": "Idade mínima"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"uf",
"cid_revision",
"sex",
"race"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"universe": {
"enum": [
"csapaih",
"all"
],
"type": "string",
"description": "Universo do % ICSAP: 'csapaih' (padrão) tira do numerador e do denominador as internações por procedimento obstétrico, com diagnóstico de parto (O80-O84) e as AIH de longa permanência, como o pacote R csapAIH (Nedel); 'all' conta todas as internações."
},
"municipality_code": {
"type": "string",
"description": "Código IBGE do município"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"data",
"notes",
"indicators_calculated",
"note"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"n_icsap",
"n_total",
"icsap_percentage",
"total_days",
"total_value",
"deaths"
],
"properties": {
"uf": {
"type": "string",
"description": "UF de residência — do estabelecimento em 1992–1997 (group_by: uf)"
},
"age": {
"type": "number",
"description": "Idade em anos (group_by: age)"
},
"sex": {
"type": "string",
"description": "Sexo: M ou F (group_by: sex)"
},
"race": {
"type": [
"string",
"null"
],
"description": "Raça/cor; null em 1998–2007 (group_by: race)"
},
"year": {
"type": "number",
"description": "Ano da internação (DT_INTER) — group_by: year"
},
"deaths": {
"type": "number",
"description": "Óbitos nas ICSAP"
},
"n_icsap": {
"type": "number",
"description": "Internações por condições sensíveis à atenção primária no universo escolhido"
},
"n_total": {
"type": "number",
"description": "Total de internações no universo escolhido (denominador)"
},
"csap_group": {
"type": [
"string",
"null"
],
"description": "Grupo CSAP g01–g19 (group_by: csap_group)"
},
"total_days": {
"type": "number",
"description": "Dias de permanência das ICSAP"
},
"total_value": {
"type": "number",
"description": "Valor pago das ICSAP (R$)"
},
"cid_revision": {
"type": "number",
"description": "Revisão da CID: 9 ou 10 (group_by: cid_revision)"
},
"icsap_percentage": {
"type": "number",
"description": "n_icsap / n_total × 100, duas casas"
},
"municipality_code": {
"type": [
"string",
"null"
],
"description": "Código IBGE do município de residência (6 dígitos); null em 1992–1997 (group_by: municipality_code)"
}
},
"description": "Uma linha por combinação de `group_by` (só as colunas pedidas aparecem)",
"additionalProperties": false
},
"description": "Um estrato por linha (vazio no caminho de erro-mole)"
},
"note": {
"type": "string",
"description": "Fórmula do indicador — ou, no caminho de erro-mole, como obter o dado"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"truncated": {
"type": "object",
"required": [
"returned",
"total"
],
"properties": {
"total": {
"type": "number",
"description": "Linhas que a consulta produziu"
},
"returned": {
"type": "number",
"description": "Linhas devolvidas (o teto)"
}
},
"description": "Presente só quando `data` foi truncado no teto de linhas; os totais em `summary` são do conjunto inteiro",
"additionalProperties": false
},
"provenance": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"description": "Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, população…); licenças nunca se fundem"
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
},
"indicators_calculated": {
"type": "array",
"items": {
"type": "string"
},
"description": "Indicadores presentes nas linhas (icsap_percentage)"
}
},
"description": "Percentual de ICSAP por estrato de `group_by`, com a fórmula e a nota do universo; `error` quando nenhum ano pedido tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}rank_csap_groups — Ranking dos grupos CSAP
Gera ranking dos 19 grupos CSAP por número de internações, dias de internação ou valor. Identifica principais causas evitáveis. Em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+) e `value` é nominal na moeda da época — ver as `notes`. Universo do pacote R csapAIH por padrão (`universe`): fora as internações por procedimento obstétrico, parto e longa permanência.
{
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para filtrar"
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para consultar"
},
"limit": {
"type": "integer",
"maximum": 19,
"minimum": 1,
"description": "Número de grupos no ranking (default: 19)"
},
"metric": {
"enum": [
"n",
"days",
"value",
"deaths"
],
"type": "string",
"description": "Métrica para ranking (default: n)"
},
"age_max": {
"type": "integer",
"description": "Idade máxima"
},
"age_min": {
"type": "integer",
"description": "Idade mínima"
},
"universe": {
"enum": [
"csapaih",
"all"
],
"type": "string",
"description": "Universo do % ICSAP: 'csapaih' (padrão) tira do numerador e do denominador as internações por procedimento obstétrico, com diagnóstico de parto (O80-O84) e as AIH de longa permanência, como o pacote R csapAIH (Nedel); 'all' conta todas as internações."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"metric",
"ranking",
"notes",
"concentration",
"total_groups"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {},
"description": "Sempre vazio: só aparece no caminho de erro-mole do funil"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"metric": {
"enum": [
"n",
"days",
"value",
"deaths"
],
"description": "Métrica que ordena"
},
"ranking": {
"type": "array",
"items": {
"type": "object",
"required": [
"rank",
"csap_group",
"csap_name",
"metric_value",
"pct_of_total",
"n_hospitalizations",
"total_days",
"total_value",
"deaths"
],
"properties": {
"rank": {
"type": "number",
"description": "Posição, 1 = maior"
},
"deaths": {
"type": "number",
"description": "Óbitos"
},
"csap_name": {
"type": "string",
"description": "Nome do grupo"
},
"csap_group": {
"type": "string",
"description": "Grupo CSAP g01–g19"
},
"total_days": {
"type": "number",
"description": "Dias de permanência"
},
"total_value": {
"type": "number",
"description": "Valor pago (R$)"
},
"metric_value": {
"type": "number",
"description": "Valor da métrica escolhida"
},
"pct_of_total": {
"type": "number",
"description": "Participação do grupo no total da métrica, %"
},
"n_hospitalizations": {
"type": "number",
"description": "Internações do grupo"
}
},
"additionalProperties": false
},
"description": "Ranking em ordem decrescente da métrica"
},
"provenance": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"description": "Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, população…); licenças nunca se fundem"
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"total_groups": {
"type": "number",
"description": "Quantos grupos no ranking"
},
"concentration": {
"type": "object",
"required": [
"top_3_percentage",
"top_5_percentage"
],
"properties": {
"top_3_percentage": {
"type": "number",
"description": "Soma da participação dos 3 primeiros, %"
},
"top_5_percentage": {
"type": "number",
"description": "Soma dos 5 primeiros, %"
}
},
"description": "Concentração da métrica nos primeiros grupos do ranking (soma de `pct_of_total`, duas casas)",
"additionalProperties": false
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Os grupos CSAP ordenados pela métrica, com participação de cada um e concentração nos primeiros; `error` quando nenhum ano pedido tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}classify_as_csap — Classificar CID-10 como CSAP
Classifica um ou mais códigos CID-10 como CSAP ou não. Retorna o grupo CSAP correspondente se aplicável. Aceita as duas notações do mesmo código — `J18.1` (OMS) e `J181` (SIH) — com a mesma resposta. Código que NÃO é CID-10 não é classificado: volta com `is_csap: null` e `error` próprio, nunca `false` (que afirmaria que a condição existe e não é sensível). Só CID-10: os códigos CID-9 de 6 dígitos do SIH de 1992–1997 são classificados no build pela lista derivada (src/data/csap-groups-cid9.json), não por esta ferramenta.
{
"type": "object",
"required": [
"cid_codes"
],
"properties": {
"cid_codes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Códigos CID-10 para classificar (ex: ['J18', 'A09', 'K35'])"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"classifications",
"summary"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"error": {
"type": "string",
"description": "Só quando houver código não classificado: quantos foram e para onde olhar"
},
"summary": {
"type": "object",
"required": [
"total",
"csap",
"non_csap"
],
"properties": {
"csap": {
"type": "number",
"description": "Quantos são sensíveis"
},
"total": {
"type": "number",
"description": "Códigos informados"
},
"non_csap": {
"type": "number",
"description": "Quantos são CID-10 e não são sensíveis (não inclui os não classificados)"
},
"not_classified": {
"type": "number",
"description": "Só quando houver: quantos não são CID-10"
}
},
"description": "Contagem dos códigos informados: sensíveis, não sensíveis e não classificados",
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"classifications": {
"type": "array",
"items": {
"type": "object",
"required": [
"cid",
"is_csap",
"csap_group",
"csap_name"
],
"properties": {
"cid": {
"type": "string",
"description": "Código como foi informado"
},
"error": {
"type": "string",
"description": "Só nas entradas não classificadas: por que o código não é CID-10"
},
"is_csap": {
"type": [
"boolean",
"null"
],
"description": "true quando o código cai em algum grupo CSAP; false quando é CID-10 e não cai; null quando não é um código CID-10 (não classificado — veja `error` da entrada)"
},
"csap_name": {
"type": [
"string",
"null"
],
"description": "Nome do grupo; null quando não é sensível ou não foi classificado"
},
"csap_group": {
"type": [
"string",
"null"
],
"description": "Grupo CSAP g01–g19; null quando não é sensível ou não foi classificado"
}
},
"additionalProperties": false
},
"description": "Uma entrada por código, na ordem informada"
}
},
"description": "Cada código CID-10 informado classificado como sensível (com o grupo) ou não; `is_csap` é null no código que não é CID-10, que não recebe classificação",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_hospitalization_rates — Taxas de internação por população
Calcula taxas de internação por população. A taxa sai em `rate`, na base declarada em `rate_per` (1000, 10000 ou 100000; default 100000). Denominador lido de dois arquivos, informados em get_available_years.population_years: projeções do IBGE por idade simples de 2000 em diante (pop_uf.parquet) e, de 1991 a 1999, população por faixa etária quinquenal somada dos municípios (pop_uf_agregado.parquet) — antes de 2000 o recorte por idade só vale nos limites das faixas (age_min múltiplo de 5, age_max terminado em 4 ou 9, ou 80+). A resposta diz qual arquivo serviu a cada ano (population_source) e avisa quando mistura os dois.
{
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para filtrar"
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para calcular"
},
"age_max": {
"type": "integer",
"description": "Idade máxima"
},
"age_min": {
"type": "integer",
"description": "Idade mínima"
},
"is_csap": {
"type": "boolean",
"description": "Filtrar apenas CSAP"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"uf",
"sex"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"rate_per": {
"enum": [
1000,
10000,
100000
],
"type": "integer",
"description": "Taxa por X habitantes (default: 100000)"
},
"rate_type": {
"enum": [
"crude",
"specific"
],
"type": "string",
"description": "Tipo de taxa: crude (bruta) ou specific (específica por filtro)"
},
"cid_chapter": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Capítulos CID-10 (1-22)"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"data",
"summary",
"metadata"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"n_hospitalizations",
"deaths",
"population",
"rate",
"rate_per",
"rate_per_100k",
"population_source",
"mortality_rate"
],
"properties": {
"uf": {
"type": "string",
"description": "UF (quando agrupado por UF ou mais de uma UF)"
},
"rate": {
"type": "number",
"description": "Internações por `rate_per` habitantes, com no mínimo 3 algarismos significativos e nunca menos de duas casas (taxa pequena não vira 0)"
},
"year": {
"type": "number",
"description": "Ano da internação (DT_INTER), quando agrupado por ano ou mais de um ano"
},
"deaths": {
"type": "number",
"description": "Óbitos"
},
"rate_per": {
"type": "number",
"description": "Base da taxa (1000, 10000 ou 100000)"
},
"population": {
"type": "number",
"description": "População do estrato (denominador)"
},
"rate_per_100k": {
"type": "number",
"deprecated": true,
"description": "DEPRECADO — use `rate` com `rate_per`. Internações por 100 mil habitantes, qualquer que seja `rate_per`, mesmo arredondamento de `rate`; sai numa versão futura"
},
"mortality_rate": {
"type": "number",
"description": "Óbitos / internações × 100, duas casas"
},
"population_source": {
"enum": [
"detailed",
"aggregated",
null
],
"description": "Arquivo de população que serviu o ano"
},
"n_hospitalizations": {
"type": "number",
"description": "Internações"
}
},
"additionalProperties": false
},
"description": "Um estrato por linha (vazio quando não há internação no recorte)"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"summary": {
"type": "object",
"required": [
"total_hospitalizations",
"total_population",
"overall_rate",
"rate_per",
"rate_type"
],
"properties": {
"rate_per": {
"type": "number",
"description": "Base da taxa"
},
"rate_type": {
"enum": [
"crude",
"specific"
],
"description": "Bruta ou específica"
},
"overall_rate": {
"type": "number",
"description": "Taxa do conjunto, na base `rate_per`, mesmo arredondamento de `rate`"
},
"total_population": {
"type": "number",
"description": "População somada"
},
"total_hospitalizations": {
"type": "number",
"description": "Internações somadas"
}
},
"description": "Totais somados sobre as linhas de `data` e a taxa do conjunto",
"additionalProperties": false
},
"metadata": {
"type": "object",
"required": [
"population_source",
"filters_applied"
],
"properties": {
"note": {
"type": "string",
"description": "Presente quando nenhuma internação casou o recorte"
},
"filters_applied": {
"type": "object",
"properties": {
"uf": {
"type": "array",
"items": {
"type": "string"
},
"description": "UFs para filtrar"
},
"sex": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Filtrar por sexo"
},
"year": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Anos para calcular"
},
"age_max": {
"type": "integer",
"description": "Idade máxima"
},
"age_min": {
"type": "integer",
"description": "Idade mínima"
},
"is_csap": {
"type": "boolean",
"description": "Filtrar apenas CSAP"
},
"group_by": {
"type": "array",
"items": {
"enum": [
"year",
"uf",
"sex"
],
"type": "string"
},
"description": "Dimensões para agrupamento"
},
"rate_per": {
"enum": [
1000,
10000,
100000
],
"type": "integer",
"description": "Taxa por X habitantes (default: 100000)"
},
"rate_type": {
"enum": [
"crude",
"specific"
],
"type": "string",
"description": "Tipo de taxa: crude (bruta) ou specific (específica por filtro)"
},
"cid_chapter": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Capítulos CID-10 (1-22)"
}
},
"description": "Os argumentos, com UFs normalizadas e só os anos atendidos",
"additionalProperties": false
},
"population_notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos sobre o denominador (faixa quinquenal antes de 2000; mistura de fontes)"
},
"population_source": {
"type": "object",
"description": "Fonte da população — chave é o ano (string)",
"additionalProperties": {
"enum": [
"detailed",
"aggregated",
null
],
"description": "Arquivo que serviu o ano"
}
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
}
},
"description": "De onde veio o denominador (arquivo de população por ano, avisos) e os argumentos efetivamente atendidos",
"additionalProperties": false
},
"truncated": {
"type": "object",
"required": [
"returned",
"total"
],
"properties": {
"total": {
"type": "number",
"description": "Linhas que a consulta produziu"
},
"returned": {
"type": "number",
"description": "Linhas devolvidas (o teto)"
}
},
"description": "Presente só quando `data` foi truncado no teto de linhas; os totais em `summary` são do conjunto inteiro",
"additionalProperties": false
},
"provenance": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"description": "Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, população…); licenças nunca se fundem"
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"population_years": {
"type": "object",
"required": [
"first_year",
"last_year",
"detailed",
"aggregated"
],
"properties": {
"detailed": {
"type": [
"object",
"null"
],
"required": [
"first_year",
"last_year",
"source",
"age"
],
"properties": {
"age": {
"type": "string",
"description": "Grão etário do arquivo"
},
"source": {
"type": "string",
"description": "Arquivo parquet que serve o intervalo"
},
"last_year": {
"type": "number",
"description": "Último ano coberto"
},
"age_groups": {
"type": "array",
"items": {
"type": "string"
},
"description": "Faixas etárias quinquenais (só no arquivo agregado)"
},
"first_year": {
"type": "number",
"description": "Primeiro ano coberto"
}
},
"description": "pop_uf.parquet — idade simples por UF e sexo (projeções IBGE, 2000+)",
"additionalProperties": false
},
"last_year": {
"type": "number",
"description": "Último ano com população por UF"
},
"aggregated": {
"type": [
"object",
"null"
],
"required": [
"first_year",
"last_year",
"source",
"age"
],
"properties": {
"age": {
"type": "string",
"description": "Grão etário do arquivo"
},
"source": {
"type": "string",
"description": "Arquivo parquet que serve o intervalo"
},
"last_year": {
"type": "number",
"description": "Último ano coberto"
},
"age_groups": {
"type": "array",
"items": {
"type": "string"
},
"description": "Faixas etárias quinquenais (só no arquivo agregado)"
},
"first_year": {
"type": "number",
"description": "Primeiro ano coberto"
}
},
"description": "pop_uf_agregado.parquet — faixa etária quinquenal por UF e sexo (1991–1999)",
"additionalProperties": false
},
"first_year": {
"type": "number",
"description": "Primeiro ano com população por UF (união dos dois arquivos)"
}
},
"description": "Cobertura dos arquivos de população por UF: o que as ferramentas de taxa aceitam",
"additionalProperties": false
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Taxa de internação por população (IBGE por UF), bruta ou específica; `error` quando o ano está fora da cobertura populacional ou nenhum ano pedido tem dado",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}compare_icsap_trends — Tendências comparativas de ICSAP
Análise temporal comparativa de ICSAP entre UFs ou grupos CSAP. Calcula tendências, variação anual e identifica melhores/piores desempenhos. Para `percentage` e `count` valem todos os anos do SIH (desde 1992); `rate_per_10k` exige população e aceita só os anos de get_available_years.population_years. Em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+) e `uf` é a UF do arquivo — ver as `notes`. Percentual no universo do pacote R csapAIH por padrão (`universe`): fora do numerador e do denominador as internações por procedimento obstétrico, parto e longa permanência.
{
"type": "object",
"required": [
"start_year",
"end_year"
],
"properties": {
"end_year": {
"type": "integer",
"description": "Ano final"
},
"universe": {
"enum": [
"csapaih",
"all"
],
"type": "string",
"description": "Universo do % ICSAP: 'csapaih' (padrão) tira do numerador e do denominador as internações por procedimento obstétrico, com diagnóstico de parto (O80-O84) e as AIH de longa permanência, como o pacote R csapAIH (Nedel); 'all' conta todas as internações."
},
"indicator": {
"enum": [
"percentage",
"count",
"rate_per_10k"
],
"type": "string",
"description": "Indicador: percentage (% ICSAP), count (número), rate_per_10k (taxa)"
},
"compare_by": {
"enum": [
"uf",
"csap_group"
],
"type": "string",
"description": "Comparar por UF ou grupo CSAP"
},
"start_year": {
"type": "integer",
"description": "Ano inicial"
},
"compare_values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Valores específicos para comparar (UFs ou grupos CSAP)"
},
"include_trend_line": {
"type": "boolean",
"description": "Incluir análise de tendência linear (default: true)"
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"required": [
"indicator",
"period",
"compare_by",
"series",
"notes",
"summary"
]
},
{
"required": [
"error"
]
}
],
"required": [
"provenance",
"attribution"
],
"properties": {
"data": {
"type": "array",
"items": {},
"description": "Sempre vazio: só aparece no caminho de erro-mole do funil"
},
"note": {
"type": "string",
"description": "Como obter o dado (por exemplo, consultar get_available_years)"
},
"error": {
"type": "string",
"description": "Motivo pelo qual não há dados nesta resposta (ano sem dado, cobertura populacional, falha na consulta)"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Avisos que qualificam os números: era CID-9, raça/cor ausente, universo do % ICSAP, denominador populacional, truncamento"
},
"period": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "number",
"description": "Ano final pedido"
},
"start": {
"type": "number",
"description": "Ano inicial pedido"
}
},
"description": "Intervalo de anos pedido",
"additionalProperties": false
},
"series": {
"type": "array",
"items": {
"type": "object",
"required": [
"year"
],
"properties": {
"year": {
"type": "number",
"description": "Ano"
}
},
"description": "Um ponto por ano: `year` mais uma chave por valor comparado (UF, grupo ou `total`) com o indicador",
"additionalProperties": {
"type": "number",
"description": "Valor do indicador para esta UF, grupo ou `total`"
}
},
"description": "Pontos em ordem cronológica"
},
"trends": {
"type": "object",
"description": "Tendência por valor comparado; só com `include_trend_line` e ao menos dois anos — ausente quando desligada",
"additionalProperties": {
"type": "object",
"required": [
"slope",
"direction",
"avg_annual_change",
"start_value",
"end_value",
"change_pct"
],
"properties": {
"slope": {
"type": "number",
"description": "Inclinação da regressão linear (indicador por ano)"
},
"direction": {
"enum": [
"increasing",
"decreasing",
"stable"
],
"description": "Sentido da tendência"
},
"end_value": {
"type": "number",
"description": "Valor no último ano"
},
"change_pct": {
"type": "number",
"description": "Variação relativa entre as pontas, %"
},
"start_value": {
"type": "number",
"description": "Valor no primeiro ano"
},
"avg_annual_change": {
"type": "number",
"description": "Variação média anual"
}
},
"additionalProperties": false
}
},
"summary": {
"type": "object",
"required": [],
"properties": {
"note": {
"type": "string",
"description": "Como ler o indicador; só para `percentage`"
},
"best_performer": {
"type": "string",
"description": "Valor comparado com a melhor evolução; só com mais de uma tendência"
},
"worst_performer": {
"type": "string",
"description": "Valor comparado com a pior evolução; só com mais de uma tendência"
}
},
"description": "Melhor e pior evolução entre os valores comparados (pela variação entre as pontas) e como ler o indicador; vazio quando não há o que dizer",
"additionalProperties": false
},
"indicator": {
"enum": [
"percentage",
"count",
"rate_per_10k"
],
"description": "Indicador das séries"
},
"compare_by": {
"type": "string",
"description": "Eixo comparado: uf, csap_group ou total (sem eixo)"
},
"provenance": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"source_url",
"data_vintage",
"retrieved_at",
"retrieval",
"citation",
"license"
],
"properties": {
"source": {
"type": "string",
"description": "Fonte oficial do dado"
},
"derived": {
"type": "boolean",
"description": "Presente (true) quando o número foi calculado por este servidor — os cubos SIH são somas das internações dos arquivos do DATASUS"
},
"license": {
"type": [
"string",
"null"
],
"description": "Regime legal do dado (id SPDX quando há)"
},
"notices": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Avisos que acompanham o dado (ex.: cubo atrás do espelho healthbr-data, frescor não verificado). Ausente quando não há aviso"
},
"citation": {
"type": "string",
"description": "Citação pronta para uso"
},
"revision": {
"type": "object",
"required": [
"status",
"note"
],
"properties": {
"note": {
"type": [
"string",
"null"
],
"description": "O específico da fonte: o que revisa, quando, por quê"
},
"status": {
"enum": [
"current",
"provisional",
"final"
],
"type": "string",
"description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte"
}
},
"description": "Se o número ainda pode mudar: provisional quando algum ano da resposta ainda tem competências abertas no SIH (o total ainda pode crescer); current nos demais — o DATASUS reedita arquivos de competências passadas",
"additionalProperties": false
},
"retrieval": {
"oneOf": [
{
"type": "object",
"required": [
"requests",
"attempts",
"anomalies",
"unstable"
],
"properties": {
"attempts": {
"type": "integer",
"minimum": 1,
"description": "Tentativas somadas, incluindo as repetidas (>= requests)"
},
"requests": {
"type": "integer",
"minimum": 1,
"description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)"
},
"unstable": {
"type": "boolean",
"description": "true se houve repetição (attempts > requests) ou alguma anomalia"
},
"anomalies": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"count"
],
"properties": {
"kind": {
"enum": [
"timeout",
"network",
"http_4xx",
"http_5xx",
"rate_limited",
"malformed_body"
],
"type": "string",
"description": "Classe da anomalia (vocabulário fechado do contrato)"
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Ocorrências desta classe na chamada"
}
},
"additionalProperties": false
},
"description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma"
}
},
"description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Diagnóstico de origem desta chamada: idas ao canal sih/cubos/ do healthbr-data (manifesto e arquivos que faltavam no disco), tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null = a resposta veio do DISCO (cache aquecido) ou o bloco não é do canal (listas de referência)"
},
"source_url": {
"type": "string",
"description": "URL canônica que reproduz a consulta ou localiza a fonte"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Competência ou safra do dado segundo a fonte; null quando a fonte não expõe"
},
"retrieved_at": {
"type": "string",
"description": "Instante REAL da extração na origem (ISO-8601) — para os cubos SIH, o download MAIS ANTIGO, do FTP do DATASUS, entre os .dbc que alimentaram a resposta (cópia idêntica ao original naquela data, MD5 registrado no sidecar), nunca o instante da chamada"
},
"field_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"fields",
"source_url",
"dataset_id",
"data_vintage",
"retrieved_at"
],
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Campos do payload atribuídos a esta sub-fonte"
},
"dataset_id": {
"type": [
"string",
"null"
],
"description": "Identificador do conjunto da sub-fonte"
},
"source_url": {
"type": "string",
"description": "URL canônica da sub-fonte que originou estes campos"
},
"data_vintage": {
"type": [
"string",
"null"
],
"description": "Vintage/competência da sub-fonte"
},
"retrieved_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 da extração desta sub-fonte na origem"
},
"served_from_cache": {
"type": [
"boolean",
"null"
],
"description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue"
}
},
"description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
"additionalProperties": false
},
"minItems": 1,
"description": "Presente só quando a resposta junta partes de origens ou momentos distintos: para cada grupo de campos, a URL, a extração e se veio do cache. Ausente nas respostas de uma origem só"
},
"derivation_note": {
"type": "string",
"description": "Como o número foi calculado; presente junto com derived"
}
},
"description": "Bloco de proveniência do portfólio: fonte, URL, competência, extração, diagnóstico de origem, citação e licença; e, só quando há o que dizer, avisos, o que o servidor calculou e se o número ainda pode mudar",
"additionalProperties": false
},
"description": "Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, população…); licenças nunca se fundem"
},
"attribution": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs canônicas das fontes desta resposta (lista de atribuição)"
},
"published_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos que o canal de cubos publica — a verdade do canal, distinta do que esta instância tem em disco; só com o cache de cubos ligado"
},
"population_years": {
"type": "object",
"required": [
"first_year",
"last_year"
],
"properties": {
"last_year": {
"type": "number",
"description": "Último ano com população"
},
"first_year": {
"type": "number",
"description": "Primeiro ano com população"
}
},
"description": "Cobertura populacional; só no erro-mole de `rate_per_10k` fora do intervalo",
"additionalProperties": false
},
"available_sih_years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos com dados SIH atendíveis por este servidor"
},
"years_not_available": {
"type": "object",
"required": [
"years",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Quais anos ficaram fora e quais os números cobrem"
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Anos pedidos que não têm dados SIH e ficaram fora do resultado"
}
},
"description": "Presente só quando parte dos anos pedidos não tem dado: os números cobrem apenas os anos atendidos",
"additionalProperties": false
}
},
"description": "Séries anuais do indicador ICSAP por UF ou grupo CSAP, com tendência linear e melhor/pior desempenho; `error` quando o intervalo está fora da cobertura",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-06: 1 of 1 checks answered
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1382 ms
- 95th percentile latency
- 1382 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1382 ms · metadata changed · 12 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http datasus-sih-sus-mcp-sidneybissoli https://sih.sidneybissoli.com/mcpCodex
codex mcp add datasus-sih-sus-mcp-sidneybissoli --url https://sih.sidneybissoli.com/mcpCursor
{
"mcpServers": {
"datasus-sih-sus-mcp-sidneybissoli": {
"url": "https://sih.sidneybissoli.com/mcp"
}
}
}Cline
{
"mcpServers": {
"datasus-sih-sus-mcp-sidneybissoli": {
"type": "streamableHttp",
"url": "https://sih.sidneybissoli.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"datasus-sih-sus-mcp-sidneybissoli": {
"type": "http",
"url": "https://sih.sidneybissoli.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http datasus-sih-sus-mcp-sidneybissoli https://sih.sidneybissoli.com/mcpClaude Desktop
https://sih.sidneybissoli.com/mcpWindsurf
{
"mcpServers": {
"datasus-sih-sus-mcp-sidneybissoli": {
"serverUrl": "https://sih.sidneybissoli.com/mcp"
}
}
}Let your agent find its tools
Find servers like DATASUS SIH/SUS MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.