|
import colorsys |
|
from datetime import datetime |
|
|
|
import pandas as pd |
|
import plotly.express as px |
|
import plotly.graph_objects as go |
|
import pyperclip |
|
import streamlit as st |
|
from plotly.subplots import make_subplots |
|
from streamlit_extras.add_vertical_space import add_vertical_space |
|
from streamlit_extras.stylable_container import stylable_container |
|
from streamlit_option_menu import option_menu |
|
import streamlit.components.v1 as components |
|
|
|
|
|
|
|
st.set_page_config( |
|
page_title="Transtornos de Ansiedade - Guia Médico", |
|
layout="wide", |
|
page_icon=":brain:", |
|
initial_sidebar_state="expanded", |
|
) |
|
@st.fragment |
|
def apply_neumorphic_style(): |
|
""" |
|
Aplica estilos CSS para criar um tema neumórfico light na aplicação Streamlit. |
|
Inclui estilos para elementos gerais, sidebar, sliders, e outros componentes específicos. |
|
""" |
|
st.html( |
|
""" |
|
<style> |
|
/* Estilo geral neumórfico */ |
|
.neuromorphic { |
|
background: #f0f0f0; |
|
border-radius: 50px; |
|
box-shadow: 20px 20px 60px #cccccc, |
|
-20px -20px 60px #ffffff; |
|
padding: 20px; |
|
margin: 10px; |
|
} |
|
.stMetric { |
|
background: #ffffff; |
|
border-radius: 20px; |
|
box-shadow: inset 5px 5px 10px #d9d9d9, |
|
inset -5px -5px 10px #ffffff; |
|
padding: 10px; |
|
} |
|
.stApp { |
|
background-color: #e0e5ec; |
|
} |
|
.stButton>button { |
|
color: #5a5a5a; |
|
border-radius: 10px; |
|
border: none; |
|
padding: 10px 20px; |
|
font-weight: bold; |
|
box-shadow: 5px 5px 10px #b8b9be, -5px -5px 10px #ffffff; |
|
} |
|
|
|
/* Estilo para a sidebar neumórfica */ |
|
.neuromorphic-sidebar { |
|
background: #f0f0f0; |
|
border-radius: 20px; |
|
box-shadow: 5px 5px 10px #cccccc, |
|
-5px -5px 10px #ffffff; |
|
padding: 20px; |
|
margin: 10px; |
|
} |
|
.neuromorphic-sidebar .nav-link { |
|
background: #f0f0f0; |
|
border-radius: 10px; |
|
box-shadow: 3px 3px 6px #cccccc, |
|
-3px -3px 6px #ffffff; |
|
margin-bottom: 10px; |
|
transition: all 0.3s ease; |
|
} |
|
.neuromorphic-sidebar .nav-link:hover, |
|
.neuromorphic-sidebar .nav-link.active { |
|
background: #e0e0e0; |
|
box-shadow: inset 3px 3px 6px #cccccc, |
|
inset -3px -3px 6px #ffffff; |
|
} |
|
.neuromorphic-sidebar .nav-link-text { |
|
font-weight: 500; |
|
} |
|
|
|
/* Estilos adicionais para sliders e containers */ |
|
.slider-container { |
|
background: #81D0F9; |
|
border-radius: 10px; |
|
padding: 10px; |
|
margin-bottom: 10px; |
|
} |
|
.slider-cont { |
|
background: #8CCE90; |
|
border-radius: 10px; |
|
padding: 8px; |
|
margin-bottom: 8px; |
|
} |
|
.stSlider { |
|
padding-top: 1rem; |
|
padding-bottom: 1rem; |
|
} |
|
.vertical-line { |
|
border-left: 1px solid #cccccc; |
|
height: 100%; |
|
position: absolute; |
|
left: 50%; |
|
} |
|
|
|
/* Estilo para imagens */ |
|
img { |
|
width: 400px; |
|
height: 200px; |
|
overflow: hidden; |
|
position: relative; |
|
object-fit: cover; |
|
border-radius: 18px; |
|
mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); |
|
-webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); |
|
} |
|
</style> |
|
""" |
|
) |
|
|
|
|
|
apply_neumorphic_style() |
|
|
|
def copy_to_clipboard(text): |
|
|
|
copy_button = components.html( |
|
f""" |
|
<button onclick="copyToClipboard()">Copiar</button> |
|
<p id="copyStatus"></p> |
|
|
|
<script> |
|
function copyToClipboard() {{ |
|
const text = {text!r}; |
|
navigator.clipboard.writeText(text).then(function() {{ |
|
document.getElementById("copyStatus").textContent = "Copiado com sucesso!"; |
|
setTimeout(() => document.getElementById("copyStatus").textContent = "", 2000); |
|
}}).catch(function(err) {{ |
|
document.getElementById("copyStatus").textContent = "Erro ao copiar: " + err; |
|
}}); |
|
}} |
|
</script> |
|
""", |
|
height=70 |
|
) |
|
|
|
|
|
|
|
with st.sidebar: |
|
st.markdown('<div class="neuromorphic-sidebar">', unsafe_allow_html=True) |
|
selected = option_menu( |
|
menu_title="Menu Principal", |
|
options=[ |
|
"Home", |
|
"Escalas de Ansiedade", |
|
"Tratamentos", |
|
"Efeitos Colaterais", |
|
"Chatbot Dr. Karl", |
|
"Mapas Mentais", |
|
], |
|
icons=[ |
|
"house", |
|
"clipboard-check", |
|
"capsule", |
|
"exclamation-triangle", |
|
"chat-dots", |
|
"map", |
|
], |
|
menu_icon="cast", |
|
default_index=0, |
|
styles={ |
|
"container": {"padding": "0!important", "background-color": "transparent"}, |
|
"icon": {"color": "#0066cc", "font-size": "18px"}, |
|
"nav-link": { |
|
"font-size": "16px", |
|
"text-align": "left", |
|
"margin": "0px", |
|
"--hover-color": "#e0e0e0", |
|
}, |
|
"nav-link-selected": {"background-color": "#e0e0e0"}, |
|
}, |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
if selected == "Home": |
|
st.title("Transtornos de Ansiedade - Dashboard") |
|
|
|
@st.fragment |
|
def prevalencia(): |
|
""" |
|
Função para calcular a prevalência de transtornos psiquiátricos |
|
Gráfico de barras com a prevalência global, feminina e masculina |
|
Estatísticas chave com a prevalência global, custo anual global e idade média de início |
|
Informações adicionais sobre os transtornos psiquiátricos |
|
""" |
|
|
|
prevalence_data = { |
|
"Transtorno": ["TAG", "Pânico", "Fobia Social", "TOC", "TEPT"], |
|
"Prevalência Global (%)": [3.1, 2.7, 6.8, 1.2, 3.6], |
|
"Prevalência Mulheres (%)": [4.2, 3.5, 8.2, 1.4, 5.3], |
|
"Prevalência Homens (%)": [2.0, 1.8, 5.3, 1.0, 1.9], |
|
} |
|
|
|
|
|
fig = go.Figure() |
|
|
|
|
|
fig.add_trace( |
|
go.Bar( |
|
x=prevalence_data["Transtorno"], |
|
y=prevalence_data["Prevalência Global (%)"], |
|
name="Prevalência Global", |
|
marker_color="rgba(54, 162, 235, 0.8)", |
|
hoverinfo="text", |
|
text=[f"{x}%" for x in prevalence_data["Prevalência Global (%)"]], |
|
textposition="auto", |
|
) |
|
) |
|
|
|
fig.add_trace( |
|
go.Bar( |
|
x=prevalence_data["Transtorno"], |
|
y=prevalence_data["Prevalência Mulheres (%)"], |
|
name="Prevalência Mulheres", |
|
marker_color="rgba(255, 99, 132, 0.8)", |
|
hoverinfo="text", |
|
text=[f"{x}%" for x in prevalence_data["Prevalência Mulheres (%)"]], |
|
textposition="auto", |
|
) |
|
) |
|
|
|
fig.add_trace( |
|
go.Bar( |
|
x=prevalence_data["Transtorno"], |
|
y=prevalence_data["Prevalência Homens (%)"], |
|
name="Prevalência Homens", |
|
marker_color="rgba(75, 192, 192, 0.8)", |
|
hoverinfo="text", |
|
text=[f"{x}%" for x in prevalence_data["Prevalência Homens (%)"]], |
|
textposition="auto", |
|
) |
|
) |
|
|
|
|
|
fig.update_layout( |
|
title={ |
|
"text": "Prevalência de Transtornos Psiquiátricos", |
|
"y": 0.95, |
|
"x": 0.5, |
|
"xanchor": "center", |
|
"yanchor": "top", |
|
}, |
|
barmode="group", |
|
template="plotly_white", |
|
xaxis_title="Transtorno", |
|
yaxis_title="Prevalência (%)", |
|
legend_title="Categorias", |
|
font=dict(family="Arial", size=12), |
|
margin=dict(l=50, r=50, t=80, b=50), |
|
width=900, |
|
height=600, |
|
paper_bgcolor="#f0f0f0", |
|
plot_bgcolor="#f0f0f0", |
|
shapes=[ |
|
dict( |
|
type="rect", |
|
xref="paper", |
|
yref="paper", |
|
x0=0, |
|
y0=0, |
|
x1=1, |
|
y1=1, |
|
line=dict(color="#e0e0e0", width=2), |
|
fillcolor="#f0f0f0", |
|
layer="below", |
|
) |
|
], |
|
) |
|
|
|
|
|
fig.update_layout( |
|
shapes=[ |
|
dict( |
|
type="rect", |
|
xref="paper", |
|
yref="paper", |
|
x0=-0.05, |
|
y0=-0.05, |
|
x1=1.05, |
|
y1=1.05, |
|
line=dict(color="#ffffff", width=5), |
|
fillcolor="rgba(255,255,255,0)", |
|
layer="below", |
|
), |
|
dict( |
|
type="rect", |
|
xref="paper", |
|
yref="paper", |
|
x0=-0.05, |
|
y0=-0.05, |
|
x1=1.05, |
|
y1=1.05, |
|
line=dict(color="#d0d0d0", width=5), |
|
fillcolor="rgba(255,255,255,0)", |
|
layer="below", |
|
), |
|
] |
|
) |
|
|
|
fig.update_traces( |
|
hovertemplate="<b>%{x}</b><br>%{y}%<extra></extra>", |
|
hoverlabel=dict(bgcolor="white", font_size=12), |
|
) |
|
return st.plotly_chart(fig) |
|
|
|
c1, c2, c3 = st.columns([3, 0.5, 3]) |
|
with c1: |
|
prevalencia() |
|
with c2: |
|
st.write("") |
|
with c3: |
|
|
|
st.markdown("<div class='neuromorphic'>", unsafe_allow_html=True) |
|
col1, col2, col3 = st.columns(3) |
|
with col1: |
|
st.metric( |
|
label="Prevalência Global", |
|
value="3.8%", |
|
delta="0.2%", |
|
delta_color="normal", |
|
) |
|
with col2: |
|
st.metric(label="Custo Anual Global", value="$1 Trilhão", delta="-") |
|
with col3: |
|
st.metric(label="Idade Média de Início", value="21-35 anos", delta="-") |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
st.write("") |
|
|
|
|
|
st.markdown( |
|
""" |
|
<div class='neuromorphic'> |
|
<h3>Informações Adicionais:</h3> |
|
<ul> |
|
<li>Os transtornos de ansiedade afetam cerca de 301 milhões de pessoas globalmente.</li> |
|
<li>A fobia social é o transtorno de ansiedade mais comum, com prevalência global de 6.8%.</li> |
|
<li>Mulheres têm maior prevalência de transtornos de ansiedade comparado aos homens.</li> |
|
<li>A prevalência varia significativamente entre diferentes regiões e países.</li> |
|
</ul> |
|
</div> |
|
""", |
|
unsafe_allow_html=True, |
|
) |
|
|
|
|
|
st.info( |
|
""" |
|
Fonte: |
|
Javaid, S.F., Hashim, I.J., Hashim, M.J. et al. Epidemiology of anxiety disorders: global burden and sociodemographic |
|
associations.Middle East Curr Psychiatry 30, 44 (2023). |
|
Acesse: https://doi.org/10.1186/s43045-023-00315-3""" |
|
) |
|
|
|
|
|
|
|
if selected == "Escalas de Ansiedade": |
|
|
|
st.title("Escalas de Avaliação de Ansiedade") |
|
|
|
scale_selected = option_menu( |
|
menu_title=None, |
|
options=["Escala de Hamilton (HAM-A)", "Escala GAD-7", "Inventário de Beck (BAI)"], |
|
icons=["clipboard-check", "list-check", "clipboard-pulse"], |
|
menu_icon="cast", |
|
default_index=0, |
|
orientation="horizontal", |
|
styles={ |
|
"container": {"padding": "0!important", "background-color": "transparent"}, |
|
"icon": {"color": "#0066cc", "font-size": "18px"}, |
|
"nav-link": { |
|
"font-size": "16px", |
|
"text-align": "center", |
|
"margin": "0px", |
|
"--hover-color": "#e0e0e0", |
|
}, |
|
"nav-link-selected": {"background-color": "#e0e0e0"}, |
|
}, |
|
) |
|
|
|
if scale_selected == "Escala de Hamilton (HAM-A)": |
|
st.title(":blue[Guia de Diagnóstico Interativo] :stethoscope:") |
|
st.write("##### :notebook: Escala de Ansiedade de Hamilton (HAM-A)") |
|
|
|
st.divider() |
|
add_vertical_space(2) |
|
|
|
col1, col_divider, col2 = st.columns([3, 0.5, 3]) |
|
|
|
with col1: |
|
st.write("Intensidade dos sintomas nas últimas semanas :calendar:") |
|
|
|
cx1, cx2 = st.columns(2) |
|
with cx1: |
|
nome = st.text_input("Nome da Pessoa:") |
|
with cx2: |
|
data = st.date_input("Data:", datetime.now(), format="DD/MM/YYYY") |
|
|
|
|
|
ham_a_items = [ |
|
"Humor ansioso", |
|
"Tensão", |
|
"Medos", |
|
"Insônia", |
|
"Dificuldades intelectuais", |
|
"Humor deprimido", |
|
"Sintomas somáticos gerais (musculares)", |
|
"Sintomas somáticos gerais (sensoriais)", |
|
"Sintomas cardiovasculares", |
|
"Sintomas respiratórios", |
|
"Sintomas gastrointestinais", |
|
"Sintomas gênito-urinários", |
|
"Sintomas autonômicos", |
|
"Comportamento na entrevista", |
|
] |
|
|
|
add_vertical_space(2) |
|
st.divider() |
|
|
|
|
|
responses = {} |
|
|
|
subcol1, subcol2 = st.columns(2) |
|
for i, item in enumerate(ham_a_items): |
|
with subcol1 if i % 2 == 0 else subcol2: |
|
st.markdown('<div class="slider-container">', unsafe_allow_html=True) |
|
responses[item] = st.select_slider( |
|
item, |
|
options=["Ausente", "Leve", "Moderado", "Grave", "Muito grave"], |
|
value="Ausente", |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
with col_divider: |
|
st.markdown('') |
|
|
|
with col2: |
|
|
|
st.image("psiq1.jpg") |
|
st.subheader("Resultado") |
|
|
|
|
|
if st.button( |
|
"Calcular Resultado", |
|
key="ham_calculate_button", |
|
help="Clique para calcular o resultado", |
|
): |
|
|
|
score_map = { |
|
"Ausente": 0, |
|
"Leve": 1, |
|
"Moderado": 2, |
|
"Grave": 3, |
|
"Muito grave": 4, |
|
} |
|
total_score = sum(score_map[resp] for resp in responses.values()) |
|
|
|
|
|
if total_score < 17: |
|
severity = "Ansiedade leve" |
|
elif 18 <= total_score <= 24: |
|
severity = "Ansiedade moderada" |
|
elif 25 <= total_score <= 30: |
|
severity = "Ansiedade grave" |
|
else: |
|
severity = "Ansiedade muito grave" |
|
|
|
|
|
st.success(f"Pontuação total: {total_score}") |
|
st.info(f"Interpretação: {severity}") |
|
|
|
result_ham = {} |
|
|
|
result_ham = ( |
|
f"Nome da Pessoa: {nome}\n" |
|
f"Data: {data.strftime('%d/%m/%Y')}\n" |
|
f"Escala de Ansiedade de Hamilton (HAM-A)\n" |
|
f"Pontuação total: {total_score}\n" |
|
f"Interpretação: {severity}" |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
if result_ham is not None: |
|
st.text_area("## Resultado detalhado:", value=result_ham, height=200, key="ham_result_text") |
|
copy_to_clipboard(result_ham) |
|
|
|
|
|
|
|
st.markdown('<div class="slider-cont">', unsafe_allow_html=True) |
|
with st.expander("Mais informações sobre a Escala de Ansiedade de Hamilton"): |
|
st.write( |
|
""" |
|
A Escala de Ansiedade de Hamilton (HAM-A) é uma das escalas de avaliação de ansiedade mais amplamente utilizadas em contextos clínicos e de pesquisa. Desenvolvida por Max Hamilton em 1959, ela avalia a gravidade dos sintomas de ansiedade. |
|
|
|
**Pontos importantes:** |
|
- A escala consiste em 14 itens, cada um avaliado de 0 (não presente) a 4 (muito grave). |
|
- A pontuação total varia de 0 a 56. |
|
- É particularmente útil para avaliar a gravidade do Transtorno de Ansiedade Generalizada (TAG). |
|
- A escala avalia tanto sintomas psíquicos quanto somáticos da ansiedade. |
|
|
|
**Limitações:** |
|
- Não é uma ferramenta diagnóstica, mas sim uma medida de gravidade. |
|
- Pode ser influenciada por sintomas depressivos coexistentes. |
|
- Requer treinamento para administração adequada em contextos clínicos. |
|
|
|
Sempre consulte um profissional de saúde mental para interpretação adequada dos resultados e diagnóstico. |
|
""" |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
st.warning( |
|
""" |
|
Nota:\n |
|
Esta escala é uma ferramenta de triagem e não substitui uma avaliação clínica completa.\n |
|
Um diagnóstico preciso requer avaliação por um profissional de saúde qualificado.""" |
|
) |
|
|
|
st.markdown('<div class="neuromorphic">', unsafe_allow_html=True) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
elif scale_selected == "Escala GAD-7": |
|
st.title(":blue[Escala GAD-7] :stethoscope:") |
|
|
|
st.divider() |
|
add_vertical_space(2) |
|
|
|
col1, col_divider, col2 = st.columns([3, 0.5, 3]) |
|
|
|
with col1: |
|
st.write("Intensidade dos sintomas nas últimas duas semanas :calendar:") |
|
|
|
cx1, cx2 = st.columns(2) |
|
with cx1: |
|
nome = st.text_input("Nome da Pessoa:", key="gad7_nome") |
|
with cx2: |
|
data = st.date_input("Data:", datetime.now(), format="DD/MM/YYYY", key="gad7_data") |
|
|
|
|
|
def gad7_calculate(responses): |
|
score = sum(responses.values()) |
|
if score < 5: |
|
severity = "Ansiedade mínima" |
|
elif 5 <= score < 10: |
|
severity = "Ansiedade leve" |
|
elif 10 <= score < 15: |
|
severity = "Ansiedade moderada" |
|
else: |
|
severity = "Ansiedade severa" |
|
return score, severity |
|
|
|
|
|
gad7_items = [ |
|
"Sentir-se nervoso, ansioso ou muito tenso", |
|
"Não ser capaz de impedir ou de controlar as preocupações", |
|
"Preocupar-se muito com diversas coisas", |
|
"Dificuldade para relaxar", |
|
"Ficar tão agitado que se torna difícil permanecer sentado", |
|
"Ficar facilmente aborrecido ou irritado", |
|
"Sentir medo como se algo terrível fosse acontecer" |
|
] |
|
|
|
add_vertical_space(2) |
|
st.divider() |
|
|
|
responses = {} |
|
|
|
subcol1, subcol2 = st.columns(2) |
|
for i, item in enumerate(gad7_items): |
|
with subcol1 if i % 2 == 0 else subcol2: |
|
st.markdown('<div class="slider-container">', unsafe_allow_html=True) |
|
responses[item] = st.select_slider( |
|
item, |
|
options=["Nenhuma vez", "Vários dias", "Mais da metade dos dias", "Quase todos os dias"], |
|
value="Nenhuma vez", |
|
key=f"gad7_{i}" |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
with col_divider: |
|
st.markdown('') |
|
|
|
with col2: |
|
st.image("psiq1.jpg") |
|
|
|
st.subheader("Resultado") |
|
|
|
|
|
if st.button( |
|
"Calcular Resultado", |
|
key="gad7_calculate_button", |
|
help="Clique para calcular o resultado", |
|
): |
|
score_map = {"Nenhuma vez": 0, "Vários dias": 1, "Mais da metade dos dias": 2, "Quase todos os dias": 3} |
|
numeric_responses = {k: score_map[v] for k, v in responses.items()} |
|
total_score, severity = gad7_calculate(numeric_responses) |
|
|
|
result_gad7 = {} |
|
|
|
result_gad7 = ( |
|
f"Nome: {nome}\n" |
|
f"Data: {data.strftime('%d/%m/%Y')}\n" |
|
f"Escala GAD-7\n" |
|
f"Pontuação total: {total_score}\n" |
|
f"Interpretação: {severity}" |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
if result_gad7 is not None: |
|
st.text_area("## Resultado detalhado:", value=result_gad7, height=200, key="gad7_result_text") |
|
copy_to_clipboard(result_gad7) |
|
|
|
|
|
st.markdown('<div class="slider-cont">', unsafe_allow_html=True) |
|
with st.expander("Mais informações sobre a Escala GAD-7"): |
|
st.write( |
|
""" |
|
A Escala de Transtorno de Ansiedade Generalizada (GAD-7) é um instrumento de triagem para ansiedade generalizada. Desenvolvida por Spitzer et al. em 2006, é amplamente utilizada na prática clínica e em pesquisas. |
|
|
|
**Pontos importantes:** |
|
- A escala consiste em 7 itens, cada um avaliado de 0 (não apresentou) a 3 (quase todos os dias). |
|
- A pontuação total varia de 0 a 21. |
|
- É uma ferramenta eficaz para avaliar a gravidade dos sintomas de ansiedade generalizada. |
|
- Pode ser usada para monitorar a resposta ao tratamento ao longo do tempo. |
|
|
|
**Interpretação dos resultados:** |
|
- 0-4: Ansiedade mínima |
|
- 5-9: Ansiedade leve |
|
- 10-14: Ansiedade moderada |
|
- 15-21: Ansiedade severa |
|
|
|
**Limitações:** |
|
|
|
- Ele deve ser usado como uma primeira etapa para identificar possíveis casos de transtorno de ansiedade generalizada. |
|
- Não é uma ferramenta diagnóstica definitiva, mas um instrumento de triagem. |
|
- A interpretação dos resultados deve ser feita em conjunto com uma avaliação clínica completa, para fornecer um diagnóstico preciso. |
|
- Sempre consulte um profissional de saúde mental para a interpretação adequada dos resultados e o planejamento do tratamento. |
|
""" |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
st.warning( |
|
""" |
|
Nota:\n |
|
Esta escala é uma ferramenta de triagem e não substitui uma avaliação clínica completa.\n |
|
Um diagnóstico preciso requer avaliação por um profissional de saúde qualificado.""" |
|
) |
|
|
|
st.markdown('<div class="neuromorphic">', unsafe_allow_html=True) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
elif scale_selected == "Inventário de Beck (BAI)": |
|
st.title(":blue[Inventário de Beck (BAI)] :stethoscope:") |
|
|
|
st.divider() |
|
add_vertical_space(2) |
|
|
|
col1, col_divider, col2 = st.columns([3, 0.5, 3]) |
|
|
|
with col1: |
|
st.write("Intensidade dos sintomas na última semana :calendar:") |
|
|
|
cx1, cx2 = st.columns(2) |
|
with cx1: |
|
nome = st.text_input("Nome da Pessoa:", key="bai_nome") |
|
with cx2: |
|
data = st.date_input("Data:", datetime.now(), format="DD/MM/YYYY", key="bai_data") |
|
|
|
|
|
def bai_calculate(responses): |
|
score = sum(responses.values()) |
|
if score <= 7: |
|
severity = "Ansiedade mínima" |
|
elif 8 <= score <= 15: |
|
severity = "Ansiedade leve" |
|
elif 16 <= score <= 25: |
|
severity = "Ansiedade moderada" |
|
else: |
|
severity = "Ansiedade grave" |
|
return score, severity |
|
|
|
bai_items = [ |
|
"Dormência ou formigamento", |
|
"Sensação de calor", |
|
"Tremores nas pernas", |
|
"Incapaz de relaxar", |
|
"Medo que aconteça o pior", |
|
"Atordoado ou tonto", |
|
"Palpitação ou aceleração do coração", |
|
"Sem equilíbrio", |
|
"Aterrorizado", |
|
"Nervoso", |
|
"Sensação de sufocação", |
|
"Tremores nas mãos", |
|
"Trêmulo", |
|
"Medo de perder o controle", |
|
"Dificuldade de respirar", |
|
"Medo de morrer", |
|
"Assustado", |
|
"Indigestão ou desconforto no abdômen", |
|
"Sensação de desmaio", |
|
"Rosto afogueado", |
|
"Suor (não devido ao calor)" |
|
] |
|
|
|
add_vertical_space(2) |
|
st.divider() |
|
|
|
|
|
responses = {} |
|
|
|
subcol1, subcol2 = st.columns(2) |
|
for i, item in enumerate(bai_items): |
|
with subcol1 if i % 2 == 0 else subcol2: |
|
st.markdown('<div class="slider-container">', unsafe_allow_html=True) |
|
responses[item] = st.select_slider( |
|
item, |
|
options=["Absolutamente não", "Levemente", "Moderadamente", "Gravemente"], |
|
value="Absolutamente não", |
|
key=f"bai_{i}" |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
with col_divider: |
|
st.markdown('') |
|
|
|
with col2: |
|
st.image("psiq1.jpg") |
|
st.subheader("Resultado") |
|
|
|
|
|
if st.button( |
|
"Calcular Resultado", |
|
key="bai_calculate_button", |
|
help="Clique para calcular o resultado", |
|
): |
|
score_map = {"Absolutamente não": 0, "Levemente": 1, "Moderadamente": 2, "Gravemente": 3} |
|
numeric_responses = {k: score_map[v] for k, v in responses.items()} |
|
total_score, severity = bai_calculate(numeric_responses) |
|
|
|
|
|
result_bai = {} |
|
|
|
result_bai = ( |
|
f"Nome: {nome}\n" |
|
f"Data: {data.strftime('%d/%m/%Y')}\n" |
|
f"Inventário de Ansiedade de Beck\n" |
|
f"Pontuação total: {total_score}\n" |
|
f"Interpretação: {severity}" |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
if result_bai is not None: |
|
st.text_area("## Resultado detalhado:", value=result_bai, height=200, key="bai_result_text") |
|
copy_to_clipboard(result_bai) |
|
|
|
|
|
st.markdown('<div class="slider-cont">', unsafe_allow_html=True) |
|
with st.expander("Mais informações sobre o Inventário de Ansiedade de Beck (BAI)"): |
|
st.write(""" |
|
O Inventário de Ansiedade de Beck (BAI) é uma escala de auto-relato amplamente |
|
utilizada para medir a severidade da ansiedade em adolescentes e adultos. |
|
Desenvolvido por Aaron T. Beck e colegas, o BAI foi publicado em 1988 e tem sido |
|
uma ferramenta valiosa tanto na avaliação clínica quanto na pesquisa. |
|
|
|
**Pontos importantes:** |
|
|
|
O BAI consiste em 21 itens, cada um descrevendo um sintoma comum de ansiedade. |
|
Cada item é avaliado em uma escala de 4 pontos, variando de 0 (não apresentou) |
|
a 3 (gravemente), de acordo com a intensidade dos sintomas nos últimos 7 dias. |
|
A pontuação total varia de 0 a 63, com resultados mais altos indicando maior |
|
severidade da ansiedade. |
|
|
|
Ele foi projetado para minimizar a sobreposição com sintomas depressivos, |
|
focando principalmente em sintomas fisiológicos da ansiedade. |
|
|
|
**Interpretação dos resultados:** |
|
|
|
- 0-7: Ansiedade mínima |
|
- 8-15: Ansiedade leve |
|
- 16-25: Ansiedade moderada |
|
- 26-63: Ansiedade grave |
|
|
|
**Aplicações:** |
|
|
|
Avaliação da severidade dos sintomas de ansiedade em contextos clínicos. |
|
Monitoramento da resposta ao tratamento ao longo do tempo. |
|
Ferramenta de triagem em pesquisas sobre ansiedade e saúde mental. |
|
|
|
**Limitações:** |
|
|
|
- Como todas as escalas de auto-relato, as respostas podem ser influenciadas pela subjetividade do respondente. |
|
|
|
- Não é um instrumento diagnóstico definitivo, mas sim uma medida da severidade dos sintomas. |
|
|
|
- Pode não capturar todos os aspectos da ansiedade, especialmente os cognitivos (como preocupações excessivas ou ruminativas). |
|
|
|
**Sempre consulte um profissional de saúde mental para uma interpretação adequada dos resultados e um diagnóstico preciso.** |
|
""" |
|
) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
st.warning( |
|
""" |
|
Nota:\n |
|
Este inventário é uma ferramenta de avaliação e não substitui uma avaliação clínica completa.\n |
|
Um diagnóstico preciso requer avaliação por um profissional de saúde qualificado.""" |
|
) |
|
|
|
st.markdown('<div class="neuromorphic">', unsafe_allow_html=True) |
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
|
|
|
|
|
|
|
|
|
elif selected == "Tratamentos": |
|
st.title("Opções de Tratamento Farmacológico") |
|
|
|
st.write("### ") |
|
|
|
|
|
treatments = { |
|
"ISRSs": { |
|
"Descrição": "Inibidores Seletivos da Recaptação de Serotonina. Primeira linha de tratamento para a maioria dos transtornos de ansiedade.", |
|
"Medicamentos": { |
|
"Sertralina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "200 mg/dia", |
|
"Meia-vida": "26 horas", |
|
}, |
|
"Escitalopram": { |
|
"Dose inicial": "10 mg/dia", |
|
"Dose máxima": "20 mg/dia", |
|
"Meia-vida": "27-32 horas", |
|
}, |
|
"Fluoxetina": { |
|
"Dose inicial": "10-20 mg/dia", |
|
"Dose máxima": "60 mg/dia", |
|
"Meia-vida": "1-4 dias (norfluoxetina: 7-15 dias)", |
|
}, |
|
"Fluvoxamina": { |
|
"Dose inicial": "50-100 mg/dia", |
|
"Dose máxima": "300 mg/dia", |
|
"Meia-vida": "9-28 horas", |
|
}, |
|
"Citalopram": { |
|
"Dose inicial": "10-20 mg/dia", |
|
"Dose máxima": "60 mg/dia", |
|
"Meia-vida": "35 horas", |
|
}, |
|
"Paroxetina": { |
|
"Dose inicial": "10-20 mg/dia", |
|
"Dose máxima": "60 mg/dia", |
|
"Meia-vida": "21 horas", |
|
}, |
|
"Vilazodona": { |
|
"Dose inicial": "10 mg/dia", |
|
"Dose máxima": "40 mg/dia", |
|
"Meia-vida": "25 horas", |
|
}, |
|
"Vortioxetina": { |
|
"Dose inicial": "10 mg/dia", |
|
"Dose máxima": "20 mg/dia", |
|
"Meia-vida": "66 horas", |
|
}, |
|
}, |
|
}, |
|
"IRSNs": { |
|
"Descrição": "Inibidores da Recaptação de Serotonina e Noradrenalina. Eficazes em casos resistentes aos ISRSs.", |
|
"Medicamentos": { |
|
"Venlafaxina": { |
|
"Dose inicial": "37,5-75 mg/dia", |
|
"Dose máxima": "225 mg/dia", |
|
"Meia-vida": "5 horas", |
|
}, |
|
"Desvenlafaxina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "200 mg/dia", |
|
"Meia-vida": "11 horas", |
|
}, |
|
"Duloxetina": { |
|
"Dose inicial": "30 mg/dia", |
|
"Dose máxima": "120 mg/dia", |
|
"Meia-vida": "12 horas", |
|
}, |
|
}, |
|
}, |
|
"Tricíclicos": { |
|
"Descrição": "Antidepressivos tricíclicos. Eficazes, mas com mais efeitos colaterais que ISRSs e IRSNs.", |
|
"Medicamentos": { |
|
"Amitriptilina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "300 mg/dia", |
|
"Meia-vida": "10-50 horas", |
|
}, |
|
"Nortriptilina": { |
|
"Dose inicial": "25 mg/dia", |
|
"Dose máxima": "150 mg/dia", |
|
"Meia-vida": "18-44 horas", |
|
}, |
|
"Imipramina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "300 mg/dia", |
|
"Meia-vida": "8-20 horas", |
|
}, |
|
"Desipramina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "300 mg/dia", |
|
"Meia-vida": "12-24 horas", |
|
}, |
|
"Clomipramina": { |
|
"Dose inicial": "25 mg/dia", |
|
"Dose máxima": "250 mg/dia", |
|
"Meia-vida": "19-37 horas", |
|
}, |
|
"Doxepina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "300 mg/dia", |
|
"Meia-vida": "8-24 horas", |
|
}, |
|
"Trimipramina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "300 mg/dia", |
|
"Meia-vida": "20-24 horas", |
|
}, |
|
"Protriptilina": { |
|
"Dose inicial": "10-20 mg/dia", |
|
"Dose máxima": "60 mg/dia", |
|
"Meia-vida": "67-89 horas", |
|
}, |
|
}, |
|
}, |
|
"Benzodiazepínicos": { |
|
"Descrição": "Uso de curto prazo devido ao risco de dependência. Eficazes para alívio rápido de sintomas.", |
|
"Medicamentos": { |
|
"Alprazolam": { |
|
"Dose inicial": "0.25-0.5 mg 2-3x/dia", |
|
"Dose máxima": "4 mg/dia", |
|
"Meia-vida": "6-27 horas", |
|
}, |
|
"Clonazepam": { |
|
"Dose inicial": "0.25 mg 2x/dia", |
|
"Dose máxima": "4 mg/dia", |
|
"Meia-vida": "18-50 horas", |
|
}, |
|
"Diazepam": { |
|
"Dose inicial": "2-10 mg 2-4x/dia", |
|
"Dose máxima": "40 mg/dia", |
|
"Meia-vida": "20-50 horas", |
|
}, |
|
"Lorazepam": { |
|
"Dose inicial": "1-3 mg 2-3x/dia", |
|
"Dose máxima": "10 mg/dia", |
|
"Meia-vida": "10-20 horas", |
|
}, |
|
"Bromazepam": { |
|
"Dose inicial": "1.5-3 mg 2-3x/dia", |
|
"Dose máxima": "6-12 mg/dia", |
|
"Meia-vida": "10-20 horas", |
|
}, |
|
"Clobazam": { |
|
"Dose inicial": "10 mg/dia", |
|
"Dose máxima": "30 mg/dia", |
|
"Meia-vida": "18-42 horas", |
|
}, |
|
"Temazepam": { |
|
"Dose inicial": "7.5-15 mg ao deitar", |
|
"Dose máxima": "30 mg/dia", |
|
"Meia-vida": "8-22 horas", |
|
}, |
|
"Triazolam": { |
|
"Dose inicial": "0.125-0.25 mg ao deitar", |
|
"Dose máxima": "0.5 mg/dia", |
|
"Meia-vida": "1.5-5.5 horas", |
|
}, |
|
"Midazolam": { |
|
"Dose inicial": "1-2 mg (pré-operatório)", |
|
"Dose máxima": "10 mg/dia", |
|
"Meia-vida": "1.5-2.5 horas", |
|
}, |
|
"Oxazepam": { |
|
"Dose inicial": "10-15 mg 3-4x/dia", |
|
"Dose máxima": "120 mg/dia", |
|
"Meia-vida": "5-15 horas", |
|
}, |
|
"Chlordiazepoxide": { |
|
"Dose inicial": "5-10 mg 3-4x/dia", |
|
"Dose máxima": "100 mg/dia", |
|
"Meia-vida": "5-30 horas", |
|
}, |
|
"Flurazepam": { |
|
"Dose inicial": "15-30 mg ao deitar", |
|
"Dose máxima": "30 mg/dia", |
|
"Meia-vida": "40-250 horas", |
|
}, |
|
}, |
|
}, |
|
"Outros": { |
|
"Descrição": "Medicamentos alternativos ou adjuvantes para tratamento de ansiedade.", |
|
"Medicamentos": { |
|
"Mirtazapina": { |
|
"Dose inicial": "15 mg/dia", |
|
"Dose máxima": "45 mg/dia", |
|
"Meia-vida": "20-40 horas", |
|
}, |
|
"Bupropiona": { |
|
"Dose inicial": "150 mg/dia", |
|
"Dose máxima": "450 mg/dia", |
|
"Meia-vida": "21 horas", |
|
}, |
|
"Trazodona": { |
|
"Dose inicial": "50 mg/dia", |
|
"Dose máxima": "400 mg/dia (ambulatorial) / 600 mg/dia (hospitalar)", |
|
"Meia-vida": "7-13 horas", |
|
}, |
|
"Buspirona": { |
|
"Dose inicial": "7.5 mg duas vezes ao dia", |
|
"Dose máxima": "60 mg/dia", |
|
"Meia-vida": "2-3 horas", |
|
}, |
|
"Hidroxizina": { |
|
"Dose inicial": "25-50 mg/dia", |
|
"Dose máxima": "400 mg/dia", |
|
"Meia-vida": "3-20 horas", |
|
}, |
|
"Pregabalina": { |
|
"Dose inicial": "150 mg/dia", |
|
"Dose máxima": "600 mg/dia", |
|
"Meia-vida": "6.3 horas", |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
|
|
|
|
def get_color(value, min_value, max_value): |
|
normalized = (value - min_value) / (max_value - min_value) if max_value > min_value else 0 |
|
hue = (1 - normalized) * 0.7 |
|
rgb = colorsys.hsv_to_rgb(hue, 0.8, 0.9) |
|
return f'rgb({int(rgb[0]*255)},{int(rgb[1]*255)},{int(rgb[2]*255)})' |
|
|
|
|
|
def extract_numeric_value(meia_vida_str): |
|
try: |
|
return float(meia_vida_str.split()[0].split("-")[0]) |
|
except (ValueError, IndexError): |
|
return None |
|
|
|
col1, col2, col3, col4, col5 = st.columns([1, 3, 0.5, 3, 1]) |
|
with col1: |
|
selected_class = st.selectbox( |
|
" :pill: Classe de medicamentos:", list(treatments.keys()) |
|
) |
|
|
|
with col2: |
|
if selected_class: |
|
st.subheader(selected_class) |
|
st.write(treatments[selected_class]["Descrição"]) |
|
|
|
with col3: |
|
st.write("") |
|
|
|
with col4: |
|
st.write("") |
|
|
|
|
|
|
|
|
|
|
|
data = [] |
|
for med, info in treatments[selected_class]["Medicamentos"].items(): |
|
row = [ |
|
med, |
|
info.get("Dose inicial", "N/A"), |
|
info.get("Dose máxima", "N/A"), |
|
info.get("Meia-vida", "N/A"), |
|
] |
|
data.append(row) |
|
|
|
columns = ["Medicamento", "Dose Inicial", "Dose Máxima", "Meia-vida"] |
|
|
|
cs1,cs2 = st.columns(2) |
|
with cs1: |
|
st.write( |
|
pd.DataFrame(data, columns=columns).to_html(index=False), unsafe_allow_html=True |
|
) |
|
|
|
with cs2: |
|
|
|
st.subheader("Considerações Especiais") |
|
|
|
cj1,cj2,cj3 = st.columns([1,1,1]) |
|
with cj1: |
|
with st.expander("Gestantes", expanded=False, icon="🤰"): |
|
st.info( |
|
"A American College of Obstetricians and Gynecologists (ACOG) recomenda ISRSs como primeira linha para ansiedade perinatal, com sertralina e escitalopram sendo opções preferenciais." |
|
) |
|
with cj2: |
|
with st.expander("Crianças e Adolescentes", expanded=False, icon="🧒"): |
|
st.info( |
|
"A American Academy of Child and Adolescent Psychiatry recomenda ISRSs como primeira linha para crianças e adolescentes." |
|
) |
|
with cj3: |
|
with st.expander("Idosos", expanded=False, icon="👴"): |
|
st.info( |
|
"A AGS recomenda ISRSs como primeira linha para ansiedade em idosos, com sertralina e escitalopram sendo opções preferenciais." |
|
) |
|
|
|
st.warning( |
|
"Essas dosagens são ajustadas com base na resposta clínica e tolerabilidade do paciente. O monitoramento contínuo é essencial para otimizar o tratamento e minimizar efeitos adversos." |
|
) |
|
|
|
|
|
|
|
|
|
st.subheader(f"Meia-vida dos {selected_class}") |
|
|
|
meia_vidas = {} |
|
for med, info in treatments[selected_class]["Medicamentos"].items(): |
|
meia_vida = info.get("Meia-vida", "N/A") |
|
if meia_vida != "N/A": |
|
meia_vida_num = extract_numeric_value(meia_vida) |
|
if meia_vida_num is not None: |
|
meia_vidas[med] = meia_vida_num |
|
|
|
if meia_vidas: |
|
medicamentos = list(meia_vidas.keys()) |
|
valores = list(meia_vidas.values()) |
|
min_valor = min(valores) |
|
max_valor = max(valores) |
|
cores = [get_color(valor, min_valor, max_valor) for valor in valores] |
|
|
|
fig = go.Figure() |
|
|
|
fig.add_trace( |
|
go.Bar( |
|
x=medicamentos, |
|
y=valores, |
|
marker_color=cores, |
|
text=[f"{valor:.2f}" for valor in valores], |
|
textposition='auto', |
|
) |
|
) |
|
|
|
fig.update_layout( |
|
title=f'Comparação da Meia-vida dos {selected_class}', |
|
plot_bgcolor='rgba(240,240,240,1)', |
|
paper_bgcolor='rgba(240,240,240,1)', |
|
font_color='#444', |
|
title_font_color='#444', |
|
height=600, |
|
margin=dict(t=100, b=50, l=50, r=50), |
|
xaxis=dict( |
|
title='Medicamento', |
|
tickangle=45, |
|
tickfont=dict(size=10), |
|
gridcolor='white' |
|
), |
|
yaxis=dict( |
|
title='Meia-vida (horas)', |
|
gridcolor='white' |
|
), |
|
) |
|
|
|
fig.update_traces( |
|
marker=dict( |
|
line=dict(width=0), |
|
color=cores, |
|
), |
|
hoverlabel=dict(bgcolor="white", font_size=12), |
|
) |
|
|
|
fig.update_layout( |
|
shapes=[ |
|
dict( |
|
type="rect", |
|
xref="paper", |
|
yref="paper", |
|
x0=0, |
|
y0=0, |
|
x1=1, |
|
y1=1, |
|
fillcolor="white", |
|
opacity=0.3, |
|
layer="below", |
|
line_width=0, |
|
), |
|
] |
|
) |
|
|
|
st.plotly_chart(fig, use_container_width=True) |
|
else: |
|
st.info(f"Dados de meia-vida não disponíveis para {selected_class}") |
|
|
|
st.info( |
|
"Nota: As meias-vidas apresentadas são valores aproximados e podem variar dependendo de fatores individuais." |
|
) |
|
|
|
elif selected == "Efeitos Colaterais": |
|
st.title("🧠 Efeitos Colaterais e Receptores Associados") |
|
add_vertical_space(3) |
|
cp1,cp2,cp3 = st.columns([1,1,1]) |
|
with cp1: |
|
st.image("ser.jpg") |
|
with cp2: |
|
st.image("nor.jpg") |
|
|
|
with cp3: |
|
st.image("dop.jpg") |
|
add_vertical_space(3) |
|
|
|
receptor_effects = { |
|
"Serotoninérgicos (5-HT)": { |
|
"Ícone": "😊", |
|
"Descrição": "Relacionados à modulação da serotonina, afetando humor, ansiedade e funções gastrointestinais.", |
|
"Efeitos": { |
|
"Náusea 🤢": { |
|
"Gravidade": "Leve a moderada", |
|
"Duração": "Geralmente transitória", |
|
"Manejo": "Tomar com alimentos, iniciar com doses baixas", |
|
}, |
|
"Disfunção sexual 💔": { |
|
"Gravidade": "Moderada a grave", |
|
"Duração": "Pode persistir durante o tratamento", |
|
"Manejo": "Ajuste de dose, troca de medicação, tratamento adjuvante", |
|
}, |
|
"Alterações de apetite 🍽️": { |
|
"Gravidade": "Leve a moderada", |
|
"Duração": "Variável", |
|
"Manejo": "Monitoramento do peso, orientação nutricional", |
|
}, |
|
}, |
|
}, |
|
"Noradrenérgicos (NA)": { |
|
"Ícone": "⚡", |
|
"Descrição": "Associados à modulação da noradrenalina, afetando atenção, vigília e pressão arterial.", |
|
"Efeitos": { |
|
"Boca seca 🏜️": { |
|
"Gravidade": "Leve", |
|
"Duração": "Persistente", |
|
"Manejo": "Hidratação frequente, goma de mascar sem açúcar", |
|
}, |
|
"Sudorese 💦": { |
|
"Gravidade": "Leve a moderada", |
|
"Duração": "Variável", |
|
"Manejo": "Roupas leves, antitranspirantes", |
|
}, |
|
"Tremor 🤕": { |
|
"Gravidade": "Leve", |
|
"Duração": "Geralmente transitória", |
|
"Manejo": "Redução da dose, se necessário", |
|
}, |
|
}, |
|
}, |
|
"Muscarínicos (M1)": { |
|
"Ícone": "🔍", |
|
"Descrição": "Relacionados à ação anticolinérgica, afetando secreções, motilidade intestinal e visão.", |
|
"Efeitos": { |
|
"Constipação 🚽": { |
|
"Gravidade": "Leve a moderada", |
|
"Duração": "Pode persistir", |
|
"Manejo": "Aumento da ingestão de fibras e líquidos", |
|
}, |
|
"Visão turva 👁️": { |
|
"Gravidade": "Leve", |
|
"Duração": "Geralmente transitória", |
|
"Manejo": "Avaliação oftalmológica se persistente", |
|
}, |
|
"Retenção urinária 🚱": { |
|
"Gravidade": "Moderada", |
|
"Duração": "Variável", |
|
"Manejo": "Ajuste de dose, monitoramento da função urinária", |
|
}, |
|
}, |
|
}, |
|
"Histamínicos (H1)": { |
|
"Ícone": "💤", |
|
"Descrição": "Associados à ação anti-histamínica, afetando o estado de alerta e o apetite.", |
|
"Efeitos": { |
|
"Sonolência 😴": { |
|
"Gravidade": "Moderada", |
|
"Duração": "Pode diminuir com o tempo", |
|
"Manejo": "Administração noturna, ajuste de dose", |
|
}, |
|
"Aumento de apetite 🍔": { |
|
"Gravidade": "Leve a moderada", |
|
"Duração": "Variável", |
|
"Manejo": "Monitoramento do peso, orientação nutricional", |
|
}, |
|
"Tontura 🌀": { |
|
"Gravidade": "Leve", |
|
"Duração": "Geralmente transitória", |
|
"Manejo": "Levantar-se lentamente, evitar mudanças bruscas de posição", |
|
}, |
|
}, |
|
}, |
|
"Dopaminérgicos (D2)": { |
|
"Ícone": "🎭", |
|
"Descrição": "Relacionados à modulação da dopamina, afetando movimento, cognição e secreção de prolactina.", |
|
"Efeitos": { |
|
"Aumento de prolactina 🥛": { |
|
"Gravidade": "Moderada", |
|
"Duração": "Persistente durante o uso", |
|
"Manejo": "Monitoramento dos níveis de prolactina, ajuste de dose", |
|
}, |
|
"Alterações motoras 🚶": { |
|
"Gravidade": "Moderada a grave", |
|
"Duração": "Pode ser persistente", |
|
"Manejo": "Ajuste de dose, troca de medicação", |
|
}, |
|
"Alterações cognitivas 🧠": { |
|
"Gravidade": "Leve a moderada", |
|
"Duração": "Variável", |
|
"Manejo": "Avaliação cognitiva, ajuste de dose", |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
|
|
col1, col2, col3 = st.columns([1, 3, 1]) |
|
with col1: |
|
selected_receptor = st.selectbox( |
|
"🔬 Selecione um receptor:", list(receptor_effects.keys()) |
|
) |
|
|
|
with col2: |
|
if selected_receptor: |
|
st.subheader(f"{receptor_effects[selected_receptor]['Ícone']} {selected_receptor}") |
|
st.write(receptor_effects[selected_receptor]["Descrição"]) |
|
|
|
|
|
data = [] |
|
for effect, info in receptor_effects[selected_receptor]["Efeitos"].items(): |
|
row = [ |
|
effect, |
|
info.get("Gravidade", "N/A"), |
|
info.get("Duração", "N/A"), |
|
info.get("Manejo", "N/A"), |
|
] |
|
data.append(row) |
|
|
|
columns = ["Efeito Colateral", "Gravidade", "Duração", "Manejo"] |
|
|
|
st.write( |
|
pd.DataFrame(data, columns=columns).to_html(index=False), unsafe_allow_html=True |
|
) |
|
add_vertical_space(3) |
|
|
|
|
|
st.subheader("📊 Comparação de Efeitos Colaterais entre Receptores") |
|
add_vertical_space(1) |
|
effect_options = list(set([effect for receptor in receptor_effects.values() for effect in receptor["Efeitos"].keys()])) |
|
selected_effects = st.multiselect("🔍 Selecione os efeitos colaterais para comparar:", effect_options) |
|
|
|
if selected_effects: |
|
comparison_data = [] |
|
for receptor, effects in receptor_effects.items(): |
|
for effect in selected_effects: |
|
comparison_data.append({ |
|
"Receptor": f"{effects['Ícone']} {receptor}", |
|
"Efeito Colateral": effect, |
|
"Presença": 1 if effect in effects["Efeitos"] else 0 |
|
}) |
|
|
|
fig = px.bar(comparison_data, x="Receptor", y="Presença", color="Efeito Colateral", |
|
title="Comparação de Efeitos Colaterais entre Receptores", |
|
barmode="group") |
|
st.plotly_chart(fig) |
|
|
|
|
|
st.subheader("⚠️ Considerações Especiais") |
|
add_vertical_space(2) |
|
col1, col2, col3 = st.columns(3) |
|
with col1: |
|
with st.expander("💊 Interações Medicamentosas", expanded=False): |
|
st.info( |
|
"Medicamentos que afetam os mesmos receptores podem potencializar efeitos colaterais. Por exemplo, combinar medicamentos serotoninérgicos pode aumentar o risco de síndrome serotoninérgica." |
|
) |
|
with col2: |
|
with st.expander("🛑 Descontinuação", expanded=False): |
|
st.info( |
|
"A descontinuação abrupta de medicamentos que afetam certos receptores (como serotoninérgicos) pode levar a sintomas de descontinuação. A redução gradual é geralmente recomendada." |
|
) |
|
with col3: |
|
with st.expander("👤 Variabilidade Individual", expanded=False): |
|
st.info( |
|
"A resposta aos medicamentos e a ocorrência de efeitos colaterais podem variar significativamente entre indivíduos devido a diferenças genéticas e outros fatores." |
|
) |
|
|
|
st.warning( |
|
"⚠️ Importante: A ocorrência e gravidade dos efeitos colaterais podem variar. Sempre consulte um médico para orientações específicas e manejo adequado dos efeitos colaterais." |
|
) |
|
|
|
elif selected == "Chatbot Dr. Karl": |
|
st.title("Chatbot Dr. Karl") |
|
|
|
st.write( |
|
"Bem-vindo ao Chatbot Dr. Karl, seu assistente virtual para dúvidas sobre transtornos de ansiedade." |
|
) |
|
|
|
|
|
user_input = st.text_input("Faça sua pergunta aqui:") |
|
|
|
if user_input: |
|
|
|
st.write( |
|
"Dr. Karl: Obrigado pela sua pergunta. Estou processando sua solicitação..." |
|
) |
|
|
|
st.write( |
|
"Dr. Karl: Esta é uma resposta de exemplo. A integração completa do chatbot será implementada posteriormente." |
|
) |
|
|
|
st.info( |
|
"Nota: O Chatbot Dr. Karl está em desenvolvimento. Por favor, consulte um profissional de saúde para orientações médicas específicas." |
|
) |
|
|
|
|
|
elif selected == "Mapas Mentais": |
|
st.title("🧠 Mapas Mentais Interativos") |
|
|
|
ans = 'https://www.mindomo.com/mindmap/sx-de-ax-medo-evitao-ou-alerta-7b7c0a68be8f492aada5e7370b09f5b1' |
|
farm = 'https://www.mindomo.com/mindmap/-isrs-inibidores-seletivos-da-recaptao-de-serotonina-fb9e42a9a7db438ca001f1fc1e7181be' |
|
sumula = 'https://www.mindomo.com/mindmap/smula-psicopatolgica-00738aa02ebc4d0da0e53b1551780293' |
|
|
|
st.markdown(""" |
|
<style> |
|
.big-font { |
|
font-size:20px !important; |
|
font-weight: bold; |
|
} |
|
.stRadio [role=radiogroup]{ |
|
flex-direction: row; |
|
align-items: flex-start; |
|
gap: 40px; |
|
} |
|
</style> |
|
""", unsafe_allow_html=True) |
|
|
|
st.markdown('<p class="big-font">Escolha um mapa mental para explorar:</p>', unsafe_allow_html=True) |
|
|
|
mapa_selecionado = st.radio( |
|
"Selecione um mapa mental:", |
|
["😰 Ansiedade", "💊 Farmacologia", "📚 Súmula Psicopatológica"], |
|
label_visibility='collapsed', |
|
horizontal=True, |
|
key="mapa_mental_radio" |
|
) |
|
|
|
|
|
st.markdown(""" |
|
- **Ansiedade**: Sx de Ax: Medo, Evitação ou Alerta |
|
- **Farmacologia**: ISRSs: Inibidores Seletivos da Recaptação de Serotonina |
|
- **Súmula Psicopatológica**: Visão geral da Psicopatologia |
|
""") |
|
|
|
|
|
@st.fragment |
|
def exibir_mapa(url): |
|
return components.iframe(url, height=900, width=1600) |
|
|
|
|
|
if mapa_selecionado == "😰 Ansiedade": |
|
mapa_url = ans |
|
mapa_titulo = "😰 Mapa Mental: Ansiedade" |
|
elif mapa_selecionado == "💊 Farmacologia": |
|
mapa_url = farm |
|
mapa_titulo = "💊 Mapa Mental: Farmacologia (ISRSs)" |
|
elif mapa_selecionado == "📚 Súmula Psicopatológica": |
|
mapa_url = sumula |
|
mapa_titulo = "📚 Mapa Mental: Súmula Psicopatológica" |
|
else: |
|
st.warning("⚠️ Por favor, selecione um mapa mental para visualizar.") |
|
st.stop() |
|
|
|
|
|
st.subheader(mapa_titulo) |
|
with st.expander("🔍 Clique para expandir/recolher o mapa", expanded=False): |
|
exibir_mapa(mapa_url) |
|
|
|
st.info("ℹ️ Dica: Clique com botão esquerdo do muse e arraste para mover o mapa, pressione CTRL e use a roda do mouse para dar zoom.") |
|
|
|
|
|
|
|
footer="""<style> |
|
a:link , a:visited{ |
|
color: blue; |
|
background-color: transparent; |
|
text-decoration: underline; |
|
} |
|
|
|
a:hover, a:active { |
|
color: red; |
|
background-color: transparent; |
|
text-decoration: underline; |
|
} |
|
|
|
.footer { |
|
position: fixed; |
|
left: 0; |
|
bottom: 0; |
|
width: 100%; |
|
background-color: white; |
|
color: black; |
|
text-align: center; |
|
} |
|
</style> |
|
<div class="footer"> |
|
<p>Desenvolvido por <a style='display: block; text-align: center;' href="https://dr-guilhermeapolinario.com/Dr.+Guilherme+Apolin%C3%A1rio" target="_blank">Dr. Guilherme Apolinário</a></p> |
|
</div> |
|
""" |
|
st.markdown(footer,unsafe_allow_html=True) |
|
|