public void cargarHistorial_resultados() {
    // log.info("ejecutando metodo @cargarHistorial_resultados() ===> "
    // + nro_documento);
    int mayor = 0;
    Map<String, List<Presultados_paraclinicos>> mapa_resultados =
        new HashMap<String, List<Presultados_paraclinicos>>();
    for (Component row_fila : rowsResultado.getChildren()) {
      Phistorias_paraclinicos phistorias_paraclinicos =
          (Phistorias_paraclinicos) ((Row) row_fila).getValue();
      Map<String, Object> parameters = new HashMap<String, Object>();
      parameters.put("codigo_empresa", zkWindow.codigo_empresa);
      parameters.put("codigo_sucursal", zkWindow.codigo_sucursal);
      parameters.put("nro_documento", nro_documento);
      parameters.put("codigo_examen", phistorias_paraclinicos.getCodigo_examen());

      List<Presultados_paraclinicos> lista_resultados =
          zkWindow.getServiceLocator().getPresultados_paraclinicosService().listar(parameters);

      if (lista_resultados.size() > mayor) {
        mayor = lista_resultados.size();
      }

      mapa_resultados.put(phistorias_paraclinicos.getCodigo_examen(), lista_resultados);
    }

    // Generar columnas froze
    Column columna;
    Auxheader auxheader;
    for (int i = mayor; i != 0; i--) {
      columna = new Column("Fecha");
      columna.setWidth("110px");
      columnsResultados.appendChild(columna);

      columna = new Column("Resultado");
      columna.setWidth("150px");
      columnsResultados.appendChild(columna);

      auxheader = new Auxheader();
      auxheader.setLabel("Examen " + i);
      auxheader.setColspan(2);
      auxheader.setAlign("center");
      auxheader.setStyle("font-weight:bold");
      auxheadResultados.appendChild(auxheader);
    }

    for (Component row_fila : rowsResultado.getChildren()) {
      Phistorias_paraclinicos phistorias_paraclinicos =
          (Phistorias_paraclinicos) ((Row) row_fila).getValue();
      List<Presultados_paraclinicos> lista_resultados =
          mapa_resultados.get(phistorias_paraclinicos.getCodigo_examen());
      int vacias = mayor - lista_resultados.size();
      for (int i = 0; i < vacias; i++) {
        cargarHistorialResultadosParaclinicos(((Row) row_fila), null);
      }
      for (Presultados_paraclinicos presultados_paraclinicos : lista_resultados) {
        cargarHistorialResultadosParaclinicos(((Row) row_fila), presultados_paraclinicos);
      }
    }
  }
  public List<Presultados_paraclinicos> obtenerResultados_paraclinicos() {
    // log.info("ejecutando metodo @obtenerResultados_paraclinicos() ===> "
    // + nro_documento);
    List<Presultados_paraclinicos> listado = new ArrayList<Presultados_paraclinicos>();
    for (Component row_fila : rowsResultado.getChildren()) {
      Phistorias_paraclinicos phistorias_paraclinicos =
          (Phistorias_paraclinicos) ((Row) row_fila).getValue();
      Datebox datebox_fecha =
          (Datebox)
              gridResultados.getFellow(
                  "datebox_fecha_"
                      + tipo_examen
                      + "_"
                      + pcodigo_historia
                      + "_"
                      + phistorias_paraclinicos.getCodigo_examen());

      Textbox textbox_resultado =
          (Textbox)
              gridResultados.getFellow(
                  "textbox_resultado_"
                      + tipo_examen
                      + "_"
                      + pcodigo_historia
                      + "_"
                      + phistorias_paraclinicos.getCodigo_examen());

      if (!datebox_fecha.getText().isEmpty() && !textbox_resultado.getText().isEmpty()) {
        Presultados_paraclinicos presultados_paraclinicos = new Presultados_paraclinicos();
        presultados_paraclinicos.setCodigo_empresa(zkWindow.codigo_empresa);
        presultados_paraclinicos.setCodigo_sucursal(zkWindow.codigo_sucursal);
        presultados_paraclinicos.setCodigo_examen(phistorias_paraclinicos.getCodigo_examen());
        presultados_paraclinicos.setFecha(datebox_fecha.getText());
        presultados_paraclinicos.setResultado(textbox_resultado.getValue());
        presultados_paraclinicos.setNro_documento(nro_documento);

        Object valor_na = textbox_resultado.getAttribute("VALOR_NORMAL_ANORMAL");
        Object valor_descripcion_na = textbox_resultado.getAttribute("VALOR_DESCRIPCION_NA");

        if (valor_na != null) {
          if (valor_na.toString().equals("A")) {
            valor_descripcion_na = "";
          }
        }

        presultados_paraclinicos.setNormal_anormal(valor_na != null ? valor_na.toString() : "N");
        presultados_paraclinicos.setDescripcion_na(
            valor_descripcion_na != null ? valor_descripcion_na.toString() : "");

        listado.add(presultados_paraclinicos);
      }
    }
    return listado;
  }
  public String validarResultados_paraclinicos() {
    String mensaje = "";
    for (Component row_fila : rowsResultado.getChildren()) {
      Phistorias_paraclinicos phistorias_paraclinicos =
          (Phistorias_paraclinicos) ((Row) row_fila).getValue();
      Datebox datebox_fecha =
          (Datebox)
              gridResultados.getFellow(
                  "datebox_fecha_"
                      + tipo_examen
                      + "_"
                      + pcodigo_historia
                      + "_"
                      + phistorias_paraclinicos.getCodigo_examen());

      Textbox textbox_resultado =
          (Textbox)
              gridResultados.getFellow(
                  "textbox_resultado_"
                      + tipo_examen
                      + "_"
                      + pcodigo_historia
                      + "_"
                      + phistorias_paraclinicos.getCodigo_examen());

      if (!datebox_fecha.getText().isEmpty() && textbox_resultado.getText().isEmpty()) {
        mensaje =
            "Para registrar "
                + (tipo_examen.equals(TIPO_PARACLINICO)
                    ? "el resultado paraclinico"
                    : tipo_examen.equals(TIPO_VALORACION_OBSTETRICA)
                        ? "la valoracion obstetrica"
                        : "")
                + phistorias_paraclinicos.getPexamenes_paraclinicos().getNombre()
                + "' debe "
                + "ingresar la descripcion del resultado";
        break;
      } else if (datebox_fecha.getText().isEmpty() && !textbox_resultado.getText().isEmpty()) {
        mensaje =
            "Para registrar "
                + (tipo_examen.equals(TIPO_PARACLINICO)
                    ? "el resultado paraclinico"
                    : tipo_examen.equals(TIPO_VALORACION_OBSTETRICA)
                        ? "la valoracion obstetrica"
                        : "")
                + phistorias_paraclinicos.getPexamenes_paraclinicos().getNombre()
                + "' debe "
                + "ingresar la fecha del resultado";
        break;
      }
    }
    return mensaje;
  }
  private void inicializar() {
    contenedor.getChildren().clear();
    gridResultados = new Grid();
    gridResultados.setMold("paging");
    gridResultados.setPageSize(20);
    auxheadResultados = new Auxhead();
    columnsResultados = new Columns();

    Auxheader auxheader = new Auxheader();
    auxheader.setAlign("center");
    if (tipo_examen.equals(TIPO_PARACLINICO)) {
      auxheader.setLabel("REGISTROS DE RESULTADOS PARACLINICOS");
    } else if (tipo_examen.equals(TIPO_VALORACION_OBSTETRICA)) {
      auxheader.setLabel("REGISTROS DE VALORACION OBSTETRICA");
    }
    auxheader.setColspan(3);
    auxheadResultados.appendChild(auxheader);

    gridResultados.appendChild(auxheadResultados);

    Column column = new Column("");
    if (tipo_examen.equals(TIPO_PARACLINICO)) {
      column.setLabel("Paraclinico");
    } else if (tipo_examen.equals(TIPO_VALORACION_OBSTETRICA)) {
      column.setLabel("V. obstetrica");
    }
    column.setWidth("170px");
    columnsResultados.appendChild(column);

    column = new Column("Fecha");
    column.setWidth("120px");
    columnsResultados.appendChild(column);

    column = new Column("Resultado");
    column.setWidth("120px");
    columnsResultados.appendChild(column);

    gridResultados.appendChild(columnsResultados);

    Frozen frozen = new Frozen();
    frozen.appendChild(new Div());
    frozen.setColumns(3);

    gridResultados.appendChild(frozen);

    rowsResultado = new Rows();

    Map<String, Object> parametros = new HashMap<String, Object>();
    parametros.put("codigo_empresa", zkWindow.codigo_empresa);
    parametros.put("codigo_sucursal", zkWindow.codigo_sucursal);
    parametros.put("codigo_historia", pcodigo_historia);
    parametros.put("tipo_examen", tipo_examen);

    List<Phistorias_paraclinicos> listado =
        zkWindow.getServiceLocator().getPhistorias_paraclinicosService().listar(parametros);

    for (Phistorias_paraclinicos phistorias_paraclinicos : listado) {
      Row row_fila = new Row();
      Cell celda =
          Utilidades.obtenerCell(
              phistorias_paraclinicos.getPexamenes_paraclinicos().getNombre(),
              Textbox.class,
              true,
              true);
      row_fila.appendChild(celda);

      celda = Utilidades.obtenerCell(null, Datebox.class, false, false);
      Datebox datebox_fecha = (Datebox) celda.getFirstChild();
      datebox_fecha.setId(
          "datebox_fecha_"
              + tipo_examen
              + "_"
              + pcodigo_historia
              + "_"
              + phistorias_paraclinicos.getCodigo_examen());
      row_fila.appendChild(celda);

      celda = Utilidades.obtenerCell("", Textbox.class, true, false);
      Textbox textbox_resultado = (Textbox) celda.getFirstChild();
      textbox_resultado.setId(
          "textbox_resultado_"
              + tipo_examen
              + "_"
              + pcodigo_historia
              + "_"
              + phistorias_paraclinicos.getCodigo_examen());
      final Popup popupResultados =
          generarPopupResultados(
              textbox_resultado, false, phistorias_paraclinicos.getPexamenes_paraclinicos());
      textbox_resultado.setPopup(popupResultados);
      row_fila.appendChild(celda);

      row_fila.setValue(phistorias_paraclinicos);
      rowsResultado.appendChild(row_fila);
    }

    gridResultados.appendChild(rowsResultado);

    contenedor.appendChild(gridResultados);
  }