PROMO - Manual de Usuario 7.0 - Apéndices 



CONTENIDO



 Apéndice I


Preguntas frecuentes

A continuación se listarán algunas preguntas que podrán surgirle mientras utilice la consola administradora.


No se visualiza en forma correcta PROMO en el browser

Para una correcta visualización, verificar que la versión del browser o navegador utilizada sea igual o superior a las listadas a continuación:

Internet Explorer, versión 11

Firefox, versión 1

Chrome


No puedo ingresar a la consola con mi usuario

Tanto el usuario como la clave del mismo deben ser ingresados del mismo modo que se encuentre registrado. Si el usuario se registró con mayúsculas también deberá ingresarse en la consola de igual modo.


No inicia la consola de PROMO, el error 404 – Pagina No Encontrada

De presentarse una pantalla de error en conexión al momento de intentar loguarse a la consola de PROMO, deberá como primera medida chequearse la URL por la que se intenta acceder a la consola, así como también las conexiones de red del equipo desde el cual se está queriendo acceder.

Si los puntos anteriores se encuentran correctos, beberá de contactarse al administrador de sistemas a fin de chequee que los servicios que se ejecutan cuando inicia PROMO estén corriendo correctamente.

Los servicios que deberán estar ejecutándose son:

Wildfly

MongoDB

PromoSimEngine


No se muestran cupones, tarjetas y puntos vencidos

Deberá chequearse que la tarea programada "Proceso de vencimiento de puntos" este corriendo correctamente.


No se pueden realizar simulaciones desde la consola

Deberá chequearse que el servicio PromoSimEngine este ejecutándose correctamente.




 Apéndice II

Sugerencias de Promociones


Para que el Motor de Promociones realice una sugerencia sobre una promoción primero y antes que nada, el mensaje que llega al motor de promociones debe solicitarlo mediante los atributos del encabezado destinados a tal fin.

A nivel promoción, será necesario indicar cuáles serán las promociones sugeridas, esto se realiza al momento de dar de alta una Promoción, así como también será necesario que a nivel mapa esté configurado el comportamiento del mismo ante la solicitud de sugerencias por parte del POS.

No hay ninguna propiedad en la configuración de las sugerencia que les dé un orden en cómo se muestran. El motor de Promo resuelve cada sugerencia a medida que le van llegando los items desde el POS.


Sugerencia Inteligente

En Promo, podra indicarse, por medio de la sugerencia inteligente, el valor sugerido pago para otorgar la promoción, es decir que al cumplir parcialmente con la condición de medios de pago que tiene agrupación por “Pago total productos beneficiados”, se debe generar la sugerencia con el valor que debe de abonarse para acceder a la promoción.

Esto podrá indicarse definiendo en el mensaje de la sugerencia la variable "  @totalPaymentAmount  "

Por ejemplo, colocando en el campo "Mensaje del POS": "Descuento 20% si paga el total @totalPaymentAmount con tarjeta ZetaCard

En caso que no se haya agregado ningún medio de pago parcial para la condicion pago total, el motor responderá: "Descuento 20% si paga el total con tarjeta ZetaCard"

Si la condición para Pago Total  fuera por ejemplo $ 15620, y se agrega un importe parcial del medio de pago, por ejemplo $5000 para el medio de pago de la condición, el motor responderá:

"Descuento 20% si paga el total 15620 con tarjeta ZetaCard"



 Apéndice III


Promociones por medio de pago

Las promociones por medio de pago son promociones que otorgan un descuento o recargo basados en la presentación de algún medio de pago en el punto de venta.

Si bien esto parecería un problema trivial, no lo es tanto. Ejemplo: Si el cliente paga con tarjeta de crédito Visa los artículos comprados y supongamos que los mismos suman $100, y por la utilización de dicho medio de pago tiene un 10% de descuento, en realidad ya no deberá pagar $100 sino $90 en el punto de venta. Es decir, que la promoción afecta el monto pagado.

Entonces, la idea básica de este concepto, es poder manejar descuentos/recargos monetarios calculados sobre el importe del pago. Esto incluye que los descuentos monetarios no solo apliquen sobre el total del ticket sino también sobre los pagos parciales que se realicen con el medio de pago condicionante de la promoción. Además es importante destacar en este punto que la idea no solo recae sobre un determinado medio de pago sino también sobre un plan de pagos asociado al mismo, por ejemplo: plan de 12 cuotas con Visa.

Para definir este tipo de promociones hay que definir por un lado las promociones correspondientes a los planes de pago de los distintos medios de pago (Promoción que da como beneficio No monetario - plan de pago).

Por otro lado, habrá que indicar en el mapa cuál será el método de cálculo que se utilizará para dichas promociones (Configuración de codificada de medio de pago que realizara el cálculo sobre los ítems o sobre los pagos).

Con esto el motor será capaz de calcular los descuentos o recargos que surjan de los distintos pagos y según los distintos planes.

Existen dos métodos para calcular los descuentos o recargos en base a los pagos que realice el cliente en el punto de venta:

          • Calculo del descuento o recargo sobre el precio de los artículos participantes.
          • Calculo del descuento o recargo sobre lo que el cliente realmente paga en el punto de venta.

NOTA

Para la definición de promociones cuyo beneficio sea un descuento o recargo aplicado por un determinado medio de pago, no será necesario configurar como condición al medio de pago, sino que se utilizará en el beneficio el medio de pago, su plan y su porcentaje de descuento.



Codificadas de medios de pago

La promoción "codificada" de medios de pagos se encarga de calcular los beneficios/recargos obtenidos de la aplicación de los pagos a los planes de pago generando Promociones basadas en pagos, donde se detalla el monto final del pago, así como los beneficios/recargos para cada ítem, dependiendo del atributo "Tipo de Descuento" definido en el beneficio (descuento/recargo).

Esta promoción recorrerá cada uno de los pagos del ticket e irá aplicando cada uno de los planes de pagos que se encuentren disponibles para el mismo.

Para que un plan de pago se considere disponible para un pago, se comparan cada uno de los atributos enviados en el pago con los atributos correspondientes al plan de pagos definido en la promoción.

Si el valor del atributo del pago se encuentra definido en el plan de pago se dará como válida la comparación, así como también si el atributo del pago no se envió o si es vacía.

La correspondencia entre los atributos del pago y los del plan de pago es la siguiente:

PAGO Informado por el canal (Ej.: POS)

PLAN DE PAGO definido en la promoción

Código

Medio de Pago

Cuotas

Cuotas

Tipo

Tipo

Plan

Plan

Prefijo

Prefijo



Por ejemplo, si el pago tiene plan=1, y el plan de pago definido en la promoción es 1,2,3 el pago será válido, de igual manera, si no se envió el plan, o si plan de pago definido está vacío, pero no será válido si, por ejemplo el valor del plan es 4.

Para la asignación de pagos a ítems se utiliza un cálculo interno que trata de obtener el mejor beneficio para el cliente, y para ello, a cada uno de los pagos, según el orden de ingreso, recorre todos los planes correspondientes a dicho pago, en orden descendente del porcentaje, y los trata de aplicar.

El monto del pago que se puede aplicar a un plan tiene en cuenta que:

          • No puede superar el valor del pago que aún no se encuentra asignado a ningún otro plan
          • No puede superar el valor del ítem
          • Si el plan tiene un monto máximo, no puede superarlo
          • El plan podría haber sido usado total o parcialmente por un pago anterior.

Configuración de Codificadas de medios de pago

Desde el menú Administración, en la opción "Información de configuración" se podrá seleccionar si se utiliza o no, para el cálculo de las promociones de planes de pago, la "Codificada de medios de pago".



Se podrá seleccionar entre "No calcular promociones por medio de pago" (NOTHING), "Calcular promociones sobre Ítems Pagados" (ON_ITEMS_PAID) o "Calcular promociones sobre pago realizado" (ON_PAYMENT_MADE).


 
Dependiendo de la opción seleccionada serán las formas de cálculo a implementar, descritas en el apartado anterior.


Medio de pago como condición Vs Beneficio de plan de pago

Desde la consola de PROMO se permite ingresar un medio de pago como condición y dar un plan de pago como beneficio; si bien a simple vista pueden parecer similares, el comportamiento de una y otro son diferentes.

Cuando se define una promoción con un elemento "Medio de pago" como condición, esta promoción evaluara la existencia de este elemento dentro de la transacción sin evaluar el monto y aplicara el beneficio en caso de cumplirse con lo definido.

Es habitual la utilización de esta condición para otorgar beneficios no monetarios en una transacción ya que este tipo de promociones no modifican el monto del pago.

Un ejemplo de esta promoción seria "10% de descuento pagando con tarjetas Visa", donde la condición simple sería un medio de pago tarjeta del tipo Visa, y el beneficio sería un porcentaje de descuento. Pero en esta situación, ya sea que se abone el total de la transacción con este medio de pago o que se abone una parte el beneficio, se otorga de igual manera y quedará del lado del POS el cálculo del pago con los descuentos aplicados devenidos de este beneficio. 

Al definirse una promoción que como beneficio otorgue un plan de pagos (beneficio No Monetario) el cálculo del monto final del pago se informara con el beneficio devuelto por el motor y se calculara en base al monto que se está abonando (pago parcial o el total de la transacción)




 Apéndice IV

 Consideraciones - Modulo de Fidelidad


Prefijo de Cupón Autogenerado

Esta configuración podrá realizarse desde "Administración" >> "Información de Configuración", la opción que setea el ingreso manual o automático de esta opción es "coupon.incrementalPrefix" que pertenece al módulo de "Cupones" y admite dos valores "True" o "False", donde "True" indicara que el prefijo será autogenerado por la consola y "False" indicara que el ingreso del prefijo será manual, debiendo ingresarse en este caso un dato numérico de largo 3.


Formato de Código de Barras

El formato de código de barras de cada tipo de cupón es configurable. Se ha asociado una opción de configuración por cada tipo de código de barras soportado (EAN13, UPCA, Code128).

Al momento de emitir un cupón PROMO buscará el tipo de código de barras base asociado al tipo de cupón y su formato asociado. Acto seguido se realizará el reemplazo del formato por los valores que conforman el código de barras acorde al formato.

La conformación del formato es acorde a una secuencia de letras o códigos donde:


          • "P" = Prefijo para este tipo de cupón.
          • "S" = Código de Tienda
          • "T" = Código de Terminal
          • "n" = Numero secuencial interno
          • "c" = Digito verificador
          • "D" = Fecha de emisión en formato "YYYYmmDD"
          • "H" = Hora de emisión del cupón en formato "HHMMss"
          • "V" = Fecha de Inicio de Validez
          • "E" = Fecha de vencimiento.


El tamaño de cada uno de estos códigos se realiza por repetición. En los siguientes ejemplos se clarifica este concepto.

En todos los ejemplos tomaremos los siguientes valores para los campos:

          • "P" = 987.
          • "S" = 001
          • "T" = 125
          • "n" = 123456789012345…..
          • "c" = 7
          • "D" = 20170302
          • "H" = 225501
          • "V" = 20170308
          • "E" = 20270308


Ejemplo 1:

        • Tipo de código de barras base: EAN13
        • Formato de código de barras: PPPSSSTTTnnnc
        • El código de barras resultante será: 9870011258907

Indica que se usaran 3 posiciones para el prefijo (987), luego 3 posiciones para el código de tienda (001) y 3 posiciones para el código de terminal (125). Además el barcode contendrá un numero autogenerado de 3 dígitos (890) y por último se debe calcular el dígito verificador del EAN13 (7).



Ejemplo 2:

        • Tipo de código de barras base: EAN13
        • Formato de código de barras: PSTDDDDHHnnnn
        • El código de barras resultante será: 7150302017890


Indica que se usara 1 posición para el prefijo (7), luego 1 posición para el código de tienda (1) y 1 posición para el código de terminal (5). Además el barcode contendrá 4 posiciones de la fecha de emisión (0302); a continuación los segundos de la hora de emisión (01) y un número autogenerado de 4 dígitos (7890). En este caso no se adjunta el digito verificador del EAN13.

Anteriormente el numero secuencial era mantenido para cada combinación de "store-terminal", como ahora no se puede garantizar que sea univoco el contador, se ha pasado al esquema de llevar un contador por cada

Prefijo de cupón, con lo cual se ha creado una clave para identificar el contador que es "P"+Prefijo, lo cual lo hará único en la base existente de TransactionCounter y por lo tanto se asociara un contador por cada prefijo de cupón a ser generado.


Reverso de Elementos de Fidelidad

PROMO llevará el control de los elementos de fidelidad que el administre. Es decir que ante una devolución informada por el punto de ventas, PROMO evaluara en base al número de transacción y elementos que se van a devolver, si es que deben reversarse cupones o saldos de tarjetas que intervinieron en la venta.

Este proceso será background, quedando los cupones y tarjetas involucradas en el reverso bloqueadas hasta que se procese la transacción de devolución.

Al procesarse la transacción de devolución se analizara el ticket devuelto contra devoluciones parciales previas, si las hubo, y contra el ticket original, se evaluara el contexto contra el mismo mapa que se evaluó la venta y en caso de aplicar se darán de baja cupones y corrigiendo saldos de tarjetas en caso de que los elementos devueltos hayan participado de la emisión de estos en la transacción original.

Al momento, cualquier error durante el proceso de la transacción de devolución será informado en el log de PROMO (...\Server.log) y la tarjeta o cupón involucrado en la devolución no sufrirá cambio alguno.

Para el caso de los cupones, de querer cancelarse, durante el proceso de la devolución, un cupón cuyo estado es "Consumido" (Es decir que el cliente ya uso el cupón en otra transacción), éste no sufrirá ningún cambio en su estado y será informado en el log que no ha podido reversarse el cupón por estar ya consumido. Lo mismo sucederá cuando el cupón a reversar este ya vencido o cancelado.

En cuanto a las tarjetas, en caso de querer restituir o quitar saldo, durante el proceso de devolución, y la tarjeta estar cancelada, vencida o no tener saldo en caso de que deba quitarse, se informara de dicha situación en el log de PROMO y el estado de la tarjeta no sufrirá cambios.

