Unified Pricing Management in D365 FO: From Trade Agreements to Margin Adjustments
Pricing in Dynamics 365 Finance and Operations becomes more powerful when you understand how the pricing engine evaluates attributes, trade agreements, base prices,
and margin adjustments together. In this part of the series, we move from core concepts to practical pricing scenarios using Unified Pricing Management.
Who should read this? D365 Finance Functional Consultants, Solution Architects, Pricing Consultants, Business Analysts, and learners exploring Unified Pricing Management in D365 FO.
Creative UPM Pricing Flow
Think of Unified Pricing Management as a pricing engine journey: first it understands the order context, then it finds the right pricing rules, applies the pricing tree, resolves the base or trade agreement price, adjusts the margin, and finally calculates the sales price.
Contents
- Recap from Part 1
- What we cover in Part 2
- Defining Trade Agreement Journals with Pricing Attributes
- Creating a Journal Trade Agreement
- Price Breakdown
- Base Price and Trade Agreement Priority
- Creating a Calculated Base Price in D365 FO
- Margin Component Price Adjustments (MCPA)
- Scenario: Simple MCPA
- MCPA with Tiered Quantity
- Multiple MCPA and Negative MCPA
Recap from Part 1
This Part 1 document introduces Unified Pricing Management in Dynamics 365 Finance and Operations as a centralized pricing framework across products, customers, channels, and order scenarios. It explains key concepts such as pricing attributes, attribute groups, price groups, and price component codes, and shows how they help the pricing engine find the most relevant rule. Later parts will cover base prices, trade agreements, margin adjustments, discounts, charges, and rebates in more detail.
It also summarizes how UPM calculates the final sales price by applying the base price, margin adjustments, discounts, charges, and rebates in sequence. The setup flow covers enabling Pricing Management, creating attributes and attribute groups, defining
price component codes, and building pricing trees. Overall, Part 1 establishes the core concepts and setup logic needed before moving into practical scenarios and deeper configuration.
What we cover in Part 2
In Part 2, we will focus on the following areas:
- Trade agreements with pricing attributes — how header and line attributes help determine the applicable trade agreement price.
- Base price setup — how purchase, sales, and inventory-related pricing inputs contribute to the base price.
- Calculated base price — how the system derives base price using vendor list price and vendor price term adjustments.
- Base price trade agreement priority — when trade agreements override base price and how the pricing tree controls evaluation.
- Margin Component Price Adjustments — how MCPA increases or decreases sales price without changing the base price.
Defining Trade Agreement Journals with Pricing Attributes
Navigation: Pricing Management > Setup > Trade Agreement Prices > Trade Agreement Journal Names
Creating a Journal Trade Agreement
Select the relevant journal and open Trade agreement journals to create a new journal
line. Unlike standard sales price trade agreement journals, this setup can evaluate pricing attributes at both the header level, such as customer and sales order attributes, and the
line level, such as product and sales order line attributes. In this example, the trade
agreement defines two price outcomes: $GGG per piece for UK/India when the color is Lime Green or Rose Pink, up to 10 pieces; and $G00 per piece for the US when the color is Rose Pink, up to 10 pieces.
| Region | Color | Quantity | Price per piece |
| UK / India | Lime green / Rose Pink | Up to 10 pcs | $999 |
| US | Rose Pink | Up to 10 pcs | $900
|
The Preview Customers and Products option show the possible customer and item combinations where the trade agreement can apply. From this list, you can exclude specific customers or products where the agreement should not be valid.
Once the trade agreement lines are posted, they can also be viewed under All Price Groups for the relevant header attribute, provided the price group is selected
With this setup complete, let’s create a sales order and review the Price Breakdown to
confirm which pricing component is applied.
Price Breakdown
Navigation: Sales Order > Line Level > Sales Order Line > View > Price
The first component in the pricing structure, Base Price, is derived from the trade
agreement. Price Breakdown helps confirm which pricing component was applied and why.
Next, we will remove the trade agreement from the pricing tree, prioritize the base price purchase component, and review how the calculated price changes on the sales order.
Changing the pricing tree
Disable the pricing tree and change the pricing component codes on the pricing tree.
Setting Up Base Price – Purchase
Navigation: Pricing Management > pre-sales pricing > Base Price versions
Click on the Base price and select active price tab to view the Base Price
Note: This Base price can also be calculated. This has been explained below.
Navigate back to the same sales order and check if the price is updated
Conclusion: In legacy, the system would always hunt for a trade agreement and fall back to base price automatically. In UPM, nothing is automatic — if it is not in the tree, it does not exist for pricing purposes.
For base price and trade agreement specifically (if both are available on the pricing tree
and trade agreement has a lower sequence), the sequence tells the engine the evaluation order — but the trade agreement always supersedes the base price when found. Think of base price as the fallback and trade agreement as the override.
Where sequence number really matters is when you have multiple components of the same type (e.g., two discount component codes), or when combining discounts, margin adjustments, and charges — that’s where sequence drives the compounding/calculation order.
Creating a Calculated Base Price in D365 FO
1. Define vendor price term codes
Navigation: Pricing management > pre-sales pricing > Vendor price term codes
Vendor price term codes define reusable price adjustment rules that are applied on top of a vendor’s list price to help calculate the item base price.
Each code defines the calculation type, such as amount or percentage, the calculation
basis, such as vendor list price, and the pricing sequence that controls the order in which multiple terms are applied when compounded.
A code has been created for Base Price – Purchase.
Next, let’s apply this code through vendor price term agreements.
1. Vendor price term agreements
Navigation: Pricing management > pre-sales pricing > Vendor price term agreements
Vendor price term agreements record the actual contractual price adjustments you’ve negotiated with a vendor, applied per site and validity period. They keep track of the
contracts you have with vendors for price adjustments for each site — valid periods, vendors, calculation methods, and values are all recorded. Each agreement header specifies the vendor, site, and date range, while the lines refer to a vendor price term code and set its actual percentage or amount value.
The Code created and the percentage for adjustments is defined.
Vendor list price
The vendor list price lets you record the general vendor price catalog and specify a valid date period, kept at the item and inventory dimensions level. It stands for the raw,
unadjusted price a vendor quotes for an item — the starting point before any term-code adjustments (freight, early-payment markups, etc.) are layered on.
For this example, the calculated Base Price – Purchase is derived as: List Price + Adjustment. For item iPhone 16, the calculation is $550 + 10% of $550 = $605.
Navigation: Pricing management > pre-sales pricing > Vendor list price
To generate the calculated sales price based on base price, navigate to Base Price Versions form
The Calculated Base Price can be generated
Note: Manufactured items would instead pull from an active standard cost version
Margin Component Price Adjustments (MCPA)
Margin price adjustments let you move item prices up or down from the base price. They can be associated with various agreements, promotions, and events, letting you adjust prices without touching the base price itself.
A key difference from quantity discounts is that MCPA quantity tiers are evaluated based on item quantity per sales order line, while quantity discount tiers are typically evaluated
based on item quantity per order. We will look at four practical cases:
- Simple MCPA
- MCPA with tiered Quantity
- Multiple MCPA tied to an order
- Negative MCPA
Setting up Pricing component code for MCPA
Navigation: Pricing Management > Setup > Price component codes
Create a new code for MCPA and define the Header and Line price attributes to create a price attribute combination.
If Multiple MCPA needs to be a part of Pricing tree, multiple codes for the Price component Margin Adjustment needs to be created
These codes then need to be a part of pricing tree.
Once these pricing component codes are set, the pricing rules for the same can be created.
Setting up Pricing rules for MCPA
Navigation: Navigate to Pricing management > During-sales pricing > Price adjustments > Margin component price adjustments and create a record
Here’s a rundown of the fields shown on this Margin component price adjustments
record (USMF-000001, “Seasonal Adjustment”):
Header fields
- Margin component adjustment – Unique ID for this rule (USMF-000001)
- Name – Descriptive name (“Seasonal Adjustment”)
- Publish status – Lifecycle state of the rule (Published = active/usable, Draft)
- Validation status – Whether the rule’s setup has passed validation checks (Validated)
General section
- Status – Enabled/Disabled toggle; only Enabled rules are used in price calculations, and a rule must be Disabled before it can be edited
- Currency – The currency this adjustment applies to (USD)
- Concurrency model – How the system handles multiple price adjustments hitting the same price component code (here: “Price attribute combination rank” is used to arrive at the best possible lower value). Other concurrency models available are Exclusive, Best Price and Compounded for Discounts but the model for MCPA is Primarily Price attribute rank combination.
- Quantity tiers – Whether the adjustment varies by quantity breaks (No = flat adjustment regardless of quantity)
- Pricing priority / Override priority – Lets this specific rule override the default priority order for resolving conflicts; toggle is off here so default priority is used
- Price component – The category type of this rule (Margin component — as opposed to Discount)
- Price component code – The specific code this rule feeds into, used to slot it into the price tree/sequence (“Margin Component Code”)
- Price attribute group – The group of customer/product attributes used to filter who this applies to (blank here since Header price attribute group type = All)
- Header price attribute group type – Whether this applies to All customers/Sales order just a defined Group (set to All, hence the note “Include all Header Attributes”)
Details section
- Description – Free text explaining the rule’s purpose
- Disclaimer – Text that can appear as a disclaimer, g., on quotes/invoices
- Text for fiscal receipt – Text printed on fiscal receipts (relevant for retail/POS scenarios)
- Header price attribute detail – Read-only summary of which header attribute values/filters are applied
Calculation section
- Pricing sequence – The rule’s position/order within the price tree (3) — determines when this adjustment is applied relative to base price, other adjustments, and
discounts
- Compound – Whether this adjustment compounds with other margin adjustments (multiplicatively) or applies independently/additively (No = not compounded)
What you can control per line is the Compound checkbox
- Compound = Yes → this adjustment calculates against the running total (base price
+ adjustments already applied)
- Compound = No → this adjustment calculates against the original base price, ignoring any prior adjustment
Validation period section– Would contain the effective from/To dates defining when this pricing rule is valid
Lines grid
- Line group type – Whether this line applies to a specific Group of products (via attributes) or to All products
- Line price attribute group – The attribute group used to filter matching items (here: “Product”)
- Price attribute detail – Read-only summary of the actual attribute filter/values applied (here: Color = Rose Pink)
- Combination rank – The rank assigned to this specific line’s attribute combination, used to resolve concurrency when multiple lines/rules could match the same order line
- Site – Restricts the adjustment to a specific inventory site (blank = all sites)
- Unit – The unit of measure this line’s adjustment applies to (ea. = each)
- Allow unit conversion – Whether the adjustment still applies if the order line uses a different, convertible unit of measure
- Calculation type – Whether the adjustment is a Percentage or a flat Amount
- Percentage – The adjustment value when Calculation type = Percentage (20.00%)
- Amount – The adjustment value when Calculation type = Amount (grayed out here since Percentage is used instead)
Scenario: Simple MCPA
| Scenario | Code | Basis | Calculation | Expected Value |
| Base Price | 1 | Base Price explained above | Fixed Value | $605 |
| Margin component price adjustment | 2 | Base price =603
+ 20% of 605 |
$726 |
MCPA with Tiered Quantity: MCPA can also adjust sales price based on the quantity entered on each sales order line. This is important because the tier is evaluated at the line level, not at the total order level. Quantity tiers are enabled, and adjustments are defined using minimum quantity and percentage values.
Let’s create a sales order and review the price breakdown for each line.
Line 1
| Scenario | Code | Basis | Calculation | Expected Value |
| Base Price | 1 | Base Price explained above | $605*2 | $1210 |
| Margin component price adjustment | 2 | 10% of Base=
$121 |
$1331 |
Line 2
| Scenario | Code | Basis | Calculation | Expected Value |
| Base Price | 1 | Base Price explained above | $605*3 | $1815 |
| Margin component price adjustment | 2 | 5% of $1815 | $1905.75 |
Multiple MCPA
Multiple MCPAs are useful when different margin adjustments must apply together for a specific business scenario or limited period. The setup is like the previous MCPA example, but each margin component price adjustment should have its own component code and corresponding line in the pricing tree.
Note: The customer/product/both attributes should be valid in the MCPA to trigger on the order.
The Pricing Tree
The pricing tree includes two different margin component codes with compounding
enabled. The adjustment calculated from the first code becomes the basis for calculating the second adjustment.
In the sales order, multiple MCPAs are applied based on the pricing rules and margin component codes configured in the pricing tree.
Note: Negative MCPA is also possible when the pricing adjustment rule is configured with a negative amount or percentage.
Note: The unit price cannot be negative.
