ad3ad9f6 |
1 | /* |
2 | * To change this template, choose Tools | Templates |
3 | * and open the template in the editor. |
4 | */ |
5 | package org.ufcspa.simdecs.comunicacao; |
6 | |
ad3ad9f6 |
7 | import java.io.PrintWriter; |
8 | import java.util.Date; |
9 | import java.util.Iterator; |
10 | import java.util.List; |
11 | import javax.persistence.EntityManager; |
ad3ad9f6 |
12 | import javax.servlet.http.HttpServletRequest; |
13 | import javax.servlet.http.HttpServletResponse; |
ad3ad9f6 |
14 | import org.ufcspa.simdecs.entities.*; |
15 | import org.ufcspa.simdecs.util.DbUtil; |
25aea581 |
16 | import org.ufcspa.simdecs.util.UnBBayesUtil; |
c1897a7f |
17 | import unbbayes.prs.bn.ProbabilisticNode; |
25aea581 |
18 | import unbbayes.prs.bn.TreeVariable; |
ad3ad9f6 |
19 | |
20 | /** |
21 | * |
22 | * @author maroni |
23 | */ |
cff9bc95 |
24 | public class MetodoIniciaCaso extends BaseComunicacao { |
ad3ad9f6 |
25 | |
26 | private String getPerguntaNodo(Long idNodo) { |
27 | EntityManager em = DbUtil.getInstance().getEntityManager(); |
28 | List <PerguntaNodo> perguntas = em.createQuery("From PerguntaNodo where nodo.id=:pIdNodo") |
29 | .setParameter("pIdNodo", idNodo) |
30 | .getResultList(); |
31 | |
32 | int random = (int) (1+Math.random()*perguntas.size()); |
33 | int i=1; |
34 | |
35 | for(PerguntaNodo pergunta : perguntas) { |
36 | if (i++ == random) |
37 | return pergunta.getTexto(); |
38 | } |
39 | |
40 | return ""; |
41 | } |
c1897a7f |
42 | |
ad3ad9f6 |
43 | |
25aea581 |
44 | private String getRespostaNodo(Nodo nodo, Paciente paciente) throws Exception { |
024c8c40 |
45 | EntityManager em = DbUtil.getInstance().getEntityManager(); |
c1897a7f |
46 | |
25aea581 |
47 | |
48 | UnBBayesUtil unBUtil = new UnBBayesUtil(paciente.getRede()); |
39c9eade |
49 | unBUtil.abreRede(paciente.getRede()); |
c1897a7f |
50 | |
51 | Iterator<NodoPaciente> it = em.createQuery("From NodoPaciente Where paciente.id=:pIdPaciente") |
39c9eade |
52 | .setParameter("pIdPaciente", paciente.getId()) |
c1897a7f |
53 | .getResultList() |
54 | .iterator(); |
55 | |
5123af69 |
56 | float pcProbabilidade=0; |
c1897a7f |
57 | while(it.hasNext()) { |
58 | NodoPaciente nodoPac = it.next(); |
59 | |
5123af69 |
60 | if (nodoPac.getNodo().getBogus()) { |
61 | if (nodoPac.getNodo().getId() == nodo.getId()) |
62 | pcProbabilidade = 100; |
63 | |
64 | continue; |
65 | } |
66 | |
25aea581 |
67 | ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName(nodoPac.getNodo().getNome()); |
68 | unBUtil.setNodeState(pn, "Yes", 1, "Not", 0); |
c1897a7f |
69 | } |
70 | |
5123af69 |
71 | |
72 | if (nodo.getBogus()) { |
73 | if (pcProbabilidade == 0) |
74 | pcProbabilidade = (int) (1+Math.random()*50); |
75 | } |
76 | else { |
25aea581 |
77 | pcProbabilidade = unBUtil.getProbabilidadeByState((TreeVariable) unBUtil.getNodeByName(nodo.getNome()), "Yes") * 100; |
5123af69 |
78 | } |
c1897a7f |
79 | |
be36ba96 |
80 | List <RespostaNodo> respostas = em.createQuery("From RespostaNodo where nodo.id=:pIdNodo") |
39c9eade |
81 | .setParameter("pIdNodo", nodo.getId()) |
024c8c40 |
82 | .getResultList(); |
83 | |
be36ba96 |
84 | int random = (int) (1+Math.random()*respostas.size()); |
024c8c40 |
85 | int i=1; |
86 | |
be36ba96 |
87 | for(RespostaNodo resposta : respostas) { |
c1897a7f |
88 | if (i++ == random) { |
89 | |
924227dc |
90 | List<IntervaloTabelaResposta> listaInt = em.createQuery("From IntervaloTabelaResposta Where tabelaResposta.id=:pIdTabela and :pProbabilidade between pesoMinimo and pesoMaximo") |
c1897a7f |
91 | .setParameter("pIdTabela", resposta.getTabelaResposta().getId()) |
5123af69 |
92 | .setParameter("pProbabilidade", pcProbabilidade) |
c1897a7f |
93 | .getResultList(); |
94 | |
95 | int randomInt = (int) (1+Math.random()*listaInt.size()); |
96 | int x=1; |
3c6b9f2e |
97 | for(IntervaloTabelaResposta intervalo : listaInt) { |
7dddea5a |
98 | if (x++ == random) { |
99 | String returnResposta = resposta.getTexto().replaceAll("&&tabela", intervalo.getTexto()); |
100 | |
101 | if (returnResposta.substring(0,1).equals(returnResposta.substring(0,1).toLowerCase())) |
102 | return returnResposta.substring(0,1).toUpperCase() + returnResposta.substring(1); |
ff92a9b4 |
103 | else |
104 | return returnResposta; |
7dddea5a |
105 | |
106 | } |
c1897a7f |
107 | } |
108 | } |
024c8c40 |
109 | } |
7470aeb9 |
110 | |
024c8c40 |
111 | return ""; |
112 | } |
113 | |
ad3ad9f6 |
114 | private String getDependencia(Long idNodo) { |
115 | return ""; |
116 | } |
117 | |
56f36e0a |
118 | |
119 | private void registraPerguntaLog(EntityManager em, SessaoUsuario sessaoUsuario, Paciente paciente, Nodo nodo, boolean ativo, String tipoNodo, String pergunta, String nomeAmigavel, String resposta) { |
120 | if (!em.getTransaction().isActive()) |
121 | em.getTransaction().begin(); |
122 | |
123 | LogPerguntas logPerguntas = new LogPerguntas(); |
124 | logPerguntas.setNodo(nodo); |
125 | logPerguntas.setAtivo(ativo); |
126 | logPerguntas.setPaciente(paciente); |
127 | logPerguntas.setPergunta(pergunta); |
128 | logPerguntas.setSessaoUsuario(sessaoUsuario); |
129 | logPerguntas.setTipoNodo(tipoNodo); |
130 | logPerguntas.setNomeAmigavel(nomeAmigavel); |
131 | logPerguntas.setResposta(resposta); |
132 | |
133 | em.persist(logPerguntas); |
134 | em.getTransaction().commit(); |
135 | |
136 | } |
137 | |
138 | |
cff9bc95 |
139 | @Override |
140 | protected void executaServico(EntityManager em, HttpServletRequest request, HttpServletResponse response, PrintWriter out) throws Exception |
141 | { |
ad3ad9f6 |
142 | response.setContentType("text/html;charset=UTF-8"); |
cff9bc95 |
143 | Caso caso = em.find(Caso.class, Long.parseLong(request.getParameter("idcaso"))); |
ad3ad9f6 |
144 | |
39c9eade |
145 | |
cff9bc95 |
146 | if (!em.getTransaction().isActive()) { |
147 | em.getTransaction().begin(); |
148 | } |
ad3ad9f6 |
149 | |
cff9bc95 |
150 | // Cria sessao |
151 | SessaoUsuario sessaoUsuario = new SessaoUsuario(); |
152 | sessaoUsuario.setData(new Date()); |
153 | sessaoUsuario.setCaso(caso); |
154 | em.persist(sessaoUsuario); |
26b5eb8a |
155 | //em.flush(); |
ad3ad9f6 |
156 | |
cff9bc95 |
157 | // Logo inicio do caso. |
158 | Log log = new Log(); |
159 | log.setTipo(em.find(TipoEventoLog.class, TipoEventoLog.INICIO_CASO)); |
160 | log.setCaso(caso); |
161 | log.setData(new Date()); |
162 | log.setSessaoUsuario(sessaoUsuario); |
163 | |
164 | |
165 | em.persist(log); |
166 | |
167 | |
168 | em.getTransaction().commit(); |
169 | |
170 | |
e5335b9d |
171 | out.println("<xml>"); |
28042ed9 |
172 | out.println(" <caso uid=\"caso-" + caso.getId() + "\" sessao=\"" + sessaoUsuario.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">"); |
cff9bc95 |
173 | |
174 | Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso").setParameter("pIdCaso", caso.getId()).getResultList().iterator(); |
175 | while (itPac.hasNext()) { |
176 | Paciente paciente = itPac.next(); |
177 | out.println(" <ator uid=\"" + paciente.getId() + "\" tipo=\"paciente\" nome=\"" + paciente.getNome() + "\" modelo=\"" + paciente.getModelo() + "\" idade=\"" + paciente.getIdade() + "\" peso=\"" + paciente.getPeso() + "\" altura=\"" + paciente.getAltura() + "\" >"); |
178 | |
179 | out.println(" <etapa uid=\"etapa-1\" nome=\"Investigação\" sequencia=\"1\" tipo=\"investigacao\">"); |
180 | |
181 | // Sinais e sintomas |
182 | out.println(" <perguntar_sintoma uid=\"perguntar-sintoma-" + paciente.getId() + "\" descricao=\"Perguntar Sinais/Sintomas\">"); |
183 | List<NodoPaciente> nodos = em.createQuery("From NodoPaciente Where paciente.id=:pIDPaciente").setParameter("pIDPaciente", paciente.getId()).getResultList(); |
184 | for (NodoPaciente nodo : nodos) { |
185 | if (!nodo.getNodo().getTipo().equals(Nodo.SINAL_SINTOMA) && !nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) { |
186 | continue; |
ad3ad9f6 |
187 | } |
cff9bc95 |
188 | |
56f36e0a |
189 | { |
190 | String pergunta = getPerguntaNodo(nodo.getNodo().getId()); |
191 | String resposta = getRespostaNodo(nodo.getNodo(), paciente); |
192 | registraPerguntaLog(em, sessaoUsuario, paciente, nodo.getNodo(), true, Nodo.SINAL_SINTOMA, pergunta, nodo.getNodo().getNomeAmigavel(), resposta); |
193 | out.println(" <sintoma uid=\"sintoma-np-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nomeCientifico=\"" + nodo.getNodo().getNome() + "\" nomePopular=\"" + pergunta + "\" imagem=\"\" som=\"\" video=\"\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" falaPaciente=\"" + resposta + "\" />"); |
194 | } |
cff9bc95 |
195 | } |
196 | |
197 | // Sinais e sintomas inativos |
198 | List<Nodo> nodosNaoSelecionados = em.createQuery("From Nodo Where rede.id=:pIDRede and id not in (Select nodo.id from NodoPaciente Where paciente.id=:pIDPaciente)").setParameter("pIDRede", paciente.getRede().getId()).setParameter("pIDPaciente", paciente.getId()).getResultList(); |
199 | for (Nodo nodo : nodosNaoSelecionados) { |
200 | if (!nodo.getTipo().equals(Nodo.SINAL_SINTOMA) && !nodo.getTipo().equals(Nodo.HISTORICO)) { |
201 | continue; |
ad3ad9f6 |
202 | } |
cff9bc95 |
203 | |
56f36e0a |
204 | { |
205 | String pergunta = getPerguntaNodo(nodo.getId()); |
206 | String resposta = getRespostaNodo(nodo, paciente); |
207 | registraPerguntaLog(em, sessaoUsuario, paciente, nodo, false, Nodo.SINAL_SINTOMA, pergunta, nodo.getNomeAmigavel(), resposta); |
208 | out.println(" <sintoma uid=\"sintoma-nd-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nomeCientifico=\"" + nodo.getNome() + "\" nomePopular=\"" + pergunta + "\" imagem=\"\" som=\"\" video=\"\" dependencia=\"" + getDependencia(nodo.getId()) + "\" falaPaciente=\"" + resposta + "\" />"); |
209 | } |
cff9bc95 |
210 | } |
211 | |
212 | out.println(" </perguntar_sintoma>"); |
213 | |
214 | // Exame Físico |
215 | out.println(" <realiza_exame_fisico uid=\"realiza-exame-fisico-" + paciente.getId() + "\" descricao=\"Realizar Exame Físico\">"); |
216 | for (NodoPaciente nodo : nodos) { |
217 | if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO)) { |
218 | continue; |
ad3ad9f6 |
219 | } |
cff9bc95 |
220 | |
56f36e0a |
221 | { |
222 | registraPerguntaLog(em, sessaoUsuario, paciente, nodo.getNodo(), false, Nodo.EXAME_FISICO, null, nodo.getNodo().getNomeAmigavel(), null); |
223 | out.println(" <exame_fisico uid=\"exame-fisico-np-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />"); |
224 | } |
cff9bc95 |
225 | } |
226 | out.println(" </realiza_exame_fisico>"); |
227 | |
228 | // Exame Complementar |
229 | out.println(" <solicitar_exames_complementar uid=\"solicitar-exame-complementar-" + paciente.getId() + "\" descricao=\"Solicitar Exame Complementar\">\""); |
230 | for (NodoPaciente nodo : nodos) { |
231 | if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR)) { |
232 | continue; |
ad3ad9f6 |
233 | } |
cff9bc95 |
234 | |
56f36e0a |
235 | { |
236 | registraPerguntaLog(em, sessaoUsuario, paciente, nodo.getNodo(), false, Nodo.EXAME_COMPLEMENTAR, null, nodo.getNodo().getNomeAmigavel(), null); |
237 | out.println(" <exame_complementar uid=\"exame-complementar-np-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />"); |
238 | } |
cff9bc95 |
239 | } |
240 | out.println(" </solicitar_exames_complementar>"); |
241 | /* |
242 | * // historico for(NodoPaciente nodo : nodos) { if |
243 | * (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) continue; |
244 | * |
245 | * out.println(" <historico_medico uid=\"historico-medico-" + |
246 | * nodo.getId() + "\" dependencia=\"" + |
247 | * getDependencia(nodo.getNodo().getId()) + "\" |
248 | * descricao=\"Histórico Médico\" historico=\"" + |
249 | * nodo.getNodo().getNomeAmigavel() + "\" imagem=\"\" som=\"\" |
250 | * video=\"\" />"); } |
251 | */ |
252 | out.println(" <historico_medico uid=\"historico-medico-1" + ":paciente-" + paciente.getId() + "\" dependencia=\"\" descricao=\"Histórico Médico\" historico=\"" + paciente.getHistorico() + "\" imagem=\"\" som=\"\" video=\"\" />"); |
253 | |
254 | |
255 | out.println(" </etapa>"); |
256 | |
257 | out.println(" <etapa uid=\"etapa-2\" nome=\"Diagnóstico\" sequencia=\"2\" tipo=\"diagnostico\">"); |
258 | Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.DIAGNOSTICO).getResultList().iterator(); |
259 | while (itDiagnosticos.hasNext()) { |
260 | Nodo nodo = itDiagnosticos.next(); |
56f36e0a |
261 | { |
262 | String resposta = getPerguntaNodo(nodo.getId()); |
263 | registraPerguntaLog(em, sessaoUsuario, paciente, nodo, false, Nodo.DIAGNOSTICO, null, nodo.getNomeAmigavel(), resposta); |
264 | out.println(" <diagnostico uid=\"diagnostico-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + resposta + "\" />"); |
265 | } |
cff9bc95 |
266 | } |
267 | out.println(" </etapa>"); |
268 | |
269 | out.println(" <etapa uid=\"etapa-3\" nome=\"Conduta\" sequencia=\"3\" tipo=\"conduta\">"); |
270 | Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.CONDUTA).getResultList().iterator(); |
271 | while (itConduta.hasNext()) { |
272 | Nodo nodo = itConduta.next(); |
56f36e0a |
273 | { |
274 | String resposta = getPerguntaNodo(nodo.getId()); |
275 | registraPerguntaLog(em, sessaoUsuario, paciente, nodo, false, Nodo.CONDUTA, null, nodo.getNomeAmigavel(), resposta); |
276 | out.println(" <conduta uid=\"conduta-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + resposta + "\" />"); |
277 | } |
cff9bc95 |
278 | } |
279 | out.println(" </etapa>"); |
280 | out.println(" </ator>"); |
ad3ad9f6 |
281 | } |
ad3ad9f6 |
282 | |
ad3ad9f6 |
283 | |
28042ed9 |
284 | out.println(" </caso>"); |
e5335b9d |
285 | out.println(" <execucao sucesso=\"sim\" />" ); |
286 | out.println("</xml>"); |
ad3ad9f6 |
287 | } |
288 | |
ad3ad9f6 |
289 | } |