“How much stock do we have?”
It’s the most common question in any business that sells physical products. Sales teams ask it before quoting customers. Operations asks it when planning production. Procurement asks it when deciding what to reorder.
The problem? Most businesses think they’re asking one simple question, but they’re actually asking three completely different ones:
- How much is physically on the shelf right now?
- How much is already allocated to existing orders we’ve accepted?
- How much can we actually promise to a new customer today?
Most inventory systems only answer the first question. And that’s exactly why businesses oversell, disappoint customers, and spend their days fire-fighting stock shortages that shouldn’t exist.
Let’s examine a scenario that plays out hundreds of times a day across Australian businesses:
Your warehouse has 100 units of a product on the shelf. Your sales rep checks the system, sees “100 units in stock,” and confidently promises 50 units to a new customer. The order goes through. Everyone’s happy.
Except there’s a problem. Forty of those 100 units were already reserved for another customer’s order that was finalised yesterday but hasn’t shipped yet. Your actual available stock wasn’t 100 units — it was 60.
Now you’re 30 units short on one of the orders. Someone has to make an uncomfortable phone call. A customer relationship is damaged. Your operations team scrambles to expedite a purchase order. And next month, you’ll probably over-order to create a safety buffer, tying up cash in excess inventory.
This isn’t a failure of people. It’s a failure of visibility.
The Hidden Complexity of “How Much Stock Do We Have?”
When most people talk about inventory, they’re thinking about physical units sitting in a warehouse or on a shelf. The mental model is straightforward: if there are 100 boxes in the storeroom, we have 100 units.
But the moment you start taking customer orders against that stock — especially before you’ve actually picked and shipped those orders — the simple count becomes misleading.
Here’s why: your business operates in states. Stock moves through a workflow:
- Unallocated: sitting on the shelf, available to anyone
- Reserved: assigned to a customer order that’s been accepted but not yet processed
- Committed: permanently allocated to an order that’s being picked/packed/shipped
- Fulfilled: physically gone, shipped to the customer
At each stage, the physical count might be the same, but the available count changes. The 100 units on the shelf become 60 units you can actually sell once 40 have been reserved for existing orders.
This distinction — between what you have and what you can promise — is the foundation of modern supply chain management. And it’s called Available to Promise (ATP).
Defining the Terms: A Clearer Language for Inventory
Before we go further, let’s establish a precise vocabulary. These terms mean specific things in supply chain management, and using them consistently changes how you think about stock.
| Term | Definition | Example (100 units on shelf) |
|---|---|---|
| On Hand | Physical stock present in the location right now | 100 |
| Reserved | Allocated to pending orders (finalised but not yet committed) | 30 |
| Committed | Permanently assigned to orders (committed, awaiting fulfilment) | 10 |
| Ordered/Incoming | On purchase order from supplier, not yet received | 25 |
| Available to Promise (ATP) | What you can actually sell to a new customer | 60 (100 - 30 - 10) |
| Available (incl. incoming) | ATP plus expected incoming stock | 85 (60 + 25) |
Let’s break this down with a concrete example:
You operate a wholesale business selling industrial supplies. Product X currently has:
- 100 units physically in your warehouse (on hand)
- 30 units reserved for Customer A’s order from Monday (finalised, waiting to be picked)
- 10 units committed to Customer B’s order from last week (currently being packed)
- 25 units on order from your supplier (arriving next Tuesday)
A new customer calls and asks if you can supply 70 units. What’s the answer?
If you only look at “on hand” (100 units), the answer appears to be yes. But that would be wrong.
Your actual available to promise is 60 units (100 on hand - 30 reserved - 10 committed). You can promise the customer 60 units for immediate delivery.
However, if they’re willing to wait until next Tuesday, your available including incoming is 85 units (60 ATP + 25 ordered). You can promise 70 units with a delivery date after Tuesday’s shipment arrives.
This is the level of precision that separates businesses that deliver on promises from businesses that scramble to explain why they can’t.
The Origins of Available-to-Promise
Available-to-Promise isn’t a new concept invented for the e-commerce age. It’s a foundational principle of Materials Requirements Planning (MRP), which emerged in the 1960s and 1970s as manufacturers adopted computer systems to manage production.
Joseph Orlicky, the IBM engineer often credited as the father of MRP, defined ATP in his 1975 book Material Requirements Planning with a straightforward formula:
ATP = On Hand + Scheduled Receipts - Committed Orders
The logic was simple: a manufacturer needed to know how much of a component they could promise to a new production run, accounting for what was already allocated to existing production schedules.
By the 1990s, the concept had been formalised by APICS (now the Association for Supply Chain Management), which defines ATP as “the uncommitted portion of a company’s inventory and planned production.”
For decades, ATP was the domain of large manufacturers running expensive ERP systems like SAP and Oracle. These systems cost hundreds of thousands of dollars to implement and required teams of specialists to maintain.
But here’s the thing: ATP isn’t just relevant for manufacturers. Any business that takes orders against stock needs ATP.
A wholesaler selling to retailers needs it. A retailer selling online and in-store needs it. A distributor supplying tradies needs it. Even a small business selling products on a website while simultaneously taking phone orders needs it.
The only reason ATP wasn’t universal was technological cost. The tools weren’t accessible.
That’s changed. Cloud-native platforms with real-time databases have made enterprise-grade inventory visibility affordable for SMBs. The question is no longer whether you can afford ATP tracking — it’s whether you can afford not to have it.
Why “On Hand” Alone Leads to Wrong Decisions
Let’s explore three scenarios where relying solely on “on hand” quantities creates operational chaos.
Scenario 1: The Wholesale Double-Book
You’re a wholesaler supplying building materials. Your system shows 200 units of a popular product in stock.
Monday morning, 9 AM: Sales Rep A receives a phone call from a long-standing customer. They need 150 units for a project starting next week. Rep A checks the system, sees 200 units available, and confirms the order. “We’ll have it ready for pickup on Thursday,” they say.
Monday morning, 10 AM: Sales Rep B responds to an online quote request from a new customer. They’re asking for 120 units. Rep B checks the system, sees 200 units (the system hasn’t been updated yet because Rep A’s order hasn’t been formally entered), and sends a quote confirming availability.
Monday afternoon: Both orders are entered into the system. Total promised: 270 units. Actual stock: 200 units.
Someone’s going to get a very uncomfortable phone call. Either you short the long-standing customer, damaging a relationship built over years, or you short the new customer, ensuring they’ll never become a repeat client.
This isn’t a scenario from an edge case. This happens daily in businesses without real-time ATP tracking. The fundamental problem: visibility lag. The system showed the same “on hand” number to two people making simultaneous decisions, when the real available stock should have decreased after the first promise.
Scenario 2: The Seasonal Surge
You sell outdoor furniture. It’s October — the start of the Australian summer buying season. You’ve stocked up: 500 units of your best-selling outdoor dining set.
Your marketing team launches a spring promotion: 15% off for the first two weeks of November. The promotion goes live on a Friday morning.
By Friday evening, you’ve received 150 orders. By Saturday afternoon, another 100. By Sunday night, 50 more. Total: 300 units sold.
But here’s the problem: most of those orders are in “pending” status. Customers have placed the order online, but they haven’t been finalised yet (payment processing, fraud checks, inventory allocation — all happening in batch overnight).
On Monday morning, the promotion is still live. Your system still shows 500 units on hand (because the orders haven’t committed yet). Another 200 orders come in.
By Monday night, when the batch processing runs and all orders are finalised, you discover you’ve “sold” 500 units against 500 units of stock. Except some of those orders were placed when stock was already spoken for — you just didn’t know it yet.
If you’d had real-time ATP tracking with reservation logic, the available count would have decreased with each order finalisation. By Monday morning, your website would have shown “Low Stock” or “Only 200 Remaining,” creating urgency without over-promising. And when ATP hit zero, the product would automatically switch to backorder.
Instead, you’re now fulfilling orders on a first-come-first-served basis, and the customers who ordered late Sunday night are getting cancellation emails on Tuesday.
Scenario 3: The Transfer Blind Spot
You operate a two-warehouse distribution network: Warehouse A in Sydney, Warehouse B in Melbourne.
A customer in Melbourne calls asking for 50 units of Product Z. Your sales rep checks the system:
- Warehouse A (Sydney): 100 units
- Warehouse B (Melbourne): 0 units
The rep apologises: “We don’t have stock in Melbourne right now, but we can transfer it from Sydney. It’ll take about 3-4 business days.”
The customer declines. They need it sooner. They go to a competitor.
Here’s what the sales rep didn’t see: 30 units were already in transit from Sydney to Melbourne. A transfer order had been created two days ago, and the stock was literally on a truck heading to Melbourne. But the system showed 0 units at Warehouse B because the transfer hadn’t been committed yet.
At the same time, a customer in Sydney orders 100 units from Warehouse A. The system shows 100 units available, so the order is confirmed.
But the reality: only 70 units are actually available at Warehouse A. The other 30 are reserved for the Melbourne transfer. The Sydney customer’s order can’t be fully fulfilled.
You’ve simultaneously lost a sale in Melbourne (where stock was incoming but invisible) and over-promised in Sydney (where stock was allocated but not yet moved).
This is the multi-location ATP problem. Without transfer-aware inventory tracking, stock in transit exists in a blind spot — neither available at the source nor visible at the destination.
How Reservation Enables ATP
The key to making ATP work is a concept called reservation — and it’s baked into the order workflow.
Here’s the insight: ATP only functions if your system tracks reservations as a separate state, distinct from both “on hand” and “committed.”
Let’s walk through what happens when an order is finalised with reservation logic:
Initial state:
- On hand: 100 units
- Reserved: 0 units
- Available to promise: 100 units
Customer places an order for 30 units. The order is finalised (reserved):
- On hand: 100 units (stock hasn’t physically moved)
- Reserved: 30 units (allocated to this customer’s order)
- Available to promise: 70 units (100 - 30)
The order is committed (picked and assigned to a shipment):
- On hand: 100 units (stock is still in the warehouse, in the packing area)
- Reserved: 0 units (no longer pending, now committed)
- Committed: 30 units
- Available to promise: 70 units (100 - 0 - 30)
The order is fulfilled (shipped):
- On hand: 70 units (stock physically left the warehouse)
- Reserved: 0 units
- Committed: 0 units
- Available to promise: 70 units
Notice what happens: the moment the order is finalised (reserved), the available-to-promise count drops to 70. The next sales rep who checks stock sees 70 available — the real number they can promise to a customer.
This is the fundamental connection between order workflow and inventory visibility. Without a reservation step (finalise), there’s no way to subtract “spoken for” stock from the available count. And without that subtraction, ATP is impossible.
This is why businesses using systems that jump straight from “quote” to “shipped” end up overselling. There’s no intermediate state that marks stock as allocated-but-not-yet-committed.
Real-Time vs Batch Updates: Why Timing Matters
There are two ways to calculate ATP: in real-time or in batches.
Batch Processing: The Old Way
Traditional inventory systems recalculate ATP on a schedule:
- Overnight batch runs (once per day)
- Hourly updates
- Manual refresh when someone clicks a “sync” button
This approach made sense in the era of on-premise databases and limited computing power. Running complex calculations across thousands of SKUs was expensive, so you did it periodically.
But here’s the problem: ATP is stale the moment it’s calculated.
If your system updates ATP every hour, and an order comes in at 9:05 AM, the available count won’t reflect that reservation until 10:00 AM. For 55 minutes, anyone checking the system will see an inflated available quantity.
In a low-volume business, this might be tolerable. But in a high-volume environment — especially during peak periods like end-of-quarter sales pushes or seasonal promotions — stock levels change constantly. Batch processing creates a lag that leads directly to overselling.
Real-Time Processing: The Modern Standard
Real-time ATP updates inventory availability with every transaction:
- An order is finalised → available count decreases immediately
- An order is committed → reserved count decreases, committed count increases
- An order is cancelled → available count increases immediately
- A purchase order is received → on-hand and available counts increase
There’s no lag. The available-to-promise figure is always current.
The technology that makes this possible: modern cloud databases with atomic transactions and real-time listeners. Systems like Google Firestore, AWS DynamoDB, and Azure Cosmos DB can handle thousands of simultaneous writes and instantly notify connected clients of changes.
This used to be the exclusive domain of enterprise ERP systems costing hundreds of thousands of dollars. Now it’s accessible to SMBs using cloud-native platforms.
The business impact is straightforward: if two sales reps check stock at the same time, they both see the same accurate figure. If one of them finalises an order, the other immediately sees the reduced available count. No double-booking. No overselling.
ATP Across Multiple Locations
For businesses operating multiple warehouses, ATP becomes more complex — and more valuable.
You need to calculate ATP at three levels:
1. Per-Location ATP
What can I promise from this specific warehouse?
If a customer in Brisbane needs 50 units delivered tomorrow, you need to know what’s available at your Brisbane warehouse, not your total stock across all locations.
Per-location ATP is calculated the same way as single-location ATP:
ATP (Location X) = On Hand (Location X) - Reserved (Location X) - Committed (Location X)
This is the view your sales and operations teams use most frequently.
2. Global ATP
What can I promise from any warehouse?
If a customer doesn’t care where the stock ships from, you need to know your total available stock across all locations.
Global ATP = Σ ATP (all locations)
This is useful for:
- E-commerce fulfillment (ship from the nearest location with stock)
- Wholesale quotes (customers don’t care which warehouse it comes from)
- Demand planning (understanding total available capacity)
3. Transfer-Aware ATP
If stock is being transferred between locations, how does that affect availability?
This is where most systems fall apart.
When a transfer order is created:
- Stock at the source location should be reserved (unavailable to sell)
- Stock at the destination location should show as incoming (potentially available to pre-sell)
Without transfer-aware ATP:
- Source location shows 100 on hand, but 30 are reserved for transfer (invisible to sales)
- Destination location shows 0 on hand, even though 30 units are incoming (missed sales opportunity)
With transfer-aware ATP:
- Source location: On Hand = 100, Reserved = 30, ATP = 70
- Destination location: On Hand = 0, Incoming = 30, ATP = 0 (or 30 if you allow selling forward)
The complexity: during the transfer, the stock is in-transit. It’s not available at either location until the atomic commit happens (see our article on atomic transfers for the technical details).
But once the transfer commits:
- Source: On Hand = 70, Reserved = 0, ATP = 70
- Destination: On Hand = 30, Incoming = 0, ATP = 30
The key is maintaining consistency during the transition. Without atomic operations, there’s a window where stock can appear to vanish (subtracted from source but not yet added to destination) or duplicate (still showing at source while also appearing at destination).
Modern systems handle this with two-phase commits: reserve at source, commit at destination, then finalise the deduction at source. At every moment, the global ATP remains accurate.
ATP for Different Order Types
Available-to-promise logic works differently depending on the type of order. Let’s examine the four main categories:
Send Orders (Outbound Sales)
These are standard customer orders — selling and shipping stock out of your warehouse.
ATP impact:
- Finalize (reserve): ATP decreases by the order quantity
- Commit: Reserved stock moves to committed, ATP remains the same
- Fulfill: Committed stock is shipped, on-hand decreases, ATP remains the same
- Cancel (before commit): Reserved stock is released, ATP increases
Example:
- Initial: On Hand = 100, ATP = 100
- Finalize order for 30 units: On Hand = 100, Reserved = 30, ATP = 70
- Commit order: On Hand = 100, Reserved = 0, Committed = 30, ATP = 70
- Fulfill order: On Hand = 70, Committed = 0, ATP = 70
Receive Orders (Inbound Purchasing)
These are purchase orders from suppliers — stock you’re expecting to receive.
ATP impact:
- Finalize (create PO): ATP at destination increases by expected quantity (if you allow selling forward)
- Commit (goods received): On-hand increases, incoming decreases, ATP increases
- Fulfill (stocked): Stock is now available for sale
This is where “Available (including incoming)” becomes relevant. Some businesses allow sales teams to promise stock that’s on order but not yet received:
- Current: On Hand = 50, ATP = 50
- Create PO for 100 units (arriving next week): On Hand = 50, Incoming = 100, ATP = 50, Available (incl. incoming) = 150
Sales can quote the customer: “We have 50 units in stock now, and another 100 arriving next Tuesday. We can supply all 75 units you need, with 50 shipped immediately and 25 shipped next Wednesday.”
The risk: what if the supplier’s shipment is delayed or short? You’ve promised stock you don’t have yet.
Conservative businesses only increase ATP when the stock is physically received (commit step). Aggressive businesses increase ATP when the PO is confirmed. The right choice depends on supplier reliability and customer expectations.
Transfer Orders (Inter-Warehouse Movements)
These are internal movements of stock between your own locations.
ATP impact:
- Finalize (create transfer): Source ATP decreases, destination shows incoming
- Commit (atomic transfer): Source on-hand decreases, destination on-hand increases
- Fulfill (stocked at destination): Stock is available for sale at new location
Example:
- Warehouse A: On Hand = 100, ATP = 100
- Warehouse B: On Hand = 0, ATP = 0
Create transfer of 30 units from A to B:
- Warehouse A: On Hand = 100, Reserved = 30, ATP = 70
- Warehouse B: On Hand = 0, Incoming = 30, ATP = 0 (or 30 if pre-selling is allowed)
Commit transfer:
- Warehouse A: On Hand = 70, ATP = 70
- Warehouse B: On Hand = 30, ATP = 30
The atomic commit is critical here. If the deduction at A and the addition at B happen separately, there’s a window where the 30 units exist in neither location (vanished) or both locations (duplicated). Modern systems use database transactions to ensure both updates happen together or not at all.
Returns
Customer returns introduce uncertainty: is the returned stock resalable?
ATP impact depends on inspection policy:
Conservative approach (most common):
- Return initiated: no change to ATP
- Return received and inspected: if resalable, ATP increases; if damaged, no change
- Return restocked: on-hand increases
Aggressive approach (risky):
- Return initiated: ATP increases (assumes return will be resalable)
- Return received: on-hand increases
The aggressive approach increases ATP before you’ve physically inspected the goods. If the return arrives damaged or incorrect, you’ve over-promised.
Most businesses use the conservative approach: returns only increase ATP after quality inspection confirms the stock is resalable.
Implementing ATP in Your Business: A Practical Roadmap
If you’re convinced that ATP tracking would improve your operations, how do you actually implement it?
Step 1: Audit Your Current Visibility
First, understand what you already have.
Check your inventory system:
- Does it show separate quantities for on-hand, reserved, committed, and available?
- Can you see what’s allocated to pending orders before those orders are shipped?
- Can your sales team filter by “available to promise” rather than just “on hand”?
If your system only shows one number (usually “quantity on hand”), you don’t have ATP capability. You’re flying blind.
If your system shows multiple quantities but your team ignores them and only references “on hand,” you have ATP capability but you’re not using it.
Step 2: Implement Structured Order Processing
ATP only works if your order workflow includes a reservation step.
The structure needs to be:
- Quote/Pending: customer intent, no stock allocated
- Finalize (reserve): order accepted, stock allocated but not yet committed
- Commit: order locked, goods assigned to shipment
- Fulfill: goods shipped, order complete
The finalize step is what makes ATP possible. It creates the “reserved” state that gets subtracted from on-hand to calculate available.
If your current workflow jumps from “quote” directly to “shipped,” you need to insert the intermediate states. This is a process change, not just a system change. Your team needs to understand why it matters.
Step 3: Train Your Sales Team
This is the cultural change: sales teams must reference available (ATP), not on hand.
The old habit:
- Sales rep checks system: “100 units in stock.”
- Sales rep quotes customer: “Yes, we have plenty. I can ship 50 units tomorrow.”
The new discipline:
- Sales rep checks system: “100 units on hand, 40 reserved, 60 available.”
- Sales rep quotes customer: “We have 60 units available for immediate dispatch. If you need more, we have 25 units arriving next week, so I can supply 85 total with a split shipment.”
The difference: precision and honesty. Customers get accurate delivery dates. Your operations team isn’t scrambling to fulfill promises made with incomplete information.
Step 4: Set Up Alerts
Visibility is only useful if you act on it. Configure alerts for:
- Low ATP warnings: “Product X has ATP < 10 units” (even if on-hand is 100)
- ATP = 0 alerts: “Product Y is fully allocated” (time to reorder or notify customers of backorder status)
- Negative ATP: “Product Z has -5 ATP” (critical error, means over-allocated — investigate immediately)
These alerts are different from standard low-stock alerts. Low stock means “we’re running out physically.” Low ATP means “we can’t sell any more, even though we have stock on hand.”
The second alert is often more urgent because it affects customer promises.
Step 5: Use ATP for Purchasing Decisions
ATP isn’t just for sales — it’s a leading indicator for procurement.
Traditional reorder logic:
- If on-hand < reorder point, create purchase order
ATP-aware reorder logic:
- If ATP < reorder point, create purchase order
The difference: ATP tells you when stock is running out from a sales perspective, not just a physical perspective.
If on-hand is stable at 100 units but ATP has dropped from 100 to 30 over the past week, it means orders are reserving stock faster than you’re replenishing. You’re about to run out of available stock even though the physical count looks healthy.
ATP trend analysis reveals demand acceleration before it hits your physical inventory levels. That’s the early warning system that prevents stockouts.
The Business Impact: Why ATP Matters
Let’s summarise the tangible business outcomes of implementing available-to-promise tracking.
Sales Confidence
Your sales team can quote accurately and promise what’s actually available.
Instead of hedging (“We probably have that in stock, let me check and get back to you”), they can commit immediately with confidence (“Yes, we have 60 units available for delivery by Friday”).
That confidence translates to faster sales cycles and higher close rates. Customers don’t want maybes — they want certainty.
Customer Satisfaction
Orders are fulfilled as promised, building trust and repeat business.
The worst customer experience in wholesale and distribution: being told stock is available, placing the order, then receiving a call days later saying “Sorry, we oversold. It’s on backorder.”
ATP eliminates that scenario. If you promised it, you can deliver it. That reliability turns one-time buyers into long-term partners.
Operational Efficiency
No more last-minute scrambles to source stock for oversold orders.
Your operations team spends their time optimising workflows, not fire-fighting. Your procurement team orders what you need based on data, not guesses. Your warehouse team picks and packs without constant interruptions asking “Can we fulfil this order or not?”
ATP shifts your business from reactive to proactive.
Cash Flow
Better purchasing decisions mean you buy what you need, not what you think you need.
Businesses without ATP visibility often over-order to create safety buffers. “We oversold last month, so this month I’ll order 50% more just to be safe.”
That ties up cash in inventory that sits on shelves. ATP gives you the visibility to order precisely: reorder when ATP hits the threshold, not when on-hand does.
The result: leaner inventory, better cash flow, less waste from obsolete stock.
The Path Forward
Available-to-promise tracking isn’t optional for modern businesses. It’s the foundation of accurate order promising, effective inventory management, and customer satisfaction.
The good news: the technology is no longer a barrier. Cloud-native platforms have made real-time ATP tracking accessible and affordable for businesses of all sizes.
The challenge is cultural, not technical. Implementing ATP requires:
- Process discipline (structured order workflows with reservation logic)
- Team training (sales referencing available, not on-hand)
- Operational rigour (alerts, monitoring, trend analysis)
But the businesses that make this shift gain a competitive advantage. They deliver on promises. They don’t oversell. They don’t disappoint customers. And they make purchasing decisions based on data, not instinct.
EQUOS9 tracks on-hand, reserved, committed, ordered, and available quantities separately, updated in real-time with every order action. The Finalize step (reservation) is what makes ATP possible — it marks stock as allocated before permanent commitment, giving your team the visibility to promise accurately and fulfill confidently.
Explore how EQUOS9 handles inventory visibility in the Inventory Module and structured order processing in the Orders Module.