drguilhermeapolinario commited on
Commit
35092b2
·
verified ·
1 Parent(s): 9948417

Update views/pdf_chat.py

Browse files
Files changed (1) hide show
  1. views/pdf_chat.py +295 -64
views/pdf_chat.py CHANGED
@@ -11,17 +11,15 @@ st.title("Utilidades")
11
  nested_menu = option_menu(
12
  menu_title=None,
13
  options=[
14
- "Incidências radiológicas", "RAG", "Geral"
15
  ],
16
- icons=['lungs', 'gear', 'envelope'],
17
  menu_icon="cast",
18
  default_index=0,
19
  orientation="horizontal",
20
  )
21
 
22
 
23
- st.markdown('Calculadoras')
24
-
25
 
26
  # Conteúdo das subpáginas
27
  if nested_menu == "Incidências radiológicas":
@@ -137,14 +135,14 @@ if nested_menu == "Incidências radiológicas":
137
  Feito com ❤️ e ☕ por **[Dr. Guilherme]**
138
  """)
139
 
140
- elif nested_menu == "RAG":
141
  import pathlib
142
 
143
  import streamlit as st
144
  import streamlit.components.v1 as components
145
  from streamlit_extras.add_vertical_space import add_vertical_space
146
 
147
- st.header("RAG")
148
 
149
  static_dir = pathlib.Path('static').absolute()
150
  html_with_js= ''
@@ -631,12 +629,11 @@ elif nested_menu == "RAG":
631
  with st.expander(label='Recomendações', expanded=False, icon="🔥"):
632
  st.markdown(recomendacoes, unsafe_allow_html=True)
633
 
634
- elif nested_menu == "Geral":
635
  import pandas as pd
636
  import streamlit as st
637
 
638
- st.header("Geral")
639
-
640
 
641
  STYLE = "static/style.css"
642
  with open(STYLE, "r", encoding="utf-8") as f:
@@ -686,7 +683,7 @@ elif nested_menu == "Geral":
686
  st.title("📊 Calculadora da Escala de Risco de Coelho e Savassi")
687
 
688
  # Criando colunas para organizar o layout
689
- col1, col2 = st.columns(2)
690
 
691
  # Fatores de risco
692
  fatores = [{
@@ -753,72 +750,306 @@ elif nested_menu == "Geral":
753
  min_value=1,
754
  value=1)
755
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
756
  # Botão para calcular o risco
757
  if st.button("Calcular Risco"):
758
- pontuacao_total = sum(fator["peso"] for fator in fatores
759
- if checkboxes[fator["id"]])
760
-
761
- # Cálculo do escore de cômodos por pessoa
762
- escore_comodo_pessoa = num_comodos / num_moradores
763
- if escore_comodo_pessoa < 1:
764
- pontuacao_total += 3
765
-
766
- # Determinação da classificação de risco
767
- if pontuacao_total <= 4:
768
- classificacao = "Risco Menor"
769
- classe_css = "risk-menor"
770
- icone = ""
771
- elif pontuacao_total <= 6:
772
- classificacao = "Risco Médio"
773
- classe_css = "risk-medio"
774
- icone = "⚠️"
775
- elif pontuacao_total <= 8:
776
- classificacao = "Risco Maior"
777
- classe_css = "risk-maior"
778
- icone = "🚨"
779
- else:
780
- classificacao = "Risco Máximo"
781
- classe_css = "risk-maximo"
782
- icone = "☠️"
 
 
 
 
 
 
 
 
 
 
 
 
 
783
 
784
  # Exibição do resultado
785
  st.markdown(f"""
786
  <div class='risk-result {classe_css}'>
787
- {icone} Classificação: {classificacao}<br>
788
- 📊 Pontuação: {pontuacao_total}<br>
789
- 🏠 Cômodos por pessoa: {escore_comodo_pessoa:.2f}
790
  </div>