Este proceso background de proceso de devoluciones será realizado por el motor de Simulación que opera en la consola por lo que es requerido que esté disponible cuando se realicen las devoluciones así como también deberá de contar con los mimos mapas que se posee en la tienda.

Este proceso también aplica para los procesos de cambio, ya que el ítem devuelto será tratado como una devolución, realizando los pasos y evaluaciones descriptos anteriormente. Los elementos que se informen al motor serán responsabilidad del pos.


Procesar Cupones Electrónicos

Dentro de la sección de "Información de Configuración" se dispone del botón "Procesar Cupones Electrónicos" por medio del cual se podrá re-procesar todos aquellos mails que hayan quedado en error en la base de PROMO y por lo cual no han sido enviados a sus correspondientes destinatarios.

Cando uno o más cupones se encuentre en error de envío, se mostrara al acceder a la consola, en la parte superior la leyenda en rojo de "No se han podido envían "n" cupones electrónicos. Contacte a su administrador para validar la configuración del servidor de e-mail"


En el mismo banner, se presenta el link de "Ver Detalle", con el cual, podrá accederse a la pantalla donde se encontrara el botón "Procesar Cupones Electrónicos", así como también el código y tipo de cupón y código de error que deberá informarse al administrador para que chequee lo sucedido.

Luego de contactado al administrador y chequeado las correctas configuraciones podrá presionarse el botón "Procesar cupones electrónicos" para re-procesar los cupones y proceder al correcto envío de los mismos a sus destinatarios de mail.



Apéndice V

Configuración de Chequeo de Colisiones

Dependiendo de la utilización de catálogos para la carga de datos en la consola de promociones, el chequeo de colisiones podrá realizarse de dos maneras diferentes según se configure o no la utilización de los catalogo para evaluar la colisión.

La utilización o no de los catálogos para la evaluación de colisiones podrá definirse desde Administración >> Información de configuración >> Modulo: PROMO >> Categoría: promo.map.collision use.item.catalog
Donde los valores aceptados son:

          • 0 >> chequea colisiones sin catálogos
          • 1 >> chequea colisiones utilizando catálogo



Apéndice VI

Consideraciones - Alta Masiva de Promociones

Campos asociados a la cabecera de la promoción

Variables en la Cabecera de la promoción


Sección

Campos que admiten asignación de variables

Detalles



Cabecera de la promoción



Descripción de la promoción

Mensaje del POS

Adicional a los campos que admiten la asignación de variables, se agregan como variables por defecto los siguientes campos:

name

code

workflow

campaign

deploymentChannels

promotionType

promotionSubType

promotionApplicationForm



Campos asociados a la cabecera de la promoción

Nombre del campo (visible al usuario)

Nombre interno

Detalles (valores esperados/Formatos)

Nombre de la promoción

name

Alfanumérico

Código de la promoción

code

Alfanumérico

Workflow

workflow 

Nombre del workflow

Ejemplo: 

Workflow general

Campaña

campaign

Nombre de la campaña

Ejemplo: 

BLACK FRIDAY

Canales de publicación

deploymentChannels

Elemento tipo lista

Se deberá separa con coma(,) para indicar varios elementos.

Código de los canales de publicación. Opciones disponibles:

pos

twitter

facebook

Ejemplos: 

pos

twitter,facebook

Atributos de la cabecera

hdrFlds

Alfanumérico

Tipo de promociones

promotionType

Código del tipo de promoción

Sub-tipo de promociones

promotionSubType

Código del subtipo de promoción

Forma de aplicación de promociones

promotionApplicationForm

Código de forma de aplicación


Condición de Rango Horario

Variables en Condiciones por Rango horario

Sección

Campos que admiten asignación de variables

Detalles

Condiciones por rango horario

No admite asignación de variables

Solo tomará como variables las condiciones agregadas por el usuario, es decir: si el usuario agrega una condición por Hora, se agregara el excel la columna con la cabecera Condición de hora



Detalle de los campos a definir en las Condiciones de rango horario

Nombre del campo (visible al usuario)

Nombre interno

Detalles (valores esperados/Formato)

Condición  de fecha con hora

dateTimeRanges

Elemento tipo lista

Al indicar varias condiciones de fecha con hora se deberá separar con coma ( , )

Ejemplos:

13/05/2020 09:00

30/05/2020 10:30 - 02/07/2020 02:30, 01/07/2020 09:00 - 01/09/2020 18:15

Condición de hora

hourRanges 

Elemento tipo lista

Al indicar varias condiciones de hora se deberá separar con coma ( , )

Ejemplos:

08:00-18:00

14:00-19:15, 10:00-13:15

Condición por periodicidad

frequency

Para el caso de periodicidad por semana, se debe indicar entre paréntesis los días de la semana 1 = Domingo, 2: Lunes, 3: Martes y así sucesivamente.

Ejemplos:

Aplicada a periodicidad por días:
31/03/2020 3d

Aplicada a periodicidad por semanas:
31/03/2020 3s(1,2)



CONDICIONES SIMPLES


Variables en Condiciones simples

Sección

Campos que admiten asignación de variables

Detalles

Condiciones simples

Todos los elementos con auto-complete sin restricciones por catálogo

Excepción en el elemento tipo en Cupones y Tarjetas de fidelidad ya que valida que los tipos exista antes de insertarlo.





Condiciones por COMPOSICIÓN

Variables en Condiciones por composición

Sección

Campos que admiten asignación de variables

Detalles

Condiciones por combo

No admite asignación de variables

Tomará como variables para el excel los campos con valores definidos por el usuario (ver sección del documento: Operación en Consola > Condiciones por combo)

Nota: El campo Tipo de Elementos, no se mostrara en el excel como cabecera de alguna columna, ya que dicho valor identifica el universo de aplicación dentro de la condición y no puede ser modificado.


Detalle de los campos a definir en la condición por composición

Nombre del campo (visible al usuario)

Nombre interno

Detalles (valores esperados/Formato)

Límite de aplicación         

limit

numérico entero

Ocurrencias mínimas

min

numérico entero

Ocurrencias máximas

max

numérico entero


Unidad de medida


elementSetTypeMeasureUnitAttribute

Alfanumérico.

Código asociado al tipo de elemento Productos (item):

qty → Cantidad

magnitude → Magnitud

xprice → Precio Total


Alfanumérico.

Código asociado al tipo de elemento Cupones (coupon):

qty → Cantidad

amount → Monto

Alfanumérico.

Código asociado al tipo de elemento Clientes (customer):

points → Puntos

amount → Saldo

Alfanumérico.

Código asociado al tipo de elemento Medios de pago (payment):

amount → Monto

Alfanumérico.

Código asociado al tipo de elemento Tarjeta de fidelidad (loyaltycard):

amount → Monto


Criterio de ordenamiento


conditionComboCriteriaOrder

Alfanumérico.

Código asociado al criterio de ordenamiento.

MoreExpensiveFirst → Los mas caros primero

OneMoreExpensive → Uno mas caro por condición

LessExpensiveFirst → Los mas baratos primero

OneLessExpensive → Uno mas barato por condición


Criterio de equivalencia





elementSetTypeEquivalenceAttribute

Alfanumérico.

Código asociado al tipo de elemento Productos (item):

level3Categoría

level4 → Sub Categoría

codeCódigo (SKU)

unitprice → Precio unitario

brand → Marca

supplier → Proveedor

level1 → Departamento

level2Familia

discountableDescontable

Alfanumérico.

Código asociado al criterio de equivalencia por el tipo de elemento Cupones (coupon):

id → Id

type → Tipo

qty → Cantidad

amount → Monto

Alfanumérico.

Código asociado al criterio de equivalencia por el tipo de elemento Clientes (customer):

type → Tipo

profileCode → Perfil de cliente

creditCampaignCode → Campaña crediticia

Alfanumérico.

Código asociado al criterio de equivalencia por el tipo de elemento Medios de pago (payment):

id → Código

type → Tipo

bank → Banco

plan → Plan

installments → Cuotas

itemamount → Monto del Ítem

prefix → Prefijo

payCreditCampaign → Campaña crediticia

prefixGroup → Grupo de Prefijos

pocket → Bolsillo

Alfanumérico.

Código asociado al criterio de equivalencia por el tipo de elemento Tarjeta de fidelidad (loyaltycard):

type → Tipo

contract → Convenio


Criterio de inequivalencia





elementSetTypeInequivalenceAttribute






Alfanumérico.

Código asociado al criterio de inequivalencia por el tipo de elemento Productos (item):

code → Código (SKU)

unitprice Precio unitario

brand → Marca

supplier  → Proveedor

level1 → Departamento

level2 → Familia

level3 Categoría

level4  → Sub Categoría

discountable →  Descontable

qty Cantidad

magnitude →   Magnitud

xprice → Precio total

redeemOption Opción de canje de puntos 

Alfanumérico.

Código asociado al criterio de inequivalencia por el tipo de elemento Cupones (coupon):

id → Id

type → Tipo

qty → Cantidad

amount → Monto

Alfanumérico.

Código asociado al criterio de inequivalencia por el tipo de elemento Clientes (customer):

type → Tipo

profileCode → Perfil de cliente

creditCampaignCode → Campaña crediticia

Alfanumérico.

Código asociado al criterio de inequivalencia por el tipo de elemento Medios de pago (payment):

id → Código

type → Tipo

bank → Banco

plan → Plan

installments → Cuotas

amount → Monto

itemamount → Monto del Ítem

prefix → Prefijo

payCreditCampaign → Campaña crediticia

prefixGroup → Grupo de Prefijos

pocket → Bolsillo

Alfanumérico.

Código asociado al criterio de inequivalencia por el tipo de elemento Tarjeta de fidelidad (loyaltycard):

type → Tipo

contract → Convenio



Beneficios


Variables en Beneficios

Sección

Clase y Tipo de beneficio

Campos que admiten asignación de variables

Detalles





Beneficios

Monetario - Canje de cupón calculado

No admite asignación de variables

Tomará como variables para el excel todos los campos asociados a la clase y tipo de beneficio

Monetario - Beneficio externo

Tipo

Adicionalmente tomará como variables para el excel todos los campos asociados a la clase y tipo de beneficio

Monetario - Canje con opciones





No admite asignación de variables



Tomará como variables para el excel todos los campos asociados a la clase y tipo de beneficio

Monetario - Descuento fijo

Monetario - Descuento porcentaje

Monetario - Nuevo precio

Monetario - Canje de puntos

Monetario - Descuento por convenio

No monetario - Coeficiente de fidelización

Otorgar puntos de tipo


Adicionalmente tomará como variables para el excel todos los demás campos asociados a la clase y tipo de beneficio.


No monetario - Cupón

De tipo/identificador

No monetario - Cupón calculado

No admite asignación de variables

Tomará como variables para el excel todos los campos asociados a la clase y tipo de beneficio

No monetario - Plan de pagos

Otorgar el plan de pagos

Para tipo de pago

Con medio de pago

Cuotas

Del banco

Prefijo

Cuotas a mostrar en el POS

Bolsillo








Adicionalmente tomará como variables para el excel todos los demás campos asociados a la clase y tipo de beneficio.



No monetario - Porcentaje de fidelización

De tipo

No monetario - Puntos de fidelización

De tipo

No monetario - Regalo

Con ID de regalo

Y tipo de regalo

No monetario - Reintegro bancario

Otorgar el plan de pagos

Para tipo de pago

Con medio de pago

Cuotas

Del banco

Prefijo 

Campos genéricos del Beneficio

Cuenta contable

Mensaje en POS        

Mensaje en impresora 

Mensaje en TLOG


Campos no genéricos asociados al tipo y clase del Beneficio

Tipo de Beneficio

Clase de beneficio

Nombre interno

Campos asociados al beneficio /Detalles (valores esperados/Formato)





Monetario

Canje de cupón calculado


Valores asociados a cada campo:

De tipo: alfanumérico. Código de cupón existente

Valor de recupero: numérico

Tipo de recupero: código del tipo de recupero. Opciones disponibles:

        • p → Porcentaje
        • → Monto fijo

Beneficio externo

ExternalBenefit

Valores asociados a cada campo:

Beneficio externo tipo: alfanumérico. Código del tipo

Valor del Recupero:  numérico

Tipo de Recupero: código del tipo de recupero. Opciones disponibles:

        • p → Porcentaje
        • a → Monto fijo


Canje con opciones


RedeemWithOptionsBenefit

Elemento tipo lista

Cada opción debe estar contenido entre corchetes ([]), separando un limite de otro con coma (,)

Valores asociados a cada campo:

Beneficio a aplicar: Opciones disponibles:

        • percentageDiscount → Descuento porcentaje
        • fixedDiscount → Descuento fijo
        • newPrices → Nuevo precio

El siguiente porcentaje/ monto/ precio: numérico

Por cada unidad de: Opciones disponibles:

        • qty → Cantidad
        • magnitude → Magnitud
        • na → Todo

Puntos cliente: numérico entero

Tipo de Tarjeta de Fidelidad: alfanumérico. Código de tarjeta de fidelidad existente (campo opcional)

Puntos de Tarjeta de Fidelidad: numérico (campo opcional)

Formato:

[beneficio a aplicar, el siguiente porcentaje/monto/precio, Por cada unidad de, puntos cliente, Tipo de tarjeta de fidelidad (opcional), Puntos de tarjeta de fidelidad(opcional)]

Ejemplos:

[fixedDiscount, 50, qty, 100]

[newPrices, 550, qty, 300],[percentageDiscount, 10, qty, 50, tipo_001, 300]

Canje de puntos por CatalogoCatalogRedeemBenefit

Valores asociados a cada campo:

Tipo de Tarjeta: alfanumérico. Código de tarjeta de fidelidad existente.

Valor del Recupero: numérico

Tipo de Recupero: código del tipo de recupero. Opciones disponibles:

          • → Porcentaje
          • a → Monto fijo

Descuento fijo

FixedDiscount

Valores asociados a cada campo:

El siguiente monto: numérico

Por cada unidad de: código de unidad de medida. Opciones disponibles:

        • qty → Cantidad
        • magnitude → Magnitud
        • na → Todo

Valor del Recupero: numérico

Tipo de Recupero: código del tipo de recupero

        • → Porcentaje
        • → Monto fijo


ContractPercentageDiscount

