import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
# Carregar dados
df = pd.read_csv('arq2_tratado.csv', sep=';', encoding='latin1', low_memory=False)
# =============================================================================
# NÍVEL 1: INTENSIDADE DO CUIDADO
# =============================================================================
def classificar_intensidade(row):
"""
Classifica o leito quanto à intensidade do cuidado.
Fundamentação:
- RDC ANVISA nº 7/2010: UTI Tipo I, II, III
- Portaria GM/MS nº 930/2012: UCI Neonatal
- Portaria GM/MS nº 2.809/2012: Longa Permanência
"""
co = row['co_leito']
tp = row['tp_leito']
ds = str(row['DS_CO_LEITO']).upper()
# ---------------------------------------------------------------------
# N1_01: INTENSIVO
# UTI Adulto, Pediátrica, Neonatal, Coronariana, Queimados
# ---------------------------------------------------------------------
LEITOS_UTI = [74, 75, 76, # UTI Adulto Tipo I, II, III
77, 78, 79, # UTI Pediátrica Tipo I, II, III
80, 81, 82, # UTI Neonatal Tipo I, II, III
83, # UTI de Queimados
85, 86] # UTI Coronariana Tipo II, III
if co in LEITOS_UTI:
return 'N1_01_INTENSIVO'
# ---------------------------------------------------------------------
# N1_02: SEMI-INTENSIVO
# UCI (Unidade de Cuidados Intermediários), Canguru, Suporte Ventilatório
# ---------------------------------------------------------------------
LEITOS_UCI = [65, # Unidade Intermediária Neonatal
92, # UCI Neonatal Convencional
93, # UCI Neonatal Canguru
94, # UCI Pediátrico
95, # UCI Adulto
96] # Suporte Ventilatório Pulmonar
if co in LEITOS_UCI:
return 'N1_02_SEMI_INTENSIVO'
# ---------------------------------------------------------------------
# N1_03: ALTA COMPLEXIDADE
# Transplante, Queimados (não UTI), Oncologia, Cardiologia cirúrgica
# ---------------------------------------------------------------------
LEITOS_ALTA = [67, # Transplante
71, # Intercorrência pós-transplante
90, 91, # Queimado Adulto/Pediátrico (cirúrgico)
88, 89] # Queimado Adulto/Pediátrico (clínico)
# Oncologia e Cardiologia cirúrgica
if co in LEITOS_ALTA:
return 'N1_03_ALTA_COMPLEXIDADE'
if tp == 1 and co in [2, 12]: # Cardiologia e Oncologia cirúrgica
return 'N1_03_ALTA_COMPLEXIDADE'
# ---------------------------------------------------------------------
# N1_05: BAIXA COMPLEXIDADE (verificar antes de média)
# Crônicos, Psiquiatria, Reabilitação, Hospital Dia, Saúde Mental
# ---------------------------------------------------------------------
LEITOS_BAIXA = [34, # Crônicos
47, # Psiquiatria
48, # Reabilitação
49, # Pneumologia Sanitária (tuberculose)
84, # Acolhimento Noturno
87, # Saúde Mental (clínico)
73] # Saúde Mental (hospital dia)
if co in LEITOS_BAIXA:
return 'N1_05_BAIXA_COMPLEXIDADE'
# Hospital Dia (exceto cirúrgico/diagnóstico)
if tp == 7 and co != 7:
return 'N1_05_BAIXA_COMPLEXIDADE'
# ---------------------------------------------------------------------
# N1_04: MÉDIA COMPLEXIDADE (default)
# Cirúrgico, Clínico agudo, Obstétrico, Pediátrico
# ---------------------------------------------------------------------
return 'N1_04_MEDIA_COMPLEXIDADE'
df['NIVEL_1_INTENSIDADE'] = df.apply(classificar_intensidade, axis=1)
# Resumo Nível 1
n1_resumo = df.groupby('NIVEL_1_INTENSIDADE').agg({
'cnes': 'count',
'qt_exist': 'sum'
}).rename(columns={'cnes': 'Registros', 'qt_exist': 'Leitos'})
n1_resumo['%'] = (n1_resumo['Leitos'] / n1_resumo['Leitos'].sum() * 100).round(2)
n1_resumo = n1_resumo.sort_values('Leitos', ascending=False)
print("NÍVEL 1: INTENSIDADE DO CUIDADO")
print("="*60)
n1_resumo