Nova versao do simulador e tratamento de erros das chamadas.
authormaroni <maroni@192.168.1.103>
Mon, 21 May 2012 04:23:25 +0000 (01:23 -0300)
committermaroni <maroni@192.168.1.103>
Mon, 21 May 2012 04:23:25 +0000 (01:23 -0300)
12 files changed:
src/conf/persistence.xml
src/java/org/ufcspa/simdecs/comunicacao/MetodoFimCaso.java
src/java/org/ufcspa/simdecs/comunicacao/MetodoGravaHistorico.java
src/java/org/ufcspa/simdecs/comunicacao/MetodoIniciaCaso.java
src/java/org/ufcspa/simdecs/comunicacao/MetodoRegistraAcao.java
src/java/org/ufcspa/simdecs/entities/IntervencaoPedagogica.java
src/java/org/ufcspa/simdecs/entities/LogPerguntas.java [new file with mode: 0644]
src/java/org/ufcspa/simdecs/entities/TaticaPedagogica.java
src/java/org/ufcspa/simdecs/mediador/LogExecucao.java
src/java/org/ufcspa/simdecs/mediador/NegociacaoPedagogica.java
src/java/org/ufcspa/simdecs/util/UnBBayesUtil.java
web/redes/dinovo.xml [new file with mode: 0644]

index 2e3e8ce..9cb2af7 100644 (file)
@@ -21,6 +21,7 @@
     <class>org.ufcspa.simdecs.entities.Usuario</class>
     <class>org.ufcspa.simdecs.entities.TaticaPedagogica</class>
     <class>org.ufcspa.simdecs.entities.IntervencaoPedagogica</class>
+    <class>org.ufcspa.simdecs.entities.LogPerguntas</class>
     <exclude-unlisted-classes>true</exclude-unlisted-classes>
     <shared-cache-mode>NONE</shared-cache-mode>
     <properties>
index fc5c806..49d37e5 100644 (file)
@@ -6,12 +6,15 @@ package org.ufcspa.simdecs.comunicacao;
 
 import java.io.PrintWriter;
 import java.util.Date;
+import java.util.List;
 import javax.persistence.EntityManager;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.ufcspa.simdecs.entities.Log;
+import org.ufcspa.simdecs.entities.Paciente;
 import org.ufcspa.simdecs.entities.SessaoUsuario;
 import org.ufcspa.simdecs.entities.TipoEventoLog;
+import org.ufcspa.simdecs.mediador.NegociacaoPedagogica;
 
 /**
  *
@@ -48,7 +51,18 @@ public class MetodoFimCaso extends BaseComunicacao {
 
         out.println("<xml>");
 
-        out.println("   <resposta_final_mediador mensagem=\"" + this.getClass() + "\" />");
+            List<Paciente> pacientes = em.createQuery("From Paciente where caso.id=:pIdCaso")
+                                         .setParameter("pIdCaso", sessaoUsuario.getCaso().getId())
+                                         .getResultList();
+            
+            out.print("    <resposta_final_mediador mensagem=\"");
+            // Busca os pacientes
+            for(Paciente paciente : pacientes) {
+                NegociacaoPedagogica negociacao = new NegociacaoPedagogica(pIdSessao, paciente);
+                out.println(negociacao.getMensagemFinal());
+            }
+            out.print("\" />");
+            
         out.println("   <execucao sucesso=\"sim\" />" );
         out.println("</xml>");
     }
index 58e1c1e..cc08784 100644 (file)
@@ -13,6 +13,7 @@ import org.ufcspa.simdecs.entities.Log;
 import org.ufcspa.simdecs.entities.Paciente;
 import org.ufcspa.simdecs.entities.SessaoUsuario;
 import org.ufcspa.simdecs.entities.TipoEventoLog;
+import org.ufcspa.simdecs.mediador.NegociacaoPedagogica;
 
 /**
  *
@@ -60,7 +61,10 @@ public class MetodoGravaHistorico extends BaseComunicacao {
 //            out.println("   <grava_historico registrado=\"sim\" />");
 //        out.println("   <resposta_acao_mediador acao=\"sim\" problema=\"PROBLEMA: " + this.getClass() + "\" mensagem=\"MENSAGEM:" + this.getClass() + "\" />");
         out.println("   <execucao sucesso=\"sim\" />" );
-        out.println("   <resposta_acao_mediador acao=\"nao\" />");
+        NegociacaoPedagogica negociacaoPedagogica = new NegociacaoPedagogica(pIdSessao, paciente);
+        out.println("<xml>");
+            out.println(negociacaoPedagogica.getIntervencao(Log.ETAPA_INVESTIGACAO));
+        out.println("</xml>");
 
         out.println("</xml>");
     }
index 4dcd11c..e731569 100644 (file)
@@ -115,6 +115,27 @@ public class MetodoIniciaCaso extends BaseComunicacao {
         return "";
     }
 
+    
+    private void registraPerguntaLog(EntityManager em, SessaoUsuario sessaoUsuario, Paciente paciente, Nodo nodo, boolean ativo, String tipoNodo, String pergunta, String nomeAmigavel, String resposta) {
+        if (!em.getTransaction().isActive())
+            em.getTransaction().begin();
+        
+        LogPerguntas logPerguntas = new LogPerguntas();
+        logPerguntas.setNodo(nodo);
+        logPerguntas.setAtivo(ativo);
+        logPerguntas.setPaciente(paciente);
+        logPerguntas.setPergunta(pergunta);
+        logPerguntas.setSessaoUsuario(sessaoUsuario);
+        logPerguntas.setTipoNodo(tipoNodo);
+        logPerguntas.setNomeAmigavel(nomeAmigavel);
+        logPerguntas.setResposta(resposta);
+        
+        em.persist(logPerguntas);
+        em.getTransaction().commit();
+        
+    }
+    
+    
     @Override
     protected void executaServico(EntityManager em, HttpServletRequest request, HttpServletResponse response, PrintWriter out) throws Exception
     {
@@ -147,7 +168,7 @@ public class MetodoIniciaCaso extends BaseComunicacao {
         em.getTransaction().commit();
 
 
-        out.println("<xml>");
+       // out.println("<xml>");
         out.println("   <caso uid=\"caso-" + caso.getId() + "\" sessao=\"" + sessaoUsuario.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">");
 
         Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso").setParameter("pIdCaso", caso.getId()).getResultList().iterator();
@@ -165,7 +186,12 @@ public class MetodoIniciaCaso extends BaseComunicacao {
                     continue;
                 }
 
-                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) + "\" />");
+                {
+                    String pergunta = getPerguntaNodo(nodo.getNodo().getId());
+                    String resposta = getRespostaNodo(nodo.getNodo(), paciente);
+                    registraPerguntaLog(em, sessaoUsuario, paciente, nodo.getNodo(), true, Nodo.SINAL_SINTOMA, pergunta, nodo.getNodo().getNomeAmigavel(), resposta);
+                    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 + "\" />");
+                }
             }
 
             // Sinais e sintomas inativos
@@ -175,7 +201,12 @@ public class MetodoIniciaCaso extends BaseComunicacao {
                     continue;
                 }
 
-                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) + "\" />");
+                {
+                    String pergunta = getPerguntaNodo(nodo.getId());
+                    String resposta = getRespostaNodo(nodo, paciente);
+                    registraPerguntaLog(em, sessaoUsuario, paciente, nodo, false, Nodo.SINAL_SINTOMA, pergunta, nodo.getNomeAmigavel(), resposta);
+                    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 + "\" />");
+                }
             }
 
             out.println("            </perguntar_sintoma>");
@@ -187,7 +218,10 @@ public class MetodoIniciaCaso extends BaseComunicacao {
                     continue;
                 }
 
-                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=\"\" />");
+                {
+                    registraPerguntaLog(em, sessaoUsuario, paciente, nodo.getNodo(), false, Nodo.EXAME_FISICO, null, nodo.getNodo().getNomeAmigavel(), null);
+                    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=\"\" />");
+                }
             }
             out.println("            </realiza_exame_fisico>");
 
@@ -198,7 +232,10 @@ public class MetodoIniciaCaso extends BaseComunicacao {
                     continue;
                 }
 
-                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=\"\" />");
+                {
+                    registraPerguntaLog(em, sessaoUsuario, paciente, nodo.getNodo(), false, Nodo.EXAME_COMPLEMENTAR, null, nodo.getNodo().getNomeAmigavel(), null);
+                    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=\"\" />");
+                }
             }
             out.println("            </solicitar_exames_complementar>");
             /*
@@ -221,7 +258,11 @@ public class MetodoIniciaCaso extends BaseComunicacao {
             Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.DIAGNOSTICO).getResultList().iterator();
             while (itDiagnosticos.hasNext()) {
                 Nodo nodo = itDiagnosticos.next();
-                out.println("            <diagnostico uid=\"diagnostico-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + getPerguntaNodo(nodo.getId()) + "\" />");
+                {
+                    String resposta = getPerguntaNodo(nodo.getId());
+                    registraPerguntaLog(em, sessaoUsuario, paciente, nodo, false, Nodo.DIAGNOSTICO, null, nodo.getNomeAmigavel(), resposta);
+                    out.println("            <diagnostico uid=\"diagnostico-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + resposta + "\" />");
+                }
             }
             out.println("        </etapa>");
 
@@ -229,7 +270,11 @@ public class MetodoIniciaCaso extends BaseComunicacao {
             Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo").setParameter("pTipo", Nodo.CONDUTA).getResultList().iterator();
             while (itConduta.hasNext()) {
                 Nodo nodo = itConduta.next();
-                out.println("            <conduta uid=\"conduta-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + getPerguntaNodo(nodo.getId()) + "\" />");
+                {
+                    String resposta = getPerguntaNodo(nodo.getId());
+                    registraPerguntaLog(em, sessaoUsuario, paciente, nodo, false, Nodo.CONDUTA, null, nodo.getNomeAmigavel(), resposta);
+                    out.println("            <conduta uid=\"conduta-" + nodo.getId() + ":paciente-" + paciente.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"" + resposta + "\" />");
+                }
             }
             out.println("        </etapa>");
             out.println("    </ator>");
@@ -237,8 +282,8 @@ public class MetodoIniciaCaso extends BaseComunicacao {
 
 
         out.println("  </caso>");
-        out.println("  <execucao sucesso=\"sim\" />" );
-        out.println("</xml>");
+       // out.println("  <execucao sucesso=\"sim\" />" );
+      //  out.println("</xml>");
     }
 
 }
index f284af4..0bc0498 100644 (file)
@@ -87,12 +87,8 @@ public class MetodoRegistraAcao extends BaseComunicacao {
 
 
         NegociacaoPedagogica negociacaoPedagogica = new NegociacaoPedagogica(pIdSessao, paciente);
-        
         out.println("<xml>");
-//        out.println("   <resposta_acao_mediador acao=\"sim\" problema=\"PROBLEMA: " + this.getClass() + "\" mensagem=\"MENSAGEM:" + this.getClass() + "\" />");
-        out.println("   <resposta_acao_mediador acao=\"nao\" />");
-
-        out.println("   <execucao sucesso=\"sim\" />" );
+            out.println(negociacaoPedagogica.getIntervencao(etapa));
         out.println("</xml>");
     }
 
index e993426..08ef3a1 100644 (file)
@@ -25,10 +25,10 @@ public class IntervencaoPedagogica implements Serializable {
     @JoinColumn(name="sessao_id", nullable=false)
     private SessaoUsuario sessaoUsuario;
 
-    @Column(length=30, nullable=false)
+    @Column(length=100, nullable=false)
     private String estrategia;
 
-    @Column(length=30, nullable=false)
+    @Column(length=100, nullable=false)
     private String resultado;
     
     @ManyToOne
diff --git a/src/java/org/ufcspa/simdecs/entities/LogPerguntas.java b/src/java/org/ufcspa/simdecs/entities/LogPerguntas.java
new file mode 100644 (file)
index 0000000..8245b6d
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.ufcspa.simdecs.entities;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+/**
+ *
+ * @author maroni
+ */
+@Entity
+@Table(name="LOG_PERGUNTAS")
+public class LogPerguntas implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @Id
+    @SequenceGenerator(name="SeqLogPerguntas", sequenceName="SQ_LOG_PERGUNTAS")
+    @GeneratedValue(strategy = GenerationType.AUTO, generator="SeqLogPerguntas")
+    private Long id;
+
+    @Column(nullable=false)
+    private boolean ativo;
+    
+    @ManyToOne
+    @JoinColumn(name="sessao_id", nullable=false)
+    private SessaoUsuario sessaoUsuario;
+
+    @ManyToOne
+    @JoinColumn(name="paciente_id", nullable=false)
+    private Paciente paciente;
+
+    @ManyToOne
+    @JoinColumn(name="nodo_id", nullable=false)
+    private Nodo nodo;
+    
+    
+    @Column(name="tipo_nodo", length=100, nullable=false)
+    private String tipoNodo;
+
+    @Column(name="pergunta", length=2000, nullable=true)
+    private String pergunta;
+
+    @Column(name="resposta", length=2000, nullable=true)
+    private String resposta;
+
+    @Column(name="nome_amigavel", length=100, nullable=false)
+    private String nomeAmigavel;
+    
+    public Nodo getNodo() {
+        return nodo;
+    }
+
+    public void setNodo(Nodo nodo) {
+        this.nodo = nodo;
+    }
+
+    public Paciente getPaciente() {
+        return paciente;
+    }
+
+    public void setPaciente(Paciente paciente) {
+        this.paciente = paciente;
+    }
+
+    public String getPergunta() {
+        return pergunta;
+    }
+
+    public void setPergunta(String pergunta) {
+        this.pergunta = pergunta;
+    }
+
+    public SessaoUsuario getSessaoUsuario() {
+        return sessaoUsuario;
+    }
+
+    public void setSessaoUsuario(SessaoUsuario sessaoUsuario) {
+        this.sessaoUsuario = sessaoUsuario;
+    }
+
+    public String getResposta() {
+        return resposta;
+    }
+
+    public void setResposta(String resposta) {
+        this.resposta = resposta;
+    }
+    
+    public String getTipoNodo() {
+        return tipoNodo;
+    }
+
+    public void setTipoNodo(String tipoNodo) {
+        this.tipoNodo = tipoNodo;
+    }
+    
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getNomeAmigavel() {
+        return nomeAmigavel;
+    }
+
+    public void setNomeAmigavel(String nomeAmigavel) {
+        this.nomeAmigavel = nomeAmigavel;
+    }
+
+    public boolean isAtivo() {
+        return ativo;
+    }
+
+    public void setAtivo(boolean ativo) {
+        this.ativo = ativo;
+    }
+    
+    
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof LogPerguntas)) {
+            return false;
+        }
+        LogPerguntas other = (LogPerguntas) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "org.ufcspa.simdecs.entities.LogPerguntas[ id=" + id + " ]";
+    }
+    
+}
index 3fa2013..101d5be 100644 (file)
@@ -28,10 +28,10 @@ public class TaticaPedagogica implements Serializable {
         this.id = id;
     }
     
