Spaces:
Runtime error
Runtime error
Update simulado_system.py
Browse files- simulado_system.py +98 -0
simulado_system.py
CHANGED
@@ -36,6 +36,104 @@ class SimuladoSystem:
|
|
36 |
}
|
37 |
self.simulados_ativos = {} # Cache de simulados em andamento
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
def create_simulado(self, difficulty: str = "mixed",
|
40 |
num_questions: int = SimuladoConstants.QUESTOES_TOTAIS) -> Dict:
|
41 |
"""Cria simulado personalizado com mais opções"""
|
|
|
36 |
}
|
37 |
self.simulados_ativos = {} # Cache de simulados em andamento
|
38 |
|
39 |
+
class CasoClinicoSystem:
|
40 |
+
"""Sistema de gerenciamento de casos clínicos"""
|
41 |
+
|
42 |
+
def __init__(self, db_connection):
|
43 |
+
self.conn = db_connection
|
44 |
+
|
45 |
+
def get_random_caso(self) -> Optional[Dict]:
|
46 |
+
"""Retorna um caso clínico aleatório"""
|
47 |
+
try:
|
48 |
+
cursor = self.conn.cursor()
|
49 |
+
cursor.execute('''
|
50 |
+
SELECT id, titulo, descricao, imagem, pergunta, alternativas, gabarito
|
51 |
+
FROM casos_clinicos
|
52 |
+
ORDER BY RANDOM()
|
53 |
+
LIMIT 1
|
54 |
+
''')
|
55 |
+
caso = cursor.fetchone()
|
56 |
+
if caso:
|
57 |
+
return {
|
58 |
+
"id": caso[0],
|
59 |
+
"titulo": caso[1],
|
60 |
+
"descricao": caso[2],
|
61 |
+
"imagem": caso[3],
|
62 |
+
"pergunta": caso[4],
|
63 |
+
"alternativas": json.loads(caso[5]),
|
64 |
+
"gabarito": caso[6]
|
65 |
+
}
|
66 |
+
else:
|
67 |
+
return None
|
68 |
+
except Exception as e:
|
69 |
+
logger.error(f"Erro ao obter caso clínico: {e}")
|
70 |
+
return None
|
71 |
+
|
72 |
+
def avaliar_resposta(self, caso_id: int, resposta: str) -> bool:
|
73 |
+
"""Avalia se a resposta está correta para o caso clínico"""
|
74 |
+
try:
|
75 |
+
cursor = self.conn.cursor()
|
76 |
+
cursor.execute('''
|
77 |
+
SELECT gabarito FROM casos_clinicos WHERE id = ?
|
78 |
+
''', (caso_id,))
|
79 |
+
gabarito = cursor.fetchone()[0]
|
80 |
+
return resposta.upper() == gabarito.upper()
|
81 |
+
except Exception as e:
|
82 |
+
logger.error(f"Erro ao avaliar resposta: {e}")
|
83 |
+
return False
|
84 |
+
|
85 |
+
def get_caso_details(self, caso_id: int) -> Optional[Dict]:
|
86 |
+
"""Retorna detalhes de um caso clínico específico"""
|
87 |
+
try:
|
88 |
+
cursor = self.conn.cursor()
|
89 |
+
cursor.execute('''
|
90 |
+
SELECT id, titulo, descricao, imagem, pergunta, alternativas, gabarito, explicacao
|
91 |
+
FROM casos_clinicos
|
92 |
+
WHERE id = ?
|
93 |
+
''', (caso_id,))
|
94 |
+
caso = cursor.fetchone()
|
95 |
+
if caso:
|
96 |
+
return {
|
97 |
+
"id": caso[0],
|
98 |
+
"titulo": caso[1],
|
99 |
+
"descricao": caso[2],
|
100 |
+
"imagem": caso[3],
|
101 |
+
"pergunta": caso[4],
|
102 |
+
"alternativas": json.loads(caso[5]),
|
103 |
+
"gabarito": caso[6],
|
104 |
+
"explicacao": caso[7]
|
105 |
+
}
|
106 |
+
else:
|
107 |
+
return None
|
108 |
+
except Exception as e:
|
109 |
+
logger.error(f"Erro ao obter detalhes do caso: {e}")
|
110 |
+
return None
|
111 |
+
|
112 |
+
def get_casos_by_topic(self, topico: str) -> List[Dict]:
|
113 |
+
"""Retorna casos clínicos de um tópico específico"""
|
114 |
+
try:
|
115 |
+
cursor = self.conn.cursor()
|
116 |
+
cursor.execute('''
|
117 |
+
SELECT id, titulo, descricao, imagem, pergunta, alternativas, gabarito
|
118 |
+
FROM casos_clinicos
|
119 |
+
WHERE topico = ?
|
120 |
+
''', (topico,))
|
121 |
+
return [
|
122 |
+
{
|
123 |
+
"id": caso[0],
|
124 |
+
"titulo": caso[1],
|
125 |
+
"descricao": caso[2],
|
126 |
+
"imagem": caso[3],
|
127 |
+
"pergunta": caso[4],
|
128 |
+
"alternativas": json.loads(caso[5]),
|
129 |
+
"gabarito": caso[6]
|
130 |
+
}
|
131 |
+
for caso in cursor.fetchall()
|
132 |
+
]
|
133 |
+
except Exception as e:
|
134 |
+
logger.error(f"Erro ao obter casos por tópico: {e}")
|
135 |
+
return []
|
136 |
+
|
137 |
def create_simulado(self, difficulty: str = "mixed",
|
138 |
num_questions: int = SimuladoConstants.QUESTOES_TOTAIS) -> Dict:
|
139 |
"""Cria simulado personalizado com mais opções"""
|