Anatomie des promotions

Une promotion est définie comme une interface avec le moteur de promotion, ce qui signifie que différentes implémentations d'une promotion peuvent être fournies par le développeur qui personnalise le moteur de promotion. Une implémentation par défaut, suivant un modèle basé canevas, est fournie pour l'interface. Cette rubrique explique le modèle.

Chaque promotion individuelle dans HCL Commerce peut être sérialisée sous forme de document XML. Ce document est dénommé XML d'exécution de promotion. Le moteur de promotion analyse et traite le XML d'exécution de promotion lors de l'évaluation des promotions au cours du flux d'achats. Reportez-vous à la rubrique exemple de XML d'exécution de promotion. Reportez-vous également à la rubrique DTD de promotion pour consulter la définition de type de document (DTD) de XML de promotion. Notez que cette DTD est utilisée principalement en tant que référence. Aucune validation vis à vis de cette DTD n'intervient lors de l'exécution du moteur de promotion. De même, cette DTD ne spécifie pas les détails, tels que les filtres et les ajustements, de certains de ses composants. Le contenu des deux éléments est associé à ANY. En effet, ces deux composants sont le plus souvent des composants personnalisés d'une promotion. La définition d'un contenu de modèle rigide ne pourrait que limiter la capacité d'un développeur à personnaliser le système. La rubrique exemple de fragments XML d'ajustements fournit également des illustrations de fragments XML de filtres et d'ajustements. Ceux-ci peuvent être utilisés afin de construire de nouveaux types de promotion.

Attributs de promotion

Clé de promotion
Une promotion est identifiée par une clé, composée d'une référence à un magasin, d'un nom de chaîne, d'un numéro de version et de révision.
Appartenance à un groupe de promotion
Une promotion est rattachée à un et un seul groupe de promotions.
Appartenance à une campagne
Une promotion peut être, facultativement, rattachée à une campagne marketing.
Description
Une promotion peut comporter plusieurs descriptions dans des langues différentes.
Priorité
Une priorité est affectée à chaque promotion. Plus cette priorité est élevée et plus importante est la promotion. Cette priorité constitue l'un des paramètres d'entrée du générateur de séquence de promotion dans le moteur de promotion.
Exclusivité
Une promotion peut être non exclusive, exclusive au sein de son propre groupe ou globalement exclusive.
Etat
Une promotion peut être active, inactive, obsolète, suspendue ou supprimée.
Dernière mise à jour
Dernière mise à jour de la promotion. Cette information est enregistrée dans la promotion.
Dernière mise à jour par
ID de la dernière personne ayant mis à jour la promotion. Cette information est enregistrée dans la promotion.
Limite d'utilisation
Une promotion peut avoir trois différentes limites d'utilisation qui lui sont associées :
Limite par commande
Nombre maximal de fois où une promotion peut être utilisée dans une commande donnée.
Limite par client
Nombre maximal de fois où une promotion peut être utilisée par un client enregistré. Du à la nature des clients occasionnels, cette limite ne s'applique pas à eux.
Limite globale
Nombre global de fois où une promotion peut être utilisée.
Calendrier
Une promotion peut être active pendant une période définie. Cette limite est définie par une date de début et de fin, une liste des jours de la semaine pendant laquelle une promotion sera active et un créneau horaire pendant lequel elle sera active dans la journée.
Bons de réduction
Une promotion peut être désignée comme ciblée, auquel cas si un client fait partie d'un segment de clientèle visé par cette promotion et n'appartient pas à un segment exclu de cette promotion, il est potentiellement éligible pour cette promotion. Inversement, une promotion peut être marquée comme privée, c'est-à-dire qu'un bon de réduction doit être émis à ce client avant qu'il ne soit éligible pour cette promotion.
Code promotionnel
Vous pouvez affecter un ou plusieurs codes de promotion à une promotion. Une application de code de promotion simple est fournie par défaut. Cette application ne prend en charge qu'une seule affectation de code par promotion. Si la promotion est marquée comme nécessitant un code promotion, celui-ci doit être saisi par le client avant que son éligibilité ne soit étudiée. Ce code est enregistré sous l'attribut PromotionCodeCue de la promotion. La valeur de l'attribut booléen PromotionCodeRequired détermine si la promotion nécessite un code ou non.

L'application de code de promotion personnalisé constitue un sujet particulièrement important qui est couvert dans la rubrique personnalisation du gestionnaire de code promotion.

