Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Aviso
titleUPDATE 7.4.3 - Registro de cliente Basico (pre-fidelizado)
  • Mensajes de fidelización: Los mensajes de loyaltyValidation ahora incluyen soporte para clientes registrados únicamente con el DNI. El motor enviará un mensaje con el código del cliente y el número de tarjeta de fidelidad, mientras que los demás campos se dejarán vacíos o con valores predeterminados.
  • Respuesta del motor: Al procesar una transacción que involucra un cliente registrado solo con su DNI, el motor devolverá el código del cliente, el número de tarjeta de fidelidad y el estado de la misma, permitiendo que el POS u otras interfaces puedan interactuar con estos clientes.


Nota
titlepromoplus.properties

promo.allowNonExistingCustomers = true


Este parámetro,  activa la funcionalidad que permite crear un nuevo cliente, con los datos minimos ya mencionados. Se incorpora en PROMO 7.4.3, con esta configuracion la posibilidad de registrar al cliente ingresando únicamente su DNI, sin requerir información adicional en ese momento. Ver: CONFIGURACIONES PARA EL ALTA DE CLIENTE DE REGISTRO BÁSICO (pre-fidelizado)


Expandir
titleEjemplos - Mensajería


Bloco de código
languagexml
themeEmacs
titleREQUEST
<message companyId="napse" store="napse" terminal="1" date-time="2024-08-27 14:58:17" init-tck="true" messageId="4356" void-trx="false" response="true" status="loyaltyvalidation" map-version="35" evaluate="true" >
<customer-add seq="1" id="99999802"  />
</message>


Bloco de código
languagexml
themeEmacs
titleRESPONSE
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="napse" engine="7.4.2-SNAPSHOT" mapversion="35" messageId="4356" store="napse" terminal="1" transaction="napse_napse_1_20240827145817">
<loyalty>
<loyaltycards/>
<coupons/>
<errors/>
<customers>
<customer birthday="false" code="99999802" email="-" identifier="-" incompleteData="false" lastName="-" limitedBenefits="" name="-" segment="" seq="1" type="-">
<loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" chargeLimit="5000.00" chargeLimitType="WEEKLY" contract="" id="1100001003" status="Activa" type="tarji" usePartial="true" validFrom="20240826" validTo="21240826"/>
</customer>
</customers>
<redeemTable/>
<goalsPrograms/>
</loyalty>




Dica
titleCrear Clientes (Alta de clientes pre-fidelizados)


Aviso

 Esta funcionalidad aplica solo si se ha habilitado el funcionamiento sin clientes pre-existentes.

Desde la versión Promo 7.4.3, se incorporó soporte para la creación automática de clientes durante el proceso de validación de fidelidad (loyaltyValidation) cuando el identificador (por ejemplo, DNI) del cliente no existe previamente en Promo. Esta modalidad fue extendida en versiones posteriores con los siguientes alcances:

  • Crear un cliente de forma automática únicamente a partir del DNI (identificador).

  • Clasificarlo como un cliente pre-fidelizado.

  • Asignar una tarjeta de fidelidad automática si la configuración lo permite.

  • Utilizar el identificador del cliente como número de tarjeta, respetando el prefijo y largo definidos por el tipo de tarjeta configurado.

  • Enviar automáticamente un evento de nuevo cliente a RabbitMQ para que sistemas externos (como Dynamics) puedan complementar la información o aplicar beneficios relacionados (por ejemplo, promociones por cargas acumuladas).

Configuraciones necesarias

Para habilitar esta funcionalidad, deben configurarse los siguientes parámetros:

1. En promoplus.properties:

Bloco de código
languagexml
themeEmacs
promo.allowNonExistingCustomers = true
lvCreateCustomersByID = true: habilita la creación con solo el identificador.
lvCustomerCardCreation = true: permite generar tarjeta automáticamente con el alta.
lvCustomerCardType = <código>: define el tipo de tarjeta a crear.
lvCustomerCardMethod = customerId: método de generación (por identificador del cliente).


Nota

El valor del ID del cliente no debe ser "‐", y el proceso no debe interferir con los validadores de cliente existentes.


Lógica de creación del cliente y tarjeta

  • Si el cliente no existe al momento del loyaltyValidation, y está habilitado el parámetro lvCreateCustomersByID, se crea un cliente pre-fidelizado solo con el DNI.

  • Si lvCustomerCardCreation = true, se genera automáticamente un elemento de fidelidad (tarjeta).

    • Si el método es customerId, se genera el número de tarjeta como:

