2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package org.ufcspa.simdecs.comunicacao;
7 import java.io.PrintWriter;
9 import java.util.Iterator;
10 import java.util.List;
11 import javax.persistence.EntityManager;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 import org.ufcspa.simdecs.entities.*;
15 import org.ufcspa.simdecs.util.DbUtil;
16 import org.ufcspa.simdecs.util.NodoBean;
17 import org.ufcspa.simdecs.util.UnBUtil;
18 import unbbayes.prs.bn.ProbabilisticNode;
24 public class MetodoIniciaCaso extends BaseComunicacao {
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)
32 int random = (int) (1+Math.random()*perguntas.size());
35 for(PerguntaNodo pergunta : perguntas) {
37 return pergunta.getTexto();
44 private String getRespostaNodo(Nodo nodo, Paciente paciente) {
45 EntityManager em = DbUtil.getInstance().getEntityManager();
47 UnBUtil unBUtil = UnBUtil.getInstance(paciente.getRede());
48 unBUtil.abreRede(paciente.getRede());
50 Iterator<NodoPaciente> it = em.createQuery("From NodoPaciente Where paciente.id=:pIdPaciente")
51 .setParameter("pIdPaciente", paciente.getId())
55 float pcProbabilidade=0;
57 NodoPaciente nodoPac = it.next();
59 if (nodoPac.getNodo().getBogus()) {
60 if (nodoPac.getNodo().getId() == nodo.getId())
61 pcProbabilidade = 100;
66 ProbabilisticNode pn = unBUtil.getNodeByName(nodoPac.getNodo().getNome());
67 unBUtil.ativarNodo(pn);
71 if (nodo.getBogus()) {
72 if (pcProbabilidade == 0)
73 pcProbabilidade = (int) (1+Math.random()*50);
76 NodoBean nodoBean = unBUtil.getNodoBeanByNodo(nodo);
77 pcProbabilidade = nodoBean.getPercentualProbabilidade();
80 List <RespostaNodo> respostas = em.createQuery("From RespostaNodo where nodo.id=:pIdNodo")
81 .setParameter("pIdNodo", nodo.getId())
84 int random = (int) (1+Math.random()*respostas.size());
87 for(RespostaNodo resposta : respostas) {
90 List<IntervaloTabelaResposta> listaInt = em.createQuery("From IntervaloTabelaResposta Where tabelaResposta.id=:pIdTabela and :pProbabilidade between pesoMinimo and pesoMaximo")
91 .setParameter("pIdTabela", resposta.getTabelaResposta().getId())
92 .setParameter("pProbabilidade", pcProbabilidade)
95 int randomInt = (int) (1+Math.random()*listaInt.size());
97 for(IntervaloTabelaResposta intervalo : listaInt) {
99 String returnResposta = resposta.getTexto().replaceAll("&&tabela", intervalo.getTexto());
101 if (returnResposta.substring(0,1).equals(returnResposta.substring(0,1).toLowerCase()))
102 return returnResposta.substring(0,1).toUpperCase() + returnResposta.substring(1);
104 return returnResposta;
114 private String getDependencia(Long idNodo) {
119 protected void executaServico(EntityManager em, HttpServletRequest request, HttpServletResponse response, PrintWriter out) throws Exception
121 response.setContentType("text/html;charset=UTF-8");
122 Caso caso = em.find(Caso.class, Long.parseLong(request.getParameter("idcaso")));
125 if (!em.getTransaction().isActive()) {
126 em.getTransaction().begin();
130 SessaoUsuario sessaoUsuario = new SessaoUsuario();
131 sessaoUsuario.setData(new Date());
132 sessaoUsuario.setCaso(caso);
133 em.persist(sessaoUsuario);
136 // Logo inicio do caso.
138 log.setTipo(em.find(TipoEventoLog.class, TipoEventoLog.INICIO_CASO));
140 log.setData(new Date());
141 log.setSessaoUsuario(sessaoUsuario);
147 em.getTransaction().commit();
150 out.println("<caso uid=\"caso-" + caso.getId() + "\" sessao=\"" + sessaoUsuario.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">");
152 Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso").setParameter("pIdCaso", caso.getId()).getResultList().iterator();
153 while (itPac.hasNext()) {
154 Paciente paciente = itPac.next();
155 out.println(" <ator uid=\"" + paciente.getId() + "\" tipo=\"paciente\" nome=\"" + paciente.getNome() + "\" modelo=\"" + paciente.getModelo() + "\" idade=\"" + paciente.getIdade() + "\" peso=\"" + paciente.getPeso() + "\" altura=\"" + paciente.getAltura() + "\" >");
157 out.println(" <etapa uid=\"etapa-1\" nome=\"Investigação\" sequencia=\"1\" tipo=\"investigacao\">");
160 out.println(" <perguntar_sintoma uid=\"perguntar-sintoma-" + paciente.getId() + "\" descricao=\"Perguntar Sinais/Sintomas\">");
161 List<NodoPaciente> nodos = em.createQuery("From NodoPaciente Where paciente.id=:pIDPaciente").setParameter("pIDPaciente", paciente.getId()).getResultList();
162 for (NodoPaciente nodo : nodos) {
163 if (!nodo.getNodo().getTipo().equals(Nodo.SINAL_SINTOMA) && !nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) {
167 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) + "\" />");
170 // Sinais e sintomas inativos
171 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();
172 for (Nodo nodo : nodosNaoSelecionados) {
173 if (!nodo.getTipo().equals(Nodo.SINAL_SINTOMA) && !nodo.getTipo().equals(Nodo.HISTORICO)) {
177 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) + "\" />");
180 out.println(" </perguntar_sintoma>");
183 out.println(" <realiza_exame_fisico uid=\"realiza-exame-fisico-" + paciente.getId() + "\" descricao=\"Realizar Exame Físico\">");
184 for (NodoPaciente nodo : nodos) {
185 if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO)) {
189 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 out.println(" </realiza_exame_fisico>");
193 // Exame Complementar
194 out.println(" <solicitar_exames_complementar uid=\"solicitar-exame-complementar-" + paciente.getId() + "\" descricao=\"Solicitar Exame Complementar\">\"");
195 for (NodoPaciente nodo : nodos) {
196 if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR)) {
200 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 out.println(" </solicitar_exames_complementar>");
204 * // historico for(NodoPaciente nodo : nodos) { if
205 * (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) continue;
207 * out.println(" <historico_medico uid=\"historico-medico-" +
208 * nodo.getId() + "\" dependencia=\"" +
209 * getDependencia(nodo.getNodo().getId()) + "\"
210 * descricao=\"Histórico Médico\" historico=\"" +
211 * nodo.getNodo().getNomeAmigavel() + "\" imagem=\"\" som=\"\"
214 out.println(" <historico_medico uid=\"historico-medico-1" + ":paciente-" + paciente.getId() + "\" dependencia=\"\" descricao=\"Histórico Médico\" historico=\"" + paciente.getHistorico() + "\" imagem=\"\" som=\"\" video=\"\" />");
217 out.println(" </etapa>");
219 out.println(" <etapa uid=\"etapa-2\" nome=\"Diagnóstico\" sequencia=\"2\" tipo=\"diagnostico\">");
220 Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.DIAGNOSTICO).getResultList().iterator();
221 while (itDiagnosticos.hasNext()) {
222 Nodo nodo = itDiagnosticos.next();
223 out.println(" <diagnostico uid=\"diagnostico-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + getPerguntaNodo(nodo.getId()) + "\" />");
225 out.println(" </etapa>");
227 out.println(" <etapa uid=\"etapa-3\" nome=\"Conduta\" sequencia=\"3\" tipo=\"conduta\">");
228 Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.CONDUTA).getResultList().iterator();
229 while (itConduta.hasNext()) {
230 Nodo nodo = itConduta.next();
231 out.println(" <conduta uid=\"conduta-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + getPerguntaNodo(nodo.getId()) + "\" />");
233 out.println(" </etapa>");
234 out.println(" </ator>");
238 out.println("</caso>");