-    @Column(length=30, nullable=false)
+    @Column(length=100, nullable=false)
     private String resultado;
     
-    @Column(length=30, nullable=false)
+    @Column(length=100, nullable=false)
     private String estrategia;
     
     @Column(length=200, nullable=false)
index 3b9ca65..f9462b1 100644 (file)
@@ -10,10 +10,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import javax.persistence.EntityManager;
-import org.ufcspa.simdecs.entities.Log;
-import org.ufcspa.simdecs.entities.Nodo;
-import org.ufcspa.simdecs.entities.TipoEventoLog;
+import org.ufcspa.simdecs.entities.*;
 import org.ufcspa.simdecs.util.DbUtil;
+import org.ufcspa.simdecs.util.UnBBayesUtil;
+import unbbayes.prs.bn.ProbabilisticNode;
 
 /**
  *
@@ -59,10 +59,14 @@ public class LogExecucao {
     private Map<Long, Nodo> condutas;
     private List<Nodo> nodosInvestigacao;
     
+    private Nodo primeiroDiagnosticoCaso;
+    private Nodo segundoDiagnosticoCaso;
+    private List<Nodo> condutasIdeaisDiagnostico;
+    
     private EntityManager em;
     
     
-    public final void refresh(long idSessao, long idCaso, long idRede) {
+    public final void refresh(SessaoUsuario sessaoUsuario, Paciente paciente) throws Exception {
         
         // Inicializa Valores
         perguntasRealizadas = perguntasDisponiveis = perguntasProfessor = perguntasBogusRealizadas =
@@ -87,7 +91,7 @@ public class LogExecucao {
         em = DbUtil.getInstance().getEntityManager();
         
         Iterator<Log> itLog = em.createQuery("From Log where sessaoUsuario.id=:pIDSessao order by  data")
-                                .setParameter("pIDSessao", idSessao)
+                                .setParameter("pIDSessao", sessaoUsuario.getId())
                                 .getResultList()
                                 .iterator();
         
@@ -181,8 +185,8 @@ public class LogExecucao {
         }
 
         
-        Iterator<Nodo> itNodoProf = em.createQuery("Select np.nodo From NodoPaciente as np where np.paciente.id in (select p.id from Paciente as p where p.caso.id=:pIDCaso)")
-                                  .setParameter("pIDCaso", idCaso)
+        Iterator<Nodo> itNodoProf = em.createQuery("Select np.nodo From NodoPaciente as np where np.paciente.id=:pIDPaciente")
+                                  .setParameter("pIDPaciente", paciente.getId())
                                   .getResultList()
                                   .iterator();
         while(itNodoProf.hasNext()) {
@@ -204,7 +208,7 @@ public class LogExecucao {
         }
 
         Iterator<Nodo> itNodoDisp = em.createQuery("From Nodo where rede.id=:pIDRede")
-                                  .setParameter("pIDRede", idRede)
+                                  .setParameter("pIDRede", paciente.getRede().getId())
                                   .getResultList()
                                   .iterator();
         while(itNodoDisp.hasNext()) {
@@ -224,10 +228,22 @@ public class LogExecucao {
                 examesFisicosTempoTotal+=nodo.getTempo();               
             }
         }        
+        
+        
+        if (isConcluiuDiagnostico()) {
+            UnBBayesUtil redePaciente = UnBBayesUtil.getRedePaciente(em, paciente);
+            primeiroDiagnosticoCaso=redePaciente.getPrimeiroDiagnostico(em);
+            segundoDiagnosticoCaso=redePaciente.getSegundoDiagnostico(em);
+            
+            if (isConcluiuConduta()) {
+                redePaciente.setNodeState((ProbabilisticNode)redePaciente.getNodeByName(diagnostico.getNome()), "Yes", 1, "Not", 0);
+                condutasIdeaisDiagnostico = redePaciente.getCondutas(em);
+            }
+        }        
     }
     
-    public LogExecucao(long idSessao, long idCaso, long idRede) {
-        refresh(idSessao, idCaso, idRede);
+    public LogExecucao(SessaoUsuario sessaoUsuario, Paciente paciente) throws Exception {
+        refresh(sessaoUsuario, paciente);
     }
 
     public boolean isAbriuFichaPaciente() {
@@ -366,6 +382,30 @@ public class LogExecucao {
         return perguntasRealizadas;
     }
 
+    public List<Nodo> getCondutasIdeaisDiagnostico() {
+        return condutasIdeaisDiagnostico;
+    }
+
+    public void setCondutasIdeaisDiagnostico(List<Nodo> condutasIdeaisDiagnostico) {
+        this.condutasIdeaisDiagnostico = condutasIdeaisDiagnostico;
+    }
+
+    public Nodo getPrimeiroDiagnosticoCaso() {
+        return primeiroDiagnosticoCaso;
+    }
+
+    public void setPrimeiroDiagnosticoCaso(Nodo primeiroDiagnosticoCaso) {
+        this.primeiroDiagnosticoCaso = primeiroDiagnosticoCaso;
+    }
+
+    public Nodo getSegundoDiagnosticoCaso() {
+        return segundoDiagnosticoCaso;
+    }
+
+    public void setSegundoDiagnosticoCaso(Nodo segundoDiagnosticoCaso) {
+        this.segundoDiagnosticoCaso = segundoDiagnosticoCaso;
+    }
+
 
     
     @Override
index 12f2a2a..77d428d 100644 (file)
@@ -6,6 +6,7 @@ package org.ufcspa.simdecs.mediador;
 
 import java.util.*;
 import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
 import org.ufcspa.simdecs.entities.*;
 import org.ufcspa.simdecs.util.DbUtil;
 import org.ufcspa.simdecs.util.NodoBean;
@@ -58,6 +59,9 @@ public class NegociacaoPedagogica {
     private boolean exameComplementarExcessivo = false;
     private boolean perguntouBogus = false;
     
+    private Paciente paciente;
+    private SessaoUsuario sessaoUsuario;
+    
 
     private void populaEstrategia() throws Exception {
         // Carrega o endereço do diagrama de influencia do banco e abre a rede no disco
@@ -72,121 +76,127 @@ public class NegociacaoPedagogica {
         exameComplementarExcessivo = false;
         perguntouBogus = false;
         
-        
-        // Define a probabilidade do nodo Anamnese
-        {
-            if (logExecucao.getPerguntasDisponiveis() > 0) {
-                ProbabilisticNode nodoAnamnese = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Anamnese");
-                float pcPerguntasAnamnese = logExecucao.getPerguntasRealizadas() / logExecucao.getPerguntasDisponiveis() * 100;
-System.out.println("PERCENTUAL ANAMNESE: " + pcPerguntasAnamnese);
-                if (pcPerguntasAnamnese <= 20) {
-                    diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
-                    anamneseInsuficiente = true;
-                }
-                else if (pcPerguntasAnamnese > 20 && pcPerguntasAnamnese <= 80)
-                    diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
-                else {
-                    diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
-                    anamneseExcessiva = true;
+        if (logExecucao.isConcluiuInvestigacao()) {
+            // Define a probabilidade do nodo Anamnese
+            {
+                if (logExecucao.getPerguntasDisponiveis() > 0) {
+                    ProbabilisticNode nodoAnamnese = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Anamnese");
+                    float pcPerguntasAnamnese = logExecucao.getPerguntasRealizadas() / logExecucao.getPerguntasDisponiveis() * 100;
+    //System.out.println("PERCENTUAL ANAMNESE: " + pcPerguntasAnamnese);
+                    if (pcPerguntasAnamnese <= 25) {
+                        diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
+                        anamneseInsuficiente = true;
+                    }
+                    else if (pcPerguntasAnamnese > 25 && pcPerguntasAnamnese <= 75)
+                        diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
+                    else {
+                        diagramaInfluencia.setNodeState(nodoAnamnese, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
+                        anamneseExcessiva = true;
+                    }
                 }
             }
-        }
-    
-        // Define a probabilidade do nodo Exame Fisico
-        {
-            if (logExecucao.getExamesFisicosDisponiveis() > 0) {
-                ProbabilisticNode nodoExameFisico = (ProbabilisticNode) diagramaInfluencia.getNodeByName("ExameFisico");
-                float pcExameFisico = logExecucao.getExamesFisicosRealizados() / logExecucao.getExamesFisicosDisponiveis() * 100;
-System.out.println("PERCENTUAL EXAME FISICO: " + pcExameFisico);
-
-                if (pcExameFisico <= 20) {
-                    diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
-                    exameFisicoInsuficiente = true;                    
-                }
-                else if (pcExameFisico > 20 && pcExameFisico <= 80)
-                    diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
-                else {
-                    diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
-                    exameFisicoExcessivo = true;
+
+            // Define a probabilidade do nodo Exame Fisico
+            {
+                if (logExecucao.getExamesFisicosDisponiveis() > 0) {
+                    ProbabilisticNode nodoExameFisico = (ProbabilisticNode) diagramaInfluencia.getNodeByName("ExameFisico");
+                    float pcExameFisico = logExecucao.getExamesFisicosRealizados() / logExecucao.getExamesFisicosDisponiveis() * 100;
+    //System.out.println("PERCENTUAL EXAME FISICO: " + pcExameFisico);
+
+                    if (pcExameFisico <= 25) {
+                        diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
+                        exameFisicoInsuficiente = true;                    
+                    }
+                    else if (pcExameFisico > 25 && pcExameFisico <= 75)
+                        diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
+                    else {
+                        diagramaInfluencia.setNodeState(nodoExameFisico, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
+                        exameFisicoExcessivo = true;
+                    }
                 }
             }
-        }
-        
-        // Define a probabilidade do nodo Exame Complementar
-        {
-            if (logExecucao.getExamesComplementaresProfessor() > 0) {
-                ProbabilisticNode nodoExameComplementar = (ProbabilisticNode) diagramaInfluencia.getNodeByName("ExameComplementar");
-                float pcExameComplementar = logExecucao.getExamesComplementaresRealizados() / logExecucao.getExamesComplementaresProfessor() * 100;
-System.out.println("PERCENTUAL EXAME COMPLEMENTAR: " + pcExameComplementar);
-
-                if (pcExameComplementar <= 20) {
-                    diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
-                    exameComplementarInsuficiente = true;
-                }
-                else if (pcExameComplementar > 20 && pcExameComplementar <= 80)
-                    diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
-                else {
-                    diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
-                    exameFisicoExcessivo = true;
+
+            // Define a probabilidade do nodo Exame Complementar
+            {
+                if (logExecucao.getExamesComplementaresProfessor() > 0) {
+                    ProbabilisticNode nodoExameComplementar = (ProbabilisticNode) diagramaInfluencia.getNodeByName("ExameComplementar");
+                    float pcExameComplementar = logExecucao.getExamesComplementaresRealizados() / logExecucao.getExamesComplementaresProfessor() * 100;
+   // System.out.println("PERCENTUAL EXAME COMPLEMENTAR: " + pcExameComplementar);
+
+                    if (pcExameComplementar <= 25) {
+                        diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 1, "Suficiente", 0, "Excessiva", 0);
+                        exameComplementarInsuficiente = true;
+                    }
+                    else if (pcExameComplementar > 25 && pcExameComplementar <= 7)
+                        diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 0, "Suficiente", 1, "Excessiva", 0);
+                    else {
+                        diagramaInfluencia.setNodeState(nodoExameComplementar, "Insuficiente", 0, "Suficiente", 0, "Excessiva", 1);
+                        exameFisicoExcessivo = true;
+                    }
                 }
             }
-        }
-        
-        // Define a probabilidade do nodo abriu ficha do paciente
-        {
-            ProbabilisticNode nodoAbriuFichaPaciente = (ProbabilisticNode) diagramaInfluencia.getNodeByName("AbriuFichaPaciente");
 
-            if (logExecucao.isAbriuFichaPaciente())
-                diagramaInfluencia.setNodeState(nodoAbriuFichaPaciente, "Sim", 1, "Nao", 0);
-            else
-                diagramaInfluencia.setNodeState(nodoAbriuFichaPaciente, "Sim", 0, "Nao", 1);
-        }
-        
-        // Define a probabilidade do nodo Bogus
-        {
-            if (logExecucao.getPerguntasDisponiveis() > 0) {
-                ProbabilisticNode nodoBogus = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Bogus");
-                float pcNodoBogus = logExecucao.getPerguntasBogusRealizadas() / logExecucao.getPerguntasDisponiveis() * 100;
-System.out.println("PERCENTUAL BOGUS: " + pcNodoBogus);
-
-                if (pcNodoBogus <= 10)
-                    diagramaInfluencia.setNodeState(nodoBogus, "Presente", 0, "Ausente", 1);
-                else if (pcNodoBogus > 10 && pcNodoBogus <= 30) {
-                    diagramaInfluencia.setNodeState(nodoBogus, "Presente", 0.4f, "Ausente", 0.6f);                    
-                    perguntouBogus = true;
-                }
-                else {
-                    diagramaInfluencia.setNodeState(nodoBogus, "Presente", 1, "Ausente", 0);
-                    perguntouBogus = true;
+            // Define a probabilidade do nodo abriu ficha do paciente
+            {
+                ProbabilisticNode nodoAbriuFichaPaciente = (ProbabilisticNode) diagramaInfluencia.getNodeByName("AbriuFichaPaciente");
+
+                if (logExecucao.isAbriuFichaPaciente())
+                    diagramaInfluencia.setNodeState(nodoAbriuFichaPaciente, "Sim", 1, "Nao", 0);
+                else
+                    diagramaInfluencia.setNodeState(nodoAbriuFichaPaciente, "Sim", 0, "Nao", 1);
+            }
+
+            // Define a probabilidade do nodo Bogus
+            {
+                if (logExecucao.getPerguntasDisponiveis() > 0) {
+                    ProbabilisticNode nodoBogus = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Bogus");
+                    float pcNodoBogus = logExecucao.getPerguntasBogusRealizadas() / logExecucao.getPerguntasDisponiveis() * 100;
+//    System.out.println("PERCENTUAL BOGUS: " + pcNodoBogus);
+
+                    if (pcNodoBogus <= 10)
+                        diagramaInfluencia.setNodeState(nodoBogus, "Presente", 0, "Ausente", 1);
+                    else if (pcNodoBogus > 10 && pcNodoBogus <= 30) {
+                        diagramaInfluencia.setNodeState(nodoBogus, "Presente", 0.4f, "Ausente", 0.6f);                    
+                        perguntouBogus = true;
+                    }
+                    else {
+                        diagramaInfluencia.setNodeState(nodoBogus, "Presente", 1, "Ausente", 0);
+                        perguntouBogus = true;
+                    }
                 }
             }
         }
 
-        // Define a probabilidade de hesitação diagnostica
-        {
-            ProbabilisticNode nodoHestiacaoDiagnostico = (ProbabilisticNode) diagramaInfluencia.getNodeByName("HesitacaoDiagnostico");
-
-            if (logExecucao.getDesmarcacoesDiagnostico() == 0)
-                diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 0, "Ausente", 1);
-            else if (logExecucao.getDesmarcacoesDiagnostico() == 1)
-                diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 0.6f, "Ausente", 0.4f);
-            else
-                diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 1, "Ausente", 0);
+        
+        if (logExecucao.isConcluiuDiagnostico()) {
+            // Define a probabilidade de hesitação diagnostica
+            {
+                ProbabilisticNode nodoHestiacaoDiagnostico = (ProbabilisticNode) diagramaInfluencia.getNodeByName("HesitacaoDiagnostico");
+
+                if (logExecucao.getDesmarcacoesDiagnostico() == 0)
+                    diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 0, "Ausente", 1);
+                else if (logExecucao.getDesmarcacoesDiagnostico() == 1)
+                    diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 0.6f, "Ausente", 0.4f);
+                else
+                    diagramaInfluencia.setNodeState(nodoHestiacaoDiagnostico, "Presente", 1, "Ausente", 0);
+            }
         }
         
-        // Define a probabilidade de hesitação na conduta
-        {
-            ProbabilisticNode nodoHestiacaoConduta = (ProbabilisticNode) diagramaInfluencia.getNodeByName("HesitacaoConduta");
-
-            if (logExecucao.getDesmarcacoesConduta() == 0)
-                diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 0, "Ausente", 1);
-            else if (logExecucao.getDesmarcacoesConduta() == 1)
-                diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 0.6f, "Ausente", 0.4f);
-            else
-                diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 1, "Ausente", 0);
+        if (logExecucao.isConcluiuConduta()) {
+            // Define a probabilidade de hesitação na conduta
+            {
+                ProbabilisticNode nodoHestiacaoConduta = (ProbabilisticNode) diagramaInfluencia.getNodeByName("HesitacaoConduta");
+
+                if (logExecucao.getDesmarcacoesConduta() == 0)
+                    diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 0, "Ausente", 1);
+                else if (logExecucao.getDesmarcacoesConduta() == 1)
+                    diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 0.6f, "Ausente", 0.4f);
+                else
+                    diagramaInfluencia.setNodeState(nodoHestiacaoConduta, "Presente", 1, "Ausente", 0);
+            }
         }
 
-        // Define a probabilidade de hesitação na conduta
+        // Define o nodo confianca
         {
             ProbabilisticNode nodoConfianca = (ProbabilisticNode) diagramaInfluencia.getNodeByName("Confianca");
 
@@ -197,9 +207,117 @@ System.out.println("PERCENTUAL BOGUS: " + pcNodoBogus);
             else if (logExecucao.getConfiancaAtual().equals(Log.CONFIANCA_ALTA))
                 diagramaInfluencia.setNodeState(nodoConfianca, "Baixa", 0, "Media", 0, "Alta", 1);
         }
-        
+/*        
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("ExameComplementar"));
+    System.out.println("NODO: EXAME COMPLEMENTAR");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("ExameFisico"));
+    System.out.println("NODO: EXAME FISICO");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Anamnese"));
+    System.out.println("NODO: ANAMNESE");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Investigacao"));
+    System.out.println("NODO: INVESTIGACAO");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("AbriuFichaPaciente"));
+    System.out.println("NODO: ABRIU FICHA PACIENTE");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Bogus"));
+    System.out.println("NODO: Bogus");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("ResultadoInvestigacao"));
+    System.out.println("NODO: RESULTADO INVESTIGACAO");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Credibilidade"));
+    System.out.println("NODO: CREDIBILIDADE");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("HesitacaoDiagnostico"));
+    System.out.println("NODO: HESITACAO DIAGNOSTICO");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("HesitacaoConduta"));
+    System.out.println("NODO: HESITACAO CONDUTA");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Confianca"));
+    System.out.println("NODO: CONFIANCA");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+
+// Debug das probabilidades do DI:
+{
+    List<ProbabilisticBean> pd = diagramaInfluencia.getProbabilidadesDescOrder((TreeVariable) diagramaInfluencia.getNodeByName("Estrategia"));
+    System.out.println("NODO: ESTRATEGIA");
+    for (ProbabilisticBean p : pd) {
+        System.out.println(p.getState() + ": " + p.getProbability());
+    }
+}
+*/      
         // Mostra o resultado do diagrama de influencia