Valores asociados a cada campo:

El siguiente porcentaje (%): numérico

Por cada unidad de: código de unidad de medida. Opciones disponibles:

        • qty → Cantidad
        • magnitude → Magnitud
        • na → Todo

Balance:

        • balance1 → Balance 1
        • balance2 → Balance 2

Descuento por porcentaje

PercentageDiscount

Valores asociados a cada campo:

El siguiente porcentaje: numérico

Por cada unidad de: código de unidad de medida. Opciones disponibles:

        • qty → Cantidad
        • magnitude → Magnitud
        • na → Todo

Valor del Recupero: numérico

Tipo de Recupero: código del tipo de recupero. Opciones disponibles:

        • → Porcentaje
        • → Monto fijo

Nuevo precio

NewPrice

Valores asociados a cada campo:

El siguiente precio ($): numérico (entero)

Por cada unidad de: código de unidad de medida. Opciones disponibles:

        • qty → Cantidad
        • magnitude → Magnitud
        • na → Todo

Valor de Recupero: valor numérico (entero)

Tipo de Recupero: código del tipo de recupero. Opciones disponibles:

        • → Porcentaje
        • → Monto fijo

Canje de puntos


Valores asociados a cada campo:

Tipo de Tarjeta: alfanumérico. Código del tipo de tarjeta de fidelidad existente.

Factor $1 = x Puntos: numérico. Equivalente en puntos de 1 peso ($1 = factor puntos)


No monetario






Coeficiente de fidelizaciónFactorLoyaltyBenefit

Valores asociados a cada campo:

Otorgar puntos de tipo: alfanumérico. Código del tipo de tarjeta de fidelidad existente.

Con el siguiente factor: numérico.

Cupón

CouponBenefit

Valores asociados a cada campo:

Otorgar cupones (cantidad): número entero

De tipo/identificador: alfanumérico. Código del tipo de cupón existente.

Datos para el POS:  opciones disponibles:

        • → Indistinto
        • → Campo 1
        • → Campo 2

Cupón calculado

CalculatedCouponBenefit

Valores asociados a cada campo:

De tipo: alfanumérico. Código del tipo de cupón existente

Aplica a: opciones disponibles:

        • percentage → Porcentaje
        • fixedAmount → Monto fijo
        • externalAmount → Monto externo

Valor: numérico entero

Cantidad de Vouchers: numérico entero

Plan de pagosPaymentPlanBenefit

Valores asociados a cada campo:

Otorgar el plan de pagos: alfanuméricoCódigo del plan de pago.

Para tipo de pago: alfanumérico. Código del tipo de pago. Valida que el código exista en CatalogPaymentType.

Con medio de pago: alfanumérico. Código del medio de pago. Valida que el código exista en CatalogPaymentCode.

Cuotas: numérico.

Del banco: alfanumérico. Código del banco. Valida que el código exista en CatalogPaymentBank.

Monto límite: numérico

Prefijo: numérico. Rango de prefijo. Valida que el código exista en CatalogPaymentBank.

De (Descuento/Recargo): alfanumerico. Opciones disponibles:

        • na → Todo
        • discount → Descuento
        • surcharge → Recargo

Con un Porcentaje: numérico entero no mayor a 100

Del Bolsillo: Alfanumérico. Código del bolsillo. Valida que el código exista en CatalogPocket.

Porcentaje de fidelizaciónPercentLoyaltyBenefit

Valores asociados a cada campo:

Otorgar un porcentaje del precio en puntos: numérico entero

De tipo: alfanumérico. Código de tarjeta de fidelidad existente.

Puntos de fidelización

LoyaltyBenefit

Valores asociados a cada campo:

Otorgar puntos (cantidad): numérico

De tipo: alfanumérico. Código de tarjeta de fidelidad

Por cada unidad de: código de unidad de medida. Opciones disponibles:

        • qty → Cantidad
        • magnitude → Magnitud
        • na → Todo


RegaloGiftBenefit

Valores asociados a cada campo:

Otorgar regalos (cantidad): numérico

Con ID de regalo: alfanumérico. Id del regalo

Y tipo de regalo: alfanumérico. Código del tipo del regalo

Reintegro bancarioBankRefundBenefit

Valores asociados a cada campo:

Otorgar el plan de pagos: alfanuméricoCódigo del plan de pago.

Para tipo de pago: alfanumérico. Código del tipo de pago. Valida que el código exista en CatalogPaymentType

Con medio de pago: alfanumérico. Código del medio de pago. Valida que el código exista en CatalogPaymentCode

Cuotas: numérico.

Del banco: alfanumérico. Código del banco. Valida que el código exista en CatalogPaymentBank

Monto límite: numérico

Prefijo: numérico. Rango de prefijo. Valida que el código exista en CatalogPaymentBank

Con un Porcentaje: numérico entero no mayor a 100

Del Bolsillo: Alfanumérico. Código del bolsillo. Valida que el código exista en CatalogPocket


Campos genéricos del beneficio

Nombre del campo (visible al usuario)

Nombre interno

Detalles (valores esperados/Formato)

Atributos no genéricos asociados al tipo y clase de beneficio

--

Ver tabla 11

Información de aplicación

Aplicación máxima (valor)

maxApplicationValue

Numérico

Aplicación máxima (medida)          

elementSetTypeAttribute

Valores asociados:

qty → Cantidad

magnitude → Magnitud

xprice → Precio total

Descuento mínimo a aplicar

minApplicationValue

Numérico

Método de prorrateo

benefitDivisionMethod

Alfanumérico

Valores asociados:

proportional → Proporcional

most-expensive-first → Mas caros primero

cheapest-first → Mas baratos primero

Aplicar sobre...

benefitDivisionPrice


Alfanumérico

Valores asociados:

original-price → Precio original

benefited-price → Precio beneficiado

Criterio de ordenamiento

elementSetOrderCriteria

Alfanumérico

Valores asociados:

MoreExpensiveFirst → Los mas caros primero

LessExpensiveFirst → Los mas baratos primero

Limites de aplicación

Límites del beneficio

limits


Elemento tipo lista

Cada limite debe estar contenido entre corchetes ([]), separando un limite de otro con coma (,)

Valores asociados a cada campo:

Tipo de limite (limitScope): Código asociado al tipo. Opciones disponibles:

        • retailer → General
        • store → Tienda
        • customer → Cliente

Periodo a contabilizar (limitPeriod): Código asociado al periodo. Opciones disponibles:

        • undefined → indefinido

        • day → Días

Cantidad de Días (numberDays): número entero. Aplica solo si el periodo a contabilizar es Días (day).

Limitar por (limitTypeCode): Código asociado a las categorías de limites. Opciones disponibles:

        • benefitAmount → Cantidad de dinero
        • benefitApplicationCount → Cantidad de aplicaciones
        • benefiedProductCount → Cantidad de productos beneficiados

Valor (value): Numérico entero

Formato:

[Tipo de limite, Periodo a contabilizar, cantidad días, limitar por, Valor]

Ejemplos:

[store, day, 5, benefitAmount, 300]

[customer,undefined, 0, benefiedProductCount, 50],[retailer, day, 2, benefitAmount, 750]

Información adicional

Método de aplicación

benefitApplicationMethod

Alfanumérico

Valores asociados:

resume → Resumen

lineByLine → Linea a linea

Cuenta contable         

account

Alfanumérico



Proveedor del bien



creditProvider

Alfanumérico

Elementos separados con coma (,)

Valores asociados a cada campo:

Código: código del proveedor, valida que exista en catalogSupplier

Tipo de proporción: Código asociado al tipo. Opciones disponibles:

        • amount → Monto
        • percentage → Porcentaje

Monto/Porcentaje: numérico entero

Formato:

code, tipo de proporción, monto/porcentaje

Ejemplo:

0045,amount,50



Proveedor financiero



financialProvider

Alfanumérico

Elementos separados con coma (,)

Valores asociados a cada campo:

Código: código del proveedor, valida que exista en catalogSupplier

Tipo de proporción: Código asociado al tipo. Opciones disponibles:

        • amount → Monto
        • percentage → Porcentaje

Monto/Porcentaje: numérico

Formato:

code, tipo de proporción, monto/porcentaje

Ejemplo:

0033,amount,100

Mensaje en POS         

displayMessage

Alfanumérico

Mensaje de impresora

printerMessage

Alfanumérico

Mensaje en TLOG

tlogMessage

Alfanumérico




Casos Prácticos

Caso práctico 1. Canje con opciones (proceso sugerido)

Para beneficios con lista de opciones, el usuario deberá indicar los datos en el excel de cada opción entre corchetes ([]), en el caso de indicar una lista de opciones deberá separar cada opción con coma ( , ).



El usuario podrá indicar los datos de cada opción siguiendo la presente estructura:

[Beneficio a aplicar, El siguiente (precio,monto,porcentaje), por cada unidad de, Puntos Cliente, Tipo de tarjeta de fidelidad (opcional), Puntos de tarjeta de fidelidad(opcional)]



Caso práctico 2. Proveedor del bien y proveedor financiero (proceso sugerido)

Ambos campos informativos representan el importe de cada proveedor tomando en cuenta el tipo (monto/porcentaje) y valor del importe, por lo que dentro del beneficio debera definirse con el siguiente formato:

code_proveedorTipo de importe (monto/proveedor) Valor numérico asociado al tipo de importe


Casos Alta/actualización de promociones por alta masiva desde Excel.

Caso 1. Condiciones simples / Universo de aplicación de combos / Universo de aplicación de beneficios con solo variables declaradas en cada elemento:

ImagenDetalles

  • Si se tiene solo elementos en condiciones simples y en universo de aplicación con variables, estas aparecerán en el Excel como una columna identificada con el nombre que se le dio a cada elemento.
  • Si al crear una promoción indicando solo algunos de los valores en las celdas asociadas a las variables de estos elementos, se debe tener en cuenta que aquellos cuyo valor no se haya indicado en el excel no se crearan en las condiciones, ya que no se pueden crear elementos cuyo valor es una variable.
  • Por lo que al indicar en el excel el valor para la columnas identificadas como sku y Marca por ejemplo, la promoción se terminara creando con 2 condiciones para el elemento Código (SKU) y Marca.
  • En el caso de actualizar la misma promoción en indicar un valor en la columna Banco, una vez finalizado el proceso podrá visualizar la condición por Medios de Pago con el elemento Banco ya insertado en la promoción actualizada (lo mismo aplicaría para el elemento con la variable Tienda).



Caso 2. Condiciones simples / Universo de aplicación de combos / Universo de aplicación de beneficios con valores por defecto y variables declaradas en cada elemento:



Los elementos que solo tengan declarado variables (@[variable]) su inserción en la promoción dependerá de que se indique o no el valor en el Excel.
 En el caso de que se desee que el elemento se cree en el promoción con un valor por defecto, este valor deberá ser indicado en la plantilla dentro del elemento que se desee tal como se indica en la imagen.
 Esto permitirá la creación/actualización de elementos con valores por defecto sin necesidad de tener que indicarlos en el Excel.
 De igual forma, si se indica algún valor para el elemento dentro del Excel, este se creara con los valores indicados mas el valor que tiene por defecto en la plantilla de promoción.
Ejemplo:
  1. Siguiendo lo antes planteado, si al crear una promoción sin indicar ningún valor en las columnas que identifican cada elemento, se creara con las condiciones por Código (SKU) con el valor 111 y Marca con el valor SONY. Tanto el elemento Tienda como Banco al no tener un valor por defecto no se crearon.
  2. Al actualizar la promoción a través del Excel e indicar valores para los elementos sku, Marca y Tienda por ejemplo, 222 para sku, DAMASCO para Macar y napse para Tienda, al procesar los cambios, se actualizaran los elementos de las condiciones con los siguientes valores: Código (SKU) con el valor 222,111 y Marca con el valor DAMASCOSONY, Tienda con el valor napse.
    Manteniendo siempre el valor por defecto en los elementos que lo tengan así configurado en la plantilla de promoción.

Caso práctico 3. Proveedor del bien, proveedor financiero y proveedores adicionales (proceso sugerido)

Estos campos en el beneficio representan el importe de cada proveedor tomando en cuenta el tipo (monto/porcentaje) y valor del importe, por lo que de acuerdo a la naturaleza de estos campos, se hace necesario un tratamiento particular dentro del Excel para definirlos correctamente:



Código del proveedor, Tipo de importe, Valor



Tabla 5. Detalle de los campos en Proveedor del bien y financiero

Campo


Código del proveedorCódigo del proveedor en CatalogSupplier
Tipo de importe

Opciones disponibles:

  • amount → Monto
  • percentage → Porcentaje
ValorValor numérico asociado al tipo de importe indicado


Plantilla de Excel. Formato del proveedor del bien y financiero



Caso práctico 3. Proveedor del bien, proveedor financiero y proveedores adicionales (proceso sugerido)

Estos campos en el beneficio representan el importe de cada proveedor tomando en cuenta el tipo (monto/porcentaje) y valor del importe, por lo que de acuerdo a la naturaleza de estos campos, se hace necesario un tratamiento particular dentro del Excel para definirlos correctamente:



Código del proveedor, Tipo de importe, Valor



Tabla 5. Detalle de los campos en Proveedor del bien y financiero

Campo


Código del proveedorCódigo del proveedor en CatalogSupplier
Tipo de importe

Opciones disponibles:

  • amount → Monto
  • percentage → Porcentaje
ValorValor numérico asociado al tipo de importe indicado


Plantilla de Excel. Formato del proveedor del bien y financiero




Generacion de Plantillas:

Ejemplo:

DetalleImagen

Generación de Excel desde la pantalla de definición de plantilla

Ir a Operación Plantilla de promocionesAcciones → Generar Excel

Generación de Excel desde la pantalla de definición de la plantilla, sección Cabecera.

Ir a Operación → Plantilla de promociones → Acciones → Definir → Generar Excel

Generación de Excel desde el alta masiva de promociones, sección Cabecera.

Ir a Operación → Alta masiva de promociones → Ver detalle → Generar Excel

Casos de uso: Alta/actualización de promociones por alta masiva desde Excel.

Caso 1. Condiciones simples / Universo de aplicación de combos / Universo de aplicación de beneficios con solo variables declaradas en cada elemento:

