Spaces:
Running
Running
Update views/rci.py
Browse files- views/rci.py +135 -96
views/rci.py
CHANGED
@@ -424,6 +424,32 @@ def create_word_doc(markdown_content):
|
|
424 |
# Retornar o objeto BytesIO contendo o documento Word
|
425 |
return docx_file
|
426 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
427 |
# Função para gerar a análise inicial
|
428 |
def generate_initial_analysis(resumo_rci):
|
429 |
"""
|
@@ -458,42 +484,67 @@ def generate_initial_analysis(resumo_rci):
|
|
458 |
{
|
459 |
"role": "user",
|
460 |
"content": f"""
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
492 |
},
|
493 |
],
|
494 |
model="llama3-70b-8192",
|
495 |
temperature=0.2,
|
496 |
-
max_tokens=
|
497 |
)
|
498 |
return initial_analysis.choices[0].message.content
|
499 |
except Exception as e:
|
@@ -528,77 +579,31 @@ col1, col2 = st.columns(2)
|
|
528 |
|
529 |
with col1:
|
530 |
with st.expander("Resumo Inicial", expanded=True):
|
531 |
-
if "initial_analysis" in st.session_state:
|
532 |
st.write("**Panorama Geral dos Dados:**")
|
533 |
markdown_content = st.session_state.initial_analysis
|
534 |
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
|
|
540 |
|
541 |
-
|
542 |
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
|
|
|
|
551 |
else:
|
552 |
st.write("**Clique em 'Gerar Resumo' para analisar os dados.**")
|
553 |
-
|
554 |
-
# with st.expander("Resumo Inicial", expanded=True):
|
555 |
-
# if "initial_analysis" in st.session_state:
|
556 |
-
# st.write("**Panorama Geral dos Dados:**")
|
557 |
-
# markdown_content = st.session_state.initial_analysis
|
558 |
-
|
559 |
-
# html_content = f'''
|
560 |
-
# <div style="height:600px; overflow-y: auto; padding: 10px; border: 1px solid #CCC;">
|
561 |
-
# {markdown_content}
|
562 |
-
# </div>
|
563 |
-
# '''
|
564 |
-
|
565 |
-
# st.markdown(html_content, unsafe_allow_html=True)
|
566 |
-
|
567 |
-
# # Botão para baixar o documento em formato Word
|
568 |
-
# docx_file = create_word_doc(markdown_content)
|
569 |
-
# st.download_button(
|
570 |
-
# label="Baixar em formato Word",
|
571 |
-
# data=docx_file,
|
572 |
-
# file_name="analise_inicial.docx",
|
573 |
-
# mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
574 |
-
# )
|
575 |
-
# else:
|
576 |
-
# st.write("**Clique em 'Gerar Resumo' para analisar os dados.**")
|
577 |
-
|
578 |
-
# if "initial_analysis" in st.session_state:
|
579 |
-
# st.write("**Panorama Geral dos Dados:**")
|
580 |
-
# markdown_content = st.session_state.initial_analysis
|
581 |
-
|
582 |
-
# html_content = f'''
|
583 |
-
# <div style="height:500px; overflow-y: auto; padding: 10px; border: 1px solid #CCC;">
|
584 |
-
# {markdown_content}
|
585 |
-
# </div>
|
586 |
-
# '''
|
587 |
-
|
588 |
-
# st.markdown(html_content, unsafe_allow_html=True)
|
589 |
-
# else:
|
590 |
-
# st.write("**Clique em 'Gerar Resumo' para analisar os dados.**")
|
591 |
-
|
592 |
-
# if "initial_analysis" in st.session_state:
|
593 |
-
# st.write("**Panorama Geral dos Dados:**")
|
594 |
-
# st.text_area(
|
595 |
-
# "Análise Inicial",
|
596 |
-
# value=st.session_state.initial_analysis,
|
597 |
-
# height=300,
|
598 |
-
# disabled=False,
|
599 |
-
# )
|
600 |
-
# else:
|
601 |
-
# st.write("**Clique em 'Gerar Resumo' para analisar os dados.**")
|
602 |
|
603 |
with col2:
|
604 |
with st.expander("Converse com o 🤖 Zé Flamengo", expanded=True):
|
@@ -704,3 +709,37 @@ with col2:
|
|
704 |
st.session_state.groq_chat_history = []
|
705 |
st.rerun()
|
706 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
424 |
# Retornar o objeto BytesIO contendo o documento Word
|
425 |
return docx_file
|
426 |
|
427 |
+
dados_contagem = """
|
428 |
+
Aqui estão os dados demográficos e socioeconômicos relevantes da cidade
|
429 |
+
de Contagem, Minas Gerais, com base no Censo 2022 e outras fontes oficiais:
|
430 |
+
|
431 |
+
- População total: 621.863 habitantes
|
432 |
+
- Densidade demográfica: 3.193,21 hab/km²
|
433 |
+
- Área territorial: 194,746 km²
|
434 |
+
- PIB per capita: R$ 54.136,41 (2021)
|
435 |
+
- 3º maior PIB de Minas Gerais
|
436 |
+
- Importante polo industrial da Região Metropolitana de Belo Horizonte
|
437 |
+
- Sede do CEASA-MG, o maior entreposto de hortifrutigranjeiros do Brasil
|
438 |
+
- 3ª cidade mais populosa de Minas Gerais
|
439 |
+
- 16ª cidade mais populosa da região Sudeste
|
440 |
+
- 33ª cidade mais populosa do Brasil
|
441 |
+
- Estimativa de população em idade escolar (4 a 17 anos): 22% do total
|
442 |
+
- Estimativa de idosos (60 anos ou mais): 14% do total
|
443 |
+
- Estimativa de distribuição por sexo: 52% mulheres, 48% homens
|
444 |
+
- Estimativa de distribuição racial: 50% pardos, 40% brancos, 9% pretos,
|
445 |
+
1% outros
|
446 |
+
- Estimativa de pessoas com pelo menos uma deficiência: 8% da população
|
447 |
+
- Estimativa de prevalência de doenças crônicas: 25% da população adulta
|
448 |
+
- Número estimado de unidades de saúde: 80
|
449 |
+
"""
|
450 |
+
|
451 |
+
|
452 |
+
|
453 |
# Função para gerar a análise inicial
|
454 |
def generate_initial_analysis(resumo_rci):
|
455 |
"""
|
|
|
484 |
{
|
485 |
"role": "user",
|
486 |
"content": f"""
|
487 |
+
Aqui estão os dados para análise:
|
488 |
+
<resumo_rci>
|
489 |
+
{resumo_rci}
|
490 |
+
</resumo_rci>
|
491 |
+
|
492 |
+
Analise cuidadosamente os dados fornecidos e os dados de Contagem:
|
493 |
+
<resumo_contagem>
|
494 |
+
{dados_contagem}
|
495 |
+
</resumo_contagem>
|
496 |
+
|
497 |
+
Crie um relatório seguindo o modelo apresentado. O relatório deve
|
498 |
+
incluir as seguintes seções:
|
499 |
+
|
500 |
+
1. Informações gerais (data, cidadãos ativos, saída,
|
501 |
+
mudança de território, óbito)
|
502 |
+
|
503 |
+
2. Faixa Etária (Crianças de 0 a 2 anos, 0 a 4 anos,
|
504 |
+
mulheres na faixa etária de preventivo 25 a 64 anos,
|
505 |
+
mulheres na faixa etária de mamografia 50 a 69 anos,
|
506 |
+
idosos acima de 60 anos total, masculino e feminino)
|
507 |
+
|
508 |
+
3. Comparação de Sexo
|
509 |
+
4. Análise de Raça / Cor
|
510 |
+
5. Análise de Escolaridade
|
511 |
+
6. Orientação Sexual
|
512 |
+
7. Deficiências
|
513 |
+
8. Situações de Saúde
|
514 |
+
|
515 |
+
Para cada seção:
|
516 |
+
- Calcule os totais e percentuais relevantes
|
517 |
+
- Faça comparações quando apropriado (por exemplo,
|
518 |
+
entre masculino e feminino)
|
519 |
+
- Destaque, ao final, as 4 informações mais significativas
|
520 |
+
- Formate seu relatório em markdown, usando negrito para títulos
|
521 |
+
de seções e subtítulos. Use o título de Análise parcial, use listas
|
522 |
+
com marcadores quando apropriado para melhorar a legibilidade.
|
523 |
+
|
524 |
+
Após o relatório, forneça 5 insights relevantes, abordando:
|
525 |
+
**Principais desafios de saúde pública para Contagem**
|
526 |
+
**Necessidades específicas dos grupos etários (crianças, adultos e idosos)**
|
527 |
+
**Implicações da distribuição racial e de gênero para políticas de saúde locais**
|
528 |
+
**Estratégias de prevenção e promoção da saúde adequadas ao perfil da população**
|
529 |
+
**Desafios educacionais e sua relação com a saúde da população de Contagem**
|
530 |
+
|
531 |
+
Para cada insight:
|
532 |
+
|
533 |
+
- Explique sua importância no contexto específico de Contagem
|
534 |
+
- Sugira uma ação ou política que poderia ser implementada pela
|
535 |
+
administração municipal
|
536 |
+
- Indique quais dados adicionais seriam úteis para uma análise
|
537 |
+
mais aprofundada da situação em Contagem
|
538 |
+
- Considere as particularidades desta amostra da população de
|
539 |
+
Contagem em relação aos desafios típicos de cidades de porte
|
540 |
+
médio em Minas Gerais, quando possível.
|
541 |
+
""",
|
542 |
+
|
543 |
},
|
544 |
],
|
545 |
model="llama3-70b-8192",
|
546 |
temperature=0.2,
|
547 |
+
max_tokens=4000,
|
548 |
)
|
549 |
return initial_analysis.choices[0].message.content
|
550 |
except Exception as e:
|
|
|
579 |
|
580 |
with col1:
|
581 |
with st.expander("Resumo Inicial", expanded=True):
|
582 |
+
if "initial_analysis" in st.session_state and st.session_state.initial_analysis:
|
583 |
st.write("**Panorama Geral dos Dados:**")
|
584 |
markdown_content = st.session_state.initial_analysis
|
585 |
|
586 |
+
if markdown_content and markdown_content.strip():
|
587 |
+
html_content = f'''
|
588 |
+
<div style="height:300px; overflow-y: auto; padding: 10px; border: 1px solid #CCC;">
|
589 |
+
{markdown_content}
|
590 |
+
</div>
|
591 |
+
'''
|
592 |
|
593 |
+
st.markdown(html_content, unsafe_allow_html=True)
|
594 |
|
595 |
+
# Botão para baixar o documento em formato Word
|
596 |
+
docx_file = create_word_doc(markdown_content)
|
597 |
+
st.download_button(
|
598 |
+
label="Baixar em formato Word",
|
599 |
+
data=docx_file.getvalue(),
|
600 |
+
file_name="analise_inicial.docx",
|
601 |
+
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
602 |
+
)
|
603 |
+
else:
|
604 |
+
st.warning("Não há conteúdo disponível para gerar o documento.")
|
605 |
else:
|
606 |
st.write("**Clique em 'Gerar Resumo' para analisar os dados.**")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
607 |
|
608 |
with col2:
|
609 |
with st.expander("Converse com o 🤖 Zé Flamengo", expanded=True):
|
|
|
709 |
st.session_state.groq_chat_history = []
|
710 |
st.rerun()
|
711 |
|
712 |
+
|
713 |
+
|
714 |
+
# f"""
|
715 |
+
# Aqui estão os dados para análise:
|
716 |
+
# <resumo_rci>
|
717 |
+
# {resumo_rci}
|
718 |
+
# </resumo_rci>
|
719 |
+
|
720 |
+
# Analise cuidadosamente os dados fornecidos e crie um relatório
|
721 |
+
# seguindo o modelo apresentado. O relatório deve incluir as seguintes
|
722 |
+
# seções:
|
723 |
+
# 1. Informações gerais (data, cidadãos ativos, saída,
|
724 |
+
# mudança de território, óbito)
|
725 |
+
# 2. Faixa Etária (Crianças de 0 a 2 anos, 0 a 4 anos, mulheres
|
726 |
+
# na faixa etária de preventivo 25 a 64 anos, mulheres na faixa etária de
|
727 |
+
# mamomagrafia 50a 69 anos, idosos acima de 60 anos total, masculino e feminino)
|
728 |
+
# 3. Comparação de Sexo
|
729 |
+
# 4. Análise de Raça / Cor
|
730 |
+
# 5. Análise de Escolaridade
|
731 |
+
# 6. Orientação Sexual
|
732 |
+
# 7. Deficiências
|
733 |
+
# 8. Situações de Saúde Gerais
|
734 |
+
|
735 |
+
# Para cada seção:
|
736 |
+
# - Calcule os totais e percentuais relevantes
|
737 |
+
# - Faça comparações quando apropriado (por exemplo, entre masculino
|
738 |
+
# e feminino)
|
739 |
+
# - Destaque, ao final as 4 informações mais significativas
|
740 |
+
|
741 |
+
# Formate seu relatório em markdown, usando negrito para títulos de seções e subtítulos.
|
742 |
+
# Use o título de Análise parcial, use listas com marcadores quando apropriado
|
743 |
+
# para melhorar a legibilidade.
|
744 |
+
|
745 |
+
# """,
|