Anatomía de la promoción

Una promoción se define como una interfaz dentro del motor de promociones, lo que significa que el desarrollador que personaliza el motor de promociones puede suministrar diferentes implementaciones de una promoción. Se suministra una implementación predeterminada para la interfaz, que sigue un modelo basado en patrón. En este tema se explica el modelo.

Cada promoción individual de HCL Commerce se puede serializar como un documento XML. Este documento se denomina XML de promoción de ejecución. El motor de promociones analiza y procesa el XML de promoción de tiempo de ejecución al evaluar promociones durante el flujo de compra. Consulte el XML de promoción de ejecución de ejemplo. Consulte también la DTD de promoción para ver la definición de tipo de documento (DTD) del XML de promoción. Tenga en cuenta que esta DTD se utiliza principalmente como referencia. No se realiza ninguna validación en esta DTD durante la ejecución del motor de promociones. Además, esta DTD no especifica los detalles de algunos de sus componentes, como filtros y ajustes. El contenido de estos dos elementos está marcado como ANY. Esto se debe a que estos dos componentes son los componentes de una promoción que se personalizan con más frecuencia. La definición de un modelo de contenido rígido limitaría la posibilidad de que un desarrollador pueda personalizar el sistema. También se proporcionan fragmentos XML de filtros y ajustes en el tema Fragmentos XML de ajustes de ejemplo. Estos fragmentos pueden utilizarse para construir nuevos tipos de promociones.

Atributos de la promoción

Clave de promoción
Una promoción se identifica mediante una clave, que consta de una tienda, un nombre de serie de caracteres, un número de versión y un número de revisión.
Pertenencia a grupo de promociones
Una promoción pertenece a un grupo de promociones y sólo a uno.
Pertenencia a campañas
Opcionalmente, una promoción puede ser un miembro de una campaña de marketing.
Descripción:
Una promoción puede tener múltiples descripciones en diferentes idiomas.
Prioridad
Cada promoción tiene una prioridad. Cuanto más alta es la prioridad, más importante es la promoción. Esta prioridad es uno de los parámetros de entrada para el generador de secuencias de promoción del motor de promociones.
Exclusividad
Una promoción puede ser no exclusiva, exclusiva dentro de su propio grupo, o exclusiva globalmente.
Estado
Una promoción puede estar activa, inactiva, obsoleta, suspendida o suprimida.
Última actualización
La fecha en que se actualizó por última vez una promoción. Este valor se registra en la promoción.
Última actualización de
El ID de la persona que actualizó por última vez la promoción. Este valor se registra en la promoción.
Límites de aplicación
Una promoción puede tener asociados tres límites de aplicación diferentes:
Límite por pedido
El número máximo de veces que se puede hacer uso de una promoción dentro de cualquier pedido dado.
Límite por comprador
El número máximo de veces que un cliente registrado puede hacer uso de una promoción. Debido a la naturaleza de los clientes invitados, este límite no se aplica a ningún cliente invitado.
Límite total
El número máximo de veces que se puede hacer uso de una promoción en total.
Planificación
Una promoción puede estar activa durante un período de tiempo determinado. Este período se define con una fecha de inicio y una fecha de finalización, una lista de días de la semana durante los cuales la promoción estará activa y un periodo de tiempo durante el día en el cual está activa una promoción.
Cupones
Una promoción se puede marcar como de objetivos, lo que significa que siempre que un cliente pertenezca a un segmento de clientes que sea un objetivo de esta promoción y no pertenezca a ningún segmento de clientes excluido por esta promoción, el cliente es potencialmente elegible para una promoción. Por otro lado, una promoción también se puede marcar como privada, lo que significa que para que un cliente pueda ser elegible para la promoción, el cliente debe recibir antes un cupón para dicha promoción.
Código de promoción
Puede asignar uno o más códigos de promoción a una promoción. Por omisión, se proporciona una aplicación de códigos de promoción sencilla. Esta aplicación sólo permite asignar un único código por promoción. Si se indica que la promoción requiere un código de promoción, el cliente deberá entrar ese código para poder tener derecho a dicha promoción. El código se registra como el atributo PromotionCodeCue de la promoción. El atributo booleano PromotionCodeRequired se utiliza para indicar si esta promoción requiere un código de promoción o no.

Una aplicación de códigos de promoción personalizada es un tema muy importante que se trata en Personalizar el gestor de códigos de promoción.