Condition de ciblage
Une promotion peut être marquée de sorte à cibler certains segments de clientèle et à en exclure d'autres. Si aucun segment de clientèle n'est spécifié, elle est accessible à tous les clients. Deux autres attributs booléens régissent l'application d'une condition TargetingCondition associée à une promotion. Le premier indique au moteur de promotion si la condition de ciblage doit être évaluée lors de l'évaluation de la promotion. Si sa valeur est définie à 'false', cette condition est ignorée lors de l'évaluation de la promotion. Le second attribut, SkipTargetingConditionOnProperPromotionCodeEntered, oriente le moteur de promotion dans les situations où le code de promotion correct a été saisi mais où la promotion comporte également une condition qui lui est associée. Si sa valeur est définie à 'true', la condition de ciblage est ignorée lorsqu'un code promotion correct est saisi pour la promotion.
Conditions personnalisées
Vous pouvez spécifier des conditions personnalisées supplémentaires dans une promotion. L'unique résultat renvoyé par une condition personnalisée est une valeur booléenne indiquant si la condition est remplie ou non. Dans la négative, la promotion n'est pas appliquée. Toutes les conditions personnalisées doivent implémenter l'interface Condition. Cet aspect est couvert plus en détail dans la rubrique nouvelles conditions.

Condition d'achat

Le diagramme suivant présente les blocs constitutifs d'une condition d'achat, laquelle est le pilier d'une promotion. Une condition d'achat définit les achats devant être effectués par un client pour se qualifier pour une promotion. La condition d'achat constitue une condition, c'est-à-dire qu'elle implémente l'interface Condition. Tous les blocs constitutifs dans le diagramme implémentent l'interface XMLizable de sorte qu'ils peuvent être sérialisés dans un élément XML et désérialisés dans celui-ci. Le fragment XML sérialisé d'une condition d'achat devient partie du document XML d'une promotion.

image à insérer ici

La section ci-dessous traite des blocs constitutifs individuels.

Filtre
Un filtre est un ensemble de logique métier appliqué à un élément LineItemSet et qui débouche sur un second élément LineItemSet constituant un sous-ensemble du premier. Par exemple, un filtre peut renvoyer tous les articles de commande inclus dans l'ensemble d'articles en ligne d'origine et appartenant à la catégorie "Sweaters" (Pulls). Un ensemble de filtres standard est fourni. Il est composé des filtres suivants :
DummyFilter
Dépourvu d'effet. Renvoie l'élément LineItemSet original.
CategoryFilter
Renvoie tous les articles de commandes appartenant aux catégories ciblées, hormis celles exclues.
ManufacturerFilter
Renvoie tous les articles de commandes correspondant au fabricant ciblé spécifié.
MultiSKUFilter
Renvoie tous les articles de commande dont la SKU de l'article, ou de son produit parent, figure dans la liste ciblée mais non pas dans la liste d'exclusion.
OrderedQuantityFilter
Renvoie les articles de commandes se conformant à des contraintes quant à leur quantité, comme "jusqu'à 5 articles" ou "au moins 2 articles".
PriceComparisonFilter
Ce filtre est maintenant obsolète ; utilisez à la place OrderedQuantityFilter.
PriceThresholdFilter
Renvoie les articles de commandes dépassant le prix spécifié.
ShippingModeFilter
Renvoie les articles de commandes expédiés via le mode de livraison spécifié.

D'autres filtres personnalisés peuvent être intégrés. Cet aspect est couvert plus en détail dans la rubrique nouveaux filtres.

Chaîne de filtres
Un élément FilterChain désigne une liste de filtres. Tous les filtres de la chaîne sont appliqués successivement sur l'élément LineItemSet en entrée. Un filtre reçoit en entrée la sortie du filtre précédent et lui applique sa propre logique de filtrage. Une chaîne de filtrage peut être considérée comme un ensemble de filtres connectés logiquement avec "et".
Plage mesurée
Le filtre WeightedRange spécifie une exigence portant sur la quantité. Il permet d'exprimer des conditions portant sur la quantité, par exemple : exactement 5, ou : au moins 5. Cette plage mesurée comporte une limite inférieure, une limite supérieure et un poids. En pratique, le poids est généralement défini à 1.

Lorsque le poids est défini à 1 et que la limite inférieure est identique à la limite supérieure, cette plage mesurée correspond à la valeur 'exactement X' où X représente à la fois la limite inférieure et la limite supérieure. Si la limite inférieure est différente de la limite supérieure, elle définit une exigence de quantité "au moins M, mais pas plus de N", où M représente la valeur de la limite inférieure et N, la valeur de la limite supérieure. Si N est défini sur une valeur illimitée, le concept est simplifié en : "au moins M, mais autant que possible ."

Contrainte
Les contraintes combinent des chaînes de filtres avec des plages mesurées. Cette combinaison définit des concepts comme l'exemple suivant :

Au moins X articles de commande répondant aux conditions suivantes...

La partie "Au moins X" est exprimée à l'aide de la plage mesurée et les "conditions suivantes" à l'aide d'une chaîne de filtres. L'unité logique complète compose la sémantique d'une contrainte.

Remarque : Une contrainte peut contenir plusieurs éléments FilterChains. Cet arrangement est utilisé pour décrire une liste homogène. Ce concept est rarement utilisé.
Modèle
Un modèle est une collection de contraintes ou d'articles ciblés. Voici un exemple de modèle standard : 'Pour l'achat de 2 pantalons et d'1 pull, bénéficiez d'1 ceinture à moins 10 %". Dans cet exemple, trois contraintes sont utilisées : "2 pantalons", "1 pull" et "1 ceinture".

