Codes de remise

Une remise est une réduction de prix offerte aux clients pour promouvoir un achat. Un code de remise est un code de calcul dont l'utilisation de calcul est "remise". Il est utilisé pour calculer les ajustements de l'article de commande. Chaque ligne de la table CALCODE représente un CalculationCode. CalculationCodes représentent des moyens de déterminer les montants monétaires associés à OrderItems. Ils sont utilisés pour calculer les remises, les frais d'expédition, la taxe de vente et la taxe d'expédition. Un CalculationCode joint peut être limité à des TradingAgreements spécifiques.

Deux dimensions sont impliquées dans le fait de joindre un code de réduction à un produit ou à un groupe de produits. D'abord, la remise peut être associée à une ou plusieurs entrées de catalogue et à des groupes de catalogues. L'association d'un code de calcul à un groupe de catalogue a le même effet que lorsqu'on associe directement ce code de calcul à toutes les entrées de catalogue du groupe de catalogue.

Ensuite, les articles de commande sont regroupés pour le calcul d'après l'une des quatre approches suivantes : par accord commercial, par produit, par offre ou par adresse de livraison. Ceci est spécifié par l'attribut groupBy. Un calcul distinct est effectué pour chaque groupe d'objets OrderItem. Si aucun regroupement n'est spécifié, tous les OrderItems associés à un objet CalculationCode particulier sont utilisés pour effectuer un seul calcul. Voici les attributs utilisés pour calculer différents types de remises :

Remises calculées par accord commercial
L'attribut perTradingAgreement signifie que tous les articles de commande d'un groupe doivent avoir le même accord commercial pour que le code de calcul soit appliqué.
Example: Accord commercial 123 ayant un code de réduction associé, donnant lieu à une remise de 10% si plus de 100 $ sont dépensés. En vertu du regroupement perTradingAgreement, si un client dépense 175 $ dans le cadre du contrat 123, alors la remise est de 17,50 $ sur le prix de la commande, ce qui donne un total de 157,50 $ après remise.
Remises calculées par produit
L'attribut perProduct signifie que tous les articles de commande d'un groupe doivent être associés au même produit pour que le code de calcul soit appliqué. (Le produit peut être soit l'entrée de catalogue mère de l'article de catalogue, selon le type de relation PRODUCT_ITEM dans la table de base de données CATRELTYPE (s'il y en a un), soit simplement l'article de catalogue lui-même.)
Example: un code de remise est associé à l'objet CatalogEntry 1 et à l'objet CatalogEntry 2, et le code de remise spécifie une réduction de 15% lorsque plus de 10 sont achetés. Si l'attribut perProduct est true, alors l'achat de 7 CatalogEntry 1 et de 3 CatalogEntry 2 ne donnerait pas droit à la remise de 15%. Une seule quantité CatalogEntry peut être de 10 ou plus pour recevoir la remise. Toutefois, si l'attribut perProduct est false, les deux montants dont le total est de 10 donnent droit à la remise.
Remises calculées par offre
Le regroupement d'attributs perOffer convient aux codes de calcul de taxe.
Example: L'énoncé "pas de taxe sur les chaussures pour enfants à moins de 30 $" fait référence au prix d'une seule paire de chaussures pour enfants. Si plusieurs paires de chaussures pour enfants font partie de la commande, chaque paire dont le prix est inférieur au seuil est libre de taxes. Etant donné que chaque offre représente un prix unitaire différent, les OrderItems sont regroupés par objet Offer pour déterminer les montants des taxes en fonction du prix unitaire.
Remises calculées par adresse de livraison
Bien que normalement utilisé pour le calcul des frais de port, l'attribut perShippingAddress groupBy peut également être utilisé pour regrouper les articles de commande pour les codes de remises en fonction de leurs adresses de livraison.
Example: une remise au niveau de la commande est définie comme "10% de remise sur les achats totalisant 100 $ ou plus avec la même adresse de livraison" et une commande contient quatre articles : article 1 (prix 40 $, adresse de livraison 10), article 2 (prix 50 $, adresse de livraison 10), article 3 (prix 40 $, adresse de livraison 20), et article 4 (prix 60 $, adresse de livraison 20). Etant donné qu'ils ont la même adresse de livraison, les articles de commande 1 et 2 forment un groupe, et les articles 3 et 4 forment un autre groupe. Le calcul de la remise est effectué deux fois, une fois pour chaque groupe. Etant donné que le montant total du premier groupe est inférieur à 100 $, les articles 1 et 2 n'ont pas droit à une remise de 10%. Toutefois, puisque le montant total du deuxième groupe est de 100 $, les articles 3 et 4 ont chacun droit à une remise de 10%. D'autre part, si la valeur d'attribut perShippingAddress groupBy n'était pas spécifiée, les quatre articles auraient droit à la remise, quelles que soient leurs adresses de livraison.

Les produits peuvent bénéficier de plus d'une remise. De même, les groupes de membres peuvent avoir droit à plus d'une remise. Lorsque plusieurs codes de calcul de remise s'appliquent à un objet Order, les calculs de remise sont effectués par ordre croissant des attributs de séquence de leur objet CalculationCode. Cela limite un code de calcul à une utilisation par certains groupes de membres uniquement, tel que défini dans la table CALCODEMGP. Comme pour tous les codes de calcul, plusieurs codes de remise peuvent être associés à chaque produit et les codes de remise peuvent être limités à une utilisation par certains groupes de membres uniquement.