Imagen

Detalles

  1. Si se tiene solo elementos en condiciones simples y en universo de aplicación con variables, estas aparecerán en el Excel como una columna identificada con el nombre que se le dio a cada elemento.
  2. Si al crear una promoción indicando solo algunos de los valores en las celdas asociadas a las variables de estos elementos, se debe tener en cuenta que aquellos cuyo valor no se haya indicado en el excel no se crearan en las condiciones, ya que no se pueden crear elementos cuyo valor es una variable.
  3. Por lo que al indicar en el excel el valor para la columnas identificadas como sku y Marca por ejemplo, la promoción se terminara creando con 2 condiciones para el elemento Código (SKU) y Marca.
  4. En el caso de actualizar la misma promoción e indicar un valor en la columna Banco, una vez finalizado el proceso podrá visualizar la condición por Medios de Pago con el elemento Banco ya insertado en la promoción actualizada (lo mismo aplicaría para el elemento con la variable Tienda).


Caso 2. Condiciones simples / Universo de aplicación de combos / Universo de aplicación de beneficios con valores por defecto y variables declaradas en cada elemento:

Imagen 

Detalle

Imagen 

Detalle

Los elementos que solo tengan declarado variables (@[variable]) su inserción en la promoción dependerá de que se indique o no el valor en el Excel.
 
En el caso de que se desee que el elemento se cree en el promoción con un valor por defecto, este valor deberá ser indicado en la plantilla dentro del elemento que se desee tal como se indica en la imagen.
 
Esto permitirá la creación/actualización de elementos con valores por defecto sin necesidad de tener que indicarlos en el Excel.
 
De igual forma, si se indica algún valor para el elemento dentro del Excel, este se creara con los valores indicados mas el valor que tiene por defecto en la plantilla de promoción.
 
Ejemplo:
  1. Siguiendo lo antes planteado, si al crear una promoción sin indicar ningún valor en las columnas que identifican cada elemento, se creara con las condiciones por Código (SKU) con el valor 111 y Marca con el valor SONY. Tanto el elemento Tienda como Banco al no tener un valor por defecto no se crearon.
  2. Al actualizar la promoción a través del Excel e indicar valores para los elementos sku, Marca y Tienda por ejemplo, 222 para sku, DAMASCO para Macar y napse para Tienda, al procesar los cambios, se actualizaran los elementos de las condiciones con los siguientes valores: Código (SKU) con el valor 222,111 y Marca con el valor DAMASCOSONY, Tienda con el valor napse.
    Manteniendo siempre el valor por defecto en los elementos que lo tengan así configurado en la plantilla de promoción.

Casos de uso: Alta/actualización de promociones por alta masiva desde Excel.

Caso 1. Condiciones simples / Universo de aplicación de combos / Universo de aplicación de beneficios con solo variables declaradas en cada elemento:

Imagen

Detalles

  1. Si se tiene solo elementos en condiciones simples y en universo de aplicación con variables, estas aparecerán en el Excel como una columna identificada con el nombre que se le dio a cada elemento.
  2. Si al crear una promoción indicando solo algunos de los valores en las celdas asociadas a las variables de estos elementos, se debe tener en cuenta que aquellos cuyo valor no se haya indicado en el excel no se crearan en las condiciones, ya que no se pueden crear elementos cuyo valor es una variable.
  3. Por lo que al indicar en el excel el valor para la columnas identificadas como sku y Marca por ejemplo, la promoción se terminara creando con 2 condiciones para el elemento Código (SKU) y Marca.
  4. En el caso de actualizar la misma promoción e indicar un valor en la columna Banco, una vez finalizado el proceso podrá visualizar la condición por Medios de Pago con el elemento Banco ya insertado en la promoción actualizada (lo mismo aplicaría para el elemento con la variable Tienda).


Caso 2. Condiciones simples / Universo de aplicación de combos / Universo de aplicación de beneficios con valores por defecto y variables declaradas en cada elemento:

Imagen 

Detalle

Imagen 

Detalle

Los elementos que solo tengan declarado variables (@[variable]) su inserción en la promoción dependerá de que se indique o no el valor en el Excel.
 
En el caso de que se desee que el elemento se cree en el promoción con un valor por defecto, este valor deberá ser indicado en la plantilla dentro del elemento que se desee tal como se indica en la imagen.
 
Esto permitirá la creación/actualización de elementos con valores por defecto sin necesidad de tener que indicarlos en el Excel.
 
De igual forma, si se indica algún valor para el elemento dentro del Excel, este se creara con los valores indicados mas el valor que tiene por defecto en la plantilla de promoción.
 
Ejemplo:
  1. Siguiendo lo antes planteado, si al crear una promoción sin indicar ningún valor en las columnas que identifican cada elemento, se creara con las condiciones por Código (SKU) con el valor 111 y Marca con el valor SONY. Tanto el elemento Tienda como Banco al no tener un valor por defecto no se crearon.
  2. Al actualizar la promoción a través del Excel e indicar valores para los elementos sku, Marca y Tienda por ejemplo, 222 para sku, DAMASCO para Macar y napse para Tienda, al procesar los cambios, se actualizaran los elementos de las condiciones con los siguientes valores: Código (SKU) con el valor 222,111 y Marca con el valor DAMASCOSONY, Tienda con el valor napse.
    Manteniendo siempre el valor por defecto en los elementos que lo tengan así configurado en la plantilla de promoción.


 Apéndice VII - Promociones Modelo



"-50% de Descuento en la Segunda Unidad en el Departamento de Lácteos"

Nueva Promoción






          • Dar clic en "Nueva Promoción".






          • La promoción aplicara en los puntos de venta.
          • La promoción Reportara participantes, por lo que el motor informara al punto de venta que elementos de la transacción ovacionaron la aplicación del beneficio.

La promoción será sugerida cuando en la transacción se ingrese un ítem de los definidos en la condición por composición y se cumpla parcialmente la condición.

NOTA

Para que la promoción sea sugerida correctamente el mapa que la contenga también deberá estar configurado para sugerir "Siempre" o "De acuerdo a la promoción".


Definición de la Condición

La promoción deberá definirse por medio de una condición por composición para que el motor genere subtickes cada dos elementos del departamento de lacteos que se ingresen a la transacción y aplicar sobre él el beneficio que se defina.

Deberá definirse como ocurrencias mínimas y máximas, 2, indicando en unidad de medida, "Cantidad", ya que el subtiket tendrá solo 2 items del departamento de lácteos.


Luego de definir las ocurrencias, debera de indicarse el atributo del producto que deberá considerarse para conformar la condicion por composicion, en este caso, "Departamento", igual a "Lacteos".


Presionar "Continuar" y la condición quedara definida de la siguiente forma:


Definición del Beneficio

Deberá presionarse en "Nuevo Beneficio", y definirse un beneficio del tipo "Monetario", de la clase "Descuento por Porcentaje".





          • Se definirá el porcentaje de 50 por cada unidad de cantidad.
          • Sera necesario limitar la aplicación del beneficio a uno item (1) para que solo uno de los dos items que componen el subticket sea alcanzado por el beneficio.

NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento".



Presionar en "Guardar" para completar la carga del beneficio.


Resumen de la Promoción

Deberá chequearse que la promoción aparezca como "Completa" ya que de esta forma podrá ser incluida en un mapa.


NOTA

En caso de tener mas de un paso de Workflow habilitado deberá primero ser aprobada por el o los roles correspondientes para poder ser luego incluida en un mapa.


NOTA 2

La promoción en estado "Completa" podrá también ser simulada desde la sección "Distribución" > "Simulación".




"2 X 1 en Electrónica, todos los Jueves."

Nueva Promoción





          • Dar clic en "Nueva Promoción".






          • La promoción aplicara en los puntos de venta.
          • La promoción Reportara participantes, por lo que el motor informara al punto de venta que elementos de la transacción ocasionaron la aplicación del beneficio.

La promoción será sugerida cuando en la transacción se ingrese un ítem de los definidos en la condición por composición y se cumpla parcialmente la condición.


NOTA

Para que la promoción sea sugerida correctamente el mapa que la contenga también deberá estar configurado para sugerir "Siempre" o "De acuerdo a la promoción".




Definición de la Condición

Habrá que definir una condición por rango horario, por periodicidad, para indicar que la promoción solo aplicara los días jueves.




La promoción deberá definirse por medio de una condición por composición para que el motor genere subtickes cada dos elementos de electrónica que se ingresen a la transacción y aplicar sobre él el beneficio que se defina.


          • Deberá definirse como ocurrencias mínimas y máximas, 2, indicando en unidad de medida, "Cantidad", ya que el subtiket tendrá solo 2 items del departamento de lácteos.
          • Por transacción solamente podrá cumplirse solo una vez la condición por composición por lo que el "Limite de Aplicación" se definirá en uno (1).


Luego de definir las ocurrencias, deberá de indicarse el atributo del producto que deberá considerarse para conformar la condición por composición, en este caso, "Departamento", igual a "Electrónica".


Presionar "Continuar" y la condición quedara definida de la siguiente forma:



Definición del Beneficio

Deberá presionarse en "Nuevo Beneficio", y definirse un beneficio del tipo "Monetario", de la clase "Descuento por Porcentaje".





          • Se definirá el porcentaje de 100 por cada unidad de cantidad.
          • Sera necesario limitar la aplicación del beneficio a uno item (1) para que solo uno de los dos items que componen el subticket sea alcanzado por el beneficio.



NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento".


 






          • Presionar en "Guardar" para completar la carga del beneficio.


Resumen de la Promoción

Deberá chequearse que la promoción aparezca como "Completa" ya que de esta forma podrá ser incluida en un mapa.


NOTA

En caso de tener mas de un paso de Workflow habilitado deberá primero ser aprobada por el o los roles correspondientes para poder ser luego incluida en un mapa


NOTA

La promoción en estado "Completa" podrá también ser simulada desde la sección "Distribución" > "Simulación".




"Comprando una gaseosa, lleva las papas gratis"

Nueva Promoción





          • Dar clic en "Nueva Promoción"






          • La promoción aplicara en los puntos de venta.
          • La promoción Reportara participantes, por lo que el motor informara al punto de venta que elementos de la transacción ocasionaron la aplicación del beneficio.


La promoción será sugerida cuando en la transacción se ingrese un ítem de los definidos en la condición por composición y se cumpla parcialmente la condición.

NOTA

Para que la promoción sea sugerida correctamente el mapa que la contenga también deberá estar configurado para sugerir "Siempre" o "De acuerdo a la promoción".



Definición de la Condición

La promoción deberá definirse por medio de dos condición por composición para que el motor genere subtickes, combinando ambos conjuntos de un ítem cada uno, a medida que se ingresen a la transacción y aplique sobre el conjunto de las papas, el beneficio que se defina.

Ambas condiciones por composición tendrán definidas sus ocurrencias mínimas y máximas en 1, indicando en unidad de medida, "Cantidad".

Para cada condición de composición deberá definirse su universo de aplicación, a la primera se le indicara el código de la gaseosa y a la segunda el código de las papas.


Presionar continua y Agregar la segunda condición por composición.



Presionar "Continuar" y la condición quedara definida de la siguiente forma:

Definición del Beneficio

Deberá presionarse en "Nuevo Beneficio", y definirse un beneficio del tipo "Monetario", de la clase "Descuento por Porcentaje".





          • Se definirá el porcentaje de 100 por cada unidad de cantidad.
          • Sera necesario limitar la aplicación del beneficio a uno item (1) para que solo uno de los dos items que componen el subticket sea alcanzado por el beneficio.


NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento"








          • Presionar en "Guardar" para completar la carga del beneficio.


Resumen de la Promoción

Deberá chequearse que la promoción aparezca como "Completa" ya que de esta forma podrá ser incluida en un mapa.


NOTA

En caso de tener mas de un paso de Workflow habilitado deberá primero ser aprobada por el o los roles correspondientes para poder ser luego incluida en un mapa.


NOTA 2

La promoción en estado "Completa" podrá también ser simulada desde la sección "Distribución" > "Simulación".




"Hamburguesas, Papas y Gaseosa a $15"

Nueva Promoción





          • Dar clic en "Nueva Promoción".






          • La promoción aplicara en los puntos de venta.
          • La promoción Reportara participantes, por lo que el motor informara al punto de venta que elementos de la transaccion ocacionaron la aplicación del beneficio.


La promoción será sugerida cuando en la transacción se ingrese un ítem de los definidos en la condición por composición y se cumpla parcialmente la condición.

NOTA

Para que la promoción sea sugerida correctamente el mapa que la contenga también deberá estar configurado para sugerir "Siempre" o "De acuerdo a la promoción".



Definición de la Condición

La promoción deberá definirse por medio de tres condiciones por composición para que el motor genere subtickes, combinando los tres conjuntos, de un ítem cada uno, a medida que se ingresen a la transacción y así se aplique sobre el conjunto de las papas el beneficio que se defina.

Las tres condiciones por composición tendrán definidas sus ocurrencias mínimas y máximas en 1, indicando en unidad de medida, "Cantidad".


Para cada condición de composición deberá definirse su universo de aplicación, a la primera se le indicara el código de la gaseosa y a la segunda el código de las papas. 


Presionar Continuar y Agregar la segunda condición por composición.



Presionar Continuar y agregar la última condición por composición.



Quedando conformada la condición de la siguiente forma:


Definición del Beneficio

Deberá presionarse en "Nuevo Beneficio", y definirse un beneficio del tipo "Monetario", de la clase "Nuevo Precio".





          • Se definirá 15 como Nuevo Precio.
          • En el campo "Por Unidad de" deberá especificarse "Todo" con lo cual se estará indicando que todo el conjunto formado por las tres condiciones por composición tendrá el nuevo precio de $15.


NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento".


 





          • Presionar en "Guardar" para completar la carga del beneficio.


Resumen de la promoción

Deberá chequearse que la promoción aparezca como "Completa" ya que de esta forma podrá ser incluida en un mapa.


NOTA

En caso de tener mas de un paso de Workflow habilitado deberá primero ser aprobada por el o los roles correspondientes para poder ser luego incluida en un mapa.


NOTA 2

