Skip to content

URD: Inventory

ModuleVersionUpdated
CORE-06v2.02026-07-13

What the Inventory module does

Define the user-facing requirements for Inventory management - a merchant knows what they have, where it sits, how it got there, and what it is worth.

The module serves two industries at once, and they need different things. Retail needs to manage a large SKU count, scan barcodes fast at the counter, and never oversell. F&B needs to manage down to raw materials: selling one milk tea deducts milk, deducts tea, deducts tapioca pearls - and needs to know which batch of milk expires soonest so it gets used first.

Five points to understand first

This is the most important part of the document. Understanding the five points below is understanding 80% of the module.

1. Stock is four numbers, not one

A single "how much stock is left" number is not enough, because it cannot answer "how much can I sell."

NumberMeaningExample
On-handStock physically sitting on the shelf, touchable10 cans
ReservedAlready promised to someone, still on the shelf but not sellable again3 cans (2 in a customer's cart at checkout, 1 on a pending transfer ticket)
AvailableOn-hand minus reserved. This is the number that decides whether a sale can go through7 cans
IncomingAlready left the source location, on its way here. Visible but not yet sellable5 cans

A cashier only cares about available. A stock counter only cares about on-hand. Two people counting come up with two different numbers, and both are right.

2. Every stock change flows through a document

Stock never rises or falls on its own. There's always a document behind it: a purchase order, a receiving ticket, a transfer ticket, a stock count ticket, a write-off ticket - or a sale order.

A document has a lifecycle: draft → submitted → approved → executed → completed. Stock only changes when the document completes, not the moment it is drafted. That's what lets every number be traced back to a document someone signed off on.

3. The ledger is the truth, the stock table is only a summary

The system writes to two places:

  • Inventory ledger (LDG) - every time stock changes, a new line is written, recording: before the change, the delta, after the change, the reason, and the source document. No operation - sale, receiving, transfer, stock count - ever edits or deletes a past ledger line; a correction is a new adjustment line. The operations team has a separate escape hatch to edit or delete a line directly when data needs rescuing - this is an internal tool used during incidents, not a merchant-facing feature.
  • Stock table (STK) - the four current numbers. This is the summary for fast reads, because replaying the whole ledger on every sale would be far too slow.

When the two disagree, the ledger is right. The stock table can be rebuilt from the ledger; the ledger cannot be rebuilt from the stock table.

4. A sale reserves first and consumes later

Two separate steps, and this is where overselling gets blocked:

  1. Reserve - the moment the cashier adds an item to the order. The stock is still on the shelf, but "available" drops immediately. If there is not enough stock, the system rejects right here - before the customer has paid, while it is still easy to fix.
  2. Consume - when the order completes. The stock actually leaves the shelf. This step never fails for lack of stock, because the stock was already reserved in step 1.

The same goes for prepared items: ringing up "1 milk tea" makes the system explode the bill of materials into milk/tea/tapioca and reserve each ingredient right then. Out of milk shows up at the counter immediately, not after the kitchen finds out while making it.

The default is to block overselling. A merchant can turn on allow oversell per item - for example a merchant enables it for ice and straws (hard to count exactly), but keeps the block on for chicken and milk.

5. Cost is decoupled from quantity

Quantity is counted per location. Cost is not - it is one number for the whole merchant.

That means moving stock between two locations never touches money - only the quantity shifts. Cost only changes when new stock comes in at a different price.

What is in the module

Seventeen feature areas. Click an AREA code to open Details at that area.

AREANameIndustryStatus
LOCInventory LocationsAllBuilt
UOMUnits of Measure & ConversionAllPartial
STKInventory Items & Stock LevelsAllBuilt
RSVReservation & Oversell PreventionAllPartial
VALInventory ValuationAllPartial
LSELots, Expiry & Picking StrategyF&B, RetailPlanned
LDGInventory LedgerAllPlanned
TKTInventory TicketsAllPlanned
TRFStock TransferAllPlanned
CNTStock CountAllPlanned
VENVendorsAllPartial
POPurchase OrdersAllPlanned
MATMaterialsF&BPartial
BOMBill of MaterialsF&B, ManufacturingPlanned
MFGProduction OrdersManufacturingPlanned
RPLReplenishmentAllPartial
SYNMultichannel SyncRetailPlanned

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.