791
  """,
792
  unsafe_allow_html=True)
793
 
794
  # Tabela de detalhes
795
  st.subheader("Detalhes da Pontuação")
796
- detalhes = []
797
- for fator in fatores:
798
- if checkboxes[fator["id"]]:
799
- detalhes.append({"Fator": fator["label"], "Peso": fator["peso"]})
800
- if escore_comodo_pessoa < 1:
801
- detalhes.append({"Fator": "🏠 Menos de 1 cômodo por pessoa", "Peso": 3})
802
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
  df_detalhes = pd.DataFrame(detalhes)
804
  st.table(df_detalhes)
805
 
806
- # Informações adicionais
807
- st.markdown("""
808
- ---
809
- ### Sobre a Escala de Risco de Coelho e Savassi
810
-
811
- A Escala de Risco de Coelho e Savassi é uma ferramenta utilizada na Atenção Primária à Saúde no Brasil para avaliar o risco familiar em territórios de saúde.
812
- Ela foi desenvolvida pelos médicos brasileiros Marcos Alencar Abaide Balbinotti Coelho e Maria Inês Ribeiro de Miranda Savassi.
813
-
814
- #### Como interpretar os resultados:
815
- - **Risco Menor (≤ 4 pontos)**: Acompanhamento de rotina
816
- - **Risco Médio (5-6 pontos)**: Acompanhamento programado
817
- - **Risco Maior (7-8 pontos)**: Acompanhamento prioritário
818
- - **Risco Máximo (≥ 9 pontos)**: Acompanhamento intensivo
819
-
820
- Esta calculadora é uma ferramenta de apoio e não substitui a avaliação profissional.
821
- """)
822
-
823
-
824
-
 
 
 
 
 
11
  nested_menu = option_menu(
12
  menu_title=None,
13
  options=[
14
+ "Incidências radiológicas", "Calculadora TFG", "Escala de Risco de Coelho e Savassi", "Escore de Risco Global (ERG)"
15
  ],
16
+ icons=['lungs', 'gear', 'envelope', 'heart'],
17
  menu_icon="cast",
18
  default_index=0,
19
  orientation="horizontal",
20
  )
21
 
22
 
 
 
23
 
24
  # Conteúdo das subpáginas
25
  if nested_menu == "Incidências radiológicas":
 
135
  Feito com ❤️ e ☕ por **[Dr. Guilherme]**
136
  """)
137
 
138
+ elif nested_menu == "Calculadora TFG":
139
  import pathlib
140
 
141
  import streamlit as st
142
  import streamlit.components.v1 as components
143
  from streamlit_extras.add_vertical_space import add_vertical_space
144
 
145
+ st.header("Calculadora TFG")
146
 
147
  static_dir = pathlib.Path('static').absolute()
148
  html_with_js= ''
 
629
  with st.expander(label='Recomendações', expanded=False, icon="🔥"):
630
  st.markdown(recomendacoes, unsafe_allow_html=True)
631
 
632
+ elif nested_menu == "Escala de Risco de Coelho e Savassi":
633
  import pandas as pd
634
  import streamlit as st
635
 
636
+ st.header("Escala de Risco de Coelho e Savassi")
 
637
 
638
  STYLE = "static/style.css"
639
  with open(STYLE, "r", encoding="utf-8") as f:
 
683
  st.title("📊 Calculadora da Escala de Risco de Coelho e Savassi")
684
 
685
  # Criando colunas para organizar o layout
686
+ col1, col2, col3 = st.columns(3)
687
 
688
  # Fatores de risco