Ces trois contraintes constituent des articles "ciblés" puisque le chariot doit contenir ces trois articles avant que le pattern ne soit respecté. Une fois le pattern respecté, l'ajustement est appliqué à l'article concerné, la ceinture.

L'application d'un modèle à LineItemSet débouche sur zéro ou plusieurs modèles correspondants. Par exemple, si un chariot contient 5 pantalons, 2 chandails et 3 ceintures, l'application de cet exemple de pattern produirait 2 correspondances. Chaque correspondance contient 2 pantalons, 1 chandail et 1 ceinture. Ces correspondances sont des cibles éligibles pour les promotions.

Filtre de pattern
Tous les patterns ne se qualifient pas pour des promotions ; un PatternFilter est un ensemble de logique éliminant les patterns concordant, mais ne répondant pas aux conditions énoncées dans un filtre de pattern. Un filtre de pattern est fort similaire à un filtre ordinaire ; il ne s'en différencie que par ses données d'entrée et de sortie. Les données en entrée d'un filtre de pattern sont composées d'une liste de LineItemSets, dont chaque élément représente un pattern concordant. La sortie est composée d'un sous-ensemble de la liste.
Ajustement
Les ajustements sont des incitations à l'achat offertes aux clients. Ils peuvent s'appliquer à un ou plusieurs articles de commande du pattern concordant ou à toute la commande. Lorsqu'ils sont appliqués à des articles, ceux-ci sont dénommés articles affectés. Les types d'ajustement disponibles sont couverts dans la rubrique Vue boîte noire de l'architecture du moteur de promotion.
Fonction d'ajustement
Une fonction d'ajustement est composée d'une chaîne de filtres et d'un ajustement. L'entrée d'une fonction d'ajustement est un pattern concordant, c'est-à-dire un LineItemSet. La fonction d'ajustement utilise tout d'abord la chaîne de filtres pour identifier un sous-ensemble d'articles de commande dans l'élément LineItemSet, puis rattache l'ajustement à ce sous-ensemble.
Reward
Une récompense est une collection de fonctions d'ajustement. Les données d'entrée d'une récompense proviennent d'un pattern concordant et la récompense rattache divers ajustements à certains sous-ensembles du pattern concordant en appelant ses fonctions d'ajustement de membre.
Choix de récompense
En raison de la complexité de cette fonctionnalité, le choix de récompense n'est pas pris en charge à l'heure actuelle. Actuellement, un choix de récompense ne peut contenir qu'une seule récompense. L'entrée d'un choix de récompense est également un pattern concordant. Le choix de récompense appelle la récompense concernée de sorte à appliquer des ajustements au pattern concordant.
Distribution
L'application de patterns à une commande débouche sur zéro ou plus patterns concordants. Le choix de récompense et ses blocs constitutifs associent des ajustements à un pattern concordant unique. La distribution connecte tous les patterns concordants avec des choix de récompenses. Une fois les patterns concordants identifiés, vous pouvez appliquer des distributions sur les dépenses totales dans tous les patterns concordants ou sur le nombre total de patterns concordants. Lorsqu'une distribution est appliquée aux dépenses totales dans tous les patterns concordants, le système définit plusieurs plages avec des limites supérieures et inférieures. Si la dépense totale est comprise dans l'une de ces plages, le choix de récompense correspondant à cette plage est appliqué à tous les patterns concordants. C'est ce qu'on appelle un cost-based volume distribution. Lorsqu'une distribution est appliquée au nombre total de patterns concordants, deux résultats sont possibles. Le premier résultat possible est similaire à celui d'une distribution par volume basée coût. Ce scénario définit également un certain nombre de plages, chacune avec sa limite supérieure et inférieure. Dans ce cas, les limites supérieures et inférieures définissent un nombre de patterns concordants et non pas une dépense totale. Si le nombre total de patterns correspondants est compris dans l'une de ces plages, le choix de récompense est appliqué à tous ces patterns. C'est ce qu'on appelle l'quantity-based volume distribution. Le deuxième résultat possible est le quantity-based tiered distributions. Dans ce cas, les patterns correspondants sont répartis entre plusieurs plages, en fonction des valeurs de leurs limites inférieure et supérieure, et appliquent les choix de récompense à ces patterns en fonction de leur plage. Une distribution par niveau basée quantité pourrait, par exemple, comprendre trois plages définies : 1 à 3, 4 à 6 et 7 et au delà. Pour chaque plage, un choix de récompense est défini sous les noms A, B et C. Si le nombre total de patterns correspondants est de dix, le choix A sera appliqué aux trois premiers patterns, le choix B aux trois suivants et le choix C aux quatre restants.
Condition d'achat
Une condition d'achat comprend un modèle et une distribution. Une condition d'achat tente d'identifier des patterns et associe des ajustements aux patterns concordants.