Negative Inventory Is a Design Failure, Not a Data Problem
Search for negative inventory and you get a dozen pages explaining the causes and how to clean it up. Unrecorded receipts, timing gaps, transfers marked complete too early. All accurate, and all treating it as housekeeping.
It isn’t housekeeping. A negative on-hand number is the system telling you two things that cannot both be true, and then storing the contradiction as arithmetic so nobody has to look at it. Minus four is not a quantity. There has never been minus four of anything in a warehouse.
What actually happened when your stock went negative?
Your channel says units shipped. Your ledger says those units were never there.
Both records are about the same physical event, and exactly one of them is wrong. Usually it is the ledger, because a receipt never got entered, or an opening count was taken from a shelf that was already short, or a warehouse transfer is still sitting in transit while the goods are physically on the floor being picked.
The order genuinely shipped. A customer has the box. That part is not in doubt, and it is why the naive fix, refusing the fulfillment, is wrong on its own. You cannot unship a parcel by declining to record it.
So the system has to do something with a fulfillment it cannot back with stock. Most of them subtract anyway and let the number go below zero. The contradiction is now invisible. It sorts normally, it sums into your valuation, and nobody is ever paged about it.
What we record instead
We book it as inventory debt: a claim, against a specific product in a specific warehouse, for a specific number of units, with a date and a cause attached.
That is the whole idea, and it is deliberately boring. The units still leave. The order still ships. The difference is that the shortfall becomes a named row on a report somebody owns, rather than a minus sign inside a number everybody trusts.
It is worth being precise about the vocabulary, because two mechanisms coexist in the product right now. There is an older channel-forced kind, raised when a marketplace tells us a shipment already happened, and a newer inventory-debt claim. The report shows both together, deliberately, and breaks them out. Reporting only the new one while the migration finished would have made real exposure vanish from the page for months, which is the worst possible behavior for a number whose entire job is to be looked at.
Who is allowed to ship into debt?
It is a setting, and I would rather explain it than pretend we are stricter than we are.
The policy resolves most-specific-wins: a product override beats a warehouse override beats the tenant default. Three values, and the descriptions are the ones in the product:
| Policy | What happens on a short fulfillment |
|---|---|
| Block | Refuse the fulfillment. The short line must be backordered. |
| Warn | Allow shipping into debt with a reason, for users holding the permission. |
| Allow | Record the debt silently. Still audited, still settled on receipt. |
Allow is not the same as the minus sign. Silent here means no prompt at the moment of shipping. The claim is still written, still dated, still on the report, and still blocks nothing else from being true.
What can never go negative, whatever the setting is?
Four things, and no configuration unlocks them.
Serial-tracked products, because you cannot ship a serial number you do not hold. Lot and expiry-tracked products, because first-expiry-first-out picking against a lot that does not exist is not a policy decision, it is nonsense. Consignment-backed stock, because the units belong to your supplier and the sale already recognized that liability. A shortfall there is a disagreement with your supplier’s records, not a debt you can owe yourself, so it does not get carried as one.
And the fourth is the one I find most clarifying. Inventory adjustments and stock takes can never go negative under any policy, because those are not goods moving. They are the ledger asserting physical truth, and physical truth cannot be negative. A receipt might one day settle a debt of four units. Nothing will ever settle a count of minus two.

The setting on the left, the exclusions on the right. The policy resolves most-specific-wins; the four on the right are excluded at every level and by every source.
How does the debt get cleared?
Stock arriving settles it, and it does not much matter what brought the stock. A supplier receipt, a warehouse transfer landing, a return coming back on the shelf, a stock take counting units in. Anything that puts units into that product in that warehouse pays the debt down before it adds to on-hand.
That is the part worth sitting with. If you owe ten units and receive ten, your available quantity does not move. The receipt goes to the debt. Receive eleven and you are up by one. Operators find this surprising exactly once.
Settlement also sits deliberately ahead of the backorder queue. A debt is a deficit that already happened and a backorder is a promise about the future, so the deficit gets repaid first, before any auto-release preference is even read.
The other exit is voiding the shipment, which reverses the claim, because in that case the units never shipped after all.
There is also a button on the debt report that generates a catch-up stock take across the products in debt and brings them to zero. It works. It is also the thing I am about to tell you not to reach for first.
Why I tell people not to press it
In August I walked a DTC brand through their debt report in the middle of a warehouse migration. Their Shopify said fulfilled. Our numbers said those units never existed. Their instinct, reasonably, was to hit the catch-up stock take and move on.
What I told them was that I did not know whether they wanted a quick fix or wanted to know why this got into debt in the first place, because it should never get into debt unless the data was wrong.
We went and looked. One product’s movement history read plus eight, then minus eight, with an order fulfilled against nothing left on hand, and a warehouse transfer sitting in transit that had never been received. Those are two movement lines that cancel, not a negative balance sitting inside the stock figure, which is the distinction this whole page is about. The debt was not a mystery. It was that transfer. Blind-counting the shelf at that moment would have cleared the number and double-counted the units, because the transfer was still going to land.
That is the real argument for booking the contradiction instead of hiding it. Not that a named number is tidier. It is that a named number has a date and an amount, so you can go and find the event that caused it. Minus eight tells you nothing about which of four possible mistakes you made.
I will also say the unflattering half: the operator on that call was frustrated, and the frustration was legitimate. A system that starts telling the truth about your data looks, at first, exactly like a system that broke. Nothing was wrong with the software. The opening numbers were wrong, and we had simply stopped agreeing to pretend otherwise.
When the minus sign is fine
If you sell a few hundred orders a month from one location and count the shelf yourself on Fridays, none of this matters much. You will spot a negative, you will remember the receipt you forgot, and you will fix it. Zoho Inventory or inFlow will serve you better than we will and cost a great deal less.
This starts to matter when nobody in the building can see the whole picture at once: several thousand SKUs, stock in two or three places including a 3PL, a marketplace reporting fulfillments you did not initiate, and a finance person who needs the inventory valuation to mean something on the last day of the month. At that size a minus sign is not a small inaccuracy. It is a silent write-off with no owner.
The question to ask any vendor
Ask what happens when a channel reports a shipment you have no stock for. Not whether it can happen, because it happens to everyone.
If the answer is that the number goes negative and you clean it up later, you now know where your month-end discrepancies are going to come from. If the answer is that it gets recorded as something with a name, a date, an amount and a way to settle it, ask to see that report before you buy.
If you want to see ours against your own numbers, I will do the demo myself, including the part where the report has rows on it. Book a demo.