La promoción en estado "Completa" podrá también ser simulada desde la sección "Distribución" > "Simulación".



"Canje de Cupón Calculado en Perfumería"

Nueva Promoción





          • Dar clic en "Nueva Promoción".






          • La promoción aplicara en los puntos de venta.
          • En este caso la promoción no tendrá habilitadas las sugerencias.
          • La promoción Reportara Participantes a fin de que el pos identifique cual de los cupones ingresados, en caso de ser varios, participo de la promoción.


Definición de la Condición

La promoción deberá definirse por medio de Condiciones Simples que evalúen la existencia de un Cupón del tipo "Calculado" (para nuestro ejemplo será un Cupón del Tipo "3") y al menos un producto de la Familia "Perfumería".

Para ello agregaremos un elemento del tipo producto, en la condición Simple indicando que deberán de pertenecer a la Familia "Perfumería"



También se deberá indicar que en la transacción deberá ingresarse un cupón del tipo "calculado" (para nuestro ejemplo, Tipo de Cupón 3).



Quedando las condiciones definidas de la siguiente forma:

Cuando dentro del contexto de la transacción se cumpla con ambas condiciones simples, se accederá al beneficio definido en la promoción.


Definición del Beneficio

Deberá presionarse en "Nuevo Beneficio", y definirse un beneficio del tipo "Monetario", de la clase "Canje de Cupón Calculado".





          • Presionar en "Guardar" para completar la carga del beneficio.


Con esta definición se indicara que la promoción dará como beneficio el valor que tenga cargado en la base de datos el cupón ingresado.

NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento".




Resumen de la promoción

Deberá chequearse que la promoción aparezca como "Completa" ya que de esta forma podrá ser incluida en un mapa.

NOTA

En caso de tener mas de un paso de Workflow habilitado deberá primero ser aprobada por el o los roles correspondientes para poder ser luego incluida en un mapa.


NOTA 2

La promoción en estado "Completa" podrá también ser simulada desde la sección "Distribución" > "Simulación".




"Llevando 3 o más artículos del dto. Limpieza, gana un Cupón"

Nueva Promoción





          • Dar clic en "Nueva Promoción".





          • La promoción aplicara en los puntos de venta.
          • En este caso la promoción no tendrá habilitadas las sugerencias ni reportara participantes.


Definición de la Condición

La promoción deberá definirse por medio de una condición simple que evalúe la existencia de tres o más ítems del departamento de Limpieza.

Para ello agregaremos un elemento del tipo producto, en la condición Simple indicando que deberán de pertenecer al departamento de "Limpieza".



Sera necesario indicar un criterio de agrupación de los elementos del departamento de limpieza que se ingresen a la transacción, ya que deberá de cumplirse la condición de que haya 3 o mas items de este departamento para alcanzar a cumplir con la condición y acceder al beneficio.

Para ello, daremos clic en el icono del "Lápiz" que se encuentra a la derecha del elemento "Producto" y se nos mostrara el siguiente Pop Up.


Donde aquí se deberá de seleccionarse la opción "Mayor o Igual a" para agrupar los elementos.

Al hacerlo, se desplegaran las siguientes opciones:


En el pop up se especifica que el criterio de agrupación sera "Cantidad" "Mayor o Igual a" "3".

Presionar "Continuar" y la condición quedara definida de la siguiente forma:


Definición del Beneficio

Deberá presionarse en "Nuevo Beneficio", y definirse un beneficio del tipo "NO Monetario", de la clase "Cupón".





          • En Otorgar Cupones (Cantidad) se deberá colocar un "1" lo que indicara que se otorgara un solo cupón cuando se cumplan las condiciones impuestas por la promoción.
          • En "De tipo/Identificador" se deberá especificar el tipo de cupón que se otorgara en este beneficio. El campo se autocompletara a medida que se vaya escribiendo, con los tipos de cupones ya cargados en la base y al seleccionarse una, en el campo se mostrara el ID del cupón seleccionado.


NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento".


 



          • Presionar en "Guardar" para completar la carga del beneficio.

Resumen de la promoción



          • En Otorgar Cupones (Cantidad) se deberá colocar un "1" lo que indicara que se otorgara un solo cupón cuando se cumplan las condiciones impuestas por la promoción.
          • En "De tipo/Identificador" se deberá especificar el tipo de cupón que se otorgara en este beneficio. El campo se autocompletara a medida que se vaya escribiendo, con los tipos de cupones ya cargados en la base y al seleccionarse una, en el campo se mostrara el ID del cupón seleccionado.


NOTA

En caso de que se requiera acotar aun mas la aplicación del beneficio podrán especificarse mas datos en los campos "Método de Prorrateo", "Aplica sobre…" y "Criterio de Ordenamiento".



La promoción en estado "Completa" podrá también ser simulada desde la sección "Distribución" > "Simulación".



"Compra 1 unidad y recibe el 10%dcto, si compras 2 recibe en la segunda unidad el 30%dcto, y si compras 3 recibe en la tercera unidad el 50%dcto aplica en la marca Coca- cola (el beneficio aplicara siempre sobre el item mas barato de la condición formada)"


Definicon de condicion 

Para este ejemplo de aplicación, deberá definirse la condición por medio de una condición por composición, ya que lo que se busca es que el beneficio escalonado itere y aplique las veces que sea posible, en base a los elementos ingresados en la transacción


Definicion de Beneficio

Deberá definirse un beneficio "Monetario" de la clase "Descuento por porcentaje". El valor a definir el el campo "El siguiente porcentaje (%) *" se indicara el valor de defecto que aplicara cuando no se cumpla con ninguno de los escalones definidos en el beneficio.



Definicion de Escalones

La "Unidad de escalonada" utilizada para este ejemplo será "Cantidad"


Al presionar "Continuar" se mostrara el primer escalón agregado de la siguiente forma:


Deberá presionarse nuevamente "Agregar" para definir el próximo.


Al presionar "Continuar" se mostrara el segundo escalón recién definido de la siguiente forma:


Deberá volver a presionarse "Agregar" para agregar el ultimo escalón de este ejemplo y se completara con los siguientes datos:

 


Al presionar "Continuar" quedaran los tres escalones definidos de la siguiente forma


En este caso, lo que se busca en esta promoción, es que al cumplirse cada uno de los escalones, se aplique el beneficio en uno solo de los ítems que componen cada escalón y que ese item sea el mas barato de los ítems que lo componen. Para ello, se deberá definir en el beneficio el campo "Aplicación máxima (valor)" en 1 y en el campo "Aplicación máxima (medida)" en cantidad, así como también indicar en el campo "Criterio de ordenamiento", "Los mas baratos primero".



" Compra 1 unidad y recibe el 10%dcto, si compras 2 recibe el 30%dcto, y si compras 3 recibe el 50%dcto aplica en la marca Coca- cola."


DEFINICON DE CONDICION 

Para este ejemplo de aplicación, deberá definirse la condición por medio de una condición por composición, ya que lo que se busca es que el beneficio escalonado itere hasta 3 veces (limites de aplicación = 3) y aplique las veces que corresponda, en base a los elementos ingresados en la transacción




DEFINICION DE BENEFICIO

La "Unidad de escalonada" utilizada para este ejemplo será "Cantidad"


Al presionar "Continuar" se mostrara el primer escalón agregado de la siguiente forma:


Deberá presionarse nuevamente "Agregar" para definir el próximo.


Al presionar "Continuar" se mostrara el segundo escalón recién definido de la siguiente forma:


Deberá volver a presionarse "Agregar" para agregar el ultimo escalón de este ejemplo y se completara con los siguientes datos:

 


Al presionar "Continuar" quedaran los tres escalones definidos de la siguiente forma


En este caso, lo que se busca en esta promoción, es que al cumplirse cada uno de los escalones, se aplique el beneficio de manera proporcional a todos los ítems que componen cada escalón, por tal motivo no se realizara ninguna restricción a nivel "Información de aplicación"



Apéndice VIII - Cache de Promociones

(desde 7.EP2)
El caché de Promociones tiene como objetivo generar información para los sitios de ecommerce donde para tener una navegación ágil se desea poseer la información de Promociones asociadas a los diferentes productos.

Para ésto Promo posee un proceso que evalúa las promociones y los productos asociados a la publicación en ecommerce.  Dicha información es generada como mensajes en una cola RabbitMQ de la cual los sitios pueden tomarlos. (mayor información en el formato de salida y configuración de la cola ver  PROMO - Manual de Integración 7.0 - Colas de Mensajes).

Configuración

Ingresando a Información de Configuración tenemos una serie de parámetros asociados a ésta funcionalidad que son:


Para el funcionamiento correcto se debe tener en cuenta que el cache es parte de la tienda (motor) que atenderá el sitio de ecommerce en la evaluación de Promociones para que exista una coherencia entre todas las instancias.  Con esto en vista debe configurarse a la tienda Web para que cuando se distribuya un mapa este también llegue al cache de Promociones para su evaluación.  Esto se realiza desde la definición de las tiendas como por ejemplo:

Operación

Una vez configurado, existe un proceso que se ejecutará automáticamente durante las primeras horas del dia para regenerar o refrescar la información del cache.  De todas formas en caso de ser necesario se puede ejecutar el proceso manualmente desde el mismo lugar donde se realiza la distribución de los mapas mediante el botón "Actualizar Cache".  Por ejemplo:



Apéndice IX - Promociones con Devolución


En Promo se puede realizar devoluciones parciales y a apartir de promo 7.2. 3 también devoluciones totales.

Se crea una promoción como la del  ej. :

Se realiza la venta, la que se verá reflejada en: Informe/Reporte de Transacciones/Ventas:

Si se realiza la devolución de la compra; éste se detalla en el Reporte de Transacciones/Devoluciones: 

Si se vuelve a hacer una devolución; la misma se reflejará en el Reporte de Transacciones/Ventas/Detalles:

y también se reflejará en el Informe/ Errores de Devoluciones:


Si se hace una venta, a la que se le aplica una promoción que emite un cupón,; esta se refleja en el Reporte de Transacciones/Ventas:

en el cliente al que se le dio el cupón:

y en la vista de cupones:

Al hacer la devolución:

Apéndice X- Funciones de convivencia


En esta sección se brindarán ejemplos de las distintas funciones de convivencia, para la mejor comprensión del usuario.

Las funciones de convivencia son:

  1. Secuencial:
Promo 1Promo 2Promo 3

Son distribuidas en el mapa usando la función secuencial:    

Este mapa indica que se debe aplicar primero la promoción descuento 1, luego la promoción desc 2 y por ultimo la promo cupón.

Se realiza la venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-02 16:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="222"/>
<item-add seq="3" unitprice="3100" xprice="3100" qty="1"  code="975"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="22" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Descuento 1" nro="64779fdfa62e430db08b020c">
      <benefit TLOGMessage="Promo Descuento 1" account="" applicationMethod="resume" baseAmount="1400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="Promo Descuento 1" name="64779fdfa62e430db08b020c" nro="6477a005a62e430db08b0212" order="1" printerMessage="Promo Descuento 1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="210.00" valueWithTaxes="210.00" xprice="1400.00"/>
        </apply>
      </benefit>
    </promo>
    <promo id="Promo desc 2" nro="6477a036a62e430db08b0214">
      <benefit TLOGMessage="Promo desc 2" account="" applicationMethod="resume" baseAmount="2800.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo desc 2" name="6477a036a62e430db08b0214" nro="6477a05ba62e430db08b021a" order="2" printerMessage="Promo desc 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2800.00"/>
        </apply>
      </benefit>
    </promo>
    <promo id="Promo Cupon" nro="6477a08ba62e430db08b021c">
      <benefit TLOGMessage="Promo Cupon" account="" amount="" applicationMethod="resume" baseAmount="3100.00" benefitType="CouponBenefit" couponId="1" displayMessage="Promo Cupon" infoPos="0" name="6477a08ba62e430db08b021c" nro="6477a0ada62e430db08b0222" order="3" printerMessage="Promo Cupon" qty="1.000">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="3" value="0.00" valueWithTaxes="0.00" xprice="3100.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que las promociones se fueron otorgando en el orden en que se había definido en el mapa.

2. Todas:

Utilizando las mismas promociones que en el caso anterior, las distribuimos usando la función "TODAS":

Se realiza la venta:

Input
<message companyId="2" store="3" terminal="1" date-time="2023-06-02 17:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="222"/>
<item-add seq="3" unitprice="3100" xprice="3100" qty="1"  code="975"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="23" messageId="1" store="3" terminal="1">
  <optional>
    <promo id="Promo Descuento 1" nro="64779fdfa62e430db08b020c">
      <benefit TLOGMessage="Promo Descuento 1" account="" applicationMethod="resume" baseAmount="1400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="Promo Descuento 1" name="64779fdfa62e430db08b020c" nro="6477a005a62e430db08b0212" order="1" printerMessage="Promo Descuento 1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="210.00" valueWithTaxes="210.00" xprice="1400.00"/>
        </apply>
      </benefit>
    </promo>
    <promo id="Promo desc 2" nro="6477a036a62e430db08b0214">
      <benefit TLOGMessage="Promo desc 2" account="" applicationMethod="resume" baseAmount="2800.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo desc 2" name="6477a036a62e430db08b0214" nro="6477a05ba62e430db08b021a" order="2" printerMessage="Promo desc 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2800.00"/>
        </apply>
      </benefit>
    </promo>
    <promo id="Promo Cupon" nro="6477a08ba62e430db08b021c">
      <benefit TLOGMessage="Promo Cupon" account="" amount="" applicationMethod="resume" baseAmount="7300.00" benefitType="CouponBenefit" couponId="1" displayMessage="Promo Cupon" infoPos="0" name="6477a08ba62e430db08b021c" nro="6477a0ada62e430db08b0222" order="3" printerMessage="Promo Cupon" qty="3.000">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="0.00" valueWithTaxes="0.00" xprice="1400.00"/>
          <item magnitude="0.000" qty="1.000" seq="2" value="0.00" valueWithTaxes="0.00" xprice="2800.00"/>
          <item magnitude="0.000" qty="1.000" seq="3" value="0.00" valueWithTaxes="0.00" xprice="3100.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que se han aplicado todas las promociones que forman parte del mapa. La promoción "Promo cupón" se ha aplicado a los tres productos de la venta, otorgando tres cupones:

