private String VerificaUsuario(XmlLoteResultadoInterface loteResultadoInterface) {
    LabUsuario labUsuario = null;
    String usuStUsuario = null;

    if (mapUsuario.containsKey(loteResultadoInterface.getUsuStCodigo())) {
      labUsuario = mapUsuario.get(loteResultadoInterface.getUsuStCodigo());
    } else {
      labUsuario =
          (LabUsuario)
              OracleHelper.getObject(
                  LabUsuario.class,
                  loteResultadoInterface.getUsuStCodigo(),
                  loteResultadoInterface.getStrDbName());

      if (labUsuario != null) {
        mapUsuario.put(labUsuario.getUniStCodigo(), labUsuario);
      }
    }

    if (loteResultadoInterface.getLegStcodigo().equals("010")) {
      if (labUsuario != null) {
        usuStUsuario = labUsuario.getUsuStCodigo();
      } else {
        usuStUsuario = "INTERFACE";
      }
    }

    if (labUsuario != null) {
      usuStUsuario = labUsuario.getUsuStCodigo();
    } else {
      usuStUsuario = "INTERFACE";
    }
    return usuStUsuario;
  }
  public void buildResultado(
      XmlLoteResultadoInterface loteResultadoInterface, XmlRetorno xRetorno) {

    LabRequisicao labRequisicao =
        OracleHelper.getLabRequisicaoByReq(
            loteResultadoInterface.getReqStCodigo(), loteResultadoInterface.getStrDbName());

    if (labRequisicao != null) {
      // TipoExame A - Analise Clinica e I - Imagem

      if (loteResultadoInterface.getTipoExame().equals('A')) {
        buildMapResultado(loteResultadoInterface.getResultadoExame(), loteResultadoInterface);

        if (listExameConfiguracao != null && !listExameConfiguracao.isEmpty()) {
          grapConfigIngresso(listExameConfiguracao, loteResultadoInterface);
        }

      } else {
        if (loteResultadoInterface.getTipoExame().equals('I')) {
          // TODO fazer a parte de Imagens.
        } else {
          xRetorno.getLISTA_FATALS().add("Tipo de Exame nao informado");
        }
      }
    } else {
      xRetorno.getLISTA_FATALS().add("Requisicao nao encontrada");
    }
  }
  private void AtualizaDetalheRequisicao(
      LabResultados labResultado,
      ExameConfiguracao exameConfiguracao,
      XmlLoteResultadoInterface loteResultadoInterface) {

    LabDetalheRequisicao labDetalheRequisicao =
        OracleHelper.getLabDetalherequisicaoByReqExameSeq(
            labResultado.getReqStCodigo(),
            labResultado.getExaStCodigo(),
            labResultado.getSeqStCodigo(),
            loteResultadoInterface.getStrDbName());

    if (labDetalheRequisicao != null) {

      if (exameConfiguracao.getCinChObrigatorio().equals('S')
          && exameConfiguracao.getLabResultado().getResStResultado() != null
          && exameConfiguracao.getLabResultado().getResStResultado().equals("")) {
        labDetalheRequisicao.setLegStCodigo("007");
      } else {
        labDetalheRequisicao.setLegStCodigo(loteResultadoInterface.getLegStcodigo());
      }

      labDetalheRequisicao.setMetStCodigo(exameConfiguracao.getLabResultado().getMetStCodigo());
      labDetalheRequisicao.setUsuStCodigo(VerificaUsuario(loteResultadoInterface));
      labDetalheRequisicao.setDerInRepeticao(
          exameConfiguracao.getLabResultado().getDerInRepeticao());
      labDetalheRequisicao.setDerChNaoNecessario(
          exameConfiguracao.getLabResultado().getDerChNaoNecessario());
      labDetalheRequisicao.setEmvDtValidade(exameConfiguracao.getEmvDtValidade());
      labDetalheRequisicao.setDerInValidadeRes(
          exameConfiguracao.getLabResultado().getDerInValidadeRes());
      labDetalheRequisicao.setDerChParcial(exameConfiguracao.getLabResultado().getDerChParcial());
      labDetalheRequisicao.setFrlCodigo(loteResultadoInterface.getObsStCodigo());

      if (exameConfiguracao.getEquStCodigo() != null
          && !exameConfiguracao.getEquStCodigo().equals("")) {
        labDetalheRequisicao.setEquInCodigo(exameConfiguracao.getEquInCodigo().longValue());
      }

      // TODO tratar exames assinados
      if (loteResultadoInterface.getTipoExame().equals("I")) {}

      OracleHelper.saveOrUpdateObject(labDetalheRequisicao, loteResultadoInterface.getStrDbName());
    }
  }
  private LabDetalheRequisicao inclusaoTSA(
      XmlExameResultadoInterface xmlExameResultadoInterface,
      XmlLoteResultadoInterface resultadoInterface) {

    LabDetalheRequisicao labDetalheRequisicao =
        OracleHelper.getLabDetalherequisicaoByReqExameSeq(
            resultadoInterface.getReqStCodigo(),
            xmlExameResultadoInterface.getExaStCodigo(),
            xmlExameResultadoInterface.getSeqStCodigo(),
            resultadoInterface.getStrDbName());

    if (labDetalheRequisicao == null) {
      labDetalheRequisicao =
          OracleHelper.getLabDetalherequisicaoByReqExameSeq(
              resultadoInterface.getReqStCodigo(),
              xmlExameResultadoInterface.getExaStCodigo(),
              "01",
              resultadoInterface.getStrDbName());

      LoteInterfaceReceiverSql.insertDetalherequisicao(
          labDetalheRequisicao,
          xmlExameResultadoInterface,
          resultadoInterface,
          resultadoInterface.getStrDbName());

      labDetalheRequisicao.setLegStCodigo("002");
      labDetalheRequisicao.setSeqStCodigo(xmlExameResultadoInterface.getSeqStCodigo());
      labDetalheRequisicao.setLegStCodigoFat("CON");

      OracleHelper.saveObject(labDetalheRequisicao, resultadoInterface.getStrDbName());

      labDetalheRequisicao =
          OracleHelper.getLabDetalherequisicaoByReqExameSeq(
              resultadoInterface.getReqStCodigo(),
              xmlExameResultadoInterface.getExaStCodigo(),
              xmlExameResultadoInterface.getSeqStCodigo(),
              resultadoInterface.getStrDbName());
    }
    return labDetalheRequisicao;
  }
  private void CalculaFormulaResultado(
      List<ExameConfiguracao> listExameConfiguracao,
      XmlLoteResultadoInterface loteResultadoInterface) {

    for (ExameConfiguracao exameConfiguracao : listExameConfiguracao) {

      LabDetalheRequisicao labDetalheRequisicao =
          OracleHelper.getLabDetalherequisicaoByReqExameSeq(
              loteResultadoInterface.getReqStCodigo(),
              exameConfiguracao.getExaStCodigo(),
              exameConfiguracao.getSeqStCodigo(),
              loteResultadoInterface.getStrDbName());

      if (exameConfiguracao.getCinStTipoResultado().equals("003")) {

        String resultadoFormula = null;
        String resultadoCkFormula = null;
        String vars = null;
        BigDecimal res = new BigDecimal(0);
        DecimalFormat nroFormatado = null;

        String code = exameConfiguracao.getExaStCodigo();

        if (mapResultadoFormula.containsKey(code)) {
          vars = mapResultadoFormula.get(code);
        }

        LabResultados labResultado =
            new LabResultados(
                exameConfiguracao.getReqStCodigo(),
                exameConfiguracao.getExaStCodigo(),
                exameConfiguracao.getLabResultado().getSeqStCodigo(),
                exameConfiguracao.getMetStCodigo(),
                exameConfiguracao.getEmvDtValidade(),
                exameConfiguracao.getCinStCodigo(),
                dtBanco,
                null,
                null,
                exameConfiguracao.getLabResultado().getResStComentario(),
                null,
                exameConfiguracao.getLabResultado().getResChHidden(),
                exameConfiguracao.getLabResultado().getResInSequencia(),
                exameConfiguracao.getCinStTipoResultado(),
                exameConfiguracao.getDerInCodigo(),
                exameConfiguracao.getLabResultado().getDerInValidadeRes(),
                exameConfiguracao.getLabResultado().getResClResultados(),
                exameConfiguracao.getLabResultado().getEquStCodigo(),
                exameConfiguracao.getDerChParcial(),
                exameConfiguracao.getLabResultado().getDerChNaoNecessario(),
                exameConfiguracao.getLabResultado().getDerInRepeticao());

        System.out.println(
            "exameConfiguracao.getCinStCodigo() : " + exameConfiguracao.getCinStCodigo());

        ByteArrayInputStream bais =
            new ByteArrayInputStream((vars + exameConfiguracao.getCinClFormula()).getBytes());

        if (vars != null && exameConfiguracao.getCinClFormula() != null) {
          resultadoFormula = resultFormulaAndCheck(vars, bais);

          if (exameConfiguracao.getCinInDecimais() != null) {
            nroFormatado =
                new DecimalFormat(
                    PartnerDecimal.PartnerDecimal(exameConfiguracao.getCinInDecimais()));
          } else {
            nroFormatado = new DecimalFormat(PartnerDecimal.PartnerDecimal(0));
          }

          System.out.println("resultado formula : " + resultadoFormula);

          if (resultadoFormula != null && resultadoFormula.trim().length() > 0) {
            try {
              res = new BigDecimal(resultadoFormula.replaceAll(",", "."));
              labResultado.setResStIngresso(nroFormatado.format(res));
              labResultado.setResStResultado(nroFormatado.format(res));
            } catch (NumberFormatException xcp) {
              System.out.println("do something else....................");
              labResultado.setResStIngresso(resultadoFormula);
              labResultado.setResStResultado(resultadoFormula);
            }

          } else {
            labResultado.setResStIngresso(resultadoFormula);
            labResultado.setResStResultado(resultadoFormula);
          }
        }

        if (vars != null && exameConfiguracao.getCinClCheckFormula() != null) {
          resultadoCkFormula = resultFormulaAndCheck(vars, bais);
          labResultado.setResStFlag(resultadoCkFormula);
        }

        String resultado = mapResultadoFormula.get(code);
        mapResultadoFormula.remove(code);

        if (resultadoFormula != null) {
          mapResultadoFormula.put(
              code,
              resultado
                  + exameConfiguracao.getCinStCodigo()
                  + ":=\""
                  + resultadoFormula.replace(",", ".")
                  + "\";");
        }
        OracleHelper.saveOrUpdateObject(labResultado, loteResultadoInterface.getStrDbName());
      }
    }
  }
  private void grapConfigIngresso(
      List<ExameConfiguracao> listExameConfiguracao,
      XmlLoteResultadoInterface loteResultadoInterface) {

    String reqStCodigo = null;

    for (ExameConfiguracao exameConfiguracao : listExameConfiguracao) {

      LabResultados labResultado;
      String code = exameConfiguracao.getDerInCodigo() + exameConfiguracao.getCinStCodigo();

      if (mapResultado.containsKey(code)) {
        exameConfiguracao.setLabResultado(mapResultado.get(code));

        labResultado =
            inclusaoResultados(
                exameConfiguracao, loteResultadoInterface.getStrDbName(), derInValidadeRes);
        labResultado.setEmvDtValidade(exameConfiguracao.getEmvDtValidade());
        labResultado.setResInSequencia(exameConfiguracao.getCinInSequencia().intValue());

        String codeResultado = labResultado.getExaStCodigo();
        if (!mapResultadoFormula.containsKey(codeResultado)) {
          mapResultadoFormula.put(
              codeResultado,
              labResultado.getCinStCodigo()
                  + ":=\""
                  + labResultado.getResStIngresso().replace(",", ".")
                  + "\";");
        } else {
          String strResForm = mapResultadoFormula.get(codeResultado);
          mapResultadoFormula.remove(code);
          mapResultadoFormula.put(
              codeResultado,
              strResForm
                  + labResultado.getCinStCodigo()
                  + ":=\""
                  + labResultado.getResStIngresso().replace(",", ".")
                  + "\";");
        }

        reqStCodigo = labResultado.getReqStCodigo();
        OracleHelper.saveObject(labResultado, loteResultadoInterface.getStrDbName());

        AtualizaDetalheRequisicao(labResultado, exameConfiguracao, loteResultadoInterface);
      } else {

        labResultado =
            new LabResultados(
                exameConfiguracao.getReqStCodigo(),
                exameConfiguracao.getExaStCodigo(),
                exameConfiguracao.getSeqStCodigo(),
                exameConfiguracao.getMetStCodigo(),
                exameConfiguracao.getEmvDtValidade(),
                exameConfiguracao.getCinStCodigo(),
                dtBanco,
                null,
                null,
                null,
                null,
                'N',
                derInValidadeRes,
                exameConfiguracao.getCinStTipoResultado(),
                exameConfiguracao.getDerInCodigo(),
                derInValidadeRes,
                null,
                null,
                'N',
                'N',
                null);

        exameConfiguracao.setLabResultado(labResultado);
        OracleHelper.saveObject(labResultado, loteResultadoInterface.getStrDbName());
      }
    }

    CalculaFormulaResultado(listExameConfiguracao, loteResultadoInterface);

    if (reqStCodigo != null) {
      OracleHelper.procedureExecuterPSTATUSREQUISICAO(
          reqStCodigo, loteResultadoInterface.getStrDbName());
    }
  }
  private void buildMapResultado(
      List<XmlExameResultadoInterface> resultadoExame,
      XmlLoteResultadoInterface resultadoInterface) {

    dtBanco = OracleHelper.getDateFromDB(resultadoInterface.getStrDbName());
    String resStIngresso = null;
    String resStResultado = null;

    if (resultadoExame != null && !resultadoExame.isEmpty()) {

      for (XmlExameResultadoInterface xmlExameResultadoInterface : resultadoExame) {

        LabDetalheRequisicao labDetalheRequisicao = null;

        if (xmlExameResultadoInterface.getExaStCodigo().equalsIgnoreCase("TSA")) {
          labDetalheRequisicao = inclusaoTSA(xmlExameResultadoInterface, resultadoInterface);
        } else {
          labDetalheRequisicao =
              OracleHelper.getLabDetalherequisicaoByReqExameSeq(
                  resultadoInterface.getReqStCodigo(),
                  xmlExameResultadoInterface.getExaStCodigo(),
                  xmlExameResultadoInterface.getSeqStCodigo(),
                  resultadoInterface.getStrDbName());
        }

        if (labDetalheRequisicao != null) {

          String codResultado;

          if (xmlExameResultadoInterface.getResuladosExameItem() != null
              && !xmlExameResultadoInterface.getResuladosExameItem().isEmpty()) {

            for (XmlItemExameResultadoInterface itemExameResultadoInterface :
                xmlExameResultadoInterface.getXmlResuladosExameItem()) {

              if (xmlExameResultadoInterface.getDerChNaoNecessario().equals('N')) {

                if (labDetalheRequisicao.getLegStCodigo().equals("004")
                    || labDetalheRequisicao.getLegStCodigo().equals("002")
                    || labDetalheRequisicao.getLegStCodigo().equals("001")
                    || labDetalheRequisicao.getLegStCodigo().equals("003")
                    || labDetalheRequisicao.getLegStCodigo().equals("005")
                    || labDetalheRequisicao.getLegStCodigo().equals("006")
                    || labDetalheRequisicao.getLegStCodigo().equals("007")
                    || (labDetalheRequisicao.getLegStCodigo().equals("011")
                        && labDetalheRequisicao.getDerChParcial().toString().equalsIgnoreCase("S"))
                    || (labDetalheRequisicao.getLegStCodigo().equals("016")
                        && labDetalheRequisicao.getDerChParcial().toString().equalsIgnoreCase("S"))
                    || labDetalheRequisicao.getLegStCodigo().equals("010")
                    || labDetalheRequisicao.getLegStCodigo().equals("018")
                    || labDetalheRequisicao.getLegStCodigo().equals("045")
                    || labDetalheRequisicao.getLegStCodigo().equals("012")) {

                  derInValidadeRes = labDetalheRequisicao.getDerInValidadeRes();

                  if (derInValidadeRes != null) {
                    derInValidadeRes = derInValidadeRes + 1;
                  } else {
                    derInValidadeRes = 1;
                  }

                  if (xmlExameResultadoInterface.getExaStCodigo().equals("TSA")) {
                    resStIngresso =
                        itemExameResultadoInterface
                            .getResStIngresso()
                            .replace("{", "<")
                            .replace("}", ">");
                    resStResultado =
                        itemExameResultadoInterface
                            .getResStResultado()
                            .replace("{", "<")
                            .replace("}", ">");
                  } else {
                    resStIngresso = itemExameResultadoInterface.getResStIngresso();
                    resStResultado = itemExameResultadoInterface.getResStResultado();
                  }

                  Character sParcial;

                  if (xmlExameResultadoInterface.getDerChParcial().toString().equalsIgnoreCase("F")
                      || xmlExameResultadoInterface
                          .getDerChParcial()
                          .toString()
                          .equalsIgnoreCase("N")) {
                    sParcial = 'N';
                  } else {
                    sParcial = 'S';
                  }

                  LabResultados labResultados =
                      new LabResultados(
                          resultadoInterface.getReqStCodigo(),
                          xmlExameResultadoInterface.getExaStCodigo(),
                          xmlExameResultadoInterface.getSeqStCodigo(),
                          xmlExameResultadoInterface.getMetStCodigo(),
                          null,
                          itemExameResultadoInterface.getCinStCodigo(),
                          null,
                          itemExameResultadoInterface.getResStFlag(),
                          resStIngresso,
                          itemExameResultadoInterface.getResStComentario(),
                          resStResultado,
                          itemExameResultadoInterface.getResChHidden(),
                          null,
                          resultadoInterface.getLegStcodigo(),
                          new BigDecimal(labDetalheRequisicao.getDerInCodigo()),
                          derInValidadeRes,
                          null,
                          xmlExameResultadoInterface.getEquStCodigo(),
                          sParcial,
                          xmlExameResultadoInterface.getDerChNaoNecessario(),
                          xmlExameResultadoInterface.getDerInRepeticao());

                  codResultado =
                      labDetalheRequisicao.getDerInCodigo()
                          + itemExameResultadoInterface.getCinStCodigo();

                  if (!mapResultado.containsKey(codResultado)) {
                    mapResultado.put(codResultado, labResultados);
                  }

                  listExameConfiguracao =
                      LoteInterfaceReceiverSql.ConfiguraIngresso(
                          labResultados,
                          resultadoInterface.getStrDbName(),
                          xmlExameResultadoInterface.getDerInRepeticao());
                }

              } else {
                labDetalheRequisicao.setDerChNaoNecessario('S');
                labDetalheRequisicao.setUsuStCodigo(resultadoInterface.getUsuStCodigo());
                OracleHelper.updateObject(labDetalheRequisicao, resultadoInterface.getStrDbName());
              }
            }
          }
        } else {
          System.out.println("detalherequiscao nao encontrada");
        }
      }
    } else {
      System.out.println("lista vazia.");
    }
  }