Bloco de código
languagexml
themeEmacs
<prefijo configurado> + <DNI> (completando con ceros a la izquierda si es necesario)


  • Esta lógica replica la utilizada en el servicio de administración de clientes, asegurando consistencia en la numeración.

Ejemplo de mensaje XML con creación automática

Bloco de código
languagexml
themeEmacs
<message companyId="napse" store="1" terminal="1" date-time="2025-04-10T10:00:00" init-tck="true" messageId="123" void-trx="false" response="true" status="loyaltyValidation" evaluate="true">
    <customer-add seq="1" id="12345678"/>
</message>


Ejemplo de respuesta XML (cliente + tarjeta generada)

Bloco de código
languagexml
themeEmacs
<message ack="0" companyId="napse" engine="7.4.6" mapversion="100" messageId="123" store="1" terminal="1">
  <loyalty>
    <customers>
      <customer code="12345678" identifier="12345678" name="-" lastName="-" email="-">
        <loyaltycard id="5412345678" type="tarji" status="Activa"/>
      </customer>
    </customers>
  </loyalty>
</message>


Nota
titleConsideraciones
  • Esta funcionalidad fue diseñada con alcance limitado a clientes pre-fidelizados. No reemplaza ni modifica los flujos de fidelización completa, ni las validaciones de datos requeridas para clientes fidelizados.

  • Puede coexistir con flujos que utilizan servicios externos de validación (por ejemplo, validadores de cliente integrados a Promo 7.4).

  • En caso de que posteriormente el cliente se fidelice completamente (por ejemplo, desde una app), los datos pueden ser actualizados mediante API.




Expandir
titleMENSAJERIA - Ejemplos Prácticos

Veamos ahora un ejemplo de intercambio de estos mensajes:

Realizamos una petición con loyaltyValidation y el cliente no existe:


<message companyId="napse" store="1" terminal="10" date-time="2018-08-09 10:51:50" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" offline="false" >
<customer-add seq="1" id="10090504" type="test" limitedBenefits="5b7044246491fa1604a6d15b:200.00;" />
</message>




{
  "message": {
    "companyId": "napse",
    "store": "1",
    "terminal": "10",
    "date-time": "2018-08-09 10:51:50",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyValidation",
    "evaluate": "true",
    "offline": "false",
    "customer-add": [{
      "seq": "1",
      "id": "10090504",
      "type": "test",
      "limitedBenefits": "5b7044246491fa1604a6d15b:200.00;"
    }]
  }
}



2.La respuesta entrega valores por defecto:


<message ack="0" companyId="napse" engine="6.4.6" mapversion="1" messageId="1" store="1" terminal="10" transaction="napse_1_10_20180809105150">  
<loyalty>    
<loyaltycards/>    
<coupons/>    
<errors/>    
<customers>      
<customer code="10090504" email="-" identifier="-" lastName="-" limitedBenefits="" name="-" segment="" seq="1"/>    
</customers>  
</loyalty>
</message>




{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "6.4.6",
    "mapversion": "1",
    "messageId": "1",
    "store": "1",
    "terminal": "10",
    "transaction": "napse_1_10_20180809105150",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {},
      "customers": {
        "customer": [{
          "code": "10090504",
          "email": "-",
          "identifier": "-",
          "lastName": "-",
          "limitedBenefits": "",
          "name": "-",
          "segment": "",
          "seq": "1"
        }]
      },
      "redeemTable": {}
    }
  }
}

En este caso enviamos datos del cliente pero no completamos todos los campos necesarios:

<message companyId="napse" store="1" terminal="10" date-time="2018-08-09 10:51:50" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" offline="false" >
<customer-add seq="1" id="10090504" identifier="10090504" type="test" limitedBenefits="5b7044246491fa1604a6d15b:200.00;"  name="pepe" lastName="rodrigues" identifierType="cpf" />
</message>




{
  "message": {
    "companyId": "napse",
    "store": "1",
    "terminal": "10",
    "date-time": "2018-08-09 10:51:50",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyValidation",
    "evaluate": "true",
    "offline": "false",
    "customer-add": [{
      "seq": "1",
      "id": "10090504",
      "identifier": "10090504",
      "type": "test",
      "limitedBenefits": "5b7044246491fa1604a6d15b:200.00;",
      "name": "pepe",
      "lastName": "rodrigues",
      "identifierType": "cpf"
    }]
  }
}



La respuesta aun contiene datos por defecto:

<message ack="0" companyId="napse" engine="6.4.6" mapversion="1" messageId="1" store="1" terminal="10" transaction="napse_1_10_20180809105150">
<loyalty>
<loyaltycards/>
<coupons/>
<errors/>
<customers>
<customer code="10090504" email="-" identifier="10090504" lastName="rodrigues" limitedBenefits="" name="pepe" segment="" seq="1"/>
</customers>  
</loyalty></message>




