Price List Rules
Price list rules provide a mechanism for programmatically deriving prices rather than manually entering every amount. A rule defines a set of transformations — markups, discounts, currency conversions, rounding — that can be applied to source prices to produce derived prices. This is particularly useful when maintaining multiple price lists that share a common base but differ by a percentage margin or currency.
Rule structure
A price list rule is a named container that belongs to a price list and an organisation. Each rule has:
- Type — categorises the rule (e.g. markup, discount, conversion)
- Name — human-readable identifier
- Description — detailed explanation of the rule's purpose
Rules themselves are lightweight headers. The actual pricing logic lives in their rule lines.
Rule lines
Each rule contains one or more rule lines that define specific price transformations.
Sequencing
Rule lines are ordered by a sequence number that determines the order in which lines are evaluated. Fine-grained sequencing allows lines to be inserted between existing lines without renumbering the entire set.
Amount transformations
Each rule line can transform up to three amount fields (mirroring the three amounts on a price record). For each amount, the transformation follows the pattern:
derived_amount = (source_amount × multiplier) + addend
The result is then adjusted according to a configurable rounding rule.
The source for each amount can also be specified — for example, the base price amount or another computed value — giving full flexibility over the transformation pipeline.
Currency conversion
Rule lines include currency conversion support, allowing prices to be converted from one currency to another as part of the transformation. Each conversion specifies:
- Rate type — the type of exchange rate to use (e.g. spot, average)
- Conversion date — the date for which the exchange rate applies
Item targeting
Each rule line can optionally target a specific catalogue item. When no item is specified, the rule line applies to all items. This allows general rules to provide defaults while item-specific lines override them.
Example: deriving a partner price list
Consider a scenario where a "Partner Wholesale" price list is derived from the "Standard Retail" list with a 20% discount:
- Create a price list rule with type "discount"
- Add a rule line with:
- Multiplier of 0.80 (80% of original = 20% discount)
- No addend (no flat adjustment)
- Round-half-up rounding
- No item targeting (applies to all items)
For a specific high-margin item that should receive a deeper 30% discount, add a second rule line with a lower sequence number targeting that item, using a multiplier of 0.70.
The sequencing and item targeting together create a flexible system where general rules provide defaults and item-specific lines override them.
Related topics
- PCM Data Model Overview
- Price Lists and Versions — the lists that rules transform
- Prices and Price Tiers — the source and target of rule calculations