PROMO - Manual de Integración 6.1
Manual de integración PROMO V6.1
Índice
Acerca del manual
Propósito y alcance Documentación de PROMO Introducción a la Integración
Comunicación con el Motor de Promociones Servidor TCP/IP
Servidor REST Sesiones
Motor: Engine Request Encabezado Cuerpo
Atributos de comandos Engine Response
Encabezado
Valores del atributo "ack"
Cuerpo
Opciones Promociones
Participantes de condición Beneficios
Tipos de beneficios Participantes de combo Elementos aplicados Elementos no aplicados Sugerencias
Promociones sugeridas Fidelidad
Nuevos Status en <Loyalty>
LoyaltyValidation LoyaltyActivation LoyaltyTransfer
LoyaltyVoid LoyaltyAssign FINISH COMMIT ROLLBACK TransactionRequest Response - LoyaltyValidation Response - Cupones Response - Tarjetas Fidelidad
Response - Activación de tarjeta (en LoyaltyActivation) Response - Activación de tarjeta (en Finish)
Response - LoyaltyTransfer
Response - LoyaltyVoid Imputación de saldos en tarjeta Descuento de saldo en tarjeta Engine Response: Tags Errors Flujos de Tarjetas
Alta de tarjeta Consulta de tarjeta
Activación de tarjeta (loyaltyActivation) Activación de tarjeta (FINISH) Transferencia entre tarjetas
Imputación o descuento de saldo fuera de una transacción
Imputación o descuento de saldo devenidos de la aplicación de un beneficio.
Posibles escenarios de Operaciones con tarjetas Engine Response: ReturnFinish
Clientes
Operatoria (en base a los posibles escenarios):
Consola: Servicios REST
Servicios REST – Consulta de Cliente Servicios REST – Consulta de Cupón Servicios REST – Consulta de Tarjetas Consejos prácticos
Interacción con el Motor de Promociones Manejo de sesiones
Implementación de ítems aplicados
Ítems aplicados en beneficios monetarios Ítems aplicados en beneficios no monetarios Vistas de BBDD
Acerca del manual
Propósito y alcance
El presente manual tiene como finalidad la capacitación al usuario que desee integrar su aplicación de ventas con el Motor de Promociones.
Se provee una descripción detallada de los mensajes que deben ser enviados al mismo y de cómo interpretar los mensajes de respuesta que dará ante un requerimiento.
Documentación de PROMO
PROMO provee la siguiente documentación:
Manual de usuario:
Este documento tiene la finalidad de capacitar al usuario que desee utilizar la consola de Administración de Promociones de PROMO.
Manual de instalación:
Este documento describe los procedimientos para instalar los componentes de Motor y Consola, la creación e inicialización de la Base de Datos y los requerimientos necesarios para el correcto funcionamiento de dichos componentes.
Manual de integración:
Este documento describe detalladamente los mensajes que deben ser enviados al Motor de Promociones y la forma de interpretar los mensajes de respuesta que el mismo dará ante un requerimiento.
Antes de continuar con la lectura del presente manual, se recomienda leer los capítulos 2 y 3 del Manual de usuario.
Nota:
Introducción a la Integración
El motor de promociones es el componente de PROMO encargado de recibir requerimientos desde el punto de venta y luego responderlos. Esta interacción se realizará a través de una serie de mensajes con formato XML que siguen un Protocolo de Comunicación definido. En este sentido el motor de promociones puede funcionar tanto como servidor TCP/IP o bien como servidor REST, dependiendo de las necesidades, preferencias y requerimientos tecnológicos que posea el punto de venta.
Por otra parte, hay casos en que es necesaria la interacción con las bases de datos que posee la consola, como puede ser consultas directas a los elementos de fidelidad existentes (Ejemplo: Cupones y Tarjetas existentes). Para estos casos, la consola de Promo es la encargada de exponer una serie de servicios para exponer o brindar dicha información a los sistemas externos. Esta forma de integración, como es de notar, en realidad tiene objetivos muy diferentes a la primera y se trata en una sección especial en este documento.
A continuación describiremos las dos opciones de integración con el motor de promociones mencionadas anteriormente.
Comunicación con el Motor de Promociones
Como mencionamos anteriormente, la forma de dialogar con el Motor de Promociones es a través de la mensajería XML presentada más adelante en este documento. Estos mensajes utilizan como transporte dos formas de comunicación:
Servidor TCP/IP
Uno de los protocolos más comunes en la actualidad. Permite enrutamiento y envío seguro. En este caso, el motor actúa como un servidor que espera conexiones entrantes en un puerto TCP/IP determinado.
El punto de venta debe enviar y recibir paquetes TCP/IP que poseen el siguiente formato:
HEADER | MESSAGE Donde:
Header (encabezado): son 6 Bytes que indican la cantidad de bytes que tendrá el cuerpo del mensaje que se envía al motor de promociones.
Message (mensaje): mensaje enviado al Motor de Promociones con el formato XML descripto en este documento.
Servidor REST
REST (Representational State Transfer) es un estilo de arquitectura utilizado en aplicaciones distribuidas en red. Se basa en protocolos cliente-servidor, sin estado, y como en el caso de PROMO mayoritariamente se implementa utilizando protocolo HTTP. La idea es una alternativa simple al uso de mecanismos más complejos como CORBA, RPC o SOAP.
El motor de promociones se presenta aquí como un servidor HTTP que espera conexiones en un puerto TCP/IP determinado.
Para utilizar esta forma de comunicación la aplicación cliente debe enviar requerimientos HTTP y esperar las respuestas correspondientes. La invocación o formato de utilización es: (puede realizarse en un browser como FireFox, Chrome, etc.)
/engine/evaluate?request=message http://servidor:puerto
Donde:
http://servidor:puerto: es la url para acceder al servidor donde se encuentra en ejecución el motor de PROMO.
message: es el mensaje correspondiente que debe evaluar el motor, como se especifica en el presente documento.
Presentaremos aquí varios ejemplos utilizando dos clientes: el navegador Firefox y la aplicación "curl" de dominio público (https://curl.haxx.se/). Suponemos entonces que necesitamos enviar el siguiente mensaje para ser evaluado por el motor:
Ejemplo
<message companyId="sts" store="9905" terminal="001" date-time="2016-11-20 23:01" messageId="0001" void-trx="
false" suggest="true" response="true" init-tck="true" evaluate="true" msg-version="2.4" status="init" ><item-add seq="1" unitprice="1" xprice="1" qty="1" magnitude="1" code="P001" discountable="true"/>
</message>
Al mismo tiempo el servidor donde se encuentra disponible el motor de PROMO es http://demoserver.net y el puerto 3625.
En Firefox la url que usamos para esta prueba es:
http://demoserver.net:3625/engine/evaluate?request=<?xml version="1.0"?><message companyId="sts" store="9905"
terminal="001" date-time="2016-11-20 23:01" messageId="0001" void-trx="false" suggest="true" response="true"
init-tck="true" evaluate="true" msg-version="2.4" status="init" ><item-add seq="1" unitprice="1" xprice="1" qty="
1" magnitude="1" code="P001" discountable="true"/>
</message>
Esto en una sola línea como se ve en la figura siguiente.
Acorde a los resultados de la evaluación del mapa se verá en el browser una respuesta del tipo:
De la misma forma, otro ejemplo es realizar lo mismo pero utilizando curl. En este caso entonces por línea de comandos se envía el mensaje de la siguiente forma:
curl -v http://demoserver.net:3625/engine/evaluate?request=%3C?xml%20version=%221.0%22?%3E%3Cmessage%20store= % 229901%22%20terminal=%22001%22%20date-time=%222016-11-20%2023:01%22%20messageId=%220001%22%20void-trx=%22false%
22%20suggest=%22true%22%20response=%22true%22%20init-tck=%22true%22%20evaluate=%22true%22%20msg-version=%222.4%
22%20status=%22init%22%20%20%3E%3Citem-add%20seq=%221%22%20unitprice=%22219%22%20xprice=%22219%22%20qty=%221%22%
20magnitude=%221%22%20code=%22P001%22%20discountable=%22true%22/%3E%3C/message%3E
Nótese que el mensaje xml debe ser codificado, cosa que en caso como Firefox, el navegador se encarga de esta conversión automáticamente.
En la siguiente figura se muestra el ejemplo completo con el requerimiento y la respuesta. Se han borrado algunos datos relativos al servidor en que se ejecutó ya que no hacen al ejemplo.
Sesiones
Antes de comenzar con la descripción del mensaje utilizado para el envío de requerimientos al Motor de Promociones, es necesario introducir al lector en el manejo de sesiones que éste realiza.
Una sesión es un espacio reservado dentro del Motor de Promociones para el manejo de la información que respecta a una transacción. De esta forma es capaz de manejar diversas transacciones
concurrentemente, teniendo una sesión por cada una de ellas. Podemos asimilar este concepto con la apertura de una transacción que ha comenzado a realizarse en el punto de venta y que irá incorporando elementos hasta el cierre de la misma.
La sesión se identifica por la concatenación de los siguientes campos contenidos en el encabezado del mensaje (explicado en la sección siguiente):
SessionId = CompanyId + Store + Terminal
Al iniciarse una nueva sesión los datos de la transacción correspondiente estarán vacíos, pudiendo ser luego completados como se indicará más adelante, es decir se reserva solamente una transacción sin elementos pero con los datos de encabezado como puede ser la fecha y hora de la misma, más la tienda y terminal donde ocurre.
Asimismo, la sesión tendrá un time-out (tiempo de expiración) configurable, el cual una vez transcurrido sin que se registre alguna recepción de mensaje hará que la sesión se elimine automáticamente, haciendo necesaria la apertura de una nueva y, si se continúa con la transacción, el reenvío de los datos que la sesión expirada contenía. Ver el manual de instalación y Configuración para mayor detalle.
Hay que notar de lo visto hasta aquí, que tanto se opte por comunicaciones con el motor de promociones en su servidor TCP/IP como REST, ambos utilizan la misma mensajería que será presentada en este documento y que se ha denominado "MESSAGE" en ambos casos.
Motor: Engine Request
Anteriormente mencionamos que el motor de promociones es el componente de PROMO encargado de recibir requerimientos desde el punto de venta y luego responderlos. Esta interacción se realizará a través de una serie de mensajes con formato XML que seguirá una serie de reglas definidas.
En esta sección se presentará la estructura de los mensajes XML enviados por el punto de venta que desea interactuar con Promo. Estos mensajes se denominan REQUEST o solicitudes. El formato General es:
<message ... propiedades del encabezado ...>
... elementos del cuerpo del mensaje ...
</message>
Encabezado
Como se mencionó anteriormente, los mensajes que se envíen al Motor de Promociones serán en XML. El elemento raíz de ese mensaje XML deberá ser la etiqueta <message>, siendo esta etiqueta a la que se le llamará encabezado, y contendrá una serie de atributos que serán utilizados por el Motor de Promociones para conocer el momento y lugar de la transacción, si debe o no iniciar una nueva sesión, etc.
Contenidos dentro de esta etiqueta se encontrarán los comandos que quieran ejecutarse en el Motor, los cuales formarán el cuerpo del mensaje, tema desarrollado en la sección siguiente.
Los atributos que puede poseer el encabezado son:
Propiedad Tipo de dato Descripción Requerido Valor ante ausencia
companyId Alfanumérico Identifica la compañía que envia el
mensaje
SI
store Alfanumérico Identifica el local que envía el mensaje. Sí
terminal Numérico Identifica la terminal emisora Sí
date-time YYYY-MM-DD HH:MM:SS Fecha y hora del mensaje. (date-time="
) 2017-03-21 15:20:26"
Sí
messageId Numérico positivo Identifica cada uno de los mensajes
enviados por la terminal, siendo este Sí
Importante:Se debe tener en cuenta que si en el ticket se encuentran caracteres que no pertenezcan al alfabeto inglés o caracteres reservados XML (como ser '>', '<', '"'), no se asegura que éstos sean interpretados correctamente por el Motor de Promociones.
número utlizado por el Motor de Promociones como identificador cuando envíe una respuesta.
void-trx Booleano Indica si la transacción es una devolución. No "false"
response Booleano Indica si se desea que el Motor dé una
respuesta ante el mensaje enviado.
No "false"
init-tck Booleano Indica si con este mensaje se debe iniciar
una nueva sesión.
No "false"
evaluate Booleano Le indica al motor que calcule las
promociones utilizando los elementos ingresado hasta ese momento.
No "false"
status Alfanumérico Indica en que estado se encuentra el
punto de venta sales total payment
Existen valores especificos de esta propiedad que serán presentados en la sección de Fidelidad
No ""
msg-version Alfanumérico Indica la versión del mensaje en cuestión No ""
map-version Entero positivo Indica al motor que mapa utilizar. Tendrá
sentido sólo si el valor de "void-trx" es verdadero.
No ""
suggest Booleano Le indica al motor si debe sugerir
promociones o no. Si suggest-seq y suggest-seq-type no están presentes se tomará todo el contexto para realizar la sugerencia.
No "false"
suggest-seq Numérico Indica el número de secuencia sobre el
que el motor realizará la sugerencia en caso de que el atributo suggest="true".
Este atributo será acompañado por el suggest-seq-type, que de no ser especificado, se asumirá suggest-seq- type="item"
No "1" o null
suggest-seq-type Alfabético Indica el tipo de línea sobre la que deberá
hacerse la sugerencia en caso de que el atributo suggest="true". Este atributo será acompañado por el suggest-seq, que de no estar especificado, se asumirá sugget- seq="1". Los valores que puede tomar este atributo son: item, coupon, payment, event, customer.
No "item" o null
suggest-per-type Booleano Le indica al motor si deben sugerir
promociones teniendo en cuenta el tipo de los conjuntos participantes de la promoción o no. Si suggest-filter-type no está presente se sugerirán todas las
No "false"
promociones que estén disponibles para sugerencia teniendo en cuenta el atributo suggest del mapa y las promociones. Si está presente y en verdadero, los atributos suggest, suggest-seq y suggest-seq-type serán ignorados.
suggest-filter-type Alfabético Indica el tipo de conjunto participante de la promoción que deberá tenerse en cuenta para la sugerencia en caso de que el atributo suggest-per-type="true". Los valores que puede tomar este atributo son:
item, coupon, payment, event, customer.
Si no estuviera presente, se asume todos los tipos de conjuntos.
No "null"
suggest-extended Booleano Le indica al motor si debe mostrar la
informacion de los beneficios de cada promocion sugerida. Si suggest es false, el valor de este campo no tiene relevancia.
No "false"
offline Booleano Le indica al motor que la transacción será
tratada en modo offline, es decir ante una contingencia de comunicación con PROMO Central se almacenará para su posterior envío.
No "false"
originalTransaction Alfabético Para el caso de un valor de status =
requestTransaction, esta propiedad indicará la transacción que se requiere consultar
No ""
chosenOption Entero positivio En el caso de que el resultado de la
evaluación haya resultado en una serie de opciones (varios bloques "optional") este atributo permite que el sistema externo informe al motor de Promo, cual de esas opciones fue la que finalmente se han aplicado u otorgado al cliente. El valor es basado en 0, es decir la primer opción es la número 0, la siguiente la número 1 y así sucesivamente.
No 0
Ejemplo:
<message companyId="sts" store="00001" terminal="010" date-time="2017-12-04 12:30:33:00" messageId="0010" void- trx="false" response="true" init-tck="true" evaluate="true" status="payment" msg-version="2.0" map-version="15">
... cuerpo del mensaje ...
</message>
<message companyId="sts" store="00001" terminal="010" date-time="2017-12-04 12:30:50:00" messageId="0010" void- trx="false" response="true" init-tck="true" evaluate="true" status="payment" msg-version="2.0" map-version="15"
suggest="true" suggest-seq="3" suggest-seq-type="payment">
... cuerpo del mensaje ...
</message>
<message companyId="sts" store="00001" terminal="010" date-time="2017-12-04 12:30:50:00" messageId="0010" void- trx="false" response="true" init-tck="true" evaluate="true" status="payment" msg-version="2.0" map-version="15"
suggest-per-type="true" suggest-filter-type="coupon">
... cuerpo del mensaje ...
</message>
<message companyId="sts" store="00001" terminal="010" date-time="2017-12-04 12:30:50:00" messageId="0010" void- trx="false" response="true" init-tck="true" evaluate="true" status="payment" msg-version="2.0" map-version="15"
suggest="true" suggest-extended="true">
... cuerpo del mensaje ...
</message>
Cuerpo
El cuerpo del mensaje que se envía al Motor de Promociones estará compuesto por los comandos que se quieran ejecutar. Básicamente, los comandos pueden ser de dos tipos:
Acción Descripción
add Agrega el elemento a la sesión.
void Elimina el elemento de la sesión. El elemento se identifica por el número de secuencia.
Estos comandos pueden ser utilizados sobre los distintos elementos que pueden pertenecer a un ticket. A su vez, estos elementos pueden ser tipificados en 5 clases:
Elemento Descripción
item Identifica a los artículos.
coupon Identifica a los cupones.
loyaltycard Identifica a las tarjetas loyalty.
payment Identifica a los medios de pago.
event Identifica a los eventos u otros elementos no representables mediante los otros tipos.
customer Identifica a los clientes.
La manera de ejecutar un comando es utilizando una etiqueta con la forma <elemento-comando>.
De esta manera, si se desea, por ejemplo, agregar un nuevo artículo a la sesión el comando a utilizar será <item-add>, si se quiere cancelar un cupón agregado anteriormente se enviará un comando del tipo
<coupon-void> etc.
En el cuerpo del mensaje podrá contener uno, ninguno o varios de estos comandos.
Pueden ser enviados los comandos, al mismo tiempo que se abre una nueva sesión o se pide una evaluación.
También puede enviarse un mensaje sin comandos para, por ejemplo, solicitar la evaluación de un ticket.
Atributos de comandos
Cada uno de los comandos que se envían Motor de Promociones posee diversos atributos, los cuales identifican al elemento que se está enviando y definen diversas propiedades que poseen los mismos.
Tanto add, como void poseerán un número de secuencia, el cual identifica cada elemento unívocamente:
Propiedad Tipo de dato Descripción Requerido
seq Entero positivo Número identificador único del elemento dentro de la
transacción.
Sí
Este será el único atributo que poseerán los comandos del tipo void, siendo este el atributo que indica el elemento que se desea eliminar.
Por otro lado, el comando add poseerá una serie de atributos que definirán las distintas propiedades del elemento que se está agregando (además del número de secuencia antes mencionado). Dependiendo del elemento en cuestión, los atributos serán los siguientes:
Elemento Propiedad Tipo de dato Descripción Requerido Valor ante ausencia
Ítem unitprice Numérico positivo Precio unitario del artículo en
cuestión.
Si
xprice Numérico positivo Precio extendido del artículo en
cuestión. Es igual a la cantidad por el precio unitario.
Si
qty Entero positivo Cantidad de artículos en la línea. Si
magnitude Numérico positivo Si el artículo es mensurable por otro unidad que no sea la cantidad, deberá ser expresad en esta propiedad.
No 0
code Alfanumérico Código propio del artículo. No "-"
brand Alfanumérico Marca del artículo. No "-"
supplier Alfanumérico Proveedor al que pertenece el
artículo.
No "-"
discountable Alfanumérico Si el artículo es puede recibir descuentos o no.
No "-"
level1 Alfanumérico Nivel 1 de categorización del
artículo. Anteriormente este nivel se conocía con el nombre de Departamento.
No "-"
level2 Alfanumérico Nivel 2 de categorización del
artículo. Anteriormente este nivel se conocía como la Familia del artículo.
No "-"
level3 Alfanumérico Nivel 3 de categorización del
artículo. Anteriormente este nivel se conocía como la Categoría del artículo.
No "-"
level4 Alfanumérico Nivel 4 de categorización del
artículo. Anteriormente este nivel se conocía como la subcategoría del artículo.
No "-"
Coupon amount Numérico positivo Se utiliza para indicar el valor
monetario del cupón. Si no tiene no se utiliza.
No 0
type Alfanumérico Tipo de cupón. No "-"
qty Entero positivo Cantidad No 1
id Alfanumérico Identificador del cupón. No "-"
LoyaltyCard type Alfanumérico Tipo de tarjeta loyalty No "-"
id Alfanumérico Idenficiador de la tarjeta loyalty Si "-"
amount Numérico positivo Saldo de la tarjeta loyalty No 0
chargeAmount Numérico positivo Saldo a acreditar a una tarjeta loyalty
No 0
consumeAmount Numérico positivo Saldo a debitar a una tarjeta loyalty No 0
status Alfanumérico ENABLED o DISABLED para
habilitar o deshabilitar una tarjeta fidelidad (solo valido en status LoyatyActivation)
ENABLED para habilitar una tarjeta fidelidad (solo valido en status FINISH)
No "ENABLED"
Customer type Alfanumérico Tipo de cliente. No "-"
id Alfanumérico Identificador del cliente. No "-"
remainingAmount Numérico positivo Propiedad que se puede utilizar para indicar el saldo a favor o en contra del cliente en cuestión.
(compatibilidad con PROMO 4 y versiones anteriores)
No 0
points Entero positivo Saldo que posee el cliente.
(compatibilidad con PROMO 4 y versiones anteriores)
No 0
email Alfanumérico Atributo incluido para la consulta
de clientes
No ""
name Alfanumérico Atributo incluido para la consulta
de clientes
No ""
lastName Alfanumérico Atributo incluido para la consulta
de clientes
No ""
Identifier Numérico positivo Atributo incluido para la consulta de clientes
No ""
cardNumbre Numérico positivo Atributo incluido para la consulta de clientes
No ""
Payment Los atributos amount e itemamount son excluyentes y su uso depende de la versión de la promoción codificada que se configure en el motor para manejar los pagos parciales.
type Alfanumérico Tipo de medio de pago. No "-"
id Alfanumérico Identificador del pago. No "-"
plan Alfanumérico Plan del medio de pago. No "-"
amount Numérico positivo Dinero que se utiliza con ese
medio de pago. Dado que el monto del pago (PA) se calcula como PA
(1 - %desc) o PA = PIA *
= PIA (1+%recargo)*
se obtiene que el monto de los ítems que se desea pagar (PIA) se calcula como PIA = PA / (1 - % desc) o PIA = PA / (1+%recargo)
No 0
bank Alfanumérico Banco relacionado con el medio de
pago.
No "-"
itemamount Numérico positivo Dinero que representa el monto de items que se desea pagar.
No 0
balance Booleano Indica si con este medio de pago
se cancela el saldo de la transacción.Si el valor es true, entonces no es necesario enviar el amount o itemaount.
No false
Event type Alfanumérico Tipo de evento. No "-"
id Alfanumérico Identificador del evento. No "-"
value Alfanumérico Valor que representa el evento. No "-"
seqItem Alfanumérico Número de secuencia de los items
a los cuales hay que aplicar el descuento. Si no viene el atributo o viene vacio se asume que es para todo el ticket. En caso de tener varios secuencias, las mismas deben venir separados por coma.
Si algun alguna secuencia tiene mas de una cantidad, se debe concatenar con un =. Ejemplo: 1=2, 2,3=3 (indica que el descuento se aplica a dos elementos de la secuencia uno, uno de la secuencia dos y tres la secuencia 3
No
Nota: El número de secuencia debe ser único para cada tipo de elemento, pudiendo existir, por ejemplo, un cliente y un ítem la misma secuencia; pero nunca dos elementos con el mismo número de secuencia.
Ejemplo:
A continuación se presenta un ejemplo de un mensaje que agrega a la sesión del Motor de Promociones un ítem y un medio de pago (ambos con secuencia " "), y elimina un cupón (de secuencia " "):1 2
<message companyId="sts" store="00001" terminal="010" date-time="2017-12-04 12:30:00:" messageId="0010" void- trx="false" response="true" init-tck="true" evaluate="true" status="payment" msg-version="2.0" map-version="15">
<item-add seq="1" code="0001" discountable="true" unitaryPrice="25.0" qty="1.0" level1="MEN" level2="CASUAL"
supplier="" brand="LEVIS" xPrice="25.0" magnitude="1.0" />
<payment-add seq="1" type="CreditCard" amount="" id="000009" planId="10"/>
<coupon-void seq="2" />
<loyaltycard-add seq="5" id="3330000000222" type="puntos" />
</message>
Engine Response
En esta sección se describirá la estructura e interpretación del mensaje de respuesta que entregará el Motor de Promociones.
Como se mencionó con anterioridad, al igual que el mensaje de solicitud, el mensaje de respuesta que ofrece el Motor de Promociones tendrá un formato XML y constará de un encabezado y un cuerpo. En el encabezado contendrá información relativa a la terminal a la que se está respondiendo, errores que hayan podido suceder y versión del Motor.
En el cuerpo del mensaje se encontrarán las promociones que deberán aplicarse o sugerirse, los artículos a beneficiar, etc. En caso que no existan promociones a aplicar o sugerir o que no se haya solicitado la evaluación o sugerencia, el mensaje de respuesta constará sólo del encabezado.
Encabezado
Al igual que en el mensaje de solicitud el elemento raíz de la respuesta será la etiqueta <message>, siendo esta también lo que se denominará encabezado de la respuesta. Contendrá atributos que indican la tienda y terminal a la que va dirigido, identificación del mensaje, versión del mapa y del Motor con el que se realizó la evaluación, y código de retorno (acknowledge); siendo todos ellos enviados con
obligatoriedad:
Propiedad Tipo de dato Descripción
mapversion Alfanumérico Versión del mapa utilizado para la evaluación de las promociones.
companyId Alfanumérico El mismo que se envió en el en el mensaje de solicitud.
store Alfanumérico El mismo que se envió en el en el mensaje de solicitud.
terminal Entero El mismo que se envió en el en el mensaje de solicitud.
Importante:Si se agrega un elemento al contexto con un número de secuencia ya utilizado por un elemento del mismo tipo, el último enviado reemplazará al anterior.
messageId Entero El mismo que se envió en el en el mensaje de solicitud.
engine Alfanumérico Versión del Motor de promociones que realizó la evaluación.
ack entero Código de retorno (ver apartado siguiente).
transaction Alfanumérico Código que identifica la transacción en PROMO central (solo se
informa con la respuesta a un status de Loyalty)
transaction="1_1_20170321152000" (toma los datos de data- time del request para armar el nro de transaccion en PROMO central)
Valores del atributo "ack"
El atributo ack Del inglés acknowledge. es un atributo dentro del encabezado del mensaje de respuesta que indica la existencia o no de errores en la recepción y/o procesamiento del mensaje de solicitud.
Dependiendo del tipo de error o si el mensaje fue recibido correctamente, este atributo tendrá un valor particular:
Valor de ack Descripción Acción recomendada
0 No existieron errores. Utilizar la respuesta.
1 Error de comunicación o el mensaje es ilegible. Reenviar el mensaje y si el error persiste re validar su formato.
2 La sesión no fue inicializada o no existe dicha sesión. Iniciar sesión como se indica en "Manejo de sesiones ."
3 Error de validación en el mensaje. Revalidar el formato del mensaje. También puede consultarse el
archivo de log del Motor establecer con mayor exactitud cuál fue el error.
2001 Error de evaluación. Comunicarse con el administrador del Motor de Promociones
para que, por medio del archivo de log, se establezca cuál fue el error.
2002 No existe un mapa válido para el cálculo del ticket o mensaje
recibido.
Utilizar un mapa previo existente o no aplicar promociones.
2003 La sesión se encuentra en uso. Esperar unos 3 segundos aproximadamente y reintentar el envío.
2004 Error general de instanciamiento de la sesión. Comunicarse con el administrador del Motor de Promociones
para monitorear el equipo donde esté en funcionamiento el Motor.
2005 Time out de la sesión. La sesión expiró. Si durante la evaluación de la sesión, la misma termina por time
out, se envía un mensaje con ack 2005. Esperar y reintentar el envío.
4001 Error en evaluación de sugerencia. Comunicarse con el administrador del Motor de promociones
para que, por medio del archivo de log, se establezca cuál fue el error. Generalmente, este error puede tener que ver con un
suggest-seq o suggest-seq-type inválido o algún otro error en la evaluación de sugerencias.
8297 Se indica cuerpo del message es vacío. Este error se da con Status=LoyaltyValidation, LoyaltyActivation y
LoyaltyTransfer, y ocurre cuando el tag message no contienen ningún elemento de fidelidad.
8298 Si solicita recuperar la transacción original pero no envía cual es. Revisar la conformación del mensaje que se envía del pos a PROMO Central a fin de chequear la existencia del atributo origin alTransaction.
8299 Error genérico en el envío a PROMO central. Comunicarse con el administrador de PROMO para monitorear el
equipo donde esté en funcionamiento la consola de PROMO.
A partir de PROMO 5, se han agregado la serie de errores 9xxx los cuales aplican a Errores producidos en el procesamiento de la Consola de PROMO Central.
Dichos errores son:
Valor de ack Descripción Acción recomendada
9000 El mensaje no posee un ticket asociado. Reenviar el mensaje y si el error persiste re validar su formato.
Verificar la secuencia que mensajes que se está enviando.
9001 Existe una transacción pendiente. Se ha recibido una nueva
transacción para ser procesada pero existe una anterior que se encuentra pendiente.
Se debe enviar un mensaje con status=commit/rollback para finalizar la transacción anterior.
9002 No existe transacción pendiente. Se ha recibido un mensaje con
status=commit o rollback pero no existía una transacción previa pendiente.
Revisar la mensajería que se está enviando al motor, mayormente en su secuencia lógica.
9003 Se ha solicitado la información de una transacción previa pero no
se ha informado el identificador de la misma.
Verificar que la propiedad originalTransaction tenga un valor y sea válido.
9004 Se ha solicitado la información de una transacción previa pero la
transacción no existe.
Verificar el identificador de la transacción original que se está informando.
9005 Indica que la Consola está en modo Offline En algunos casos como loyaltyTransfer, si la consola está en
modo Offline, esta operación no se puede realizar. Contactar al administrador de PROMO para que chequee el equipo donde se encuentra corriendo la consola de PROMO.
9006 Job de Finalización de Transacciones Contactar al administrador de la aplicación y revisar las
configuraciones de la consola para restablecer el servicio.
9007 No se indica "CompanyId" en el header del mensaje. Verificar los datos enviados
9101 No se ha encontrado el Cupón Verificar los datos solicitados
9102 Cupón Consumido Verificar que el cupón no haya sido utilizado
9103 Cupón Inactivo Verificar que el cupón solicitado se encuentre activo.
9104 No se ha encontrado el tipo de cupón Verificar valor informado en el mensaje.
9105 El Cupón ha expirado. La fecha de vencimiento del cupón se ha alcanzado, con lo cual
verificar dicha situación.
9106 Se ha alcanzado el máximo número de usos Verificar dicha situación
9107 El cupón es nominado y no se ha informado un cliente Verificar dicha situación
9108 El tipo de cupón no está activo Verificar el tipo de cupón
9109 El monto enviado no corresponde al monto del cupón Verificar monto del cupón
9110 Cupón no usado El cupón ingresado a la transacción no ha participado de ninguna
promoción.
9201 No se encontró el encabezado de la transacción. Normalmente debido a un error interno, consultar con el
administrador del sistema.
9500 No se encontró la tarjeta loyalty Verificar los datos solicitados
9501 Tarjeta fidelidad inhabilitada Verificar los datos solicitados. Para algunas acciones, solo se
puede procesar Tarjetas fidelidad habilitadas
9502 Tarjeta fidelidad cancelada Verificar los datos solicitados. No se puede interactuar con
tarjetas fidelidad canceladas
9503 No se encontró el Tipo de tarjeta loyalty Verificar los datos solicitados
9504 Tipo de tarjeta no activa Verificar los datos solicitados. No se puede interactuar con tipos
de tarjeta inactivos
9505 Tipo de tarjeta no recargable Verificar los datos solicitados. Para opciones de Carga o
Recarga, el tipo de tarjeta debe ser recargable
9506 La tarjeta ya tiene un cliente asociado Verificar que la tarjeta en la activación el customer enviado.
9507 El estado enviado de tarjeta no existe. Verificar que se haya enviado un estado de tarjeta, en la
activación, valido (ENABLED, DISABLED) – En Mayúscula –
9508 La tarjeta no aplica al beneficio Verificar que el tipo de tarjeta sea recargable o que la tarjeta este
habilitada. Otro error puede ser que el tipo de tarjeta con el que se armó el beneficio, este inactivo o no exista en la transacción.
9509 La tarjeta requiere un cliente Verificar si el tipo de tarjeta es requerido, en la transacción debe
viajar al menos un cliente.
9510 Tarjeta no autorizada Esto se da, si el tipo de tarjeta requiere CVV y no fue enviado o
se ingresó mal
9511 Amount invalido Cuando se intenta descontar un amount que es mayor al total del
amount de la tarjeta, este mensaje aparecerá. Verificar que el amount sea menor al total.
Se informara este error cuando el tipo de tarjeta exija consumo
total del monto en una sola transacción y se esté enviando un amount con valor menor
Se informara este error cuando el tipo de tarjeta exija transferencia total del monto a otra tarjeta del mismo tipo y se esté enviando un chargeAmount con valor menor.
9512 Se requiere al menos dos tarjetas Este mensaje se utiliza para las transferencias. Se requiere que
haya dos tarjetas en el mensaje. La de origen en la Seq="1" y la de destino en la Seq="2"
9513 La tarjeta no admite transferencia. Verificar que la tarjeta origen admita Transferencia. Ya sea
parcial o total.
9514 La tarjeta destino esta activa Verificar que la tarjeta destino esta inactiva para realizar una
transferencia total.
9515 Los tipos de tarjetas no son iguales Verificar que los tipos de tarjeta sean iguales, es decir, el mismo.
9516 El saldo ingresado es mayor al tope de saldo Verificar que el valor ingresado para la carga de una tarjeta, no
sea mayor al Tope de saldo del tipo de tarjeta.
9603 Cliente inexistente Verificar datos de cliente ingresado en la transacción
9610 identificador de cliente vacío Verificar datos de cliente ingresado en la transacción
9611 Nombre de cliente vacío Verificar datos de cliente ingresado en la transacción
9612 Apellido de cliente vacío Verificar datos de cliente ingresado en la transacción
9613 ID de cliente Vacío Verificar datos de cliente ingresado en la transacción
9614 No se recibieron parámetros del cliente Verificar datos de cliente ingresado en la transacción
9620 Cliente ya existente Verificar datos de cliente ingresado en la transacción
9629 Cliente inactivo Verificar datos de cliente ingresado en la transacción
9901 Error de Cupón inesperado. Todo error relacionado al procesamiento de cupones que no se
encuentre tipificado en los códigos anteriores. Consultar al administrador del sistema.
9999 Error inesperado Todo error en el procesamiento de PROMO Central que no se
encuentre tipificado en los casos anteriores.
Importante:Si se produce un error en la evaluación de las sugerencias y durante la evaluación de las promociones, existen una o más promociones que fueron aplicadas satisfactoriamente, entonces, éstas son informadas con un ack 4001
Ejemplo de Error 4001
<message companyId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="4001">
<optional>
… promociones que componen la opción …
</optional>
<optional>
… promociones que componen la opción …
</optional>
</message>
Ejemplo de Respuesta correcta pero sin elementos informados
<message ack="0" engine="2.6" mapversion="1" messageId="1" companyId="sts" store="1" terminal="1" transaction="
1_1_20170515152511">
<loyalty>
<loyaltycards/>
<coupons/>
<errors/>
</loyalty>
</message>
Cuerpo
El cuerpo del mensaje de respuesta otorgado por el Motor de Promociones informa las promociones que deben ser aplicadas al ticket enviado hasta el momento y las promociones que deben ser sugeridas de acuerdo a lo especificado en el requerimiento. Estará compuesto por:
Una o más opciones
Cada opciones estará compuesta por una o más promociones
Cada promoción contendrá los participantes de condición (pueden no informarse) Cada promoción estará compuesta por uno o más beneficios
Cada beneficio contendrá los participantes de combo (puede ser vacío)
Cada beneficio contendrá también los elementos ítem aplicados (puede ser vacío) Un conjunto de sugerencias (esta parte del contenido puede no estar presente)
Las sugerencias están compuestas por una o más promociones
Por cada promoción se informará descripción, nombre, secuencias y tipos de secuencia que dieron lugar a la sugerencia.
Para el caso de evaluaciones a realizarse en PROMO Central, la composición de la respuesta será:
Un elemento fidelidad
Cada elemento de fidelidad puede estar compuesto por uno o más elementos fidelidad (cupones y/o tarjetas)
Cada cupón contendrá el detalle de los mismos para su emisión(opcional, puede no existir dicha información) Cada tarjeta contendrá el detalle de la tarjeta
Cada elemento de fidelidad puede estar compuesto también por errores
Opciones
Cada una de las opciones representa una de las opciones entre las que puede optar el cliente. Cada una surge de la aplicación de la función de convivencia OPTION (ver Manual de usuario). De esta forma, PROMO ya informa las combinaciones posibles. Las opciones se representan con la etiqueta <optional>. De no existir opciones, el cuerpo del mensaje de respuesta constará de una sola opción, es decir, existirá sólo una etiqueta <optional> que contendrá a las promociones a aplicar. Esta etiqueta no posee atributos.
Ejemplo
<message companyId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">
<optional>
… promociones que componen la opción …
</optional>
<optional>
… promociones que componen la opción …
</optional>
</message>
Promociones
Como se mencionó anteriormente, cada una de las opciones contendrá una o más promociones. Estas estarán identificadas por su nombre, siendo este su único atributo.
Las promociones estarán representadas con la etiqueta <promo>, teniendo el atributo representando su nombre:id
Propiedad Tipo de dato Descripción
id Alfanumérico Nombre de la promoción.
nro Alfanumérico Identificador de la base de datos de la promoción
Ejemplo
<message companyId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">
<optional>
<promo id="Promoción navideña" nro="1">
… participantes de condición …
… beneficios …
</promo>
<promo id="Promoción 2x1 en juguetes" nro="2">
… participantes de condición …
… beneficios …
</promo>
</optional>
</message>
A su vez, cada promoción podrá informar una serie de elementos participantes de condición y beneficios, ambos detallados en las secciones siguientes.
Participantes de condición
Los participantes de condición son un componente opcional que indica los elementos que influyeron en la condición (ver Manual de usuario) que provocaron que se otorgue el beneficio. Estos elementos estarán agrupados dentro de una etiqueta del tipo <conditionParticipants>. Los elementos participantes de condición estarán representados por la etiqueta que corresponda al tipo de elemento, agrupados como ya se describió dentro de <conditionParticipants>. Los elementos participantes poseerán los atributos informados al momento de agregarlos a la sesión.
Los participantes de condición son completamente opcionales, pudiendo no ser informados si así se configura en el archivo de definición de promociones (mapa) o si no existen participantes de condición. En ese caso la etiqueta <conditionParticipants> no formará parte de la promoción. Esta etiqueta no posee atributos.
Ejemplo
<message companyId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">
<optional>
<promo id="Promoción navideña" nro="1">
<conditionParticipants>
<item code="0056" brand="PANASONIC" xprice="99.0" magnitude="0.0" family="TV" type="qty" dept="ELECTRONIC" qty="
1.0" seq="2"/>
<customer seq="2" id="000004" type="preferred" />
<coupon seq="1" id="0001" amount="" qty="1.0" type="A" />
</conditionParticipants>
… beneficios …
</promo>
</optional>
</message>
Beneficios
Dentro de cada promoción existirá uno o más beneficios. Los beneficios son los elementos más importantes de la respuesta y definen la ventaja (económica o no) que debe darse al cliente, correspondientes a la promoción a la que pertenecen. Se definirán a través de la etiqueta <benefit>.
Existen beneficios de diversos tipos, cada uno con diferentes características. Es por ello que dependiendo del beneficio que se trate variarán los atributos correspondientes a la etiqueta <benefit> que lo representa. No obstante, existen algunos atributos que son comunes a todos ellos:
Propiedad Tipo de dato Descripción
1.
1.
2.
3.
4.
5.
6.
order Entero positivo Número que identifica unívocamente al beneficio dentro del
mensaje de respuesta. Su valor surge del orden en que se realizó su aplicación al realizar la evaluación.
benefitType Alfanumérico Tipo de beneficio que se trata.
displayMessage Alfanumérico Mensaje a mostrar por display en el punto de venta.
printerMessage Alfanumérico Mensaje a imprimir en la boleta o ticket al finalizar la compra.
applicationMethod Alfanumérico Forma de mostrar el beneficio. Puede poseer dos valores:
"lineByLine" (el beneficio debe mostrarse luego de cada artículo beneficiado)
"resume" (el beneficio debe mostrarse al final del ticket)
baseAmount Real positivo Indica el monto total sobre el cual se calculó el beneficio en
cuestión.
TLOGMessage Alfanumérico Mensaje a guardar en el TLOG
account Alfanumérico Cuenta contable a la cual será imputado el beneficio.
nro Alfanumérico Identificador de la base de datos del beneficio.
name Alfanumérico Identificador de la base de datos de la promoción que contiene al
beneficio.
Sin importar de qué tipo de beneficio se trate, estos pueden tener elementos aplicados y participantes de combo. Cada uno de estos se detallarán en las secciones siguientes.
Tipos de beneficios
PROMO posee ocho tipos de beneficio, siendo tres de ellos monetarios y cinco no monetarios. Los beneficios monetarios son aquellos que otorgan una ventaja económica al cliente, mientras que los no monetarios no.
Los tipos de beneficio estarán dados por el valor del atributo benefitType de la etiqueta <benefit>, y son los siguientes:
Monetarios:
FixedDiscount
Es un descuento fijo que se realiza sobre un conjunto de artículos.
PercentageDiscount
Representa un porcentaje de descuento sobre un conjunto de artículos.
NewPrice
Asigna un nuevo precio a uno o varios artículos.
TenderDiscountBenefit
Representa un % de descuento o recargo sobre un conjunto de artículos. La información para calcular este porcentaje se obtiene de los planes de pago (PaymentPlanBenefit) aplicados.
RedeemPointsBenefit
Realiza la conversión de saldo a dinero e informa un monto de descuento a aplicar en base al valor informado.
CalculatedCouponApplicationBenefit
Aplica como descuento el monto informado por un cupón calculado
1.
1.
2.
3.
4.
5.
6.
7.
No monetarios
PaymentPlanBenefit
Otorga un plan de pagos específico para una serie de artículos o para la compra.
CouponBenefit
Otorga una cierta cantidad de cupones específicos al cliente.
GiftBenefit
Entrega al cliente uno o más regalos específicos.
LoyaltyBenefit
Beneficia al cliente con una cierta cantidad de saldo de fidelidad (millas, puntos de monedero, dinero, etc.). A partir de la versión 2.8.0, este beneficio calcula la cantidad de saldo por cada elemento de aplicación y la cantidad de saldo en total que otorga.
FactorLoyaltyBenefit
Representa el otorgamiento de puntos, dinero, millas, etc. de fidelidad en relación a un factor dado.
PercentLoyaltyBenefit
Representa el otorgamiento de puntos, dinero, millas, etc. de fidelidad en relación a un porcentaje dado. Este beneficio calcula la cantidad de puntos, dinero, millas, etc. por cada elemento de aplicación y la cantidad de puntos, dinero, millas, etc. en total que otorga.
CalculatedCouponBenefit
Representa el otorgamiento de un cupón cuyo monto de descuento a otorgar está definido por un porcentaje de los participantes.
Como se mencionó en párrafos anteriores, cada tipo de beneficio tendrá atributos propios. Cada uno de estos atributos representa un parámetro específico del beneficio al que pertenece (indicado en benefitTy ). En la siguiente tabla se enumeran dichos atributos y en la columna "Requerido" se indica si el atributo estará siempre presente en la respuesta ("Si") o bien dependerá de su valor para ser incluido o no en pe
la misma ("No")
Beneficio Propiedad Tipo de dato Requerido Descripción
FixedDiscount unit Alfanumérico No El valor de "unit" indicará si el descuento
estará aplicado sobre todo el conjunto o sobre cada unidad de la propiedad seleccionada. Los valores posibles son:
"qty" (se aplica el descuento a cada unidad de cantidad)
"magnitude" (se aplica el descuento a cada unidad de cantidad)
Si no se informase la unidad (atributo vacío), la aplicación es sobre todo el conjunto de aplicados (ver "Elementos
").
aplicados
discountAmount Real positivo Si Descuento que se realizará sobre los
elementos aplicados. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.
prorationMethod Alfanumérico Si Método que se utilizará para prorratear el
beneficio entre los elementos aplicados, pudiendo ser:
"default"
"proportional" (prorratea el beneficio proporcionalmente al precio)
"most-expensive-first" (aplica el beneficio al artículo más caro)
"cheapest-first" (aplica el beneficio al artículo más barato)
PercentageDiscount unit Alfanumérico No Indicará si debe aplicarse el porcentaje de
descuento a cada unidad o al total. Los valores que puede tener son los indicados anteriormente.
discountPercentage Real positivo Si Porcentaje de descuento que se realizará
sobre los elementos participantes. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.
name Alfanumérico No Nombre de la promoción que ha originado
el beneficio.
prorationMethod Alfanumérico Si Método que se utilizará para prorratear el
beneficio entre los elementos aplicados.
Los valores que a tomar son los mismos indicados anteriormente.
NewPrice unit Alfanumérico No Indicará si debe aplicarse el nuevo precio
a cada unidad o al total. Los valores que puede tener son los indicados
anteriormente.
newPrice Real positivo Si Descuento fijo que se realizará sobre los
elementos participantes. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.
prorationMethod Alfanumérico Si Método que se utilizará para prorratear el
beneficio entre los elementos aplicados.
Los valores que puede tomar son los mismos indicados anteriormente.
TenderDiscountBenefit tender Alfanumérico Si Medio/s de pago que se pueden utilizar.
Puede ser una lista separada por comas.
limit Real positivo No Indica el máximo que se podrá abonar con
el medio de pago. Este tope sólo tendrá utilidad en el punto de venta sin afectar los calculos del Motor de Promociones. Si este valor es vacío significa que el monto es ilimitado.
planId Alfanumérico Si Identificador del plan que se otorga.
Type Alfanumérico No Tipo de medio de pago.
Bank Alfanumérico No Banco asociado al medio de pago.
Percent Real positivo Si Porcentaje de descuento o recargo que se
realizará sobre los elementos participantes.
percenttype Alfanumérico No
Indica si el porcentaje es un descuento (valor=discount) o recargo
(valor=surcharge).
tenderseq Entero positivo Si Número identificador único del elemento
medio de pado (payment) dentro de la transacción.
amount Real positivo Si Dinero que se utiliza con ese medio de
pago
itemamount Real positivo Si Dinero que representa el monto de items
que se desea pagar.
paymentAmount Real positivo Si Indica el monto total sobre el cual se
calculó el beneficio en cuestión.
installments Real positivo No Indica la cantidad de cuotas asociadas al
plan de pago
benefitedamount Real positivo Si Descuento que se realizará sobre los
elementos aplicados.
RedeemPointsBenefit Type Alfanumérico Si Indica el tipo de tarjeta a la que se aplicara
el beneficio
factor Real positivo Si Indica el factor de conversión para el
cálculo del descuento en base al monto informado en el amount
usedPoints Real positivo Si Indica la cantidad de saldo (punto, dinero,
etc.) que será utilizado para la aplicación de dicho beneficio
discountAmount Real positivo Si Descuento que se realizará sobre los
elementos aplicados. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.
prorationMethod Alfanumérico Si Método que se utilizará para prorratear el
beneficio entre los elementos aplicados.
Los valores que puede tomar son los mismos indicados anteriormente.
unit Alfanumérico Si Indicará si debe aplicarse el nuevo precio
a cada unidad o al total. Los valores que puede tener son los indicados
anteriormente.
CalculatedCouponApplicationBenefit discountAmount Real positivo Si Descuento que se realizará sobre los
elementos aplicados. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.
couponId Alfanumérico Si Identificador del cupón a redimir.
PaymentPlanBenefit tender Alfanumérico Si Medio/s de pago que se pueden utilizar.
Puede ser una lista separada por comas.
limitAmount Real positivo No Indica el máximo que se podrá abonar con
el medio de pago. Este tope sólo tendrá utilidad en el punto de venta sin afectar los
calculos del Motor de Promociones. Si este valor es vacío significa que el monto es ilimitado.
planid Alfanumérico Si Identificador del plan que se otorga.
type Alfanumérico No Tipo de medio de pago.
bank Alfanumérico Si Banco asociado al medio de pago.
percent Real positivo No Porcentaje de descuento o recargo que se
realizará sobre los elementos
participantes. El descuento o recargo será informado como un beneficio
TenderDiscountBenefit
percenttype Alfanumérico No Indica si el porcentaje es un descuento
(valor=discount) o recargo (valor=surcharge).
installments Real positivo No Indica la cantidad de cuotas asociadas al
plan de pago
paymentAmount Real positivo Si Indica el monto total sobre el cual se
calculó el beneficio en cuestión.
CouponBenefit couponId Alfanumérico Si Identificador del cupón a otorgar.
amount Si Indicara el monto asociado a un cupon
cuyo monto fue calculado
qty Entero positivo Si Cantidad de cupones a otorgar.
GiftBenefit giftid Alfanumérico Si Identificador del regalo a entregar. En
caso de que sea un producto en stock, puede representar el código del artículo a regalar.
giftType Alfanumérico Si Tipo de regalo a entregar. Puede ser vacío.
qty Entero positivo Si Cantidad de regalos con el identificador
indicado.
LoyaltyBenefit type Alfanumérico Si Tipo de valor (puntos, dinero, millas, etc.)
de fidelidad que se están otorgando.
amount Entero positivo Si Cantidad de puntos, dinero, millas, etc. a
otorgar del tipo especificado en el atributo anterior.
unit Alfanumérico Si Indicará si debe aplicarse la cantidad de
puntos, dinero, millas, etc. a cada unidad o al total. Los valores que puede tener son los indicados anteriormente.
totalpoints Real positivo Si Indica la cantidad total de puntos, dinero,
millas, etc. que otorga el beneficio luego de ser calculado.
FactorLoyaltyBenefit type Alfanumérico Si Tipo de puntos, dinero, millas, etc. de
fidelidad que se están otorgando.
factor Real positivo Si Factor multiplicador a utilizar para el cálculo de los puntos, dinero, millas, etc.
PercentLoyaltyBenefit type Alfanumérico Si Tipo de puntos, dinero, millas, etc. de
fidelidad que se están otorgando.
percent Real positivo Si Porcentaje de puntos, dinero, millas, etc.,
que se aplica sobre el xprice u
originalXPrice para calcular la cantidad de puntos, dinero, millas, etc. que
corresponden otorgar.
totalpoints Real positivo Si Indica la cantidad total de puntos, dinero,
millas, etc. que otorga el beneficio luego de ser calculado.
CalculatedCouponBenefit couponId Alfanumérico Si Identificador del cupón a otorgar.
amount Entero positivo Si Indicara el monto asociado a un cupon
cuyo monto fue calculado
Percentage Alfanumérico Si Indica el porcentaje en base al cual fue
calculado el monto del cupon
qty Entero positivo Si Cantidad de cupones a otorgar.
: Ejemplos