O que é glosa?

De acordo com o documento Orientações técnicas sobre aplicação de glosas em auditoria no SUS1, trata-se da “rejeição total ou parcial de recursos financeiros do SUS, utilizados pelos estados, pelo Distrito Federal e pelos municípios de forma irregular ou cobrados indevidamente por prestadores de serviço, causando danos aos cofres públicos” (p. 10). O material ainda indica os motivos mais comuns para gerar glosa em atendimentos hospitalares no âmbito do SUS:

  1. Ausência de boletim cirúrgico para comprovar a realização da cirurgia.
  2. Cobrança de parto com assistência sem a presença do pediatra.
  3. Cobrança da primeira consulta do pediatra na AIH quando a unidade não possuir esse profissional em seu corpo clínico.
  4. Atos profissionais realizados simultaneamente no mesmo hospital ou em hospitais diferentes pelo mesmo profissional.
  5. Procedimento diferente do tratamento realizado.
  6. Emissão de AIH para tratamento realizado em regime ambulatorial.
  7. Emissão indevida de mais de uma AIH para o mesmo paciente.

Resumidamente, o hospital primeiro realiza o atendimento e registra isso na AIH (Autorização de Internação Hospitalar), depois envia essas informações para o Ministério da Saúde para receber pelo serviços realizados segundo uma tabela de valores do SUS. Auditores avaliam essas informações e, caso identifiquem algum dos motivos de rejeição pré-definidos, glosam a AIH e o hospital ou não recebe nada pelo atendimento ou recebe apenas parte do atendimento.

Logo, para a gestão de uma unidade hospitalar é extretamente importante:

A glosa nos dados do SIH

O SIH (Sistema de Informações Hospitalares) do DATASUS disponibiliza os dados em diferentes bases:

Arquivo Conteúdo
ER AIH’s rejeitada com código de erro
RD AIH’s reduzida ou paga
RJ AIH’s rejeitadas
SP Serviços profissionais

AIH’s rejeitadas são AIH’s glosadas e como elas retornam para o prestador para corrigir os erros, duas coisas podem acontecer que dificulta o cálculo dos indicadores mencionados anteriormente:

  1. A mesma AIH pode ser reapresentada em meses subsequentes ao da realização do atendimento.
  2. A mesma AIH pode ser reapresentada com valores diferentes da primeira AIH apresentada.

Vamos ver essa situação com os dados? Utilizo aqui o pacote microdatasus2 que facilita muito o acesso aos dados individuais das AIH’s. Se você não tiver instalado o pacote, utilize o comando remotes::install_github("rfsaldanha/microdatasus"). Com a sintaxe abaixo faremos o download de AIH’s glosadas em Mato Grosso em novembro e dezembro de 2021.

library(tidyverse, warn.conflicts = FALSE)

RJ <- microdatasus::fetch_datasus(information_system = "SIH-RJ", 
                                  year_start = 2021, year_end = 2021,
                                  month_start = 11, month_end = 12, uf = "MT",
                                  vars = c("N_AIH", "ESPEC", "IDENT", "MUNIC_RES", "NASC", "SEXO", 
                                           "UTI_MES_TO", "MARCA_UTI", "DIAR_ACOM", "PROC_REA", 
                                           "VAL_TOT", "DT_INTER", "DT_SAIDA", "DIAG_PRINC", "GESTAO", 
                                           "COD_IDADE", "IDADE", "DIAS_PERM", "MORTE", "NACIONAL", 
                                           "CAR_INT", "CNES", "COMPLEX", "FINANC", "REMESSA"))

Esta é a quantidade de AIH’s e o seu valor total presente no dataset:

RJ %>% summarise(Total_AIH = nrow(RJ),
                 Valor_AIH = sum(VAL_TOT))
##   Total_AIH Valor_AIH
## 1      4251  19839093

Porém, ao executarmos uma tabela de frequência perceberemos que existem AIH’s duplicadas, elas são as reapresentações mencionadas anteriormente. Ou seja, do total de AIH’s rejeitadas nestes dois meses 624 (4251-3627) são reapresentações, cerca de 15%.

DescTools::Desc(RJ$N_AIH, plotit = FALSE)
## ------------------------------------------------------------------------------ 
## RJ$N_AIH (factor)
## 
##   length      n    NAs unique levels  dupes
##    4'251  4'251      0  3'627  3'627      y
##          100.0%   0.0%                     
## 
##             level  freq  perc  cumfreq  cumperc
## 1   5121100782501     2  0.0%        2     0.0%
## 2   5121100914787     2  0.0%        4     0.1%
## 3   5121100919385     2  0.0%        6     0.1%
## 4   5121100920485     2  0.0%        8     0.2%
## 5   5121100920529     2  0.0%       10     0.2%
## 6   5121100920771     2  0.0%       12     0.3%
## 7   5121101057732     2  0.0%       14     0.3%
## 8   5121101058062     2  0.0%       16     0.4%
## 9   5121101059130     2  0.0%       18     0.4%
## 10  5121101059151     2  0.0%       20     0.5%
## 11  5121101378844     2  0.0%       22     0.5%
## 12  5121101379009     2  0.0%       24     0.6%
## ... etc.
##  [list output truncated]