Condición objetivo
Una promoción se puede marcar para dirigirla solamente a ciertos segmentos de clientes y para excluir a otros. Si no se especifica ningún segmento de clientes, entonces está disponible para todos los clientes. Hay dos atributos booleanos adicionales que controlan cómo se aplica una Condición objetivo asociada con una promoción. El primero indica al motor de promociones si la condición objetivo debe evaluarse o no durante la evaluación de la promoción. Si se establece en false, la condición objetivo se pasa por alto en el momento de evaluar la promoción. El segundo atributo, SkipTargetingConditionOnProperPromotionCodeEntered, dirige el motor de promociones cuando se da la situación en que se ha entrado un código de promoción correcto para una promoción pero la promoción también tiene asociada una condición objetivo. Si se establece en true, se hace caso omiso de la condición objetivo cuando se entra un código de promoción correcto para esta promoción.
Condiciones personalizadas
Se pueden especificar condiciones personalizadas adicionales en una promoción. El único resultado que devuelve una condición personalizada es un valor booleano que indica si la condición se cumple o no. Si no se cumple, la promoción no se aplicará. Todas las condiciones personalizadas deben implementar la interfaz de Condición. Este tema se trata con más detalle en nuevas condiciones.

Condición de compra

El diagrama siguiente muestra los bloques estructurales de una Condición de compra, que es la base de una promoción. Una condición de compra define las compras que un cliente debe hacer para cumplir los requisitos de una promoción. La condición de compra es una condición, es decir, implementa la interfaz de Condición. Todos los bloques de construcción del diagrama implementan la interfaz XMLizable para que se puedan serializar en un elemento XML y deserializar de un elemento XML. El fragmento XML serializado de una condición de compra pasa a formar parte del documento XML de una promoción.

aquí va una imagen

La sección siguiente describe los bloques estructurales individualmente.

Filtro
Un filtro es un conjunto de lógica de negocio que se aplica a un LineItemSet y como resultado se obtiene un segundo conjunto de líneas de detalle (LineItemSet) que es un subconjunto del conjunto de líneas de detalle original. Por ejemplo, un filtro podría devolver todos los artículos de pedido del LineItemSet original que pertenecen a la categoría "Jerséis". Se proporciona un conjunto de filtros estándar. Este conjunto incluye los filtros siguientes:
DummyFilter
No hace nada. Devuelve el conjunto de líneas de detalle original.
CategoryFilter
Devuelve todos los artículos de pedido que pertenecen a las categorías objetivo, pero no a las categorías excluidas.
ManufacturerFilter
Devuelve todos los artículos de pedido cuyo fabricante coincide con el fabricante objetivo especificado.
MultiSKUFilter
Devuelve todos los artículos de pedido cuyo código de artículo, o del producto padre del artículo, está en la lista de incluidos, pero no en la lista de excluidos.
OrderedQuantityFilter
Devuelve artículos de pedido que cumplen restricciones de cantidad, como por ejemplo "hasta 5 artículos" o "al menos 2 artículos".
PriceComparisonFilter
Este filtro de dejado de utilizarse; en su lugar, utilice OrderedQuantityFilter.
PriceThresholdFilter
Devuelve artículos de pedido que superan el precio especificado.
ShippingModeFilter
Devuelve artículos de pedido que se envían con la modalidad de envío especificada.

Se pueden insertar filtros personalizados adicionales. Esta cuestión se trata con más detalle en nuevos filtros.

Cadena de filtros
FilterChain es una lista de filtros. Todos los filtros de la cadena se aplican consecutivamente a un LineItemSet de entrada. Un filtro toma como entrada la salida del filtro anterior, y le aplica su propia lógica de filtrado. Una cadena de filtros puede considerarse como un conjunto de filtros conectados lógicamente con "and".
Rango ponderado
WeightedRange especifica un requisito de cantidad. Se utiliza para expresar condiciones relacionadas con la cantidad como: exactamente 5, o al menos 5. Un rango ponderado tiene un limite inferior y un límite superior, y un peso. En la práctica, el peso se establece normalmente en 1.

Cuando el peso se establece en 1, y el límite inferior es igual que el límite superior, entonces este rango ponderado define un concepto de X exactamente, donde X es el valor del límite inferior y el límite superior. Si el límite inferior no es igual que el límite superior, define un requisito de cantidad de "al menos M, pero no más de N", donde M es el valor del límite inferior y N es el valor del límite superior. Si N se establece en ilimitado, entonces el concepto se simplifica a "al menos M, pero tantos como sea posible".

Restricción
Las Restricciones combinan cadenas de filtro y rangos ponderados. Esta combinación define conceptos como el siguiente ejemplo:

Al menos X número de artículos de pedido que satisfagan las condiciones siguientes....

La parte "Al menos X" se expresa utilizando el rango ponderado y la parte "las condiciones siguientes" se expresa utilizando una cadena de filtros. La unidad lógica completa constituye la semántica de una restricción.

Nota: Una restricción puede contener varias Cadenas de filtros. Esta disposición se utiliza para describir una lista homogénea. Este concepto se utiliza pocas veces.
Patrón
Un Patrón es una colección de restricciones o elementos objetivo. Un ejemplo típico de patrón es, "Compre 2 pares de pantalones y 1 jersey y llévese un cinturón con un descuento del 10% de su precio". En este ejemplo, se utilizan tres restricciones: "2 pares de pantalones", "1 jersey" y "1 cinturón".

