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 | |
cff9bc95 |
118 | @Override |
119 | protected void executaServico(EntityManager em, HttpServletRequest request, HttpServletResponse response, PrintWriter out) throws Exception |
120 | { |
ad3ad9f6 |
121 | response.setContentType("text/html;charset=UTF-8"); |
cff9bc95 |
122 | Caso caso = em.find(Caso.class, Long.parseLong(request.getParameter("idcaso"))); |
ad3ad9f6 |
123 | |
39c9eade |
124 | |
cff9bc95 |
125 | if (!em.getTransaction().isActive()) { |
126 | em.getTransaction().begin(); |
127 | } |
ad3ad9f6 |
128 | |
cff9bc95 |
129 | // Cria sessao |
130 | SessaoUsuario sessaoUsuario = new SessaoUsuario(); |
131 | sessaoUsuario.setData(new Date()); |
132 | sessaoUsuario.setCaso(caso); |
133 | em.persist(sessaoUsuario); |
134 | em.flush(); |
ad3ad9f6 |
135 | |
cff9bc95 |
136 | // Logo inicio do caso. |
137 | Log log = new Log(); |
138 | log.setTipo(em.find(TipoEventoLog.class, TipoEventoLog.INICIO_CASO)); |
139 | log.setCaso(caso); |
140 | log.setData(new Date()); |
141 | log.setSessaoUsuario(sessaoUsuario); |
142 | |
143 | |
144 | em.persist(log); |
145 | |
146 | |
147 | em.getTransaction().commit(); |
148 | |
149 | |
28042ed9 |
150 | out.println("<xml>"); |
151 | out.println(" <caso uid=\"caso-" + caso.getId() + "\" sessao=\"" + sessaoUsuario.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">"); |
cff9bc95 |
152 | |
153 | Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso").setParameter("pIdCaso", caso.getId()).getResultList().iterator(); |
154 | while (itPac.hasNext()) { |
155 | Paciente paciente = itPac.next(); |
156 | out.println(" <ator uid=\"" + paciente.getId() + "\" tipo=\"paciente\" nome=\"" + paciente.getNome() + "\" modelo=\"" + paciente.getModelo() + "\" idade=\"" + paciente.getIdade() + "\" peso=\"" + paciente.getPeso() + "\" altura=\"" + paciente.getAltura() + "\" >"); |
157 | |
158 | out.println(" <etapa uid=\"etapa-1\" nome=\"Investigação\" sequencia=\"1\" tipo=\"investigacao\">"); |
159 | |
160 | // Sinais e sintomas |
161 | out.println(" <perguntar_sintoma uid=\"perguntar-sintoma-" + paciente.getId() + "\" descricao=\"Perguntar Sinais/Sintomas\">"); |
162 | List<NodoPaciente> nodos = em.createQuery("From NodoPaciente Where paciente.id=:pIDPaciente").setParameter("pIDPaciente", paciente.getId()).getResultList(); |
163 | for (NodoPaciente nodo : nodos) { |
164 | if (!nodo.getNodo().getTipo().equals(Nodo.SINAL_SINTOMA) && !nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) { |
165 | continue; |
ad3ad9f6 |
166 | } |
cff9bc95 |
167 | |
168 | out.println(" <sintoma uid=\"sintoma-np-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nomeCientifico=\"" + nodo.getNodo().getNome() + "\" nomePopular=\"" + getPerguntaNodo(nodo.getNodo().getId()) + "\" imagem=\"\" som=\"\" video=\"\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" falaPaciente=\"" + getRespostaNodo(nodo.getNodo(), paciente) + "\" />"); |
169 | } |
170 | |
171 | // Sinais e sintomas inativos |
172 | 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(); |
173 | for (Nodo nodo : nodosNaoSelecionados) { |
174 | if (!nodo.getTipo().equals(Nodo.SINAL_SINTOMA) && !nodo.getTipo().equals(Nodo.HISTORICO)) { |
175 | continue; |
ad3ad9f6 |
176 | } |
cff9bc95 |
177 | |
178 | out.println(" <sintoma uid=\"sintoma-nd-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nomeCientifico=\"" + nodo.getNome() + "\" nomePopular=\"" + getPerguntaNodo(nodo.getId()) + "\" imagem=\"\" som=\"\" video=\"\" dependencia=\"" + getDependencia(nodo.getId()) + "\" falaPaciente=\"" + getRespostaNodo(nodo, paciente) + "\" />"); |
179 | } |
180 | |
181 | out.println(" </perguntar_sintoma>"); |
182 | |
183 | // Exame Físico |
184 | out.println(" <realiza_exame_fisico uid=\"realiza-exame-fisico-" + paciente.getId() + "\" descricao=\"Realizar Exame Físico\">"); |
185 | for (NodoPaciente nodo : nodos) { |
186 | if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO)) { |
187 | continue; |
ad3ad9f6 |
188 | } |
cff9bc95 |
189 | |
190 | 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=\"\" />"); |
191 | } |
192 | out.println(" </realiza_exame_fisico>"); |
193 | |
194 | // Exame Complementar |
195 | out.println(" <solicitar_exames_complementar uid=\"solicitar-exame-complementar-" + paciente.getId() + "\" descricao=\"Solicitar Exame Complementar\">\""); |
196 | for (NodoPaciente nodo : nodos) { |
197 | if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR)) { |
198 | continue; |
ad3ad9f6 |
199 | } |
cff9bc95 |
200 | |
201 | 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=\"\" />"); |
202 | } |
203 | out.println(" </solicitar_exames_complementar>"); |
204 | /* |
205 | * // historico for(NodoPaciente nodo : nodos) { if |
206 | * (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) continue; |
207 | * |
208 | * out.println(" <historico_medico uid=\"historico-medico-" + |
209 | * nodo.getId() + "\" dependencia=\"" + |
210 | * getDependencia(nodo.getNodo().getId()) + "\" |
211 | * descricao=\"Histórico Médico\" historico=\"" + |
212 | * nodo.getNodo().getNomeAmigavel() + "\" imagem=\"\" som=\"\" |
213 | * video=\"\" />"); } |
214 | */ |
215 | out.println(" <historico_medico uid=\"historico-medico-1" + ":paciente-" + paciente.getId() + "\" dependencia=\"\" descricao=\"Histórico Médico\" historico=\"" + paciente.getHistorico() + "\" imagem=\"\" som=\"\" video=\"\" />"); |
216 | |
217 | |
218 | out.println(" </etapa>"); |
219 | |
220 | out.println(" <etapa uid=\"etapa-2\" nome=\"Diagnóstico\" sequencia=\"2\" tipo=\"diagnostico\">"); |
221 | Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.DIAGNOSTICO).getResultList().iterator(); |
222 | while (itDiagnosticos.hasNext()) { |
223 | Nodo nodo = itDiagnosticos.next(); |
224 | out.println(" <diagnostico uid=\"diagnostico-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + getPerguntaNodo(nodo.getId()) + "\" />"); |
225 | } |
226 | out.println(" </etapa>"); |
227 | |
228 | out.println(" <etapa uid=\"etapa-3\" nome=\"Conduta\" sequencia=\"3\" tipo=\"conduta\">"); |
229 | Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.CONDUTA).getResultList().iterator(); |
230 | while (itConduta.hasNext()) { |
231 | Nodo nodo = itConduta.next(); |
232 | out.println(" <conduta uid=\"conduta-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + getPerguntaNodo(nodo.getId()) + "\" />"); |
233 | } |
234 | out.println(" </etapa>"); |
235 | out.println(" </ator>"); |
ad3ad9f6 |
236 | } |
ad3ad9f6 |
237 | |
ad3ad9f6 |
238 | |
28042ed9 |
239 | out.println(" </caso>"); |
240 | out.println(" <execucao sucesso=\"sim\" />" ); |
241 | out.println("</xml>"); |
ad3ad9f6 |
242 | } |
243 | |
ad3ad9f6 |
244 | } |