MCP-Server

DATASUS SIH/SUS — Brazil Hospital Admissions (AIH) MCP

io.github.SidneyBissoli/sih-br-mcp
Daten & Analytik Gesundheitswesen Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Queries and analyzes Brazilian SUS hospital admission data, including diagnoses, regional comparisons, hospitalization rates, trends, and primary-care-sensitive conditions.

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.
Nur Lesen Idempotent
Eingabeschema
{'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}
Ausgabeschema
{'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Ã\xadveis'}, 'total': {'type': 'number', 'description': 'Códigos informados'}, 'non_csap': {'type': 'number', 'description': 'Quantos são CID-10 e não são sensÃ\xadveis (não inclui os não classificados)'}, 'not_classified': {'type': 'number', 'description': 'Só quando houver: quantos não são CID-10'}}, '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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', '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 â\x80\x94 veja `error` da entrada)'}, 'csap_name': {'type': ['string', 'null'], 'description': 'Nome do grupo; null quando não é sensÃ\xadvel ou não foi classificado'}, 'csap_group': {'type': ['string', 'null'], 'description': 'Grupo CSAP g01â\x80\x93g19; null quando não é sensÃ\xadvel 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Ã\xadvel (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}
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.
Nur Lesen Idempotent
Eingabeschema
{'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Ã\xadficos para comparar (UFs ou grupos CSAP)'}, 'include_trend_line': {'type': 'boolean', 'description': 'Incluir análise de tendência linear (default: true)'}}, 'additionalProperties': False}
Ausgabeschema
{'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'}}, '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 â\x80\x94 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'}}, '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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', 'additionalProperties': False}, 'description': 'Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, populaçãoâ\x80¦); 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 â\x80\x94 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': 'Ã\x9altimo 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Ã\xadveis 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}
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`.
Nur Lesen Idempotent
Eingabeschema
{'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Ã\xadtulo CID-10 especÃ\xadfico'}}, 'additionalProperties': False}
Ausgabeschema
{'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': 'Ã\x93bitos'}, 'mortality_rate': {'type': 'number', 'description': 'Ã\x93bitos / internações Ã\x97 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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', '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 â\x80\x94 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Ã\xadveis 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}
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`.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'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` â\x80\x94 chave é o ano (string)', 'additionalProperties': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['from', 'to', 'code', 'symbol', 'name'], 'properties': {'to': {'type': 'string', 'description': 'Ã\x9altima 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Ã\xadmbolo (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` â\x80\x94 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Ã\xadram 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', None], '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': 'Ã\x9altimo 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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', 'additionalProperties': False}, 'years_cid9': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Anos em que o cubo usa CID-9 (1992â\x80\x931997)'}, '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 â\x80\x94 chave é o ano (string)', 'additionalProperties': {'type': 'object', 'description': 'Revisão da CID ("9" ou "10") â\x86\x92 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 â\x80\x94 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 â\x86\x92 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Ã\xadvel â\x80\x94 chave é o ano (string)', 'additionalProperties': {'type': 'boolean', 'description': 'true quando o cubo tem raça/cor'}}, 'icsap_available': {'type': 'object', 'description': 'ICSAP disponÃ\xadvel â\x80\x94 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': 'Ã\x9altimo 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 â\x80\x94 idade simples por UF e sexo (projeções IBGE, 2000+)', 'additionalProperties': False}, 'last_year': {'type': 'number', 'description': 'Ã\x9altimo 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': 'Ã\x9altimo 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 â\x80\x94 faixa etária quinquenal por UF e sexo (1991â\x80\x931999)', '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â\x80\x931997)'}, 'years_without_race': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Anos sem raça/cor (1998â\x80\x932007)'}, 'icsap_list_revision': {'type': 'object', 'description': 'Lista ICSAP por revisão da CID â\x80\x94 chave é o ano (string)', 'additionalProperties': {'type': 'object', 'description': 'Revisão â\x86\x92 lista', 'additionalProperties': {'type': 'string', 'description': 'Lista usada (portaria-221-2008 ou cid9-derivada)'}}}, 'records_date_imputed': {'type': 'object', 'description': 'Datas imputadas â\x80\x94 chave é o ano (string)', 'additionalProperties': {'type': 'number', 'description': 'Internações que entraram com data imputada'}}, 'municipality_available': {'type': 'object', 'description': 'MunicÃ\xadpio disponÃ\xadvel â\x80\x94 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Ã\xadpio, moeda, universo ICSAP), cobertura da população, canal de cubos e frescor', 'additionalProperties': 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.
Nur Lesen Idempotent
Eingabeschema
{'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Ã\xadnima'}, '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Ã\xadfica por filtro)'}, 'cid_chapter': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'CapÃ\xadtulos CID-10 (1-22)'}}, 'additionalProperties': False}
Ausgabeschema
{'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, duas casas'}, 'year': {'type': 'number', 'description': 'Ano (quando agrupado por ano ou mais de um ano)'}, 'deaths': {'type': 'number', 'description': 'Ã\x93bitos'}, '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 â\x80\x94 use `rate` com `rate_per`. Internações por 100 mil habitantes, qualquer que seja `rate_per`; sai numa versão futura'}, 'mortality_rate': {'type': 'number', 'description': 'Ã\x93bitos / internações Ã\x97 100, duas casas'}, 'population_source': {'enum': ['detailed', 'aggregated', None], '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Ã\xadfica'}, 'overall_rate': {'type': 'number', 'description': 'Taxa do conjunto, na base `rate_per`'}, 'total_population': {'type': 'number', 'description': 'População somada'}, 'total_hospitalizations': {'type': 'number', 'description': 'Internações somadas'}}, '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Ã\xadnima'}, '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Ã\xadfica por filtro)'}, 'cid_chapter': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'CapÃ\xadtulos 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 â\x80\x94 chave é o ano (string)', 'additionalProperties': {'enum': ['detailed', 'aggregated', None], 'description': 'Arquivo que serviu o ano'}}, 'available_sih_years': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Anos com dados SIH atendÃ\xadveis por este servidor'}}, '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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', 'additionalProperties': False}, 'description': 'Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, populaçãoâ\x80¦); 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 â\x80\x94 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': 'Ã\x9altimo 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 â\x80\x94 idade simples por UF e sexo (projeções IBGE, 2000+)', 'additionalProperties': False}, 'last_year': {'type': 'number', 'description': 'Ã\x9altimo 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': 'Ã\x9altimo 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 â\x80\x94 faixa etária quinquenal por UF e sexo (1991â\x80\x931999)', '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Ã\xadveis 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Ã\xadfica; `error` quando o ano está fora da cobertura populacional ou nenhum ano pedido tem dado', 'additionalProperties': 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).
Nur Lesen Idempotent
Eingabeschema
{'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â\x80\x932007 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Ã\xadnima 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Ã\xadtulos CID-10 (1-22). Se omitido, todos.'}}, 'additionalProperties': False}
Ausgabeschema
{'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 â\x80\x94 do estabelecimento em 1992â\x80\x931997 (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â\x80\x932007, quando a AIH não trazia o campo (group_by: race)'}, 'year': {'type': 'number', 'description': 'Ano (group_by: year)'}, 'month': {'type': 'number', 'description': 'Mês, 1â\x80\x9312 (group_by: month)'}, 'deaths': {'type': ['number', 'null'], 'description': 'Ã\x93bitos; null quando o recorte não tem nenhuma linha'}, 'is_csap': {'type': 'boolean', 'description': 'Internação por condição sensÃ\xadvel Ã\xa0 atenção primária (group_by: is_csap)'}, 'cid_group': {'type': 'string', 'description': 'Categoria CID de 3 dÃ\xadgitos (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â\x80\x93g19; null quando a internação não é sensÃ\xadvel (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Ã\xadtulo da CID, 1â\x80\x9322 (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': 'Ã\x93bitos'}, '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': 'Ã\x93bitos / internações Ã\x97 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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', '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â\x80\x932007 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Ã\xadnima 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Ã\xadtulos 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 â\x80\x94 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Ã\xadveis 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}
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. 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`.
Nur Lesen Idempotent
Eingabeschema
{'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Ã\xadtulo CID-10 especÃ\xadfico'}, 'granularity': {'enum': ['monthly', 'yearly'], 'type': 'string', 'description': 'Granularidade temporal (default: yearly)'}}, 'additionalProperties': False}
Ausgabeschema
{'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'}, 'deaths': {'type': 'number', 'description': 'Ã\x93bitos 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': 'Ã\x93bitos no mês'}, 'year_month': {'type': 'string', 'description': 'Competência AAAA-MM'}}, '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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', '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 â\x80\x94 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Ã\xadveis 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}
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.
Nur Lesen Idempotent
Eingabeschema
{'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â\x80\x932007 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Ã\xadnima'}, '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Ã\xadpio (6 dÃ\xadgitos)'}}, 'additionalProperties': False}
Ausgabeschema
{'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 â\x80\x94 do estabelecimento em 1992â\x80\x931997 (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â\x80\x932007 (group_by: race)'}, 'year': {'type': 'number', 'description': 'Ano (group_by: year)'}, 'deaths': {'type': 'number', 'description': 'Ã\x93bitos nas ICSAP'}, 'n_icsap': {'type': 'number', 'description': 'Internações por condições sensÃ\xadveis Ã\xa0 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â\x80\x93g19 (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 Ã\x97 100, duas casas'}, 'municipality_code': {'type': ['string', 'null'], 'description': 'Código IBGE do municÃ\xadpio de residência (6 dÃ\xadgitos); null em 1992â\x80\x931997 (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': 'Ã\x93bitos 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 Ã\x97 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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', 'additionalProperties': False}, 'description': 'Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, populaçãoâ\x80¦); 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â\x80\x932007 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Ã\xadnima'}, '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Ã\xadpio (6 dÃ\xadgitos)'}}, 'description': 'Os argumentos recebidos, ecoados', 'additionalProperties': False}, 'published_years': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Anos que o canal de cubos publica â\x80\x94 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Ã\xadveis 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Ã\xadveis Ã\xa0 atenção primária, agrupadas conforme `group_by`, com totais e a nota do universo; `error` quando nenhum ano pedido tem dado', 'additionalProperties': 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.
Nur Lesen Idempotent
Eingabeschema
{'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Ã\xadnima'}, '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Ã\xadpio'}}, 'additionalProperties': False}
Ausgabeschema
{'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 â\x80\x94 do estabelecimento em 1992â\x80\x931997 (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â\x80\x932007 (group_by: race)'}, 'year': {'type': 'number', 'description': 'Ano (group_by: year)'}, 'deaths': {'type': 'number', 'description': 'Ã\x93bitos nas ICSAP'}, 'n_icsap': {'type': 'number', 'description': 'Internações por condições sensÃ\xadveis Ã\xa0 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â\x80\x93g19 (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 Ã\x97 100, duas casas'}, 'municipality_code': {'type': ['string', 'null'], 'description': 'Código IBGE do municÃ\xadpio de residência (6 dÃ\xadgitos); null em 1992â\x80\x931997 (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 â\x80\x94 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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', 'additionalProperties': False}, 'description': 'Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, populaçãoâ\x80¦); 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 â\x80\x94 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Ã\xadveis 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}
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).
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'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Ã\xadtulo em algarismo romano (chave usada em `cid_chapter` é o número, 1â\x80\x9322)'}, 'range': {'type': 'string', 'description': 'Intervalo de códigos CID-10 (ex.: A00-B99)'}, 'roman': {'type': 'string', 'description': 'CapÃ\xadtulo 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Ã\xadtulos, 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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', '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Ã\xadtulos (22)'}}, 'description': 'Os 22 capÃ\xadtulos da CID-10 (versão 2019), com intervalo de códigos e nomes', 'additionalProperties': False}
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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'group_code': {'type': 'string', 'description': "Código do grupo especÃ\xadfico (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}
Ausgabeschema
{'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â\x80\x9319'}, 'code': {'type': 'string', 'description': 'Código do grupo, g01â\x80\x93g19'}, '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â\x80\x93g19'}, '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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', '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}
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.
Nur Lesen Idempotent
Eingabeschema
{'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Ã\xadnima'}, '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}
Ausgabeschema
{'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': 'Ã\x93bitos'}, 'csap_name': {'type': 'string', 'description': 'Nome do grupo'}, 'csap_group': {'type': 'string', 'description': 'Grupo CSAP g01â\x80\x93g19'}, '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'}, 'license': {'type': ['string', 'null'], 'description': 'Regime legal do dado (id SPDX quando há)'}, 'citation': {'type': 'string', 'description': 'Citação pronta para uso'}, '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 Ã\xa0 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 (contrato v1.1): 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) â\x80\x94 para os cubos SIH, a safra do sidecar (extração no FTP do DATASUS), nunca o instante do download'}}, 'description': 'Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença', 'additionalProperties': False}, 'description': 'Um bloco por procedência que contribuiu com esta resposta (SIH, lista CSAP, csapAIH, populaçãoâ\x80¦); 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, %'}}, 'additionalProperties': False}, 'published_years': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Anos que o canal de cubos publica â\x80\x94 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Ã\xadveis 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}
Geändert
get_hospitalization_rates
2. October 2026 02:41
Geändert
compare_icsap_trends
30. September 2026 02:41
Geändert
get_hospitalization_rates
30. September 2026 02:41
Geändert
classify_as_csap
30. September 2026 02:41
Geändert
rank_csap_groups
30. September 2026 02:41
Geändert
get_icsap_indicators
30. September 2026 02:41
Geändert
get_icsap
30. September 2026 02:41
Geändert
compare_regions
30. September 2026 02:41
Geändert
get_hospitalization_trends
30. September 2026 02:41
Geändert
get_hospitalizations
30. September 2026 02:41
Geändert
get_available_years
30. September 2026 02:41
Geändert
list_cid_chapters
30. September 2026 02:41
Geändert
list_csap_groups
30. September 2026 02:41
Hinzugefügt
compare_icsap_trends
26. September 2026 02:40
Hinzugefügt
get_hospitalization_rates
26. September 2026 02:40
Hinzugefügt
classify_as_csap
26. September 2026 02:40
Hinzugefügt
rank_csap_groups
26. September 2026 02:40
Hinzugefügt
get_icsap_indicators
26. September 2026 02:40
Hinzugefügt
get_icsap
26. September 2026 02:40
Hinzugefügt
compare_regions
26. September 2026 02:40
Hinzugefügt
get_hospitalization_trends
26. September 2026 02:40
Hinzugefügt
get_hospitalizations
26. September 2026 02:40
Hinzugefügt
get_available_years
26. September 2026 02:40
Hinzugefügt
list_cid_chapters
26. September 2026 02:40
Hinzugefügt
list_csap_groups
26. September 2026 02:40