PROMO - Manual de Usuario 7.0 - Apéndices
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 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: Aplicada a periodicidad por semanas: |
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): level3 → Categoría level4 → Sub Categoría code → Código (SKU) unitprice → Precio unitario brand → Marca supplier → Proveedor level1 → Departamento level2 → Familia discountable → Descontable | |
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:
| |
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:
| |
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:
El siguiente porcentaje/ monto/ precio: numérico Por cada unidad de: Opciones disponibles:
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 Catalogo | CatalogRedeemBenefit | 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:
| |
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:
Valor del Recupero: numérico Tipo de Recupero: código del tipo de recupero
| |
ContractPercentageDiscount | Valores asociados a cada campo: El siguiente porcentaje (%): numérico Por cada unidad de: código de unidad de medida. Opciones disponibles:
Balance:
| ||
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:
Valor del Recupero: numérico Tipo de Recupero: código del tipo de recupero. Opciones disponibles:
| |
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:
Valor de Recupero: valor numérico (entero) Tipo de Recupero: código del tipo de recupero. Opciones disponibles:
| |
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ón | FactorLoyaltyBenefit | 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:
| |
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:
Valor: numérico entero Cantidad de Vouchers: numérico entero | |
Plan de pagos | PaymentPlanBenefit | Valores asociados a cada campo: Otorgar el plan de pagos: alfanumérico. Có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:
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ón | PercentLoyaltyBenefit | 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:
| |
Regalo | GiftBenefit | 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 bancario | BankRefundBenefit | Valores asociados a cada campo: Otorgar el plan de pagos: alfanumérico. Có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:
Periodo a contabilizar (limitPeriod): Código asociado al periodo. Opciones disponibles:
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:
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:
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:
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_proveedor, Tipo 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:
Imagen | Detalles |
---|---|
|
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:
|
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 proveedor | Código del proveedor en CatalogSupplier |
Tipo de importe | Opciones disponibles:
|
Valor | Valor 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 proveedor | Código del proveedor en CatalogSupplier |
Tipo de importe | Opciones disponibles:
|
Valor | Valor numérico asociado al tipo de importe indicado |
Plantilla de Excel. Formato del proveedor del bien y financiero
Generacion de Plantillas:
Ejemplo:
Detalle | Imagen |
---|---|
Generación de Excel desde la pantalla de definición de plantilla Ir a Operación → Plantilla de promociones → Acciones → 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 |
---|---|
|
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:
|
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 |
---|---|
|
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:
|
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).
- 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:
- Secuencial:
Promo 1 | Promo 2 | Promo 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:
<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>
----- 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:
<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>
----- 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:
<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>
----- 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:
<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>
---- 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.
4. Excluir:
Distribuimos las promociones del ejemplo anterior, usando la función "Excluir":
y realizamos una venta:
<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>
----- 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:
<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>
----- 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 A | Promo 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:
<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>
<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:
<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>
----- 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:
<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>
----- 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:
<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>
----- 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 1 | Promo 2 |
---|---|
Las distribuimos en un mapa usando la función Máximo Descuento:
Se hace la venta:
<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>
---- 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:
<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>
----- 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 1 | Promo 2 | Promo 3 |
---|---|---|
las distribuimos con una función de Máximo Descuento Combinado:
y se realiza una venta:
<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>
----- 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:
- 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%),
- 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%).
- 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 1 | Promo 2 | Promo 3 |
---|---|---|
Y se distribuye en un mapa con una función MAXIMOS PUNTOS:
Se hace una venta:
<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>
----- 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:
<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>
----- 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:
- 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:
- 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
<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
----- 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
<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
---- 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
<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
<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
----- 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
<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
----- 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:
<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>
----- 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)
- Paso1:
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).