Ao utilizar estes dados como estão você terá cometido viés de aferição dos indicadores 1 e 2 ao superestimar a quantidade de AIH’s glosadas e o valor total da glosa. Uma grande parte das análises realizadas por secretarias de saúde e unidades hospitalares contém este viés, ou não perceberam o erro por desconhecimento da lógica de armazenamento dos dados do SIH ou perceberam e não conseguiram desenvolver numa solução.

Removendo as duplicidades descobrimos um valor indevido excedente de R$ 3.504.149 (18% maior), ao comparar com os valores anteriores:

RJ2 <- RJ %>% distinct(N_AIH, .keep_all = TRUE)

RJ2 %>% summarise(Total_AIH = nrow(RJ2),
                  Valor_AIH = sum(VAL_TOT))
##   Total_AIH Valor_AIH
## 1      3627  16334944

Entretanto, resolvemos apenas o primeiro problema (o do número de AIH’s rejeitadas), mas não do segundo problema (valor rejeitado reapresentado e pago total ou parcial). Isso exige uma solução um pouco mais complexa que envolve teoria de conjunto de dados.

Neste momento precisaremos também da base das AIH’s aprovadas ou pagas (RD). Assim, utilizando a variável N_AIH como chave primária teremos como identificar:

A. AIH’s pagas que em nenhum momento foram rejeitadas. B. AIH’s rejeitadas que em algum momento foram pagas. C. AIH’s rejeitadas que em nenhum momento foram pagas.

Uma possível solução

library(dplyr)

RD <- microdatasus::fetch_datasus(information_system = "SIH-RD", 
                                  year_start = 2021, year_end = 2021,
                                  month_start = 6, month_end = 12, uf = "MT",
                                  vars = c("N_AIH", "ESPEC", "IDENT", "MUNIC_RES", "NASC", "SEXO", 
                                           "UTI_MES_TO", "MARCA_UTI", "DIAR_ACOM", "PROC_REA", 
                                           "VAL_TOT", "DT_INTER", "DT_SAIDA", "DIAG_PRINC", "GESTAO", 
                                           "COD_IDADE", "IDADE", "DIAS_PERM", "MORTE", "NACIONAL", 
                                           "CAR_INT", "CNES", "COMPLEX", "FINANC", "REMESSA"))


RJ <- microdatasus::fetch_datasus(information_system = "SIH-RJ", 
                                  year_start = 2021, year_end = 2021,
                                  month_start = 6, month_end = 12, uf = "MT",
                                  vars = c("N_AIH", "ESPEC", "IDENT", "MUNIC_RES", "NASC", "SEXO", 
                                           "UTI_MES_TO", "MARCA_UTI", "DIAR_ACOM", "PROC_REA", 
                                           "VAL_TOT", "DT_INTER", "DT_SAIDA", "DIAG_PRINC", "GESTAO", 
                                           "COD_IDADE", "IDADE", "DIAS_PERM", "MORTE", "NACIONAL", 
                                           "CAR_INT", "CNES", "COMPLEX", "FINANC", "REMESSA"))

RJ <- RJ %>% distinct(N_AIH, .keep_all = TRUE)


a <- anti_join(RJ, RD, by = "N_AIH", suffix = c("",".r"))
a$VAL_TOT <- as.numeric(a$VAL_TOT)
a$VAL_DIFF <- a$VAL_TOT
a$SITUACAO_AIH <- "AIH rejeitada"
a$VAL_PAGO <- 0


b <- inner_join(RD, RJ, by = "N_AIH", suffix = c("",".r"))

b <- b  %>% select(N_AIH, ESPEC, IDENT, MUNIC_RES, NASC, SEXO, 
                   UTI_MES_TO, MARCA_UTI, DIAR_ACOM, PROC_REA, 
                   VAL_TOT, DT_INTER, DT_SAIDA, DIAG_PRINC,
                   GESTAO, COD_IDADE, IDADE, DIAS_PERM, MORTE, 
                   NACIONAL, CAR_INT, CNES, COMPLEX, FINANC, REMESSA, VAL_TOT.r)

b$VAL_TOT <- as.numeric(b$VAL_TOT)
b$VAL_TOT.r <- as.numeric(b$VAL_TOT.r)

b <- b  %>% mutate(VAL_DIFF = VAL_TOT.r - VAL_TOT)
b$VAL_DIFF[b$VAL_DIFF < 0] <- 0
b$VAL_TOT.r <- NULL
b$SITUACAO_AIH <- "AIH aprovada"
b$VAL_PAGO <- b$VAL_TOT

