Metodologia
Esta página documenta integralmente como os indicadores são produzidos, para permitir avaliação crítica e reprodução independente. O processamento é feito por scripts abertos e versionados em scripts/: pipeline_v2.py (mortalidade e população) e pipelines dedicados para dengue (SINAN), internações (SIH), nascimentos (SINASC) e os recortes de internação por agravo/hospital.
1. Fontes de dados #
- Óbitos 2022–2023 — SIM/DataSUS, CSVs nacionais do OpenDataSUS (
DO22OPEN,DO23OPEN). - Óbitos 2015–2021 e 2024 — SIM/DataSUS, arquivos
.dbcpor UF/ano do FTP oficial (SIM/CID10/DORES), convertidos com a biblioteca abertadatasus-dbc. - Óbitos 2025 — PRELIMINARES — mesma origem, mas do diretório
SIM/PRELIM/DORES, que o DataSUS ainda não fechou. Entram na base marcados (colunapreliminar) e ficam fora de toda análise. Medimos 2025 e ele não exibe os defeitos típicos de ano aberto: os doze meses estão entre 1,07 e 1,14 vez a mediana de 2015–2024, dezembro inclusive, e as causas mal definidas somam 4,51% — igual a 2024. Ou seja, no agregado nacional o volume fechou e a codificação parece madura — mas não uniformemente: pela mesma régua de completude aplicada aos gráficos, Roraima ainda tem seis meses de 2025 abaixo do esperado, e Acre e Amapá, dois cada. Mesmo assim ele fica fora, porque o que sabemos de 2024 é que a versão de um ano muda depois de fechado: ao consolidar, milhares de óbitos migraram de R99 para causas específicas. Parecer estável e ter sido verificado estável são coisas diferentes, e a segunda só é possível quando a versão consolidada existir. Servem para acompanhar o ano corrente, não para comparar com os anteriores. - População total — IBGE: Estimativas anuais (SIDRA t/6579), Censo 2022 (t/4709); 2023 por interpolação linear Censo↔Estimativas 2024.
- População por idade — Censo 2022 (SIDRA t/9514), agregada em 8 faixas etárias por município.
- Malha municipal e cadastro — IBGE (APIs de localidades e malhas).
- Descrições CID-10 — tabela oficial
CID10.DBFdo FTP do SIM.
2. Critérios de inclusão e derivações #
- Óbitos fetais fora da base — pela fonte, não pelo filtro. A convenção de mortalidade geral exclui óbito fetal, e o pipeline mantém o filtro
TIPOBITO ≠ 1. Mas conferindo o campo nos 14.484.496 registros, 100% têmTIPOBITO = 2nas duas fontes: o óbito fetal vive num arquivo separado do DataSUS (SIM/CID10/DOFET) que este projeto não coleta. Ou seja, a exclusão acontece na origem e o filtro nunca removeu nenhum registro — ele existe como defesa, para o dia em que uma fonte passar a misturar os dois; - Município de residência do falecido (
CODMUNRES); - Causa básica truncada à categoria CID-10 de 3 caracteres; capítulos (I–XXII) pelas faixas oficiais;
- Idade decodificada do campo composto
IDADE(dígito 4 = anos; 5 = 100+; 0–3 = menor de 1 ano; demais = ignorada). Faixas: <1, 1–4, 5–14, 15–29, 30–44, 45–59, 60–74, 75+; - Local do óbito (
LOCOCOR): 1 = hospital; 3 = domicílio; - Dados de 2024 preliminares, sujeitos a revisão pelo MS.
3. Granularidade por período #
Para caber em infraestrutura gratuita sem sacrificar o essencial, a base publica detalhe demográfico completo a partir de 2022 (capítulo × sexo × faixa etária) e, para 2015–2021, totais e marginais (por capítulo, por sexo e por faixa — sem cruzamentos entre eles). Os marts de causa (3 caracteres) e as séries mensais por UF cobrem todos os anos.
4. Taxa padronizada por idade #
Método direto: a taxa específica de cada faixa etária do município é ponderada pela estrutura etária de uma população padrão — aqui, a do Brasil no Censo 2022. Isso remove o efeito da composição etária e torna municípios comparáveis (um município envelhecido não aparece "pior" só por ser envelhecido).
- Óbitos com idade ignorada são redistribuídos pro-rata entre as faixas conhecidas do mesmo município/ano;
- Para anos ≠ 2022, a população por faixa é a estrutura do Censo 2022 escalada pelo total municipal do ano (aproximação documentada — censos municipais por idade não existem anualmente);
- Calculada para o total de causas (capítulo = TOTAL, sexo = total).
5. Intervalos de confiança (IC95%) #
A taxa bruta acompanha IC95% pelo método gamma (Poisson exato): limite inferior = qgamma(0,025; d)/pop, superior = qgamma(0,975; d+1)/pop. Em municípios pequenos o intervalo é largo — o painel sinaliza população < 10 mil hab. com ⚠ para evitar leituras indevidas de taxas instáveis.
6. Excesso de mortalidade #
Para cada UF (e Brasil), o esperado do mês m do ano a vem de uma tendência linear ajustada ao período 2015–2019, por mês civil: regredimos os óbitos daquele mês contra o ano (mínimos quadrados, 5 pontos) e projetamos para a. Isso captura tanto o crescimento populacional quanto o envelhecimento — que elevam o número esperado de óbitos ano a ano —, corrigindo um viés do método anterior (média 2015–2019 × razão populacional), que ignorava a tendência secular e por isso superestimava o excesso nos anos recentes. Excesso = observado − esperado; método transparente e replicável.
Efeito da correção (Brasil): o pico pandêmico permanece robusto (2020–2021 ≈ 643 mil óbitos em excesso, ~8% abaixo do método anterior), mas o "excesso persistente" de 2022–2023 encolhe muito — era em boa parte artefato da tendência não modelada — e 2024 fica próximo de zero. Cautela com 2024: a extrapolação é menos confiável no extremo da série e os dados de 2024 ainda são preliminares (subcontagem que puxa o observado para baixo) — não interpretar o valor literalmente.
Limitações remanescentes: a extrapolação linear assume que a tendência pré-pandemia teria continuado e não modela harvesting (deslocamento de mortalidade).
Robustez (padronização por idade). Testamos uma variante do esperado padronizada por idade, usando a população por idade/UF/ano da projeção do IBGE (revisão 2018). Ela estima o pico pandêmico em ~505 mil — abaixo do nosso valor (643 mil) e do consenso de estimativas independentes (~680 mil) — e gera excesso fortemente negativo em 2023–2024. Nossa primeira hipótese foi o denominador: a projeção 2018 superestima a população (o Censo 2022 a revisou para baixo) e a série pós-Censo tem uma descontinuidade em 2022.
Teste de convergência. Para isolar a causa, reconciliamos o denominador — interpolando o total populacional por UF entre os Censos 2010 e 2022 (removendo o overcount e o degrau; a população de 2020 cai de 211,8 para ~200,9 milhões) — e recomputamos o excesso. Ele subiu, mas não convergiu: permaneceu em ~530 mil, ainda ~18% abaixo da tendência. Ou seja, o denominador é um fator, mas não o todo — parte do gap é metodológica(como cada método projeta o esperado sob envelhecimento acelerado). Por isso retivemos o método de tendência, que tem a melhor concordância com as estimativas independentes e não depende do denominador. Scripts e séries de ambas as análises estão no repositório.
7. Validação automática #
- Totais anuais conferidos contra os volumes oficiais do SIM (ex.: 2015 = 1.264.175; 2022 ≈ 1,54M);
- Subtotais (linhas TOTAL) conciliáveis com qualquer recorte da API;
- Perfil por capítulo compatível com a literatura (circulatórias > neoplasias > respiratórias);
- Checagens executadas também em CI (GitHub Actions) a cada atualização.
8. Limitações conhecidas #
- Qualidade de registro e cobertura do SIM variam regionalmente e melhoraram ao longo do tempo — parte das tendências longas reflete melhora de captação;
- Garbage codes (ex.: R99) não são redistribuídos entre causas;
- A taxa padronizada usa estrutura etária fixa (Censo 2022) escalada — aproximação para anos distantes de 2022;
- O baseline do excesso ajusta a tendência sobre 5 pontos por mês civil (2015–2019) e a extrapola até 5 anos à frente, sem intervalo de incerteza publicado: o valor é uma estimativa pontual segundo este baseline, e a extrapolação perde confiabilidade no extremo da série — ver a cautela com 2024 na §6;
- 2024 preliminar; revisões do MS alteram os números do último ano.
9. Dengue (SINAN) #
- Fonte: SINAN/DataSUS, arquivos nacionais
DENGBR{AA}.dbc(FINAIS e PRELIM). 2024 corresponde à maior epidemia já registrada (6,6 milhões de casos prováveis) — número conciliável com os boletins do Ministério da Saúde. - Caso provável = notificação não descartada (
CLASSI_FIN ≠ 5), convenção da vigilância epidemiológica; - Caso grave = dengue com sinais de alarme ou grave (
CLASSI_FIN11, 12) ou, no padrão legado, FHD/SCD (3, 4); - Óbito por dengue =
EVOLUCAO = 2; - Município de residência (
ID_MN_RESI) e semana epidemiológica pela data dos primeiros sintomas (SEM_PRI); - Incidência = casos prováveis por 100 mil hab.;letalidade = óbitos / casos prováveis;
- Em anos recentes a classificação ainda está em andamento, o que pode reduzir descartes.
10. Internações hospitalares (SIH/AIH) #
- Fonte: SIH/DataSUS, arquivos
RD{UF}{AAMM}.dbc(AIH aprovadas, rede SUS). Cobre apenas internações pagas pelo SUS — não inclui rede privada/suplementar; - Município de residência (
MUNIC_RES); causa pelo diagnóstico principal (DIAG_PRINC), agrupado em capítulos CID-10; - Permanência média =
dias_permanencia_normal/aih_normal(ver tipo de AIH abaixo); - Mortalidade intra-hospitalar =
MORTE/ internações; - Custo = valor total aprovado (
VAL_TOT); custo médio =valor_normal/aih_normal; - 2024 preliminar; meses podem estar incompletos no processamento mais recente.
- Tipo de AIH — a AIH de continuação (importante): o arquivo RD mistura a AIH normal (
IDENT=1) com a AIH de continuação (IDENT=5), emitida quando a internação se prolonga além do período coberto pela AIH anterior. Uma mesma internação longa vira, portanto, várias linhas. Contar linhas é a aproximação correta para produção aprovada — e é o queinternacoesmede — mas distorce qualquer média por episódio. Numa amostra de 808.470 AIHs (SP, MG, BA, PA e RS, 2024), a continuação é 1,26% das linhas e 6,57% dos dias de permanência, concentrada em dois capítulos:
Publicamos os dois:Capítulo Internações Permanência média VI — sistema nervoso −19,9% 10,98 → 6,21 dias V — transtornos mentais −23,7% 14,43 → 11,72 dias demais 17 capítulos ≤ 0,8% ≤ 2,1% internacoes(produção, todas as AIHs) eaih_normal,dias_permanencia_normal,valor_normal(base por episódio). As médias por episódio usam a segunda. O HSMR (§14) e a permanência esperada também passam a ser calculados só sobre AIH normal, porque são métricas por episódio — a continuação carrega 0,21% dos óbitos para 1,26% das linhas e diluiria o estrato de case-mix. O %ICSAP quase não muda (+0,93% relativo): só I69 e G40 da Lista Brasileira geram continuação em volume. Fundamentação: R. F. Saldanha, Sistemas de Informação em Saúde no Brasil, cap. SIH. - Confundimento por cobertura suplementar (importante): a base só enxerga internações pagas pelo SUS. Cerca de um quarto da população tem plano de saúde (ANS), concentrado em municípios mais ricos e urbanos. Logo, internações SUS por 100 mil habitantes não são comparáveis entre municípios sem considerar a fração coberta por planos — um valor baixo pode refletir alta cobertura privada, não menos adoecimento. Vale para internações/100k, ICSAP e a visão hospitalar.
- Mortalidade hospitalar é taxa bruta, sem ajuste de risco: reflete fortemente o perfil de casos (case-mix) de cada hospital — um terciário de alta complexidade tende a mortalidade maior que uma maternidade. Não comparar hospitais por mortalidade bruta como se fosse qualidade; a razão ajustada por case-mix (HSMR) está na §14.
11. Vulnerabilidade social (proxy, Censo 2022) #
Para permitir cruzar saúde com desigualdade, calculamos um índice-proxy de vulnerabilidade social por município, a partir de dois indicadores oficiais e atuais do Censo 2022 (IBGE/SIDRA):
- Taxa de analfabetismo (15 anos ou mais) — tabela SIDRA 9543;
- % de domicílios sem ligação à rede geral de água — tabela SIDRA 6803.
Cada indicador é padronizado por z-score(z = (x − μ) / σ) e o índice é a média dos dois z-scores, reescalada de 0 a 100 (maior = mais vulnerável); os municípios são classificados em quartis (Q1 = menos vulnerável … Q4 = mais vulnerável).
Transparência — o que este índice é e o que não é: trata-se de um proxy transparente, reproduzível e atual (2022), não do IVS oficial do IPEA (Atlas da Vulnerabilidade Social), que combina 16 indicadores em três dimensões e tem ano-base 2010. Usamos apenas duas dimensões disponíveis municipalmente no Censo 2022 (a renda per capita municipal de 2022 ainda não foi liberada). O método de composição por z-score segue a linha do LabSUS. Incorporar o IVS oficial do IPEA está no roadmap.
12. Internações evitáveis (ICSAP) e fluxo de pacientes #
- ICSAP — Internações por Condições Sensíveis à Atenção Primária: classificamos cada internação do SIH (2024) pelo diagnóstico principal e marcamos as condições da Lista Brasileira de ICSAP (Portaria SAS/MS 221/2008), em aproximação no nível de CID-10 de 3 caracteres (hipertensão, diabetes, ICC, pneumonias, asma/DPOC, gastroenterites, ITU, etc.). A proporção de ICSAP é um indicador-proxy da qualidade da atenção básica: quanto maior, mais internações que bom acesso à atenção primária poderia ter evitado. A aproximação por 3 caracteres difere marginalmente da lista oficial (que tem exceções em 4 caracteres) e tende a incluir um pouco a mais (leve sobrecontagem) —
G00, por exemplo, abrange toda meningite bacteriana onde a portaria pede apenasG00.0. - Correção de 30 de agosto de 2026. O grupo 1 da lista estava incompleto: faltavam catorze códigos — tuberculose pulmonar e outras (
A15,A16,A18), sífilis (A51–A53), malária (B50–B54) e febre reumática (I00–I02). Medido antes de corrigir, a lista antiga capturava só 20,7% do grupo 1 em São Paulo e 14,3% no Rio de Janeiro em 2024, porque tuberculose pulmonar sozinha é cerca de 65% do grupo. O efeito no %ICSAP total é pequeno — entre +1,04% e +1,21%relativos, conforme o ano —, mas é espacialmente estruturado (tuberculose urbana, malária amazônica), então os achados publicados foram refeitos sobre o dado corrigido, não presumidos: leitos × %ICSAP ficou em +0,319 (parcial,+0,340) — os mesmos +0,32 e +0,34 quando arredondados a duas casas — e cobertura da APS × ICSAP passou de +0,004 para +0,002 (parcial, de +0,018 para +0,017). Nenhuma conclusão muda. Todos os checkpoints foram recontados da fonte, porque acrescentar código sem recontar deixaria a série antiga por baixo. - Grupo 1 — imunopreveníveis (
internacoes_g1,g1_100k): internações por doenças preveníveis por imunização e condições sensíveis, publicadas em separado desde a mesma data. São 1,3% a 1,5% do ICSAP (38.535 internações em 2024) e existem para permitir o cruzamento com as doses aplicadas do PNI — o desfecho populacional do lado da vacinação. Como todo o resto desta base, a associação é municipal e não sustenta inferência individual. - Gasto potencialmente evitável (estimativa): nº de internações ICSAP × custo médio das internações por condições sensíveis (≈ R$ 1,5 mil/internação, calculado a partir das próprias condições no SIH — não da média geral, que é inflada por cirurgia/UTI). É uma estimativa de ordem de grandeza, não valor contábil.
- Sinalização de outlier (▲): um município só é marcado como acima da média do recorte quando o limite inferior do IC95% (método de Wilson)da sua proporção de ICSAP supera essa média — com piso de 200 internações. Isso evita confundir ruído de amostra pequena com sinal real.
- Leitura com equidade: ICSAP alto e gasto evitável não são, por si, "má gestão" do município — frequentemente refletem subfinanciamento e barreiras de acesso à atenção básica. São indicadores de sistema, não de culpa local.
- Fluxo intermunicipal de pacientes — o SIH registra o município de residência (
MUNIC_RES) e o de internação (MUNIC_MOV). Cruzando os dois, mapeamos para onde os moradores de cada município se internam (fluxos intermunicipais com 5+ internações em 2024), revelando dependência de polos regionais e evasão da rede local. A ideia segue a linha do LabSUS.
13. Agravos traçadores e visão hospitalar (SIH 2024) #
Além do recorte por capítulo, isolamos condições traçadoras no nível de CID-10 de 3 caracteres (diagnóstico principal), com internações, óbitos, permanência e custo por município:
- Diabetes (E10–E14); AVC/cerebrovascular (I60–I69); infarto (I21–I22); insuficiência cardíaca (I50);
- Asma (J45–J46); DPOC (J40–J44); pneumonia (J12–J18);
- Depressão (F32–F33); esquizofrenia e outras psicoses (F20–F29); transtornos por álcool/drogas (F10–F19);
- Traumatismo cranioencefálico (S02, S06, S07).
Causas externas — limitação: acidentes de transporte (códigos V) não entram, porque na AIH o diagnóstico principal registra a natureza da lesão (S/T), não o mecanismo (V). As causas externas ficam representadas pelo TCE.
Visão hospitalar (CNES): agregamos as internações por estabelecimento (≥ 12 internações), com volume, permanência, mortalidade bruta, custo médio e capítulo predominante. Os hospitais são identificados pelo código CNES — o nome do estabelecimento não consta nos arquivos RD. Não estimamos ocupação de leitos: ela não deriva de forma confiável da AIH (exigiria o cadastro de leitos do CNES).
14. Mortalidade ajustada (HSMR), permanência esperada e projeção de demanda #
Página Visão hospitalar. Três indicadores adicionais por estabelecimento (CNES), a partir do mesmo SIH 2024 já usado nas seções 10–13.
HSMR (Hospital Standardized Mortality Ratio) — padronização indireta. Para cada hospital, os óbitos esperados são a soma, por estrato (faixa etária × capítulo CID-10), do número de internações do hospital naquele estrato multiplicado pela taxa de mortalidade nacional do mesmo estrato. HSMR = óbitos observados / óbitos esperados. HSMR acima de 1 indica mortalidade acima do esperado dado o case-mix do hospital; abaixo de 1, o inverso. Faixas etárias: <1, 1–4, 5–14, 15–29, 30–44, 45–59, 60–69, 70–79, 80+ (idade só é considerada quando o campo COD_IDADE indica anos; demais casos entram como <1 ano).
Limiar de estabilidade — óbitos esperados < 5: hospitais abaixo desse valor são marcados como instáveis (⚠), não ocultados. É a regra geral de epidemiologia para razões padronizadas (SMR/HSMR): com esperado < 5, a razão fica hipersensível a um único óbito a mais e o intervalo de confiança exato de Poisson deixa de ser confiável. Estudos específicos de HSMR por vezes usam corte mais conservador (ex.: 20 óbitos esperados) — mas nesses estudos o hospital é excluído do relatório. Optamos por não excluir: hospitais pequenos continuam no mart, apenas sinalizados como instáveis, coerente com o princípio de não ocultar unidades pequenas do dado público (mesma lógica do IC95% em municípios pequenos, §5).
Intervalo de confiança (IC95%) — desde julho de 2026. O HSMR passou a ser publicado com intervalo de confiança exato, e não apenas com a sinalização binária acima. Como os óbitos observados seguem distribuição de Poisson e o esperado é tratado como constante conhecida, o intervalo é [qgamma(0,025; O) / E ; qgamma(0,975; O+1) / E] — o mesmo método gamma/Poisson exato já usado nas taxas brutas municipais (§5), e não uma segunda convenção. O ganho é concreto: um hospital com HSMR 5,94 e IC [0,13 – 27,86] deixa de parecer alarme e passa a ser lido como o que é — poucos casos, nenhuma conclusão possível.
Correção para múltiplas comparações (FDR). Publicar ~4.600 hospitais por ano significa testar ~4.600 hipóteses simultaneamente. Um teste isolado a 5% erra 5% das vezes; 4.600 testes simultâneos a 5%, se nenhum hospital realmente diferisse do esperado, ainda produziriam centenas de “achados” só por acaso. Por isso a classificação significancia não usa o IC bruto isoladamente: calculamos o p-valor exato de Poisson (bilateral) para cada hospital-ano e aplicamos a correção Benjamini-Hochberg (controle da taxa de falsas descobertas), separadamente para cada ano civil. Um hospital só é classificado acima ou abaixo do esperado quando o q-valor (p ajustado) é menor que 0,05; hospitais com esperado = 0 ficam indeterminado — não “dentro do esperado”, pois não há teste possível. Em 2024: 16,0% acima, 53,2% abaixo, 28,6% dentro do esperado. O efeito da correção é honesto, não dramático: de 10.046 hospitais-ano significativos sem correção (nos três anos), 282 (2,8%) perdem a classificação após o FDR — a maior parte do sinal bruto é real, mas nem todo. Reprodutível em scripts/hsmr_intervalo_confianca.py.
Viés conhecido: o ajuste por capítulo é grosseiro. A calibração nacional é exata (razão agregada = 1,0000 nos três anos), mas calibração não elimina confundimento residual. Um capítulo da CID-10 é uma categoria larga — o capítulo IX vai de hipertensão a cirurgia cardíaca complexa — e hospitais terciários concentram os casos graves dentro de cada capítulo. O ajuste enxerga diagnóstico, não gravidade.
Quanto isso pesava — medido com os leitos do CNES (§18). Cruzando o HSMR com a existência de UTI no estabelecimento, o desequilíbrio ficou explícito: em 2024 a razão observado/esperado agregada era 1,163 nos hospitais com UTI e 0,542 nos sem UTI. Nenhum dos dois grupos estava em 1 — só o total nacional estava, por construção. A consequência para a classificação era grave: 86,1% dos hospitais marcados “acima do esperado” tinham UTI, e a taxa de marcação ia de 1,7% no menor quartil de porte a 43,4% no maior. Na prática, a flag sinalizava “este hospital é grande e tem UTI”.
Correção adotada: comparação dentro do estrato. Cada hospital passa a ser comparado apenas aos hospitais do próprio estrato de complexidade (com UTI / sem UTI), recalibrando o esperado pela razão O/E agregada do grupo — mesmo princípio de “comparar pares reais” já usado no ICSAP (§17) e na cobertura da APS (§15). O p-valor de Poisson e a correção de Benjamini-Hochberg passam a ser calculados dentro de cada família (ano × estrato), e o IC95% publicado usa a mesma régua da classificação. O estrato é reavaliado ano a ano: um hospital que abre UTI muda de grupo no ano em que abre.
Viés residual declarado — a correção melhora, mas não elimina. Após a estratificação, os marcados “acima” com UTI caem de 86,1% para 48,2% e o gradiente por porte achata de 1,7%→43,4% para 5,6%→32,1%. Mas testamos se a estimativa ficou livre de viés, e não ficou: o HSMR mediano ainda cresce com o tamanho mesmo dentro do estrato (0,39 no menor quartil de leitos a 0,93 no maior). Tentamos estratificar também por porte (UTI × quartil de leitos) e o gradiente persiste (0,54 → 0,91), com estratos degenerados nas pontas. A conclusão honesta é que recalibração posterior não recupera a informação de gravidade que o ajuste por capítulo nunca capturou — ela desloca o centro, não corrige a medida. Corrigir de fato exigiria ajuste por procedimento, gravidade ou comorbidade, variáveis que a AIH pública não fornece. Compare apenas hospitais de porte e complexidade semelhantes; use para levantar hipóteses, nunca para ranquear. Reprodutível em scripts/hsmr_estratos_uti.py e scripts/analise_leitos_hsmr.py.
Permanência esperada (LOS). Para cada diagnóstico (CID-10, 3 caracteres), calculamos a mediana nacional de dias de internação e comparamos à mediana do hospital para o mesmo diagnóstico. Por volume, não guardamos a duração individual de cada internação — a mediana é aproximada por um histograma de faixas de dias (0-1, 2-3, 4-7, 8-14, 15-21, 22-30, 31-60, 61+), tomando o ponto médio da faixa onde a frequência acumulada cruza 50%. Hospitais com menos de 30 internações no diagnóstico não entram (ruído).
Projeção de demanda. Tendência linear sobre a série mensal de internações de cada hospital, ajustada sobre o tempo de calendário — mês ausente conta como ausente, não como vizinho do seguinte. O intervalo é o de predição da regressão (cresce com a distância da extrapolação) multiplicado por um fator de calibração medido em backtest: z = 2,42 / 2,64 / 2,80 para 1, 2 e 3 meses, no lugar do 1,96 da normal.
A projeção é validada antes de ser publicada. Por origem móvel (o modelo só vê o passado de cada origem), sobre 4.445 hospitais, contra cinco alternativas: naive, ingênuo sazonal, média móvel de 3 meses, sazonal com deriva e tendência com sazonalidade. A tendência linear supera o baseline sazonal em todos os horizontes (MASE 0,810 / 0,867 / 0,922) e em todos os estratos de volume. O pipeline recusa-se a publicar se o relatório de backtest não existir.
Três coisas que o backtest mudou, e uma que ele impediu. Mudou: (a) a projeção passou a partir de uma âncora única — a última competência da base —, e não do último mês de cada hospital, o que vinha publicando previsões para meses já passados; (b) o intervalo, antes declarado como 95%, cobria de fato 85,0% no horizonte de 3 meses, e a calibração corrigiu isso; (c) confianca — que só refletia o comprimento da série — deu lugar a status_validacao, derivado do erro medido no estrato de volume do hospital. Impediu: os modelos sazonais pareciam a melhoria óbvia, já que no agregado nacional a sazonalidade é nítida (fevereiro fica 5,9% abaixo da tendência); medidos por hospital, ficaram piores (MASE 1,03 a 1,11). A amplitude sazonal é menor que o ruído de um estabelecimento isolado. O que vale no agregado não transferiu para a unidade.
O intervalo é largo, e isso é o resultado. Mediana de 74% da previsão nos hospitais acima de 500 internações/mês e 217% nos de 6 a 20. Demanda mensal de um hospital é intrinsecamente ruidosa; a banda estreita anterior não era mais precisa, era menos honesta. Hospitais abaixo de 5 internações/mês não são publicados (erro medido acima de 50%), e os que pararam de reportar antes da última competência também não. Método completo, métricas e limitações no model card.
O que não fazemos, e por quê: não estimamos risco de readmissão ou reinternação por paciente. A AIH pública não tem identificador estável de paciente (removido por LGPD) — ligar duas internações à mesma pessoa exigiria dado que não é público. Preferimos declarar essa limitação a produzir uma métrica que pareça precisa sem sustentação nos dados abertos.
15. Cobertura da Atenção Primária (e-Gestor AB) #
Página Atenção Primária. Publicamos a cobertura potencial da APS por município e mês, de janeiro de 2021 à competência mais recente (65 competências, 5.571 municípios).
- Fonte: API pública que abastece o relatório oficial de Cobertura da APS do Ministério da Saúde (
relatorioaps.saude.gov.br), servida porrelatorioaps-prd.saude.gov.br/cobertura/aps. Retorna JSON por município e competência, sem autenticação. Não é um endpoint formalmente documentado como API pública — é o que o próprio relatório público consome. - Definição oficial: capacidade de atendimento estimada das equipes credenciadas (ESF, EAP 20h e 30h, eSFR, eCR, EAPP) dividida pela população do município. Como cada tipo de equipe tem capacidade padronizada, o indicador é essencialmente uma contagem de equipes reescalada pela população.
- Denominador: a população usada é a estimativa oficial adotada pelo próprio relatório (campo de ano de referência e origem informados pela API), e não a série populacional do projeto — para que o número publicado aqui seja idêntico ao do relatório oficial.
Limitação central — o indicador satura e vira proxy de porte. Como poucas equipes já cobrem toda a população de um município pequeno, a cobertura potencial ultrapassa 100% em 86% dos municípios brasileiros, chegando a 800%. A consequência é que a variação entre municípios reflete sobretudo o tamanho do município, não a força da atenção primária: a correlação de postos entre cobertura e população é ρ = −0,54.
Teste contra ICSAP. Testamos a hipótese de que maior cobertura implicaria menos internações evitáveis (§12). A correlação bruta com ICSAP por 100 mil habitantes é ρ = +0,002 — nula, e no sinal contrário ao esperado. Controlando porte populacional e vulnerabilidade social, ρ parcial = +0,017. Estratificando, os municípios de menor porte têm simultaneamente a maior cobertura mediana (167%) e o maior ICSAP. Conclusão: a cobertura potencial, como publicada, não sustenta comparação entre municípios nem inferência sobre qualidade da atenção básica. Publicamos o dado porque ele é válido e útil para acompanhar um município ao longo do tempo e para contar equipes — e declaramos a limitação no topo da página, não em rodapé. Reprodutível em scripts/analise_cobertura_icsap.py; discussão completa no artigo “O que os indicadores não comparam”.
Teste de robustez — comparando só pares do mesmo porte. Testamos a objeção óbvia ao resultado acima: talvez a comparação só faça sentido dentro do mesmo porte populacional. Refizemos a análise com o desenho mais rigoroso disponível: densidade real de equipes (ESF por 10 mil habitantes, sem o teto de capacidade padronizada, em vez do percentual saturado), cada município comparado apenas ao seu quartil de população, e %ICSAP em vez de ICSAP por 100 mil habitantes — porque testamos e o ICSAP por 100 mil cai em municípios vulneráveis apenas porque o acesso hospitalar geral é menor lá (internações totais por mil habitantes também caem com a vulnerabilidade), não porque a atenção primária seja melhor; %ICSAP normaliza esse confundimento e fica praticamente constante entre quartis de vulnerabilidade (19–21%). Resultado: a correlação entre densidade de equipes e %ICSAP dentro do mesmo porte é ρ entre −0,02 e +0,18 conforme o quartil — sem relação prática. A co-ocorrência de baixa densidade de equipe com alto %ICSAP (campo atencao do mart) é 0,94× o que a independência estatística preveria — abaixo do acaso, não acima. Por isso o mart mart_equidade_aps_municipio é publicado como registro do teste, não como ranking: qualquer classificação individual de município a partir dele seria estatisticamente indistinguível de ruído. Reprodutível em scripts/analise_equidade_aps.py.
Teste longitudinal — e se o efeito de equipes novas demorar a aparecer? O teste acima usa um único ano (2024) e não captura efeito defasado de equipes recém- implantadas. Reprocessamos o ICSAP por município para 2021, 2022 e 2023 (2024 já disponível), montando um painel balanceado de 5.568 municípios × 4 anos (22.272 observações). O primeiro teste (efeito fixo só por município) deu ρ = +0,132 — sinal aparente, na direção errada, crescente com o porte. Investigamos e encontramos outro confundimento: ESF e %ICSAP subiram juntos no Brasil inteiro no período (ESF médio 3,67→4,05 por 10 mil hab.; %ICSAP médio 17,9%→21,2%), provável retomada pós-pandemia — uma tendência de calendário comum às duas variáveis, não relação causal entre si. Ao remover também o efeito de ano (efeito fixo duplo, município + ano), ρ cai para +0,006. A primeira diferença ano a ano (demeada por ano) e a versão defasada em 1 ano confirmam: |ρ| ≤ 0,032 em todos os desenhos corretamente especificados. O achado nulo se confirma também no tempo — e o episódio é, ele mesmo, um sexto caso do problema central deste projeto: uma tendência temporal compartilhada produz associação espúria do mesmo jeito que o porte municipal produzia antes; a correção (efeito fixo duplo) é o equivalente temporal do desenho pareado por porte. Reprodutível em scripts/analise_equidade_aps_longitudinal.py; discussão completa no preprint.
A limitação de saúde suplementar é real, mas concentrada nos grandes municípios. O ICSAP só enxerga internações do SUS — uma limitação que declarávamos sem testar. Trouxemos os vínculos ativos a plano médico-hospitalar por 100 habitantes por município (ANS, Dados Abertos, dez/2024, sem autenticação — scripts/pipeline_ans_beneficiarios.py) e cruzamos com %ICSAP dentro de cada quartil de porte (mesmo desenho do teste de robustez acima). O resultado é um gradiente monotônico por porte, não ruído: ρ = +0,05 (Q1, menores) → −0,00 (Q2) → −0,08 (Q3) → −0,29 (Q4, maiores) — quase nulo nos municípios pequenos (onde a cobertura suplementar é baixa e homogênea, ~4-5%) e moderado nos grandes (onde chega a 32% e varia bastante). A co-ocorrência de alta saúde suplementar com baixo %ICSAP, dentro do porte, é 1,00× o esperado ao acaso — nula no agregado nacional. Conclusão: a limitação é real, mas localizada em grandes municípios/capitais, e não afeta a leitura do achado nulo APS × ICSAP para a maioria dos municípios brasileiros. Descartamos antes um dataset pronto da ANS (taxa_de_cobertura_de_planos_de_saude) por trazer só o período corrente e taxas zeradas mesmo em São Paulo na amostra verificada — problema de qualidade daquele recorte específico, não deste teste. Reprodutível em scripts/analise_saude_suplementar_icsap.py.
Por que "vínculos por 100 hab." e não "% da população com plano". O SIB/ANS tem como unidade o vínculo (beneficiário × produto × operadora), não a pessoa, e localiza o registro pelo endereço do contrato, não pela residência. Uma pessoa com dois produtos conta duas vezes, e um contrato coletivo empresarial pode alocar vínculos ao município da sede da empresa. A razão vínculos/população, portanto, não é uma proporção de pessoas e pode legitimamente passar de 100 — e passa: Belém/AL (4.226 hab.) marcou 115,9 vínculos/100 hab. em 2021. Por isso a coluna se chama vinculos_plano_por_100_hab, e não pct_saude_suplementar como na versão anterior deste mart; municípios com razão > 100 recebem a flag razao_implausivel. Isso não altera nenhum resultado acima: como os testes usam Spearman (só a ordem importa), excluir o caso implausível e os 33 municípios com menos de 20 mil hab. e mais de 40 vínculos/100 hab. — candidatos a artefato de endereço de contrato — move ρ de +0,054 para +0,061 (Q1) e deixa Q4 em −0,286, inalterado. A distinção é de rigor na leitura do indicador, não de correção de viés. Fundamentação: R. F. Saldanha, Sistemas de Informação em Saúde no Brasil, cap. ANS.
16. Vacinação (PNI/RNDS) e os limites da cobertura municipal #
Doses aplicadas do Programa Nacional de Imunizações, alimentadas pela Rede Nacional de Dados em Saúde (RNDS). A RNDS em si não é fonte consumível — exige CNES, certificado ICP-Brasil e credenciamento no DATASUS, e trafega registro individual identificado. O que é aberto é o derivado: um arquivo mensal com registro individual pseudonimizado, publicado no portal de dados abertos do SUS. Processamos janeiro de 2023 a agosto de 2026 — 638 milhões de doses, lidas em streaming sem materializar os ~320 GB de CSV.
É a série mais atual do projeto. O arquivo de agosto de 2026 estava disponível em agosto de 2026: cerca de um mês de defasagem, contra três anos da mortalidade consolidada.
Integridade. Quarenta e quatro arquivos mensais independentes, cada um conferido: zero documentos duplicados dentro do mês, zero duplicados entre competências distintas, zero registros fora da própria competência, e os 5.571 municípios presentes em todos os meses. Entre 1,11% e 1,81% das doses por mês não trazem município do paciente.
Limpeza do vocabulário. O campo de imunobiológico traz 115 rótulos e nem todos são vacina: 11 são diluentes (DILBCG, NaCl 0,9%) e 18 são soros e imunoglobulinas (SAT, IGHAT), que são profilaxia pós-exposição. Outros três (FTp, Fta, Tétano) não classificamos com segurança e ficam de fora, listados em vez de sumirem em silêncio. Ao todo 1,47% das doses saem da contagem de vacinação.
Cobertura vacinal municipal: testada e reprovada. É a tabela que se esperaria aqui, e ela não existe de propósito. O critério foi fixado antes de olhar o resultado: correlação abaixo de 0,50 entre 2023 e 2024 significaria ruído. Deu 0,591. O detalhe por porte mostra o motivo — a cobertura mediana cai de 102,7% nos municípios com 50 a 100 nascidos para 86,2% nos com mais de 5 mil. Ruído não tem direção; isso é viés sistemático de denominador. Mesmo acima de 300 nascidos, onde a correlação passa de 0,70, quase 30% dos municípios seguem acima de 100%: onde o indicador é estável, o nível continua errado.
A hipótese óbvia foi testada e refutada. Suspeitávamos de descasamento geográfico — o numerador conta a dose pela residência declarada na vacinação, o denominador conta o nascimento pela residência da mãe no parto. A mediana dos municípios aplica 15,8% das doses dos seus residentes fora do próprio território, mas a correlação disso com o excesso de cobertura é +0,002. Não explica nada, porque o numerador já é por residência. Também comparamos BCG (aplicada na maternidade) com pentavalente (aplicada na unidade básica): se o problema fosse o local de nascimento, a diferença cresceria nos municípios pequenos — ela fica entre 0,8 e 2,6 pontos em todas as faixas de porte.
Por isso o recorte municipal publicado é contagem de doses, não taxa. Contagem não depende de denominador e não herda nada disso. Cobertura sai apenas por UF, apenas nos anos com nascidos vivos definitivos (2023 e 2024) e apenas para cinco indicadores da atenção básica. Cada indicador declara qual tipo de dose conta: somar tipos diferentes conta a mesma criança duas vezes, e um conjunto genérico produziu 110,6% de cobertura de BCG. Cobertura acima de 100% é usada como guarda automática. BCG e hepatite B ao nascer ficam de fora mesmo por UF — aplicadas na maternidade, chegam a 127,8% no Ceará e 121,0% em Alagoas em 2024, enquanto as cinco de atenção básica ficam contidas em 104,2%.
Incerteza que permanece. A composição do indicador move o número: incluir hexavalente e pentavalente acelular na cobertura de pentavalente levou 2024 de 92,2% para 96,4% — quatro pontos por uma decisão de rótulo. E o arquivo inclui doses de estabelecimentos privados integrados à RNDS, sem que saibamos se a cobertura oficial as considera. As duas ficam registradas em vez de escolhidas em silêncio.
17. Arquétipos de saúde municipal #
Classificamos municípios (população ≥ 20 mil) em 27 estratos pelo cruzamento dos tercis de três dimensões: mortalidade padronizada por idade (2023), vulnerabilidade-proxy (Censo 2022) e internações por 100 mil hab. (2023). Cada município recebe um rótulo interpretável (ex.: "mortalidade alta, vulnerabilidade média, muita internação"), exibido no boletim, e um código legível (M3V2I3). Os cortes dos tercis estão congelados no repositório: o estrato de um município é função apenas dos três valores dele, e não da companhia que ele tem na base.
Por que não é mais k-means. Até 28 de agosto de 2026 esta seção descrevia um agrupamento por k-means (k=5). Ele foi submetido a teste de estabilidade e reprovado: a silhueta cai monotonicamente a partir de K=2 — sinal de que os dados não têm grumos, e sim um contínuo que o algoritmo era obrigado a cortar em algum lugar —, o índice de Rand ajustado entre reamostragens ficou em 0,571 e 280 municípios (16%) trocavam de grupo sem que o dado deles mudasse. Quem consultasse o boletim duas vezes podia ler dois arquétipos diferentes. A estratificação por tercis fixos tem Rand ajustado 1,000 por construção. Reamostrando a base e recalculando os próprios cortes — teste mais duro, que pergunta o quanto o corte depende da amostra — o Rand ajustado fica em 0,899 e apenas 10 municípios (0,6%) trocariam de estrato em mais da metade das reamostragens. Esses continuam sendo municípios de fronteira; a diferença é que agora eles não se movem sozinhos entre duas visitas.
Cuidado com a falácia ecológica: estratos, o cruzamento vulnerabilidade × mortalidade e demais associações desta base são municipais (agregadas). Uma associação no nível do município não implica relação no nível do indivíduo, nem causalidade — servem para descrever padrões e levantar hipóteses, não para inferir risco individual.
18. Distância até os pares em internações evitáveis (ICSAP) #
Traduz o indicador ICSAP na pergunta que um gestor de fato faz: quanto estou acima de municípios comparáveis, e o que isso representa?
Métrica. Usamos a proporção de internações que são sensíveis à atenção primária (pct_icsap), não a taxa por habitante. A taxa por 100 mil é confundida pelo acesso: um município onde as pessoas não conseguem internar tem taxa baixa sem que a atenção primária seja boa. A proporção pergunta outra coisa — "das internações que de fato ocorreram, quantas eram evitáveis?" — e é bem menos sensível a isso.
Pares. A referência é a mediana do estrato de saúdedo município (tercis fixos de mortalidade × vulnerabilidade × internações, seção 17); onde não há estrato, usa-se faixa populacional × região. Comparar com a média nacional seria injusto: municípios diferem em estrutura, não apenas em gestão. Municípios com menos de 100 internações no ano ficam fora do cálculo da mediana do grupo (proporção instável), mas recebem a própria comparação sinalizada.
Correção em 2026-09-06 — números anteriores mudaram. Até esta data a mediana de referência era calculada sobre 2021–2024 somados, e não sobre o ano de cada linha: um município de 2021 era comparado com uma referência que incluía o futuro dos seus pares. A proporção de ICSAP não é estável no intervalo — 2021 é o ano em que a internação eletiva desabou —, então o efeito não é pequeno: 945 municípios trocaram de lado em 2021 (de abaixo da mediana para acima, ou o contrário), 366 em 2022, 353 em 2023 e 275 em 2024. O total nacional de internações acima dos pares em 2021 passou de 146.800 para 273.435. Também mudou n_pares, que contava município-ano e agora conta município. Quem citou estes números antes de 2026-09-06 deve conferir contra a versão atual: veja a V042 em migrations/ e a entrada 3.6.0 do CHANGELOG.
Conversão. As internações acima dos pares são (pct_icsap − mediana dos pares) × internações totais. Custo e permanência por internação vêm dos agravos traçadores da Lista Brasileira presentes na base (asma, DPOC, pneumonia, diabetes, insuficiência cardíaca e doença cerebrovascular). Esses seis pendem para o lado caro da lista — condições baratas como gastroenterite, infecção urinária e anemia não estão representadas —, então o valor em reais é um teto, não uma média fiel.
O que este número não é. Quatro limites que precisam acompanhar qualquer citação:
- Não é economia disponível. Alcançar a mediana exige investir em atenção primária — mais equipes, mais acompanhamento de condições crônicas —, não cortar. O valor dimensiona o problema; não é caixa a resgatar.
- Nem toda ICSAP é evitável. A Lista Brasileira reúne condições sensíveis à atenção primária: boa cobertura reduz, não zera. Por isso a referência é a mediana dos pares, e nunca zero.
- A associação é ecológica. Descreve um padrão municipal agregado — não risco individual, não relação causal.
- O ICSAP responde à oferta hospitalar local — medimos, e o efeito é grande. Esta advertência já existia aqui como hipótese ("onde faltam leitos, a internação eletiva desaparece e a fatia de ICSAP sobe mecanicamente"). Com os dados de leitos (§18) testamos, e o resultado foi na direção oposta e por outro mecanismo: ter leito local quase dobra a internação por ICSAP (+85% no 3º quartil de porte) sem alterar as demais. Não é a eletiva que some — é a internação sensível que aparece quando existe leito na cidade. Detalhes na seção 20.
Disponível na view mart_icsap_pares da API pública, no boletim municipal e na ferramenta MCP icsap_distancia_dos_pares.
19. Estabelecimentos de saúde (CNES) #
Exibido como KPI no mapa. É a primeira camada de oferta da plataforma: até aqui todos os indicadores contavam eventos (óbitos, casos, internações), nunca capacidade instalada. Sem denominador de oferta não dá para perguntar se um município tem estrutura para atender sua população.
- Fonte: API pública de dados abertos do Ministério da Saúde (
apidadosabertos.saude.gov.br/cnes/estabelecimentos), sem autenticação. É o cadastro corrente — não tem série histórica. - Cobertura: 629.987 estabelecimentos cadastrados no Brasil, dos quais 492.200 ativos nos 5.571 municípios. Publicamos apenas os ativos.
- Perfil hospitalar: estabelecimento com atendimento hospitalar declarado ou tipo de unidade com internação (tabela de domínio do CNES).
Armadilha 1 — cadastros desabilitados não são sinalizados como tal. Não existe campo de status óbvio: o que marca a desabilitação é o preenchimento de codigo_motivo_desabilitacao_estabelecimento. Contar sem filtrar infla a oferta com cadastros mortos — no Brasil inteiro são 137.787 registros desabilitados (22% da base) misturados aos ativos.
Armadilha 2 — "esfera administrativa" não significa propriedade pública. O campo descricao_esfera_administrativa indica qual ente gere/contratualiza o estabelecimento, não quem é o dono. Em Alta Floresta d'Oeste/RO, 67 dos 67 estabelecimentos aparecem como "MUNICIPAL" — mas só 32 (48%) são de fato públicos pela natureza jurídica; os demais são clínicas LTDA e consultórios de pessoa física. Ler esse campo como propriedade mais que dobra a rede pública aparente. Usamos o primeiro dígito de descricao_natureza_juridica_estabelecimento (tabela CONCLA: 1=público, 2=privado com fins lucrativos, 3=sem fins lucrativos, 4=pessoa física, 5=internacional).
Limitações declaradas. (a) Sem série histórica: o cadastro é uma foto do presente, e comparações ao longo do tempo exigem o FTP (ver leitos, abaixo). (b) Contagem de estabelecimentos não pondera porte — um hospital de 800 leitos e um posto pequeno contam igual; por isso a camada de leitos existe. Reprodutível em scripts/pipeline_cnes.py; mart público mart_cnes_municipio.
Leitos hospitalares (grupo LT, 2015–2024). A API de dados abertos não expõe leitos; o dado vem do FTP do DataSUS (arquivos LT{UF}{AAMM}.dbc), na competência de dezembro de cada ano. Exibido na visão hospitalar; mart público mart_leitos_municipio (55.710 linhas município-ano). Em 2024: 535.566 leitos totais, 357.084 SUS (66,7%) e 63.837 de UTI — e 1.971 municípios (35,4%) sem nenhum leito.
Cadastro não se soma no tempo. O CNES fotografa o mesmo estabelecimento todo mês; somar as 12 competências de um ano multiplicaria a capacidade por 12. Cada linha do mart é um snapshot de dezembro. As operações válidas são snapshot, média do período ou série mensal preservada — nunca soma.
UTI: por que a lista de códigos é explícita. A tabela oficial de domínios (SCNES_DOMINIOS, aba "LEITOS") coloca os códigos de UTI na faixa 74–86, mas o código 84 no meio dela é "acolhimento noturno", que não é terapia intensiva. Usar o intervalo 74 ≤ código ≤ 86 contaria leito de acolhimento como UTI, silenciosamente. Enumeramos os códigos um a um.
Descontinuidade declarada — a série de UTI entre 2020 e 2022. Os leitos do tipo "complementar" saltam de 59,8 mil (2019) para 99,4 mil (2021) e caem a 76,9 mil (2022), enquanto a fração deles sob códigos de UTI vai de 77% → 51% → 79%. A leitura mais provável é que leito emergencial da pandemia foi cadastrado fora dos códigos de UTI e depois desmobilizado. Consequência: o salto de UTI em 2022 (+20% em um ano) é em parte reclassificação, não expansão real. A tendência de dez anos (40,4 mil → 63,8 mil) é consistente; a variação ano a ano nessa janela não é comparável. Optamos por exibir a descontinuidade em vez de suavizá-la — quebra visível é informação, não defeito. Reprodutível em scripts/pipeline_cnes_leitos.py.
20. Leitos × ICSAP: o indicador responde à oferta hospitalar #
Com a camada de leitos (§18) foi possível testar uma advertência que esta metodologia carregava desde o início sem nunca ter sido medida: a de que o %ICSAP poderia estar inflado onde falta leito, porque "a internação eletiva desaparece e a fatia de ICSAP sobe mecanicamente". Cruzamos as duas bases para os 5.570 municípios (2024). O resultado contradiz a hipótese na direção e no mecanismo.
Direção oposta. A correlação entre leitos SUS por mil habitantes e %ICSAP é positiva: ρ = +0,32 bruta, +0,34 controlando porte e vulnerabilidade, e entre +0,16 e +0,47 dentro de cada quartil de porte (positiva nos quatro). Municípios sem leito local têm %ICSAP menor (mediana 17,8%), não maior, que os municípios com leito (21,5%).
Mecanismo: é o numerador, não o denominador. Decompondo as internações em ICSAP e não-ICSAP por habitante, dentro de cada quartil de porte, o efeito da presença de leito local aparece quase inteiramente sobre o ICSAP:
| Porte | Oferta local | ICSAP /100 mil | Não-ICSAP /100 mil | %ICSAP |
|---|---|---|---|---|
| Q2 | sem leito | 1.156 | 5.483 | 17,3% |
| Q2 | com leito | 1.745 (+51%) | 5.887 (+7%) | 22,8% |
| Q3 | sem leito | 961 | 5.145 | 15,4% |
| Q3 | com leito | 1.782 (+85%) | 5.728 (+11%) | 23,5% |
| Q4 | sem leito | 877 | 5.604 | 14,6% |
| Q4 | com leito | 1.343 (+53%) | 5.571 (−1%) | 19,4% |
Não é a internação eletiva que some por falta de leito — é a internação sensível à atenção primária que aparece quando existe leito na cidade. Pneumonia, desidratação e descompensação de insuficiência cardíaca são exatamente o que um hospital pequeno interna. Sem leito local, esses casos são resolvidos em ambulatório ou simplesmente não viajam; só o caso complexo viaja. É oferta induzindo demanda, concentrada nas internações discricionárias que o ICSAP mede.
Consequência para o uso do indicador. Um município que abre um hospital pequeno verá seu %ICSAP subir — e, pela leitura convencional ("ICSAP alto = atenção primária fraca"), seria classificado como tendo piorado a atenção básica, quando o que mudou foi a oferta hospitalar. Assim como a cobertura potencial da APS mede porte municipal (§15), o %ICSAP mede, em parte relevante, a existência de leito na cidade. Comparações de ICSAP entre municípios devem considerar a oferta hospitalar local; a comparação pareada da §17 já vai nessa direção, mas o par ideal também controlaria leitos.
Ressalva semântica declarada. O ICSAP é medido por município de residência do paciente; os leitos, por município do estabelecimento. "Sem leito" significa sem oferta local, não sem acesso: o morador se interna em outro município e a internação conta para a residência dele. O efeito medido, portanto, opera por barreira de deslocamento — não por ausência absoluta de leito. Reprodutível em scripts/analise_leitos_icsap.py; mart público mart_leitos_icsap_municipio.
21. Vazio assistencial e mortalidade: um achado nulo, testado a fundo #
1.994 municípios (35,8% em 2023) não têm nenhum leito hospitalar local. A pergunta óbvia — isso mata mais gente? — exige separar duas hipóteses com implicações opostas: (a) sobrevida, o caso grave morre por falta de leito perto (assinatura: taxa padronizada por idade maior); ou (b) local da morte, a mesma morte ocorre em casa em vez do hospital, sem mudar a taxa total. Cruzamos leitos (CNES-LT) com mortalidade (SIM), ano de 2023 (consolidado), para os 5.570 municípios.
Nenhuma das duas se confirma. A taxa padronizada é praticamente igual entre municípios com e sem leito local, dentro de cada quartil de porte, e a diferença que existe favorece levemente o grupo sem leito (−8,6 a −4,6 por 100 mil). O efeito bruto sobre o local da morte (+1,9 p.p. de óbitos domiciliares) também colapsa dentro do porte (+0,7 a −0,3 p.p.) — era majoritariamente confundimento de porte, o mesmo padrão já visto em cobertura da APS e ICSAP.
Teste de robustez decisivo — a região Norte. Se a falta de leito local matasse por barreira de deslocamento, o efeito deveria aparecer onde as distâncias até um hospital de referência são maiores. Na região Norte, a taxa padronizada mediana é 627,3 sem leito local contra 662,5 com — mesma direção nula, sem inversão. Checamos também sub-registro (municípios pequenos podem notificar menos óbitos, o que enviesaria a taxa bruta para baixo): a taxa bruta por habitante é de fato menor sem leito, mas a padronizada — que corrige composição etária — não é, indicando que a diferença bruta é população mais jovem, não subnotificação.
Coerência com o achado de ICSAP (§19). Leito local quase dobra a internação por causas sensíveis à atenção primária, mas não muda a mortalidade padronizada — dois achados independentes sugerindo que o hospital pequeno interna muito caso de baixa complexidade sem alterar desfecho de sobrevida.
Limitação declarada, não resolvida. "Sem leito local" não mede distância até o leito mais próximo — um município a 20 km de um hospital regional e outro a 300 km entram no mesmo grupo. O teste regional atenua essa preocupação, mas não a substitui; medir distância exigiria geocodificação não realizada. Reprodutível em scripts/analise_vazio_assistencial.py; mart público mart_vazio_assistencial_municipio.
22. Gasto público em saúde (SIOPS) × ICSAP: o quarto achado nulo #
Até aqui a plataforma media desfecho (mortalidade, ICSAP, HSMR) e oferta física (leitos), nunca o insumo financeiro. O SIOPS é a única base nacional com orçamento público de saúde por município, e permite testar a hipótese mais intuitiva de todas: gastar mais está associado a internar menos por condição evitável?
De onde vem. O SIOPS não está no FTP do DataSUS, não está na API de dados abertos do Ministério (85 rotas, nenhuma financeira) e não está no SICONFI — o Anexo 12 do RREO, que é o demonstrativo de saúde, é transmitido pelo próprio SIOPS e não aparece na API do Tesouro. A via pública é o TABNET da série histórica de indicadores municipais, um arquivo de definição por UF. Extraímos gasto próprio por habitante, percentual da receita própria aplicado em ASPS (o piso de 15% da EC 29 / LC 141), despesa total e transferências do SUS, para 2021–2024: 22.276 linhas, 5.569 municípios.
O confundidor mais forte que já medimos. População × gasto próprio por habitante dá ρ = −0,578. Município pequeno gasta muito mais por habitante — mediana de R$ 1.544 no quartil dos menores contra R$ 633 no dos maiores — porque custo fixo se dilui em menos gente. Qualquer correlação bruta entre gasto e desfecho carrega isso dentro.
Resultado. Dentro de cada quartil de porte, ρ entre gasto próprio e %ICSAP é −0,00 (Q1), +0,03 (Q2), −0,02 (Q3) e −0,14 (Q4). O sinal troca de direção e só o quartil superior mostra algo — padrão de resíduo de porte, não de efeito estável. A co-ocorrência de alto gasto com baixo %ICSAP, dentro do porte, é 1,01× o esperado ao acaso. Somando aos anteriores, é o quarto achado nulo sobre o %ICSAP: nem cobertura da APS, nem saúde suplementar, nem vazio assistencial, nem gasto explicam sua variação entre municípios comparáveis. O que move o indicador segue sendo porte e oferta hospitalar local (§19).
A armadilha do agregado: um gradiente que não existe. Vale registrar uma leitura que parece contradizer o achado nulo da vulnerabilidade, porque quem refizer as contas vai encontrá-la. Somando internações em vez de comparar municípios, o %ICSAP por quartil de vulnerabilidade fica monotônico e forte:
| %ICSAP por quartil de IVS (2024) | Q1 | Q2 | Q3 | Q4 |
|---|---|---|---|---|
| mediana entre municípios — o que publicamos | 19,1% | 21,1% | 20,6% | 19,8% |
| agregado, ponderado por internação | 18,1% | 21,0% | 22,5% | 23,7% |
A segunda linha sobe do menos para o mais vulnerável nos quatro anos da série, e é tentador lê-la como a desigualdade que a primeira não mostra. Ela não é isso. O quartil menos vulnerável concentra 59,7% de todas as internações do país em 25,2% dos municípios — é onde estão as cidades grandes, com população mediana de 20.512 contra cerca de 10 mil nos demais quartis. E município grande tem %ICSAP baixo, pelo motivo já medido na §19: o indicador responde a porte e oferta hospitalar. O agregado, ao ponderar por internação, mede porte disfarçado de vulnerabilidade.
O teste que desmonta é o padrão-ouro do projeto — comparar dentro da mesma faixa de porte. O sinal troca de direção: ρ = −0,054 nos municípios com menos de 20 mil habitantes (n = 3.794), +0,166 entre 20 e 100 mil (n = 1.411) e +0,048 acima de 100 mil (n = 336, p = 0,38, não significativo). Não há gradiente consistente; há paradoxo de Simpson.
Publicamos as duas linhas de propósito. Esconder a segunda não a impediria de existir — qualquer pessoa que baixe mart_icsap_municipio e some as colunas chega nela em dois minutos. O que evita a leitura errada não é omitir o número, é mostrar de onde ele vem.
Limitações declaradas. O dado é autodeclarado pelo ente e homologado pelo gestor — não há verificação externa das transações. É despesa empenhada, que difere de liquidada e paga. Per capita em município pequeno oscila muito: uma obra desloca o indicador sem mudança estrutural. E gasto não é acesso nem qualidade — um município pode gastar muito e mal; o SIOPS não mede produção assistencial nem necessidade. Os indicadores de subfunção (atenção básica, assistência hospitalar), que seriam os mais interessantes para este cruzamento, existem no sistema mas vêm vazios de 2016 em diante — medimos: 22 de 23 municípios do Acre preenchidos em 2015, zero em 2020 e em 2024. Reprodutível em scripts/pipeline_siops.py e scripts/analise_siops_icsap.py; marts públicos mart_siops_municipio e mart_siops_icsap_municipio. Fundamentação da leitura do sistema: R. F. Saldanha, Sistemas de Informação em Saúde no Brasil, cap. SIOPS.
23. Perfil de causas por município: seis eixos, nenhum grupo, e a codificação #
A pergunta que motiva esta seção veio de fora: tratar cada município como um ponto, as coordenadas sendo a composição de causas de morte, e perguntar quem morre de forma parecida. É análise não supervisionada clássica — e é justamente o tipo de análise que sempre devolve alguma coisa. PCA sempre acha componentes; k-means sempre acha grupos. Nada disso falha com erro: falha produzindo resultado bonito e vazio. Por isso cada etapa aqui foi comparada com um nulo multinomial, em que cada município sorteia os seus óbitos da composição nacional.
O grão que faltava. Até 2026-09, a base tinha município × capítulo da CID (22 categorias) e CID de três caracteres × UF — nunca os dois cruzados. A tabela nova tem 3.612.357 células município × CID × ano e 7.759.402 no grão mensal, e não exigiu coleta: o grão já existia dentro do pipeline e era agregado para cima antes de virar tabela. Ela reconcilia exatamente com a mortalidade já publicada — 14.484.496 óbitos, 55.940 pares município-ano, divergência zero.
B34 é COVID-19, não "infecção viral não especificada". O SIM brasileiro nunca usou U07: são zero registros em dez anos. A COVID foi codificada como B34.2, que truncada em três caracteres vira B34 — cuja descrição oficial na CID-10 é exatamente o texto que um filtro de "causas inespecíficas" descartaria. Foram 60 a 240 óbitos por ano entre 2015 e 2019, contra 425.218 em 2021. Quem rodar esta análise sem saber disso apaga a pandemia da matriz, ou a mantém e a interpreta errado.
Quatro confundidores saem antes de qualquer conclusão: log da população, fração com 60 anos ou mais, percentual de causas mal definidas e fração de B34. Com os quatro controles o primeiro componente cai de 6,3% para 3,3% da variância — quase metade do que pareceria "padrão de mortalidade" era porte, idade, qualidade do registro e pandemia. A estrutura sobrevive: seis componentes ainda superam duas vezes o nulo.
Não há grupos discretos — há um contínuo estruturado. Duas medidas discordam de um jeito que só tem uma leitura: o índice Rand ajustado entre partições de subamostras de 80% é 0,93 (a partição se reproduz), enquanto a silhueta média é 0,17 (os grupos não se separam). Partição reprodutível com silhueta baixa é a assinatura de um gradiente: o mesmo corte reaparece porque a direção é real, não porque existam ilhas. A fração de soma de quadrados não explicada também cai sem cotovelo de k=2 a k=20. Por isso o produto publicado são as coordenadas, e o rótulo de grupo vai declarado como discretização, não como tipologia descoberta.
O eixo principal é, em quase um terço, como se codifica. O polo negativo do primeiro componente reúne I64, I10, E14 e V29; o positivo, C18, C34, C25 e C43. Lidos como doença seriam "cerebrovascular e metabólico" contra "câncer". Lidos pelo texto da CID, os quatro do lado negativo terminam em NE — não especificado, e os do positivo são diagnósticos precisos. Construindo um índice de inespecificidade (fração dos óbitos em CID cuja descrição traz NE, NCOP ou SOE, excluído o B34 por ser COVID), a correlação com o primeiro componente é −0,54 (r² = 0,29) — enquanto o indicador clássico de qualidade, o percentual de causas mal definidas, correlaciona apenas +0,37 com esse índice. São coisas diferentes: um mede o balde do R99, o outro mede a granularidade de todo o resto. Uma clusterização publicada sem esse controle descreveria, em boa parte, cultura de codificação médica — e seria lida como epidemiologia.
Correlação entre causas: o contemporâneo vale, a defasagem não. Nas séries mensais nacionais (120 pontos), sem tendência e sem efeito de mês civil, o par de maior correlação de toda a matriz é A90 × A91 = +0,97 — dengue e dengue hemorrágica, o único par do qual se pode afirmar de antemão que tem de correlacionar. O controle positivo passa. Já a correlação cruzada, com defasagem de −6 a +6 meses, não se sustenta: o pico de |r| se empilha nas bordas da janela (4.413 pares contra 1.287 por lag intermediário), assinatura de busca sobreajustada, e os pares "revelados" são clinicamente implausíveis. Publicado como achado negativo.
Detecção de mudança de padrão, e por que não é z-score. A mediana é de 77 óbitos por município-ano e a maioria das células é 0, 1 ou 2: a distribuição normal não aproxima isso. O teste é binomial negativa, com dispersão estimada pela variação ano a ano dentro do próprio município. Os controles positivos são dengue e COVID — e a dengue aparece apenas em 2024, o ano da maior epidemia registrada, com São Paulo marcando 422 óbitos contra 6,5 esperados. Mas o resultado mais útil é outro: sem descontar a tendência nacional, o que mais aparece não são epidemias e sim deriva de codificação — N39, E11, G30 e I10 encabeçam a lista, e os sinais crescem monotonicamente de 203 em 2020 para 644 em 2024. Por isso a tabela traz dois escores, um contra a própria história e outro descontando o que o Brasil fez.
Limitações declaradas. O desenho é ecológico e nada aqui é individual. O corte de 500 óbitos no período deixa 3.430 dos 5.570 municípios — os menores ficam de fora porque seu perfil é ruído multinomial, não porque não importem. A estrutura etária entra pelo Censo 2022 e é tratada como estática. E o índice de inespecificidade depende do texto da descrição da CID-10, não de uma classificação oficial de imprecisão. Reprodutível em scripts/pipeline_mortalidade_causa_municipio.py, scripts/analise_perfil_mortalidade.py e scripts/analise_anomalia_causas.py; marts públicos mart_mortalidade_causa_municipio, mart_perfil_mortalidade_municipio, mart_correlacao_causas e mart_anomalia_causa_municipio.
24. Privacidade e células de contagem pequena #
Nenhum microdado individual é publicado: o banco recebe apenas agregados (município × período × categoria). Não há registros individuais, datas exatas de óbito, nem qualquer chave que permita ligar dois eventos à mesma pessoa.
Sobre células pequenas. Em recortes finos (município × capítulo CID × sexo × ano) existem cerca de 206 mil células com 1 a 4 óbitos. Optamos deliberadamente por não suprimi-las, e é importante explicitar o porquê: a fonte primária — os microdados do SIM, publicados pelo próprio Ministério da Saúde no OpenDataSUS — contém registros individuais com município de residência, sexo, idade, escolaridade, raça/cor e CID-10 de 4 caracteres. Ou seja, o dado de origem é substancialmente mais granular e mais identificável do que qualquer agregado aqui publicado. O próprio DATASUS oferece o TABNET, ferramenta pública que produz exatamente essas tabulações de forma interativa.
Nesse contexto, suprimir células pequenas ofereceria uma aparência de proteção sem ganho real de privacidade, enquanto destruiria justamente a informação dos municípios pequenos — que são os menos servidos pelas ferramentas existentes e os que mais precisam de dados acessíveis. A regra que seguimos é outra e, entendemos, mais honesta: nunca publicar nada mais granular do que a fonte pública de origem.
Isso não elimina a cautela analítica: contagens pequenas geram taxas instáveis. Por isso toda taxa bruta vem com IC95% e há alerta explícito para municípios com menos de 10 mil habitantes (seção 5).