Skip to content

K-12

Supplier On-Time Delivery

Did the supplier deliver to your dock by the date they originally committed — at which receipt grain, against which promise, and after how much of the line arrived?

There is a reference build of this metric: the Supplier Scorecard dashboard in the showcase runs this definition over frozen, simulated data — not a live client system.

Verified August 2026

Definitions and source tables below are current to the date above — verify against current SAP, Oracle, Microsoft, Infor, and Databricks documentation before you build.

What supplier on-time delivery measures

Supplier on-time delivery is the share of eligible purchase schedules that physically reach the buying company's dock by a declared commitment date. The event is your receipt, not the supplier's ASN and not the date they say the truck left. That boundary keeps the metric tied to an event the buying company can verify.

There is no useful OTD number without a promise basis. A buyer-requested date measures whether the requirement was met; a supplier-confirmed date measures whether the supplier kept its commitment; a current confirmed date often measures whether the promise was moved before the receipt. Those are three different questions. The practice default keeps the original supplier-confirmed receipt date as the accountability clock and reports requested-date service beside it.

Partial receipts make the receipt event a second definition choice. First-receipt OTD lets one unit stop the clock. Complete-receipt OTD waits until cumulative accepted quantity reaches ordered less canceled quantity. Store both milestone dates on the fulfillment fact and choose one in the metric contract; do not let a dashboard silently switch between them.

Also answers to Supplier OTD · Vendor OTD · Purchase Order On-Time Delivery

The decision switches

Four switches. Promise basis and receipt event usually move the number more than any supplier improvement programme does.

The decision switches, their settings, and the practice default for each
SwitchSettingsPractice default
Promise basisOriginal supplier-confirmed promise · Current confirmed promise · Buyer-requested receipt dateOriginal supplier-confirmed receipt date, with requested-date service and promise-change rate published beside it.
Receipt eventFirst physical receipt · Cumulative receipt reaches the committed quantityCumulative dock receipt to ordered less canceled quantity; report first-receipt OTD only as a separate diagnostic.
WeightingPO schedule line · Quantity weightedSchedule-line OTD as the headline, with the received-quantity denominator shown beside it.
Tolerance windowOn or before promise · Declared early/late window · Late-day grace onlyUse the commercial receiving window where one exists; otherwise publish zero late-day tolerance and show early receipts separately.

Promise basis

  • dependsOriginal supplier-confirmed promise the accountability default — snapshot it when first confirmed because most ERPs keep only the latest value
  • raises the scoreCurrent confirmed promise a late line can become on time after the promise is moved
  • lowers the scoreBuyer-requested receipt date measures the buying requirement, including gaps the supplier never accepted

Practice default Original supplier-confirmed receipt date, with requested-date service and promise-change rate published beside it.

Receipt event

  • raises the scoreFirst physical receipt a token partial delivery stops the clock even when most of the line is still missing
  • lowers the scoreCumulative receipt reaches the committed quantity the line passes only when enough accepted quantity has arrived

Practice default Cumulative dock receipt to ordered less canceled quantity; report first-receipt OTD only as a separate diagnostic.

Weighting

  • dependsPO schedule line each committed delivery schedule gets one vote and remains drillable
  • dependsQuantity weighted large schedules dominate and mix shifts can move the portfolio rate

Practice default Schedule-line OTD as the headline, with the received-quantity denominator shown beside it.

Tolerance window

  • dependsOn or before promise early receipts pass even when they create storage or cash consequences
  • lowers the scoreDeclared early/late window receipts outside either side fail; the window should come from the agreement
  • raises the scoreLate-day grace only a one- or two-day operational grace raises the score and must be printed on the tile

Practice default Use the commercial receiving window where one exists; otherwise publish zero late-day tolerance and show early receipts separately.

Formula & grain

Supplier OTD = PO schedules received within the declared window ÷ eligible PO schedules due