-        DecisionNode nodoTatica = (DecisionNode) diagramaInfluencia.getNodeByName("Tatica");
+        DecisionNode nodoTatica = (DecisionNode) diagramaInfluencia.getNodeByName("Estrategia");
         List<ProbabilisticBean> probs = diagramaInfluencia.getProbabilidadesDescOrder(nodoTatica);
 
         for (ProbabilisticBean prob : probs) {
@@ -208,58 +326,125 @@ System.out.println("PERCENTUAL BOGUS: " + pcNodoBogus);
         }
     }
 
-    public UnBBayesUtil processaRedeAluno(Paciente paciente) throws Exception {
+    private String getResultadoDiagnostico() throws Exception {
+        // Nao selecionou o primeiro diagnostico
+        if (logExecucao.getPrimeiroDiagnosticoCaso() != null && !logExecucao.getDiagnostico().equals(logExecucao.getPrimeiroDiagnosticoCaso()))
+            if (logExecucao.getSegundoDiagnosticoCaso() != null && logExecucao.getDiagnostico().equals(logExecucao.getSegundoDiagnosticoCaso()))
+                return DIAGNOSTICO_INCORRETO_PLAUSIVEL;
+            else
+                return DIAGNOSTICO_INCORRETO_IMPLAUSIVEL;
         
-        UnBBayesUtil unBUtil = new UnBBayesUtil(paciente.getRede());
+        return DIAGNOSTICO_ADEQUADO;
+    }
 
-        List<NodoPaciente> nodosPaciente = em.createQuery("From NodoPaciente np Where np.paciente.id=:pPaciente")
-                                             .setParameter("pPaciente", paciente.getId())
-                                             .getResultList();
-        
-        for(NodoPaciente nodo : nodosPaciente) {
-            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName(nodo.getNodo().getNome());
-            if (pn != null)
-                unBUtil.setNodeState(pn, "Yes", 1, "Not", 0);
+    private String getResultadoConduta() throws Exception {
+
+        // Caso o diagnóstico esteja adequado verifica se a conduta foi excessiva, insuficiente ou adequada!
+        if (getResultadoDiagnostico().equals(DIAGNOSTICO_ADEQUADO)) {
+
+            // Verifica se a conduta está certa ou errada!
+            boolean diferente=false;
+            for(Nodo conduta : logExecucao.getCondutas().values()) {
+                if (!logExecucao.getCondutasIdeaisDiagnostico().contains(conduta)) {
+                    diferente=true;
+                    break;
+                }
+            }
+
+            // Esta errada
+            if (diferente)
+                return CONDUTA_INCORRETA_INCOERENTE;
+            
+            // Esta certa, agora verifica se Ã© excessiva ou adequada!
+            if (logExecucao.getCondutas().size() > logExecucao.getCondutasIdeaisDiagnostico().size())
+                return CONDUTA_EXCESSIVA;
+            else if (logExecucao.getCondutas().size() < logExecucao.getCondutasIdeaisDiagnostico().size())
+                return CONDUTA_INSUFICIENTE;
+            else
+                return CONDUTA_ADEQUADA;
+        }
+        // Caso o diagnóstico esteja errado
+        else {
+            // Verifica se a conduta está certa ou errada (avalia somente a primeira)
+            for(Nodo conduta : logExecucao.getCondutas().values()) {
+                if (logExecucao.getCondutasIdeaisDiagnostico().contains(conduta))
+                    return CONDUTA_INCORRETA_COERENTE;
+                else
+                    return CONDUTA_INCORRETA_INCOERENTE;
+            }
         }
         
-        return unBUtil;
+        return null;
+    }
+    
+    private String getResultadoCustoConduta() {
+        float custoRealizado=0;
+        float custoPrevisto=0;
+        
+        for(Nodo conduta : logExecucao.getCondutas().values())
+            custoRealizado+=conduta.getCusto();
+
+        for(Nodo conduta : logExecucao.getCondutasIdeaisDiagnostico())
+            custoPrevisto+=conduta.getCusto();
         
+        if (custoPrevisto > 0) {
+            float pcCusto = custoRealizado / custoPrevisto * 100;
+            
+            if (pcCusto >= 150)
+                return CONDUTA_DISPENDIOSA;
+        }
+
+        return null;
     }
 
-    private List<NodoBean> getProbabilidades(UnBBayesUtil unBUtil, String tipoNodo) {
-        Iterator<Nodo> itNodos = em.createNamedQuery("Nodo.getByTipo")
-                                   .setParameter("pTipo", tipoNodo)
-                                   .getResultList().iterator();
+    private String getResultadoTempoConduta() {
+        float tempoRealizado=0;
+        float tempoPrevisto=0;
         
-        ArrayList nodos = new ArrayList<NodoBean>();
+        for(Nodo conduta : logExecucao.getCondutas().values())
+            tempoRealizado+=conduta.getTempo();
 
-        while(itNodos.hasNext()) {
-            Nodo nodo = itNodos.next();
-            NodoBean nodoBean = new NodoBean(nodo, (Float) unBUtil.getProbabilidadeByState((TreeVariable) unBUtil.getNodeByName(nodo.getNome()), "Yes"));
-            nodos.add(nodoBean);
-        }
+        for(Nodo conduta : logExecucao.getCondutasIdeaisDiagnostico())
+            tempoPrevisto+=conduta.getTempo();
         
-        Collections.sort(nodos, new Comparator() {
-            @Override
-            public int compare(Object o1, Object o2) {
-                NodoBean nodo1 = (NodoBean) o1;
-                NodoBean nodo2 = (NodoBean) o2;
-                
-                if (nodo1.getProbabilidade() > nodo2.getProbabilidade())
-                    return -1;
-                else if (nodo1.getProbabilidade() < nodo2.getProbabilidade())
-                    return 1;
-                else
-                    return 0;
-            }
-        });
+        if (tempoPrevisto > 0) {
+            float pcTempo = tempoRealizado / tempoPrevisto * 100;
+            
+            if (pcTempo >= 150)
+                return CONDUTA_DEMORADA;
+        }
+
+        return null;
+    }
+    
+    private String getResultadoCustoInvestigacao() {
+        // Verifica se a anamnese teve alto custo!
+        if (logExecucao.getExamesComplementaresCustoProfessor() > 0) {
+            float pcCusto = logExecucao.getExamesComplementaresCustoRealizado() / logExecucao.getExamesComplementaresCustoProfessor() * 100;
+            if (pcCusto > 150)
+                return INVESTIGACAO_DISPENDIOSA;
+        }
         
-        return nodos;
+        return null;
     }
     
+    private String getResultadoTempoInvestigacao() {
+        if (logExecucao.getExamesComplementaresTempoProfessor() > 0 || logExecucao.getExamesFisicosTempoProfessor() > 0) {
+            float pcTempo = (logExecucao.getExamesComplementaresTempoRealizado() + logExecucao.getExamesFisicosTempoRealizado()) /
+                            (logExecucao.getExamesComplementaresTempoProfessor() + logExecucao.getExamesFisicosTempoProfessor()) * 100;
+            
+            if (pcTempo > 150)
+                return INVESTIGACAO_DEMORADA;
+        }
+        
+        return null;
+    }
     
     
-    private void populaResultadoSimulacao(Paciente paciente) throws Exception {
+    private void populaResultadoSimulacao() throws Exception {
+        
+        populaEstrategia();
+        
         resultadosSimulacao = new ArrayList<String>();
         
         if (logExecucao.isConcluiuInvestigacao()) {
@@ -296,165 +481,104 @@ System.out.println("PERCENTUAL BOGUS: " + pcNodoBogus);
                 resultadosSimulacao.add(INVESTIGACAO_BOGUS);
 
             // Verifica se a anamnese teve alto custo!
-            if (logExecucao.getExamesComplementaresCustoProfessor() > 0) {
-                float pcCusto = logExecucao.getExamesComplementaresCustoRealizado() / logExecucao.getExamesComplementaresCustoProfessor() * 100;
-                if (pcCusto > 150)
-                    resultadosSimulacao.add(INVESTIGACAO_DISPENDIOSA);
-            }
-
-            // Verifica se a anamnese foi demorada!
-            if (logExecucao.getExamesComplementaresTempoProfessor() > 0 || logExecucao.getExamesFisicosTempoProfessor() > 0) {
-                float pcTempo = (logExecucao.getExamesComplementaresTempoRealizado() + logExecucao.getExamesFisicosTempoRealizado()) /
-                                (logExecucao.getExamesComplementaresTempoProfessor() + logExecucao.getExamesFisicosTempoProfessor()) * 100;
+            String resultadoCustoInvestigacao = getResultadoCustoInvestigacao();
+            if (resultadoCustoInvestigacao != null)
+                resultadosSimulacao.add(resultadoCustoInvestigacao);
 
-                if (pcTempo > 150)
-                    resultadosSimulacao.add(INVESTIGACAO_DEMORADA);
-            }
+            String resultadoTempoInvestigacao = getResultadoTempoInvestigacao();
+            if (resultadoTempoInvestigacao != null)
+                resultadosSimulacao.add(resultadoTempoInvestigacao);
         }
         
-        boolean diagnosticoCorreto = false;
-        
-        
         // Verifica se o diagnóstico foi adequado
         if (logExecucao.isConcluiuDiagnostico()) {
-            UnBBayesUtil redeAluno = processaRedeAluno(paciente);
-            List<NodoBean> diagnosticos = getProbabilidades(redeAluno, Nodo.DIAGNOSTICO);
-            Nodo primeiroDiagnostico=null;
-            Nodo segundoDiagnostico=null;
-            int i=0;
-            for(NodoBean nodo : diagnosticos) {
-                if (i == 0)
-                    primeiroDiagnostico = nodo.getNodo();
-                else if (i == 1)
-                    segundoDiagnostico = nodo.getNodo();
-                
-                if (++i == 2)
-                    break;
-            }
-
-System.out.println("PRIMEIRO: " + primeiroDiagnostico);
-System.out.println("LOG: " + logExecucao.getDiagnostico());
-            // Nao selecionou o primeiro diagnostico
-            if (primeiroDiagnostico != null && !logExecucao.getDiagnostico().equals(primeiroDiagnostico))
-                if (segundoDiagnostico != null && logExecucao.getDiagnostico().equals(segundoDiagnostico))
-                    resultadosSimulacao.add(DIAGNOSTICO_INCORRETO_PLAUSIVEL);
-                else
-                    resultadosSimulacao.add(DIAGNOSTICO_INCORRETO_IMPLAUSIVEL);
-            
-            // Registra se o diagnóstico está correto
-            if (primeiroDiagnostico.equals(logExecucao.getDiagnostico()))
-                    diagnosticoCorreto = true;
+            String resultadoDiagnostico = getResultadoDiagnostico();
+            resultadosSimulacao.add(resultadoDiagnostico);
         }
         
         
-        // Ativa condutas do diagnostico proposto
+        // Verifica as condutas
         if (logExecucao.isConcluiuConduta()) {
-            UnBBayesUtil unBUtil = new UnBBayesUtil(paciente.getRede());            
-            unBUtil.setNodeState((ProbabilisticNode)unBUtil.getNodeByName(logExecucao.getDiagnostico().getNome()), "Yes", 1, "Not", 0);
-            List<NodoBean> condutas = getProbabilidades(unBUtil, Nodo.CONDUTA);
-
-            
-            // Se o diagnóstico for incorreto verifica o tipo da conduta
-            if (!diagnosticoCorreto) {
-                
-                // Neste caso (diagnóstico incorreto) avalia somente a primeira conduta. 
-                for(NodoBean nodo : condutas) {
-                    if (logExecucao.getCondutas().containsValue(nodo.getNodo())) {
-                        resultadosSimulacao.add(CONDUTA_INCORRETA_COERENTE);
-                        return;
-                    }
-                    else {
-                        resultadosSimulacao.add(CONDUTA_INCORRETA_INCOERENTE);
-                        return;
-                    }
-                }    
-            } else {
-                // Caso o diagnostico esteja incorreto verifica se a conduta foi suficiente ou insuficiente
-                int i=1;
-                int condutasAdotadas=0;
-                int condutasPossiveis=0;
-                for(NodoBean nodo : condutas) {
-                    condutasPossiveis++;
-                    
-                    if (!logExecucao.getCondutas().containsValue(nodo.getNodo())) {
-                        if (i == 1) {
-                            resultadosSimulacao.add(CONDUTA_INCORRETA_INCOERENTE);
-                            return;
-                        }
-                    } else
-                        condutasAdotadas++;
-                        
-                    if (i++ == 2)
-                        break;
-                }
-                
-                if (condutasAdotadas < condutasPossiveis)
-                    resultadosSimulacao.add(CONDUTA_INSUFICIENTE);
-                else if (condutasAdotadas > condutasPossiveis)
-                    resultadosSimulacao.add(CONDUTA_EXCESSIVA);
-            }
+            // Verifica a adequacao da conduta
+            String resultadoConduta = getResultadoConduta();
+            resultadosSimulacao.add(resultadoConduta);
             
             
-            // AVALIAR O TEMPO E CUSTO DA CONDUTA
-            int c=1;
-            float custoTotalCondutas=0;
-            int tempoTotalConudtas=0;
-            for(NodoBean nodo : condutas) {
-                custoTotalCondutas+=nodo.getNodo().getCusto();
-                tempoTotalConudtas+=nodo.getNodo().getTempo();
-                if (c++ == 2)
-                    break;
-            }
-            
-            float custoRealizadoCondutas=0;
-            int tempoRealizadoCondutas=0;
-            for(Nodo nodoConduta : logExecucao.getCondutas().values()) {
-                custoRealizadoCondutas+=nodoConduta.getCusto();
-                tempoRealizadoCondutas+=nodoConduta.getTempo();
-            }
-                        
-            if (custoTotalCondutas > 0) {
-                float pcCustoConduta = custoRealizadoCondutas / custoTotalCondutas * 100;
-                if (pcCustoConduta >= 150)
-                    resultadosSimulacao.add(CONDUTA_DISPENDIOSA);
-            }
-            
+            // Verifica o custo
+            String resultadoCondutaCusto = getResultadoCustoConduta();
+            if (resultadoCondutaCusto != null)
+                resultadosSimulacao.add(resultadoCondutaCusto);
+
+            // Verifica o tempo
+            String resultadoCondutaTempo = getResultadoTempoConduta();
+            if (resultadoCondutaTempo != null)
+                resultadosSimulacao.add(resultadoCondutaTempo);
+        }
 
-            if (tempoRealizadoCondutas > 0) {
-                float pcTempoConduta = tempoRealizadoCondutas / tempoTotalConudtas * 100;
-                if (pcTempoConduta >= 150)
-                    resultadosSimulacao.add(CONDUTA_DEMORADA);
+        // Após a execução da procura das falhas. Caso não haja problema da a simulação como correta
+        if (logExecucao.isConcluiuInvestigacao()) {
+            if (!resultadosSimulacao.contains(INVESTIGACAO_BOGUS) && !resultadosSimulacao.contains(INVESTIGACAO_DEMORADA) &&
+                !resultadosSimulacao.contains(INVESTIGACAO_DISPENDIOSA) && !resultadosSimulacao.contains(INVESTIGACAO_EXCESSIVA) &&
+                !resultadosSimulacao.contains(INVESTIGACAO_INSUFICIENTE) ) {
+
+                resultadosSimulacao.add(INVESTIGACAO_ADEQUADA);
             }
-            
         }
     }
+    
+    public NegociacaoPedagogica(long idSessao, Paciente paciente) throws Exception {
+        em = DbUtil.getInstance().getEntityManager(); 
+        SessaoUsuario sessaoUsuario = em.find(SessaoUsuario.class, idSessao);
+        this.sessaoUsuario = sessaoUsuario;
+        this.paciente = paciente;
 
-    public NegociacaoPedagogica(long idSessao, Paciente paciente) throws Exception  {
-        em = DbUtil.getInstance().getEntityManager();
-        
         // Busca o log de execução
-        logExecucao = new LogExecucao(idSessao, paciente.getCaso().getId(), paciente.getRede().getId());
+        logExecucao = new LogExecucao(sessaoUsuario, paciente);
+    }
+    
+    public String getIntervencao(String etapa) throws Exception {        
         System.out.println(logExecucao);
        
-        populaEstrategia();
-        populaResultadoSimulacao(paciente);
-        
+        populaResultadoSimulacao();
+                
         System.out.println("ESTRATÉGIA: " + estrategia);
         System.out.println("RESULTADOS:");
         
         for(String resultado : resultadosSimulacao) {
-            System.out.println(resultado);
-/*
-            IntervencaoPedagogica intervencao = new IntervencaoPedagogica();
+            System.out.println(resultado + " - " + etapa);
+
+            // Registra somente resultados referentes a posicao atual do simulador
+            if (etapa.equals(Log.ETAPA_INVESTIGACAO) && !resultado.startsWith("INVESTIGACAO") && !resultado.equals(NAO_ABRIU_FICHA_PACIENTE))
+                continue;
 
+            // Registra somente resultados referentes a posicao atual do simulador
+            if (etapa.equals(Log.ETAPA_DIAGNOSTICO) && !resultado.startsWith("DIAGNOSTICO"))
+                continue;
+
+            // Registra somente resultados referentes a posicao atual do simulador
+            if (etapa.equals(Log.ETAPA_CONDUTA) && !resultado.startsWith("CONDUTA"))
+                continue;
+            
+                
+                
+            try {
+                IntervencaoPedagogica testarExistencia = (IntervencaoPedagogica) em.createQuery("From IntervencaoPedagogica where sessaoUsuario.id=:pSessao and estrategia=:pEstrategia and resultado=:pResultado")
+                                                      .setParameter("pSessao", sessaoUsuario.getId())
+                                                      .setParameter("pEstrategia", estrategia)
+                                                      .setParameter("pResultado", resultado)
+                                                      .getSingleResult();
+                continue;
+            } catch(NoResultException e) { }
+            
             if (!em.getTransaction().isActive())
                 em.getTransaction().begin();
             
+            IntervencaoPedagogica intervencao = new IntervencaoPedagogica();
             intervencao.setAplicada(false);
             intervencao.setDataGeracao(new Date());
             intervencao.setEstrategia(estrategia);
             intervencao.setResultado(resultado);
-            intervencao.setSessaoUsuario(em.find(SessaoUsuario.class, idSessao));
+            intervencao.setSessaoUsuario(sessaoUsuario);
             
             TaticaPedagogica tatica = (TaticaPedagogica) em.createQuery("From TaticaPedagogica where resultado=:pResultado and estrategia=:pEstrategia")
                                         .setParameter("pResultado", resultado)
@@ -463,12 +587,131 @@ System.out.println("LOG: " + logExecucao.getDiagnostico());
             intervencao.setTatica(tatica);
             
             em.persist(intervencao);
+
             em.getTransaction().commit();
+        }
+        
+        // Busca as intervencoes a serem mostradas agora!
+        {
+            StringBuilder retorno = new StringBuilder();
+
+            Iterator<IntervencaoPedagogica> itIntervencoes = em.createQuery("From IntervencaoPedagogica where sessaoUsuario.id=:pSessao and aplicada=false order by dataGeracao desc")
+                                        .setParameter("pSessao", sessaoUsuario.getId())
+                                        .getResultList()
+                                        .iterator();
+
+            if (!itIntervencoes.hasNext())
+                return "    <resposta_acao_mediador acao=\"nao\" />";
+            
+            retorno.append("    <resposta_acao_mediador acao=\"sim\" mensagem=\"Atenção\" problema=\"");
 
-*/
+            while(itIntervencoes.hasNext()) {
+                IntervencaoPedagogica intervencao = itIntervencoes.next();
+                retorno.append(intervencao.getTatica().getMensagem());
+                retorno.append("\n\n");
+
+                if (!em.getTransaction().isActive())
+                    em.getTransaction().begin();
+                
+                
+                intervencao.setAplicada(true);
+                em.merge(intervencao);
+                
+                em.getTransaction().commit();
+            
+            }
+            
+            retorno.append("\" />");
+            return retorno.toString();
         }
+    }
+    
+    public String getMensagemFinal() throws Exception {        
+        StringBuilder retorno = new StringBuilder();
+                
+        retorno.append("PACIENTE: " + paciente.getNome() + "\n\n");                        
+            
+        retorno.append("RESUMO:\n");
+            
+            
+        // Diagnostico 
+        String resultadoDiagnostico = getResultadoDiagnostico();
+        if (resultadoDiagnostico.equals(DIAGNOSTICO_ADEQUADO))
+            retorno.append("-Você chegou ao diagnóstico previsto para esta simulação!\n");
+        else if (resultadoDiagnostico.equals(DIAGNOSTICO_INCORRETO_PLAUSIVEL))
+            retorno.append("-Você não chegou ao diagnóstico previsto para esta simulação! Porém, seu diagnóstico Ã© plausível!\n");
+        else
+            retorno.append("-Você não chegou ao diagnóstico previsto para esta simulação! Seu diagnóstico não Ã© plausível!\n");
+
+        // Conduta
+        String resultadoConduta = getResultadoConduta();
+        if (resultadoConduta.equals(CONDUTA_ADEQUADA))
+            retorno.append("-A conduta selecionada esta adequada ao previsto pela simulação!\n");
+        else if (resultadoConduta.equals(CONDUTA_EXCESSIVA))
+            retorno.append("-A conduta selecionada esta adequada ao previsto pela simulação, porém existem procedimentos em excesso!\n");
+        else if (resultadoConduta.equals(CONDUTA_INSUFICIENTE))
+            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");
+        else if (resultadoConduta.equals(CONDUTA_INCORRETA_COERENTE))
+            retorno.append("-A conduta selecionada esta inadequada ao previsto pela simulação, porém Ã© coerente com o diagnóstico selecionado!\n");
+        else if (resultadoConduta.equals(CONDUTA_INCORRETA_INCOERENTE))
+            retorno.append("-A conduta selecionada esta inadequada e incoerente com o diagnóstico selecionado!\n");
+
+        String resultadoTempoConduta      = getResultadoTempoConduta();
+        String resultadoTempoInvestigacao = getResultadoTempoInvestigacao();
+        if (resultadoTempoConduta != null || resultadoTempoInvestigacao != null) {
+            retorno.append("-Quanto a utilização do tempo ");
+            if (resultadoTempoInvestigacao != null && resultadoTempoConduta != null)
+                retorno.append("sua investigação e conduta foram demoradas");
+            else if (resultadoTempoInvestigacao != null)
+                retorno.append("sua investigação foi demorada");
+            else if (resultadoTempoConduta != null)
+                retorno.append("sua conduta foi demorada");
+            retorno.append("!\n");
+        }
+
+        String resultadoCustoConduta      = getResultadoCustoConduta();
+        String resultadoCustoInvestigacao = getResultadoCustoInvestigacao();
+        if (resultadoCustoConduta != null || resultadoCustoInvestigacao != null) {
+            retorno.append("-Quanto a utilização de recursos ");
+            if (resultadoCustoInvestigacao != null && resultadoCustoConduta != null)
+                retorno.append("sua investigação e conduta foram dispendiosas");
+            else if (resultadoCustoInvestigacao != null)
+                retorno.append("sua investigação foi dispendiosa");
+            else if (resultadoCustoConduta != null)
+                retorno.append("sua conduta foi dispendiosa");
+            retorno.append("!\n");
+        }
+                
         
+        // Log de execução
+        List<LogPerguntas> logPerguntas = em.createQuery("From LogPerguntas where sessaoUsuario.id=:pIdSessao and paciente.id=:pIdPaciente")
+                                                .setParameter("pIdSessao", sessaoUsuario.getId())
+                                                .setParameter("pIdPaciente", paciente.getId())
+                                                .getResultList();
+
+        // Mostra os sintomas esperados:
+        retorno.append("\n\nSINAIS / SINTOMAS:\nAS PERGUNTAS QUE PODERIAM FORTALECER O DIAGNÓSTICO SÃO:\n");
+        for(LogPerguntas logPergunta : logPerguntas) {
+            if (logPergunta.getTipoNodo().equals(Nodo.SINAL_SINTOMA) && logPergunta.isAtivo())
+                retorno.append(logPergunta.getPergunta() + "\n");
+        }
+            
+        // Mostra os sintomas selecionados:
+        retorno.append("\n\nAS PERGUNTAS SELECIONADAS NO DECORRER DA SUA SIMULAÇÃO FORAM:\n");
+        List<Nodo> nodosInvestigacao = logExecucao.getNodosInvestigacao();
+        for(Nodo nodoInvestigacao : nodosInvestigacao) {
+            if (nodoInvestigacao.getTipo().equals(Nodo.SINAL_SINTOMA)) {
+                for(LogPerguntas logPergunta : logPerguntas) {
+                    if (logPergunta.getNodo().getId() == nodoInvestigacao.getId()) {
+                        retorno.append(logPergunta.getPergunta() + "\n");
+                        break;
+                    }
+                }
+            }
+        }
         
+
+        return retorno.toString();
     }
     
 }
index 5a826f7..33525ac 100644 (file)
@@ -7,6 +7,10 @@ package org.ufcspa.simdecs.util;
 import java.io.File;
 import java.security.InvalidParameterException;
 import java.util.*;
+import javax.persistence.EntityManager;
+import org.ufcspa.simdecs.entities.Nodo;
+import org.ufcspa.simdecs.entities.NodoPaciente;
+import org.ufcspa.simdecs.entities.Paciente;
 import org.ufcspa.simdecs.entities.Rede;
 import org.ufcspa.simdecs.exceptions.InvalidNodeState;
 import unbbayes.io.xmlbif.version6.XMLBIFIO;
@@ -166,5 +170,101 @@ public class UnBBayesUtil {
         return listProbs;
     }
     
+    public static UnBBayesUtil getRedePaciente(EntityManager em, Paciente paciente) throws Exception {
+        
+        UnBBayesUtil unBUtil = new UnBBayesUtil(paciente.getRede());
+
+        List<NodoPaciente> nodosPaciente = em.createQuery("From NodoPaciente np Where np.paciente.id=:pPaciente")
+                                             .setParameter("pPaciente", paciente.getId())
+                                             .getResultList();
+        
+        for(NodoPaciente nodo : nodosPaciente) {
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName(nodo.getNodo().getNome());
+            if (pn != null)
+                unBUtil.setNodeState(pn, "Yes", 1, "Not", 0);
+        }
+        
+        return unBUtil;
+    }
     
+    public List<NodoBean> getProbabilidades(EntityManager em, String tipoNodo) {
+        Iterator<Nodo> itNodos = em.createNamedQuery("Nodo.getByTipo")
+                                   .setParameter("pTipo", tipoNodo)
+                                   .getResultList().iterator();
+        
+        ArrayList nodos = new ArrayList<NodoBean>();
+
+        while(itNodos.hasNext()) {
+            Nodo nodo = itNodos.next();
+            NodoBean nodoBean = new NodoBean(nodo, (Float) getProbabilidadeByState((TreeVariable) getNodeByName(nodo.getNome()), "Yes"));
+            nodos.add(nodoBean);
+        }
+        
+        Collections.sort(nodos, new Comparator() {
+            @Override
+            public int compare(Object o1, Object o2) {
+                NodoBean nodo1 = (NodoBean) o1;
+                NodoBean nodo2 = (NodoBean) o2;
+                
+                if (nodo1.getProbabilidade() > nodo2.getProbabilidade())
+                    return -1;
+                else if (nodo1.getProbabilidade() < nodo2.getProbabilidade())
+                    return 1;
+                else
+                    return 0;
+            }
+        });
+        
+        return nodos;
+    }
+
+    public Nodo getPrimeiroDiagnostico(EntityManager em) {
+        List<NodoBean> diagnosticos = getProbabilidades(em, Nodo.DIAGNOSTICO);
+        for(NodoBean nodoBean : diagnosticos) {
+            return nodoBean.getNodo();
+        }
+        
+        return null;
+    }
+
+    public Nodo getSegundoDiagnostico(EntityManager em) {
+        List<NodoBean> diagnosticos = getProbabilidades(em, Nodo.DIAGNOSTICO);
+        
+        int d=1;
+        float probabilidadeDiag1=0;
+        float probabilidadeDiag2=0;
+        Nodo segundoDiagnostico=null;
+        for(NodoBean nodoBean : diagnosticos) {
+            if (d == 1)
+                probabilidadeDiag1 = nodoBean.getPercentualProbabilidade();            
+            if (d == 2) {
+                probabilidadeDiag2 = nodoBean.getPercentualProbabilidade();
+                segundoDiagnostico = nodoBean.getNodo();
+            }
+
+            if (d++ == 2)
+                break;
+        }
+        
+        float diferenca = probabilidadeDiag1 - probabilidadeDiag2;
+        if (diferenca <= 25)
+            return segundoDiagnostico;
+        else
+            return null;
+    }
+    
+    public List<Nodo> getCondutas(EntityManager em) {
+        List<NodoBean> condutas = getProbabilidades(em, Nodo.CONDUTA);
+        List<Nodo> condutasRetornar = new ArrayList<Nodo>();
+        for(NodoBean conduta : condutas) {
+            if (conduta.getPercentualProbabilidade() < 50)
+                continue;
+            
+            condutasRetornar.add(conduta.getNodo());
+//System.out.println("CONDUTA*: " + conduta.getNodo().getNomeAmigavel());
+        }
+        
+        return condutasRetornar;
+        
+    }
 }
diff --git a/web/redes/dinovo.xml b/web/redes/dinovo.xml
new file mode 100644 (file)
index 0000000..fd924a7
--- /dev/null
@@ -0,0 +1,390 @@
+<?xml version='1.0' encoding='US-ASCII'?>
+<xbifns:XMLBIF version="0.6" xmlns:xbifns="http://unbbayes.sourceforge.net/xml/XMLBIF_0_6.xsd">
+  <xbifns:header>
+    <xbifns:version>1.0</xbifns:version>
+    <xbifns:name>direvisado</xbifns:name>
+    <xbifns:creator>UnBBayes</xbifns:creator>
+  </xbifns:header>
+  <xbifns:staticProperty>
+    <xbifns:nodeSize>40</xbifns:nodeSize>
+    <xbifns:nodeFontSize>0</xbifns:nodeFontSize>
+    <xbifns:colorUtilityNode>0</xbifns:colorUtilityNode>
+    <xbifns:colorDecisionNode>0</xbifns:colorDecisionNode>
+    <xbifns:colorDiscreteProbabilisticNode>0</xbifns:colorDiscreteProbabilisticNode>
+    <xbifns:colorContinuousProbilisticNode>0</xbifns:colorContinuousProbilisticNode>
+    <xbifns:colorExplanationNode>0</xbifns:colorExplanationNode>
+  </xbifns:staticProperty>
+  <xbifns:hierarchy>
+    <xbifns:root name="root">
+      <xbifns:level name=""/>
+      <xbifns:level name="Investigacao"/>
+    </xbifns:root>
+  </xbifns:hierarchy>
+  <xbifns:network>
+    <xbifns:variables>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="130" xPos="670" type="DiscreteProbabilistic" name="ExameComplementar">
+        <xbifns:description/>
+        <xbifns:state name="Insuficiente"/>
+        <xbifns:state name="Suficiente"/>
+        <xbifns:state name="Excessiva"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="200" xPos="740" type="DiscreteProbabilistic" name="ExameFisico">
+        <xbifns:description/>
+        <xbifns:state name="Insuficiente"/>
+        <xbifns:state name="Suficiente"/>
+        <xbifns:state name="Excessiva"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="270" xPos="690" type="DiscreteProbabilistic" name="Anamnese">
+        <xbifns:description/>
+        <xbifns:state name="Insuficiente"/>
+        <xbifns:state name="Suficiente"/>
+        <xbifns:state name="Excessiva"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="90" xPos="80" type="DiscreteProbabilistic" name="Confianca">
+        <xbifns:description/>
+        <xbifns:state name="Baixa"/>
+        <xbifns:state name="Media"/>
+        <xbifns:state name="Alta"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-14336" height="60.0" width="80.0" yPos="0" xPos="199" type="Decision" name="Estrategia">
+        <xbifns:description/>
+        <xbifns:state name="Orientacao"/>
+        <xbifns:state name="Ampliacao"/>
+        <xbifns:state name="Apoio"/>
+        <xbifns:state name="Contestacao"/>
+        <xbifns:state name="Comprovacao"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-16711681" height="60.0" width="80.0" yPos="90" xPos="150" type="Utility" name="Utility">
+        <xbifns:description/>
+        <xbifns:state name="Utilidade"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="200" xPos="420" type="DiscreteProbabilistic" name="ResultadoInvestigacao">
+        <xbifns:description/>
+        <xbifns:state name="Correta"/>
+        <xbifns:state name="Incorreta"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="280" xPos="70" type="DiscreteProbabilistic" name="HesitacaoDiagnostico">
+        <xbifns:description/>
+        <xbifns:state name="Presente"/>
+        <xbifns:state name="Ausente"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="290" xPos="180" type="DiscreteProbabilistic" name="HesitacaoConduta">
+        <xbifns:description/>
+        <xbifns:state name="Presente"/>
+        <xbifns:state name="Ausente"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="110" xPos="420" type="DiscreteProbabilistic" name="Bogus">
+        <xbifns:description/>
+        <xbifns:state name="Presente"/>
+        <xbifns:state name="Ausente"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="200" xPos="570" type="DiscreteProbabilistic" name="Investigacao">
+        <xbifns:description>Investigacao</xbifns:description>
+        <xbifns:state name="Insuficiente"/>
+        <xbifns:state name="Suficiente"/>
+        <xbifns:state name="Excessiva"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="300" xPos="420" type="DiscreteProbabilistic" name="AbriuFichaPaciente">
+        <xbifns:description/>
+        <xbifns:state name="Nao"/>
+        <xbifns:state name="Sim"/>
+      </xbifns:variable>
+      <xbifns:variable perguntas="" tipo="E" tempoEtapa="0.0" custoEtapa="0.0" rgbColor="-256" height="60.0" width="80.0" yPos="200" xPos="150" type="DiscreteProbabilistic" name="Credibilidade">
+        <xbifns:description/>
+        <xbifns:state name="Alta"/>
+        <xbifns:state name="M&#233;dia"/>
+        <xbifns:state name="Baixa"/>
+      </xbifns:variable>
+    </xbifns:variables>
+    <xbifns:structure>
+      <xbifns:edge child="Utility" parent="Credibilidade"/>
+      <xbifns:edge child="Utility" parent="Confianca"/>
+      <xbifns:edge child="Utility" parent="Estrategia"/>
+      <xbifns:edge child="ResultadoInvestigacao" parent="Bogus"/>
+      <xbifns:edge child="ResultadoInvestigacao" parent="AbriuFichaPaciente"/>
+      <xbifns:edge child="ResultadoInvestigacao" parent="Investigacao"/>
+      <xbifns:edge child="Investigacao" parent="ExameFisico"/>
+      <xbifns:edge child="Investigacao" parent="Anamnese"/>
+      <xbifns:edge child="Investigacao" parent="ExameComplementar"/>
+      <xbifns:edge child="Credibilidade" parent="ResultadoInvestigacao"/>
+      <xbifns:edge child="Credibilidade" parent="HesitacaoDiagnostico"/>
+      <xbifns:edge child="Credibilidade" parent="HesitacaoConduta"/>
+    </xbifns:structure>
+    <xbifns:conditionalDistributionSet>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="ExameComplementar"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.33333298563957214</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="ExameFisico"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.33333298563957214</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="Anamnese"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.33333298563957214</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="Confianca"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.33333298563957214</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="Utility"/>
+        <xbifns:parents>
+          <xbifns:parent index="0" name="Estrategia"/>
+          <xbifns:parent index="1" name="Confianca"/>
+          <xbifns:parent index="2" name="Credibilidade"/>
+        </xbifns:parents>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="3">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="4">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="5">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="6">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="7">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="8">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="9">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="10">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="11">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="12">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="13">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="14">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="15">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="16">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="17">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="18">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="19">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="20">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="21">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="22">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="23">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="24">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="25">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="26">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="27">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="28">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="29">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="30">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="31">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="32">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="33">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="34">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="35">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="36">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="37">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="38">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="39">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="40">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="41">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="42">0.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="43">1.0</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="44">0.0</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="ResultadoInvestigacao"/>
+        <xbifns:parents>
+          <xbifns:parent index="0" name="Investigacao"/>
+          <xbifns:parent index="1" name="AbriuFichaPaciente"/>
+          <xbifns:parent index="2" name="Bogus"/>
+        </xbifns:parents>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.949999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="3">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="4">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="5">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="6">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="7">0.8999999761581421</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="8">0.75</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="9">0.25</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="10">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="11">0.6499999761581421</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="12">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="13">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="14">0.8500000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="15">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="16">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="17">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="18">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="19">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="20">0.949999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="21">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="22">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="23">0.20000000298023224</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="HesitacaoDiagnostico"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.5</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="HesitacaoConduta"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.5</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="Bogus"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.5</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="Investigacao"/>
+        <xbifns:parents>
+          <xbifns:parent index="0" name="ExameComplementar"/>
+          <xbifns:parent index="1" name="Anamnese"/>
+          <xbifns:parent index="2" name="ExameFisico"/>
+        </xbifns:parents>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.949999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.02500000037252903</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.02500000037252903</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="3">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="4">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="5">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="6">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="7">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="8">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="9">0.25</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="10">0.25</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="11">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="12">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="13">0.550000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="14">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="15">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="16">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="17">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="18">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="19">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="20">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="21">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="22">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="23">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="24">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="25">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="26">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="27">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="28">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="29">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="30">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="31">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="32">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="33">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="34">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="35">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="36">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="37">0.44999998807907104</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="38">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="39">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="40">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="41">0.33333298563957214</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="42">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="43">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="44">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="45">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="46">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="47">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="48">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="49">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="50">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="51">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="52">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="53">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="54">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="55">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="56">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="57">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="58">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="59">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="60">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="61">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="62">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="63">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="64">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="65">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="66">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="67">0.30000001192092896</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="68">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="69">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="70">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="71">0.75</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="72">0.3499999940395355</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="73">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="74">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="75">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="76">0.4000000059604645</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="77">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="78">0.2547770142555237</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="79">0.019108299165964127</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="80">0.7261149883270264</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="AbriuFichaPaciente"/>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.5</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.5</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+      <xbifns:conditionalDistribution type="Discrete">
+        <xbifns:owner name="Credibilidade"/>
+        <xbifns:parents>
+          <xbifns:parent index="0" name="HesitacaoConduta"/>
+          <xbifns:parent index="1" name="HesitacaoDiagnostico"/>
+          <xbifns:parent index="2" name="ResultadoInvestigacao"/>
+        </xbifns:parents>
+        <xbifns:CPT>
+          <xbifns:dependentParentIndex index="0">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="1">0.15000000596046448</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="2">0.699999988079071</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="3">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="4">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="5">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="6">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="7">0.6000000238418579</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="8">0.20000000298023224</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="9">0.8999999761581421</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="10">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="11">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="12">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="13">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="14">0.8999999761581421</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="15">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="16">0.05000000074505806</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="17">0.8999999761581421</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="18">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="19">0.10000000149011612</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="20">0.800000011920929</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="21">0.02500000037252903</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="22">0.02500000037252903</xbifns:dependentParentIndex>
+          <xbifns:dependentParentIndex index="23">0.949999988079071</xbifns:dependentParentIndex>
+        </xbifns:CPT>
+      </xbifns:conditionalDistribution>
+    </xbifns:conditionalDistributionSet>
+  </xbifns:network>
+</xbifns:XMLBIF>
\ No newline at end of file