{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "6.4.6",
    "mapversion": "1",
    "messageId": "1",
    "store": "1",
    "terminal": "10",
    "transaction": "napse_1_10_20180809105150",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {},
      "customers": {
        "customer": [{
          "code": "10090504",
          "email": "-",
          "identifier": "10090504",
          "lastName": "rodrigues",
          "limitedBenefits": "",
          "name": "pepe",
          "segment": "",
          "seq": "1"
        }]
      },
      "redeemTable": {}
    }
  }
}



Ahora enviamos TODOS los datos obligatorios para que el cliente sea creado


<message companyId="napse" store="1" terminal="10" date-time="2018-08-09 10:51:50" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" offline="false" >
<customer-add seq="1" id="10090504" identifier="10090504" type="test" limitedBenefits="5b7044246491fa1604a6d15b:200.00;"  name="pepe" lastName="rodrigues" identifierType="cpf" email="pepe@test.com" />
</message>




{
  "message": {
    "companyId": "napse",
    "store": "1",
    "terminal": "10",
    "date-time": "2018-08-09 10:51:50",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyValidation",
    "evaluate": "true",
    "offline": "false",
    "customer-add": [{
      "seq": "1",
      "id": "10090504",
      "identifier": "10090504",
      "type": "test",
      "limitedBenefits": "5b7044246491fa1604a6d15b:200.00;",
      "name": "pepe",
      "lastName": "rodrigues",
      "identifierType": "cpf",
      "email": "pepe@test.com"
    }]
  }
}


La respuesta es:

<?xml version="1.0" encoding="UTF-8"?>
<message ack="0" companyId="napse" engine="6.4.6" mapversion="1" messageId="1" store="1" terminal="10" transaction="napse_1_10_20180809105150">
<loyalty>
<loyaltycards/>
<coupons/>
<errors/>
<customers>
<customer code="10090504" email="pepe@test.com" identifier="10090504" lastName="rodrigues" limitedBenefits="" name="pepe" segment="" seq="1"/>    
</customers>  
</loyalty>
</message>




{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "6.4.6",
    "mapversion": "1",
    "messageId": "1",
    "store": "1",
    "terminal": "10",
    "transaction": "napse_1_10_20180809105150",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {},
      "customers": {
        "customer": [{
          "code": "10090504",
          "email": "pepe@test.com",
          "identifier": "10090504",
          "lastName": "rodrigues",
          "limitedBenefits": "",
          "name": "pepe",
          "segment": "",
          "seq": "1"
        }]
      },
      "redeemTable": {}
    }
  }
}


Ahora vamos a enviar el mensaje que enviamos en el punto 1, el cual tiene solo los datos básicos del cliente y por el cual en el punto 1 nos retornaba valores por defecto (el cliente no era conocido) mientras que ahora nos tendría que retornar todos los datos que ya conocemos y creamos en el punto 3.

<message companyId="napse" store="1" terminal="10" date-time="2018-08-09 10:51:50" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" offline="false" >
<customer-add seq="1" id="10090504" type="test" limitedBenefits="" />
</message>



{
  "message": {
    "companyId": "napse",
    "store": "1",
    "terminal": "10",
    "date-time": "2018-08-09 10:51:50",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyValidation",
    "evaluate": "true",
    "offline": "false",
    "customer-add": [{
      "seq": "1",
      "id": "10090504",
      "type": "test",
      "limitedBenefits": ""
    }]
  }
}



La respuesta efectivamente es:

<?xml version="1.0" encoding="UTF-8"?>
<message ack="0" companyId="napse" engine="6.4.6" mapversion="1" messageId="1" store="1" terminal="10" transaction="napse_1_10_20180809105150">
<loyalty>
<loyaltycards/>
<coupons/>
<errors/>
<customers>
<customer code="10090504" email="pepe@test.com" identifier="10090504" lastName="rodrigues" limitedBenefits="" name="pepe" segment="" seq="1"/>    
</customers>  
</loyalty>
</message>



{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "6.4.6",
    "mapversion": "1",
    "messageId": "1",
    "store": "1",
    "terminal": "10",
    "transaction": "napse_1_10_20180809105150",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {},
      "customers": {
        "customer": [{
          "code": "10090504",
          "email": "pepe@test.com",
          "identifier": "10090504",
          "lastName": "rodrigues",
          "limitedBenefits": "",
          "name": "pepe",
          "segment": "",
          "seq": "1"
        }]
      },
      "redeemTable": {}
    }
  }
}

...