Nova implementação quando não é selecionado nada
[simdecs2.git] / src / java / org / ufcspa / simdecs / mediador / NegociacaoPedagogica.java
CommitLineData
466e3927 1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package org.ufcspa.simdecs.mediador;
6
25aea581 7import java.util.*;
8import javax.persistence.EntityManager;
56f36e0a 9import javax.persistence.NoResultException;
25aea581 10import org.ufcspa.simdecs.entities.*;
11import org.ufcspa.simdecs.util.DbUtil;
12import org.ufcspa.simdecs.util.NodoBean;
13import org.ufcspa.simdecs.util.ProbabilisticBean;
14import org.ufcspa.simdecs.util.UnBBayesUtil;
15import unbbayes.prs.bn.ProbabilisticNode;
16import unbbayes.prs.bn.TreeVariable;
17import unbbayes.prs.id.DecisionNode;
733f8ea6 18
466e3927 19/**
20 *
21 * @author maroni
22 */
23public class NegociacaoPedagogica {
24
06f78c2b 25 public static final String NAO_ABRIU_FICHA_PACIENTE = "NAO_ABRIU_FICHA_PACIENTE";
26
27 public static final String INVESTIGACAO_ADEQUADA = "INVESTIGACAO_ADEQUADA";
28 public static final String INVESTIGACAO_INSUFICIENTE = "INVESTIGACAO_INSUFICIENTE";
29 public static final String INVESTIGACAO_EXCESSIVA = "INVESTIGACAO_EXCESSIVA";
30 public static final String INVESTIGACAO_BOGUS = "INVESTIGACAO_BOGUS";
31 public static final String INVESTIGACAO_DISPENDIOSA = "INVESTIGACAO_DISPENDIOSA";
32 public static final String INVESTIGACAO_DEMORADA = "INVESTIGACAO_DEMORADA";
33 public static final String INVESTIGACAO_NAO_REALIZADA = "INVESTIGACAO_NAO_REALIZADA";
733f8ea6 34
25aea581 35 public static final String DIAGNOSTICO_ADEQUADO = "DIAGNOSTICO_ADEQUADO";
36 public static final String DIAGNOSTICO_INCORRETO_IMPLAUSIVEL= "DIAGNOSTICO_INCORRETO_IMPLAUSIVEL";
37 public static final String DIAGNOSTICO_INCORRETO_PLAUSIVEL = "DIAGNOSTICO_INCORRETO_PLAUSIVEL";
06f78c2b 38 public static final String DIAGNOSTICO_NAO_SELECIONADO = "DIAGNOSTICO_NAO_SELECIONADO";
733f8ea6 39
25aea581 40 public static final String CONDUTA_ADEQUADA = "CONDUTA_ADEQUADA";
41 public static final String CONDUTA_INCORRETA_COERENTE = "CONDUTA_INCORRETA_COERENTE";
733f8ea6 42 public static final String CONDUTA_INCORRETA_INCOERENTE = "CONDUTA_INCORRETA_INCOERENTE";
25aea581 43 public static final String CONDUTA_INSUFICIENTE = "CONDUTA_INSUFICIENTE";
44 public static final String CONDUTA_EXCESSIVA = "CONDUTA_EXCESSIVA";
45 public static final String CONDUTA_DEMORADA = "CONDUTA_DEMORADA";
46 public static final String CONDUTA_DISPENDIOSA = "CONDUTA_DISPENDIOSA";
06f78c2b 47 public static final String CONDUTA_NAO_SELECIONADA = "CONDUTA_NAO_SELECIONADA";
25aea581 48
49
50 private LogExecucao logExecucao;
51 private EntityManager em;
733f8ea6 52
25aea581 53 private String estrategia;
54 private List<String> resultadosSimulacao;
55
56
57 private boolean anamneseInsuficiente = false;
58 private boolean anamneseExcessiva = false;
59 private boolean exameFisicoInsuficiente = false;
60 private boolean exameFisicoExcessivo = false;
61 private boolean exameComplementarInsuficiente = false;
62 private boolean exameComplementarExcessivo = false;
63 private boolean perguntouBogus = false;
733f8ea6 64
56f36e0a 65 private Paciente paciente;
66 private SessaoUsuario sessaoUsuario;
67
733f8ea6 68
25aea581 69 private void populaEstrategia() throws Exception {
70 // Carrega o endereço do diagrama de influencia do banco e abre a rede no disco
71 Rede redeDI = em.find(Rede.class, 1000L);
72 UnBBayesUtil diagramaInfluencia = new UnBBayesUtil(redeDI);
73
74 anamneseInsuficiente = false;
75 anamneseExcessiva = false;
76 exameFisicoInsuficiente = false;
77 exameFisicoExcessivo = false;
78 exameComplementarInsuficiente = false;
79 exameComplementarExcessivo = false;
80 perguntouBogus = false;
81
56f36e0a 82 if (logExecucao.isConcluiuInvestigacao()) {
83 // Define a probabilidade do nodo Anamnese
84 {
85 if (logExecucao.getPerguntasDisponiveis() > 0) {
86 ProbabilisticNode nodoAnamnese = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Anamnese");
87 float pcPerguntasAnamnese = logExecucao.getPerguntasRealizadas() / logExecucao.getPerguntasDisponiveis() * 100;
88 //System.out.println("PERCENTUAL ANAMNESE: " + pcPerguntasAnamnese);
89 if (pcPerguntasAnamnese <= 25) {
90 diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
91 anamneseInsuficiente = true;
92 }
93 else if (pcPerguntasAnamnese > 25 && pcPerguntasAnamnese <= 75)
94 diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
95 else {
96 diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
97 anamneseExcessiva = true;
98 }
25aea581 99 }
100 }
56f36e0a 101
102 // Define a probabilidade do nodo Exame Fisico
103 {
104 if (logExecucao.getExamesFisicosDisponiveis() > 0) {
105 ProbabilisticNode nodoExameFisico = (ProbabilisticNode) diagramaInfluencia.getNodeByName("ExameFisico");
106 float pcExameFisico = logExecucao.getExamesFisicosRealizados() / logExecucao.getExamesFisicosDisponiveis() * 100;
107 //System.out.println("PERCENTUAL EXAME FISICO: " + pcExameFisico);
108
109 if (pcExameFisico <= 25) {
110 diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
111 exameFisicoInsuficiente = true;
112 }
113 else if (pcExameFisico > 25 && pcExameFisico <= 75)
114 diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
115 else {
116 diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
117 exameFisicoExcessivo = true;
118 }
25aea581 119 }
120 }
56f36e0a 121
122 // Define a probabilidade do nodo Exame Complementar
123 {
124 if (logExecucao.getExamesComplementaresProfessor() > 0) {
125 ProbabilisticNode nodoExameComplementar = (ProbabilisticNode) diagramaInfluencia.getNodeByName("ExameComplementar");
126 float pcExameComplementar = logExecucao.getExamesComplementaresRealizados() / logExecucao.getExamesComplementaresProfessor() * 100;
127 // System.out.println("PERCENTUAL EXAME COMPLEMENTAR: " + pcExameComplementar);
128
129 if (pcExameComplementar <= 25) {
130 diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
131 exameComplementarInsuficiente = true;
132 }
133 else if (pcExameComplementar > 25 && pcExameComplementar <= 7)
134 diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
135 else {
136 diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
137 exameFisicoExcessivo = true;
138 }
25aea581 139 }
140 }
25aea581 141
56f36e0a 142 // Define a probabilidade do nodo abriu ficha do paciente
143 {
144 ProbabilisticNode nodoAbriuFichaPaciente = (ProbabilisticNode) diagramaInfluencia.getNodeByName("AbriuFichaPaciente");
145
146 if (logExecucao.isAbriuFichaPaciente())
147 diagramaInfluencia.setNodeState(nodoAbriuFichaPaciente, "Sim", 1, "Nao", 0);
148 else
149 diagramaInfluencia.setNodeState(nodoAbriuFichaPaciente, "Sim", 0, "Nao", 1);
150 }
151
152 // Define a probabilidade do nodo Bogus
153 {
154 if (logExecucao.getPerguntasDisponiveis() > 0) {
155 ProbabilisticNode nodoBogus = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Bogus");
156 float pcNodoBogus = logExecucao.getPerguntasBogusRealizadas() / logExecucao.getPerguntasDisponiveis() * 100;
157// System.out.println("PERCENTUAL BOGUS: " + pcNodoBogus);
158
159 if (pcNodoBogus <= 10)
160 diagramaInfluencia.setNodeState(nodoBogus, "Presente", 0, "Ausente", 1);
161 else if (pcNodoBogus > 10 && pcNodoBogus <= 30) {
162 diagramaInfluencia.setNodeState(nodoBogus, "Presente", 0.4f, "Ausente", 0.6f);
163 perguntouBogus = true;
164 }
165 else {
166 diagramaInfluencia.setNodeState(nodoBogus, "Presente", 1, "Ausente", 0);
167 perguntouBogus = true;
168 }
25aea581 169 }
170 }
171 }
172
56f36e0a 173
174 if (logExecucao.isConcluiuDiagnostico()) {
175 // Define a probabilidade de hesitação diagnostica
176 {
177 ProbabilisticNode nodoHestiacaoDiagnostico = (ProbabilisticNode) diagramaInfluencia.getNodeByName("HesitacaoDiagnostico");
178
179 if (logExecucao.getDesmarcacoesDiagnostico() == 0)
180 diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 0, "Ausente", 1);
181 else if (logExecucao.getDesmarcacoesDiagnostico() == 1)
182 diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 0.6f, "Ausente", 0.4f);
183 else
184 diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 1, "Ausente", 0);
185 }
25aea581 186 }
187
56f36e0a 188 if (logExecucao.isConcluiuConduta()) {
189 // Define a probabilidade de hesitação na conduta
190 {
191 ProbabilisticNode nodoHestiacaoConduta = (ProbabilisticNode) diagramaInfluencia.getNodeByName("HesitacaoConduta");
192
193 if (logExecucao.getDesmarcacoesConduta() == 0)
194 diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 0, "Ausente", 1);
195 else if (logExecucao.getDesmarcacoesConduta() == 1)
196 diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 0.6f, "Ausente", 0.4f);
197 else
198 diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 1, "Ausente", 0);
199 }
25aea581 200 }
201
56f36e0a 202 // Define o nodo confianca
25aea581 203 {
204 ProbabilisticNode nodoConfianca = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Confianca");
205
206 if (logExecucao.getConfiancaAtual().equals(Log.CONFIANCA_BAIXA))
207 diagramaInfluencia.setNodeState(nodoConfianca, "Baixa", 1, "Media", 0, "Alta", 0);
208 else if (logExecucao.getConfiancaAtual().equals(Log.CONFIANCA_MEDIA))
209 diagramaInfluencia.setNodeState(nodoConfianca, "Baixa", 0, "Media", 1, "Alta", 0);
210 else if (logExecucao.getConfiancaAtual().equals(Log.CONFIANCA_ALTA))
211 diagramaInfluencia.setNodeState(nodoConfianca, "Baixa", 0, "Media", 0, "Alta", 1);
212 }
56f36e0a 213/*
214// Debug das probabilidades do DI:
215{
216 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("ExameComplementar"));
217 System.out.println("NODO: EXAME COMPLEMENTAR");
218 for (ProbabilisticBean p : pd) {
219 System.out.println(p.getState() + ": " + p.getProbability());
220 }
221}
222
223// Debug das probabilidades do DI:
224{
225 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("ExameFisico"));
226 System.out.println("NODO: EXAME FISICO");
227 for (ProbabilisticBean p : pd) {
228 System.out.println(p.getState() + ": " + p.getProbability());
229 }
230}
231
232// Debug das probabilidades do DI:
233{
234 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Anamnese"));
235 System.out.println("NODO: ANAMNESE");
236 for (ProbabilisticBean p : pd) {
237 System.out.println(p.getState() + ": " + p.getProbability());
238 }
239}
240
241// Debug das probabilidades do DI:
242{
243 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Investigacao"));
244 System.out.println("NODO: INVESTIGACAO");
245 for (ProbabilisticBean p : pd) {
246 System.out.println(p.getState() + ": " + p.getProbability());
247 }
248}
249
250// Debug das probabilidades do DI:
251{
252 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("AbriuFichaPaciente"));
253 System.out.println("NODO: ABRIU FICHA PACIENTE");
254 for (ProbabilisticBean p : pd) {
255 System.out.println(p.getState() + ": " + p.getProbability());
256 }
257}
258
259// Debug das probabilidades do DI:
260{
261 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Bogus"));
262 System.out.println("NODO: Bogus");
263 for (ProbabilisticBean p : pd) {
264 System.out.println(p.getState() + ": " + p.getProbability());
265 }
266}
267
268// Debug das probabilidades do DI:
269{
270 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("ResultadoInvestigacao"));
271 System.out.println("NODO: RESULTADO INVESTIGACAO");
272 for (ProbabilisticBean p : pd) {
273 System.out.println(p.getState() + ": " + p.getProbability());
274 }
275}
276
277// Debug das probabilidades do DI:
278{
279 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Credibilidade"));
280 System.out.println("NODO: CREDIBILIDADE");
281 for (ProbabilisticBean p : pd) {
282 System.out.println(p.getState() + ": " + p.getProbability());
283 }
284}
285
286// Debug das probabilidades do DI:
287{
288 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("HesitacaoDiagnostico"));
289 System.out.println("NODO: HESITACAO DIAGNOSTICO");
290 for (ProbabilisticBean p : pd) {
291 System.out.println(p.getState() + ": " + p.getProbability());
292 }
293}
294
295// Debug das probabilidades do DI:
296{
297 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("HesitacaoConduta"));
298 System.out.println("NODO: HESITACAO CONDUTA");
299 for (ProbabilisticBean p : pd) {
300 System.out.println(p.getState() + ": " + p.getProbability());
301 }
302}
303
304// Debug das probabilidades do DI:
305{
306 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Confianca"));
307 System.out.println("NODO: CONFIANCA");
308 for (ProbabilisticBean p : pd) {
309 System.out.println(p.getState() + ": " + p.getProbability());
310 }
311}
312
313// Debug das probabilidades do DI:
314{
315 List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Estrategia"));
316 System.out.println("NODO: ESTRATEGIA");
317 for (ProbabilisticBean p : pd) {
318 System.out.println(p.getState() + ": " + p.getProbability());
319 }
320}
321*/
25aea581 322 // Mostra o resultado do diagrama de influencia
56f36e0a 323 DecisionNode nodoTatica = (DecisionNode) diagramaInfluencia.getNodeByName("Estrategia");
25aea581 324 List<ProbabilisticBean> probs = diagramaInfluencia.getProbabilidadesDescOrder(nodoTatica);
325
326 for (ProbabilisticBean prob : probs) {
327 estrategia = prob.getState().toUpperCase();
328 break;
329 }
330 }
331
56f36e0a 332 private String getResultadoDiagnostico() throws Exception {
06f78c2b 333 // Caso nao selecionou o diagnostico
334 if (logExecucao.getDiagnostico() == null)
335 return DIAGNOSTICO_NAO_SELECIONADO;
336
56f36e0a 337 // Nao selecionou o primeiro diagnostico
338 if (logExecucao.getPrimeiroDiagnosticoCaso() != null && !logExecucao.getDiagnostico().equals(logExecucao.getPrimeiroDiagnosticoCaso()))
339 if (logExecucao.getSegundoDiagnosticoCaso() != null && logExecucao.getDiagnostico().equals(logExecucao.getSegundoDiagnosticoCaso()))
340 return DIAGNOSTICO_INCORRETO_PLAUSIVEL;
341 else
342 return DIAGNOSTICO_INCORRETO_IMPLAUSIVEL;
25aea581 343
56f36e0a 344 return DIAGNOSTICO_ADEQUADO;
345 }
25aea581 346
56f36e0a 347 private String getResultadoConduta() throws Exception {
348
06f78c2b 349 // Caso nao selecionou a conduta
350 if (logExecucao.getCondutasIdeaisDiagnostico() == null || logExecucao.getCondutasIdeaisDiagnostico().isEmpty())
351 return CONDUTA_NAO_SELECIONADA;
352
56f36e0a 353 // Caso o diagnóstico esteja adequado verifica se a conduta foi excessiva, insuficiente ou adequada!
354 if (getResultadoDiagnostico().equals(DIAGNOSTICO_ADEQUADO)) {
355
356 // Verifica se a conduta está certa ou errada!
357 boolean diferente=false;
358 for(Nodo conduta : logExecucao.getCondutas().values()) {
359 if (!logExecucao.getCondutasIdeaisDiagnostico().contains(conduta)) {
360 diferente=true;
361 break;
362 }
363 }
364
365 // Esta errada
366 if (diferente)
367 return CONDUTA_INCORRETA_INCOERENTE;
368
369 // Esta certa, agora verifica se é excessiva ou adequada!
370 if (logExecucao.getCondutas().size() > logExecucao.getCondutasIdeaisDiagnostico().size())
371 return CONDUTA_EXCESSIVA;
372 else if (logExecucao.getCondutas().size() < logExecucao.getCondutasIdeaisDiagnostico().size())
373 return CONDUTA_INSUFICIENTE;
374 else
375 return CONDUTA_ADEQUADA;
376 }
377 // Caso o diagnóstico esteja errado
378 else {
379 // Verifica se a conduta está certa ou errada (avalia somente a primeira)
380 for(Nodo conduta : logExecucao.getCondutas().values()) {
381 if (logExecucao.getCondutasIdeaisDiagnostico().contains(conduta))
382 return CONDUTA_INCORRETA_COERENTE;
383 else
384 return CONDUTA_INCORRETA_INCOERENTE;
385 }
25aea581 386 }
387
56f36e0a 388 return null;
389 }
390
391 private String getResultadoCustoConduta() {
392 float custoRealizado=0;
393 float custoPrevisto=0;
394
06f78c2b 395 if (logExecucao.getCondutas().isEmpty())
396 return null;
397
56f36e0a 398 for(Nodo conduta : logExecucao.getCondutas().values())
399 custoRealizado+=conduta.getCusto();
400
401 for(Nodo conduta : logExecucao.getCondutasIdeaisDiagnostico())
402 custoPrevisto+=conduta.getCusto();
25aea581 403
56f36e0a 404 if (custoPrevisto > 0) {
405 float pcCusto = custoRealizado / custoPrevisto * 100;
406
407 if (pcCusto >= 150)
408 return CONDUTA_DISPENDIOSA;
409 }
410
411 return null;
25aea581 412 }
413
56f36e0a 414 private String getResultadoTempoConduta() {
415 float tempoRealizado=0;
416 float tempoPrevisto=0;
25aea581 417
06f78c2b 418 if (logExecucao.getCondutas().isEmpty())
419 return null;
420
56f36e0a 421 for(Nodo conduta : logExecucao.getCondutas().values())
422 tempoRealizado+=conduta.getTempo();
25aea581 423
56f36e0a 424 for(Nodo conduta : logExecucao.getCondutasIdeaisDiagnostico())
425 tempoPrevisto+=conduta.getTempo();
25aea581 426
56f36e0a 427 if (tempoPrevisto > 0) {
428 float pcTempo = tempoRealizado / tempoPrevisto * 100;
429
430 if (pcTempo >= 150)
431 return CONDUTA_DEMORADA;
432 }
433
434 return null;
435 }
436
437 private String getResultadoCustoInvestigacao() {
438 // Verifica se a anamnese teve alto custo!
439 if (logExecucao.getExamesComplementaresCustoProfessor() > 0) {
440 float pcCusto = logExecucao.getExamesComplementaresCustoRealizado() / logExecucao.getExamesComplementaresCustoProfessor() * 100;
441 if (pcCusto > 150)
442 return INVESTIGACAO_DISPENDIOSA;
443 }
25aea581 444
56f36e0a 445 return null;
25aea581 446 }
733f8ea6 447
56f36e0a 448 private String getResultadoTempoInvestigacao() {
449 if (logExecucao.getExamesComplementaresTempoProfessor() > 0 || logExecucao.getExamesFisicosTempoProfessor() > 0) {
450 float pcTempo = (logExecucao.getExamesComplementaresTempoRealizado() + logExecucao.getExamesFisicosTempoRealizado()) /
451 (logExecucao.getExamesComplementaresTempoProfessor() + logExecucao.getExamesFisicosTempoProfessor()) * 100;
452
453 if (pcTempo > 150)
454 return INVESTIGACAO_DEMORADA;
455 }
456
457 return null;
458 }
733f8ea6 459
460
56f36e0a 461 private void populaResultadoSimulacao() throws Exception {
462
463 populaEstrategia();
464
25aea581 465 resultadosSimulacao = new ArrayList<String>();
466
467 if (logExecucao.isConcluiuInvestigacao()) {
468 // Verifica se abriu a ficha do paciente
469 if (!logExecucao.isAbriuFichaPaciente())
470 resultadosSimulacao.add(NAO_ABRIU_FICHA_PACIENTE);
471
06f78c2b 472 // Verifica se realmente realizou a investigacao
473 if (logExecucao.getNodosInvestigacao().size() == 0)
474 resultadosSimulacao.add(INVESTIGACAO_NAO_REALIZADA);
475 else {
476 // Verifica se a investigação é insuficiente ou excessiva
477 int fatorInsuficiente = 0;
478 if (anamneseInsuficiente)
479 fatorInsuficiente++;
480 if (exameComplementarInsuficiente)
481 fatorInsuficiente++;
482 if (exameFisicoInsuficiente)
483 fatorInsuficiente++;
484
485 int fatorExcessivo = 0;
486 if (anamneseExcessiva)
487 fatorExcessivo++;
488 if (exameComplementarExcessivo)
489 fatorExcessivo++;
490 if (exameFisicoExcessivo)
491 fatorExcessivo++;
492
493 if (fatorExcessivo != 0 || fatorInsuficiente != 0) {
494 if (fatorInsuficiente > fatorExcessivo)
495 resultadosSimulacao.add(INVESTIGACAO_INSUFICIENTE);
496 else
497 resultadosSimulacao.add(INVESTIGACAO_EXCESSIVA);
498 }
499 }
25aea581 500
501 // Verifica se é bogus
502 if (perguntouBogus)
503 resultadosSimulacao.add(INVESTIGACAO_BOGUS);
504
505 // Verifica se a anamnese teve alto custo!
56f36e0a 506 String resultadoCustoInvestigacao = getResultadoCustoInvestigacao();
507 if (resultadoCustoInvestigacao != null)
508 resultadosSimulacao.add(resultadoCustoInvestigacao);
25aea581 509
56f36e0a 510 String resultadoTempoInvestigacao = getResultadoTempoInvestigacao();
511 if (resultadoTempoInvestigacao != null)
512 resultadosSimulacao.add(resultadoTempoInvestigacao);
25aea581 513 }
514
25aea581 515 // Verifica se o diagnóstico foi adequado
516 if (logExecucao.isConcluiuDiagnostico()) {
56f36e0a 517 String resultadoDiagnostico = getResultadoDiagnostico();
518 resultadosSimulacao.add(resultadoDiagnostico);
25aea581 519 }
520
521
56f36e0a 522 // Verifica as condutas
25aea581 523 if (logExecucao.isConcluiuConduta()) {
56f36e0a 524 // Verifica a adequacao da conduta
525 String resultadoConduta = getResultadoConduta();
526 resultadosSimulacao.add(resultadoConduta);
25aea581 527
528
56f36e0a 529 // Verifica o custo
530 String resultadoCondutaCusto = getResultadoCustoConduta();
531 if (resultadoCondutaCusto != null)
532 resultadosSimulacao.add(resultadoCondutaCusto);
533
534 // Verifica o tempo
535 String resultadoCondutaTempo = getResultadoTempoConduta();
536 if (resultadoCondutaTempo != null)
537 resultadosSimulacao.add(resultadoCondutaTempo);
538 }
25aea581 539
56f36e0a 540 // Após a execução da procura das falhas. Caso não haja problema da a simulação como correta
541 if (logExecucao.isConcluiuInvestigacao()) {
542 if (!resultadosSimulacao.contains(INVESTIGACAO_BOGUS) && !resultadosSimulacao.contains(INVESTIGACAO_DEMORADA) &&
543 !resultadosSimulacao.contains(INVESTIGACAO_DISPENDIOSA) && !resultadosSimulacao.contains(INVESTIGACAO_EXCESSIVA) &&
06f78c2b 544 !resultadosSimulacao.contains(INVESTIGACAO_INSUFICIENTE) && !resultadosSimulacao.contains(INVESTIGACAO_NAO_REALIZADA)) {
56f36e0a 545
546 resultadosSimulacao.add(INVESTIGACAO_ADEQUADA);
25aea581 547 }
25aea581 548 }
549 }
56f36e0a 550
551 public NegociacaoPedagogica(long idSessao, Paciente paciente) throws Exception {
552 em = DbUtil.getInstance().getEntityManager();
553 SessaoUsuario sessaoUsuario = em.find(SessaoUsuario.class, idSessao);
554 this.sessaoUsuario = sessaoUsuario;
555 this.paciente = paciente;
25aea581 556
25aea581 557 // Busca o log de execução
56f36e0a 558 logExecucao = new LogExecucao(sessaoUsuario, paciente);
559 }
560
561 public String getIntervencao(String etapa) throws Exception {
733f8ea6 562 System.out.println(logExecucao);
25aea581 563
56f36e0a 564 populaResultadoSimulacao();
565
25aea581 566 System.out.println("ESTRATÉGIA: " + estrategia);
567 System.out.println("RESULTADOS:");
568
569 for(String resultado : resultadosSimulacao) {
56f36e0a 570 System.out.println(resultado + " - " + etapa);
571
572 // Registra somente resultados referentes a posicao atual do simulador
573 if (etapa.equals(Log.ETAPA_INVESTIGACAO) && !resultado.startsWith("INVESTIGACAO") && !resultado.equals(NAO_ABRIU_FICHA_PACIENTE))
574 continue;
25aea581 575
56f36e0a 576 // Registra somente resultados referentes a posicao atual do simulador
577 if (etapa.equals(Log.ETAPA_DIAGNOSTICO) && !resultado.startsWith("DIAGNOSTICO"))
578 continue;
579
580 // Registra somente resultados referentes a posicao atual do simulador
581 if (etapa.equals(Log.ETAPA_CONDUTA) && !resultado.startsWith("CONDUTA"))
582 continue;
583
584
585
586 try {
587 IntervencaoPedagogica testarExistencia = (IntervencaoPedagogica) em.createQuery("From IntervencaoPedagogica where sessaoUsuario.id=:pSessao and estrategia=:pEstrategia and resultado=:pResultado")
588 .setParameter("pSessao", sessaoUsuario.getId())
589 .setParameter("pEstrategia", estrategia)
590 .setParameter("pResultado", resultado)
591 .getSingleResult();
592 continue;
593 } catch(NoResultException e) { }
594
25aea581 595 if (!em.getTransaction().isActive())
596 em.getTransaction().begin();
597
56f36e0a 598 IntervencaoPedagogica intervencao = new IntervencaoPedagogica();
25aea581 599 intervencao.setAplicada(false);
600 intervencao.setDataGeracao(new Date());
601 intervencao.setEstrategia(estrategia);
602 intervencao.setResultado(resultado);
56f36e0a 603 intervencao.setSessaoUsuario(sessaoUsuario);
06f78c2b 604System.out.println("pResultado: " + resultado);
605System.out.println("pEstrategia: " + estrategia);
25aea581 606 TaticaPedagogica tatica = (TaticaPedagogica) em.createQuery("From TaticaPedagogica where resultado=:pResultado and estrategia=:pEstrategia")
607 .setParameter("pResultado", resultado)
608 .setParameter("pEstrategia", estrategia)
609 .getSingleResult();
610 intervencao.setTatica(tatica);
611
612 em.persist(intervencao);
56f36e0a 613
25aea581 614 em.getTransaction().commit();
56f36e0a 615 }
616
617 // Busca as intervencoes a serem mostradas agora!
618 {
619 StringBuilder retorno = new StringBuilder();
620
621 Iterator<IntervencaoPedagogica> itIntervencoes = em.createQuery("From IntervencaoPedagogica where sessaoUsuario.id=:pSessao and aplicada=false order by dataGeracao desc")
622 .setParameter("pSessao", sessaoUsuario.getId())
623 .getResultList()
624 .iterator();
625
626 if (!itIntervencoes.hasNext())
627 return " <resposta_acao_mediador acao=\"nao\" />";
628
629 retorno.append(" <resposta_acao_mediador acao=\"sim\" mensagem=\"Atenção\" problema=\"");
25aea581 630
56f36e0a 631 while(itIntervencoes.hasNext()) {
632 IntervencaoPedagogica intervencao = itIntervencoes.next();
633 retorno.append(intervencao.getTatica().getMensagem());
634 retorno.append("\n\n");
635
636 if (!em.getTransaction().isActive())
637 em.getTransaction().begin();
638
639
640 intervencao.setAplicada(true);
641 em.merge(intervencao);
642
643 em.getTransaction().commit();
644
645 }
646
647 retorno.append("\" />");
648 return retorno.toString();
25aea581 649 }
56f36e0a 650 }
651
652 public String getMensagemFinal() throws Exception {
653 StringBuilder retorno = new StringBuilder();
654
655 retorno.append("PACIENTE: " + paciente.getNome() + "\n\n");
656
657 retorno.append("RESUMO:\n");
658
659
660 // Diagnostico
4e89c95d 661 if (logExecucao.isConcluiuDiagnostico()) {
662 String resultadoDiagnostico = getResultadoDiagnostico();
663 if (resultadoDiagnostico.equals(DIAGNOSTICO_ADEQUADO))
664 retorno.append("-Você chegou ao diagnóstico previsto para esta simulação!\n");
06f78c2b 665 else if (resultadoDiagnostico.equals(DIAGNOSTICO_NAO_SELECIONADO))
666 retorno.append("-Você finalizou o atendimento sem selecionar um diagnóstico!\n");
4e89c95d 667 else if (resultadoDiagnostico.equals(DIAGNOSTICO_INCORRETO_PLAUSIVEL))
f5ea1327 668 retorno.append("-Você não chegou ao diagnóstico previsto para esta simulação! Porém, seu diagnóstico é plausível! O diagnóstico esperado seria" + logExecucao.getPrimeiroDiagnosticoCaso().getNomeAmigavel() + ".\n");
4e89c95d 669 else
f5ea1327 670 if (logExecucao.getSegundoDiagnosticoCaso() != null)
671 retorno.append("-Você não chegou ao diagnóstico previsto para esta simulação! Seu diagnóstico não é plausível! O diagnóstico esperado seria " + logExecucao.getPrimeiroDiagnosticoCaso().getNomeAmigavel() + ", porém o diagnóstico " + logExecucao.getSegundoDiagnosticoCaso().getNomeAmigavel() + " também seria considerado plausúvel.\n");
672 else
673 retorno.append("-Você não chegou ao diagnóstico previsto para esta simulação! Seu diagnóstico não é plausível! O diagnóstico esperado seria " + logExecucao.getPrimeiroDiagnosticoCaso().getNomeAmigavel() + ".\n");
4e89c95d 674 } else
675 retorno.append("-Você finalizou o atendimento sem selecionar um diagnóstico!\n");
676
56f36e0a 677
678 // Conduta
4e89c95d 679 if (logExecucao.isConcluiuConduta()) {
680 String resultadoConduta = getResultadoConduta();
681 if (resultadoConduta.equals(CONDUTA_ADEQUADA))
682 retorno.append("-A conduta selecionada esta adequada ao previsto pela simulação!\n");
06f78c2b 683 else if (resultadoConduta.equals(CONDUTA_NAO_SELECIONADA))
684 retorno.append("-Você finalizou o atendimento sem selecionar uma conduta!\n");
4e89c95d 685 else if (resultadoConduta.equals(CONDUTA_EXCESSIVA))
686 retorno.append("-A conduta selecionada esta adequada ao previsto pela simulação, porém existem procedimentos em excesso!\n");
687 else if (resultadoConduta.equals(CONDUTA_INSUFICIENTE))
688 retorno.append("-A conduta selecionada esta adequada ao previsto pela simulação, porém a quantidade de procedimentos é insuficiente em relação ao previsto!\n");
689 else if (resultadoConduta.equals(CONDUTA_INCORRETA_COERENTE))
690 retorno.append("-A conduta selecionada esta inadequada ao previsto pela simulação, porém é coerente com o diagnóstico selecionado!\n");
691 else if (resultadoConduta.equals(CONDUTA_INCORRETA_INCOERENTE))
692 retorno.append("-A conduta selecionada esta inadequada e incoerente com o diagnóstico selecionado!\n");
693
694 String resultadoTempoConduta = getResultadoTempoConduta();
695 String resultadoTempoInvestigacao = getResultadoTempoInvestigacao();
696 if (resultadoTempoConduta != null || resultadoTempoInvestigacao != null) {
697 retorno.append("-Quanto a utilização do tempo ");
698 if (resultadoTempoInvestigacao != null && resultadoTempoConduta != null)
699 retorno.append("sua investigação e conduta foram demoradas");
700 else if (resultadoTempoInvestigacao != null)
701 retorno.append("sua investigação foi demorada");
702 else if (resultadoTempoConduta != null)
703 retorno.append("sua conduta foi demorada");
704 retorno.append("!\n");
705 }
56f36e0a 706
4e89c95d 707 String resultadoCustoConduta = getResultadoCustoConduta();
708 String resultadoCustoInvestigacao = getResultadoCustoInvestigacao();
709 if (resultadoCustoConduta != null || resultadoCustoInvestigacao != null) {
710 retorno.append("-Quanto a utilização de recursos ");
711 if (resultadoCustoInvestigacao != null && resultadoCustoConduta != null)
712 retorno.append("sua investigação e conduta foram dispendiosas");
713 else if (resultadoCustoInvestigacao != null)
714 retorno.append("sua investigação foi dispendiosa");
715 else if (resultadoCustoConduta != null)
716 retorno.append("sua conduta foi dispendiosa");
717 retorno.append("!\n");
718 }
719 } else
720 retorno.append("-Você finalizou o atendimento sem selecionar uma conduta!\n");
56f36e0a 721
25aea581 722
56f36e0a 723 // Log de execução
724 List<LogPerguntas> logPerguntas = em.createQuery("From LogPerguntas where sessaoUsuario.id=:pIdSessao and paciente.id=:pIdPaciente")
725 .setParameter("pIdSessao", sessaoUsuario.getId())
726 .setParameter("pIdPaciente", paciente.getId())
727 .getResultList();
728
729 // Mostra os sintomas esperados:
730 retorno.append("\n\nSINAIS / SINTOMAS:\nAS PERGUNTAS QUE PODERIAM FORTALECER O DIAGNÓSTICO SÃO:\n");
731 for(LogPerguntas logPergunta : logPerguntas) {
732 if (logPergunta.getTipoNodo().equals(Nodo.SINAL_SINTOMA) && logPergunta.isAtivo())
733 retorno.append(logPergunta.getPergunta() + "\n");
734 }
735
736 // Mostra os sintomas selecionados:
737 retorno.append("\n\nAS PERGUNTAS SELECIONADAS NO DECORRER DA SUA SIMULAÇÃO FORAM:\n");
738 List<Nodo> nodosInvestigacao = logExecucao.getNodosInvestigacao();
739 for(Nodo nodoInvestigacao : nodosInvestigacao) {
740 if (nodoInvestigacao.getTipo().equals(Nodo.SINAL_SINTOMA)) {
741 for(LogPerguntas logPergunta : logPerguntas) {
742 if (logPergunta.getNodo().getId() == nodoInvestigacao.getId()) {
743 retorno.append(logPergunta.getPergunta() + "\n");
744 break;
745 }
746 }
747 }
748 }
25aea581 749
56f36e0a 750
751 return retorno.toString();
733f8ea6 752 }
466e3927 753
754}