3. Opciones:

Utilizando las mismas promociones que en el caso anterior, las distribuimos usando la función "OPCIONES":

Se realiza una venta y se observa que entre los tags <optional></optional> se encuentran las distintas opciones de promociones, entre las que el cliente puede optar:

Input
<message companyId="2" store="3" terminal="1" date-time="2023-06-02 18:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="222"/>
<item-add seq="3" unitprice="3100" xprice="3100" qty="1"  code="975"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="24" messageId="1" store="3" terminal="1">
  <optional>
    <promo id="Promo Descuento 1" nro="64779fdfa62e430db08b020c">
      <benefit TLOGMessage="Promo Descuento 1" account="" applicationMethod="resume" baseAmount="1400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="Promo Descuento 1" name="64779fdfa62e430db08b020c" nro="6477a005a62e430db08b0212" order="1" printerMessage="Promo Descuento 1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="210.00" valueWithTaxes="210.00" xprice="1400.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <optional>
    <promo id="Promo desc 2" nro="6477a036a62e430db08b0214">
      <benefit TLOGMessage="Promo desc 2" account="" applicationMethod="resume" baseAmount="2800.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo desc 2" name="6477a036a62e430db08b0214" nro="6477a05ba62e430db08b021a" order="1" printerMessage="Promo desc 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2800.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <optional>
    <promo id="Promo Cupon" nro="6477a08ba62e430db08b021c">
      <benefit TLOGMessage="Promo Cupon" account="" amount="" applicationMethod="resume" baseAmount="7300.00" benefitType="CouponBenefit" couponId="1" displayMessage="Promo Cupon" infoPos="0" name="6477a08ba62e430db08b021c" nro="6477a0ada62e430db08b0222" order="1" printerMessage="Promo Cupon" qty="3.000">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="0.00" valueWithTaxes="0.00" xprice="1400.00"/>
          <item magnitude="0.000" qty="1.000" seq="2" value="0.00" valueWithTaxes="0.00" xprice="2800.00"/>
          <item magnitude="0.000" qty="1.000" seq="3" value="0.00" valueWithTaxes="0.00" xprice="3100.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Si se hace una nueva distribución:

y una nueva venta:

Input
<message companyId="2" store="3" terminal="1" date-time="2023-06-02 18:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="222"/>
<item-add seq="3" unitprice="3100" xprice="3100" qty="1"  code="975"/>
</message>
Response
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="26" messageId="1" store="3" terminal="1">
  <optional>
    <promo id="Promo Descuento 1" nro="64779fdfa62e430db08b020c">
      <benefit TLOGMessage="Promo Descuento 1" account="" applicationMethod="resume" baseAmount="1400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="Promo Descuento 1" name="64779fdfa62e430db08b020c" nro="6477a005a62e430db08b0212" order="1" printerMessage="Promo Descuento 1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="210.00" valueWithTaxes="210.00" xprice="1400.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <optional>
    <promo id="Promo desc 2" nro="6477a036a62e430db08b0214">
      <benefit TLOGMessage="Promo desc 2" account="" applicationMethod="resume" baseAmount="2800.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo desc 2" name="6477a036a62e430db08b0214" nro="6477a05ba62e430db08b021a" order="1" printerMessage="Promo desc 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2800.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que sólo se dieron como opciones, la Promo descuento 1 y la Promo desc 2; porque la promoción promo 1 no aplica a los productos que intervienen en la transacción.

Importante

Si el cliente no selecciona ninguna de la opciones se aplica la primera del mapa:

Ej.:

Se parte de la distribución:

Donde el resumen de cada promoción es:


y el mapa:

Si se hace una venta y no se selecciona una opción:

Venta
<message companyId="napse" store="3" terminal="1" date-time="2023-07-26 13:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="12000" xprice="12000" qty="1"  code="Coca-Cola" discountable="true"/>
</message>

Aquí muestra las opciones:

Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="napse" engine="7.0.35#149" mapversion="70" messageId="1" store="3" terminal="1">
  <optional>
    <promo id="Promo Opción 1" nro="64c12701b29c1e1dd8aa1027">
      <benefit TLOGMessage="Promo Opción 1" account="" applicationMethod="resume" baseAmount="12000.00" benefitType="PercentageDiscount" discountPercentage="50.00" displayMessage="Promo Opción 1" name="64c12701b29c1e1dd8aa1027" nro="64c1271bb29c1e1dd8aa102e" order="1" printerMessage="Promo Opción 1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="6000.00" valueWithTaxes="6000.00" xprice="12000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <optional>
    <promo id="Promo Opción 2" nro="64c1273fb29c1e1dd8aa1030">
      <benefit TLOGMessage="Promo Opción 2" account="" applicationMethod="resume" baseAmount="12000.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo Opción 2" name="64c1273fb29c1e1dd8aa1030" nro="64c1275ab29c1e1dd8aa1037" order="1" printerMessage="Promo Opción 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="1000.00" valueWithTaxes="1000.00" xprice="12000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <optional>
    <promo id="Promo Opción 3" nro="64c12789b29c1e1dd8aa1039">
      <benefit TLOGMessage="Promo Opción 3" account="" applicationMethod="resume" baseAmount="12000.00" benefitType="PercentageDiscount" discountPercentage="100.00" displayMessage="Promo Opción 3" name="64c12789b29c1e1dd8aa1039" nro="64c127b9b29c1e1dd8aa1040" order="1" printerMessage="Promo Opción 3" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="12000.00" valueWithTaxes="12000.00" xprice="12000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>
   
----- message ------

En el Finish:

Finish
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="napse" engine="7.0.35#149" mapversion="70" messageId="1" store="3" terminal="1" transaction="2_3_1_20230726130000">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
    <goalsPrograms/>
  </loyalty>
</message>

y en el commit:

Commit
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="napse" engine="7.0.35#149" mapversion="70" messageId="1" store="3" terminal="1" transaction="2_3_1_20230726130000"/>

en la consola, se observa que se otorgó el beneficio de la primer promoción, que es un descuento del 50%: 

en el caso de seleccionar una opción:

Finish
<message companyId="napse" store="3" terminal="1" date-time="2023-07-26 14:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="finish" evaluate="true" suggest="false" chosenOption="2">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="12000" xprice="12000" qty="1"  code="Coca-Cola" discountable="true"/>
</message>
Finish Response
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#149" mapversion="70" messageId="1" store="3" terminal="1" transaction="2_3_1_20230726140000">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
    <goalsPrograms/>
  </loyalty>
</message>
Commit
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#149" mapversion="70" messageId="1" store="3" terminal="1" transaction="2_3_1_20230726140000"/>

En la consola, se observa que aplicó el beneficio de la promoción "Promo Opción 3" con un descuento del 100%

Las opciones se comienzan a enumerar desde 0.



4. Excluir:

Distribuimos las promociones del ejemplo anterior, usando la función "Excluir":

y realizamos una venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 17:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="222"/>
<item-add seq="3" unitprice="3100" xprice="3100" qty="1"  code="975"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="27" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Descuento 1" nro="64779fdfa62e430db08b020c">
      <benefit TLOGMessage="Promo Descuento 1" account="" applicationMethod="resume" baseAmount="1400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="Promo Descuento 1" name="64779fdfa62e430db08b020c" nro="6477a005a62e430db08b0212" order="1" printerMessage="Promo Descuento 1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="210.00" valueWithTaxes="210.00" xprice="1400.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que otorgó la Promo 1, que fue la primera que pudo otorgar y la otra promoción ya no la otorgó.

Otro ejemplo:

Se hace la venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 17:15:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="222"/>
<item-add seq="3" unitprice="3100" xprice="3100" qty="1"  code="975"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="28" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo desc 2" nro="6477a036a62e430db08b0214">
      <benefit TLOGMessage="Promo desc 2" account="" applicationMethod="resume" baseAmount="2800.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo desc 2" name="6477a036a62e430db08b0214" nro="6477a05ba62e430db08b021a" order="1" printerMessage="Promo desc 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2800.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que otorgó la Promo desc 2, porque es la primera que encontró y pudo otorgar el descuento.

5. Evalúa SI(IF):

Se generan las promociones:


Promo APromo B

y las distribuimos usando la función  "Evalúa SI":

Se realiza una venta  de un ítem que cumple con la Promo A y otro que cumple con la Promo B:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 19:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111" level2="electro"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="436" level2="electro"/>
</message>
Response
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 19:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="1400" xprice="1400" qty="1"  code="111" level2="electro"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="436" level2="electro"/>
</message>

Se observa que  se aplicó la promoción B porque sus productos fueron beneficiados por la promoción A.

Realizamos otra venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 19:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="436" level2="electro"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="29" messageId="1" store="1" terminal="1"/>


En este caso se observa que no se aplicó ninguna promoción; porque al no poderse aplicar la Promo A; no evalúa lo que sigue.

6. EVALÚA SINO (IFNOT):

Partiendo de las promociones usadas en el ítem anterior, las distribuimos en el mapa, con una función SINO:

Se hace la venta del ítem 111:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 19:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="2" unitprice="2000" xprice="2000" qty="1"  code="111" level2="electro"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="30" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo A" nro="644188dda62e433e0436b8ae">
      <benefit TLOGMessage="Promo A" account="" applicationMethod="resume" baseAmount="2000.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo A" name="644188dda62e433e0436b8ae" nro="6478cdb2a62e433688cd3ddb" order="1" printerMessage="Promo A" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que sólo se aplica la promo A, la promo B ya no se puede aplicar.

Ahora se hace la venta del producto SKU= 436:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 19:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="2" unitprice="2800" xprice="2800" qty="1"  code="436" level2="electro"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="30" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo B" nro="64418913a62e433e0436b8b6">
      <benefit TLOGMessage="Promo B" account="" applicationMethod="resume" baseAmount="2800.00" benefitType="FixedDiscount" discountAmount="1000.00" displayMessage="Promo B" name="64418913a62e433e0436b8b6" nro="6478cdf9a62e433688cd3de2" order="1" printerMessage="Promo B" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="1000.00" valueWithTaxes="1000.00" xprice="2800.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que como no se pudo aplicar la promo A, entonces se aplica la Promo B.

Las siguientes funciones son sólo para BENEFICIOS MONETARIOS:

7. Máximo Descuento:

Se generan las siguientes promociones:

Promo 1Promo 2

Las distribuimos en un mapa usando la función Máximo Descuento:

Se hace la venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-04 20:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="2000" xprice="2000" qty="1"  code="2345"/>
<item-add seq="2" unitprice="1000" xprice="1000" qty="1"  code="1234"/>
</message>
Response
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="31" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo MD 2" nro="6478fc13a62e433688cd3e5b">
      <benefit TLOGMessage="Promo MD 2" account="" applicationMethod="resume" baseAmount="2000.00" benefitType="PercentageDiscount" discountPercentage="20.00" displayMessage="Promo MD 2" name="6478fc13a62e433688cd3e5b" nro="6478fc3aa62e433688cd3e61" order="1" printerMessage="Promo MD 2" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="400.00" valueWithTaxes="400.00" xprice="2000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

8. MINIMO DESCUENTO (MIN DISCOUNT):

Las promociones anteriores son distribuidas ahora con la función Mínimo Descuento:

Se hace una venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-05 09:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="2000" xprice="2000" qty="1"  code="2345"/>
<item-add seq="2" unitprice="1000" xprice="1000" qty="1"  code="1234"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="32" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo MD1" nro="6478fbc7a62e433688cd3e53">
      <benefit TLOGMessage="Promo MD1" account="" applicationMethod="resume" baseAmount="1000.00" benefitType="PercentageDiscount" discountPercentage="30.00" displayMessage="Promo MD1" name="6478fbc7a62e433688cd3e53" nro="6478fbf5a62e433688cd3e59" order="1" printerMessage="Promo MD1" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="2" value="300.00" valueWithTaxes="300.00" xprice="1000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que el beneficio fue aplicado al ítem SKU= 1234, ya que 30% de 1000 = 300 < que el item 2345 20% de 2000 = 400.

9. Máximo Descuento Combinado:

Se generan las promociones:

Promo 1Promo 2Promo 3

las distribuimos con una función de Máximo Descuento Combinado:

y se realiza una venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-05 09:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="700" xprice="700" qty="1"  code="2345"/>
<item-add seq="2" unitprice="400" xprice="400" qty="1"  code="1234"/>
<item-add seq="3" unitprice="1000" xprice="1000" qty="1"  code="973"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="33" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo MDC II" nro="647dcb68a62e4330f8c8fa2c">
      <benefit TLOGMessage="Promo MDC II" account="" applicationMethod="resume" baseAmount="700.00" benefitType="PercentageDiscount" discountPercentage="20.00" displayMessage="Promo MDC II" name="647dcb68a62e4330f8c8fa2c" nro="647dcb8ea62e4330f8c8fa32" order="1" printerMessage="Promo MDC II" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="140.00" valueWithTaxes="140.00" xprice="700.00"/>
        </apply>
      </benefit>
    </promo>
    <promo id="Promo MDC III" nro="647dcba5a62e4330f8c8fa34">
      <benefit TLOGMessage="Promo MDC III" account="" applicationMethod="resume" baseAmount="1400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="Promo MDC III" name="647dcba5a62e4330f8c8fa34" nro="647dcbc2a62e4330f8c8fa3a" order="2" printerMessage="Promo MDC III" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="3" value="150.00" valueWithTaxes="150.00" xprice="1000.00"/>
          <item magnitude="0.000" qty="1.000" seq="2" value="60.00" valueWithTaxes="60.00" xprice="400.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

En la venta se observa que:

  1. Para el producto SKU = 1234, se aplicó el beneficio de la promoción "Promo MDC III" porque le da un beneficio mayor (15%) que la promoción "Promo MDC I" (10%),
  2. Para el producto SKU = 2345, se aplicó el beneficio de la promoción "Promo MDCII" porque le da un beneficio mayor (20%) que la promoción "Promo" MDC III" (15%).
  3. Por último al producto SKU = 973 se le aplicó la promoción "Promo MDC III" porque es la única que aplica.

