B2B Commerce
B2B Distribution Pricing: Build Explainable and Auditable Rules
A method for ordering contract prices, customer prices, volume tiers, and promotions without unpredictable stacking or constant manual correction.

Decision supported
A reliable B2B pricing engine must produce one explainable result for a given customer, item, unit, quantity, and date. Write the precedence between contract, customer agreement, campaign, volume, segment, and base tariff; name stackable adjustments; check margin before approval; and freeze the result and rationale on the order.
Executive summary
- Write precedence before configuring discounts and price lists.
- Distinguish a price replacement from an adjustment allowed to stack.
- Version effective dates and prevent contradictory periods on the same scope.
- Retain price, currency, unit, winning rule, adjustments, and approver on every order line.
Treat precedence as a core business rule
The hard problem is not calculating ten per cent. It is deciding what wins when a contracted customer orders campaign volume through a specific channel. Without precedence, identical situations produce different prices.
Odoo and Oracle document customer, quantity, period, geography, currency, matrix, and effective-date capabilities. The company must still decide its own precedence policy.
Verified capabilities
Reference platforms support multiple price dimensions and priorities. Their features do not decide which company rules should win or stack.
Adopt a reference hierarchy and document exceptions
This Atlas hierarchy is a recommendation, not a universal standard. It protects contractual commitments first; a campaign overrides a contract only when the contract permits it.
| Priority | Rule type | Expected decision |
|---|---|---|
| 1 | Explicit contract price | Overrides lower levels for the contract scope and term |
| 2 | Negotiated customer or group price | Overrides campaign, volume, and segment unless stacking is allowed |
| 3 | Active eligible campaign | Overrides the lower level or adds a named adjustment |
| 4 | Volume tier | Selects a price or adjustment by quantity and unit |
| 5 | Segment, channel, or area tariff | Applies the relevant market policy |
| 6 | Base tariff | Provides a result when no higher rule matches |
Decision to ratify
Sales, finance, and operations must approve the hierarchy together. Software executes policy; it cannot resolve a contradictory policy.
Separate price replacement from stackable adjustments
Every rule declares its effect: a fixed price replaces the base, a discount reduces a selected price, and logistics fees may be added. Without this model, configuration order creates unexplained margin loss.
| Effect | Example | Required control |
|---|---|---|
| Replacement | Contract price of DZD 1,200 | One winning rule per level |
| Discount | Five per cent above a volume | Calculation base and stacking permission |
| Surcharge | Special packaging | Reason and affected unit |
| Fee | Urgent delivery | Separate display and defined tax treatment |
| Floor | Minimum margin | Block or approve before confirmation |
Version periods and decisions
A price rule has a start date, optional end date, status, and author. Detect overlapping periods on the same scope and resolve them before activation.
The order price is a snapshot. Keep calculated price, currency, unit, tax rate, winning rule, and adjustments. Repricing happens only after an explicit order change and creates a new audit event.
Controlled effective dates
Oracle documents effective dates and overlap controls; Odoo documents validity periods and minimum quantities.
Put margin control and approval in the flow
The engine must explain the proposed amount and route results outside policy. Compare net price with the finance-approved reference cost without exposing that cost to the customer.
- Assign a business owner to every rule family.
- Apply dual control to sensitive contracts and exceptions.
- Set approval thresholds by margin, amount, or customer type.
- Require a structured reason for every manual override.
- Log old value, new value, author, approver, and time.
- Reconcile ordered, delivered, invoiced, and collected prices.
Operational control
Manual price changes are useful only when the reason, approval threshold, and order audit trail are retained.
Test policy with an expected-results matrix
Sales and finance should define expected cases covering quantity boundaries, date changes, and rule conflicts. Keep them as regression tests before each tariff change.
| Case | Question to verify |
|---|---|
| Just below and at a volume tier | Does the change occur at the correct unit? |
| Campaign start and end | Are time zone and effective instant correct? |
| Contract customer during promotion | Does the contract-approved rule win? |
| Two rules at one priority | Is ambiguity blocked before activation? |
| Change after confirmation | Are a new version and approval created? |
| Missing reference cost | Does margin control fail visibly? |
Choose standard features, configuration, or targeted development
Use standard price lists when company dimensions and approvals fit the product model; extended configuration for deterministic rules needing specific roles or integrations; targeted development when pricing encodes a real advantage that standard software cannot express cleanly.
Decide from policy coherence, change frequency, auditability, order and stock integration, and the cost of maintaining custom logic—not from the number of existing spreadsheets.
Decision position
Make policy explicit first. Automate its stable core and isolate rare exceptions instead of turning every historical negotiation into a permanent rule.
Decisions to make now
Recommended actions
- 01Inventory current price sources and identify the authority.
- 02Have sales, finance, and operations approve precedence.
- 03Classify every rule as replacement, discount, surcharge, fee, or floor.
- 04Define effective dates, versions, margin thresholds, and exception approval.
- 05Build expected cases before ERP migration or integration.
Watch points
- Different prices for the same situation by entry order or user.
- Discounts stacking without an explicit calculation base.
- A tariff change silently repricing confirmed orders.
- Margin control using missing, stale, or mismatched-unit cost.
Frequently asked questions
Is one price list needed per customer?
Only when policy requires it. A few rules by segment, contract, or condition may be more governable than hundreds of copied lists.
Should promotions stack with contract prices?
There is no universal technical answer. The contract and commercial policy must decide, and the engine must apply that decision consistently.
Why freeze price on the order?
To preserve the commitment, explain the invoice, and audit variances. Later changes must be explicit, versioned, and approved.
Sources and verification
Last editorial verification: 29 August 2026. Links point to the source texts, authorities, and reference guides consulted.
- 01Pricelists
Odoo 19.0 Documentation. Accessed 29 August 2026.
- 02Prices and pricelist priority
Odoo 19.0 Documentation. Accessed 29 August 2026.
- 03Siebel Pricing Administration Guide
Oracle. Accessed 29 August 2026.
Related decisions
Continue with briefs that share the same operational, technical, or governance context.
B2B Commerce
B2B Orders on WhatsApp: From Messages to a Controlled Workflow
Read the briefField Operations
Offline-First Field Software: A Decision Protocol for Reliable Operations
Read the briefCybersecurity
What Algeria's 2025-2029 Cybersecurity Strategy Means for Businesses
Read the briefPractical application
Explore Atlas B2B, our multi-tenant wholesale platform.
See how one product connects catalogues, customer pricing, orders, stock, fulfilment, and governance.