File size: 5,877 Bytes
55c2cd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282e55c
55c2cd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f2ce65
55c2cd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f2ce65
55c2cd3
 
 
 
6f2ce65
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import streamlit as st
import pandas as pd
import json
import os

# Função para carregar usuários e senhas de um arquivo JSON
def carregar_usuarios(arquivo="users.json"):
    if os.path.exists(arquivo):
        with open(arquivo, "r", encoding="utf-8") as f:
            return json.load(f)
    return {}

# Função para carregar anotações de um arquivo específico para cada usuário
def carregar_anotacoes_usuario(usuario, pasta="anotacoes"):
    if not os.path.exists(pasta):
        os.makedirs(pasta)
    arquivo_usuario = os.path.join(pasta, f"{usuario}_anotacoes_praticas.json")
    if os.path.exists(arquivo_usuario):
        with open(arquivo_usuario, "r", encoding="utf-8") as f:
            return json.load(f)
    return {}

# Função para salvar anotações de um usuário
def salvar_anotacoes_usuario(usuario, dados, pasta="anotacoes"):
    arquivo_usuario = os.path.join(pasta, f"{usuario}_anotacoes_praticas.json")
    with open(arquivo_usuario, "w", encoding="utf-8") as f:
        json.dump(dados, f, ensure_ascii=False, indent=4)

# Função para autenticar o login
def autenticar(usuario, senha, usuarios):
    return usuarios.get(usuario) == senha

# Função principal da aplicação
def run():
    #st.set_page_config(layout="wide")

    # Tela de login
    usuarios = carregar_usuarios()
    if "usuario" not in st.session_state:
        st.session_state["usuario"] = None
    if "selected_criterio" not in st.session_state:
        st.session_state["selected_criterio"] = None

    if st.session_state["usuario"] is None:
        st.title("ICAIL - Benchmark jurídico OAB segunda fase")
        st.markdown("Questões práticas")

        usuario = st.text_input("Usuário")
        senha = st.text_input("Senha", type="password")
        if st.button("Entrar"):
            if autenticar(usuario, senha, usuarios):
                st.session_state["usuario"] = usuario
                st.success(f"Bem-vindo, {usuario}!")
                st.rerun()
            else:
                st.error("Usuário ou senha inválidos.")
    else:
        usuario = st.session_state["usuario"]

        # Carregar anotações do usuário
        anotacoes_salvas = carregar_anotacoes_usuario(usuario)

        # Carregar os dados do arquivo pickle correspondente
        dados_pickle = "df_evaluated.pkl"
        df = pd.read_pickle(dados_pickle)

        # Configuração da barra lateral para escolher a questão
        st.sidebar.title(f"Usuário: {usuario}")
        questao_id = st.sidebar.selectbox("Selecione a prova", df["id"].tolist())

        # Filtrar o DataFrame para a questão selecionada
        questao = df[df["id"] == questao_id].iloc[0]

        # Inicializar o JSON para a questão selecionada, se não existir
        if str(questao_id) not in anotacoes_salvas:
            anotacoes_salvas[str(questao_id)] = {}

        # Layout principal
        col1, col2 = st.columns([2, 1])

        with col1:
            st.header("Leitura e Contexto")
            st.write(f"{questao['exam']} º exame da OAB, área Direito {questao['area']} - prova aplicada em {questao['exam date']}")

            tab1, tab2, tab3 = st.tabs(["Caso da Prova Prática", "Gabarito", "Resposta do Candidato"])
            with tab1:
                st.markdown(f"<div style='height: 400px; overflow-y: auto; border: 1px solid #ddd; padding: 10px;'>{questao['question']}</div>", unsafe_allow_html=True)
            with tab2:
                st.markdown(f"<div style='height: 400px; overflow-y: auto; border: 1px solid #ddd; padding: 10px;'>{questao['answer']}</div>", unsafe_allow_html=True)
            with tab3:
                st.markdown(f"<div style='height: 400px; overflow-y: auto; border: 1px solid #ddd; padding: 10px;'>{questao['model_answer']}</div>", unsafe_allow_html=True)

            if st.session_state["selected_criterio"] is not None:
                criterio = questao["formated_criteria"][st.session_state["selected_criterio"]]
                identificador = f"Critério {criterio['numero']} - {criterio['parte']}"
                st.subheader(identificador + f" - {criterio['titulo']}")
                st.markdown(f"**Critério:**<br>{criterio['descricao']} (Peso: {criterio['pontos']})", unsafe_allow_html=True)

                chave_anotacao = f"exame_{questao['exam']}_area_{questao['area']}_questao_numero_{criterio['numero']}_parte_{criterio['parte']}"
                valor_salvo = anotacoes_salvas[str(questao_id)].get(chave_anotacao, "-")

                # Atualizar imediatamente a anotação ao interagir com o rádio
                atende = st.radio(
                    f"Cumpre o critério?",
                    options=["-", "Sim", "Não"],
                    index=["-", "Sim", "Não"].index(valor_salvo) if valor_salvo in ["-", "Sim", "Não"] else 0,
                    key=f"criterio_{questao_id}_{st.session_state['selected_criterio']}"
                )

                # Atualizar o valor no dicionário de anotações
                anotacoes_salvas[str(questao_id)][chave_anotacao] = atende

                # Botão para salvar todas as anotações no arquivo
                if st.button("Gravar"):
                    salvar_anotacoes_usuario(usuario, anotacoes_salvas)
                    st.success("Anotações salvas com sucesso!")
                    st.json(anotacoes_salvas)

        with col2:
            st.header("Lista de Critérios")
            for idx, criterio in enumerate(questao["formated_criteria"]):
                texto_botao = f"Critério {criterio['numero']} - {criterio['parte']}"
                if st.button(texto_botao, key=f"menu_criterio_{idx}"):
                    st.session_state["selected_criterio"] = idx
                    st.rerun()

        # Logout
        if st.sidebar.button("Logout"):
            st.session_state["usuario"] = None
            st.rerun()