Solicitações de Atendimento Pré-Hospitalar (SAMU) em Pernambuco — 2025
O que 127 mil chamados de urgência revelam sobre quando, onde e para quem o socorro é acionado
Introdução
O problema
Os serviços de atendimento pré-hospitalar — articulados pelo SAMU e pelas centrais de regulação de urgências — são a primeira linha de resposta do sistema de saúde diante de situações de risco iminente à vida. Cada minuto de antecipação no socorro pode separar um desfecho favorável de um agravamento irreversível. Por isso, entender o padrão das solicitações não é um exercício estatístico abstrato: é insumo direto para dimensionar ambulâncias, equipes e bases regionais ao longo do tempo.
Em um estado populoso e com forte concentração metropolitana como Pernambuco, a demanda por urgência não é uniforme. Ela varia por mês, dia da semana, hora, município, perfil do paciente e natureza clínica da ocorrência. Compreender essa variação é o que permite sair de uma alocação de recursos “no escuro” para um planejamento orientado por evidência.
Por que isso interessa
A pergunta que orienta o trabalho é prática e direta:
Como a demanda por atendimento pré-hospitalar se distribui ao longo de 2025 em Pernambuco — e o que esse padrão revela sobre onde, quando e para quem o sistema precisa estar mais bem preparado?
Para um gestor de saúde, saber que tipo de ocorrência domina cada horário, quais municípios concentram a demanda e — sobretudo — quais categorias de chamado raramente se convertem em atendimento efetivo transforma diretamente a forma de escalar plantões e desenhar protocolos de regulação.
Abordagem
A estratégia percorre cinco etapas:
- Importação de uma base pública real, em
CSV, com mais de 127 mil registros e 12 variáveis, cobrindo os primeiros oito meses de 2025. - Limpeza e padronização — remoção de duplicatas, tratamento de ausentes, correção de idades implausíveis e criação de variáveis derivadas (mês, dia da semana, período do dia, faixa etária e indicador de desfecho).
- Análise exploratória organizada em eixos (temporal, geográfico, clínico, demográfico e operacional), com gráficos e tabelas interativas.
- Descobertas não-óbvias — cruzamentos que revelam padrões invisíveis numa leitura superficial.
- Síntese em recomendações acionáveis.
A aposta central é ir além do óbvio: não basta mostrar “há muitos atendimentos”. Buscamos o que os dados escondem — como o fato de que certas categorias de chamado quase nunca terminam em remoção efetiva, consumindo capacidade operacional sem desfecho clínico.
A quem se destina
Gestores de saúde pública, coordenadores de centrais de regulação (SAMU/CIODS), pesquisadores de saúde coletiva e profissionais de planejamento de serviços de emergência se beneficiam diretamente das descobertas aqui apresentadas.
Origem dos Dados
Fonte
Os dados foram obtidos no Portal de Dados Abertos do Governo de Pernambuco, que disponibiliza publicamente os registros operacionais das centrais de regulação de urgências.
Fonte: Portal de Dados Abertos de Pernambuco — Solicitações de Atendimento (2025).
Propósito original e contexto de coleta
A finalidade original da base é operacional, não científica: cada linha registra uma solicitação recebida pela central, com o objetivo de acompanhar o atendimento e gerar indicadores de gestão. Os dados foram coletados ao longo de 2025, cobrindo de 1º de janeiro a 31 de agosto (243 dias). Por terem origem administrativa, carregam as imperfeições típicas desse tipo de fonte — campos em branco, abreviações, inconsistências de digitação — exatamente o que torna a etapa de limpeza indispensável.
A base original contém 127.304 registros e 12
variáveis. Os valores ausentes vêm registrados como
células vazias (""), e não como
NA explícito.
Dicionário de variáveis
| Variável | Descrição | Peculiaridades |
|---|---|---|
data |
Data da solicitação | Cobre jan–ago/2025 |
hora_minuto |
Horário (HH:MM:SS) | Base para hora e período |
municipio |
Município da ocorrência | 73 municípios; 1 ausente |
bairro |
Bairro da ocorrência | Alta cardinalidade (~970) |
endereco |
Endereço aproximado | ~7,7 mil ausentes |
origem_chamado |
Local de origem do chamado | Residencial, via pública, etc. |
tipo |
Categoria clínica | 18 categorias válidas |
subtipo |
Detalhamento clínico | ~110 valores; ~2,6 mil ausentes |
sexo |
Sexo do paciente | ~2,1 mil ausentes |
idade |
Idade declarada | ~16,8 mil ausentes; contém erros (>110) |
motivo_finalizacao |
Motivo de finalização da chamada | Preenchido em minoria dos casos (~68% ausente) |
motivo_desfecho |
Desfecho final | Base do indicador de êxito |
Pela altíssima taxa de ausência em motivo_finalizacao
(cerca de dois terços vazios), essa variável é mantida na base, mas
não é usada como eixo analítico principal — o desfecho
é medido por motivo_desfecho, que está completo.
Pacotes Necessários
Todos os pacotes são carregados antecipadamente, para que a análise seja replicável sem surpresas.
library(dplyr) # manipulação e transformação dos dados
library(tidyr) # reorganização entre formatos largo e longo
library(stringr) # padronização de texto
library(lubridate) # datas, horas, dia da semana
library(janitor) # padronização de nomes e tabelas
library(ggplot2) # base dos gráficos
library(plotly) # interatividade (tooltip, zoom)
library(DT) # tabelas interativas
library(scales) # formatação de eixos e percentuais
library(knitr) # renderização de tabelas
library(kableExtra) # estilização de tabelas| Pacote | Utilização |
|---|---|
dplyr |
Filtragem, agregação e novas colunas |
tidyr |
Pivotagem largo/longo |
stringr |
Limpeza e normalização de campos textuais |
lubridate |
Conversão de datas e extração de hora/dia da semana |
janitor |
Padronização de nomes de colunas |
ggplot2 |
Construção visual dos gráficos |
plotly |
Versões interativas dos gráficos |
DT |
Tabelas exploráveis pelo leitor |
scales |
Percentuais e formatação de eixos |
knitr / kableExtra |
Tabelas-resumo formatadas |
Preparação dos Dados
Importação
A base usa ; como separador (padrão brasileiro) e aspas
em todos os campos. Células vazias são lidas como NA, e os
nomes de colunas são padronizados.
dados_brutos <- read.csv2(
"dataSAMU_full.csv",
stringsAsFactors = FALSE,
na.strings = c("", "NA"),
encoding = "UTF-8",
check.names = TRUE
)
dados_brutos <- janitor::clean_names(dados_brutos)
dim(dados_brutos)## [1] 127304 12
Limpeza, passo a passo
Cada decisão de limpeza é justificada — limpar sem explicar o critério compromete a reprodutibilidade.
Remoção de duplicatas
A base contém registros idênticos (mesma data, hora, local e desfecho), que representam o mesmo evento contado mais de uma vez. São removidos para não inflar contagens.
n_antes <- nrow(dados_brutos)
dados <- dados_brutos %>% distinct()
n_depois <- nrow(dados)
cat("Duplicatas removidas:", n_antes - n_depois)## Duplicatas removidas: 136
Datas, hora e dia da semana
Convertemos data para Date e derivamos
mês, dia da semana e hora
cheia — dimensões centrais para a análise temporal de um ano
inteiro.
## [1] "pt_BR.UTF-8"
Idade: correção de valores implausíveis
A inspeção revelou idades absurdas (máximo de 858 anos), claramente erros de digitação. Idades acima de 110 são convertidas em ausente.
n_erro <- sum(dados$idade > 110, na.rm = TRUE)
dados <- dados %>% mutate(idade = ifelse(idade > 110, NA, idade))
cat("Idades implausíveis corrigidas:", n_erro)## Idades implausíveis corrigidas: 22
Padronização do sexo
Os ~2,1 mil registros sem sexo são rotulados como
"Não informado", preservando esses casos nas demais
análises.
Variáveis derivadas
Criamos as dimensões analíticas: faixa etária,
período do dia e
concluida_exito — indicador lógico de
efetividade operacional (a ocorrência terminou com êxito ou não).
dados <- dados %>%
mutate(
faixa_etaria = case_when(
is.na(idade) ~ "Não informada",
idade <= 12 ~ "Criança (0-12)",
idade <= 18 ~ "Adolescente (13-18)",
idade <= 40 ~ "Adulto Jovem (19-40)",
idade <= 60 ~ "Adulto (41-60)",
TRUE ~ "Idoso (60+)"
),
periodo = case_when(
hora < 6 ~ "Madrugada",
hora < 12 ~ "Manhã",
hora < 18 ~ "Tarde",
TRUE ~ "Noite"
),
concluida_exito = str_detect(toupper(motivo_desfecho), "XITO") # capta "ÊXITO"
) %>%
mutate(
periodo = factor(periodo, levels = c("Madrugada","Manhã","Tarde","Noite")),
faixa_etaria = factor(faixa_etaria, levels = c(
"Criança (0-12)","Adolescente (13-18)","Adulto Jovem (19-40)",
"Adulto (41-60)","Idoso (60+)","Não informada")),
sexo = factor(sexo, levels = c("Masculino","Feminino","Não informado"))
)A base limpa
Em vez de despejar str() ou summary() cru,
segue um resumo consolidado das variáveis de
interesse:
| Variável | Valor |
|---|---|
| Registros (após limpeza) | 127.168 |
| Período coberto | 01/01 a 31/08/2025 |
| Dias distintos | 243 |
| Municípios | 73 |
| Categorias clínicas | 19 |
| Idade (mín–máx válida) | 0 – 110 |
| Idade ausente | 16.843 |
| Sexo ausente | 2.124 |
| Ocorrências com êxito | 50.263 (39.5%) |
Amostra condensada do conjunto final (8 primeiras linhas):
| data | hora_minuto | municipio | tipo | subtipo | sexo | idade | periodo | motivo_desfecho |
|---|---|---|---|---|---|---|---|---|
| 2025-01-01 | 00:00:45 | RECIFE | DROGAS | ALCOOLISMO | Masculino | 25 | Madrugada | SEM DESFECHO |
| 2025-01-01 | 00:08:03 | POMBOS | CAUSAS EXTERNAS | ACIDENTE DE TRANSITO ENVOLVENDO MOTO | Masculino | 22 | Madrugada |
|
| 2025-01-01 | 00:08:35 | PAULISTA | CAUSAS EXTERNAS | QUEDA DA PROPRIA ALTURA | Feminino | 45 | Madrugada | SEM DESFECHO |
| 2025-01-01 | 00:17:44 | JABOATAO DOS GUARARAPES | DROGAS | INTOXICACAO EXOGENA | Feminino | 46 | Madrugada | SEM DESFECHO |
| 2025-01-01 | 00:19:24 | IGARASSU | GASTROINTESTINAL | DOR ABDOMINAL | Masculino | 65 | Madrugada | SEM DESFECHO |
| 2025-01-01 | 00:20:55 | ESCADA | CAUSAS EXTERNAS | ACIDENTE DE TRANSITO COM CARROS | Masculino | 57 | Madrugada | SEM DESFECHO |
| 2025-01-01 | 00:21:11 | JABOATAO DOS GUARARAPES | NEUROLOGICA | CONFUSAO MENTAL | Masculino | 56 | Madrugada |
|
| 2025-01-01 | 00:22:49 | SIRINHAEM | GERAIS/OUTROS | OUTROS | Masculino | NA | Madrugada | SEM DESFECHO |
Análise Exploratória
A análise está organizada em abas, cada uma respondendo a uma pergunta. Navegue pelos eixos abaixo.
Quando acontece
Por mês
A demanda é alta e relativamente estável ao longo do ano, oscilando em torno de 15–16 mil chamados mensais — sinal de que urgência não tira férias e o serviço opera sob pressão constante.
g_mes <- dados %>%
count(mes) %>%
ggplot(aes(x = mes, y = n, group = 1)) +
geom_area(fill = cor_principal, alpha = 0.20) +
geom_line(color = cor_secundaria, linewidth = 1.1) +
geom_point(color = cor_secundaria, size = 2) +
scale_y_continuous(labels = label_number(big.mark = ".")) +
labs(title = "Solicitações por mês (2025)", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 13)
ggplotly(g_mes)Por dia da semana
Os fins de semana concentram mais ocorrências, coerente com lazer, trânsito e consumo de álcool — informação direta para escalar plantões.
g_dow <- dados %>%
count(dia_sem) %>%
ggplot(aes(x = dia_sem, y = n, fill = n)) +
geom_col() +
scale_fill_gradient(low = "#C084FC", high = cor_secundaria) +
scale_y_continuous(labels = label_number(big.mark = ".")) +
labs(title = "Solicitações por dia da semana", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 13) + theme(legend.position = "none")
ggplotly(g_dow)Por hora
A curva hora a hora mostra vale na madrugada e platô elevado durante todo o dia, com pico no fim de tarde — padrão clássico de demanda urbana.
g_hora <- dados %>%
count(hora) %>%
ggplot(aes(x = hora, y = n)) +
geom_area(fill = cor_principal, alpha = 0.25) +
geom_line(color = cor_secundaria, linewidth = 1) +
geom_point(color = cor_secundaria, size = 1.4) +
scale_x_continuous(breaks = seq(0, 23, 2)) +
scale_y_continuous(labels = label_number(big.mark = ".")) +
labs(title = "Distribuição ao longo do dia", x = "Hora", y = "Nº de solicitações") +
theme_minimal(base_size = 13)
ggplotly(g_hora)Onde acontece
Municípios
A demanda é fortemente concentrada na Região Metropolitana: Recife sozinho responde por quase 40% dos chamados, e os cinco primeiros municípios somam a maioria absoluta. O reforço de recursos deve ser geograficamente seletivo.
top_mun <- dados %>% count(municipio, sort = TRUE) %>% slice_head(n = 10)
g_mun <- ggplot(top_mun, aes(x = reorder(municipio, n), y = n)) +
geom_col(fill = cor_principal) +
geom_text(aes(label = format(n, big.mark=".")), hjust = -0.1, size = 3) +
coord_flip() +
scale_y_continuous(labels = label_number(big.mark="."), expand = expansion(mult = c(0,.15))) +
labs(title = "Top 10 municípios", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 12)
ggplotly(g_mun)Origem do chamado
A maioria parte de residências, seguida de via pública — esta última, onde se acumulam acidentes e agressões.
g_orig <- dados %>%
filter(!is.na(origem_chamado)) %>%
count(origem_chamado, sort = TRUE) %>% slice_head(n = 6) %>%
ggplot(aes(x = reorder(origem_chamado, n), y = n)) +
geom_col(fill = cor_secundaria) +
geom_text(aes(label = format(n, big.mark=".")), hjust = -0.1, size = 3) +
coord_flip() +
scale_y_continuous(labels = label_number(big.mark="."), expand = expansion(mult = c(0,.15))) +
labs(title = "Origem dos chamados", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 12)
ggplotly(g_orig)O que acontece
Tipos de ocorrência
Causas externas (acidentes, quedas, agressões) e gerais/outros lideram, seguidas de neurológicas e psiquiátricas — estas duas últimas, surpreendentemente, à frente de cardiológicas e respiratórias.
g_tipo <- dados %>%
filter(!is.na(tipo)) %>%
count(tipo, sort = TRUE) %>%
ggplot(aes(x = reorder(tipo, n), y = n)) +
geom_col(fill = cor_principal) +
coord_flip() +
scale_y_continuous(labels = label_number(big.mark=".")) +
labs(title = "Solicitações por categoria clínica", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 11)
ggplotly(g_tipo)Subtipos mais frequentes
No detalhe, acidentes de moto, quedas, agressividade e convulsões lideram — um retrato do que de fato mobiliza o socorro.
g_sub <- dados %>%
filter(!is.na(subtipo), subtipo != "OUTROS") %>%
count(subtipo, sort = TRUE) %>% slice_head(n = 12) %>%
ggplot(aes(x = reorder(subtipo, n), y = n)) +
geom_col(fill = cor_secundaria) +
coord_flip() +
scale_y_continuous(labels = label_number(big.mark=".")) +
labs(title = "Top 12 subtipos (excluindo 'Outros')", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 10)
ggplotly(g_sub)Quem é atendido
Sexo
Predomínio masculino, padrão esperado num cenário com forte peso de causas externas e violência.
g_sexo <- dados %>%
count(sexo) %>%
ggplot(aes(x = sexo, y = n, fill = sexo)) +
geom_col(width = 0.6) +
geom_text(aes(label = format(n, big.mark=".")), vjust = -0.4, fontface = "bold") +
scale_fill_manual(values = c(cor_secundaria, cor_destaque, cor_neutra)) +
scale_y_continuous(labels = label_number(big.mark="."), expand = expansion(mult=c(0,.12))) +
labs(title = "Solicitações por sexo", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 13) + theme(legend.position = "none")
ggplotly(g_sexo)Faixa etária
O adulto jovem (19–40) e o idoso (60+) são os grupos mais atendidos — dois perfis de risco distintos: o primeiro por causas externas, o segundo por agravos clínicos.
g_faixa <- dados %>%
filter(faixa_etaria != "Não informada") %>%
count(faixa_etaria) %>%
ggplot(aes(x = faixa_etaria, y = n, fill = faixa_etaria)) +
geom_col(width = 0.7) +
geom_text(aes(label = format(n, big.mark=".")), vjust = -0.4, size = 3) +
scale_fill_manual(values = paleta_seq) +
scale_y_continuous(labels = label_number(big.mark="."), expand = expansion(mult=c(0,.12))) +
labs(title = "Solicitações por faixa etária", x = NULL, y = "Nº de solicitações") +
theme_minimal(base_size = 11) +
theme(legend.position = "none", axis.text.x = element_text(angle = 20, hjust = 1))
ggplotly(g_faixa)Faixa etária por sexo
Combinando as dimensões, vê-se a concentração masculina entre adultos jovens e o equilíbrio (ou inversão) nas faixas mais velhas.
g_pir <- dados %>%
filter(faixa_etaria != "Não informada", sexo != "Não informado") %>%
count(faixa_etaria, sexo) %>%
ggplot(aes(x = faixa_etaria, y = n, fill = sexo)) +
geom_col(position = "dodge") +
scale_fill_manual(values = c(cor_secundaria, cor_destaque)) +
scale_y_continuous(labels = label_number(big.mark=".")) +
coord_flip() +
labs(title = "Faixa etária por sexo", x = NULL, y = "Nº de solicitações", fill = "Sexo") +
theme_minimal(base_size = 11)
ggplotly(g_pir)Descobertas não-óbvias
O coração analítico do relatório: cruzamentos que não saltam aos olhos.
Efetividade por categoria
Esta é a descoberta mais importante. Medindo a proporção de ocorrências concluídas com êxito por categoria, surge um padrão revelador: chamados psiquiátricos (~21%) e de drogas (~25%) têm taxa de êxito drasticamente baixa — não por falha clínica, mas porque terminam majoritariamente em desistência, recusa de remoção ou evasão do paciente. No outro extremo, ocorrências oncológicas, respiratórias e obstétricas superam 50%.
Implicação: uma fração relevante da capacidade operacional é mobilizada para chamados que não se convertem em atendimento efetivo. Isso aponta para a necessidade de protocolos específicos de regulação para casos psiquiátricos e de álcool/drogas.
efetiv <- dados %>%
filter(!is.na(tipo)) %>%
group_by(tipo) %>%
summarise(total = n(), taxa = round(100 * mean(concluida_exito), 1), .groups = "drop") %>%
filter(total >= 500) %>% arrange(taxa)
g_ef <- ggplot(efetiv, aes(x = reorder(tipo, taxa), y = taxa, fill = taxa)) +
geom_col() +
geom_text(aes(label = paste0(taxa, "%")), hjust = -0.1, size = 3) +
scale_fill_gradient(low = cor_destaque, high = cor_principal) +
coord_flip(ylim = c(0, 70)) +
labs(title = "Taxa de conclusão com êxito por categoria",
subtitle = "Categorias com ≥ 500 ocorrências",
x = NULL, y = "% concluída com êxito") +
theme_minimal(base_size = 11) + theme(legend.position = "none")
ggplotly(g_ef)Tipo × período (heatmap)
Cruzando categoria e período, vê-se onde cada tipo se concentra no dia. Causas externas crescem à tarde/noite; psiquiátricas e drogas pesam mais na madrugada.
heat <- dados %>%
filter(!is.na(tipo)) %>%
count(tipo, periodo) %>%
group_by(tipo) %>% mutate(total = sum(n)) %>% ungroup() %>%
filter(total >= 2000)
g_heat <- ggplot(heat, aes(x = periodo, y = reorder(tipo, total), fill = n)) +
geom_tile(color = "white") +
geom_text(aes(label = format(n, big.mark=".")), size = 2.6, color = "white", fontface = "bold") +
scale_fill_gradient(low = "#C084FC", high = cor_secundaria, name = "Nº",
labels = label_number(big.mark=".")) +
labs(title = "Categoria clínica × período do dia",
subtitle = "Categorias com ≥ 2.000 ocorrências", x = NULL, y = NULL) +
theme_minimal(base_size = 11)
ggplotly(g_heat)Sazonalidade do tipo principal
Acompanhando as três maiores categorias mês a mês, é possível ver se alguma tem comportamento sazonal distinto ao longo do ano.
top3 <- dados %>% filter(!is.na(tipo)) %>% count(tipo, sort = TRUE) %>% slice_head(n = 3) %>% pull(tipo)
g_saz <- dados %>%
filter(tipo %in% top3) %>%
count(mes, tipo) %>%
ggplot(aes(x = mes, y = n, color = tipo, group = tipo)) +
geom_line(linewidth = 1) + geom_point(size = 1.8) +
scale_color_manual(values = c(cor_destaque, cor_principal, cor_neutra)) +
scale_y_continuous(labels = label_number(big.mark=".")) +
labs(title = "Evolução mensal das 3 maiores categorias",
x = NULL, y = "Nº de solicitações", color = "Categoria") +
theme_minimal(base_size = 12)
ggplotly(g_saz)Tabela cruzada interativa
Explore livremente o cruzamento tipo × período, com busca e ordenação.
cruz <- dados %>%
filter(!is.na(tipo)) %>%
count(tipo, periodo) %>%
pivot_wider(names_from = periodo, values_from = n, values_fill = 0) %>%
mutate(Total = Madrugada + Manhã + Tarde + Noite) %>%
arrange(desc(Total))
datatable(cruz, rownames = FALSE,
options = list(pageLength = 10, dom = 'tip'),
caption = "Solicitações por categoria clínica e período do dia") %>%
formatStyle("Total", fontWeight = "bold")Amostra explorável da base
A base completa tem mais de 127 mil linhas — exibir tudo seria impraticável. Abaixo, uma amostra aleatória de 500 registros da base limpa, com busca, filtro e ordenação:
set.seed(42)
dados %>%
sample_n(500) %>%
select(Data = data, Hora = hora_minuto, Município = municipio, Bairro = bairro,
Tipo = tipo, Subtipo = subtipo, Sexo = sexo, Idade = idade,
Período = periodo, Desfecho = motivo_desfecho) %>%
datatable(rownames = FALSE, filter = "top",
options = list(pageLength = 10, scrollX = TRUE,
language = list(search = "Buscar:")))Conclusões
O problema, revisitado
Partimos da pergunta de como a demanda por atendimento pré-hospitalar se distribui ao longo de 2025 em Pernambuco. A base de 127 mil chamados em oito meses permitiu mapear esse comportamento em cinco dimensões: tempo, espaço, natureza clínica, perfil do paciente e desfecho operacional.
Como abordamos
Importamos uma base pública real, tratamos suas imperfeições (136 duplicatas, idades absurdas de até 858 anos, milhares de ausências em sexo e idade) e criamos variáveis derivadas — mês, dia da semana, período, faixa etária e, sobretudo, um indicador de êxito operacional que abriu a análise mais reveladora.
Principais descobertas
- Demanda alta e constante: 15–16 mil chamados/mês, sem alívio sazonal expressivo — o serviço opera sob pressão o ano todo, com leve concentração em fins de semana e pico no fim de tarde.
- Concentração geográfica extrema: Recife responde por quase 40% dos chamados; a Região Metropolitana absorve a esmagadora maioria.
- Perfil bimodal: homens adultos jovens (causas externas) e idosos (agravos clínicos) são os grupos mais atendidos.
- Descoberta central: categorias psiquiátricas (~21%) e de drogas (~25%) têm taxa de conclusão com êxito muito baixa, pois terminam em desistência ou recusa — consumindo capacidade operacional sem atendimento efetivo, ao contrário de oncológicas e respiratórias (>50%).
Implicações para os clientes da análise
Para gestores e centrais de regulação, os achados sugerem: (a) escala dimensionada por dia da semana e hora, reforçando fins de semana e o fim de tarde; (b) posicionamento preferencial de viaturas na RMR, sobretudo Recife; e (c) protocolos de regulação específicos para chamados psiquiátricos e de álcool/drogas, reduzindo deslocamentos que não resultam em remoção.
Limitações
A base cobre apenas jan–ago de 2025, impedindo
conclusões sobre o ano completo (faltam os meses de festas de fim de
ano). Campos como motivo_finalizacao têm ~68% de ausência,
e a idade não informada (~13%) limita parte das análises demográficas.
Os dados são autodeclarados na central, sujeitos a erro de
preenchimento.
Trabalhos futuros
Estender a análise a uma série anual completa e a múltiplos anos permitiria isolar sazonalidades (Carnaval, São João, Réveillon) e construir um modelo preditivo de demanda por região e horário. Cruzar com dados de população e malha viária possibilitaria um índice de risco georreferenciado para alocação dinâmica de ambulâncias.
Referências
- Portal de Dados Abertos de Pernambuco — Solicitações de Atendimento (2025). Disponível em: http://dados.pe.gov.br/
- Wickham, H. et al. (2024). R for Data Science. O’Reilly.
- R Core Team (2025). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing.
- Xie, Y. (2024). Dynamic Documents with R and knitr.
- Barré-Sinoussi, J. rmdformats: templates de documentos R Markdown. Disponível em: https://github.com/juba/rmdformats