Todas estas restricciones se consideran elementos "objetivo" porque estos tres elementos objetivos deben estar en el carro de la compra para que se pueda cumplir con el patrón. Cuando se cumple con el patrón, se aplica el ajuste al precio afectado, en este caso, el cinturón.

Si se aplica un patrón a un LineItemSet, el resultado son cero o más patrones coincidentes. Por ejemplo, si un carro de la compra contiene 5 pares de pantalones y 2 jerséis y 3 cinturones, al aplicar el patrón del ejemplo se obtienen 2 coincidencias. Cada coincidencia contiene 2 pares de pantalones, 1 jersey y 1 cinturón. Estos patrones coincidentes son objetivos posibles para promociones.

Filtro de patrones
No todos los patrones se pueden aprobar para las promociones; un PatternFilter es un conjunto de lógica que elimina los patrones coincidentes que no satisfacen las condiciones establecidas en un filtro de patrones. Un filtro de patrones es muy similar a un filtro; sólo se diferencia en la entrada y la salida. La entrada en un filtro de patrones es una lista de LineItemSet y cada conjunto de línea de detalles es un patrón coincidente. La salida es un subconjunto de la lista.
Ajuste
El elemento Adjustments son los incentivos que se ofrecen a los clientes. Se pueden aplicar a uno o varios artículos de pedido del patrón coincidente, o a todo el pedido. Cuando se aplican a los artículos de pedido, se consideran artículos afectados. Los tipos de ajustes disponibles se describen en la vista de un recuadro negro de la arquitectura del motor de promociones.
Función de ajuste
Una AdjustmentFunction está formada por una cadena de filtros y un ajuste. La entrada en una función de ajuste es un patrón coincidente, es decir, un LineItemSet. La función de ajuste primero utiliza la cadena de filtros para localizar un subconjunto de artículos de pedido en el LineItemSet, y luego asigna el ajuste al subconjunto de artículos de pedido.
Bonificación
Una Bonificación es una colección de funciones de ajuste. La entrada de una bonificación es un patrón coincidente, y la bonificación asigna diversos ajustes a diversos subconjuntos del patrón coincidente, llamando a sus funciones de ajuste asociadas.
Opción de bonificación
Debido la complejidad de esta característica, en este momento no se soporta la opción de bonificación. Actualmente, una opción de bonificación contiene una sola bonificación. La entrada para una opción de bonificación también es un patrón coincidente. Una opción de bonificación llama a la bonificación incluida para aplicar ajustes al patrón coincidente.
Distribución
La aplicación de patrones a un pedido da como resultado cero o más patrones coincidentes. La opción de bonificación y sus bloques estructurales asignan ajustes a un único patrón coincidente. La Distribución conecta todos los patrones coincidentes con opciones de bonificación. Una vez encontrados los patrones coincidentes, puede aplicar distribuciones en el gasto total de todos los patrones coincidentes, o en el número total de patrones coincidentes. Cuando se aplica una distribución al gasto total de todos los patrones coincidentes, el sistema define una serie de rangos con límites inferiores y superiores. Si el gasto total está dentro de alguno de los rangos, la opción de bonificación de ese rango se aplica a todos los patrones coincidentes. Esto se denomina cost-based volume distribution. Cuando se aplica una distribución al número total de patrones coincidentes, hay dos resultados posibles. El primer resultado posible es similar al de la distribución de "volúmenes basada en coste". Este caso también define una serie de rangos, cada uno con sus límites inferior y superior. En este caso, los límites inferior y superior definen un número de patrones coincidentes, no el gasto total. Si el número total de patrones coincidentes está dentro de alguno de los rangos, la opción de bonificación de ese rango se aplica a todos los patrones coincidentes. Esto se denomina quantity-based volume distribution. El segundo resultado posible es quantity-based tiered distributions. En este caso, los patrones coincidentes se distribuyen en diferentes rangos, basándose en sus valores de límite inferior y superior, y se aplican opciones de bonificación en estos rangos a los patrones coincidentes que se distribuyen en los rangos. Por ejemplo, en una distribución estratificada basada en cantidad, hay tres rangos definidos, 1 a 3, 4 a 6 y 7 y más. Para cada rango, se define una opción de bonificación, denominada Choice A, B y C. Si el número total de patrones coincidentes es diez, entonces Choice A se aplicará a los tres primeros patrones coincidentes, B a los tres siguientes y C a los cuatro patrones coincidentes restantes.
Condición de compra
Una PurchaseCondition contiene un patrón y una distribución. Una condición de compra intenta identificar patrones y asigna ajustes a los patrones coincidentes.