danielraynaud commited on
Commit
20b4f22
·
verified ·
1 Parent(s): 2e4ede0

Update simulado_system.py

Browse files
Files changed (1) hide show
  1. 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"""