10. MAXIMOS PUNTOS (MAX POINTS):

Se crean las siguientes promociones:

Promo 1Promo 2Promo 3

Y se distribuye en un mapa con una función MAXIMOS PUNTOS:

Se hace una venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-05 10:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="700" xprice="700" qty="1"  code="222"/>
<item-add seq="2" unitprice="400" xprice="400" qty="1"  code="111"/>
<item-add seq="3" unitprice="1000" xprice="1000" qty="1"  code="973"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="34" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Puntos III" nro="647dd4bca62e4330f8c8fa71">
      <benefit TLOGMessage="Promo Puntos III" account="" applicationMethod="resume" baseAmount="2100.00" benefitType="LoyaltyBenefit" displayMessage="Promo Puntos III" name="647dd4bca62e4330f8c8fa71" nro="647dd4d8a62e4330f8c8fa77" order="1" printerMessage="Promo Puntos III" totalpoints="900.00" type="1" unit="qty" value="300.00">
        <apply>
          <item magnitude="0.000" points="300.00" qty="1.000" seq="1" value="0.00" valueWithTaxes="0.00" xprice="700.00"/>
          <item magnitude="0.000" points="300.00" qty="1.000" seq="2" value="0.00" valueWithTaxes="0.00" xprice="400.00"/>
          <item magnitude="0.000" points="300.00" qty="1.000" seq="3" value="0.00" valueWithTaxes="0.00" xprice="1000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que se otorgó la promoción "Promo Puntos III", que es la que más puntos otorga.

11. MINIMOS PUNTOS (MIN POINTS):

Ahora, las promociones usadas en el punto anterior, la vamos a distribuir en el mapa con una función Mínimos Puntos:

Se hace la venta:

Input
<message companyId="2" store="1" terminal="1" date-time="2023-06-05 10:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<customer-add seq="1" id="1"/>
<item-add seq="1" unitprice="400" xprice="400" qty="1"  code="111"/>
<item-add seq="2" unitprice="700" xprice="700" qty="1"  code="222"/>
<item-add seq="3" unitprice="1000" xprice="1000" qty="1"  code="973"/>
</message>
Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#149" mapversion="37" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Puntos I" nro="647dd435a62e4330f8c8fa61">
      <benefit TLOGMessage="Promo Puntos I" account="" applicationMethod="resume" baseAmount="400.00" benefitType="LoyaltyBenefit" displayMessage="Promo Puntos I" name="647dd435a62e4330f8c8fa61" nro="647dd45fa62e4330f8c8fa67" order="1" printerMessage="Promo Puntos I" totalpoints="100.00" type="1" unit="qty" value="100.00">
        <apply>
          <item magnitude="0.000" points="100.00" qty="1.000" seq="1" value="0.00" valueWithTaxes="0.00" xprice="400.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

En este caso se observa que sólo se benefició al producto SKU = 111,con la promocion "Promo Puntos I", que otorgaba la menor cantidad de puntos.

Apéndice XI -  Ejemplo de Promociones con Descuento por Convenios

Definición de Convenio

Un convenio es un acuerdo establecido entre dos o más entidades con la finalidad de dar beneficios a los clientes.

Pre-Condiciones

Para utilizar el beneficio "Descuento por Convenios" en una promoción ,es necesario:


  1. Crear en la consola el/los convenios que van a intervenir en la promoción; desde Fidelidad/Convenio:


2. Asociar el/los convenio/s a un elemento de fidelidad y a un cliente:


El archivo debe contener la siguiente información:

  • Número de elemento de fidelidad
  • Código de Cliente
  • Saldo

Ej:

el nombre debe ser de tipo: tipodeelemento_codigodeconvenio_timestap.catalog: 1_1_20230808183600.catalog

Una vez procesado el archivo se detallará en la consola:


Importante

Un cliente sólo podrá tener un tipo de  elemento de fidelidad asociado a un mismo convenio. Es decir un cliente no podrá poseer dos o más elementos de fidelidad de fidelidad que estén asociadas a un mismo convenio.

Se trató de procesar el archivo,

donde el cliente 6 tiene asociado dos elementos de fidelidad a un mismo convenio:

Al procesarlo, la consola arroja el siguiente error:


Crear la Promoción:

En la consola se crea la promoción cuyo beneficio será el descuento por convenio:

  1. Se debe agregar un convenio:

2. luego seleccionar clase de beneficio: "Descuento por Convenio" y completar el porcentaje de descuento:


3. Se debe agregar un límite, por cliente y por cantidad de dinero:

Importante

Si falta cualquiera de estos tres puntos , la promoción no se aplicará.


Resumen de la promoción:



Se realiza primeramente un loyaltyValidation:
Request

Loyaltyvalidation
<message companyId="2" store="1" terminal="1" date-time="2023-08-09 13:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyvalidation" evaluate="true" suggest="false">
<customer-add seq="1" id="2"/>
</message>

Response

Loyaltyvalidation
----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1" transaction="2_1_1_20230808130000">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors/>
    <customers>
      <customer code="2" email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:20000.00;" name="SOFIA" segment="" seq="1" type="FRECUENTE">
        <loyaltycard ack="0" amount="200000.00" id="1000000019" status="Activa" type="1"/>
        <loyaltycard ack="0" amount="10000.00" id="1000000048" status="Activa" type="1"/>
        <limit amount="20000.00" id="64d2b87e14e33806ecc54583" promotionDescription="" promotionName="Promo Nuevo Descuento por Convenio"/>
      </customer>
    </customers>
    <redeemTable/>
  </loyalty>
</message>

Se observa el limite que dispone el cliente

<limit amount="20000.00" id="64d2b87e14e33806ecc54583" promotionDescription="" promotionName="Promo Nuevo Descuento por Convenio"/>


Luego se hace la venta:
Request

Sale
<message companyId="2" store="1" terminal="1" date-time="2023-08-09 13:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false" limitedBenefit = "true">
<loyaltycard-add seq="1" id="1000000048" type="1" contract="1"/>
<customer-add seq="1" id="2" email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:20000.00;" name="SOFIA" segment="" type="FRECUENTE"/>
<item-add seq="1" unitprice="4000" xprice="4000" qty="1" code="Coca-Cola"/>
</message>

Response

Sale
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1"/>

----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Nuevo Descuento por Convenio" nro="64d2b80d14e33806ecc54578">
      <benefit TLOGMessage="Promo Nuevo Descuento por Convenio" account="" applicationMethod="resume" balance="" baseAmount="4000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Nuevo Descuento por Convenio" hasLimit="true" name="64d2b80d14e33806ecc54578" nro="64d2b87e14e33806ecc54583" order="1" printerMessage="Promo Nuevo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="2000.00" valueWithTaxes="2000.00" xprice="4000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>


Finish

Finish
<message companyId="2" store="1" terminal="1" date-time="2023-08-09 13:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="finish" evaluate="true" suggest="false" limitedBenefit = "true">
<loyaltycard-add seq="1" id="1000000048" type="1" contract="1"/>
<customer-add seq="1" id="2" email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:20000.00;" name="SOFIA" segment="" type="FRECUENTE"/>
<item-add seq="1" unitprice="4000" xprice="4000" qty="1" code="Coca-Cola"/>
</message>

Finish

---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1" transaction="2_1_1_20230809130500">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>


Commit

commit
<message companyId="2" store="1" terminal="1" date-time="2023-08-09 13:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="commit" evaluate="true" suggest="false" limitedBenefit = "true">
<loyaltycard-add seq="1" id="1000000048" type="1" contract="1"/>
<customer-add seq="1" id="2" email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:20000.00;" name="SOFIA" segment="" type="FRECUENTE"/>
<item-add seq="1" unitprice="4000" xprice="4000" qty="1" code="Coca-Cola"/>
</message>

Commit

commit
----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1" transaction="2_1_1_20230809130500"/>


Se realiza otra venta:
Request

Sale
<message companyId="2" store="1" terminal="1" date-time="2023-08-09 14:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="commit" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="1000000048" type="1" contract="1"/>
<customer-add seq="1" id="2" email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:18000.00;" name="SOFIA" segment="" type="FRECUENTE"/>
<item-add seq="1" unitprice="8000" xprice="8000" qty="1" code="36"/>
<item-add seq="2" unitprice="1000" xprice="1000" qty="1" code="92"/>
<item-add seq="3" unitprice="2000" xprice="2000" qty="1" code="75"/>
</message>

Response

Sale
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Nuevo Descuento por Convenio" nro="64d2b80d14e33806ecc54578">
      <benefit TLOGMessage="Promo Nuevo Descuento por Convenio" account="" applicationMethod="resume" balance="" baseAmount="11000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Nuevo Descuento por Convenio" hasLimit="true" name="64d2b80d14e33806ecc54578" nro="64d2b87e14e33806ecc54583" order="1" printerMessage="Promo Nuevo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="4000.00" valueWithTaxes="4000.00" xprice="8000.00"/>
          <item magnitude="0.000" qty="1.000" seq="2" value="500.00" valueWithTaxes="500.00" xprice="1000.00"/>
          <item magnitude="0.000" qty="1.000" seq="3" value="1000.00" valueWithTaxes="1000.00" xprice="2000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa como el límite va disminuyendo 

limitedBenefits="64d2b87e14e33806ecc54583:18000.00


realizamos otra venta:

<message companyId="2" store="1" terminal="1" date-time="2023-08-09 14:15:00" init-tck="false" messageId="1" void-trx="false" response="true" status="commit" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="1000000048" type="1" contract="1"/>
<customer-add seq="1" id="2" email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:12500.00;" name="SOFIA" segment="" type="FRECUENTE"/>
<item-add seq="1" unitprice="18000" xprice="18000" qty="1" code="36"/>
</message>
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Nuevo Descuento por Convenio" nro="64d2b80d14e33806ecc54578">
      <benefit TLOGMessage="Promo Nuevo Descuento por Convenio" account="" applicationMethod="resume" balance="" baseAmount="18000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Nuevo Descuento por Convenio" hasLimit="true" name="64d2b80d14e33806ecc54578" nro="64d2b87e14e33806ecc54583" order="1" printerMessage="Promo Nuevo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="9000.00" valueWithTaxes="9000.00" xprice="18000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

El limite es:

limitedBenefits="64d2b87e14e33806ecc54583:3500.00


Por último se realiza otra venta:

<message companyId="2" store="1" terminal="1" date-time="2023-08-09 14:35:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="1000000048" type="1" contract="1"/>
<customer-add seq="1" id="2"  email="[email protected]" identifier="222233" lastName="Gonzalez" limitedBenefits="64d2b87e14e33806ecc54583:3500.00;" name="SOFIA" segment="" type="FRECUENTE"/>
<item-add seq="1" unitprice="14000" xprice="14000" qty="1" code="111"/>
</message>
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="58" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Nuevo Descuento por Convenio" nro="64d2b80d14e33806ecc54578">
      <benefit TLOGMessage="Promo Nuevo Descuento por Convenio" account="" applicationMethod="resume" balance="" baseAmount="14000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Nuevo Descuento por Convenio" hasLimit="true" name="64d2b80d14e33806ecc54578" nro="64d2b87e14e33806ecc54583" order="1" printerMessage="Promo Nuevo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="3500.00" valueWithTaxes="3500.00" xprice="14000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Se observa que sólo recibió un descuento de $3500; cuando éste debería haber sido de $7000;00 alcanzando el limite definido en la promoción.

  <item magnitude="0.000" qty="1.000" seq="1" value="3500.00" valueWithTaxes="3500.00" xprice="14000.00"/> 

el limite en este caso es:

  <limit amount="0.00" id="64d2b87e14e33806ecc54583" promotionDescription="" promotionName="Promo Nuevo Descuento por Convenio"/>



Ejemplo de casos erróneos:


Caso 1: La promoción no tiene  como condición simple el convenio


Se realiza primeramente el LoyaltyValidation:
LoyaltyValidation

<message companyId="2" store="1" terminal="1" date-time="2023-06-28 11:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="false">
<customer-add seq="1" id="2"/>
</message>

loyaltyvalidation

---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#153" mapversion="41" messageId="1" store="3" terminal="1" transaction="2_3_1_20230627120000">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>

Se observa que no trae los datos del cliente, porque el convenio está relacionado a la tarjeta de fidelidad.

Caso 2: La promoción tiene  como condición simple el convenio, pero al beneficio se le quita el limite

LoyaltyValidation:
LoyaltyValidation

<message companyId="2" store="1" terminal="1" date-time="2023-06-28 11:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="8010000019" />
<customer-add seq="1" id="2"/>
</message>

LoyaltyValidation

---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.0.35#153" mapversion="41" messageId="1" store="1" terminal="1" transaction="2_1_1_20230628113000">
  <loyalty>
    <loyaltycards>
      <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" customer="2" id="8010000019" nextExpDate="20240627" nextExpValue="200000.00" seq="1" type="6" usePartial="true" validFrom="20230628" validTo="20240627"/>
    </loyaltycards>
    <coupons/>
    <errors/>
    <customers>
      <customer code="2" email="[email protected]" identifier="222233" lastName="gonzalez" limitedBenefits="" name="sofia" segment="" seq="1" type="frecuente">
        <loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" contract="" id="1010000010" status="Activa" type="2" usePartial="true"/>
        <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" id="8010000019" nextExpDate="20240627" nextExpValue="200000.00" status="Activa" type="6" usePartial="true" validFrom="20230628" validTo="20240627"/>
      </customer>
    </customers>
    <redeemTable/>
  </loyalty>
</message>

Venta:
sale

<message companyId="2" store="1" terminal="1" date-time="2023-06-28 13:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="8010000019" contract="1"  type="6"/>
<customer-add seq="1" id="6"  email="[email protected]" identifier="222233" lastName="sofia" limitedBenefits="" name="gonzalez" segment="" type="frecuente"/>
<item-add seq="1" unitprice="400" xprice="400" qty="1"  code="Coca-Cola" discountable="true"/>
</message>
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="41" messageId="1" store="1" terminal="1"/>

Se observa que el beneficio no fue otorgado.

Caso 3: Se aplica una condición simple a un cliente y no a un producto

Al crear una promoción sin condición simple por producto:

Venta:
Sale

