import gradio as gr
# ---- Funções de Cálculo ----
# Função para escala SPICT
def analisar_spict(respostas_spict):
spict_perguntas = [
"Internações hospitalares não programadas.",
"Capacidade funcional ruim ou em declínio (a pessoa passa na cama ou cadeira mais de 50% do dia).",
"Dependente de outros para cuidados pessoais devido a problemas físicos e/ou mentais (necessita maior suporte do cuidador).",
"Perda de peso significativa nos últimos 3-6 meses e/ou baixo índice de massa corporal.",
"Sintomas persistentes apesar do tratamento otimizado das condições de base.",
"A pessoa ou sua família solicita cuidados paliativos, interrupção ou limitação do tratamento ou um foco na qualidade de vida."
]
afirmativas = [p for p, r in zip(spict_perguntas, respostas_spict) if r == 1]
negativas = [p for p, r in zip(spict_perguntas, respostas_spict) if r == 0]
texto_afirmativas = "**Itens marcados como 'Sim':**
" + ("
".join(afirmativas) if afirmativas else "Nenhum")
texto_negativas = "
**Itens marcados como 'Não':**
" + ("
".join(negativas) if negativas else "Nenhum")
texto_final = (
f"{texto_afirmativas}{texto_negativas}
"
"**Recomendações SPICT:**
"
"Revisar o cuidado atual e planejar o cuidado para o futuro.
"
"- Reavaliar o tratamento atual e medicação para que o paciente receba o cuidado otimizado.
"
"- Considerar o encaminhamento para avaliação de um especialista se os sintomas ou necessidades forem complexos.
"
"- Acordar sobre objetivos do cuidado atual e futuro e planejar o cuidado com a pessoa e sua família.
"
"- Planejar com antecedência caso a pessoa esteja em risco de perda cognitiva.
"
"- Registrar em prontuário, comunicar e coordenar o plano geral de cuidados."
)
return texto_final
# Função para escala Zarit
def analisar_zarit(respostas_zarit):
zarit_score = sum(respostas_zarit)
if zarit_score <= 14:
classificacao = "Leve"
elif zarit_score <= 21:
classificacao = "Moderada"
else:
classificacao = "Grave"
texto_final = (
f"**Pontuação total:** {zarit_score}
"
f"**Classificação da sobrecarga:** {classificacao}
"
"**Sobre a Escala Zarit:**
"
"Tem por objetivo avaliar a sobrecarga dos cuidadores de idosos. Esta escala **não** deve ser realizada na presença do idoso.
"
"A cada afirmativa o cuidador indica a frequência (nunca, quase nunca, às vezes, frequentemente ou quase sempre).
"
"Não existem respostas certas ou erradas. O estresse dos cuidadores será indicado por altos escores."
)
return texto_final
# Função para escala NECPAL
def analisar_necpal(respostas_necpal):
# perguntas NECPAL para referência
# Índices para referência interna (0-based):
# 0 - Pergunta Surpresa
# 1 - Demanda / necessidade
# 2,3,4 - Indicadores clínicos gerais (declínio nutricional, funcional, cognitivo)
# 5 - Dependência grave
# 6 - Síndromes geriátricas (≥2 recorrentes ou persistentes)
# 7 - Sintomas persistentes (≥2 sintomas recorrentes ou persistentes)
# 8 - Sofrimento emocional ou transtorno adaptativo grave (DME≥9)
# 9 - Vulnerabilidade social grave
# 10 - Multi-morbilidade (≥2 doenças crônicas avançadas)
# 11 - Uso de recursos (mais que duas admissões urgentes em 6 meses)
# 12 - Indicadores específicos (câncer, DPOC, ICC, etc.)
sum_necpal = sum(respostas_necpal)
# Pergunta surpresa: se resposta = 1 => PS+ (não me surpreenderia)
ps = respostas_necpal[0]
ps_str = "PS+ (Não me surpreenderia se o paciente morresse no próximo ano)" if ps == 1 else "PS- (Me surpreenderia)"
necpal_str = "NECPAL+" if sum_necpal > 0 else "NECPAL-"
texto_final = (
f"**Classificação NECPAL:**
"
f"Pergunta Surpresa: {ps_str}
"
f"Parâmetros NECPAL: {necpal_str}
"
"Se PS+ e NECPAL+ => Propor codificação como Paciente com Cronicidade Avançada (PCA)."
)
return texto_final
def interface_geral(
# SPICT (6 questões, Sim/Não)
# Respostas: 0=Não, 1=Sim
s1, s2, s3, s4, s5, s6,
# Zarit (7 questões, escala 0-4, vamos somar +1 depois)
z1, z2, z3, z4, z5, z6, z7,
# NECPAL (13 questões, Sim/Não)
n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13
):
todos = [s1, s2, s3, s4, s5, s6,
z1, z2, z3, z4, z5, z6, z7,
n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13]
if any(v is None for v in todos):
return "Erro: Todas as questões devem ser preenchidas."
for v in todos:
if not isinstance(v, int):
return "Erro: Respostas inválidas. Verifique se todos os campos foram preenchidos corretamente."
# Análise SPICT (questões 1-6)
spict_respostas = [s1, s2, s3, s4, s5, s6]
resultado_spict = analisar_spict(spict_respostas)
# Análise Zarit (questões 7-13)
zarit_respostas = [z1+1, z2+1, z3+1, z4+1, z5+1, z6+1, z7+1]
resultado_zarit = analisar_zarit(zarit_respostas)
# Análise NECPAL (questões 14-26)
necpal_respostas = [n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13]
resultado_necpal = analisar_necpal(necpal_respostas)
resultado_final = (
"