Consider the following scenario:
You create a Product level Promotion and an Order level Promotion. Both are for 10% off. The Order level Promotion is applied with a coupon code whereas the Product level Promotion is not. You notice that when the promotions are applied together, they are not stacked, i.e. the Product level Promotion takes 10% off the item offer price, then the Order level Promotion takes 10% off the order total before the first adjustment is applied.
In this scenario, you want the Order level Promotion to take an additional 10% off after the Product level Promotion has already been applied. However, this does not occur.
The DefaultSequenceBuilder gives precedence to coupons. By default, promotions are evaluated in the following sequence:
2. Promotion code
3. Promotion group (product level, then order level, lastly shipping level)
To change the behavior, you can replace the DefaultSequenceBuilder configuration with the StaticSequenceBuilder which does not prioritize promotions based on Coupon or Promotion code. Here is a document which outlines that configuration:
Configuring the promotion engine for a custom sequence builder
There should not be any performance impact associated with this change, however there is the following APAR to address a known issue:
IV04764: CMVC 211967 - IMPROVE THE SORTING ALGORITHM FOR DETERMINING PROMOTION EVALUATION SEQUENCE
This APAR is included in WebSphere Commerce V7 Fix Pack 5 and higher.