# Freight Controls in Dynamics 365 Business Central

> What freight and 3PL invoice controls Dynamics 365 Business Central actually enforces, and the contract terms three-way matching cannot see.

Source: https://valuexpa.com/insights/freight-and-3pl-controls-in-dynamics-365-business-central
Publisher: ValueXPA (https://valuexpa.com)
Updated: 2026-09-07

---

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. In freight and 3PL, that gap forms in the shortest possible distance: a fuel surcharge that does not track its index, an accessorial fee applied outside its contracted trigger, a volume tier discount that quietly stops applying.

Dynamics 365 Business Central runs the purchasing controls it was built for on every freight invoice it processes. This page names exactly which checks those are, and which parts of a freight contract they were never designed to see.

## Executive Summary

Dynamics 365 Business Central enforces freight controls the way it enforces every other purchase: against a purchase order and a receipt. It matches invoiced quantities and unit prices to what was ordered and received, and it can hold an invoice at posting if those do not reconcile. That control was built for goods, not for freight billing, where the "line" is a shipment and the price depends on a rate table, a fuel surcharge index, and an accessorial schedule that lives in the carrier contract, not in Business Central.

The mechanism gap is specific: three-way matching checks price against a purchase order line, not against the rate card the carrier actually agreed to. It has no native construct for a fuel surcharge that should decline as diesel or freight PPI moves, and no field that expires a discount tier or an accessorial waiver on a set date. A freight invoice can match its own purchase order perfectly and still be wrong against the contract, because the purchase order was built from the same assumption the invoice is testing.

What changes it is separating the two questions Business Central was never designed to ask together: does this invoice match what we ordered, and does this invoice match what we contracted. The first is native. The second requires the contract terms encoded outside the ERP and checked against every line, not just the ones a clerk flags for review.

## 1. What does Business Central actually check on a freight invoice?

**Business Central applies three-way matching: it compares the invoice to its linked purchase order and to the associated receipt, checking quantity and unit price for variance within configured tolerances. If the invoice diverges beyond tolerance, Business Central can block posting and route it to an approval workflow. This confirms the invoice agrees with what was ordered and received. It does not confirm the order itself, or the rate on it, reflects the carrier's current contract terms, because the purchase order.**

The purchase order in Business Central is typically built by a planner or logistics coordinator entering an expected freight cost, sometimes copied forward from the last shipment on that lane. Three-way matching then checks the invoice against that number. If the number was already wrong, the invoice can match it exactly and post clean.

This is a structural feature of matching against an internal document rather than an external contract. Business Central has no native object representing a carrier's rate card, fuel surcharge table, or accessorial schedule. Those live in a PDF or an Excel workbook the carrier sent at contract signing, outside any system Business Central reads.

For freight specifically, the purchase order is often generated after the shipment moves, once a rate is known, which reduces three-way matching's function on this category to confirming the invoice matches a number entered from the invoice itself. That is not a matching failure. It is the control operating exactly as designed, on a category it was not designed for.

## 2. Can Business Central catch a fuel surcharge that stopped tracking its index?

**No. Business Central has no field or workflow that ties a surcharge line to an external fuel index and recalculates the expected value on each invoice. It posts whatever surcharge amount or percentage appears on the line, checked only against the purchase order's own surcharge assumption, not against a moving index. A surcharge that should decline as diesel prices ease has nothing in Business Central testing whether it actually did.**

Carrier contracts typically peg a fuel surcharge to a published index, often a diesel price or a similar external benchmark, stepping the surcharge percentage up or down on a schedule as the index moves. That relationship is contractual logic, not transactional data, and Business Central has no object type built to hold it.

Fuel and freight input costs move enough to make this a live question rather than a theoretical one. The Producer Price Index for gasoline (BLS series WPU0571, read September 6, 2026) stood at 302.759 in July 2026, up 37.1% year over year. The Producer Price Index for truck transportation of freight (BLS series WPU3012, same read date) stood at 170.984, up 10.9% year over year over the same period.

When the index underlying a surcharge clause moves that much, whether the surcharge on an invoice tracked it correctly is a real question with a real answer, and Business Central's matching logic does not ask it. The invoice posts against the purchase order's surcharge line regardless of what the index did.

## 3. Does three-way matching catch an accessorial charge applied outside its contract terms?

**Three-way matching checks that an accessorial line exists and its price sits within tolerance of the purchase order, not whether the accessorial's trigger condition was actually met. A liftgate fee, detention charge, or residential delivery surcharge can post cleanly through Business Central as long as it matches what was keyed onto the order, whether or not the shipment conditions in the carrier's tariff actually justified the charge.**

An accessorial charge is contractually conditional: a liftgate fee applies only if a liftgate was requested, a detention charge only past a free window, a residential surcharge only at a residential address. Business Central's purchasing module has no field recording any of those conditions against the shipment.

Because the order and the invoice are frequently populated from the same source data, an accessorial charge that was never contractually triggered can still match its own purchase order exactly, and clear matching without any variance flag being raised.

### A. What the control tests

Quantity, unit price, and line total against a purchase order and receipt. This is a match of documents inside Business Central against each other.

### B. What the contract requires

A condition external to any of those documents: did the delivery location qualify as residential, did the driver wait beyond the free detention window, was a liftgate actually requested. None of that is captured as structured data anywhere in Business Central's purchasing module.

## 4. What does Business Central's approval workflow do, and where does its coverage stop?

**Business Central's approval workflows route documents for sign-off based on configured conditions, commonly a dollar threshold, a vendor, or a variance flagged by three-way matching. This directs human attention to invoices that already look anomalous by the system's own tolerance settings. It does not evaluate whether a rate, surcharge, or accessorial charge is contractually correct, because that judgment requires the contract terms as a reference, which the workflow engine does not hold.**

An approver reviewing a routed freight invoice in Business Central sees the invoice, the purchase order, and the variance that triggered the route. They do not see the carrier's rate card, the fuel surcharge schedule, or the accessorial tariff, because none of those documents live in the system being reviewed.

This means an approver correctly waves through an invoice that matches its purchase order within tolerance and is nonetheless wrong against contract terms neither the workflow nor the approver's screen ever surfaced. The approval step confirms internal consistency, not contract compliance.

Where the reader has volume data available, the arithmetic to size this is straightforward: take the freight spend routed through invoices with no linked contract-term check, multiply by the share of lines carrying a surcharge, accessorial, or tiered rate, and that is the population of invoices where correctness depends entirely on whether the original purchase order number was right.

## 5. Which freight contract terms fall outside anything Business Central enforces?

**Volume tier discounts, minimum revenue commitments, fuel surcharge index pegs, accessorial trigger conditions, and rate card expirations are contract mechanics that live outside Business Central's data model entirely. Business Central has no object representing a carrier contract as a set of rules; it has purchase orders, item ledger entries, and vendor records. Anything that depends on interpreting an unstructured contract document sits outside what the purchasing module was built to check.**

These terms share a trait: each requires comparing a live transaction against a rule written in prose or a table in a separate document, not against another transaction inside Business Central. That comparison is the piece the purchasing module has no mechanism for.

- **Volume tier discounts:** A rate that should step down once shipment volume crosses a threshold has no mechanism in Business Central tracking cumulative volume against that threshold.

- **Minimum commitments:** A minimum revenue commitment clause obligates a true-up at period end that nothing in the purchasing module calculates or flags.

- **Rate card expirations:** Contract rate cards renew or expire on dates outside any field Business Central tracks against the vendor record.

- **Accessorial trigger conditions:** Whether a fee's contractual condition was met is a fact about the shipment, not about the purchase order, and Business Central holds only the latter.

## 6. How should a freight team close the gap between matching and contract compliance?

**Business Central's matching should stay in place; it is the right control for its job. Closing the gap means encoding the carrier contract, rate card, surcharge index peg, and accessorial schedule as rules checked against every invoice line independently of the purchase order, since the purchase order is often the same source the invoice needs to be tested against, not a reliable reference for it.**

The practical distinction is which document is the reference. Three-way matching references the purchase order. A contract compliance check references the carrier agreement itself, rewritten as a set of testable rules: this surcharge percentage at this index level, this accessorial only under this condition, this rate only above this volume.

Building that second layer inside Business Central is possible in principle but means re-entering the entire contract as structured data the ERP was not designed to hold, then maintaining it every time a contract renews or an index updates. Most freight teams instead run this check as a separate exercise: extracting invoice-level detail from Business Central and testing it against contract terms held elsewhere.

[A diagnostic](/guides/diagnostic-or-software-what-to-buy-first) answers the different question of where the biggest gaps sit today, without requiring the contract terms to already be encoded anywhere.

For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [build vs. buy: can you do contract-to-invoice matching in excel?](/guides/build-vs-buy-can-you-do-contract-to-invoice-matching-in) and [margin drift diagnostic for infor cloudsuite syteline](/guides/for-infor-syteline).

## 7. Frequently Asked Questions (People Also Ask)

### Does Business Central natively support freight rate cards?

No. Business Central has no object type representing a carrier's rate card, fuel surcharge schedule, or accessorial tariff. Freight pricing exists in Business Central only as the price entered on a purchase order line, which is a number a person typed, not a rule the system checks against a contract.

### Will three-way matching catch a duplicate freight invoice?

Three-way matching is built to catch quantity and price variance against a purchase order and receipt, not duplicate detection specifically, though a duplicate invoice referencing the same order can surface if the order was already fully invoiced. A duplicate carrying a slightly different invoice number or amount can still pass.

### Can Business Central flag a fuel surcharge that no longer matches the index it is pegged to?

No. Business Central has no field linking a surcharge line to an external index value, so it cannot compute what the surcharge should be this month and compare it to what was billed. It only checks the surcharge line against the purchase order's own assumption.

### Does the approval workflow in Business Central review contract terms?

No. The approval workflow routes invoices based on configured conditions like dollar thresholds or matching variance. The approver sees the invoice and purchase order, not the carrier contract, so the review confirms internal consistency, not contract compliance.

### Is a purchase order a reliable reference for freight pricing accuracy?

Not on its own. Freight purchase orders are frequently built from an expected cost entered by a planner, sometimes after the shipment has already moved. If that entered figure is wrong, matching the invoice to it confirms consistency, not correctness against the carrier contract.

### How do fuel and freight cost trends affect surcharge review?

Per the Producer Price Index for gasoline (BLS series WPU0571, read September 6, 2026), the index rose 37.1% year over year to 302.759 in July 2026. Per the Producer Price Index for truck transportation of freight (BLS series WPU3012, same read date), the index rose 10.9% to 170.984. Contract surcharges pegged to indices like these need to move accordingly, and Business Central does not test whether they did.

### What is margin drift in the context of a freight invoice?

Margin drift is the gap between what a vendor contract says and what the invoice actually charges. In freight, this appears as a surcharge that outlived its index trigger, an accessorial fee applied without its qualifying condition, or a volume discount that stopped applying after a threshold was reached.

### Should a manufacturer replace Business Central's purchasing controls to fix this?

No. Three-way matching correctly does what it was designed to do and should stay in place. The gap is closed by adding a separate check of invoice terms against the carrier contract, not by replacing the purchasing module's existing controls.

### Can this gap be tested without new software?

Yes, as a manual exercise: pull invoice-level freight detail from Business Central and test a sample against the carrier's rate card and surcharge schedule directly. Whether that is worth automating at scale is a separate build-versus-buy question.

### Is contract complexity quietly draining your operating margin?

A small systematic drift between your negotiated contracts and your actual vendor billing compounds quietly across a year of invoices. Stop guessing at your exposure and run a targeted audit.

**[Take the Free Screener → https://valuexpa.com/margin-drift-screener](https://valuexpa.com/margin-drift-screener)**

## Executive Summary

Dynamics 365 Business Central enforces freight controls the way it enforces every other purchase: against a purchase order and a receipt. It matches invoiced quantities and unit prices to what was ordered and received, and it can hold an invoice at posting if those do not reconcile. That control was built for goods, not for freight billing, where the "line" is a shipment and the price depends on a rate table, a fuel surcharge index, and an accessorial schedule that lives in the carrier contract, not in Business Central. The mechanism gap is specific: three-way matching checks price against a purchase order line, not against the rate card the carrier actually agreed to. It has no native construct for a fuel surcharge that should decline as diesel or freight PPI moves, and no field that expires a discount tier or an accessorial waiver on a set date. A freight invoice can match its own purchase order perfectly and still be wrong against the contract, because the purchase order was built from the same assumption the invoice is testing. What changes it is separating the two questions Business Central was never designed to ask together: does this invoice match what we ordered, and does this invoice match what we contracted. The first is native. The second requires the contract terms encoded outside the ERP and checked against every line, not just the ones a clerk flags for review.

## 1. What does Business Central actually check on a freight invoice?

Business Central applies three-way matching: it compares the invoice to its linked purchase order and to the associated receipt, checking quantity and unit price for variance within configured tolerances. If the invoice diverges beyond tolerance, Business Central can block posting and route it to an approval workflow. This confirms the invoice agrees with what was ordered and received. It does not confirm the order itself, or the rate on it, reflects the carrier's current contract terms, because the purchase order. The purchase order in Business Central is typically built by a planner or logistics coordinator entering an expected freight cost, sometimes copied forward from the last shipment on that lane. Three-way matching then checks the invoice against that number. If the number was already wrong, the invoice can match it exactly and post clean. This is a structural feature of matching against an internal document rather than an external contract. Business Central has no native object representing a carrier's rate card, fuel surcharge table, or accessorial schedule. Those live in a PDF or an Excel workbook the carrier sent at contract signing, outside any system Business Central reads. For freight specifically, the purchase order is often generated after the shipment moves, once a rate is known, which reduces three-way matching's function on this category to confirming the invoice matches a number entered from the invoice itself. That is not a matching failure. It is the control operating exactly as designed, on a category it was not designed for.

## 2. Can Business Central catch a fuel surcharge that stopped tracking its index?

No. Business Central has no field or workflow that ties a surcharge line to an external fuel index and recalculates the expected value on each invoice. It posts whatever surcharge amount or percentage appears on the line, checked only against the purchase order's own surcharge assumption, not against a moving index. A surcharge that should decline as diesel prices ease has nothing in Business Central testing whether it actually did. Carrier contracts typically peg a fuel surcharge to a published index, often a diesel price or a similar external benchmark, stepping the surcharge percentage up or down on a schedule as the index moves. That relationship is contractual logic, not transactional data, and Business Central has no object type built to hold it. Fuel and freight input costs move enough to make this a live question rather than a theoretical one. The Producer Price Index for gasoline (BLS series WPU0571, read September 6, 2026) stood at 302.759 in July 2026, up 37.1% year over year. The Producer Price Index for truck transportation of freight (BLS series WPU3012, same read date) stood at 170.984, up 10.9% year over year over the same period. When the index underlying a surcharge clause moves that much, whether the surcharge on an invoice tracked it correctly is a real question with a real answer, and Business Central's matching logic does not ask it. The invoice posts against the purchase order's surcharge line regardless of what the index did.

## 3. Does three-way matching catch an accessorial charge applied outside its contract terms?

Three-way matching checks that an accessorial line exists and its price sits within tolerance of the purchase order, not whether the accessorial's trigger condition was actually met. A liftgate fee, detention charge, or residential delivery surcharge can post cleanly through Business Central as long as it matches what was keyed onto the order, whether or not the shipment conditions in the carrier's tariff actually justified the charge. An accessorial charge is contractually conditional: a liftgate fee applies only if a liftgate was requested, a detention charge only past a free window, a residential surcharge only at a residential address. Business Central's purchasing module has no field recording any of those conditions against the shipment. Because the order and the invoice are frequently populated from the same source data, an accessorial charge that was never contractually triggered can still match its own purchase order exactly, and clear matching without any variance flag being raised. ### A. What the control tests Quantity, unit price, and line total against a purchase order and receipt. This is a match of documents inside Business Central against each other. ### B. What the contract requires A condition external to any of those documents: did the delivery location qualify as residential, did the driver wait beyond the free detention window, was a liftgate actually requested. None of that is captured as structured data anywhere in Business Central's purchasing module.

## 4. What does Business Central's approval workflow do, and where does its coverage stop?

Business Central's approval workflows route documents for sign-off based on configured conditions, commonly a dollar threshold, a vendor, or a variance flagged by three-way matching. This directs human attention to invoices that already look anomalous by the system's own tolerance settings. It does not evaluate whether a rate, surcharge, or accessorial charge is contractually correct, because that judgment requires the contract terms as a reference, which the workflow engine does not hold. An approver reviewing a routed freight invoice in Business Central sees the invoice, the purchase order, and the variance that triggered the route. They do not see the carrier's rate card, the fuel surcharge schedule, or the accessorial tariff, because none of those documents live in the system being reviewed. This means an approver correctly waves through an invoice that matches its purchase order within tolerance and is nonetheless wrong against contract terms neither the workflow nor the approver's screen ever surfaced. The approval step confirms internal consistency, not contract compliance. Where the reader has volume data available, the arithmetic to size this is straightforward: take the freight spend routed through invoices with no linked contract-term check, multiply by the share of lines carrying a surcharge, accessorial, or tiered rate, and that is the population of invoices where correctness depends entirely on whether the original purchase order number was right.

## 5. Which freight contract terms fall outside anything Business Central enforces?

Volume tier discounts, minimum revenue commitments, fuel surcharge index pegs, accessorial trigger conditions, and rate card expirations are contract mechanics that live outside Business Central's data model entirely. Business Central has no object representing a carrier contract as a set of rules; it has purchase orders, item ledger entries, and vendor records. Anything that depends on interpreting an unstructured contract document sits outside what the purchasing module was built to check. These terms share a trait: each requires comparing a live transaction against a rule written in prose or a table in a separate document, not against another transaction inside Business Central. That comparison is the piece the purchasing module has no mechanism for. - Volume tier discounts: A rate that should step down once shipment volume crosses a threshold has no mechanism in Business Central tracking cumulative volume against that threshold. - Minimum commitments: A minimum revenue commitment clause obligates a true-up at period end that nothing in the purchasing module calculates or flags. - Rate card expirations: Contract rate cards renew or expire on dates outside any field Business Central tracks against the vendor record. - Accessorial trigger conditions: Whether a fee's contractual condition was met is a fact about the shipment, not about the purchase order, and Business Central holds only the latter.

## 6. How should a freight team close the gap between matching and contract compliance?

Business Central's matching should stay in place; it is the right control for its job. Closing the gap means encoding the carrier contract, rate card, surcharge index peg, and accessorial schedule as rules checked against every invoice line independently of the purchase order, since the purchase order is often the same source the invoice needs to be tested against, not a reliable reference for it. The practical distinction is which document is the reference. Three-way matching references the purchase order. A contract compliance check references the carrier agreement itself, rewritten as a set of testable rules: this surcharge percentage at this index level, this accessorial only under this condition, this rate only above this volume. Building that second layer inside Business Central is possible in principle but means re-entering the entire contract as structured data the ERP was not designed to hold, then maintaining it every time a contract renews or an index updates. Most freight teams instead run this check as a separate exercise: extracting invoice-level detail from Business Central and testing it against contract terms held elsewhere. [A diagnostic](/guides/diagnostic-or-software-what-to-buy-first) answers the different question of where the biggest gaps sit today, without requiring the contract terms to already be encoded anywhere. For the wider pattern this sits inside, start with the [margin drift](/insights/best-invoice-validation-software-smb) guide. See also [build vs. buy: can you do contract-to-invoice matching in excel?](/guides/build-vs-buy-can-you-do-contract-to-invoice-matching-in) and [margin drift diagnostic for infor cloudsuite syteline](/guides/for-infor-syteline).

## Common questions

### Does Business Central natively support freight rate cards?

No. Business Central has no object type representing a carrier's rate card, fuel surcharge schedule, or accessorial tariff. Freight pricing exists in Business Central only as the price entered on a purchase order line, which is a number a person typed, not a rule the system checks against a contract.

### Will three-way matching catch a duplicate freight invoice?

Three-way matching is built to catch quantity and price variance against a purchase order and receipt, not duplicate detection specifically, though a duplicate invoice referencing the same order can surface if the order was already fully invoiced. A duplicate carrying a slightly different invoice number or amount can still pass.

### Can Business Central flag a fuel surcharge that no longer matches the index it is pegged to?

No. Business Central has no field linking a surcharge line to an external index value, so it cannot compute what the surcharge should be this month and compare it to what was billed. It only checks the surcharge line against the purchase order's own assumption.

### Does the approval workflow in Business Central review contract terms?

No. The approval workflow routes invoices based on configured conditions like dollar thresholds or matching variance. The approver sees the invoice and purchase order, not the carrier contract, so the review confirms internal consistency, not contract compliance.

### Is a purchase order a reliable reference for freight pricing accuracy?

Not on its own. Freight purchase orders are frequently built from an expected cost entered by a planner, sometimes after the shipment has already moved. If that entered figure is wrong, matching the invoice to it confirms consistency, not correctness against the carrier contract.

---

ValueXPA runs a fixed-scope Margin Drift Diagnostic that validates every service vendor invoice against contract terms, for $100M+ US industrial manufacturers and distributors. Two to four weeks. The client retains 100% of recoveries. https://valuexpa.com/contact-us
