Genesys Engage on-premises

 View Only


Discussion Thread View
  • 1.  Pre-dial Validations

    Posted 22 days ago

    Hi Team

    Can anybody provide me a sample pre-dial validation xml or vxml file which i can map to test...

    I have a custom table and i do not want to dial out the number if the number is present in that table..

    Regards


    #Outbound

    ------------------------------
    Santosh Sundaram
    SmartConnect Technologies Pvt. Ltd
    ------------------------------


  • 2.  RE: Pre-dial Validations

    Posted 2 hours ago
    <?xml version="1.0" encoding="utf-8"?>
    <scxml xmlns="http://www.w3.org/2005/07/scxml"
    xmlns:ocs="http://genesyslabs.com/schemas/ocs/treatments"
    version="1.0"
    profile="ecmascript"
    initial="INICIO">
    <!-- PARAMETROS -->
    <datamodel>
    <!-- contiene la cadena del campo LBRE_11 -->
    <data ID="Aux_sesionEstado" expr="''"/>
    <!-- contiene los parametros de estado de sesion -->
    <data ID="Aux_parametrosEstado"  expr="['M=x','I=0','D=0','T=0','C=x','R=1','F=0','G=0','P=x','A=0','S=0']"/>
    <!-- 0 M matricula del agente -->
    <!-- 1 I indice de orden -->
    <!-- 2 D intentos diarios -->
    <!-- 3 T intentos totales -->
    <!-- 4 C callresult previo -->
    <!-- 5 R retardo previo -->
    <!-- 6 F Fase -->
    <!-- 7 G desvio grupo -->
    <!-- 8 P posicion -->
    <!-- 9 A Agendamiento -->
    <!-- 10 S sesion desvio -->
    <!-- contiene lamatricula del agente del intento previo del campo MATRICULA_AGENTE -->
    <data ID="Aux_matriculaAgente" expr="'x'"/>
    <!-- contiene lamatricula del agente del intento previo del campo MATRICULA_AGENTE -->
    <data ID="Aux_matriculaInicio" expr="'x'"/>
    <!-- contiene el indice del orden de prioridad -->
    <data ID="Aux_indiceOrden" expr="0"/>
    <!-- contiene el numero de intentos diarios realizados -->
    <data ID="Aux_contadorDiarios" expr="0"/>
    <!-- contiene el numero de intentos totales realizados -->
    <data ID="Aux_contadorTotales" expr="0"/>
    <!-- contiene el call result del intento previo -->
    <data ID="Aux_callResultPrevio" expr="'x'"/>
    <!-- contiene el retardo del intento previo -->
    <data ID="Aux_retardoPrevio" expr="0"/>
    <!-- contiene el tipo de agendamiento -->
    <data ID="Aux_fase" expr="0"/>
    <!-- 0 sin agendamiento -->
    <!-- 1 hubo una rellamada inmediata o agendamiento-->
    <!-- contiene el tipo de desvio a grupo -->
    <data ID="Aux_grupo" expr="'no'"/>
    <!-- 0 no se desvia a grupo, solo si M INICIO o F 0 -->
    <!-- 1 se desvia a grupo, en F 0 se reintenta el registro indicado por I -->
    <!-- contiene la posicion del registro Origen-->
    <data ID="Aux_posicionOrigen" expr="'x'"/>
    <!-- flag de agendamiento -->
    <!-- 0 scxml no gestiona call result -->
    <!-- 1 scxml gestiona call result -->
    <data ID="Aux_agendamiento" expr="0"/>
    <!-- flag de agendamiento -->
    <!-- 0 scxml actual no desvia a grupo -->
    <!-- 1 scxml actual desvia a grupo -->
    <!-- 2 scxml actual desvia a grupo cuando se reprograma a siguiente dia en F 0 -->
    <data ID="Aux_desvioGrupo" expr="0"/>
    <!-- contiene el orden de prioridad de los registros -->
    <data ID="Orden_Contactos" expr="['MOVIL1','RTB','TELEFONO']"/>
    <!-- contiene el limite de intentos diarios -->
    <data ID="Aux_maxDiarios" expr="2"/>
    <!-- contiene el limite de intentos totales -->
    <data ID="Aux_maxTotales" expr="3"/>
    <!-- contiene el comportamineto de callresult de tipo sin respuesta -->
    <data ID="Result_SinRespuesta" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo ocupado -->
    <data ID="Result_Ocupado" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo contestador -->
    <data ID="Result_Contestador" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo fax -->
    <data ID="Result_FAX" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo molestia -->
    <data ID="Result_Molestia" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo numero invalido -->
    <data ID="Result_NumeroInvalido" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo rechazada -->
    <data ID="Result_Rechazada" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo fallo del sistema -->
    <data ID="Result_FallosSistema" expr="['5','60','ROTAR']"/>
    <!-- contiene el comportamineto de callresult de tipo fallo de callback -->
    <data ID="Result_FalloCallback" expr="['5','60','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo rellamada inmediata -->
    <data ID="Result_RellamadaInmediata" expr="['5','5','REINTENTO']"/>
    <!-- contiene el comportamineto de callresult de tipo fallo recursos -->
    <data ID="Result_FalloRecursos" expr="['20','20','REINTENTO']"/>
    <!-- contiene la escala de tiempos de los retardos -->
    <data ID="Aux_retardoEscala" expr="'segundos'"/>
    <!-- contiene el retardo de FIN_CICLO (solo manual) -->
    <data ID="Aux_retardoCiclo" expr="1"/>
    <!-- contiene la el tipo de marcacion -->
    <data ID="Aux_tipoMarcacion"  expr="'automatico'"/>
    <!-- flag de reinicio de barrido de cadena -->
    <data ID="Aux_inicializarCadena" expr="'no'"/>
    <!-- contiene el tipo de registro del campo record_type -->
    <data ID="Aux_typeRegistro" expr="''"/>
    <!-- flag de control de ciclo (si se completa un ciclo y no se llama a ningun registro, se cierra la cadena) -->
    <data ID="Aux_flagLLamada" expr="0"/>
    <!-- contiene el tag de registro prioritario -->
    <data ID="Aux_tagContacto" expr="''"/>
    <!-- contiene el motivo por el que se guarda en el campo LIBRE_11 -->
    <data ID="Aux_motivoGuardado" expr="0"/>
    <!-- 0 sin motivo -->
    <!-- 1 motivo FIN_CICLO  -->
    <!-- 2 motivo INICIO -->
    <!-- 3 motivo antes de LLAMAR -->
    <!-- 4 motivo Reprogramacion siguiente dia -->
    <!-- 5 motivo despues de LLAMAR -->
    <!-- 6 motivo desvio a Grupo de Agentes -->
    <!-- contiene el RECORDHANDLER actual -->
    <data ID="Aux_registroActual" expr="'0'"/>
    <!-- contiene el TAG del registro del campo TAGSECUENCIA -->
    <data ID="Aux_tagRegistro" expr="''"/>
    <!-- contiene la posicion del registro actual -->
    <data ID="Aux_posicionRegistro" expr="'x'"/>
    <!-- contiene el TAG del registro Origen -->
    <data ID="Aux_tagOrigen" expr="''"/>
    <!-- contiene el numero de contacto del registro del campo contact_info -->
    <data ID="Aux_numero" expr="''"/>
    <!-- contiene el callresult de la llamada actual -->
    <data ID="Aux_callResult" expr="''"/>
    <!-- contiene la accion de ROTA o de REINTEMTA que se aplica -->
    <data ID="Aux_accionIntento" expr="''"/>
    <!-- contiene el retardo que se aplica -->
    <data ID="Aux_retardoIntento" expr="0"/>
    <!-- contiene el retardo maximo que se puede aplicar -->
    <data ID="Aux_retardoIntento_Max" expr="0"/>
    <!-- contiene el numero de intentos del registro actual -->
    <data ID="Aux_registroRellamada" expr="1"/>
    </datamodel>
    <state id="INICIO">
    <onentry>
    <log expr="'****'+ _sessionid +'****_00_**************______ INICIO ______**************'"/>
    <ocs:next_record/>
    </onentry>
    <transition event="ocs.next_record" target="FLUJO_SCXML_PRINCIPAL"/>
    <onexit>
    <!-- se obtiene el estado de sesion para inicializar -->
    <assign location="_data.Aux_sesionEstado" expr = "_event.data.fields.LIBRE_11"/>
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <log expr="'****'+ _sessionid +'        ---------------------------------------------------------------------------------'"/>
    <log expr="'****'+ _sessionid +'        --------------------- Cadena de Sesion: '+ _data.Aux_sesionEstado"/>
    <log expr="'****'+ _sessionid +'        ---------------------------------------------------------------------------------'"/>
    </onexit>
    </state>
    <!-- GLOBAL -->
    <script>
    <![CDATA[
    //***********CAPTURA DE DATOS DE URL*********************************************************************************************************************
      var v_url_completa = __GetDocumentURL(); //cadena de url
    var v_aux_url = v_url_completa.split("@"); //conversion de cadena url a array
    var v_Orden_Contactos = v_aux_url[0].substring (v_aux_url[0].indexOf("=")+1); //captura de cadena de orden
    v_Orden_Contactos = v_Orden_Contactos.split(","); //conversion de cadena de orden a array
    var v_maxDiarios = v_aux_url[1].substring (v_aux_url[1].indexOf("=")+1); //captura de cadena de intentos diarios maximos
    var v_maxTotales = v_aux_url[2].substring (v_aux_url[2].indexOf("=")+1); //captura de cadena de intentos totales maximos
    var v_Result_SinRespuesta = v_aux_url[3].substring (v_aux_url[3].indexOf("=")+1); //captura de cadena de resultado no contesta
    v_Result_SinRespuesta = v_Result_SinRespuesta.split(","); //conversion de cadena de resultado no contesta a array
    var v_Result_Ocupado = v_aux_url[4].substring (v_aux_url[4].indexOf("=")+1); //captura de cadena de resultado ocupado
    v_Result_Ocupado = v_Result_Ocupado.split(","); //conversion de cadena dde resultado ocupado a array
    var v_Result_Contestador = v_aux_url[5].substring (v_aux_url[5].indexOf("=")+1); //captura de cadena de resultado contestador
    v_Result_Contestador = v_Result_Contestador.split(","); //conversion de cadena de resultado contestador a array
    var v_Result_FAX = v_aux_url[6].substring (v_aux_url[6].indexOf("=")+1); //captura de cadena de resultado FAX
    v_Result_FAX = v_Result_FAX.split(","); //conversion de cadena de resultado FAX a array
    var v_Result_Molestia = v_aux_url[7].substring (v_aux_url[7].indexOf("=")+1); //captura de cadena de resultado molestia
    v_Result_Molestia = v_Result_Molestia.split(","); //conversion de cadena de resultado molestia a array
    var v_Result_NumeroInvalido = v_aux_url[8].substring (v_aux_url[8].indexOf("=")+1); //captura de cadena de resultado numero invalido
    v_Result_NumeroInvalido = v_Result_NumeroInvalido.split(","); //conversion de cadena de resultado numero invalido a array
    var v_Result_Rechazada = v_aux_url[9].substring (v_aux_url[9].indexOf("=")+1); //captura de cadena de resultado rechazada
    v_Result_Rechazada = v_Result_Rechazada.split(","); //conversion de cadena de resultado rechazada a array
    var v_Result_FallosSistema = v_aux_url[10].substring (v_aux_url[10].indexOf("=")+1); //captura de cadena de resultado fallo sistema
    v_Result_FallosSistema = v_Result_FallosSistema.split(","); //conversion de cadena de resultado fallo sistema a array
    var v_Result_FalloCallback = v_aux_url[11].substring (v_aux_url[11].indexOf("=")+1); //captura de cadena de resultado fallo callback
    v_Result_FalloCallback = v_Result_FalloCallback.split(","); //conversion de cadena de fallo allback a array
    var v_retardoEscala = v_aux_url[12].substring (v_aux_url[12].indexOf("=")+1); //captura de cadena de escala de tiempos
    var v_retardoCiclo = v_aux_url[13].substring (v_aux_url[13].indexOf("=")+1); //captura de cadena de retado de ciclo
    var v_tipoMarcacion = v_aux_url[14].substring (v_aux_url[14].indexOf("=")+1); //captura de cadena de timpo de marcacion
    //***********FUNCIONES***********************************************************************************************************************************
    function crear_array(cadena) //esta funcion convierte la cadena en array
    {
    var array;
    array = cadena.split("@");
    return (array);
    }
    function leer_parametro(array, indice) //esta funcion devuelve el valor de parametro del array
    {
    var parametro_sesion;
    var ia;
    ia = parseInt(indice);
    parametro_sesion = array[ia].substring(array[ia].indexOf("=")+1);
    return (parametro_sesion);
    }
    function escribir_parametro(array, indice, valor) //esta funcion modifica el valor de un parametro del array
    {
    var parametro_sesion;
    var ia;
    ia = parseInt(indice);
    parametro_sesion = array[ia].replace(array[ia].substring(array[ia].indexOf("=")+1),valor);  
    array[ia]= parametro_sesion;
    return (array);
    }
    function crear_cadena(array) //esta funcion convierte el array en cadena de nuevo
    {
    var cadena;
    var ia;
    var tamanio;
    tamanio = array.length;
    cadena = array[ia] + '@';
    for(ia = 0; ia < tamanio; ia++){
    if (ia == 0){
    cadena = array[ia] + '@';
    }else{
    cadena += array[ia];
    if (ia != tamanio-1 ){
    cadena += '@';
    }
    }
    return (cadena);
    }
    function ObtenerOrdenContactos(Orden_Contactos, Aux_indiceOrden, Aux_tagRegistro) //permite obtener el TAG de prioridad o su indice
    {
    const orden = Orden_Contactos;
    var indice = Aux_indiceOrden;
    var tag = Aux_tagRegistro;
    orden.push("FIN_CICLO")
    if (tag == ''){
    return orden[indice].toUpperCase();
    }else{
    indice = orden.indexOf(tag);
    indice=parseInt(indice);
    return indice;
    }   
    }
    function ObtenerAlgoritmo(Call_Result, Configuracion, Result_SinRespuesta, Result_Ocupado, Result_Contestador, Result_FAX, Result_Molestia, Result_NumeroInvalido, Result_Rechazada, Result_FallosSistema, Result_FalloCallback, Result_RellamadaInmediata, Result_FalloRecursos)
    {
    var item = Configuracion;
    switch(Call_Result)
    {
    case 'NoAnswer': //Sin Respuesta
    case 'No contesta':
    var resultado = Result_SinRespuesta;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'Busy': //Ocupado
    case 'Ocupado':
    var resultado = Result_Ocupado;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'AnswMachine': //Contestador
    case 'SIT_Vacant':
    case 'Buzon de voz':
    var resultado = Result_Contestador;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    break;
    case 'Fax': //FAX
    case 'PagerDetected':
    var resultado = Result_FAX;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    break;
    case 'Dropped': //Molestia
    case 'Stale':
    case 'TransferError':
    var resultado = Result_Molestia;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    break;
    case 'WrongNumber'://Numero Invalido
    case 'WrongParty':
    case 'NuTone':
    case 'SIT_Invalid_Num':
    case 'GeneralError':
    var resultado = Result_NumeroInvalido;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'Silence': //Silencio,Rechazada,abandonada
    case 'RemoteRelease':
    case 'Abandoned':
    var resultado = Result_Rechazada;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'SIT_Detected': //Fallos del Sistema
    case 'All_Trunks_Busy':
    case 'SIT_Oper_Intercept':
    case 'SIT_Unknown':
    case 'SIT_Reorder':
    case 'SIT_No_Circuit':
    case 'DroppedNoAnswer':
    case 'Unknown':
    case 'NoDialTone':
    case 'NoProgress':
    case 'NoRingBack':
    case 'NoEstablished':
    case 'DialError':
    case 'CallDropError':
    case 'DoNotCall':
    var resultado = Result_FallosSistema;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'CancelRecord': //Descartada
    return "NA";
    break;
    case 'AgentCallBackError': //Fallo de Callback
    case 'GroupCallBackError':
    var resultado = Result_FalloCallback;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'NoFreePortError': //Fallo Recursos
    case 'All_Trunks_Busy':
    case 'SwitchError':
    case 'SystemError':
    var resultado = Result_FalloRecursos;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    case 'Rellamada inmediata': //Rellamada Inmediata
    var resultado = Result_RellamadaInmediata;
    if (item != 2){
    return parseInt(resultado[item]);
    } else {
    return resultado[item];
    }
    break;
    default:
    return "NA";
    break;
    }
    }
    function ObtenerRetardo(callResult, callResultPrevio,retardo , retardoMax, retardoPrevio, escala)
    {
        switch(callResult)
        {
    case 'NoFreePortError': //Fallo Recursos
    case 'All_Trunks_Busy':
    case 'SwitchError':
    case 'SystemError':
    return (retardo * 60);
    break;
                    
    default: //Resto de tipificaciones     
    if (retardo == 'NA') {
        retardo = 0;
    } else {
    if (callResult == callResultPrevio){
            retardo = 2 * retardoPrevio;
            if (retardo >= retardoMax){
                retardo = retardoMax;
            }
        }
    }
    if (callResult != 'Rellamada inmediata'){
        if (escala == 'minutos'){
            retardo = retardo * 60;
            if (retardo >= 120){
                retardo = 119;
            }
        }
    }
    return (retardo);
    break;            
            }
    }
    function ObtenerTipo(callResult)
    {
        switch(callResult)
        {
    case 'SIT_Detected': //No acumulan intentos
    case 'All_Trunks_Busy':
    case 'SIT_Oper_Intercept':
    case 'SIT_Unknown':
    case 'SIT_Reorder':
    case 'SIT_No_Circuit':
    case 'DroppedNoAnswer':
    case 'Unknown':
    case 'NoDialTone':
    case 'NoProgress':
    case 'NoRingBack':
    case 'NoEstablished':
    case 'DialError':
    case 'CallDropError':
    case 'DoNotCall':
    case 'NoFreePortError': 
    case 'All_Trunks_Busy':
    case 'SwitchError':
    case 'SystemError':
    case 'AgentCallBackError':
    case 'GroupCallBackError':
    return (2);
    break;
      case 'Buzon de voz': //Desvia a Grupo
    case 'Ocupado':
    case 'No contesta':
    return (1);
    break;               
    default: //No afecta     
    return (0);
    break;            
            }
    }
    //*******************************************************************************************************************************************************
    ]]>
    </script>
    <!-- FLUJO -->
    <state id="FLUJO_SCXML_PRINCIPAL">
    <initial>
    <transition target="INICIALIZAR_PARAMETROS">
    <log expr="'****'+ _sessionid +'****_01_************** FLUJO_SCXML_PRINCIPAL **************'"/>
    </transition>
    </initial>
    <state id="INICIALIZAR_PARAMETROS">
    <onentry>
    <log expr="'****'+ _sessionid +'****_02_************** INICIALIZAR_PARAMETROS **************'"/>
    <!-- se inicializan los parametros recuperados de impacte -->
    <assign location="_data.Orden_Contactos" expr = "v_Orden_Contactos"/>
    <assign location="_data.Aux_maxDiarios" expr = "parseInt(v_maxDiarios)"/>
    <assign location="_data.Aux_maxTotales" expr = "parseInt(v_maxTotales)"/>
    <assign location="_data.Result_SinRespuesta" expr = "v_Result_SinRespuesta"/>
    <assign location="_data.Result_Ocupado" expr = "v_Result_Ocupado"/>
    <assign location="_data.Result_Contestador" expr = "v_Result_Contestador"/>
    <assign location="_data.Result_FAX" expr = "v_Result_FAX"/>
    <assign location="_data.Result_Molestia" expr = "v_Result_Molestia"/>
    <assign location="_data.Result_NumeroInvalido" expr = "v_Result_NumeroInvalido"/>
    <assign location="_data.Result_Rechazada" expr = "v_Result_Rechazada"/>
    <assign location="_data.Result_FallosSistema" expr = "v_Result_FallosSistema"/>
    <assign location="_data.Result_FalloCallback" expr = "v_Result_FalloCallback"/>
    <assign location="_data.Aux_retardoEscala" expr = "v_retardoEscala"/>
    <assign location="_data.Aux_tipoMarcacion" expr = "v_tipoMarcacion"/>
    <!-- se inicializan los parametros del estado de la sesion de LIBRE_11 -->
    <if cond="_data.Aux_sesionEstado != ''">
    <assign location="_data.Aux_parametrosEstado" expr = "crear_array(_data.Aux_sesionEstado)"/>
    <log expr="'****'+ _sessionid +'        --------------------- No es la primera vez que se EJECUTA el tratamiento SCXML para esta cadena'"/>
    </if>
    <assign location="_data.Aux_matriculaInicio" expr = "leer_parametro(_data.Aux_parametrosEstado, 0)"/>
    <assign location="_data.Aux_indiceOrden" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 1))"/>
    <assign location="_data.Aux_contadorDiarios" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 2))"/>
    <assign location="_data.Aux_contadorTotales" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 3))"/>
    <assign location="_data.Aux_callResultPrevio" expr = "leer_parametro(_data.Aux_parametrosEstado, 4)"/>
    <assign location="_data.Aux_retardoPrevio" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 5))"/>
    <assign location="_data.Aux_fase" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 6))"/>
    <assign location="_data.Aux_grupo" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 7))"/>
    <assign location="_data.Aux_posicionOrigen" expr = "leer_parametro(_data.Aux_parametrosEstado, 8)"/>
    <assign location="_data.Aux_agendamiento" expr = "parseInt(leer_parametro(_data.Aux_parametrosEstado, 9))"/>
    <assign location="_data.Aux_desvioGrupo" expr = "leer_parametro(_data.Aux_parametrosEstado, 10)"/>
    </onentry>
    <!-- si es la primera vez que se aplica el tratamiento scxml para esta cadena -->
    <transition cond= "(_data.Aux_posicionOrigen == 'x') &amp;&amp; (_data.Aux_fase == 0) " target="OBTENER_ORDEN">
    <log expr="'****'+ _sessionid +'        -01------------------ Es la primera vez que se EJECUTA el tratamiento SCXML para esta cadena'"/>
    </transition>
    <!-- si no es la primera vez que se aplica el tratamiento scxml para esta cadena -->
    <transition cond= "(_data.Aux_posicionOrigen != 'x')" target="ACTUALIZAR_POSICION">
    <assign location="_data.Aux_posicionOrigen" expr = "parseInt(_data.Aux_posicionOrigen)"/>
    <assign location="_data.Aux_flagLLamada" expr = "1"/>
    <log expr="'****'+ _sessionid +'        -02------------------ No es la primera vez que se EJECUTA el tratamiento SCXML para esta cadena'"/>
    </transition>
    <onexit>
    <log expr="'****'+ _sessionid +'        ---------------------------------------------------------------------------------'"/>
    <log expr="'****'+ _sessionid +'        --------------------- Prioridad de Registros: '+ _data.Orden_Contactos"/>
    <log expr="'****'+ _sessionid +'        --------------------- Indice de Orden: '+ _data.Aux_indiceOrden"/>
    <log expr="'****'+ _sessionid +'        --------------------- Limite intentos Maximos Diarios: '+ _data.Aux_maxDiarios"/>
    <log expr="'****'+ _sessionid +'        --------------------- Intentos Diarios actuales: '+ _data.Aux_contadorDiarios"/>
    <log expr="'****'+ _sessionid +'        --------------------- Limite intentos Maximos Totales: '+ _data.Aux_maxTotales"/>
    <log expr="'****'+ _sessionid +'        --------------------- Intentos Totales actuales: '+ _data.Aux_contadorTotales"/>
    <log expr="'****'+ _sessionid +'        --------------------- Tipo de Agendamiento: '+ _data.Aux_fase"/>
    <log expr="'****'+ _sessionid +'        --------------------- Desvio a Grupo: '+ _data.Aux_grupo"/>
    <log expr="'****'+ _sessionid +'        --------------------- Tipo de Marcacion: '+ _data.Aux_tipoMarcacion"/>
    <log expr="'****'+ _sessionid +'        --------------------- Escala de Tiempos: '+ _data.Aux_retardoEscala"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Sin Respuesta: '+ _data.Result_SinRespuesta"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Ocupado: '+ _data.Result_Ocupado"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Contestador: '+ _data.Result_Contestador"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de FAX: '+ _data.Result_FAX"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Molestia: '+ _data.Result_Molestia"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Numero Invalido: '+ _data.Result_NumeroInvalido"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Rechazada: '+ _data.Result_Rechazada"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Fallos Sistema: '+ _data.Result_FallosSistema"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Fallo Callback: '+ _data.Result_FalloCallback"/>
    <log expr="'****'+ _sessionid +'        --------------------- Configuracion de Fallo Recursos: '+ _data.Result_FalloRecursos"/>
    <log expr="'****'+ _sessionid +'        ---------------------------------------------------------------------------------'"/>
    </onexit>
    </state>
    <state id="ACTUALIZAR_POSICION">
    <onentry>
    <ocs:next_record repeat_chain="_data.Aux_inicializarCadena"/>
    <log expr="'****'+ _sessionid +'****_03_************** ACTUALIZAR_POSICION **************'"/>
    </onentry>
    <!-- si se ha barrido la cadena -->
    <transition event="ocs.next_record" cond= "(_event.data.record_id == '0')"  target="ACTUALIZAR_POSICION">
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <log expr="'****'+ _sessionid +'        -01------------------ No se ENCONTRO el Registro en la posicion '+ _data.Aux_posicionOrigen"/>
    </transition>
    <!-- se busca el registro en la posicion requerida -->
    <transition event="ocs.next_record" cond= "(_data.Aux_posicionOrigen == _event.data.fields.chain_n) &amp;&amp; (_event.data.record_id != '0')"  target="RESTAURAR_SESION">
    <assign location="_data.Aux_registroActual" expr = "_event.data.record_id"/>
    <assign location="_data.Aux_typeRegistro" expr = "parseInt(_event.data.fields.record_type)"/>
    <assign location="_data.Aux_tagOrigen" expr = "_event.data.fields.TAGSECUENCIA"/>
    <assign location="_data.Aux_callResult" expr = "_event.data.fields.RESULTADO_GESTION"/>
    <assign location="_data.Aux_posicionRegistro" expr = "parseInt(_event.data.fields.chain_n)"/>
    <assign location="_data.Aux_numero" expr = "parseInt(_event.data.fields.contact_info)"/>
    <assign location="_data.Aux_agenteID" expr = "_event.data.fields.agent_id"/>
    <assign location="_data.Aux_matriculaAgente" expr = "_event.data.fields.MATRICULA_AGENTE"/>
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <log expr="'****'+ _sessionid +'        -02------------------ Se ENCONTRO en la posicion '+ _data.Aux_posicionOrigen +' el Registro '+ _data.Aux_registroActual +' ('+ _data.Aux_numero +')'"/>
    </transition>
    <!-- si no es el registro en la posicion requerida -->
    <transition event="ocs.next_record" cond= "(_data.Aux_posicionOrigen != _event.data.fields.chain_n) &amp;&amp; (_event.data.record_id != '0')"  target="ACTUALIZAR_POSICION">
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <log expr="'****'+ _sessionid +'        -03------------------ No se ENCONTRO en la posicion '+ _data.Aux_posicionOrigen +' el Registro guardado'"/>
    </transition>
    </state>
    <state id="RESTAURAR_SESION">
    <onentry>
    <log expr="'****'+ _sessionid +'****_04_************** RESTAURAR_SESION **************'"/>   
    </onentry>
    <!-- agendamiento -->
    <transition cond="(_data.Aux_agendamiento == 0) &amp;&amp; (_data.Aux_typeRegistro &gt;= 5)" target="OBTENER_AGENDADO">
    <log expr="'****'+ _sessionid +'        -01------------------ Llamada Agendada'"/>
    </transition>
    <!-- llamada inconclusa -->
    <transition cond="(_data.Aux_agendamiento == 0) &amp;&amp; (_data.Aux_typeRegistro &lt; 5)" target="LLAMAR">
    <log expr="'****'+ _sessionid +'        -02------------------ Se RETOMA la Llamada'"/>
    </transition>
    <!-- si fase 0 no se desvia a grupo -->
    <transition cond="(_data.Aux_agendamiento == 1) &amp;&amp; (_data.Aux_fase == 0) &amp;&amp; (_data.Aux_grupo == 0)" target="OBTENER_ORDEN">
    <log expr="'****'+ _sessionid +'        -03------------------ Llamada de marcacion automatica TIPIFICADA por sistema'"/>
    </transition>
    <!-- si aplicar retardo para reprogramacion a siguiente dia -->
    <transition cond="(_data.Aux_agendamiento == 1) &amp;&amp; (_data.Aux_grupo == 1)  &amp;&amp; (_data.Aux_desvioGrupo == 2)" target="REPROGRAMAR_DIA">
    <log expr="'****'+ _sessionid +'        -04------------------ Llamada de marcacion automatica DESVIADA a Grupo de Agentes se REPROGRAMA al siguiente dia'"/>
    </transition>
    <!-- si aplicar retardo de tratamiento -->
    <transition cond="(_data.Aux_agendamiento == 1) &amp;&amp; (_data.Aux_grupo == 1) &amp;&amp; (_data.Aux_desvioGrupo == 1)" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_retardoIntento" expr = "_data.Aux_retardoPrevio"/>
    <assign location="_data.Aux_desvioGrupo" expr = "0"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "5"/>
    <log expr="'****'+ _sessionid +'        -05------------------ Llamada de marcacion automatica DESVIADA a Grupo de Agentes se RETARDA'"/>
    </transition>
    <!-- si agente tipifico y se retardo: S 0 -->
    <transition cond="(_data.Aux_agendamiento == 1) &amp;&amp; (_data.Aux_grupo == 1) &amp;&amp; (_data.Aux_desvioGrupo == 0)" target="OBTENER_ORDEN">
    <log expr="'****'+ _sessionid +'        -06------------------ Llamada de marcacion automatica DESVIADA a Grupo de Agentes'"/>
    </transition>
    <!-- si fase 1 y rellamada inmediata -->
    <transition cond="(_data.Aux_agendamiento == 1) &amp;&amp; (_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 0)" target="OBTENER_REGISTRO">
    <assign location="_data.Aux_tagContacto" expr = "'RELLAMADA'"/>
    <log expr="'****'+ _sessionid +'        -07------------------ Rellamada Inmediata'"/>
    </transition>
    </state>
    <state id="OBTENER_AGENDADO">
    <onentry>
    <ocs:next_record repeat_chain="_data.Aux_inicializarCadena"/>
    <log expr="'****'+ _sessionid +'****_05_************** OBTENER_AGENDADO **************'"/>
    </onentry>
    <!-- si se ha barrido la cadena -->
    <transition event="ocs.next_record" cond= "(_event.data.record_id == '0')"  target="OBTENER_AGENDADO">
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <log expr="'****'+ _sessionid +'        -01------------------ No se ENCONTRO el Registro en Agendado'"/>
    </transition>
    <!-- se busca el registro con agentID -->
    <transition event="ocs.next_record" cond= "(_event.data.fields.agent_id != '') &amp;&amp; (_event.data.record_id != '0')"  target="CONFIRMAR_CONTACTO">
    <assign location="_data.Aux_registroActual" expr = "_event.data.record_id"/>
    <assign location="_data.Aux_typeRegistro" expr = "parseInt(_event.data.fields.record_type)"/>
    <assign location="_data.Aux_tagRegistro" expr = "_event.data.fields.TAGSECUENCIA"/>
    <assign location="_data.Aux_posicionRegistro" expr = "parseInt(_event.data.fields.chain_n)"/>
    <assign location="_data.Aux_callResult" expr = "_event.data.fields.RESULTADO_GESTION"/>
    <assign location="_data.Aux_numero" expr = "parseInt(_event.data.fields.contact_info)"/>
    <assign location="_data.Aux_agenteID" expr = "_event.data.fields.agent_id"/>
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <log expr="'****'+ _sessionid +'        -02------------------ Se ENCONTRO en la posicion '+ _data.Aux_posicionRegistro +' el Registro Agendado: '+ _data.Aux_registroActual +' ('+ _data.Aux_numero +')'"/>
    </transition>
    <!-- no es el registro con agentID -->
    <transition event="ocs.next_record" cond= "(_event.data.fields.agent_id == '') &amp;&amp; (_event.data.record_id != '0')"  target="OBTENER_AGENDADO">
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <log expr="'****'+ _sessionid +'        -03------------------ No se ENCONTRO en la posicion '+ _data.Aux_posicionRegistro +' el Registro Agendado'"/>
    </transition>
    </state>
    <state id="OBTENER_ORDEN">
    <onentry>
    <log expr="'****'+ _sessionid +'****_06_************** OBTENER_ORDEN **************'"/>
    <assign location="_data.Aux_tagContacto" expr = "ObtenerOrdenContactos(_data.Orden_Contactos, _data.Aux_indiceOrden, '')"/>
    <if cond="_data.Aux_tagContacto == 'FIN_CICLO'">
    <assign location="_data.Aux_indiceOrden" expr = "0"/>
    </if>
    </onentry>
    <!-- si no es fin de ciclo -->
    <transition cond="(_data.Aux_tagContacto != 'FIN_CICLO') " target="OBTENER_REGISTRO">
    <log expr="'****'+ _sessionid +'        -01------------------ Se BUSCA el TAG: ** '+ _data.Aux_tagContacto +' **'"/>
    </transition>
    <!-- si no es agendamiento y ni rellamada inmediata y se llega al final de cadena en marcacion manual -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_tagContacto == 'FIN_CICLO') &amp;&amp; (_data.Aux_flagLLamada == 1) &amp;&amp; (_data.Aux_tipoMarcacion== 'manual') " target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_matriculaAgente" expr = "'FIN_CICLO'"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, _data.Aux_matriculaAgente)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 1, _data.Aux_indiceOrden)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 3, _data.Aux_contadorTotales)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, _data.Aux_callResultPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, _data.Aux_retardoPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 6, _data.Aux_fase)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 7, _data.Aux_grupo)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 8, _data.Aux_posicionOrigen)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 9, _data.Aux_agendamiento)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "1"/>
    <log expr="'****'+ _sessionid +'        -02------------------ Se ha COMPLETADO un ciclo entero de la Cadena de Registros. Se APLICA el retardo de Fin de Ciclo'"/>
    </transition>
    <!-- si fin de cadena y algun registro fue llamada antes en modo automatico o en modo manual, en fase de agendado o rellamada -->
    <transition cond="(_data.Aux_tagContacto == 'FIN_CICLO') &amp;&amp; (_data.Aux_flagLLamada == 1) &amp;&amp; ((_data.Aux_tipoMarcacion == 'automatico') || ((_data.Aux_tipoMarcacion == 'manual') &amp;&amp; (_data.Aux_fase == 1)))" target="OBTENER_ORDEN">
    <log expr="'****'+ _sessionid +'        -03------------------ Se ha COMPLETADO un ciclo entero de la Cadena de Registros. Se INICIALIZA la Busqueda'"/>
    </transition>
    <!-- si fin de cadena y ningun registro fue llamado -->
    <transition cond="(_data.Aux_tagContacto == 'FIN_CICLO') &amp;&amp; (_data.Aux_flagLLamada == 0) " target="FIN">
    <log expr="'****'+ _sessionid +'        -04------------------ Fin del Tratamiento: Ningun Registro COINCIDE de con las etiquetas de prioridad'"/>
    </transition>
    </state>
    <state id="OBTENER_REGISTRO">
    <onentry>
    <log expr="'****'+ _sessionid +'****_07_************** OBTENER_REGISTRO **************'"/>
    <ocs:next_record repeat_chain="_data.Aux_inicializarCadena"/>
    </onentry>
    <!-- si fase 0, se ha barrido la cadena o si fase 1 y desvio a grupo se ha barrido la cadena -->
    <transition event="ocs.next_record" cond= "(_event.data.record_id == '0') &amp;&amp; ( (_data.Aux_fase == 0) || ((_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 1)))"  target="OBTENER_ORDEN">
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <assign location="_data.Aux_indiceOrden" expr = " _data.Aux_indiceOrden + 1"/>
    <log expr="'****'+ _sessionid +'        -01------------------ Ningun Registro COINCIDE con el TAG '+ _data.Aux_tagContacto +'. Se BUSCA el siguiente en prioridad'"/>
    </transition>
    <!-- si fase 0 y existen registros -->
    <transition event="ocs.next_record" cond= "(_data.Aux_fase == 0) &amp;&amp; (_event.data.record_id != '0')"  target="CONFIRMAR_CONTACTO">
    <assign location="_data.Aux_registroActual" expr = "_event.data.record_id"/>
    <assign location="_data.Aux_posicionRegistro" expr = "parseInt(_event.data.fields.chain_n)"/>
    <assign location="_data.Aux_tagRegistro" expr = "_event.data.fields.TAGSECUENCIA"/>
    <assign location="_data.Aux_numero" expr = "parseInt(_event.data.fields.contact_info)"/>   
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <log expr="'****'+ _sessionid +'        -02------------------ El Registro Actual es el '+ _data.Aux_registroActual +' ('+ _data.Aux_numero +'), con TAG: '+ _data.Aux_tagRegistro"/>
    </transition>
    <!-- si fase 1 y rellamada inmediata y se ha barrido la cadena -->
    <transition event="ocs.next_record" cond= "(_data.Aux_fase == 1) &amp;&amp; (_event.data.record_id == '0') &amp;&amp; (_data.Aux_grupo == 0)"  target="OBTENER_REGISTRO">
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <log expr="'****'+ _sessionid +'        -03------------------ Ningun Registro COINCIDE con el TAG '+ _data.Aux_tagContacto +'. Se REINICIA el Barrido de la cadena'"/>
    </transition>
    <!-- si fase 1 -->
    <transition event="ocs.next_record" cond= "(_data.Aux_fase == 1) &amp;&amp; (_event.data.record_id != '0')"  target="CONFIRMAR_CONTACTO">
    <assign location="_data.Aux_registroActual" expr = "_event.data.record_id"/>
    <assign location="_data.Aux_posicionRegistro" expr = "parseInt(_event.data.fields.chain_n)"/>
    <assign location="_data.Aux_tagRegistro" expr = "_event.data.fields.TAGSECUENCIA"/>
    <assign location="_data.Aux_agenteID" expr = "_event.data.fields.agent_id"/>
    <assign location="_data.Aux_registroRellamada" expr = "parseInt(_event.data.fields.attempt)"/>
    <assign location="_data.Aux_numero" expr = "parseInt(_event.data.fields.contact_info)"/>   
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <log expr="'****'+ _sessionid +'        -04------------------ El Registro Actual es el '+ _data.Aux_registroActual +' ('+ _data.Aux_numero +'), con TAG: '+ _data.Aux_tagRegistro"/>
    </transition>
    </state>
    <state id="CONFIRMAR_CONTACTO">
    <onentry>
    <log expr="'****'+ _sessionid +'****_08_************** CONFIRMAR_CONTACTO **************'"/>   
    </onentry>
    <!-- agendamiento -->
    <transition cond="(_data.Aux_agendamiento == 0) &amp;&amp; (_data.Aux_typeRegistro &gt;= 5) &amp;&amp; (_data.Aux_agenteID != '')"  target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_contadorDiarios" expr = "0"/>
    <assign location="_data.Aux_grupo" expr = "0"/>
    <if cond="(_data.Aux_typeRegistro == 6)">
    <assign location="_data.Aux_grupo" expr = "1"/>
    </if>
    <assign location="_data.Aux_contadorTotales" expr = "_data.Aux_contadorTotales + 1"/>
    <assign location="_data.Aux_fase" expr = "_data.Aux_fase = 1"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, _data.Aux_matriculaAgente)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 1, _data.Aux_indiceOrden)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 3, _data.Aux_contadorTotales)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, _data.Aux_callResultPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, _data.Aux_retardoPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 6, _data.Aux_fase)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 7, _data.Aux_grupo)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 8, _data.Aux_posicionRegistro)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 9, _data.Aux_agendamiento)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "7"/>
    <log expr="'****'+ _sessionid +'        -01------------------ Se LLAMAR al Registro: '+ _data.Aux_registroActual"/>
    </transition>
    <!-- si fase 0 y el tag del registro no coincide con el buscado -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_tagRegistro != _data.Aux_tagContacto)" target="OBTENER_REGISTRO">
    <log expr="'****'+ _sessionid +'        -02------------------ El Registro '+ _data.Aux_registroActual +' (TAG: '+ _data.Aux_tagRegistro +'), en posicion: '+ _data.Aux_posicionRegistro +', no COINCIDE con la etiqueta '+ _data.Aux_tagContacto"/>
    </transition>
    <!-- si fase 0 y el tag del registro coincide con el buscado -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_tagRegistro == _data.Aux_tagContacto)" target="VERIFICAR_INTENTOS">
    <log expr="'****'+ _sessionid +'        -03------------------ El Registro '+ _data.Aux_registroActual +' ('+ _data.Aux_numero +'), en posicion: '+ _data.Aux_posicionRegistro +', COINCIDE con la etiqueta '+ _data.Aux_tagContacto"/>
    </transition>
    <!-- si fase 1 y tag registro no es RELLAMADA o registro ya fue intentado -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 0) &amp;&amp; (_data.Aux_tagContacto == 'RELLAMADA') &amp;&amp; ((_data.Aux_tagRegistro != 'RELLAMADA') || (_data.Aux_registroRellamada != '0') )"  target="OBTENER_REGISTRO">
    <log expr="'****'+ _sessionid +'        -04------------------ El Registro '+ _data.Aux_registroActual +' (TAG: '+ _data.Aux_tagRegistro +') no es la Rellamada Inmediata'"/>
    </transition>
    <!-- si fase 1 y tag registro es RELLAMADA o registro no fue intentado -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 0) &amp;&amp; (_data.Aux_tagRegistro == 'RELLAMADA') &amp;&amp; (_data.Aux_registroRellamada == '0')" target="VERIFICAR_INTENTOS">
    <log expr="'****'+ _sessionid +'        -05------------------ El Registro '+ _data.Aux_registroActual +' (TAG: '+ _data.Aux_tagRegistro +') es la Rellamada Inmediata'"/>
    </transition>
    <!-- si fase 1, rotacion y el tag del registro no coincide con el tag buscado -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 1) &amp;&amp; (_data.Aux_tagRegistro != _data.Aux_tagContacto)"  target="OBTENER_REGISTRO">
    <log expr="'****'+ _sessionid +'        -06------------------ El Registro '+ _data.Aux_registroActual +' (TAG: '+ _data.Aux_tagRegistro +'), en posicion: '+ _data.Aux_posicionRegistro +', no COINCIDE con la etiqueta '+ _data.Aux_tagContacto"/>
    </transition>
    <!-- si fase 1, rotacion y el tag del registro coincide con el tag buscado -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 1) &amp;&amp; (_data.Aux_tagRegistro == _data.Aux_tagContacto)"  target="VERIFICAR_INTENTOS">
    <log expr="'****'+ _sessionid +'        -07------------------ El Registro '+ _data.Aux_registroActual +' ('+ _data.Aux_numero +'), en posicion: '+ _data.Aux_posicionRegistro +', COINCIDE con la etiqueta '+ _data.Aux_tagContacto"/>
    </transition>
    </state>
    <state id="VERIFICAR_INTENTOS">
    <onentry>
    <log expr="'****'+ _sessionid +'****_09_************** VERIFICAR_INTENTOS **************'"/>
    <assign location="_data.Aux_agendamiento" expr = "0"/>
    <if cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_tipoMarcacion == 'manual') &amp;&amp; (_data.Aux_grupo == 1)">
    <assign location="_data.Aux_grupo" expr = "1"/>
    <else/>
    <assign location="_data.Aux_grupo" expr = "0"/>
    </if>
    </onentry>
    <!-- si fase 0 y es la primera vez que se ejecuta scxml en automatico -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_contadorDiarios == 0) &amp;&amp; (_data.Aux_contadorTotales == 0) &amp;&amp; (_data.Aux_tipoMarcacion == 'automatico')" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_contadorDiarios" expr = "_data.Aux_contadorDiarios + 1"/>
    <assign location="_data.Aux_contadorTotales" expr = "_data.Aux_contadorTotales + 1"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, 'INICIO')"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 1, _data.Aux_indiceOrden)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 3, _data.Aux_contadorTotales)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, _data.Aux_callResultPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, _data.Aux_retardoPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 6, _data.Aux_fase)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 7, _data.Aux_grupo)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 8, _data.Aux_posicionRegistro)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 9, _data.Aux_agendamiento)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "2"/>
    <log expr="'****'+ _sessionid +'        -01------------------- Se LLAMAR por primera vez a un Registro ('+ _data.Aux_registroActual +') de la Cadena en marcacion automatica'"/>
    </transition>
    <!-- si fase 0 y no se ha superado el limite de intentos diarios -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; ( _data.Aux_contadorDiarios &lt; _data.Aux_maxDiarios ) &amp;&amp; ( _data.Aux_contadorTotales &lt; _data.Aux_maxTotales )" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_contadorDiarios" expr = "_data.Aux_contadorDiarios + 1"/>
    <assign location="_data.Aux_contadorTotales" expr = "_data.Aux_contadorTotales + 1"/>
    <if cond="(_data.Aux_matriculaInicio != 'x') &amp;&amp; (_data.Aux_matriculaAgente != 'FIN_CICLO') &amp;&amp; (_data.Aux_matriculaAgente != '')">
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, _data.Aux_matriculaAgente)"/>
    </if>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 1, _data.Aux_indiceOrden)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 3, _data.Aux_contadorTotales)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, _data.Aux_callResultPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, _data.Aux_retardoPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 6, _data.Aux_fase)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 7, _data.Aux_grupo)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 8, _data.Aux_posicionRegistro)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 9, _data.Aux_agendamiento)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "3"/>
    <log expr="'****'+ _sessionid +'        -02------------------ Se LLAMAR al Registro: '+ _data.Aux_registroActual"/>
    </transition>
    <!-- si fase 1 y no se ha superado el limite de intentos totales -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_contadorTotales &lt; _data.Aux_maxTotales)" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_contadorTotales" expr = "_data.Aux_contadorTotales + 1"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, _data.Aux_matriculaAgente)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 1, _data.Aux_indiceOrden)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 3, _data.Aux_contadorTotales)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, _data.Aux_callResultPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, _data.Aux_retardoPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 6, _data.Aux_fase)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 7, _data.Aux_grupo)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 8, _data.Aux_posicionRegistro)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 9, _data.Aux_agendamiento)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "3"/>
    <log expr="'****'+ _sessionid +'        -03------------------ Se LLAMAR al Registro: '+ _data.Aux_registroActual"/>
    </transition>
    </state>
    <state id="LLAMAR">
    <onentry>
    <ocs:make_call record_id="_data.Aux_registroActual"/>
    <log expr="'****'+ _sessionid +'****_10_************** LLAMAR: '+ _data.Aux_numero +' **************'"/>
    </onentry>
    <!-- caundo tipifica el agente -->
    <transition event="ocs.callresult" cond="_event.data.callresult == 'Answer'" target="CAPTURA_RESULTADO">
    <log expr="'****'+ _sessionid +'        -01------------------ Se ANALIZA el Resultado de Gestion del Agente'"/>
    </transition>
    <!-- cuando tipifica el sistema -->
    <transition event="ocs.callresult" cond="_event.data.callresult != 'Answer'" target="OBTENER_TRATAMIENTO">
    <log expr="'****'+ _sessionid +'        -02------------------ El sistema ha DETECTADO -'+ _data.Aux_callResult +'-'"/>
    </transition>
    <onexit>
    <!-- si el callresult es un error de sistema, recursos o callback -->
    <if cond="(ObtenerTipo(_event.data.callresult) == 2)">
    <assign location="_data.Aux_contadorDiarios" expr = "_data.Aux_contadorDiarios - 1"/>
    <assign location="_data.Aux_contadorTotales" expr = "_data.Aux_contadorTotales - 1"/>
    </if>
    <assign location="_data.Aux_callResult" expr = "_event.data.callresult"/>
    <assign location="_data.Aux_flagLLamada" expr = "_data.Aux_flagLLamada = 1"/>
    <assign location="_data.Aux_agendamiento" expr = "_data.Aux_agendamiento = 1"/>
    <assign location="_data.Aux_desvioGrupo" expr = "0"/>
    </onexit>
    </state>
    <state id="CAPTURA_RESULTADO">
    <onentry>
    <ocs:next_record repeat_chain="_data.Aux_inicializarCadena"/>
    <log expr="'****'+ _sessionid +'****_11_************** CAPTURA_RESULTADO **************'"/>
    </onentry>
    <!-- si se ha barrido la cadena -->
    <transition event="ocs.next_record" cond= "_event.data.record_id == '0'"   target="CAPTURA_RESULTADO">
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/> 
    <log expr="'****'+ _sessionid +'        -01------------------ Ningun Registro COINCIDE con el Registro '+ _data.Aux_registroActual +'. Se REINICIA el Barrido de la cadena'"/>
    </transition>
    <!-- se busca el registro que fue llamado -->
    <transition event="ocs.next_record" cond= "( _event.data.record_id != '0' ) &amp;&amp; ( _event.data.record_id == _data.Aux_registroActual )"   target="OBTENER_TRATAMIENTO">
    <assign location="_data.Aux_matriculaAgente" expr = "_event.data.fields.MATRICULA_AGENTE"/>
    <assign location="_data.Aux_matriculaInicio" expr = "_event.data.fields.MATRICULA_AGENTE"/>
    <assign location="_data.Aux_callResult" expr = "_event.data.fields.RESULTADO_GESTION"/>
    <assign location="_data.Aux_typeRegistro" expr = "parseInt(_event.data.fields.record_type)"/>
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <!-- se evalua si hay desvio a grupo -->
    <if cond="(ObtenerTipo(_data.Aux_callResult) == 1) &amp;&amp; (_data.Aux_tipoMarcacion == 'automatico' || ((_data.Aux_tipoMarcacion == 'manual') &amp;&amp; (_data.Aux_fase == 1)))">
    <assign location="_data.Aux_grupo" expr = "1"/>
    <else/>
    <assign location="_data.Aux_grupo" expr = "0"/>
    </if>
    <log expr="'****'+ _sessionid +'        -02------------------ El Agente '+ _data.Aux_matriculaAgente +' ATENDIO el Registro '+ _data.Aux_registroActual +', y TIPIFICO: -'+ _data.Aux_callResult +'-'"/>
    </transition>
    <!-- si no es el registro que fue llamado -->
    <transition event="ocs.next_record" cond= "_event.data.record_id != '0'"  target="CAPTURA_RESULTADO">
    <assign location="_data.Aux_inicializarCadena" expr = "'no'"/>
    <log expr="'****'+ _sessionid +'        -03------------------ El Registro '+ _data.Aux_registroActual +' no se corresponde con el ATENDIDO'"/>
    </transition>
    </state>
    <state id="OBTENER_TRATAMIENTO">
    <onentry>
    <log expr="'****'+ _sessionid +'****_12_************** OBTENER_TRATAMIENTO **************'"/>
    <!-- se obtiene el tratamiento configurado desde impacte -->
    <assign location="_data.Aux_retardoIntento" expr = "ObtenerAlgoritmo(_data.Aux_callResult, 0, _data.Result_SinRespuesta, _data.Result_Ocupado, _data.Result_Contestador, _data.Result_FAX, _data.Result_Molestia, _data.Result_NumeroInvalido, _data.Result_Rechazada, _data.Result_FallosSistema, _data.Result_FalloCallback, _data.Result_RellamadaInmediata, _data.Result_FalloRecursos)"/>
    <assign location="_data.Aux_retardoIntento_Max" expr = "ObtenerAlgoritmo(_data.Aux_callResult, 1, _data.Result_SinRespuesta, _data.Result_Ocupado, _data.Result_Contestador, _data.Result_FAX, _data.Result_Molestia, _data.Result_NumeroInvalido, _data.Result_Rechazada, _data.Result_FallosSistema, _data.Result_FalloCallback, _data.Result_RellamadaInmediata, _data.Result_FalloRecursos)"/>
    <assign location="_data.Aux_accionIntento" expr = "ObtenerAlgoritmo(_data.Aux_callResult, 2, _data.Result_SinRespuesta, _data.Result_Ocupado, _data.Result_Contestador, _data.Result_FAX, _data.Result_Molestia, _data.Result_NumeroInvalido, _data.Result_Rechazada, _data.Result_FallosSistema, _data.Result_FalloCallback, _data.Result_RellamadaInmediata, _data.Result_FalloRecursos)"/>
    <assign location="_data.Aux_retardoIntento" expr = "ObtenerRetardo(_data.Aux_callResult, _data.Aux_callResultPrevio, _data.Aux_retardoIntento, _data.Aux_retardoIntento_Max, _data.Aux_retardoPrevio, _data.Aux_retardoEscala)"/>
    <!-- se detecta rellamada inmediata -->
    <if cond="(_data.Aux_callResult == 'Rellamada inmediata')">
    <assign location="_data.Aux_tagContacto" expr = "'RELLAMADA'"/>
    <assign location="_data.Aux_accionIntento" expr = "'REINTENTO'"/>
    <assign location="_data.Aux_fase" expr = "1"/>
    <!-- si fase 0 y se rota-->
    <elseif cond="(_data.Aux_callResult != 'Rellamada inmediata') &amp;&amp; (_data.Aux_accionIntento == 'ROTAR') &amp;&amp; (_data.Aux_fase == 0)"/>
    <assign location="_data.Aux_indiceOrden" expr = "_data.Aux_indiceOrden + 1"/>
    <!-- si fase 1 y se reintenta-->
    <elseif cond="(_data.Aux_callResult != 'Rellamada inmediata') &amp;&amp; (_data.Aux_accionIntento == 'REINTENTO') &amp;&amp; (_data.Aux_fase == 1)"/>
    <assign location="_data.Aux_grupo" expr = "1"/>
    <!-- si fase 1 y se rota-->
    <elseif cond="(_data.Aux_callResult != 'Rellamada inmediata') &amp;&amp; (_data.Aux_accionIntento == 'ROTAR') &amp;&amp; (_data.Aux_fase == 1)"/>
    <assign location="_data.Aux_indiceOrden" expr = "_data.Aux_indiceOrden + 1"/>
    <assign location="_data.Aux_grupo" expr = "1"/>
    </if>
    <if cond="(_data.Aux_matriculaInicio != 'x') &amp;&amp; (_data.Aux_matriculaAgente != 'FIN_CICLO') &amp;&amp; (_data.Aux_matriculaAgente != '')">
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, _data.Aux_matriculaAgente)"/>
    </if>
    <assign location="_data.Aux_callResultPrevio" expr = "_data.Aux_callResult"/>
    <assign location="_data.Aux_retardoPrevio" expr = "_data.Aux_retardoIntento"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 1, _data.Aux_indiceOrden)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 3, _data.Aux_contadorTotales)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, _data.Aux_callResultPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, _data.Aux_retardoPrevio)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 6, _data.Aux_fase)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 7, _data.Aux_grupo)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 8, _data.Aux_posicionRegistro)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 9, _data.Aux_agendamiento)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)" />
    <assign location="_data.Aux_motivoGuardado" expr = "5" />
    </onentry>
    <!-- si no existe accion -->
    <transition cond="(_data.Aux_accionIntento == 'NA') || (_data.Aux_accionIntento == '')" target="FIN">
    <log expr="'****'+ _sessionid +'        -01------------------ Fin del Tratamiento SCXML: Se FINALIZA la Cadena de Registros'"/>
    </transition>
    <!-- si se ha superado el limite de intentos totales -->
    <transition cond="(_data.Aux_contadorTotales &gt;= _data.Aux_maxTotales)" target="FIN">
    <log expr="'****'+ _sessionid +'        -02------------------ Fin del Tratamiento SCXML: El Registro '+ _data.Aux_registroActual +' SUPERO o ALCANZO el limite de intentos totales'"/>
    </transition>
    <!-- si fase 0. tipificado por agente y se ha superado el limite de intentos diarios -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_contadorDiarios &gt;= _data.Aux_maxDiarios) &amp;&amp; (_data.Aux_accionIntento != 'NA') &amp;&amp; (_data.Aux_grupo == 1)" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_desvioGrupo" expr = "2"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, 'x')"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, 0)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, 'x')"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, 1)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "6"/>
    <log expr="'****'+ _sessionid +'        -03------------------ Fin del Tratamiento Diario: El Registro '+ _data.Aux_registroActual +' SUPERO o ALCANZO  el limite de intentos diarios'"/>
    </transition>
    <!-- si fase 0. tipificado por sistema y se ha superado el limite de intentos diarios o tipificado por agente en manual -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_contadorDiarios &gt;= _data.Aux_maxDiarios) &amp;&amp; (_data.Aux_accionIntento != 'NA') &amp;&amp; (_data.Aux_grupo == 0)" target="REPROGRAMAR_DIA">
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 0, 'x')"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, 0)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 4, 'x')"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 5, 1)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "4"/>
    <log expr="'****'+ _sessionid +'        -04------------------ Fin del Tratamiento Diario: El Registro '+ _data.Aux_registroActual +' SUPERO o ALCANZO  el limite de intentos diarios'"/>
    </transition>
    <!-- si fase 0 y no se ha superado el limite de intentos diarios. tipifica agente en automatico -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_contadorDiarios &lt; _data.Aux_maxDiarios) &amp;&amp; (_data.Aux_accionIntento != 'NA') &amp;&amp; (_data.Aux_grupo == 1)" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_desvioGrupo" expr = "1"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "6" />
    <log expr="'****'+ _sessionid +'        -05------------------ Intentos diarios REALIZADOS: '+ _data.Aux_contadorDiarios +' de '+ _data.Aux_maxDiarios"/>
    </transition>
    <!-- si fase 0 y no se ha superado el limite de intentos diarios. tipifica sistema o agente en manual -->
    <transition cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_contadorDiarios &lt; _data.Aux_maxDiarios) &amp;&amp; (_data.Aux_accionIntento != 'NA') &amp;&amp; (_data.Aux_grupo == 0)" target="ACTUALIZAR_BBDD">
    <log expr="'****'+ _sessionid +'        -06------------------ Intentos diarios REALIZADOS: '+ _data.Aux_contadorDiarios +' de '+ _data.Aux_maxDiarios"/>
    </transition>
    <!-- si fase 1 y no se ha superado el limite de intentos totales -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_contadorTotales &lt; _data.Aux_maxTotales)  &amp;&amp; (ObtenerTipo(_data.Aux_callResult) == 1)" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_contadorDiarios" expr = "0"/>
    <assign location="_data.Aux_desvioGrupo" expr = "1"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "6" />
    <log expr="'****'+ _sessionid +'        -07------------------ Intentos de Totales REALIZADOS: '+ _data.Aux_contadorTotales +' de '+ _data.Aux_maxTotales"/>
    </transition>
    <!-- si fase 1 y no se ha superado el limite de intentos totales. tipifica sistema -->
    <transition cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_contadorTotales &lt; _data.Aux_maxTotales)  &amp;&amp; (ObtenerTipo(_data.Aux_callResult) != 1)" target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_contadorDiarios" expr = "0"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 2, _data.Aux_contadorDiarios)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <log expr="'****'+ _sessionid +'        -08------------------ Intentos de Totales REALIZADOS: '+ _data.Aux_contadorTotales +' de '+ _data.Aux_maxTotales"/>
    </transition>
    </state>
    <state id="ACTUALIZAR_BBDD">
    <onentry>
    <log expr="'****'+ _sessionid +'****_13_************** ACTUALIZAR_BBDD **************'"/>
    <ocs:set_flex_attr record_id = "'0'">
    <ocs:flex_attr attr="'USERDATA'" type="'string'" key="'LIBRE_11'" value="_data.Aux_sesionEstado"/>
    </ocs:set_flex_attr>
    </onentry>
    <transition cond="(_data.Aux_motivoGuardado == 1)" target="APLICAR_RETARDO">
    <assign location="_data.Aux_retardoIntento" expr = "_data.Aux_retardoCiclo"/>
    <log expr="'****'+ _sessionid +'        -01------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -FIN_CICLO-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 2)" target="LLAMAR">
    <assign location="_data.Aux_matriculaAgente" expr = "'INICIO'"/>
    <log expr="'****'+ _sessionid +'        -02------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -INICIO-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 3)" target="LLAMAR">
    <log expr="'****'+ _sessionid +'        -03------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -Prellamada-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 4)" target="APLICAR_RETARDO">
    <log expr="'****'+ _sessionid +'        -04------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -Reprogramacion-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 5)" target="APLICAR_RETARDO">
    <log expr="'****'+ _sessionid +'        -05------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -Postllamada-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 6)" target="DESVIO_GRUPOAGENTES">
    <log expr="'****'+ _sessionid +'        -06------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -Desvio a Grupo-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 7) &amp;&amp; ((_data.Aux_posicionRegistro == _data.Aux_posicionOrigen) || (_data.Aux_tagRegistro != _data.Aux_tagOrigen))" target="LLAMAR">
    <log expr="'****'+ _sessionid +'        -07------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -Agendamiento-'"/>
    </transition>
    <transition cond="(_data.Aux_motivoGuardado == 7) &amp;&amp; (_data.Aux_posicionRegistro != _data.Aux_posicionOrigen) &amp;&amp; (_data.Aux_tagRegistro == _data.Aux_tagOrigen)" target="CAMBIA_TAG">
    <log expr="'****'+ _sessionid +'        -08------------------ Se ACTUALIZA '+ _data.Aux_sesionEstado +'. Motivo: '+ _data.Aux_motivoGuardado +' -Agendamiento-'"/>
    </transition>
    </state>
    <state id="CAMBIA_TAG">
    <onentry>
    <log expr="'****'+ _sessionid +'****_14_************** CAMBIA_TAG **************'"/>
    <ocs:set_flex_attr record_id = "_data.Aux_registroActual">
    <ocs:flex_attr attr="'USERDATA'" type="'string'" key="'TAGSECUENCIA'" value="'AGENDA'"/>
    </ocs:set_flex_attr>
    </onentry>
    <transition target="LLAMAR">
    <log expr="'****'+ _sessionid +'        -01------------------ Se ACTUALIZA TAGSECUENCIA del registro '+ _data.Aux_registroActual"/>
    </transition>
    </state>
    <state id="REPROGRAMAR_DIA">
    <onentry>
    <ocs:get_info what="'TIMERANGE'" param="'BH'"/>
    <log expr="'****'+ _sessionid +'****_15_************** REPROGRAMAR_DIA: '+ _data.Aux_numero +' **************'"/>
    </onentry>
    <transition event="ocs.info" cond= "(_event.data.result &gt;= '0')"  target="ACTUALIZAR_BBDD">
    <assign location="_data.Aux_retardoIntento"  expr = "parseInt(_event.data.result)"/>
    <log expr="'****'+ _sessionid +'        -01------------------ El Registro '+ _data.Aux_registroActual +' se REPROGRAMA '+ _data.Aux_retardoIntento +' segundos'"/>
    </transition>
    <transition event="ocs.info" cond= "(_event.data.result &lt; '0')"  target="ACTUALIZAR_BBDD"/>
    <transition event="Error.*" target="FIN">
    <log expr="'****'+ _sessionid +'        -02-----ERROR-------- No se ha CONFIGURADO el objeto STATISTICAL TABLE a nivel de Grupo de Campania!!!'"/>
    </transition>
    <onexit>
    <assign location="_data.Aux_desvioGrupo" expr = "_data.Aux_desvioGrupo = 0"/>
    <assign location="_data.Aux_parametrosEstado" expr = "escribir_parametro(_data.Aux_parametrosEstado, 10, _data.Aux_desvioGrupo)"/>
    <assign location="_data.Aux_sesionEstado" expr = "crear_cadena(_data.Aux_parametrosEstado)"/>
    <assign location="_data.Aux_motivoGuardado" expr = "4"/>
    </onexit>
    </state>
    <state id="APLICAR_RETARDO">
    <onentry>
    <ocs:timeout delay="_data.Aux_retardoIntento"/>
    <log expr="'****'+ _sessionid +'****_16_************** APLICAR_RETARDO: '+ _data.Aux_retardoIntento +' segundos **************'"/>
    </onentry>
    <!-- si fase 0 y es finde ciclo en push preview -->
    <transition event="ocs.timeout" cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_motivoGuardado == 1) &amp;&amp; (_data.Aux_tipoMarcacion== 'manual')" target="OBTENER_ORDEN">
    <assign location="_data.Aux_motivoGuardado" expr = "0"/>
    <log expr="'****'+ _sessionid +'        -01------------------- Se APLICO el retardo de -FIN_CICLO-. Se BUSCA el Registro del siguiente intento para enviarlo al Grupo de Agentes'"/>
    </transition>
    <!-- si fase 0 y se reintenta tipificado por sistema o tipificado por agente en marcacion manual -->
    <transition event="ocs.timeout" cond="(_data.Aux_accionIntento == 'REINTENTO') &amp;&amp; (_data.Aux_fase == 0) &amp;&amp; (_data.Aux_grupo == 0)" target="VERIFICAR_INTENTOS">
    <assign location="_data.Aux_motivoGuardado" expr = "0"/>
    <log expr="'****'+ _sessionid +'        -02------------------- Se APLICO el retardo. Se REINTENTA el Registro Actual'"/>
    </transition>
    <!-- si fase 0 y se rota tipificado por sistema o tipificado por agente en marcacion manual -->
    <transition event="ocs.timeout" cond=" (_data.Aux_accionIntento == 'ROTAR') &amp;&amp; (_data.Aux_fase == 0) &amp;&amp; (_data.Aux_grupo == 0)" target="OBTENER_ORDEN">
    <assign location="_data.Aux_motivoGuardado" expr = "0"/>
    <assign location="_data.Aux_inicializarCadena" expr = "'yes'"/>
    <log expr="'****'+ _sessionid +'        -03------------------ Se APLICO el retardo. Se BUSCA el Registro del siguiente intento para enviarlo al Grupo de Agentes'"/>
    </transition>
    <!-- si fase 0 y hay desvio a grupo marcacion automatica -->
    <transition event="ocs.timeout" cond="(_data.Aux_fase == 0) &amp;&amp; (_data.Aux_grupo == 1) &amp;&amp; (_data.Aux_tipoMarcacion== 'automatico')" target="OBTENER_ORDEN">
    <log expr="'****'+ _sessionid +'        -04------------------ Se APLICO el retardo. Se BUSCA el Registro correspondiente al siguiente intento'"/>
    </transition>
    <!-- si fase 1 y hay devio a grupo de agentes -->
    <transition event="ocs.timeout" cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 1)" target="OBTENER_ORDEN">
    <log expr="'****'+ _sessionid +'        -05------------------ Se APLICO el retardo. Se BUSCA el Registro del siguiente intento para enviarlo al Grupo de Agentes'"/>
    </transition>
    <!-- si fase 1 y reallamada inmediata -->
    <transition event="ocs.timeout" cond="(_data.Aux_fase == 1) &amp;&amp; (_data.Aux_grupo == 0)" target="OBTENER_REGISTRO">
    <assign location="_data.Aux_motivoGuardado" expr = "0"/>
    <log expr="'****'+ _sessionid +'        -06------------------ Se APLICO el retardo. Se BUSCA el Registro de -RELLAMADA-'"/>
    </transition>
    </state>
    <state id="DESVIO_GRUPOAGENTES">
    <onentry>
    <log expr="'****'+ _sessionid +'****_17_************** DESVIO_GRUPOAGENTES **************'"/>
    <ocs:set_exec_flag flag="'PostProcessing'" value="'Switch'"/>
    </onentry>
    <transition target="FIN"/>
    </state>
    </state>
    <!-- FIN FLUJO -->
    <final id="FIN">
      <onentry>
    <log expr="'****'+ _sessionid +'****____**************______ FIN ______**************'"/>
      </onentry>
    </final>
    </scxml>


    ------------------------------
    DANIEL MARTIN MOLINA PICO
    British Telecommunications PLC
    ------------------------------



Need Help finding something?

Check out the Genesys Knowledge Network - your all-in-one access point for Genesys resources