/**
   * Registra la informacion de cuenta 123 de cliente
   *
   * @param cliente Bean de datos de cliente
   * @param cuenta Cuenta dar de alta de tipo String
   * @param vista Cuenta vista a asociar al programa de tipo String
   * @param tipo Tipo de registro de tipo String
   * @param bitacora Objeto de bitacora de tipo BitacoraBean
   * @param token Token a validar de tipo String
   * @return respuesta de actualizacion de cuenta 123
   * @throws Excepcion de negocio si falla la operacion
   */
  public String registraCuenta123(
      ClienteBean cliente,
      String cuenta,
      String vista,
      String tipo,
      BitacoraBean bitacora,
      String token)
      throws BusinessException {

    SantanderReferenciaService srs = null;
    CuentaBean cuentaCheques = new CuentaBean();
    Validator.valida(cliente, "A123", token, bitacora);

    cuentaCheques.setNumeroCuenta(cuenta);
    boolean isCuentaCliente = Validator.isCuentaCliente(cuentaCheques, cliente.getCuentasPropias());

    if (!isCuentaCliente) {
      throw new BusinessException("EBL-06");
    }

    srs = commonService.getReferencia(bitacora.getNombreClase());

    SantanderMttoPrograma123 programa123 = new SantanderMttoPrograma123();

    programa123.setCliente(cliente.getClaveCliente());
    programa123.setCuenta(cuenta);
    programa123.setCuentaVista(vista);
    programa123.setTipoOper("A");

    programa123.ejecuta();

    bitacora.setNumeroReferencia(srs.getNumReferencia());
    bitacora.setClaveUsuario(cliente.getClaveCliente());
    bitacora.setCuentaOrigen(cuentaCheques.getNumeroCuenta());
    bitacora.setCuentaDestino(vista);
    bitacora.setClaveConcepto("A123");
    bitacora.setEdoProgramada(programa123.getCodStatus() == 0 ? "A" : "R");
    bitacora.setTipoCuentaDestino("PR");
    bitacora.setMensaje("A123" + programa123.getMsgStatus().substring(4));

    commonService.registrarBitacora(bitacora);

    if (programa123.getCodStatus() == 0) {
      notificaAlta(cliente, srs, "altaP123", cuenta);
    } else {
      int[] estatusValidos = {9, 11, 14, 20, 29, 35, 36, 39, 112, 114, 115, 132, 133};

      if (ArrayUtils.contains(estatusValidos, programa123.getCodStatus())) {
        throw new BusinessException("A123-" + programa123.getCodStatus());
      }
    }
    return String.valueOf(srs.getNumReferencia());
  }
  /**
   * Valida que un cliente este dado de baja al programa Santander 123
   *
   * @param codigoCliente Numero de cliente a validar
   * @return true si esta inscrito al programa, en otro caso falso.
   * @throws BusinessException por si falla la operacion al dar de baja.
   */
  public boolean isCuentaBaja123(String codigoCliente) throws BusinessException {
    SantanderMttoPrograma123 programa123 = new SantanderMttoPrograma123();
    boolean isCuentaBaja123 = false;
    programa123.setCliente(codigoCliente);
    programa123.setTipoOper("C");
    programa123.ejecuta();

    if (programa123.getCodStatus() == 0) {
      isCuentaBaja123 = true;
    } else if (programa123.getCodStatus() == 2) {
      isCuentaBaja123 = false;
    }
    return isCuentaBaja123;
  }