<message companyId="2" store="1" terminal="1" date-time="2023-06-28 13:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="8010000017" contract="1"  type="6"/>
<customer-add seq="1" id="4" email="[email protected]" identifier="222222" lastName="Perez" limitedBenefits="649c49d463ca19126cf62384:20000.00;" name="LUCIA" segment=""  type="EMPLEADO"/>
<item-add seq="1" unitprice="400" xprice="400" qty="1"  code="Coca-Cola" discountable="true"/>
</message>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="41" messageId="1" store="1" terminal="1">


Apéndice XII -  Ejemplo de Promociones con límite por cantidad de dinero por cliente


Se va a definir una promoción que tenga un límite por cliente y por cantidad de dinero.

 

Esta promoción ofrecerá un descuento del 30% en el precio beneficiado de cualquier producto que adquiera el cliente.

Este beneficio será otorgado hasta que el cliente alcance la suma de $5000,00 de descuento.

Se distribuye la promoción:

Se realiza una venta:

Venta Request
<message companyId="2" store="1" terminal="1" date-time="2023-08-04 13:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false" limitBalances="true">
<customer-add seq="1" id="3" email="[email protected]" identifier="654321" lastName="Torres" limitedBenefits="" name="JOSE" segment="" type="EMPLEADO"/>
<item-add seq="1" unitprice="4000" xprice="4000" qty="1"  code="111"/>
</message>
Venta Response
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="57" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Invierno" nro="64cd1c25a62e431b30c232d9">
      <benefit TLOGMessage="Promo Invierno" account="" applicationMethod="resume" baseAmount="4000.00" benefitType="PercentageDiscount" discountPercentage="30.00" displayMessage="Promo Invierno" hasLimit="true" name="64cd1c25a62e431b30c232d9" nro="64cd1c53a62e431b30c232e0" order="1" printerMessage="Promo Invierno" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="1200.00" valueWithTaxes="1200.00" xprice="4000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <limitBalances>
    <limit amount="3800.00" id="64cd1c50a62e431b30c232df" max="5000.00" promotionName="64cd1c25a62e431b30c232d9"/>
  </limitBalances>
</message>

Se observa que de los $5000 que el cliente tenia disponible para descuentos; ya recibió $1200 y sólo le quedan $3800

   <limit amount="3800.00" id="64cd1c50a62e431b30c232df" max="5000.00" promotionName="64cd1c25a62e431b30c232d9"/> 

En la consola se observa que el límite aun no fue alcanzado:

Se realiza otra venta:

<message companyId="2" store="1" terminal="1" date-time="2023-08-04 14:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false" limitBalances="true">
<customer-add seq="1" id="3" email="[email protected]" identifier="654321" lastName="Torres" limitedBenefits="" name="JOSE" segment="" type="EMPLEADO"/>
<item-add seq="1" unitprice="500" xprice="500" qty="1"  code="222"/>
</message>
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="57" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Invierno" nro="64cd1c25a62e431b30c232d9">
      <benefit TLOGMessage="Promo Invierno" account="" applicationMethod="resume" baseAmount="500.00" benefitType="PercentageDiscount" discountPercentage="30.00" displayMessage="Promo Invierno" hasLimit="true" name="64cd1c25a62e431b30c232d9" nro="64cd1c53a62e431b30c232e0" order="1" printerMessage="Promo Invierno" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="150.00" valueWithTaxes="150.00" xprice="500.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <limitBalances>
    <limit amount="3650.00" id="64cd1c50a62e431b30c232df" max="5000.00" promotionName="64cd1c25a62e431b30c232d9"/>
  </limitBalances>
</message>

Por ultimo se realiza otra venta:

<message companyId="2" store="1" terminal="1" date-time="2023-08-04 15:05:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false" limitBalances="true">
<customer-add seq="1" id="3" email="[email protected]" identifier="654321" lastName="Torres" limitedBenefits="" name="JOSE" segment="" type="EMPLEADO"/>
<item-add seq="1" unitprice="15000" xprice="15000" qty="1"  code="333"/>
</message>
----- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.0.35#153" mapversion="57" messageId="1" store="1" terminal="1">
  <optional>
    <promo id="Promo Invierno" nro="64cd1c25a62e431b30c232d9">
      <benefit TLOGMessage="Promo Invierno" account="" applicationMethod="resume" baseAmount="15000.00" benefitType="PercentageDiscount" discountPercentage="30.00" displayMessage="Promo Invierno" hasLimit="true" limitApplied="true" name="64cd1c25a62e431b30c232d9" nro="64cd1c53a62e431b30c232e0" order="1" printerMessage="Promo Invierno" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="3650.00" valueWithTaxes="3650.00" xprice="15000.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <limitBalances>
    <limit amount="0.00" id="64cd1c50a62e431b30c232df" max="5000.00" promotionName="64cd1c25a62e431b30c232d9"/>
  </limitBalances>
</message>

Se observa que se ha consumido el total del monto disponible para descuentos:

<limit amount="0.00" id="64cd1c50a62e431b30c232df" max="5000.00" promotionName="64cd1c25a62e431b30c232d9"/>

En la consola, también se observa que se ha alcanzado el límite:

Si se realiza una venta, una vez alcanzado el límite, no se dará el beneficio:

<message companyId="2" store="1" terminal="1" date-time="2023-08-04 16:05:00" init-tck="true" messageId="1" void-trx="false" response="true" status="commit" evaluate="true" suggest="false" limitBalances="true">
<customer-add seq="1" id="3" email="[email protected]" identifier="654321" lastName="Torres" limitedBenefits="" name="JOSE" segment="" type="EMPLEADO"/>
<item-add seq="1" unitprice="300" xprice="300" qty="1"  code="444"/>
</message>
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="9002" companyId="2" engine="7.0.35#153" mapversion="57" messageId="1" store="1" terminal="1" transaction="2_1_1_20230804150500"/>

Apéndice XIII -  Ejemplo de Ignorar Pago con Puntos


Se define una promoción, con el ítem de "Ignorar Pago con Puntos"  destildado:

  • Promoción 2: Coeficiente de fidelización (Otorga Puntos)

Mapa

    • Paso1:
      • Promoción 1 (bajo función Todas)
    • Paso 2:
      • Promoción 2 (bajo función Todas)

Se vende un ítem de $43900

El motor informara la aplicación del beneficio Canje con opciones, donde el cliente deberá de elegir consumir los 500 puntos para acceder al beneficio del -20% sobre el ítem vendido.

También el motor informara, en este punto, que se están otorgando 62 puntos por la aplicación del beneficio de coeficiente de fidelización.


<optional>
    <promo code="4280468" id="Canje con opciones - Redime puntos" nro="61545e4116f79a304cced688">
      <benefit TLOGMessage="Canje con opciones" a789="1" account="" applicationMethod="lineByLine" baseAmount="43900" benefitType="RedeemWithOptionsBenefit" displayMessage="Canje con opciones" name="61545e4116f79a304cced688" nro="6154627416f79a304cced6a8" order="1" printerMessage="Canje con opciones" prorationMethod="PROPORTIONAL" usedPoints="0">
        <apply>
          <item magnitude="0.000" qty="1.000" seq="1" value="0" valueWithTaxes="0" xprice="43900"/>
        </apply>
        <redeemOptions>dfgdfgdfgdfg
          <option benefitType="percentageDiscount" cardPoints="0.0" cardType="-" id="6154627416f79a304cced6a8_0" requiredPoints="500.0" unit="qty" value="20.0"/>
        </redeemOptions>
      </benefit>
    </promo>
    <promo code="4280467" id="Otorga Puntos" nro="6153983116f79a304cced625">
      <benefit TLOGMessage="Otorga Puntos de Fidelidad" account="" applicationMethod="lineByLine" baseAmount="43900" benefitType="FactorLoyaltyBenefit" displayMessage="Otorga Puntos de Fidelidad" name="6153983116f79a304cced625" nro="61545cc816f79a304cced685" factor="0" order="2" printerMessage="Otorga Puntos de Fidelidad" totalpoints="62" type="external">
        <apply>
          <item magnitude="0.000" points="62.71" qty="1.000" seq="1" value="0" valueWithTaxes="0" xprice="43900"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>


Al enviarse desde el POS la aplicación de la opción de canje de puntos elegida por el cliente, el motor devolverá el beneficio de canje con opciones ya con la información correspondiente al consumo de los 500 Puntos así como el valor del descuento aplicado.

En este punto, al detectarse en el motor que se realizara un "pago" con puntos correspondiente a la aplicación de canje con opciones, el beneficio que otorga puntos se vera afectado y se informara el nuevo monto de puntos, que en este caso será de 50.

<?xml version="1.0" encoding="UTF-8"?><message ack="0" channel="T" companyId="napse" engine="7.0.35-#450" mapversion="62" messageId="" store="3" terminal="022">
  <optional>
    <promo code="4280468" id="Canje con opciones - Redime puntos" nro="61545e4116f79a304cced688">
      <benefit TLOGMessage="Canje con opciones" a789="1" account="" applicationMethod="lineByLine" baseAmount="43900" benefitType="RedeemWithOptionsBenefit" displayMessage="Canje con opciones" name="61545e4116f79a304cced688" nro="6154627416f79a304cced6a8" order="1" printerMessage="Canje con opciones" prorationMethod="PROPORTIONAL" usedPoints="500">
        <apply>
          <item benefitTypeOption="percentageDiscount" benefitUnitOption="qty" cardType="-" cardUsedPoints="0" magnitude="0.000" nominalDiscount="8780" percentageDiscount="20" priceinPoints="6271" qty="1.000" redeemOption="6154627416f79a304cced6a8_0" seq="1" usedPoints="500" value="5280" valuePoints="3500" valueWithTaxes="5280" xprice="43900"/>
        </apply>
      </benefit>
    </promo>
    <promo code="4280467" id="Otorga Puntos" nro="6153983116f79a304cced625">
      <benefit TLOGMessage="Otorga Puntos de Fidelidad" account="" applicationMethod="lineByLine" baseAmount="35120" benefitType="FactorLoyaltyBenefit" displayMessage="Otorga Puntos de Fidelidad" name="6153983116f79a304cced625" nro="61545cc816f79a304cced685" factor="0" order="2" printerMessage="Otorga Puntos de Fidelidad" totalpoints="50" type="external">
        <apply>
          <item magnitude="0.000" points="50.17" qty="1.000" seq="1" value="0" valueWithTaxes="0" xprice="43900"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

El cliente podrá luego optar por saldar la transacción también con puntos de fidelidad, y podrá solicitar al motor que dicho pago con puntos no sea tomado en cuenta para el calculo de los puntos ya otorgados por la promoción 2.

Para esto, deberá incorporarse en la mensajería que informa el pago (<payment-add/>) el atributo pointsType=, informando allí el tipo de tarjeta que acumula los puntos o en caso de tratarse de puntos externos, la palabra "external"

<?xml version="1.0" encoding="UTF-8"?>
<message channel="T" cia="napse" ciudad="58" companyId="napse" date-time="2023-08-24 15:57:17" evaluate="true" format="H" init-tck="false" limitBalances="true" localidad="1" map-version="62"
 status="sale" store="0013" storeChain="S" subZone="1" terminal="022" tipologia="hi" zonaprecio="E22" zone="1">
<payment-add amount="35120" balance="true" itemamount="35120" pointsType="external" seq="2" type="11"/>
</message>

De esta forma, el motor incorporara al mensaje enviado al POS el nuevo beneficio "PromotionPaidInPoints" donde se informaran los puntos que deberán ser descontados de los puntos ya otorgados previamente.


<?xml version="1.0" encoding="UTF-8"?><message ack="0" channel="T" companyId="napse" engine="7.0.35-#450" mapversion="63" messageId="" store="0013" terminal="022">
  <optional>
    <promo code="4280468" id="Canje con opciones - Redime puntos" nro="61545e4116f79a304cced688">
      <benefit TLOGMessage="Canje con opciones" a789="1" account="" applicationMethod="lineByLine" baseAmount="43900" benefitType="RedeemWithOptionsBenefit" displayMessage="Canje con opciones" name="61545e4116f79a304cced688" nro="6154627416f79a304cced6a8" order="1" printerMessage="Canje con opciones" prorationMethod="PROPORTIONAL" usedPoints="500">
        <apply>
          <item benefitTypeOption="percentageDiscount" benefitUnitOption="qty" cardType="-" cardUsedPoints="0" magnitude="0.000" nominalDiscount="8780" percentageDiscount="20" priceinPoints="6271" qty="1.000" redeemOption="6154627416f79a304cced6a8_0" seq="1" usedPoints="500" value="5280" valuePoints="3500" valueWithTaxes="5280" xprice="43900"/>
        </apply>
      </benefit>
    </promo>
    <promo code="4280467" id="Otorga Puntos" nro="6153983116f79a304cced625">
      <benefit TLOGMessage="Otorga Puntos de Fidelidad" account="" applicationMethod="lineByLine" baseAmount="35120" benefitType="FactorLoyaltyBenefit" displayMessage="Otorga Puntos de Fidelidad" name="6153983116f79a304cced625" nro="61545cc816f79a304cced685" factor="0" order="2" printerMessage="Otorga Puntos de Fidelidad" totalpoints="50" type="external">
        <apply>
          <item magnitude="0.000" points="50.17" qty="1.000" seq="1" value="0" valueWithTaxes="0" xprice="43900"/>
        </apply>
      </benefit>
    </promo>
    <promo id="PromotionPaidInPoints" nro="0">
      <benefit TLOGMessage="" account="" applicationMethod="" baseAmount="35120" benefitType="LoyaltyBenefit" displayMessage="" order="3" printerMessage="" totalpoints="-5" type="external" unit="" value="-5">
        <apply>
          <item magnitude="0.000" points="-4.99" qty="1.000" seq="1" value="0" valueWithTaxes="0" xprice="35120"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Luego de que se reciba esa información del motor, el POS hará el calculo descontando de los puntos a otorgar para el type=external (el utilizado en este ejemplo) los puntos que se informen en la promoción PromotionPaidInPoints.

(Para mas información sobre los cálculos utilizados en la aplicación del beneficio "PromotionPaidInPoints" ver manual de integración - Motor).


  • Sem rótulos