<?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') && (_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) && (_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) && (_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) && (_data.Aux_typeRegistro >= 5)" target="OBTENER_AGENDADO">
<log expr="'****'+ _sessionid +' -01------------------ Llamada Agendada'"/>
</transition>
<!-- llamada inconclusa -->
<transition cond="(_data.Aux_agendamiento == 0) && (_data.Aux_typeRegistro < 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) && (_data.Aux_fase == 0) && (_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) && (_data.Aux_grupo == 1) && (_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) && (_data.Aux_grupo == 1) && (_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) && (_data.Aux_grupo == 1) && (_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) && (_data.Aux_fase == 1) && (_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 != '') && (_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 == '') && (_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) && (_data.Aux_tagContacto == 'FIN_CICLO') && (_data.Aux_flagLLamada == 1) && (_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') && (_data.Aux_flagLLamada == 1) && ((_data.Aux_tipoMarcacion == 'automatico') || ((_data.Aux_tipoMarcacion == 'manual') && (_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') && (_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') && ( (_data.Aux_fase == 0) || ((_data.Aux_fase == 1) && (_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) && (_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) && (_event.data.record_id == '0') && (_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) && (_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) && (_data.Aux_typeRegistro >= 5) && (_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) && (_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) && (_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) && (_data.Aux_grupo == 0) && (_data.Aux_tagContacto == 'RELLAMADA') && ((_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) && (_data.Aux_grupo == 0) && (_data.Aux_tagRegistro == 'RELLAMADA') && (_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) && (_data.Aux_grupo == 1) && (_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) && (_data.Aux_grupo == 1) && (_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) && (_data.Aux_tipoMarcacion == 'manual') && (_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) && (_data.Aux_contadorDiarios == 0) && (_data.Aux_contadorTotales == 0) && (_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) && ( _data.Aux_contadorDiarios < _data.Aux_maxDiarios ) && ( _data.Aux_contadorTotales < _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') && (_data.Aux_matriculaAgente != 'FIN_CICLO') && (_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) && (_data.Aux_contadorTotales < _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' ) && ( _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) && (_data.Aux_tipoMarcacion == 'automatico' || ((_data.Aux_tipoMarcacion == 'manual') && (_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') && (_data.Aux_accionIntento == 'ROTAR') && (_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') && (_data.Aux_accionIntento == 'REINTENTO') && (_data.Aux_fase == 1)"/>
<assign location="_data.Aux_grupo" expr = "1"/>
<!-- si fase 1 y se rota-->
<elseif cond="(_data.Aux_callResult != 'Rellamada inmediata') && (_data.Aux_accionIntento == 'ROTAR') && (_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') && (_data.Aux_matriculaAgente != 'FIN_CICLO') && (_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 >= _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) && (_data.Aux_contadorDiarios >= _data.Aux_maxDiarios) && (_data.Aux_accionIntento != 'NA') && (_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) && (_data.Aux_contadorDiarios >= _data.Aux_maxDiarios) && (_data.Aux_accionIntento != 'NA') && (_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) && (_data.Aux_contadorDiarios < _data.Aux_maxDiarios) && (_data.Aux_accionIntento != 'NA') && (_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) && (_data.Aux_contadorDiarios < _data.Aux_maxDiarios) && (_data.Aux_accionIntento != 'NA') && (_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) && (_data.Aux_contadorTotales < _data.Aux_maxTotales) && (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) && (_data.Aux_contadorTotales < _data.Aux_maxTotales) && (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) && ((_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) && (_data.Aux_posicionRegistro != _data.Aux_posicionOrigen) && (_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 >= '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 < '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) && (_data.Aux_motivoGuardado == 1) && (_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') && (_data.Aux_fase == 0) && (_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') && (_data.Aux_fase == 0) && (_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) && (_data.Aux_grupo == 1) && (_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) && (_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) && (_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
------------------------------
Original Message:
Sent: 06-05-2024 01:42
From: Santosh Sundaram
Subject: Pre-dial Validations
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
------------------------------