• No se han encontrado resultados

PROMO - Manual de Integración 6.1

N/A
N/A
Protected

Academic year: 2022

Share "PROMO - Manual de Integración 6.1"

Copied!
87
0
0

Texto completo

(1)

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

(2)

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:

(3)

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

(4)

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.

(5)

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

(6)

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.

(7)

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"

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.

(8)

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"

(9)

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>

(10)

<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 ...

(11)

</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:

(12)

Propiedad Tipo de dato Descripción Requerido

seq Entero positivo Número identificador único del elemento dentro de la

transacción.

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

(13)

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 "-"

(14)

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.

(15)

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.

(16)

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

(17)

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.

(18)

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

(19)

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

(20)

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:

(21)

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>

(22)

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.

(23)

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

(24)

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

(25)

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"

(26)

"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

(27)

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

(28)

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.

(29)

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

FixedDiscount

<message companiId="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>

<benefit order="1" benefitType="FixedAmount" displayMessage="" printerMessage="" unit="qty" prorationMethod="

PROPORTIONAL" applicationMethod="lineByLine" nro="3" amount="20.00" baseAmount="165.00">

… participantes de combo y/o elementos aplicados …

</benefit>

</promo>

(30)

</optional>

</message>

PercentageDiscount

<message companiId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">

<optional>

<promo id="Promoción navideña" nro="1">

<benefit order="1" benefitType="PercentageDiscount" displayMessage="" printerMessage="" unit="" prorationMethod="

PROPORTIONAL" applicationMethod="lineByLine" nro="3" Percentage="20.00" baseAmount="165.00">

… participantes de combo y/o elementos aplicados …

</benefit>

</promo>

</optional>

</message>

TenderDiscountBenefit

<message companiId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">

<optional>

<promo id="Promoción navideña" nro="1">

<benefit order="1" benefitType="TenderDiscountBenefit" displayMessage="" printerMessage="" applicationMethod="

lineByLine" nro="3" tender="VISA" planId="0A3" limitAmount="200.00" baseAmount="165.00" bank="HSBC" percent="

5.000" percenttype="discount" amount="2375.000" itemamount="2500.000" paymentAmount="2500.000" benefitedamount="

125.000" tenderseq="1" >

… participantes de combo y/o elementos aplicados …

(31)

</benefit>

</promo>

</optional>

</message>

RedeemPointsBenefit

<message ack="0" engine="2.6" mapversion="2" messageId="1" companiId="sts" store="1" terminal="1">

<optional>

<promo id="redime puntos" nro="58ff57be6772781234e7915e">

<benefit TLOGMessage="redime puntos" account="" applicationMethod="resume" baseAmount="100.00"

benefitType="RedeemPointsBenefit" discountAmount="100.00" displayMessage="redime puntos" factor="1"

name="58ff57be6772781234e7915e" nro="58ff57e76772781234e79164" order="1" printerMessage="redime puntos"

prorationMethod="PROPORTIONAL" unit="" usedPoints="100.0">

<apply>

<item magnitude="0.000" qty="1.000" seq="2" value="100.00" xprice="100.00"/>

</apply>

</benefit>

</promo>

</optional>

</message">

calculatedcouponaplicationbenefit

<message ack="0" engine="2.6" mapversion="2" messageId="1" companiId="sts" store="1" terminal="1">

<optional>

<promo id="redime impreso calculado" nro="5900e1a6a846390de08a7afe">

<benefit TLOGMessage="redime impreso calculado" account="" applicationMethod="resume" baseAmount="100.00"

benefitType="CalculatedCouponApplicationBenefit" couponId="1" discountAmount="10.00" displayMessage="redime

(32)

impreso calculado" name="5900e1a6a846390de08a7afe" nro="5900e1bca846390de08a7b04" order="1" printerMessage="

redime impreso calculado" prorationMethod="PROPORTIONAL" unit="">

<apply>

<item magnitude="0.000" qty="1.000" seq="2" value="10.00" xprice="100.00"/>

</apply>

</benefit>

</promo>

</optional>

</message>

PaymentPlanBenefit

<message companiId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">

<optional>

<promo id="Promoción navideña" nro="1">

<benefit order="1" benefitType="PaymentPlanBenefit" displayMessage="" printerMessage="" applicationMethod="

lineByLine" nro="3" tender="VISA" planId="A3" limitAmount="200.00" baseAmount="165.00" bank="HSBC" percent="

5.000" percenttype="discount" paymentAmount="2500.00">

… participantes de combo y/o elementos aplicados …

</benefit>

</promo>

</optional>

</message>

CouponBenefit

<message companiId="sts" store="MX" mapversion="3241" messageId="160" terminal="100" engine="2.6" ack="0">

<optional>

<promo id="Promoción navideña" nro="1">

Referencias

Documento similar

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

You may wish to take a note of your Organisation ID, which, in addition to the organisation name, can be used to search for an organisation you will need to affiliate with when you

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in