Numerator
Eligible schedules whose chosen dock-receipt milestone falls inside the declared window around the chosen promise
Denominator
Eligible PO schedules due in the period, after declared cancellations and exclusions
Grain
Purchase-order shipment schedule, rolled to supplier and period
Note
Aggregate receipt events to the schedule first. A receipt split is evidence for one schedule, not several denominator rows.

Common pitfalls

  • Scoring against the current promise If a late line is rescheduled before it arrives, current-promise OTD turns the miss into a pass. Snapshot the original confirmation and publish promise-change rate beside OTD.
  • Using ASN or ship confirmation as the actual Those events describe what the supplier reported, not what reached your dock. Use the receiving ledger and state whether the milestone is receive, inspect, accept, or deliver-to-inventory.
  • Letting a partial receipt stop the clock One early unit can make a thousand-unit line look on time. If first receipt matters operationally, publish it separately from the complete or accepted-quantity milestone.
  • Averaging supplier percentages A portfolio OTD is passing schedules divided by eligible schedules, not the mean of supplier rates. Show the denominator because a 100% supplier on two lines is not stronger evidence than 91% on two thousand.
  • Scoring history against today's tolerance The tolerance fields that decide what counts as in-full — SAP's EKPO overdelivery and underdelivery percentages, D365's per-module item settings — are overwritten in place, so the extract holds only the tolerance in force today. Scoring last year's receipts against it silently rewrites the rules they were received under. If the tolerance window matters to the score, snapshot the tolerances into a type-2 dimension as part of the landing.

Source tables — SAP

EKKO/EKPO identify the PO line and supplier; EKET is the schedule-line grain and holds the delivery commitment. Aggregate goods-receipt events from EKBE or MSEG back to that schedule before testing the receipt date. Snapshot the first confirmed date outside the current-state schedule if that is the chosen basis.

Source tables — JD Edwards

F4311 carries the ordered line and dates; receipt-type rows in F43121 carry quantity and receipt date. F43199 is the purchase-order detail ledger used to reconstruct promise changes. Convert Julian dates and implied-decimal quantities before comparing or summing them.

Source tables — Dynamics 365

PurchLine carries requested and confirmed receipt dates; the posted product-receipt journal records physical arrival. The cataloged journal is header-grain, so a production build still needs the raw receipt-line transaction underneath it to preserve PO-line grain. Pin DataAreaId on every join and NULL-wrap sentinel dates.

Source tables — Infor M3

MPLINE carries planned delivery and the receipt status ladder; MITTRA supplies inbound movement events tied back to the purchase order. Pin CONO, convert numeric YYYYMMDD dates, and normalize quantities into the item's basic unit before the cumulative receipt test.

Source tables — Oracle EBS

PO_LINE_LOCATIONS_ALL is the shipment-schedule grain and carries need-by and promised dates. RCV_TRANSACTIONS is the insert-only event ledger: filter the receiving action deliberately and net corrections and returns through the parent chain before determining when cumulative accepted quantity reached the commitment.

Source tables — Oracle Fusion

The Fusion schedule exposes NEED_BY_DATE, PROMISED_DATE, and LAST_ACCEPT_DATE explicitly. Receiving remains an event ledger rather than a balance: a receipt can write receive, inspect, deliver, correct, and return rows, so summing every transaction type double-counts it. Scope the procurement BU and receiving organization separately.

Store the components, not the ratio

Every switch above is a different way of reading the same underlying facts, so the components — quantities, dates, values, flags — are what belongs in the gold layer, never the finished percentage. Bronze keeps the source tables as extracted, silver resolves the encodings once, and gold carries a component-level fact that each variant of Supplier On-Time Delivery reads as a SELECT — the pattern worked through in full in the OTIF entry's landing pattern.

Related

Maintained by Summit Analytics, a supply chain analytics practice. The tools and references are free — the consulting is selective.

Part of the Summit Analytics reference library.

Work with the practice

Not affiliated with or endorsed by SAP, Oracle, Microsoft, or Infor. Product names are trademarks of their respective owners.