Objetivo do curso: Capacitar participantes a extrair, validar, tratar e analisar microdados do SUS com R, integrando fontes de custos/preços e técnicas aplicadas à avaliação econômica.
Objetivo da aula: construir um fluxo reprodutível e intermediário no R, partindo de um arquivo público do SUS até uma tabela enriquecida com metadados e informações cadastrais.
O SUS produz dados durante atividades assistenciais, administrativas, epidemiológicas, regulatórias e financeiras. Esses registros são enviados, validados, centralizados e disseminados por diferentes estratégias de consolidação e sistemas de informação.
Um mesmo fenômeno pode exigir mais de uma fonte. Para estudar a produção de um procedimento, por exemplo, pode ser necessário combinar:
Os sistemas não são apenas arquivos. Cada um possui finalidade, fluxo, unidade de registro, periodicidade, regras de validação e dicionário próprios.
| Sistema | Período observado | Subsistemas | Arquivos DBC | Volume compactado | Registros catalogados |
|---|---|---|---|---|---|
| SIA | 1994-2026 | 14 | 58.572 | 429,6 GB | 7,03 bilhões |
| SIH | 1992-2026 | 6 | 31.937 | 83,1 GB | 1,25 bilhão |
| CNES | 2005-2026 | 18 | 80.191 | 53,3 GB | 619,0 milhões |
| SINASC | 1994-2024 | 2 | 1.666 | 10,6 GB | 33,8 milhões |
| SIM | 1996-2024 | 6 | 940 | 10,0 GB | 32,8 milhões |
| SINAN | 1999-2025 | 45 | 741 | 2,6 GB | 23,5 milhões |
Os totais de registros refletem o preenchimento disponível no catálogo. Valor zero pode significar contagem ainda não calculada, e não ausência de registros no arquivo.
| Sistema | Subsistema | Temporalidade típica | Arquivos DBC | Volume compactado | Registros catalogados |
|---|---|---|---|---|---|
| SIA | PA | Mensal por UF | 10.792 | 214,2 GB | 3,76 bilhões |
| SIH | RD | Mensal por UF | 11.157 | 25,4 GB | 83,4 milhões |
| SIH | SP | Mensal por UF | 9.412 | 56,4 GB | 1,16 bilhão |
| CNES | ST | Mensal por UF | 6.779 | 3,3 GB | 31,0 milhões |
| SIM | DO | Anual por UF | 812 | 9,6 GB | 31,7 milhões |
| SINASC | DN | Anual por UF | 1.558 | 10,4 GB | 33,8 milhões |
Essas diferenças alteram a estratégia analítica:
dplyrO SQL usado para produzir a lista pode ser representado no R:
resumo_ftp <- catalogo |>
transmute(
sg_uf,
sg_sistema = toupper(sg_sistema),
sg_versao = toupper(sg_versao),
sg_subsistema = toupper(sg_subsistema),
ano_competencia = as.integer(ano_competencia),
qt_bytes_ftp,
qt_registro_dbc,
dbc,
no_dbc_origem
) |>
group_by(
sg_uf,
sg_sistema,
sg_versao,
sg_subsistema,
ano_competencia
) |>
summarise(
qt_bytes_ftp = sum(qt_bytes_ftp, na.rm = TRUE),
qt_registro_dbc = sum(qt_registro_dbc, na.rm = TRUE),
dbc = sum(dbc, na.rm = TRUE),
no_dbc_origem = paste(no_dbc_origem, collapse = " "),
.groups = "drop"
) |>
arrange(
sg_uf,
sg_sistema,
sg_versao,
sg_subsistema,
ano_competencia
)Resumo por sistema:
catalogo |>
group_by(sg_sistema) |>
summarise(
primeiro_ano = min(ano_competencia, na.rm = TRUE),
ultimo_ano = max(ano_competencia, na.rm = TRUE),
arquivos = sum(dbc, na.rm = TRUE),
gigabytes = sum(qt_bytes_ftp, na.rm = TRUE) / 1e9,
registros = sum(qt_registro_dbc, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(gigabytes))Considere o código 0418010048 isoladamente:
Metadados descrevem como interpretar o registro:
| Elemento | Exemplo |
|---|---|
| Nome do campo | PA_PROC_ID |
| Descrição | Código do procedimento ambulatorial |
| Tipo | Caractere |
| Tamanho | 10 posições |
| Domínio | Procedimentos válidos no SIGTAP |
| Temporalidade | Competência informada em PA_CMP |
| Origem | Arquivo PA do SIA |
O SIGTAP organiza a Tabela de Procedimentos, Medicamentos e OPM do SUS. Além do código e do nome, registra atributos e compatibilidades que variam por competência.
Pode conter relações com:
Um procedimento deve ser interpretado usando o SIGTAP da competência correspondente. A tabela pode mudar ao longo do tempo.
url: http://sigtap.datasus.gov.br/tabela-unificada/app/sec/procedimento/exibir/0418010048/08/2026
| Campo | Valor |
|---|---|
| Código | 04.18.01.004-8 |
| Procedimento | Implante de cateter de longa permanência para hemodiálise |
| Competência | 08/2026 |
| Histórico | Consultar histórico de alterações |
| Nível | Código | Descrição |
|---|---|---|
| Grupo | 04 |
Procedimentos cirúrgicos |
| Subgrupo | 18 |
Cirurgia em nefrologia |
| Forma de organização | 01 |
Acessos para diálise |
| Campo | Valor |
|---|---|
| Modalidade de atendimento | Ambulatorial |
| Complexidade | Alta complexidade |
| Financiamento | Fundo de Ações Estratégicas e Compensação — FAEC |
| Subtipo de financiamento | Nefrologia |
| Instrumento de registro | APAC — procedimento principal |
| Sexo | Ambos |
| Média de permanência | — |
| Tempo de permanência | — |
| Quantidade máxima | 1 |
| Idade mínima | 0 meses |
| Idade máxima | 130 anos |
| Pontos | — |
| Atributos complementares |
|---|
| Inclui o valor da anestesia |
| Exige CPF ou CNS |
| Exige o registro de dados complementares na APAC |
| Programa Mais Acesso a Especialistas — Componente Cirurgias Ambulatoriais |
| Componente | Valor |
|---|---|
| Serviço ambulatorial | R$ 200,00 |
| Total ambulatorial | R$ 200,00 |
| Serviço hospitalar | R$ 0,00 |
| Serviço profissional | R$ 0,00 |
| Total hospitalar | R$ 0,00 |
| CID-10 | Descrição |
|---|---|
N180 |
Doença renal em estádio final |
| CID-10 | Descrição |
|---|---|
E140 |
Diabetes mellitus não especificado — com coma |
E141 |
Diabetes mellitus não especificado — com cetoacidose |
E142 |
Diabetes mellitus não especificado — com complicações renais |
E143 |
Diabetes mellitus não especificado — com complicações oftálmicas |
E144 |
Diabetes mellitus não especificado — com complicações neurológicas |
E145 |
Diabetes mellitus não especificado — com complicações circulatórias periféricas |
E146 |
Diabetes mellitus não especificado — com outras complicações especificadas |
E147 |
Diabetes mellitus não especificado — com complicações múltiplas |
E148 |
Diabetes mellitus não especificado — com complicações não especificadas |
E149 |
Diabetes mellitus não especificado — sem complicações |
I10 |
Hipertensão essencial (primária) |
N030 |
Síndrome nefrítica crônica — anormalidade glomerular minor |
N031 |
Síndrome nefrítica crônica — lesões glomerulares focais e segmentares |
N032 |
Síndrome nefrítica crônica — glomerulonefrite membranosa difusa |
N033 |
Síndrome nefrítica crônica — glomerulonefrite proliferativa mesangial difusa |
N034 |
Síndrome nefrítica crônica — glomerulonefrite proliferativa endocapilar difusa |
N035 |
Síndrome nefrítica crônica — glomerulonefrite mesangiocapilar difusa |
N036 |
Síndrome nefrítica crônica — doença de depósito denso |
N037 |
Síndrome nefrítica crônica — glomerulonefrite difusa em crescente |
N038 |
Síndrome nefrítica crônica — outras |
N039 |
Síndrome nefrítica crônica — não especificada |
N188 |
Outra insuficiência renal crônica |
N189 |
Insuficiência renal crônica não especificada |
Q613 |
Rim policístico não especificado |
T861 |
Falência ou rejeição de transplante de rim |
| CBO | Ocupação |
|---|---|
225109 |
Médico nefrologista |
225210 |
Médico cirurgião cardiovascular |
225220 |
Médico cirurgião do aparelho digestivo |
225225 |
Médico cirurgião geral |
225230 |
Médico cirurgião pediátrico |
| Serviço | Classificação | Descrição |
|---|---|---|
130 |
003 |
Confecção/intervenção de acessos para diálise — Atenção à Doença Renal Crônica |
| Código | Habilitação |
|---|---|
3802 |
Agora Tem Especialistas — Modalidade 1 |
3805 |
Agora Tem Especialistas — Componente Créditos Financeiros |
3806 |
Agora Tem Especialistas — Componente Ressarcimento ao SUS |
| Modalidade | Código de origem | Descrição |
|---|---|---|
| Ambulatorial | 27011011 |
Acesso para hemodiálise: implante de cateter de longa permanência |
| Código | Regra |
|---|---|
0015 |
Condiciona o tipo de financiamento em FAEC |
0013 |
Gera compensação financeira |
| Código | Ação ou serviço |
|---|---|
058 |
Cirurgias ambulatoriais com anestesia |
061 |
Cirurgias ambulatoriais em nefrologia |
143 |
Intervenções cirúrgicas para criação de acessos para diálise |
O Sistema de Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS — SIGTAP — organiza os procedimentos em níveis hierárquicos.
Grupo
└── Subgrupo
└── Forma de organização
└── Procedimento
O código do procedimento pode ser interpretado como:
GG.SS.FF.PPP-D
| Parte | Significado |
|---|---|
GG |
Grupo |
SS |
Subgrupo |
FF |
Forma de organização |
PPP |
Sequencial do procedimento |
D |
Dígito verificador |
Exemplo:
04.18.01.004-8
| Nível | Código | Descrição |
|---|---|---|
| Grupo | 04 |
Procedimentos cirúrgicos |
| Subgrupo | 0418 |
Cirurgia em nefrologia |
| Forma de organização | 041801 |
Acessos para diálise |
| Procedimento | 0418010048 |
Implante de cateter de longa permanência para hemodiálise |
No SIGTAP, o termo correto é forma de organização. A forma de apresentação ou registro da produção é representada por outro atributo, denominado instrumento de registro, como BPA-C, BPA-I, APAC e AIH.
| Grupo | Descrição | Exemplos de subgrupos | Exemplos de formas de organização |
|---|---|---|---|
01 |
Ações de promoção e prevenção em saúde | 0101 Ações coletivas e individuais em
saúde;0102 Vigilância em saúde |
010101 Educação em saúde;010102 Saúde
bucal;010201 Vigilância sanitária |
02 |
Procedimentos com finalidade diagnóstica | 0201 Coleta de material;0202
Diagnóstico em laboratório clínico;0204 Diagnóstico por
radiologia;0206 Diagnóstico por tomografia |
020101 Coleta de material por punção ou
biópsia;020201 Exames
bioquímicos;020401 Exames radiológicos da cabeça e
pescoço |
03 |
Procedimentos clínicos | 0301 Consultas, atendimentos e
acompanhamentos;0304 Tratamento em
oncologia;0305 Tratamento em
nefrologia;0309 Terapias especializadas |
030101 Consultas médicas e de outros profissionais de
nível superior;030108 Atendimento e acompanhamento
psicossocial;030114 Cuidados paliativos |
04 |
Procedimentos cirúrgicos | 0401 Pequenas cirurgias e cirurgias de pele, tecido
subcutâneo e mucosa;0406 Cirurgia do aparelho
circulatório;0416 Cirurgia em
oncologia;0418 Cirurgia em nefrologia |
041801 Acessos para diálise;formas específicas de cirurgia conforme órgão, sistema ou especialidade |
05 |
Transplantes de órgãos, tecidos e células | 0501 Coleta e exames para doação e
transplante;0502 Avaliação de morte
encefálica;0505 Transplante de órgãos, tecidos e
células;0506 Acompanhamento pré e pós-transplante |
Formas de organização relacionadas à doação, avaliação, processamento, transplante e acompanhamento |
06 |
Medicamentos | 0601 Medicamentos de dispensação
excepcional;0602 Medicamentos
estratégicos;0603 Medicamentos de âmbito hospitalar e
de urgência;0604 Componente Especializado da
Assistência Farmacêutica |
Formas organizadas por classe farmacológica ou finalidade terapêutica, como agentes antitrombóticos e medicamentos do sistema respiratório |
07 |
Órteses, próteses e materiais especiais | 0701 OPM não relacionadas ao ato
cirúrgico;0702 OPM relacionadas ao ato cirúrgico |
070101 OPM auxiliares da
locomoção;070103 OPM auditivas;070204
OPM em assistência cardiovascular;070210 OPM em
nefrologia |
08 |
Ações complementares da atenção à saúde | 0801 Ações relacionadas ao
estabelecimento;0802 Ações relacionadas ao
atendimento;0803 Autorização e
regulação;0804 Telessaúde |
080101 Incentivos;080201
Diárias;080301 Deslocamento e ajuda de
custo;080402 Atendimento em saúde mediado por
tecnologia digital |
09 |
Procedimentos para Ofertas de Cuidados Integrados | 0901 Atenção em oncologia;0902 Atenção
em cardiologia;0903 Atenção em
ortopedia;0904 Atenção em
otorrinolaringologia;0905 Atenção em
oftalmologia;0906 Atenção em saúde da mulher |
090101 Ofertas de Cuidados Integrados em
oncologia;090201 Ofertas de Cuidados Integrados em
cardiologia;090301 Ofertas de Cuidados Integrados em
ortopedia;090601 Ofertas de Cuidados Integrados em
saúde da mulher — ginecologia |
Os exemplos refletem a estrutura disponível na competência
08/2026. Grupos, subgrupos, formas de organização e procedimentos são atributos temporais e devem ser relacionados à competência correspondente.
A análise econômica deve integrar essas dimensões sem tratar valor SIGTAP, valor aprovado, crédito contratual, transferência e despesa executada como conceitos equivalentes.
Fonte: SIGTAP — Sistema de Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS.
Documentação técnica: Especificação Técnica para Integração com o SIGTAP.
Os arquivos disseminados resultam de processos operacionais. Para uso analítico, é comum realizar:
O produto analítico deve conservar a rastreabilidade até o arquivo de origem. Isso significa registrar, em cada linha, de qual arquivo e competência o dado foi obtido.
As colunas de rastreabilidade podem ser acrescentadas com
mutate():
dados <- dados |>
dplyr::mutate(
arquivo_origem = basename(arquivo),
competencia_origem = "202501"
)Esse código deve ser lido da seguinte forma:
| Trecho | Função |
|---|---|
dados \|> |
Envia o objeto dados para a próxima função |
dplyr::mutate() |
Cria ou modifica colunas |
arquivo_origem = basename(arquivo) |
Registra o nome do arquivo |
competencia_origem = "202501" |
Registra a competência do arquivo |
dados <- |
Armazena novamente o resultado no objeto dados |
Os valores são repetidos em todas as linhas porque todos os registros foram obtidos do mesmo arquivo.
Antes da inclusão da rastreabilidade:
pa_cnes |
pa_proc_id |
pa_qtdapr |
|---|---|---|
2000016 |
0301010072 |
10 |
2000024 |
0301010072 |
5 |
Depois da inclusão:
pa_cnes |
pa_proc_id |
pa_qtdapr |
arquivo_origem |
competencia_origem |
|---|---|---|---|---|
2000016 |
0301010072 |
10 | PAAC2501.dbc |
202501 |
2000024 |
0301010072 |
5 | PAAC2501.dbc |
202501 |
dados <- data.frame(
pa_cnes = c("2000016", "2000024"),
pa_proc_id = c("0301010072", "0301010072"),
pa_qtdapr = c(10, 5)
)
arquivo <- "PAAC2501.dbc"
dados <- dados |>
dplyr::mutate(
arquivo_origem = basename(arquivo),
competencia_origem = "202501"
)
dadosResultado esperado:
pa_cnes pa_proc_id pa_qtdapr arquivo_origem competencia_origem
1 2000016 0301010072 10 PAAC2501.dbc 202501
2 2000024 0301010072 5 PAAC2501.dbc 202501
Considere o arquivo:
PAAC2501.dbc
O nome informa:
| Parte | Significado |
|---|---|
PA |
Produção Ambulatorial |
AC |
Acre |
25 |
Ano de 2025 |
01 |
Mês de janeiro |
.dbc |
Formato do arquivo |
Portanto, a competência é 202501.
Primeiro, o arquivo é lido:
arquivo <- "PAAC2501.dbc"
url="ftp://ftp.datasus.gov.br/dissemin/publicos/SIASUS/200801_/Dados/"
curl_download(
paste0(url,arquivo),
destfile= arquivo
)
dados <- read.dbc::read.dbc(arquivo)Nesse momento, o objeto dados contém os registros do
arquivo, mas pode não conservar explicitamente o nome do arquivo
utilizado.
As colunas de origem permitem:
Quando vários arquivos forem processados, a rastreabilidade deve ser acrescentada antes da consolidação.
dados_ac <- read.dbc::read.dbc(
"PAAC2501.dbc"
) |>
dplyr::mutate(
arquivo_origem = "PAAC2501.dbc",
competencia_origem = "202501",
uf_origem = "AC"
)
dados_am <- read.dbc::read.dbc(
"PAAM2501.dbc"
) |>
dplyr::mutate(
arquivo_origem = "PAAM2501.dbc",
competencia_origem = "202501",
uf_origem = "AM"
)
dados <- dplyr::bind_rows(
dados_ac,
dados_am
)Assim, mesmo depois da consolidação, cada registro continua associado ao seu arquivo de origem.
No ecossistema analisado nesta aula, o Ministério da Saúde e a SEIDIGI/MS mantêm sistemas federais, nacionais, padrões, documentos técnicos e canais de disseminação.
Os principais canais utilizados serão:
A Agência Nacional de Vigilância Sanitária atua na regulação sanitária de produtos e serviços. No campo econômico, a Câmara de Regulação do Mercado de Medicamentos - CMED estabelece critérios e limites regulatórios de preços de medicamentos.
Essas informações podem apoiar:
Preço regulado, preço de compra, valor SIGTAP (MS) e custo do tratamento são conceitos diferentes.
repositório: https://dados.anvisa.gov.br/dados/
A Agência Nacional de Saúde Suplementar regula o setor de planos privados de assistência à saúde e disponibiliza bases sobre beneficiários, operadoras, produtos, utilização e informações econômico-financeiras.
Esses dados permitem estudar:
inventário de dados abertos: https://www.gov.br/ans/pt-br/acesso-a-informacao/perfil-do-setor/dados-abertos-1. Tabulador: https://www.ans.gov.br/anstabnet/
| Sistema ou fonte | Conteúdo principal | Unidade típica de análise | Uso em economia da saúde |
|---|---|---|---|
| Sistema de Informações Ambulatoriais do SUS (SIA) | Produção ambulatorial financiada pelo SUS | Procedimento, atendimento, BPA ou APAC | Quantidades apresentadas e aprovadas, valores ambulatoriais e perfil de utilização |
| Sistema de Informações Hospitalares do SUS (SIH) | Internações financiadas pelo SUS | AIH, internação ou ato hospitalar | Permanência, utilização de recursos, procedimentos e valores hospitalares |
| Sistema de Informações sobre Mortalidade (SIM) | Óbitos e causas de morte | Declaração de óbito | Mortalidade, sobrevida, carga de doença, anos de vida perdidos e desfechos |
| Sistema de Informação de Agravos de Notificação (SINAN) | Agravos e doenças de notificação compulsória | Notificação ou investigação | Incidência, prevalência, vigilância e impacto econômico dos agravos |
| Sistema de Informações sobre Nascidos Vivos (SINASC) | Nascidos vivos e características maternas e neonatais | Declaração de nascido vivo | Saúde materno-infantil, planejamento, desfechos perinatais e denominadores populacionais |
| Cadastro Nacional de Estabelecimentos de Saúde (CNES) | Estabelecimentos, serviços, equipamentos, leitos, equipes e profissionais | Estabelecimento por competência | Oferta, capacidade instalada, disponibilidade tecnológica e perfil dos prestadores |
| Sistema de Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS (SIGTAP) | Procedimentos, medicamentos e OPM do SUS, com atributos e regras de compatibilidade | Procedimento por competência | Valores de referência, modalidade, complexidade, financiamento e compatibilidades |
| Comunicação de Informação Hospitalar e Ambulatorial (CIHA) | Informações hospitalares e ambulatoriais não registradas no SIH em determinados segmentos | Evento hospitalar ou ambulatorial | Complementação da utilização assistencial e análise de atendimentos não representados pelo SIH |
| Sistema de Informações sobre Orçamentos Públicos em Saúde (SIOPS) | Receitas totais e despesas públicas em saúde declaradas pelos entes federativos | Ente federativo por período e classificação orçamentária | Financiamento público, gasto em saúde, execução orçamentária e cumprimento dos mínimos constitucionais |
| Banco de Preços em Saúde (BPS) | Compras públicas e privadas de medicamentos e dispositivos médicos | Item de compra, instituição e data da aquisição | Preços praticados, dispersão de preços, estimativas de custos e comparação entre compradores |
| Fundo Nacional de Saúde (FNS) | Transferências federais, convênios, propostas, instrumentos e pagamentos | Transferência, proposta, instrumento ou ordem bancária | Fluxo de recursos federais, execução financeira e distribuição dos repasses |
| Plataforma InvestSUS (InvestSUS) | Repasses, propostas, saldos e instrumentos acompanhados pelo Fundo Nacional de Saúde | Proposta, transferência, conta ou instrumento | Monitoramento de financiamento, investimento, empenho, pagamento e saldos |
| Sistema de Controle do Limite Financeiro da Média e Alta Complexidade (SISMAC) | Limites financeiros da média e alta complexidade e seus componentes | Gestor ou ente federativo por competência e componente financeiro | Análise do teto MAC, alterações de limites, alocação de recursos e comparação com a produção |
| Sistema de Monitoramento de Obras (SISMOB) | Propostas, execução e monitoramento de obras financiadas pelo Ministério da Saúde | Obra, proposta ou estabelecimento | Investimento em infraestrutura, execução física e financeira e expansão da capacidade instalada |
| Câmara de Regulação do Mercado de Medicamentos (CMED) | Preços regulados de medicamentos, como PF, PMC e PMVG | Medicamento e apresentação por lista e alíquota | Valores máximos regulatórios, aplicação do CAP e referência para estimativas de custos |
| Relação Nacional de Medicamentos Essenciais (RENAME) | Medicamentos e insumos selecionados para utilização no SUS | Medicamento, apresentação e componente da assistência farmacêutica | Definição do conjunto de tecnologias disponíveis, comparação de alternativas e planejamento farmacêutico |
| Componente Especializado da Assistência Farmacêutica (CEAF) | Medicamentos especializados, critérios de acesso, autorização e dispensação | Solicitação, autorização ou dispensação | Utilização de medicamentos especializados, continuidade do tratamento e impacto orçamentário |
| Sistema de Informações Ambulatoriais — APAC de Medicamentos (SIA/AM) | Registros de APAC de medicamentos | APAC, usuário, medicamento e competência | Quantidades autorizadas, utilização de medicamentos e acompanhamento da assistência farmacêutica |
| Sistema de Informações Ambulatoriais — APAC de Quimioterapia (SIA/AQ) | Registros de APAC relacionados à quimioterapia | APAC, usuário, procedimento oncológico e competência | Utilização de tratamentos oncológicos, produção, valores aprovados e trajetórias assistenciais |
| Agência Nacional de Saúde Suplementar (ANS) | Beneficiários, operadoras, planos, utilização e informações econômico-financeiras da saúde suplementar | Beneficiário, operadora, plano, evento ou período | Comparação entre saúde suplementar e SUS, despesas assistenciais, cobertura e utilização |
| Padrão de Troca de Informações na Saúde Suplementar (TISS) | Troca padronizada de informações entre prestadores e operadoras da saúde suplementar | Guia, evento assistencial ou item de cobrança | Utilização, pagamentos, custos assistenciais e padrões de cobrança na saúde suplementar |
| Rede Nacional de Dados em Saúde (RNDS) | Documentos clínicos e registros interoperáveis de saúde | Documento clínico, evento ou indivíduo, conforme autorização | Integração longitudinal de informações e análise de trajetórias assistenciais em ambientes autorizados |
| Tabulador de Informações de Saúde (TabNet) | Tabulações agregadas de sistemas oficiais do SUS | Célula agregada segundo período, território e filtros | Validação externa dos microdados, construção de indicadores e comparação de totais |
| Sala de Apoio à Gestão Estratégica (SAGE) | Indicadores, painéis e informações estratégicas do Ministério da Saúde | Indicador por período, território ou programa | Monitoramento de políticas, contextualização dos resultados e validação com dados consolidados |
| Comissão Nacional de Incorporação de Tecnologias no Sistema Único de Saúde (Conitec) | Recomendações sobre incorporação, exclusão ou alteração de tecnologias no SUS | Tecnologia, indicação ou recomendação | Evidências de eficácia, segurança, custo-efetividade e impacto orçamentário |
| Protocolos Clínicos e Diretrizes Terapêuticas (PCDT) | Critérios diagnósticos, tratamentos, acompanhamento e regras de acesso | Condição clínica, população ou tecnologia | Definição do comparador, população elegível, recursos utilizados e padrão assistencial |
| Rede Brasileira de Avaliação de Tecnologias em Saúde (Rebrats) | Estudos, métodos e instituições de Avaliação de Tecnologias em Saúde | Estudo, relatório ou tecnologia avaliada | Evidências econômicas, avaliações de custo-efetividade e apoio metodológico |
| Portal de Dados Abertos do Sistema Único de Saúde (Portal de Dados Abertos do SUS) | Conjuntos e recursos publicados por diferentes áreas do Ministério da Saúde | Conjunto, recurso ou registro, conforme a base | Descoberta de fontes complementares, integração de dados e reprodução de análises |
A unidade de análise varia conforme o arquivo, o subsistema e a forma de disseminação. Sistemas de produção, como SIA e SIH, disponibilizam registros assistenciais; sistemas financeiros, como SIOPS, SISMAC e InvestSUS, representam orçamento, limites ou transferências; fontes como TabNet e SAGE apresentam dados previamente agregados.
Valores do SIA, SIH e SIGTAP não devem ser interpretados automaticamente como custos econômicos reais. O BPS representa preços informados em compras, enquanto as listas da CMED apresentam limites regulatórios. SIOPS, FNS, InvestSUS, SISMAC e SISMOB representam dimensões distintas do financiamento e da execução dos recursos públicos.
A produção assistencial do SUS é registrada por diferentes instrumentos. A escolha depende da modalidade de atendimento, da necessidade de identificação do usuário e da exigência de autorização prévia.
| Instrumento | Sistema | Característica principal |
|---|---|---|
| Boletim de Produção Ambulatorial Consolidado (BPA-C) | Sistema de Informações Ambulatoriais do SUS (SIA) | Registra a produção ambulatorial de forma consolidada, sem identificação individual do usuário |
| Boletim de Produção Ambulatorial Individualizado (BPA-I) | Sistema de Informações Ambulatoriais do SUS (SIA) | Registra a produção ambulatorial individualizada, com informações do usuário e do atendimento |
| Autorização de Procedimentos Ambulatoriais (APAC) | Sistema de Informações Ambulatoriais do SUS (SIA) | Registra procedimentos ambulatoriais que exigem autorização, identificação do usuário e acompanhamento |
| Autorização de Internação Hospitalar (AIH) | Sistema de Informações Hospitalares do SUS (SIH) | Registra internações hospitalares autorizadas e financiadas pelo SUS |
O Sistema de Informações Ambulatoriais recebe e processa a produção ambulatorial. Os registros podem resultar de diferentes instrumentos, como BPA e APAC.
O arquivo, cuja nomenclatura padrão é PAUFAAMM.dbc,
consolida procedimentos ambulatoriais. Seu preenchimento varia conforme
o instrumento identificado em PA_DOCORIG.
Campos particularmente úteis:
| Campo | Conteúdo |
|---|---|
PA_CODUNI |
Código CNES do estabelecimento |
PA_GESTAO |
Município gestor ou indicação de gestão estadual |
PA_CMP |
Competência de realização |
PA_PROC_ID |
Procedimento ambulatorial |
PA_DOCORIG |
Instrumento de registro |
PA_QTDAPR |
Quantidade aprovada |
PA_VALAPR |
Valor aprovado |
PA_TPFIN |
Tipo de financiamento |
PA_SUBFIN |
Subtipo de financiamento |
A linha do PA não representa sempre uma pessoa. Dependendo do instrumento, pode representar produção consolidada, atendimento individualizado ou procedimento de uma APAC.
O Boletim de Produção Ambulatorial Consolidado (BPA-C) registra quantidades agregadas de procedimentos.
Uma linha geralmente representa a produção consolidada segundo combinações como:
O BPA-C não identifica individualmente cada usuário. Por isso, é adequado para analisar quantidade produzida, mas não para acompanhar trajetórias individuais.
O Boletim de Produção Ambulatorial Individualizado (BPA-I) registra procedimentos com informações individualizadas do atendimento.
Pode incluir:
Individualização não significa necessariamente autorização prévia. O instrumento de registro e as regras do procedimento devem ser consultados no SIGTAP.
A Autorização de Procedimentos Ambulatoriais de Alta Complexidade/Custo (APAC) é utilizada em linhas de cuidado ou procedimentos que exigem autorização, acompanhamento e registro individualizado.
O fluxo simplificado é:
Solicitação → avaliação técnica → autorização → realização → apresentação da produção → processamento no SIA
A APAC é utilizada, entre outras áreas, em:
Uma APAC pode gerar vários registros no arquivo PA:
P: procedimento principal;S: procedimento secundário.A Autorização de Internação Hospitalar (AIH) é utilizada para registrar e processar internações financiadas pelo SUS.
O fluxo simplificado é:
Indicação de internação → solicitação → autorização → internação → alta ou encerramento → processamento no SIH
A AIH reúne informações como:
| Instrumento | Arquivo de disseminação | Unidade aproximada |
|---|---|---|
| BPA-C | SIA PA | Produção consolidada |
| BPA-I | SIA PA e BI | Atendimento individualizado |
| APAC | SIA PA e arquivos temáticos | Autorização e procedimentos associados |
| AIH | SIH RD e SP | Internação e atos profissionais |
O arquivo PA reúne registros originados por instrumentos diferentes. Antes de contar atendimentos ou usuários, verifique
PA_DOCORIGe a unidade de registro.
Fonte: Informe Técnico do SIA.
O Componente Especializado da Assistência Farmacêutica (CEAF) é uma estratégia de acesso ambulatorial a medicamentos cujas linhas de cuidado são definidas em Protocolos Clínicos e Diretrizes Terapêuticas (PCDT).
SIGTAP Grupo 06.04 - Medicamentos do CEAF
O fluxo geral é:
Prescrição → solicitação → avaliação documental e clínica → autorização → dispensação → renovação e acompanhamento
O profissional prescreve o medicamento e preenche os documentos exigidos, incluindo:
O usuário ou responsável apresenta a documentação à unidade responsável definida pela Secretaria Estadual de Saúde ou do Distrito Federal.
A solicitação é avaliada segundo:
Após o deferimento, o medicamento é fornecido pela unidade responsável. A continuidade pode exigir renovação, exames e reavaliação.
As Secretarias Estaduais de Saúde e do Distrito Federal são responsáveis pela avaliação das solicitações e pela dispensação no CEAF.
veja a lista de PCDT. Saiba mais sobre o Componente Especializado da Assistência Farmacêutica (CEAF).
O arquivo AMUFAAMM.dbc contém registros processados de
APAC de medicamentos.
Exemplo:
AMAC2501.dbc
Interpretação:
| Parte | Significado |
|---|---|
AM |
APAC de medicamentos |
AC |
Acre |
25 |
Ano de 2025 |
01 |
Janeiro |
.dbc |
Arquivo DBF comprimido |
O arquivo pode apoiar análises sobre:
Exemplo de download:
url <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"SIASUS/200801_/Dados/AMAC2501.dbc"
)
curl::curl_download(url, "AMAC2501.dbc")
am <- read.dbc::read.dbc("AMAC2501.dbc")Exploração mínima:
O arquivo AM registra APAC processada no SIA. Ele não comprova isoladamente adesão ao tratamento, consumo pelo paciente ou resultado clínico.
A assistência oncológica é organizada em estabelecimentos habilitados e envolve diagnóstico, estadiamento, definição terapêutica, autorização e registro da produção.
A APAC é utilizada para registrar procedimentos ambulatoriais de tratamento, incluindo quimioterapia.
O arquivo AQUFAAMM.dbc contém registros de APAC de
quimioterapia.
Exemplo:
AQAC2501.dbc
Campos e informações podem permitir análises sobre:
Exemplo de download:
url <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"SIASUS/200801_/Dados/AQAC2501.dbc"
)
curl::curl_download(url, "AQAC2501.dbc")
aq <- read.dbc::read.dbc("AQAC2501.dbc")Exploração mínima:
No tratamento oncológico, a APAC registra procedimentos terapêuticos. O financiamento não deve ser interpretado automaticamente como reembolso de cada medicamento utilizado.
O estabelecimento habilitado organiza o tratamento conforme:
O procedimento registrado, o medicamento utilizado, o valor aprovado e o custo real do tratamento são dimensões diferentes.
Os Protocolos Clínicos e Diretrizes Terapêuticas (PCDT) estabelecem critérios para diagnóstico, tratamento e acompanhamento de condições clínicas no SUS.
Podem definir:
A Comissão Nacional de Incorporação de Tecnologias no SUS (Conitec) assessora o Ministério da Saúde em processos relacionados a:
A decisão considera elementos como:
A Conitec avalia e recomenda. A decisão e a publicação dos PCDT são formalizadas pelo Ministério da Saúde.
A Avaliação de Tecnologias em Saúde (ATS) examina consequências clínicas, econômicas, sociais, organizacionais e éticas do uso de tecnologias.
Tecnologia em saúde pode incluir:
Em economia da saúde, a ATS pode utilizar:
A Rede Brasileira de Avaliação de Tecnologias em Saúde (Rebrats) articula instituições e núcleos que produzem e disseminam estudos de ATS para apoiar decisões no SUS.
A Rebrats contribui por meio de:
| Componente | Papel |
|---|---|
| Conitec | Avaliação e recomendação sobre tecnologias e protocolos |
| PCDT | Definição de critérios clínicos e terapêuticos |
| SIGTAP | Regras administrativas e atributos dos procedimentos |
| SIA/SIH | Registro da produção processada |
| SIA AM | Registros de APAC de medicamentos |
| SIA AQ | Registros de APAC de quimioterapia |
| Rebrats | Produção e disseminação de estudos de ATS |
Os dados administrativos podem apoiar ATS e monitoramento pós-incorporação, mas possuem limitações:
Fontes:
O Sistema de Informações Hospitalares dissemina dados das Autorizações de Internação Hospitalar - AIH.
O arquivo RDUFAAMM.dbc contém dados reduzidos das
AIH.
| Campo | Conteúdo |
|---|---|
N_AIH |
Número da AIH |
CNES |
Estabelecimento hospitalar |
PROC_REA |
Procedimento principal realizado |
QT_DIARIAS |
Quantidade de diárias |
DIAS_PERM |
Dias de permanência |
VAL_SH |
Valor dos serviços hospitalares |
VAL_SP |
Valor dos serviços profissionais |
VAL_TOT |
Valor total da AIH |
DIAG_PRINC |
Diagnóstico principal |
MORTE |
Indicador de óbito |
MUNIC_RES |
Município de residência |
MUNIC_MOV |
Município do estabelecimento |
O arquivo SPUFAAMM.dbc detalha atos profissionais
associados à internação. Ele possui maior granularidade que o RD e pode
conter várias linhas para uma AIH.
O PA pertence ao SIA e o RD pertence ao SIH. Ambos são mensais e podem ser articulados com CNES e SIGTAP, mas possuem unidades de registro diferentes.
A regulação do acesso organiza a entrada dos usuários nos serviços segundo:
Sistemas como SISREG e e-SUS Regulação podem registrar:
O SIA e o SIH possuem outra função principal: registrar, processar e disseminar a produção ambulatorial e hospitalar apresentada pelos gestores.
| Etapa | Sistema ou instrumento associado |
|---|---|
| Solicitação de acesso | Sistema local, SISREG ou e-SUS Regulação |
| Avaliação e priorização | Central de regulação |
| Autorização ambulatorial | APAC ou autorização do BPA-I, quando exigida |
| Autorização hospitalar | AIH |
| Registro da produção | SIA ou SIH |
| Processamento e controle | Gestor e sistemas nacionais |
| Disseminação | Arquivos públicos do SIA e SIH |
O SIA e o SIH podem apoiar análises de acesso por meio de:
Entretanto, essas bases geralmente não apresentam toda a demanda reprimida.
A ausência de produção pode significar ausência de demanda, falta de oferta, barreira de acesso, não autorização, não realização ou falha de registro.
Para estudar acesso de forma mais completa, combine:
Essas fontes não medem custos diretamente, mas ajudam a definir necessidades, desfechos, carga de doença e populações de referência.
O Cadastro Nacional de Estabelecimentos de Saúde descreve a oferta e a estrutura dos serviços.
Subsistemas frequentes:
| Sigla | Conteúdo |
|---|---|
ST |
Estabelecimentos |
DC |
Dados complementares |
PF |
Profissionais |
LT |
Leitos |
EQ |
Equipamentos |
SR |
Serviços especializados |
EP |
Equipes |
HB |
Habilitações |
GM |
Gestão e metas |
O CNES permite contextualizar a produção segundo estabelecimento, município, gestão, natureza e capacidade instalada.
A complexidade é um atributo do procedimento no SIGTAP. Ela não deve ser inferida apenas pelo estabelecimento, pelo valor ou pelo instrumento de registro.
| Valor do domínio | Complexidade |
|---|---|
1 |
Atenção Básica |
2 |
Média complexidade |
3 |
Alta complexidade |
4 |
Não se aplica |
A complexidade do procedimento pode mudar entre competências. A análise histórica deve utilizar a classificação vigente no mês da produção.
O tipo de financiamento identifica a forma geral de financiamento associada ao procedimento na competência consultada.
| Código SIGTAP | Tipo de financiamento |
|---|---|
01 |
Atenção Básica — PAB |
02 |
Assistência Farmacêutica |
04 |
Fundo de Ações Estratégicas e Compensação — FAEC |
05 |
Incentivo — MAC |
06 |
Média e Alta Complexidade — MAC |
07 |
Vigilância em Saúde |
08 |
Gestão em Saúde |
Os códigos não são necessariamente sequenciais. A ausência do código
03não deve ser corrigida ou recodificada durante a importação.
| Financiamento | Interpretação geral | Forma predominante de financiamento | Cuidados na análise |
|---|---|---|---|
| Piso da Atenção Básica (PAB) | Denominação histórica relacionada ao financiamento das ações e dos procedimentos da atenção primária à saúde | Transferências vinculadas ao custeio da atenção básica, conforme as regras vigentes em cada competência | Não representa necessariamente pagamento por procedimento. A classificação deve ser interpretada conforme a competência e a norma de financiamento vigente |
| Assistência Farmacêutica | Financiamento de medicamentos, insumos e ações dos componentes da assistência farmacêutica | Transferências e aquisições organizadas conforme os componentes Básico, Estratégico e Especializado da Assistência Farmacêutica | O valor registrado no procedimento não comprova o custo de aquisição, dispensação ou transferência financeira |
| Fundo de Ações Estratégicas e Compensação (FAEC) | Financiamento de ações estratégicas, procedimentos específicos e novas incorporações, conforme definição do Ministério da Saúde | Transferência geralmente condicionada à produção aprovada e informada nos sistemas SIA e SIH | É necessário verificar produção apresentada, aprovada e paga, além das regras, limites e portarias vigentes |
| Incentivo — Média e Alta Complexidade (Incentivo — MAC) | Recursos vinculados a políticas, redes, habilitações, qualificações ou serviços específicos de média e alta complexidade | Custeio fixo, complementar ou condicionado ao atendimento dos critérios definidos em portaria | Não corresponde necessariamente à quantidade produzida multiplicada pelo valor do SIGTAP; pode depender de habilitação, adesão ou manutenção do serviço |
| Média e Alta Complexidade (MAC) | Financiamento regular de ações e serviços ambulatoriais e hospitalares especializados | Transferência regular dentro do limite financeiro MAC dos estados, do Distrito Federal e dos municípios | A produção registrada no SIA e no SIH subsidia programação e controle, mas o valor do SIGTAP não representa necessariamente o valor efetivamente transferido ou pago ao prestador |
| Vigilância em Saúde | Financiamento de ações de vigilância epidemiológica, sanitária, ambiental e de saúde do trabalhador | Transferências e incentivos associados à execução de ações, programas e estratégias de vigilância | Os resultados não devem ser avaliados somente por produção; devem ser considerados cobertura, oportunidade, completude e indicadores epidemiológicos |
| Gestão em Saúde | Financiamento de ações de planejamento, regulação, controle, avaliação, auditoria, participação social e fortalecimento da gestão do SUS | Transferências ou incentivos vinculados a políticas e ações de organização da gestão | Em geral, não existe correspondência direta entre o recurso transferido e um procedimento assistencial individualizado |
A classificação de financiamento registrada no SIGTAP informa a vinculação geral do procedimento, mas não comprova isoladamente o pagamento ao estabelecimento ou a transferência ao gestor. Para análises financeiras, deve ser integrada aos dados do Fundo Nacional de Saúde (FNS), InvestSUS, SISMAC, SIOPS, SIA, SIH e às portarias vigentes na respectiva competência.
O Piso da Atenção Básica (PAB) é uma denominação histórica do financiamento federal destinado à manutenção das ações de atenção primária à saúde. Tradicionalmente, era composto por uma parcela fixa, calculada segundo critérios populacionais, e por componentes variáveis associados à implantação de equipes, programas e estratégias prioritárias. Embora o modelo federal de financiamento da atenção primária tenha sido reformulado ao longo do tempo, a expressão Atenção Básica (PAB) permanece em classificações e registros históricos do SUS, inclusive no SIGTAP. Essa classificação indica que o procedimento está relacionado ao financiamento da atenção básica, mas não representa necessariamente pagamento individual por procedimento. Para análises financeiras, é necessário considerar a competência dos dados e consultar as normas de financiamento vigentes naquele período.
A classificação Média e Alta Complexidade (MAC) identifica, em termos gerais, procedimentos ambulatoriais e hospitalares financiados pelo limite financeiro regular de média e alta complexidade dos estados e municípios. O limite MAC é transferido regularmente aos fundos de saúde e financia o funcionamento de serviços especializados, hospitais, ambulatórios, exames, terapias e outros componentes das redes de atenção. A produção registrada no SIA e no SIH é utilizada para programação, monitoramento, regulação, avaliação e controle, mas o valor informado no SIGTAP não deve ser interpretado automaticamente como o valor efetivamente transferido ao estabelecimento ou ao gestor.
A classificação Incentivo — MAC também pertence ao campo da média e alta complexidade, mas identifica recursos vinculados a uma política, rede, serviço ou estratégia específica. Em geral, esses incentivos são instituídos por portarias e podem depender de habilitação, qualificação, adesão, cumprimento de critérios ou manutenção de determinado serviço. Por isso, o incentivo não corresponde necessariamente à multiplicação da quantidade produzida pelo valor do procedimento. Dependendo da regra aplicável, pode assumir a forma de custeio fixo, complemento financeiro ou transferência condicionada ao funcionamento de uma rede ou serviço.
O tipo de financiamento do procedimento não comprova o pagamento efetivamente realizado. Para analisar repasses, limites e execução financeira, devem ser consultadas fontes como SISMAC, Fundo Nacional de Saúde, InvestSUS e SIOPS.
A rubrica FAEC detalha programas, políticas, especialidades ou finalidades relacionadas ao financiamento e à classificação da produção.
A denominação do campo não significa que todos os valores do domínio sejam necessariamente FAEC. O domínio também contém categorias de MAC, incentivos, vigilância, gestão e valores não discriminados. Por isso, a rubrica deve ser analisada em conjunto com o tipo de financiamento.
| Valor do domínio | Rubrica |
|---|---|
1 |
Atenção Básica — PAB |
2 |
Assistência Farmacêutica |
3 |
Coleta de material |
4 |
Diagnóstico em laboratório clínico |
5 |
Coleta e exame anatomopatológico do colo uterino |
6 |
Diagnóstico em neurologia |
7 |
Diagnóstico em otorrinolaringologia e fonoaudiologia |
8 |
Diagnóstico em psicologia e psiquiatria |
9 |
Consultas médicas e de outros profissionais de nível superior |
10 |
Atenção domiciliar |
11 |
Atendimento e acompanhamento em reabilitação física, mental, visual, auditiva e de múltiplas deficiências |
12 |
Atendimento e acompanhamento psicossocial |
13 |
Atendimento e acompanhamento em saúde do idoso |
14 |
Atendimento e acompanhamento de queimados |
15 |
Atendimento e acompanhamento de diagnóstico de doenças endócrinas, metabólicas e nutricionais |
16 |
Tratamento de doenças do sistema nervoso central e periférico |
17 |
Tratamento de doenças do aparelho da visão |
18 |
Tratamento em oncologia |
19 |
Nefrologia |
20 |
Tratamentos odontológicos |
21 |
Cirurgia do sistema nervoso central e periférico |
22 |
Cirurgias de ouvido, nariz e garganta |
23 |
Deformidade labiopalatal e craniofacial |
24 |
Cirurgia do aparelho da visão |
25 |
Cirurgia do aparelho circulatório |
26 |
Cirurgia do aparelho digestivo, órgãos anexos e parede abdominal, incluindo pré e pós-operatório |
27 |
Cirurgia do aparelho geniturinário |
28 |
Tratamento de queimados |
29 |
Cirurgia reparadora para lipodistrofia |
30 |
Outras cirurgias plásticas e reparadoras |
31 |
Cirurgia orofacial |
32 |
Procedimentos sequenciais |
33 |
Cirurgias em nefrologia |
34 |
Transplantes de órgãos, tecidos e células |
35 |
Medicamentos para transplante |
36 |
OPM auditivas |
37 |
OPM em odontologia |
38 |
OPM em queimados |
39 |
OPM em nefrologia |
40 |
OPM para transplantes |
41 |
Incentivos ao pré-natal e nascimento |
42 |
Incentivo ao registro civil de nascimento |
43 |
Central Nacional de Regulação de Alta Complexidade — CNRAC |
44 |
Reguladores da atividade hormonal — inibidores de prolactina |
45 |
Política Nacional de Cirurgias Eletivas |
46 |
Redesignação e acompanhamento |
47 |
Projeto Olhar Brasil |
48 |
Mamografia para rastreamento |
49 |
Projeto Olhar Brasil — consulta |
50 |
Projeto Olhar Brasil — óculos |
51 |
Implementação de cirurgia cardiovascular pediátrica |
52 |
Cirurgias eletivas — Componente I |
53 |
Cirurgias eletivas — Componente II |
54 |
Cirurgias eletivas — Componente III |
55 |
Prótese mamária — exames |
56 |
Prótese mamária — cirurgia |
57 |
Transplante — histocompatibilidade |
58 |
Triagem neonatal |
59 |
Controle de qualidade do exame citopatológico do colo do útero |
60 |
Exames do leite materno |
61 |
Atenção às pessoas em situação de violência sexual |
62 |
Sangue e hemoderivados |
63 |
Mamografia para rastreamento na faixa etária recomendada |
64 |
Doenças raras |
65 |
Cadeiras de rodas |
66 |
Sistema de frequência modulada pessoal — FM |
67 |
Medicamentos em urgência |
68 |
Cirurgias eletivas — Componente Único |
69 |
Atenção Especializada em Saúde Auditiva |
70 |
Terapias especializadas em angiologia |
71 |
Tratamento de doença macular |
72 |
OPME não relacionadas ao ato cirúrgico |
73 |
Diagnóstico e tratamento em oncologia |
74 |
Diagnóstico de trombofilia em gestante |
75 |
Reabilitação pós-COVID-19 |
76 |
Telemedicina em urgência |
77 |
Fisioterapia cardiovascular |
78 |
Hemodinâmica em atendimento de urgência |
79 |
Exames sorológicos e imunológicos |
80 |
QualiSUS Cardio |
81 |
Pré-cirúrgico em cirurgias prioritárias |
82 |
Programa Agora Tem Especialistas — Componente Cirúrgico, anteriormente Redução das Filas |
83 |
Síndrome Respiratória Aguda Grave — SRAG |
84 |
Alta Complexidade em Cardiologia |
85 |
Cirurgia da face e do sistema estomatognático |
86 |
Neurocirurgias |
87 |
Exames coprológicos |
88 |
Programa Agora Tem Especialistas — Componente Ambulatorial |
89 |
Saúde bucal |
90 |
Radioterapia |
91 |
Recursos vinculados à parcela única |
92 |
Recursos vinculados a emendas parlamentares |
93 |
Materno-infantil |
94 |
Saúde da mulher |
95 |
FAEC CNRAC — código anterior à Tabela Unificada, válido para
2008-01 |
96 |
FAEC eletiva — código anterior à Tabela Unificada, válido para
2008-01 |
97 |
Incentivo — MAC |
98 |
Média e Alta Complexidade — MAC |
99 |
Vigilância em Saúde |
100 |
Gestão do SUS |
101 |
Não discriminado ou não se aplica |
A fonte orçamentária identifica categorias específicas associadas à origem ou modalidade do recurso.
| Valor do domínio | Fonte orçamentária |
|---|---|
1 |
Modalidade 1 — Serviço de Saúde — Agora Tem Especialistas |
2 |
Modalidade 2 — Equipes Volantes — Agora Tem Especialistas |
3 |
Crédito financeiro — parcelas vencidas e vincendas |
4 |
Crédito financeiro — transação tributária |
5 |
Branco ou ignorado |
A fonte orçamentária deve ser analisada de acordo com a competência e com as normas específicas do programa. Ela não substitui a consulta à execução orçamentária, aos repasses do Fundo Nacional de Saúde ou aos registros do SIOPS.
A regra contratual informa como o procedimento participa da geração de crédito no processamento contratual.
| Valor do domínio | Regra contratual |
|---|---|
1 |
Não gera crédito para produção de internação ou produção ambulatorial |
2 |
Sem crédito na média complexidade ambulatorial, exceto FAEC |
3 |
Sem crédito na média complexidade hospitalar, exceto FAEC |
4 |
Sem crédito na alta complexidade ambulatorial, exceto FAEC |
5 |
Sem crédito na alta complexidade hospitalar, exceto FAEC |
6 |
Sem crédito nos procedimentos financiados pelo FAEC |
7 |
Sem crédito total, incluindo FAEC |
8 |
Sem crédito nas ações especializadas de odontologia — CEO I, II e III |
9 |
Sem crédito no incentivo à Saúde do Trabalhador, exceto FAEC |
10 |
Sem crédito total para hospital universitário do Ministério da Educação — HU/MEC |
11 |
Sem crédito total para o Ministério da Saúde |
12 |
Sem crédito para Núcleo Ampliado de Saúde da Família — NASF, exceto FAEC |
13 |
Sem crédito total, incluindo FAEC — exclusivo para a Rede Sarah |
14 |
Sem regra contratual |
Sem crédito não significa que o procedimento não possa
ser registrado;| Atributo | Pergunta respondida |
|---|---|
| Complexidade | Em qual nível assistencial o procedimento está classificado? |
| Financiamento | Qual é a modalidade geral de financiamento do procedimento? |
| Rubrica FAEC | A qual programa, especialidade ou finalidade financeira a produção está associada? |
| Fonte orçamentária | Qual categoria de origem ou modalidade do recurso está associada ao registro? |
| Regra contratual | Como o procedimento participa da geração de crédito contratual? |
| Valor do procedimento | Qual valor de referência está definido no SIGTAP para a competência? |
| Produção aprovada | Qual quantidade ou valor foi aprovado no processamento do SIA ou SIH? |
| Repasse financeiro | Qual recurso foi efetivamente transferido pelo Fundo Nacional de Saúde? |
| Despesa executada | Qual valor foi empenhado, liquidado ou pago pelo ente federativo? |
A produção ambulatorial e hospitalar de média e alta complexidade é registrada principalmente no SIA e no SIH.
Os recursos federais destinados a essas ações estão organizados, de forma geral, em dois componentes:
| Componente | Característica |
|---|---|
| Limite Financeiro MAC | Recursos transferidos regularmente aos fundos estaduais, distrital e municipais |
| FAEC | Financiamento de ações estratégicas e determinados procedimentos, apurado com base na produção registrada |
O Limite Financeiro da Média e Alta Complexidade Ambulatorial e Hospitalar financia ações e serviços especializados sob gestão estadual, distrital ou municipal.
Ele pode contemplar:
A transferência federal ocorre de forma regular e automática aos fundos de saúde, observadas as regras de programação e financiamento.
O Fundo de Ações Estratégicas e Compensação (FAEC) financia procedimentos ou políticas considerados estratégicos, além de determinados procedimentos incorporados ao SUS.
O fluxo simplificado é:
Produção assistencial → registro no SIA ou SIH → processamento → apuração → transferência financeira
A classificação do financiamento pode ser investigada no SIA por campos como:
PA_TPFIN: tipo de financiamento;PA_SUBFIN: subtipo de financiamento;PA_VALAPR: valor aprovado;PA_QTDAPR: quantidade aprovada.Exemplo:
pa |>
dplyr::group_by(PA_TPFIN, PA_SUBFIN) |>
dplyr::summarise(
quantidade = sum(PA_QTDAPR, na.rm = TRUE),
valor_aprovado = sum(PA_VALAPR, na.rm = TRUE),
.groups = "drop"
)Para estudar alocação de recursos, combine SIA/SIH com informações do SISMAC, Fundo Nacional de Saúde, InvestSUS e SIOPS.
A lista fornecida é uma fotografia do catálogo em 15 de agosto de 2026. Ela agrega arquivos por UF, sistema, versão, subsistema e ano de competência.
A ficha pública do estabelecimento pode ser consultada pelo código do município e pelo código CNES:
354850 — Santos/SP;2025752;A página do CNES carrega parte das informações por JavaScript. Por
isso, uma leitura simples com rvest::read_html() pode
retornar apenas a estrutura da página, sem os valores preenchidos no
navegador.
Para reproduzir a renderização, pode-se utilizar o pacote
chromote, que controla uma sessão do Chrome ou
Chromium.
Para extrações recorrentes ou em grande volume, prefira os arquivos DBC, as extrações oficiais ou o webservice do CNES. O web scraping é mais sensível a alterações na estrutura visual do portal.
Execute uma única vez:
Como a função é extensa e representa apenas a implementação técnica,
o chunk pode utilizar echo=FALSE. Nesse caso, o código será
executado durante o knit, mas não aparecerá no HTML.
O código de execução permanece curto e pode ser apresentado na aula:
url_cnes <- paste0(
"https://cnes.datasus.gov.br/pages/",
"estabelecimentos/ficha/infGerais/",
"3548502025752"
)
# O cache local evita uma nova consulta a cada knit.
arquivo_cache_cnes <- file.path(
diretorio_dados,
"ficha_cnes_2025752.csv"
)
# Fallback documentado com os valores observados na consulta utilizada
# no material. Ele mantém o knit funcional quando o portal ou o navegador
# automatizado estiverem indisponíveis.
ficha_cnes_exemplo <- tibble::tribble(
~campo, ~valor,
"Nome", "SANTA CASA DE SANTOS",
"CNES", "2025752",
"CNPJ", "58.198.524/0001-19",
"Nome Empresarial",
"IRMANDADE DA SANTA CASA DA MISERICORDIA DE SANTOS",
"Natureza Jurídica(Grupo)",
"ENTIDADES SEM FINS LUCRATIVOS",
"Logradouro", "AV DOUTOR CLAUDIO LUIZ DA COSTA",
"Número", "50",
"Bairro", "JABAQUARA",
"Município", "354850 - SANTOS",
"UF", "SP",
"CEP", "11075-900",
"Telefone", "(13)3202-0600",
"Dependência", "INDIVIDUAL",
"Regional de Saúde", "204",
"Tipo de Estabelecimento", "HOSPITAL GERAL",
"Gestão", "MUNICIPAL",
"Horário de funcionamento", "Sempre aberto"
)
campos_obrigatorios_cnes <- c(
"Nome",
"CNES",
"Gestão",
"Tipo de Estabelecimento"
)
if (file.exists(arquivo_cache_cnes)) {
ficha_cache <- tryCatch(
readr::read_csv(
arquivo_cache_cnes,
show_col_types = FALSE,
col_types = readr::cols(.default = "c")
),
error = function(e) NULL
)
cache_valido <- !is.null(ficha_cache) &&
"campo" %in% names(ficha_cache) &&
all(campos_obrigatorios_cnes %in% ficha_cache$campo)
if (cache_valido) {
ficha_cnes <- ficha_cache
status_cnes <- "cache local"
} else {
ficha_cnes <- ficha_cnes_exemplo
status_cnes <- "exemplo local: cache incompleto"
}
} else {
resultado_cnes <- tryCatch(
{
dados <- raspar_ficha_cnes(
url_cnes,
tempo_limite = 45
)
campos_validos <- all(
campos_obrigatorios_cnes %in% dados$campo
)
if (nrow(dados) == 0 || !campos_validos) {
stop(
"A página não retornou todos os campos obrigatórios."
)
}
list(
dados = dados,
status = "coleta ao vivo",
erro = NA_character_
)
},
error = function(e) {
list(
dados = ficha_cnes_exemplo,
status = "exemplo local de contingência",
erro = conditionMessage(e)
)
}
)
ficha_cnes <- resultado_cnes$dados
status_cnes <- resultado_cnes$status
if (identical(status_cnes, "coleta ao vivo")) {
try(
readr::write_csv(
ficha_cnes,
arquivo_cache_cnes
),
silent = TRUE
)
}
}
ficha_cnesSe o portal não responder, o navegador não estiver disponível ou o
carregamento exceder o limite, o documento utiliza o exemplo local
identificado como exemplo de contingência. O resultado
não é apresentado como uma coleta ao vivo. Depois da primeira coleta
bem-sucedida, a ficha é armazenada em
dados_modulo_2/ficha_cnes_2025752.csv e reutilizada nos
próximos knits.
A função retorna uma tabela no formato longo, com uma linha por campo:
| campo | valor |
|---|---|
| Nome | SANTA CASA DE SANTOS |
| CNES | 2025752 |
| Gestão | MUNICIPAL |
Para produzir uma linha por estabelecimento:
ficha_cnes_larga <- ficha_cnes |>
dplyr::filter(
nzchar(valor)
) |>
dplyr::group_by(campo) |>
dplyr::summarise(
valor = dplyr::first(valor),
.groups = "drop"
) |>
tidyr::pivot_wider(
names_from = campo,
values_from = valor
)
ficha_cnes_largaNa consulta apresentada, os principais dados foram:
| Campo | Valor |
|---|---|
| Nome | Santa Casa de Santos |
| CNES | 2025752 |
| CNPJ | 58.198.524/0001-19 |
| Nome empresarial | Irmandade da Santa Casa da Misericórdia de Santos |
| Natureza jurídica | Entidades sem fins lucrativos |
| Logradouro | Avenida Doutor Cláudio Luiz da Costa |
| Número | 50 |
| Bairro | Jabaquara |
| Município | 354850 — Santos |
| UF | SP |
| CEP | 11075-900 |
| Telefone | (13) 3202-0600 |
| Dependência | Individual |
| Regional de Saúde | 204 |
| Tipo de estabelecimento | Hospital Geral |
| Gestão | Municipal |
| Horário de funcionamento | Sempre aberto |
Registre a página e o momento da coleta:
Essas informações permitem identificar:
A integração da ficha cadastral com o SIA será executada no
Fluxo do FTP à análise, depois que o arquivo PA for
baixado, lido, selecionado e tipificado. Essa ordem garante que o objeto
pa_min exista antes da junção.
Existem duas formas principais de ocultar o código.
Para ocultar completamente um chunk específico:
Para manter o botão que permite mostrar o código, altere o YAML:
Com code_folding: hide, os códigos são apresentados
recolhidos por padrão, mas o leitor pode clicar para exibi-los.
| Configuração | Execução | Código no HTML |
|---|---|---|
echo=FALSE |
Sim | Não aparece e não pode ser expandido |
include=FALSE |
Sim | Código, mensagens, resultados e gráficos não aparecem |
results='hide' |
Sim | Código aparece, mas a saída textual é omitida |
fig.show='hide' |
Sim | Código é executado, mas os gráficos não aparecem |
code_folding: hide |
Sim | Código fica recolhido e pode ser expandido |
Para este exemplo, recomenda-se:
echo=FALSE;A ficha do portal representa uma consulta cadastral. Para análises históricas, deve ser utilizada a competência correspondente dos arquivos do CNES.
Fontes:
Os exemplos deste fluxo são executados durante o knit. O
parâmetro executar_exemplos está definido como
true no cabeçalho YAML. Para gerar uma versão sem downloads
e sem execução, altere-o temporariamente para false.
O HTML oferece dois controles independentes:
Instale os pacotes uma única vez:
install.packages(c("curl", "dplyr", "readr", "remotes"))
remotes::install_github("danicat/read.dbc")Carregue os pacotes a cada nova sessão:
Neste exemplo, será baixada a produção ambulatorial do Acre referente a janeiro de 2025.
url <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"SIASUS/200801_/Dados/PAAC2501.dbc"
)
arquivo_pa <- file.path(diretorio_dados, "PAAC2501.dbc")
baixar_arquivo(url, arquivo_pa)Confirme que o arquivo foi criado:
## [1] TRUE
## [1] 3683334
read.dbcA função read.dbc() descomprime e lê o conteúdo
diretamente em um data frame.
Não é necessário gerar um DBF intermediário para iniciar a análise.
## [1] "data.frame"
## [1] 154136 60
Comece pela estrutura, pelos nomes e por uma amostra das linhas.
## [1] "PA_CODUNI" "PA_GESTAO" "PA_CONDIC" "PA_UFMUN" "PA_REGCT"
## [6] "PA_INCOUT" "PA_INCURG" "PA_TPUPS" "PA_TIPPRE" "PA_MN_IND"
## [11] "PA_CNPJCPF" "PA_CNPJMNT" "PA_CNPJ_CC" "PA_MVM" "PA_CMP"
## [16] "PA_PROC_ID" "PA_TPFIN" "PA_SUBFIN" "PA_NIVCPL" "PA_DOCORIG"
## [21] "PA_AUTORIZ" "PA_CNSMED" "PA_CBOCOD" "PA_MOTSAI" "PA_OBITO"
## [26] "PA_ENCERR" "PA_PERMAN" "PA_ALTA" "PA_TRANSF" "PA_CIDPRI"
## [31] "PA_CIDSEC" "PA_CIDCAS" "PA_CATEND" "PA_IDADE" "IDADEMIN"
## [36] "IDADEMAX" "PA_FLIDADE" "PA_SEXO" "PA_RACACOR" "PA_MUNPCN"
## [41] "PA_QTDPRO" "PA_QTDAPR" "PA_VALPRO" "PA_VALAPR" "PA_UFDIF"
## [46] "PA_MNDIF" "PA_DIF_VAL" "NU_VPA_TOT" "NU_PA_TOT" "PA_INDICA"
## [51] "PA_CODOCO" "PA_FLQT" "PA_FLER" "PA_ETNIA" "PA_VL_CF"
## [56] "PA_VL_CL" "PA_VL_INC" "PA_SRV_C" "PA_INE" "PA_NAT_JUR"
## 'data.frame': 154136 obs. of 60 variables:
## $ PA_CODUNI : Factor w/ 195 levels "0117382","0128619",..: 100 123 123 123 123 123 123 123 123 123 ...
## $ PA_GESTAO : Factor w/ 21 levels "120000","120001",..: 16 1 1 1 1 1 1 1 1 1 ...
## $ PA_CONDIC : Factor w/ 2 levels "EP","PG": 2 1 1 1 1 1 1 1 1 1 ...
## $ PA_UFMUN : Factor w/ 22 levels "120001","120005",..: 15 15 15 15 15 15 15 15 15 15 ...
## $ PA_REGCT : Factor w/ 4 levels "0000","7111",..: 1 3 3 3 3 3 3 3 3 3 ...
## $ PA_INCOUT : Factor w/ 2 levels "0000","2452": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_INCURG : Factor w/ 1 level "0000": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_TPUPS : Factor w/ 21 levels "02","04","05",..: 1 15 15 15 15 15 15 15 15 15 ...
## $ PA_TIPPRE : Factor w/ 1 level "00": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_MN_IND : Factor w/ 2 levels "I","M": 2 2 2 2 2 2 2 2 2 2 ...
## $ PA_CNPJCPF: Factor w/ 60 levels "00529443000255",..: 36 30 30 30 30 30 30 30 30 30 ...
## $ PA_CNPJMNT: Factor w/ 23 levels "00000000000000",..: 7 6 6 6 6 6 6 6 6 6 ...
## $ PA_CNPJ_CC: Factor w/ 1 level "00000000000000": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_MVM : Factor w/ 1 level "202501": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_CMP : Factor w/ 4 levels "202410","202411",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ PA_PROC_ID: Factor w/ 998 levels "0101010010","0101010028",..: 520 474 468 472 474 474 468 474 474 474 ...
## $ PA_TPFIN : Factor w/ 6 levels "01","02","04",..: 1 5 5 5 5 5 5 5 5 5 ...
## $ PA_SUBFIN : Factor w/ 7 levels "0000","0013",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_NIVCPL : Factor w/ 4 levels "0","1","2","3": 2 3 3 3 3 3 3 3 3 3 ...
## $ PA_DOCORIG: Factor w/ 5 levels "B","C","I","P",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ PA_AUTORIZ: Factor w/ 7757 levels "0000000000000",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_CNSMED : Factor w/ 1019 levels "000000000000000",..: 549 964 221 97 280 280 295 293 39 988 ...
## $ PA_CBOCOD : Factor w/ 92 levels "221105","221205",..: 23 21 38 38 21 21 38 21 21 21 ...
## $ PA_MOTSAI : Factor w/ 10 levels "00","11","12",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_OBITO : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_ENCERR : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_PERMAN : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_ALTA : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_TRANSF : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_CIDPRI : Factor w/ 1050 levels "0000","1111",..: 1 1 1 966 1 1 22 654 7 1013 ...
## $ PA_CIDSEC : Factor w/ 1 level "0000": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_CIDCAS : Factor w/ 27 levels "0000","B181",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_CATEND : Factor w/ 7 levels "01","02","03",..: 1 2 2 2 2 2 2 2 2 2 ...
## $ PA_IDADE : Factor w/ 111 levels "000","001","002",..: 47 37 10 5 1 14 32 52 34 23 ...
## $ IDADEMIN : Factor w/ 23 levels "0","1","10","12",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ IDADEMAX : Factor w/ 19 levels "0","1","100",..: 5 5 5 5 5 5 5 5 5 5 ...
## $ PA_FLIDADE: Factor w/ 3 levels "0","1","3": 2 2 2 2 2 2 2 2 2 2 ...
## $ PA_SEXO : Factor w/ 3 levels "0","F","M": 2 3 2 3 2 3 2 3 2 2 ...
## $ PA_RACACOR: Factor w/ 6 levels "00","01","02",..: 5 4 4 4 4 4 4 4 4 4 ...
## $ PA_MUNPCN : Factor w/ 212 levels "110002","110004",..: 40 40 40 40 40 40 40 40 40 40 ...
## $ PA_QTDPRO : int 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_QTDAPR : int 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_VALPRO : num 0 0 12.5 11 0 ...
## $ PA_VALAPR : num 0 0 12.5 11 0 ...
## $ PA_UFDIF : Factor w/ 3 levels "0","1","9": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_MNDIF : Factor w/ 3 levels "0","1","9": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_DIF_VAL: num 0 0 0 0 0 0 0 0 0 0 ...
## $ NU_VPA_TOT: num 0 0 0 0 0 0 0 0 0 0 ...
## $ NU_PA_TOT : num 0 0 12.5 11 0 ...
## $ PA_INDICA : Factor w/ 3 levels "0","5","6": 2 2 2 2 2 2 2 2 2 2 ...
## $ PA_CODOCO : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_FLQT : Factor w/ 7 levels "K","L","M","N",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_FLER : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
## $ PA_ETNIA : Factor w/ 34 levels "0001","0002",..: NA NA NA NA NA NA NA NA NA NA ...
## $ PA_VL_CF : num 0 0 0 0 0 0 0 0 0 0 ...
## $ PA_VL_CL : num 0 0 0 0 0 0 0 0 0 0 ...
## $ PA_VL_INC : num 0 0 0 0 0 0 0 0 0 0 ...
## $ PA_SRV_C : Factor w/ 54 levels "108001","114007",..: NA NA NA NA NA NA NA NA NA NA ...
## $ PA_INE : Factor w/ 0 levels: NA NA NA NA NA NA NA NA NA NA ...
## $ PA_NAT_JUR: Factor w/ 7 levels "1023","1147",..: 3 1 1 1 1 1 1 1 1 1 ...
## - attr(*, "data_types")= chr [1:60] "C" "C" "C" "C" ...
Selecione apenas os campos necessários para reduzir a complexidade:
pa_min <- pa |>
select(
PA_CODUNI,
PA_GESTAO,
PA_CMP,
PA_PROC_ID,
PA_DOCORIG,
PA_QTDAPR,
PA_VALAPR
)Verifique a unidade de registro e os valores:
pa_min |>
summarise(
linhas = n(),
estabelecimentos = n_distinct(PA_CODUNI),
procedimentos = n_distinct(PA_PROC_ID),
quantidade = sum(PA_QTDAPR, na.rm = TRUE),
valor_aprovado = sum(PA_VALAPR, na.rm = TRUE)
)Segundo o layout do SIA, os identificadores e competências são campos de caracteres. Preservá-los como texto evita a perda de zeros à esquerda.
pa_min <- pa_min |>
mutate(
across(
c(PA_CODUNI, PA_GESTAO, PA_CMP, PA_PROC_ID, PA_DOCORIG),
as.character
),
PA_QTDAPR = as.numeric(PA_QTDAPR),
PA_VALAPR = as.numeric(PA_VALAPR)
)Adicione descrições mínimas como atributos:
attr(pa_min$PA_CODUNI, "label") <- "Código CNES do estabelecimento"
attr(pa_min$PA_PROC_ID, "label") <- "Código do procedimento ambulatorial"
attr(pa_min$PA_VALAPR, "label") <- "Valor aprovado da produção"Consulte os metadados adicionados:
## [1] "Valor aprovado da produção"
Na prática, recomenda-se manter um dicionário tabular versionado, com uma linha por variável e colunas para tipo, descrição, domínio, fonte e vigência.
Depois de transformar a ficha em uma linha e preparar
pa_min, padronize o código CNES:
ficha_cnes_min <- ficha_cnes_larga |>
dplyr::transmute(
CNES = as.character(CNES),
nome_estabelecimento = Nome,
gestao_portal = Gestão,
tipo_estabelecimento_portal =
`Tipo de Estabelecimento`
)Integre com os registros do SIA:
Verifique o resultado:
pa_ficha |>
dplyr::count(
PA_CODUNI,
nome_estabelecimento,
gestao_portal,
tipo_estabelecimento_portal
)Agora será baixado o cadastro de estabelecimentos do CNES para a mesma UF e competência.
url_cnes <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"CNES/200508_/Dados/ST/STAC2501.dbc"
)
arquivo_st <- file.path(diretorio_dados, "STAC2501.dbc")
baixar_arquivo(url_cnes, arquivo_st)
cnes <- read.dbc::read.dbc(arquivo_st)Selecione uma linha por estabelecimento:
O campo PA_CODUNI do SIA corresponde ao código
CNES do cadastro de estabelecimentos.
Verifique a qualidade da junção:
pa_cnes |>
summarise(
linhas = n(),
sem_cnes = sum(is.na(CODUFMUN)),
percentual_sem_cnes = mean(is.na(CODUFMUN)) * 100
)Uma junção não deve ser considerada correta apenas porque o código executou. Verifique duplicidades na chave, perdas de correspondência e compatibilidade temporal.
Calcule quantidade e valor aprovado por procedimento:
resumo_pa <- pa_cnes |>
group_by(PA_PROC_ID) |>
summarise(
estabelecimentos = n_distinct(PA_CODUNI),
quantidade_aprovada = sum(PA_QTDAPR, na.rm = TRUE),
valor_aprovado = sum(PA_VALAPR, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(valor_aprovado))Visualize os procedimentos com maior valor aprovado:
O mesmo padrão pode ser aplicado às internações:
url_sih <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"SIHSUS/200801_/Dados/RDAC2501.dbc"
)
arquivo_rd <- file.path(diretorio_dados, "RDAC2501.dbc")
baixar_arquivo(url_sih, arquivo_rd)
rd <- read.dbc::read.dbc(arquivo_rd)Resumo hospitalar mínimo:
rd |>
summarise(
aih = n_distinct(N_AIH),
internacoes = n(),
permanencia = sum(DIAS_PERM, na.rm = TRUE),
valor_total = sum(VAL_TOT, na.rm = TRUE),
obitos = sum(MORTE == 1, na.rm = TRUE)
)O leiaute do arquivo de Produção Ambulatorial (PA) já contém alguns atributos provenientes do CNES:
| Campo do PA | Conteúdo |
|---|---|
PA_CODUNI |
Código CNES do estabelecimento executante |
PA_UFMUN |
Município do estabelecimento |
PA_TPUPS |
Tipo de estabelecimento |
PA_CNPJCPF |
CPF ou CNPJ do estabelecimento |
PA_CNPJMNT |
CNPJ da mantenedora |
PA_NAT_JUR |
Natureza jurídica |
PA_GESTAO |
Município ou estado responsável pela gestão |
A integração com o CNES é mais útil quando acrescenta atributos que não estão disponíveis no PA ou quando permite validar os atributos já existentes.
Segundo o leiaute do CNES, os arquivos mais úteis para esse enriquecimento são:
| Arquivo do CNES | Conteúdo | Exemplos de uso |
|---|---|---|
ST |
Características gerais do estabelecimento | Esfera administrativa, turno, atividade de ensino, tipo de prestador e gestão |
LT |
Leitos por tipo e especialidade | Porte hospitalar, disponibilidade de leitos e participação dos leitos SUS |
EQ |
Equipamentos | Capacidade diagnóstica e tecnológica |
SR |
Serviços especializados | Identificação da oferta de serviços |
HB |
Habilitações | Redes, linhas de cuidado e serviços de alta complexidade |
PR |
Profissionais | Oferta de profissionais e composição das equipes |
| Atributo | Arquivo | Utilidade analítica |
|---|---|---|
ESFERA_A |
ST ou LT |
Identificar a esfera administrativa do estabelecimento |
TP_PREST ou TPPREST |
ST |
Identificar o tipo de prestador |
TURNO_AT |
ST |
Caracterizar o turno de atendimento |
ATIVIDAD |
ST |
Identificar atividade de ensino ou pesquisa |
CLIENTEL |
ST |
Caracterizar o fluxo predominante da clientela |
VINC_SUS |
ST |
Verificar a existência de vínculo cadastrado com o SUS |
QTLEITP1 |
ST |
Quantidade de leitos cirúrgicos existentes |
QTLEITP2 |
ST |
Quantidade de leitos clínicos existentes |
QTLEITP3 |
ST |
Quantidade de leitos complementares existentes |
QT_EXIST |
LT |
Quantidade de leitos existentes por tipo e especialidade |
QT_CONTR |
LT |
Quantidade de leitos contratados |
QT_SUS |
LT |
Quantidade de leitos disponíveis ao SUS |
TP_LEITO |
LT |
Tipo de leito |
CODLEITO |
LT |
Especialidade do leito |
O arquivo ST apresenta um resumo dos leitos. Entretanto,
o arquivo LT é mais adequado para estudar capacidade
hospitalar porque apresenta os leitos por tipo e especialidade,
diferenciando leitos existentes, contratados e disponíveis ao SUS.
Baixe o arquivo ST para a mesma UF e competência da
produção ambulatorial:
url_st <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"CNES/200508_/Dados/ST/STAC2501.dbc"
)
arquivo_st <- file.path(diretorio_dados, "STAC2501.dbc")
baixar_arquivo(url_st, arquivo_st)
cnes_st <- read.dbc::read.dbc(arquivo_st)Selecione uma linha por estabelecimento:
cnes_estabelecimento <- cnes_st |>
dplyr::transmute(
CNES = as.character(CNES),
CODUFMUN = as.character(CODUFMUN),
TPGESTAO = as.character(TPGESTAO),
ESFERA_A = as.character(ESFERA_A),
TP_UNID = as.character(TP_UNID),
TURNO_AT = as.character(TURNO_AT),
ATIVIDAD = as.character(ATIVIDAD),
VINC_SUS = as.character(VINC_SUS)
) |>
dplyr::distinct(CNES, .keep_all = TRUE)Esses atributos permitem comparar a produção segundo características institucionais:
pa_min |>
dplyr::left_join(
cnes_estabelecimento,
by = c("PA_CODUNI" = "CNES")
) |>
dplyr::count(ESFERA_A)Para calcular o porte hospitalar, baixe o arquivo LT da
mesma UF e competência:
url_lt <- paste0(
"ftp://ftp.datasus.gov.br/dissemin/publicos/",
"CNES/200508_/Dados/LT/LTAC2501.dbc"
)
arquivo_lt <- file.path(diretorio_dados, "LTAC2501.dbc")
baixar_arquivo(url_lt, arquivo_lt)
cnes_lt <- read.dbc::read.dbc(arquivo_lt)O arquivo possui mais de uma linha por estabelecimento, pois os leitos são discriminados por tipo e especialidade.
Antes da integração com o PA, agregue os leitos para obter uma linha por estabelecimento:
cnes_leitos <- cnes_lt |>
dplyr::transmute(
CNES = as.character(CNES),
leitos_existentes = as.numeric(QT_EXIST),
leitos_contratados = as.numeric(QT_CONTR),
leitos_sus = as.numeric(QT_SUS)
) |>
dplyr::group_by(CNES) |>
dplyr::summarise(
leitos_existentes = sum(
leitos_existentes,
na.rm = TRUE
),
leitos_contratados = sum(
leitos_contratados,
na.rm = TRUE
),
leitos_sus = sum(
leitos_sus,
na.rm = TRUE
),
.groups = "drop"
)A agregação antes da junção é necessária para evitar a multiplicação das linhas do PA. Se um estabelecimento tiver dez tipos de leito, uma junção direta com o arquivo
LTpoderá repetir cada registro de produção dez vezes.
Neste exemplo didático, será adotado o ponto de corte de 50 leitos:
cnes_leitos <- cnes_leitos |>
dplyr::mutate(
porte_leitos = dplyr::case_when(
leitos_existentes == 0 ~ "Sem leitos cadastrados",
leitos_existentes < 50 ~ "Menos de 50 leitos",
leitos_existentes >= 50 ~ "50 leitos ou mais",
TRUE ~ "Não informado"
)
)A classificação separa estabelecimentos sem leitos daqueles que possuem menos de 50 leitos. Isso evita classificar unidades exclusivamente ambulatoriais como hospitais de pequeno porte.
O ponto de corte de 50 leitos é uma regra analítica adotada para o exemplo. Ele não deve ser apresentado como classificação normativa oficial sem a indicação da respectiva norma ou referência metodológica.
Também é possível calcular a proporção de leitos destinados ao SUS:
cnes_leitos <- cnes_leitos |>
dplyr::mutate(
percentual_leitos_sus = dplyr::if_else(
leitos_existentes > 0,
leitos_sus / leitos_existentes * 100,
NA_real_
)
)Primeiro, integre os atributos gerais do estabelecimento:
Em seguida, acrescente os indicadores de leitos:
Cada registro de produção passa a conter atributos como:
Use um campo estrutural do cadastro para avaliar a junção com o
arquivo ST:
pa_cnes |>
dplyr::summarise(
linhas = dplyr::n(),
sem_cnes_st = sum(is.na(TP_UNID)),
percentual_sem_cnes_st = mean(is.na(TP_UNID)) * 100
)A ausência de leitos deve ser avaliada separadamente:
pa_cnes |>
dplyr::summarise(
estabelecimentos = dplyr::n_distinct(PA_CODUNI),
estabelecimentos_com_leitos = dplyr::n_distinct(
PA_CODUNI[!is.na(leitos_existentes)]
),
percentual_com_leitos = mean(
!is.na(leitos_existentes)
) * 100
)Um estabelecimento sem correspondência no arquivo LT não
representa necessariamente erro. Unidades básicas, laboratórios, centros
de diagnóstico e outros estabelecimentos exclusivamente ambulatoriais
podem não possuir leitos.
Supondo que PA_VALAPR contenha o valor aprovado e
PA_QTDAPR a quantidade aprovada:
pa_cnes |>
dplyr::group_by(porte_leitos) |>
dplyr::summarise(
estabelecimentos = dplyr::n_distinct(PA_CODUNI),
quantidade_aprovada = sum(PA_QTDAPR, na.rm = TRUE),
valor_aprovado = sum(PA_VALAPR, na.rm = TRUE),
.groups = "drop"
)A tabela permite comparar a produção ambulatorial realizada por:
Entretanto, o número de leitos não mede diretamente a capacidade ambulatorial. Hospitais com muitos leitos podem ter produção ambulatorial reduzida, enquanto unidades sem leitos podem apresentar grande volume de consultas, exames ou terapias.
| Indicador | Cálculo geral | Interpretação |
|---|---|---|
| Produção por leito existente | Quantidade aprovada ÷ leitos existentes | Relação entre produção ambulatorial e porte hospitalar |
| Valor aprovado por leito SUS | Valor aprovado ÷ leitos SUS | Valor ambulatorial associado à capacidade disponível ao SUS |
| Participação dos leitos SUS | Leitos SUS ÷ leitos existentes | Parcela da capacidade cadastrada destinada ao SUS |
| Produção por esfera administrativa | Produção agrupada por ESFERA_A |
Participação de estabelecimentos públicos e demais esferas |
| Produção por atividade de ensino | Produção agrupada por ATIVIDAD |
Participação de estabelecimentos com atividade de ensino |
| Produção por porte hospitalar | Produção agrupada por porte_leitos |
Concentração da produção segundo a capacidade hospitalar |
Esses indicadores representam relações entre produção ambulatorial e capacidade cadastrada. Eles não devem ser interpretados automaticamente como produtividade, eficiência ou custo por leito, pois o numerador é ambulatorial e o denominador representa capacidade hospitalar.
Fontes documentais utilizadas:
ST e LT.Como os atributos do CNES foram repetidos em cada linha do PA após a
junção, os leitos não devem ser somados diretamente na base
pa_cnes. Primeiro, agregue a produção por
estabelecimento.
library(dplyr)
library(ggplot2)
library(scales)
producao_cnes <- pa_cnes |>
group_by(PA_CODUNI) |>
summarise(
quantidade_aprovada = sum(
PA_QTDAPR,
na.rm = TRUE
),
valor_aprovado = sum(
PA_VALAPR,
na.rm = TRUE
),
procedimentos = n_distinct(PA_PROC_ID),
.groups = "drop"
)Depois, integre os atributos do estabelecimento e os leitos, ambos com uma linha por CNES:
indicadores_cnes <- producao_cnes |>
left_join(
cnes_estabelecimento,
by = c("PA_CODUNI" = "CNES")
) |>
left_join(
cnes_leitos,
by = c("PA_CODUNI" = "CNES")
)Verifique se a base resultante possui uma linha por estabelecimento:
indicadores_cnes |>
summarise(
linhas = n(),
estabelecimentos = n_distinct(PA_CODUNI),
uma_linha_por_cnes = linhas == estabelecimentos
)A ausência de correspondência no arquivo de leitos não significa necessariamente que o estabelecimento tenha zero leitos. Por isso, valores ausentes não devem ser substituídos automaticamente por zero.
indicadores_cnes <- indicadores_cnes |>
mutate(
possui_informacao_leitos = !is.na(leitos_existentes),
possui_leitos = case_when(
is.na(leitos_existentes) ~ NA,
leitos_existentes > 0 ~ TRUE,
TRUE ~ FALSE
)
)Indicadores que utilizam leitos como denominador devem ser calculados somente quando o denominador for maior que zero:
indicadores_cnes <- indicadores_cnes |>
mutate(
producao_por_leito = if_else(
leitos_existentes > 0,
quantidade_aprovada / leitos_existentes,
NA_real_
),
valor_por_leito_sus = if_else(
leitos_sus > 0,
valor_aprovado / leitos_sus,
NA_real_
),
percentual_leitos_sus = if_else(
leitos_existentes > 0,
leitos_sus / leitos_existentes * 100,
NA_real_
)
)
NAindica que o indicador não pôde ser calculado. O valor zero deve ser reservado para situações em que a medida foi observada e seu valor é realmente zero.
Além da classificação binária de 50 leitos, pode ser útil criar faixas mais detalhadas:
indicadores_cnes <- indicadores_cnes |>
mutate(
porte_leitos = case_when(
is.na(leitos_existentes) ~ "Sem informação",
leitos_existentes == 0 ~ "Sem leitos",
leitos_existentes < 50 ~ "Menos de 50",
leitos_existentes < 150 ~ "50 a 149",
leitos_existentes < 300 ~ "150 a 299",
leitos_existentes >= 300 ~ "300 ou mais"
),
porte_leitos = factor(
porte_leitos,
levels = c(
"Sem informação",
"Sem leitos",
"Menos de 50",
"50 a 149",
"150 a 299",
"300 ou mais"
)
)
)As faixas são analíticas e devem ser documentadas no método do estudo.
Verifique valores negativos ou incompatíveis:
indicadores_cnes |>
summarise(
leitos_negativos = sum(
leitos_existentes < 0,
na.rm = TRUE
),
leitos_sus_maiores_que_existentes = sum(
leitos_sus > leitos_existentes,
na.rm = TRUE
),
producao_negativa = sum(
quantidade_aprovada < 0,
na.rm = TRUE
),
valor_negativo = sum(
valor_aprovado < 0,
na.rm = TRUE
)
)Também é necessário examinar a distribuição:
indicadores_cnes |>
summarise(
estabelecimentos = n(),
mediana_leitos = median(
leitos_existentes,
na.rm = TRUE
),
mediana_producao_por_leito = median(
producao_por_leito,
na.rm = TRUE
),
p95_producao_por_leito = quantile(
producao_por_leito,
0.95,
na.rm = TRUE
),
maximo_producao_por_leito = max(
producao_por_leito,
na.rm = TRUE
)
)Valores muito elevados devem ser investigados antes de qualquer exclusão. Eles podem representar:
resumo_porte <- indicadores_cnes |>
group_by(porte_leitos) |>
summarise(
estabelecimentos = n_distinct(PA_CODUNI),
quantidade_aprovada = sum(
quantidade_aprovada,
na.rm = TRUE
),
valor_aprovado = sum(
valor_aprovado,
na.rm = TRUE
),
leitos_existentes = sum(
leitos_existentes,
na.rm = TRUE
),
leitos_sus = sum(
leitos_sus,
na.rm = TRUE
),
mediana_producao_por_leito = median(
producao_por_leito,
na.rm = TRUE
),
.groups = "drop"
)Calcule a participação de cada porte na produção e no valor aprovado:
resumo_porte <- resumo_porte |>
mutate(
percentual_producao =
quantidade_aprovada /
sum(quantidade_aprovada) * 100,
percentual_valor =
valor_aprovado /
sum(valor_aprovado) * 100
)Visualize a tabela:
ggplot(
resumo_porte,
aes(
x = porte_leitos,
y = estabelecimentos
)
) +
geom_col(
fill = "#337ab7"
) +
labs(
title = "Estabelecimentos segundo o porte",
subtitle = "Classificação pelo número de leitos existentes",
x = NULL,
y = "Número de estabelecimentos"
) +
scale_y_continuous(
labels = label_number(
big.mark = ".",
decimal.mark = ","
)
) +
theme_minimal() +
theme(
axis.text.x = element_text(
angle = 30,
hjust = 1
)
)
ggplot(
resumo_porte,
aes(
x = porte_leitos,
y = quantidade_aprovada
)
) +
geom_col(
fill = "#2e6da4"
) +
labs(
title = "Produção ambulatorial por porte",
subtitle = "Quantidade aprovada no SIA",
x = NULL,
y = "Quantidade aprovada"
) +
scale_y_continuous(
labels = label_number(
big.mark = ".",
decimal.mark = ","
)
) +
theme_minimal() +
theme(
axis.text.x = element_text(
angle = 30,
hjust = 1
)
)
Esse gráfico mostra o volume absoluto. Categorias com mais estabelecimentos tendem a apresentar maior produção total.
ggplot(
resumo_porte,
aes(
x = porte_leitos,
y = percentual_producao
)
) +
geom_col(
fill = "#337ab7"
) +
geom_text(
aes(
label = paste0(
round(percentual_producao, 1),
"%"
)
),
vjust = -0.4
) +
labs(
title = "Participação na produção ambulatorial",
x = NULL,
y = "Participação na produção"
) +
scale_y_continuous(
labels = label_percent(
scale = 1,
decimal.mark = ","
),
expand = expansion(
mult = c(0, 0.1)
)
) +
theme_minimal()
A média pode ser fortemente influenciada por valores extremos. Para comparar estabelecimentos, utilize a mediana:
producao_por_porte <- indicadores_cnes |>
filter(
!is.na(producao_por_leito),
producao_por_leito >= 0
) |>
group_by(porte_leitos) |>
summarise(
estabelecimentos = n(),
media = mean(producao_por_leito),
mediana = median(producao_por_leito),
primeiro_quartil = quantile(
producao_por_leito,
0.25
),
terceiro_quartil = quantile(
producao_por_leito,
0.75
),
.groups = "drop"
)
producao_por_porteVisualize a mediana:
ggplot(
producao_por_porte,
aes(
x = porte_leitos,
y = mediana
)
) +
geom_col(
fill = "#337ab7"
) +
labs(
title = "Produção ambulatorial mediana por leito",
subtitle = "Mediana dos indicadores dos estabelecimentos",
x = NULL,
y = "Quantidade aprovada por leito"
) +
scale_y_continuous(
labels = label_number(
big.mark = ".",
decimal.mark = ","
)
) +
theme_minimal()
Para tornar o gráfico legível, limite apenas sua escala visual ao percentil 95. Os registros não são removidos da base.
limite_p95 <- quantile(
indicadores_cnes$producao_por_leito,
0.95,
na.rm = TRUE
)
ggplot(
indicadores_cnes,
aes(
x = porte_leitos,
y = producao_por_leito
)
) +
geom_boxplot(
fill = "#eaf3f9",
color = "#2e6da4",
outlier.alpha = 0.25
) +
coord_cartesian(
ylim = c(0, limite_p95)
) +
labs(
title = "Distribuição da produção ambulatorial por leito",
subtitle = "Escala visual limitada ao percentil 95",
x = NULL,
y = "Quantidade aprovada por leito"
) +
theme_minimal() +
theme(
axis.text.x = element_text(
angle = 30,
hjust = 1
)
)
coord_cartesian()apenas altera a área exibida. Os valores extremos permanecem nos cálculos e na base analítica.
leitos_porte <- resumo_porte |>
select(
porte_leitos,
leitos_existentes,
leitos_sus
) |>
tidyr::pivot_longer(
cols = c(
leitos_existentes,
leitos_sus
),
names_to = "tipo_leito",
values_to = "quantidade"
)ggplot(
leitos_porte,
aes(
x = porte_leitos,
y = quantidade,
fill = tipo_leito
)
) +
geom_col(
position = "dodge"
) +
scale_fill_manual(
values = c(
leitos_existentes = "#6b7280",
leitos_sus = "#337ab7"
),
labels = c(
leitos_existentes = "Existentes",
leitos_sus = "Disponíveis ao SUS"
)
) +
labs(
title = "Leitos existentes e leitos SUS",
x = NULL,
y = "Número de leitos",
fill = NULL
) +
scale_y_continuous(
labels = label_number(
big.mark = ".",
decimal.mark = ","
)
) +
theme_minimal() +
theme(
axis.text.x = element_text(
angle = 30,
hjust = 1
),
legend.position = "top"
)
percentual_sus_porte <- indicadores_cnes |>
filter(
leitos_existentes > 0
) |>
group_by(porte_leitos) |>
summarise(
leitos_existentes = sum(
leitos_existentes,
na.rm = TRUE
),
leitos_sus = sum(
leitos_sus,
na.rm = TRUE
),
percentual_leitos_sus =
leitos_sus /
leitos_existentes * 100,
.groups = "drop"
)ggplot(
percentual_sus_porte,
aes(
x = porte_leitos,
y = percentual_leitos_sus
)
) +
geom_col(
fill = "#337ab7"
) +
geom_text(
aes(
label = paste0(
round(percentual_leitos_sus, 1),
"%"
)
),
vjust = -0.4
) +
labs(
title = "Participação dos leitos SUS",
subtitle = "Leitos SUS em relação aos leitos existentes",
x = NULL,
y = "Leitos SUS"
) +
scale_y_continuous(
labels = label_percent(
scale = 1,
decimal.mark = ","
),
limits = c(0, 100),
expand = expansion(
mult = c(0, 0.08)
)
) +
theme_minimal()
A razão agregada é calculada pela divisão entre os totais de leitos:
## [1] 0.9589816
Ela não deve ser substituída pela média simples dos percentuais dos estabelecimentos, pois estabelecimentos pequenos e grandes receberiam o mesmo peso.
Um gráfico de dispersão permite observar a associação entre leitos e produção:
ggplot(
indicadores_cnes |>
filter(
leitos_existentes > 0,
quantidade_aprovada > 0
),
aes(
x = leitos_existentes,
y = quantidade_aprovada
)
) +
geom_point(
color = "#337ab7",
alpha = 0.6
) +
scale_x_log10(
labels = label_number(
big.mark = ".",
decimal.mark = ","
)
) +
scale_y_log10(
labels = label_number(
big.mark = ".",
decimal.mark = ","
)
) +
labs(
title = "Capacidade hospitalar e produção ambulatorial",
subtitle = "Escalas logarítmicas",
x = "Leitos existentes",
y = "Quantidade aprovada"
) +
theme_minimal()
A escala logarítmica reduz a concentração visual causada por estabelecimentos muito grandes. Ela não altera os valores da base.
Identifique os estabelecimentos acima do percentil 95 de produção por leito:
limite_p95 <- quantile(
indicadores_cnes$producao_por_leito,
0.95,
na.rm = TRUE
)
estabelecimentos_atipicos <- indicadores_cnes |>
filter(
producao_por_leito > limite_p95
) |>
arrange(
desc(producao_por_leito)
) |>
select(
PA_CODUNI,
TP_UNID,
porte_leitos,
leitos_existentes,
quantidade_aprovada,
producao_por_leito
)
estabelecimentos_atipicosEsses registros devem ser investigados, não removidos automaticamente.
resumo_esfera <- indicadores_cnes |>
group_by(ESFERA_A) |>
summarise(
estabelecimentos = n_distinct(PA_CODUNI),
quantidade_aprovada = sum(
quantidade_aprovada,
na.rm = TRUE
),
valor_aprovado = sum(
valor_aprovado,
na.rm = TRUE
),
leitos_sus = sum(
leitos_sus,
na.rm = TRUE
),
.groups = "drop"
)ggplot(
resumo_esfera,
aes(
x = reorder(
ESFERA_A,
valor_aprovado
),
y = valor_aprovado
)
) +
geom_col(
fill = "#337ab7"
) +
coord_flip() +
labs(
title = "Valor ambulatorial aprovado por esfera administrativa",
x = "Esfera administrativa",
y = "Valor aprovado"
) +
scale_y_continuous(
labels = label_currency(
prefix = "R$ ",
big.mark = ".",
decimal.mark = ","
)
) +
theme_minimal()
Os códigos de ESFERA_A devem ser interpretados com a
tabela de domínio correspondente à competência do CNES.
painel_cnes <- indicadores_cnes |>
summarise(
estabelecimentos = n_distinct(PA_CODUNI),
estabelecimentos_com_leitos = n_distinct(
PA_CODUNI[leitos_existentes > 0],
na.rm = TRUE
),
leitos_existentes = sum(
leitos_existentes,
na.rm = TRUE
),
leitos_sus = sum(
leitos_sus,
na.rm = TRUE
),
quantidade_aprovada = sum(
quantidade_aprovada,
na.rm = TRUE
),
valor_aprovado = sum(
valor_aprovado,
na.rm = TRUE
),
percentual_leitos_sus =
leitos_sus /
leitos_existentes * 100
)
painel_cnesEsse painel resume:
Os indicadores construídos combinam duas dimensões diferentes:
| Dimensão | Fonte | Unidade |
|---|---|---|
| Produção ambulatorial | SIA/PA | Procedimento ou registro de produção |
| Capacidade hospitalar | CNES/LT | Leito cadastrado por estabelecimento e competência |
Essa integração pode apoiar a caracterização dos prestadores, mas não produz diretamente medidas de eficiência ou custo hospitalar.
Antes de comparar estabelecimentos, considere:
O denominador deve ser coerente com o fenômeno analisado. Para procedimentos exclusivamente ambulatoriais, número de consultórios, equipamentos, profissionais ou habilitações pode ser mais informativo que o número de leitos.
Um dicionário analítico pode ser representado como uma tabela:
dicionario_pa <- tibble::tribble(
~campo, ~tipo, ~descricao,
"PA_CODUNI", "character", "Código CNES do estabelecimento",
"PA_CMP", "character", "Competência de realização",
"PA_PROC_ID", "character", "Código do procedimento",
"PA_QTDAPR", "numeric", "Quantidade aprovada",
"PA_VALAPR", "numeric", "Valor aprovado"
)Esse objeto pode orientar validações automáticas:
Resultado vazio significa que todos os campos esperados estão presentes.
Uma coluna não é necessariamente uma chave apenas porque se chama identificador.
Exemplos:
| Fonte | Possível identificador | Cuidado |
|---|---|---|
| SIA PA | PA_CODUNI + PA_CMP +
PA_PROC_ID |
Pode haver várias linhas por instrumento e atributos adicionais |
| SIH RD | N_AIH |
Reapresentações e regras do sistema devem ser verificadas |
| SIH SP | SP_NAIH |
Vários atos profissionais por AIH |
| CNES ST | CNES por competência |
Cadastro varia no tempo |
| SIGTAP | Procedimento por competência | Atributos podem mudar mensalmente |
Antes de um left_join(), teste a unicidade da tabela que
será adicionada:
O vínculo deve respeitar a competência sempre que a dimensão variar no tempo.
Exemplo conceitual:
dados |>
left_join(
sigtap,
by = c(
"procedimento" = "co_procedimento",
"competencia" = "dt_competencia"
)
)Usar apenas o código pode atribuir ao registro histórico uma descrição, valor ou regra de uma competência diferente.
Alguns sistemas distinguem:
Essas datas não devem ser tratadas como equivalentes sem consultar o layout.
Valores como 0, 9, 99, espaços
e texto vazio podem representar categorias diferentes de ausência. A
conversão automática para NA pode apagar significado.
Consulte o domínio antes de recodificar.
Competências recentes podem estar incompletas ou sofrer substituição. Registre:
Mesmo em bases públicas, combinações de variáveis podem aumentar o risco de identificação indireta. Evite divulgar tabelas muito detalhadas com pequenas contagens e avalie a finalidade, a necessidade e o contexto da publicação.
Os campos financeiros de SIA e SIH são fundamentais para analisar o financiamento registrado nos sistemas, mas não representam necessariamente o custo econômico integral do cuidado.
É necessário distinguir:
| Conceito | Exemplo de fonte |
|---|---|
| Quantidade produzida ou aprovada | SIA e SIH |
| Valor aprovado ou pago segundo regras administrativas | SIA e SIH |
| Valor de referência do procedimento | SIGTAP |
| Preço observado em compras públicas | BPS |
| Teto regulatório de medicamento | CMED/Anvisa |
| Custo apurado pelo prestador | Sistema de custos |
| Despesa orçamentária | Sistemas orçamentários e financeiros |
O SIA pode apoiar estudos de:
Exemplo de valor médio administrativo por unidade aprovada:
resumo_pa |>
mutate(
valor_medio_aprovado = if_else(
quantidade_aprovada > 0,
valor_aprovado / quantidade_aprovada,
NA_real_
)
)Esse quociente não deve ser chamado automaticamente de custo médio.
O SIH permite analisar:
Exemplo:
As três fontes respondem a perguntas diferentes:
Não existe equivalência automática entre código CATMAT, registro sanitário, apresentação farmacêutica e código SIGTAP. Qualquer relacionamento deve ser documentado e validado.
Consulta mínima à API do BPS:
library(httr2)
bps <- request(
"https://apidadosabertos.saude.gov.br/v1/economia-da-saude/bps"
) |>
req_url_query(
codigoCatmat = "405899",
anoCompra = 2025,
pagina = 1,
tamanhoPagina = 10
) |>
req_perform() |>
resp_body_json(simplifyVector = TRUE)Comece inspecionando a estrutura, pois APIs podem alterar nomes e níveis da resposta:
O CNES acrescenta contexto à produção:
Isso permite comparar produção, valores e capacidade instalada, desde que todas as fontes sejam alinhadas pela competência.
O arquivo de Procedimentos Ambulatoriais (PA) reúne
a produção processada pelo SIA. O arquivo AM contém as
APAC de medicamentos e disponibiliza o CNS do paciente no campo
AP_CNSPCN.
A integração utiliza:
| PA | AM | Significado |
|---|---|---|
PA_CMP |
AP_CMP |
Competência do atendimento |
PA_AUTORIZ |
AP_AUTORIZ |
Número da autorização/APAC |
| — | AP_CNSPCN |
CNS disseminado do paciente |
A competência precisa fazer parte da chave porque os dados serão consolidados para vários meses.
Para o Acre, nas competências de setembro a novembro de 2024, são esperados:
| Tipo | Competência | Arquivo |
|---|---|---|
| PA | 202409 |
PAAC2409.dbc |
| PA | 202410 |
PAAC2410.dbc |
| PA | 202411 |
PAAC2411.dbc |
| AM | 202409 |
AMAC2409.dbc |
| AM | 202410 |
AMAC2410.dbc |
| AM | 202411 |
AMAC2411.dbc |
O código não pressupõe que exista somente um arquivo por competência.
Todos os arquivos cujo nome contenha o padrão %UFAAMM%,
como %AC2409%, serão selecionados.
A listagem é obtida uma única vez. Depois, o código procura os
arquivos PA e AM usando o padrão formado por
UF e competência.
forO filtro grepl(filtro_uf_aamm, ...) equivale
conceitualmente a:
LIKE '%UFAAMM%'
Por exemplo:
LIKE '%AC2409%'
O prefixo PA ou AM diferencia os dois tipos
de arquivo.
arquivos <- data.frame()
for (tipo in c("PA", "AM")) {
for (aamm in competencias) {
filtro_uf_aamm <- paste0(uf, aamm)
encontrados <- arquivos_ftp[
startsWith(toupper(arquivos_ftp), tipo) &
grepl(
filtro_uf_aamm,
toupper(arquivos_ftp),
fixed = TRUE
)
]
if (length(encontrados) == 0) {
stop(
"Nenhum arquivo encontrado para ",
tipo,
" ",
filtro_uf_aamm
)
}
arquivos <- bind_rows(
arquivos,
data.frame(
tipo = tipo,
uf = uf,
competencia = paste0("20", aamm),
arquivo = encontrados,
url = paste0(url_ftp, encontrados)
)
)
}
}
arquivos |>
arrange(tipo, competencia, arquivo)Se uma UF possuir dois ou mais arquivos do mesmo tipo na mesma competência, todos aparecerão na tabela e serão processados.
arquivos$destino <- file.path(
diretorio,
arquivos$arquivo
)
for (i in seq_len(nrow(arquivos))) {
if (!file.exists(arquivos$destino[i])) {
curl_download(
arquivos$url[i],
arquivos$destino[i],
mode = "wb"
)
}
}
stopifnot(
all(file.exists(arquivos$destino)),
all(file.info(arquivos$destino)$size > 0)
)A função lê todos os arquivos encontrados para determinado tipo. A
coluna arquivo_origem mantém a rastreabilidade.
ler_conjunto_dbc <- function(tipo) {
selecionados <- arquivos[
arquivos$tipo == tipo,
]
partes <- vector(
"list",
nrow(selecionados)
)
for (i in seq_len(nrow(selecionados))) {
dados <- read.dbc(
selecionados$destino[i]
)
dados$arquivo_origem <-
selecionados$arquivo[i]
dados$competencia_arquivo <-
selecionados$competencia[i]
partes[[i]] <- dados
}
bind_rows(partes)
}
pa <- ler_conjunto_dbc("PA")
am <- ler_conjunto_dbc("AM")Verifique as competências efetivamente presentes nos campos internos:
A competência do nome do arquivo é útil para rastreabilidade. Para a integração, utilize os campos internos
PA_CMPeAP_CMP.
A função abaixo remove bytes inválidos e mantém somente caracteres
numéricos. Valores com tamanho diferente do esperado são transformados
em NA.
normalizar_codigo <- function(x, tamanho) {
if (is.numeric(x)) {
x <- format(
x,
scientific = FALSE,
trim = TRUE
)
}
x <- as.character(x)
x <- gsub(
"[^0-9]",
"",
x,
useBytes = TRUE
)
x[x == ""] <- NA_character_
tamanho_invalido <-
!is.na(x) &
nchar(x, type = "bytes") != tamanho
x[tamanho_invalido] <- NA_character_
x
}
am_cns <- am |>
transmute(
competencia_chave = normalizar_codigo(
AP_CMP,
6
),
autorizacao_chave = normalizar_codigo(
AP_AUTORIZ,
13
),
cns_am = normalizar_codigo(
AP_CNSPCN,
15
)
) |>
filter(
!is.na(competencia_chave),
!is.na(autorizacao_chave),
!is.na(cns_am),
cns_am != "000000000000000"
) |>
distinct()A mesma normalização deve ser aplicada às chaves do PA.
linhas_pa <- nrow(pa)
pa_consolidado <- pa |>
mutate(
competencia_chave = normalizar_codigo(
PA_CMP,
6
),
autorizacao_chave = normalizar_codigo(
PA_AUTORIZ,
13
)
) |>
left_join(
am_cns,
by = c(
"competencia_chave",
"autorizacao_chave"
)
) |>
select(
-competencia_chave,
-autorizacao_chave
)
stopifnot(
nrow(pa_consolidado) == linhas_pa
)Utilize os exemplos anteriores para responder:
PA_VALAPR como
custo econômico?Estrutura mínima da resposta:
resultado <- pa_cnes |>
group_by(PA_PROC_ID) |>
summarise(
estabelecimentos = n_distinct(PA_CODUNI),
quantidade = sum(PA_QTDAPR, na.rm = TRUE),
valor = sum(PA_VALAPR, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(valor))Uma análise intermediária de dados do SUS exige mais do que importar arquivos:
O código pode ser curto. A interpretação precisa ser rigorosa.
BRASIL. Ministério da Saúde. Comissão Intergestores Tripartite. Disponível em: https://www.gov.br/saude/pt-br/acesso-a-informacao/gestao-do-sus/articulacao-interfederativa/cit. Acesso em: 17 ago. 2026.
BRASIL. Ministério da Saúde. Portal de Dados Abertos do SUS. Disponível em: https://dadosabertos.saude.gov.br/. Acesso em: 17 ago. 2026.
BRASIL. Ministério da Saúde. CNES: Informe Técnico 2017-06. Brasília, DF: Ministério da Saúde, 2017.
BRASIL. Ministério da Saúde. Informe Técnico do Sistema de Informações Ambulatoriais do SUS. Brasília, DF: Ministério da Saúde, 2019.
BRASIL. Ministério da Saúde. Informe Técnico do Sistema de Informações Hospitalares do SUS. Brasília, DF: Ministério da Saúde, 2016.
BRASIL. Ministério da Saúde. Sistema de Informações Ambulatoriais. Disponível em: https://www.gov.br/saude/pt-br/composicao/saes/samu-192/sistemas. Acesso em: 17 ago. 2026.
BRASIL. Agência Nacional de Saúde Suplementar. Dados abertos. Disponível em: https://www.gov.br/ans/pt-br/acesso-a-informacao/perfil-do-setor/dados-abertos-1. Acesso em: 17 ago. 2026.
BRASIL. Agência Nacional de Saúde Suplementar. Quem somos. Disponível em: https://www.gov.br/ans/pt-br/acesso-a-informacao/institucional/quem-somos-1. Acesso em: 17 ago. 2026.
BRASIL. Agência Nacional de Vigilância Sanitária. Câmara de Regulação do Mercado de Medicamentos. Disponível em: https://www.gov.br/anvisa/pt-br/assuntos/medicamentos/cmed. Acesso em: 17 ago. 2026.