689
  fatores = [{
 
750
  min_value=1,
751
  value=1)
752
 
753
+ # Botão para calcular o risco
754
+ if st.button("Calcular Risco", use_container_width=True, icon="🧮️" ):
755
+ pontuacao_total = sum(fator["peso"] for fator in fatores
756
+ if checkboxes[fator["id"]])
757
+
758
+ # Cálculo do escore de cômodos por pessoa
759
+ escore_comodo_pessoa = num_comodos / num_moradores
760
+ if escore_comodo_pessoa < 1:
761
+ pontuacao_total += 3
762
+
763
+ # Determinação da classificação de risco
764
+ if pontuacao_total <= 4:
765
+ classificacao = "Risco Menor"
766
+ classe_css = "risk-menor"
767
+ icone = "✅"
768
+ elif pontuacao_total <= 6:
769
+ classificacao = "Risco Médio"
770
+ classe_css = "risk-medio"
771
+ icone = "⚠️"
772
+ elif pontuacao_total <= 8:
773
+ classificacao = "Risco Maior"
774
+ classe_css = "risk-maior"
775
+ icone = "🚨"
776
+ else:
777
+ classificacao = "Risco Máximo"
778
+ classe_css = "risk-maximo"
779
+ icone = "☠️"
780
+
781
+ # Exibição do resultado
782
+ st.markdown(f"""
783
+ <div class='risk-result {classe_css}'>
784
+ {icone} Classificação: {classificacao}<br>
785
+ 📊 Pontuação: {pontuacao_total}<br>
786
+ 🏠 Cômodos por pessoa: {escore_comodo_pessoa:.2f}
787
+ </div>
788
+ """,
789
+ unsafe_allow_html=True)
790
+
791
+ st.subheader("Detalhes da Pontuação")
792
+ detalhes = []
793
+ for fator in fatores:
794
+ if checkboxes[fator["id"]]:
795
+ detalhes.append({"Fator": fator["label"], "Peso": fator["peso"]})
796
+ if escore_comodo_pessoa < 1:
797
+ detalhes.append({"Fator": "🏠 Menos de 1 cômodo por pessoa", "Peso": 3})
798
+
799
+ df_detalhes = pd.DataFrame(detalhes)
800
+ st.table(df_detalhes)
801
+
802
+
803
+ with col3, st.expander("Sobre a Escala de Risco de Coelho e Savassi", icon='❤️', expanded=False):
804
+ st.markdown("""
805
+ ---
806
+ ### Sobre a Escala de Risco de Coelho e Savassi
807
+
808
+ A Escala de Risco de Coelho e Savassi é uma ferramenta utilizada na Atenção Primária à Saúde no Brasil para avaliar o risco familiar em territórios de saúde.
809
+ Ela foi desenvolvida pelos médicos brasileiros Marcos Alencar Abaide Balbinotti Coelho e Maria Inês Ribeiro de Miranda Savassi.
810
+
811
+ #### Como interpretar os resultados:
812
+ - **Risco Menor (≤ 4 pontos)**: Acompanhamento de rotina
813
+ - **Risco Médio (5-6 pontos)**: Acompanhamento programado
814
+ - **Risco Maior (7-8 pontos)**: Acompanhamento prioritário
815
+ - **Risco Máximo (≥ 9 pontos)**: Acompanhamento intensivo
816
+
817
+ Esta calculadora é uma ferramenta de apoio e não substitui a avaliação profissional.
818
+ """)
819
+
820
+ elif nested_menu == "Escore de Risco Global (ERG)":
821
+ import streamlit as st
822
+ import pandas as pd
823
+ import numpy as np
824
+
825
+ # CSS personalizado
826
+ st.markdown("""
827
+ <style>
828
+ .stRadio > label {
829
+ font-weight: bold;
830
+ color: #4A4A4A;
831
+ }
832
+ .stButton > button {
833
+ width: 100%;
834
+ }
835
+ .risk-result {
836
+ font-size: 24px;
837
+ font-weight: bold;
838
+ padding: 10px;
839
+ border-radius: 5px;
840
+ margin-top: 20px;
841
+ text-align: center;
842
+ }
843
+ .risk-baixo {
844
+ background-color: #2ecc71;
845
+ color: white;
846
+ }
847
+ .risk-intermediario {
848
+ background-color: #f39c12;
849
+ color: white;
850
+ }
851
+ .risk-alto {
852
+ background-color: #e74c3c;
853
+ color: white;
854
+ }
855
+ .risk-muito-alto {
856
+ background-color: #c0392b;
857
+ color: white;
858
+ }
859
+ </style>
860
+ """,
861
+ unsafe_allow_html=True)
862
+
863
+ # Título
864
+ st.header("Escore de Risco Global (ERG)")
865
+ st.markdown("Recomendado pela Sociedade Brasileira de Cardiologia")
866
+
867
+ # Criando colunas para organizar o layout
868
+ col1, col2 = st.columns(2)
869
+
870
+ # Inputs
871
+ with col1:
872
+ st.subheader("Dados Pessoais")
873
+ sexo = st.radio("Sexo", ["Masculino", "Feminino"])
874
+ idade = st.number_input("Idade", min_value=30, max_value=74, value=45)
875
+ tabagismo = st.checkbox("Tabagismo")
876
+ diabetes = st.checkbox("Diabetes")
877
+
878
+ with col2:
879
+ st.subheader("Dados Clínicos")
880
+ colesterol_total = st.number_input("Colesterol Total (mg/dL)",
881
+ min_value=0,
882
+ value=200)
883
+ hdl = st.number_input("HDL Colesterol (mg/dL)", min_value=0, value=50)
884
+ pas = st.number_input("Pressão Arterial Sistólica (mmHg)",
885
+ min_value=0,
886
+ value=120)
887
+
888
+
889
+ # Função para calcular o ERG
890
+ def calcular_erg(sexo, idade, tabagismo, diabetes, colesterol_total, hdl, pas):
891
+ pontos = 0
892
+
893
+ # Idade
894
+ if sexo == "Masculino":
895
+ if idade < 35: pontos -= 1
896
+ elif 35 <= idade <= 39: pontos += 0
897
+ elif 40 <= idade <= 44: pontos += 1
898
+ elif 45 <= idade <= 49: pontos += 2
899
+ elif 50 <= idade <= 54: pontos += 3
900
+ elif 55 <= idade <= 59: pontos += 4
901
+ elif 60 <= idade <= 64: pontos += 5
902
+ elif 65 <= idade <= 69: pontos += 6
903
+ else: pontos += 7
904
+ else: # Feminino
905
+ if idade < 35: pontos -= 9
906
+ elif 35 <= idade <= 39: pontos -= 4
907
+ elif 40 <= idade <= 44: pontos += 0
908
+ elif 45 <= idade <= 49: pontos += 3
909
+ elif 50 <= idade <= 54: pontos += 6
910
+ elif 55 <= idade <= 59: pontos += 7
911
+ elif 60 <= idade <= 64: pontos += 8
912
+ elif 65 <= idade <= 69: pontos += 8
913
+ else: pontos += 8
914
+
915
+ # Colesterol Total
916
+ if sexo == "Masculino":
917
+ if colesterol_total < 160: pontos -= 3
918
+ elif 160 <= colesterol_total <= 199: pontos += 0
919
+ elif 200 <= colesterol_total <= 239: pontos += 1
920
+ elif 240 <= colesterol_total <= 279: pontos += 2
921
+ else: pontos += 3
922
+ else: # Feminino
923
+ if colesterol_total < 160: pontos -= 2
924
+ elif 160 <= colesterol_total <= 199: pontos += 0
925
+ elif 200 <= colesterol_total <= 239: pontos += 1
926
+ elif 240 <= colesterol_total <= 279: pontos += 1
927
+ else: pontos += 3
928
+
929
+ # HDL
930
+ if hdl < 40: pontos += 2
931
+ elif 40 <= hdl <= 49: pontos += 1
932
+ elif 50 <= hdl <= 59: pontos += 0
933
+ else: pontos -= 2
934
+
935
+ # Pressão Arterial Sistólica
936
+ if pas < 120: pontos += 0
937
+ elif 120 <= pas <= 129: pontos += 0
938
+ elif 130 <= pas <= 139: pontos += 1
939
+ elif 140 <= pas <= 159: pontos += 2
940
+ else: pontos += 3
941
+
942
+ # Diabetes
943
+ if diabetes:
944
+ if sexo == "Masculino": pontos += 2
945
+ else: pontos += 4
946
+
947
+ # Tabagismo
948
+ if tabagismo:
949
+ if sexo == "Masculino": pontos += 2
950
+ else: pontos += 2
951
+
952
+ return pontos
953
+
954
+
955
  # Botão para calcular o risco
956
  if st.button("Calcular Risco"):
957
+ pontos = calcular_erg(sexo, idade, tabagismo, diabetes, colesterol_total,
958
+ hdl, pas)
959
+
960
+ # Interpretação do risco
961
+ if sexo == "Masculino":
962
+ if pontos <= 5:
963
+ risco = "Baixo"
964
+ classe_css = "risk-baixo"
965
+ probabilidade = "< 5%"
966
+ elif 6 <= pontos <= 10:
967
+ risco = "Intermediário"
968
+ classe_css = "risk-intermediario"
969
+ probabilidade = "5 a 10%"
970
+ elif 11 <= pontos <= 14:
971
+ risco = "Alto"
972
+ classe_css = "risk-alto"
973
+ probabilidade = "10 a 20%"
974
+ else:
975
+ risco = "Muito Alto"
976
+ classe_css = "risk-muito-alto"
977
+ probabilidade = "> 20%"
978
+ else: # Feminino
979
+ if pontos <= 7:
980
+ risco = "Baixo"
981
+ classe_css = "risk-baixo"
982
+ probabilidade = "< 5%"
983
+ elif 8 <= pontos <= 12:
984
+ risco = "Intermediário"
985
+ classe_css = "risk-intermediario"
986
+ probabilidade = "5 a 10%"
987
+ elif 13 <= pontos <= 17:
988
+ risco = "Alto"
989
+ classe_css = "risk-alto"
990
+ probabilidade = "10 a 20%"
991
+ else:
992
+ risco = "Muito Alto"
993
+ classe_css = "risk-muito-alto"
994
+ probabilidade = "> 20%"
995
 
996
  # Exibição do resultado
997
  st.markdown(f"""
998
  <div class='risk-result {classe_css}'>
999
+ Risco Cardiovascular: {risco}<br>
1000
+ Pontuação: {pontos}<br>
1001
+ Probabilidade de evento cardiovascular em 10 anos: {probabilidade}
1002
  </div>
1003
  """,
1004
  unsafe_allow_html=True)
1005
 
1006
  # Tabela de detalhes
1007
  st.subheader("Detalhes da Pontuação")
1008
+ detalhes = [{
1009
+ "Fator": "Idade",
1010
+ "Valor": f"{idade} anos"
1011
+ }, {
1012
+ "Fator": "Sexo",
1013
+ "Valor": sexo
1014
+ }, {
1015
+ "Fator": "Colesterol Total",
1016
+ "Valor": f"{colesterol_total} mg/dL"
1017
+ }, {
1018
+ "Fator": "HDL Colesterol",
1019
+ "Valor": f"{hdl} mg/dL"
1020
+ }, {
1021
+ "Fator": "Pressão Arterial Sistólica",
1022
+ "Valor": f"{pas} mmHg"
1023
+ }, {
1024
+ "Fator": "Diabetes",
1025
+ "Valor": "Sim" if diabetes else "Não"
1026
+ }, {
1027
+ "Fator": "Tabagismo",
1028
+ "Valor": "Sim" if tabagismo else "Não"
1029
+ }]
1030
  df_detalhes = pd.DataFrame(detalhes)
1031
  st.table(df_detalhes)
1032
 
1033
+ with st.expander("Sobre o Escore de Risco Global (ERG)", icon='❤️', expanded=False):
1034
+ st.markdown("""
1035
+ ---
1036
+ ### Sobre o Escore de Risco Global (ERG)
1037
+
1038
+ O Escore de Risco Global (ERG) é a ferramenta principal recomendada pela Sociedade Brasileira de Cardiologia para avaliação do risco cardiovascular. Foi desenvolvido com base em dados da população brasileira e considera os seguintes fatores:
1039
+
1040
+ - Idade
1041
+ - Sexo
1042
+ - Tabagismo
1043
+ - Diabetes
1044
+ - Níveis de colesterol total e HDL
1045
+ - Pressão arterial sistólica
1046
+
1047
+ #### Como interpretar os resultados:
1048
+ - **Baixo Risco**: Probabilidade < 5% de eventos cardiovasculares em 10 anos
1049
+ - **Risco Intermediário**: Probabilidade de 5 a 10% de eventos cardiovasculares em 10 anos
1050
+ - **Alto Risco**: Probabilidade de 10 a 20% de eventos cardiovasculares em 10 anos
1051
+ - **Muito Alto Risco**: Probabilidade > 20% de eventos cardiovasculares em 10 anos
1052
+
1053
+ Esta calculadora é uma ferramenta de apoio e não substitui a avaliação profissional. Consulte sempre um médico para interpretação adequada dos resultados e recomendações personalizadas.
1054
+ """)
1055
+