c <- dplyr::anti_join(RD, RJ, by = "N_AIH", suffix = c("",".r"))
c$VAL_TOT <- as.numeric(c$VAL_TOT)
c$VAL_DIFF <- 0
c$SITUACAO_AIH <- "AIH aprovada"
c$VAL_PAGO <- c$VAL_TOT

SIH <- rbind(a, b, c)
rm(a, b, c, RJ, RD)

SIH <- SIH  %>% filter(CNES == "2604434" | CNES == "2795655" | CNES == "2534460" |
                       CNES == "2392410" | CNES == "2471345" | CNES == "6085423" |
                       CNES == "6853781" | CNES == "2604396" | CNES == "9841903" |
                       CNES == "2395037" | CNES == "6123503" | CNES == "2699842")

SIH$HOSPITAL[SIH$CNES == "2604434"] <- "Hospital Regional de Rondonópolis"
SIH$HOSPITAL[SIH$CNES == "2795655"] <- "Hospital Regional de Sorriso"
SIH$HOSPITAL[SIH$CNES == "2534460"] <- "Hospital Regional de Cáceres"
SIH$HOSPITAL[SIH$CNES == "2392410"] <- "Hospital Regional de Colider"
SIH$HOSPITAL[SIH$CNES == "2471345"] <- "Hospital Regional de Alta Floresta"
SIH$HOSPITAL[SIH$CNES == "6085423"] <- "Hospital Regional de Sinop"
SIH$HOSPITAL[SIH$CNES == "6853781"] <- "Hospital Metropolitano"
SIH$HOSPITAL[SIH$CNES == "2604396"] <- "Hospital Adauto Botelho"
SIH$HOSPITAL[SIH$CNES == "9841903"] <- "Hospital Estadual Santa Casa"
SIH$HOSPITAL[SIH$CNES == "2395037"] <- "Hospital São Luiz"
SIH$HOSPITAL[SIH$CNES == "6123503"] <- "Hospital Regional de Água Boa"
SIH$HOSPITAL[SIH$CNES == "2699842"] <- "Hospital Regional de Peixoto de Azevedo"

SIH <- microdatasus::process_sih(SIH, municipality_data = FALSE)

SIH$DT_INTER <- lubridate::ymd(SIH$DT_INTER)
SIH$DT_SAIDA <- lubridate::ymd(SIH$DT_SAIDA)

SIH$MES_INT <- lubridate::month(SIH$DT_INTER, label = FALSE, abbr = FALSE)
SIH$ANO_INT <- lubridate::year(SIH$DT_INTER)
SIH$ANO_INT <- as.factor(SIH$ANO_INT)

SIH$MES_SAIDA <- lubridate::month(SIH$DT_SAIDA, label = FALSE, abbr = FALSE)
SIH$ANO_SAIDA <- lubridate::year(SIH$DT_SAIDA)
SIH$ANO_SAIDA <- as.factor(SIH$ANO_SAIDA)


SIH$VAL_DIFF <- as.numeric(SIH$VAL_DIFF)
SIH$VAL_PAGO <- as.numeric(SIH$VAL_PAGO)
SIH$VAL_TOT <- as.numeric(SIH$VAL_TOT)
SIH$DIAS_PERM <- as.numeric(SIH$DIAS_PERM)

Indicadores de gestão hospitalar

Indicador 1: Percentual de Glosa de AIH: Um total de 13% das AIH’s produzidas foram glosadas no período avaliado.

DescTools::Desc(SIH$SITUACAO_AIH, plotit = FALSE)
## ------------------------------------------------------------------------------ 
## SIH$SITUACAO_AIH (character - dichotomous)
## 
##   length      n    NAs unique
##   30'806 30'806      0      2
##          100.0%   0.0%       
## 
##                  freq   perc  lci.95  uci.95'
## AIH aprovada   26'722  86.7%   86.4%   87.1%
## AIH rejeitada   4'084  13.3%   12.9%   13.6%
## 
## ' 95%-CI (Wilson)

Indicador 2: Proporção do Valor Glosado: O valor glosado representou 40% do valor total pago pelas AIH’s aprovadas.

SIH %>% summarise(Pago = sum(VAL_PAGO),
                  Rejeitado = sum(VAL_DIFF),
                  "Proporção de Glosa (%)" = round((Rejeitado / Pago)*100,2))
##       Pago Rejeitado Proporção de Glosa (%)
## 1 64554539  26472816                  41.01

  1. Ministério da Saúde. Série A. Normas e Manuais Técnicos. Orientações técnicas sobre aplicação de glosas em auditoria no SUS. 1º edição, Brasília/DF, 2005. https://bvsms.saude.gov.br/bvs/publicacoes/aplicacao_glosas_auditoria.pdf↩︎

  2. Saldanha RF, Bastos RR, Barcellos C. Microdatasus: pacote para download e pré-processamento de microdados do Departamento de Informática do SUS (DATASUS). Cad. Saúde Pública 2019;35(9) https://www.scielo.br/j/csp/a/gdJXqcrW5PPDHX8rwPDYL7F/?format=pdf&lang=pt↩︎