Internações do SUS em Pernambuco, dos Arquivos do DATASUS a um Painel

Internações do SUS em Pernambuco, dos Arquivos do DATASUS a um Painel

Setor
Saúde
Ferramentas
Python, Apache Spark, dbt, DuckDB, Docker, HTML, CSS e JavaScript
Entregas
  • Pipeline com camadas bronze, silver e gold
  • Modelo dimensional com 25 testes
  • Painel interativo publicado
  • Documentação das decisões e dos limites

Desafio

Toda internação paga pelo SUS gera uma AIH, a autorização de internação hospitalar, e o DATASUS publica esses registros todo mês. Os dados são abertos, mas chegam em arquivos .dbc, um formato comprimido que só o próprio DATASUS usa, com códigos no lugar dos nomes e texto em Latin-1. Para saber quais doenças mais internam, quanto o SUS pagou ou de onde vêm os pacientes de um hospital, alguém precisa descomprimir os arquivos, cruzar com quatro tabelas de referência e tratar as contas que os hospitais reapresentam em outros meses.

Este projeto de estudo monta esse caminho completo para as internações de Pernambuco em 2024, com as ferramentas usadas em engenharia de dados hoje: Apache Spark para o processamento, dbt para o modelo e os testes, e Docker para que qualquer pessoa rode tudo com um comando.

Solução

O pipeline segue a arquitetura em camadas bronze, silver e gold:

Fontes públicas, camadas do pipeline e painel

  1. Raw. Um script em Python baixa os 12 arquivos mensais do SIH/SUS e as tabelas de referência: procedimentos do SIGTAP, CID-10, cadastro de estabelecimentos do CNES e municípios do IBGE.
  2. Bronze. Os .dbc são descomprimidos e gravados em Parquet, com todas as colunas como texto. As tabelas de referência passam de Latin-1 para UTF-8.
  3. Silver. O Spark converte datas e valores, calcula a idade em anos e a faixa etária e fica só com a versão mais recente de cada AIH, o que remove 1.714 reapresentações.
  4. Gold. O dbt monta o modelo dimensional sobre o DuckDB: um fato de internações, cinco dimensões e um mart mensal por hospital. Os códigos do SIH viram nomes por meio de tabelas de tradução, e o resultado é gravado em Parquet.
  5. Painel. Um script agrega a gold e gera um único arquivo HTML com os dados embutidos, sem nenhuma biblioteca externa.

Os 25 testes do dbt rodam a cada execução. Além das chaves e dos relacionamentos, há testes de regra de negócio: a data de saída nunca é anterior à de internação, nenhum valor é negativo e o total da gold bate com o da silver.

A descompressão dos .dbc lê o arquivo em pedaços pequenos, e dentro do Docker, lendo da pasta do Windows, cada arquivo levava mais de 6 minutos. Copiando o arquivo antes para o disco do contêiner, leva menos de 1 segundo. A camada bronze caiu de mais de uma hora para 41 segundos, e o pipeline inteiro, com os arquivos já baixados, roda em cerca de um minuto.

Painel filtrado no IMIP, o hospital com mais internações em 2024

Resultado

  • 666.262 internações em 254 hospitais, que custaram R$ 1,12 bilhão ao SUS em 2024. A permanência média foi de 4,9 dias e 4,2% das internações terminaram em óbito.
  • Gravidez, parto e puerpério é o capítulo da CID-10 que mais interna, com 16% dos casos, seguido de lesões e causas externas e de neoplasias.
  • 59,4% dos pacientes foram internados fora da cidade onde moram, e 7 em cada 10 internações começaram pela urgência. O Recife recebe 337 mil internações, das quais dois terços são de moradores de outros municípios.
  • O painel mostra os indicadores do estado e de cada um dos 40 hospitais com mais internações, mês a mês, por diagnóstico, procedimento, faixa etária e sexo. O botão Ver projeto abre o painel.

Projeto de estudo da Dome Analytics com dados públicos do DATASUS e do IBGE. Não tem relação com o Ministério da Saúde nem com os hospitais citados.

Ver projeto

Projetos relacionados

« Voltar aos projetos