This is a technical document to describe the architecture of our Warehouse Management System as it relates to stock. We took some unusual design decisions which have resulted in some unique capabilities.
The central concepts are:
- Double-entry stock system
- Location based stock for all transactions
- Non-fungible stock
This results in:
- A design based on accounting systems with clear audit trails
- One simple journal process for every movement
- Full traceability of lots and shelf life, from supplier to customer
There is a bit of jargon here but it is actually very simple. The double-entry system means that every movement of stock goes from a location (a debit if you are an accountant) to a location (a credit). Here are some examples of stock movements showing a typical life cycle:
- Receive stock from a Supplier to Goods In
- Put Away stock from Goods in to Row 5, Column 4, Level 2
- Move stock from Row 5, Column 4, Level 2 to Pick Line 3
- Pick order on Pick Line 3 and dispatch to Customer
All of these actions have a transfer from somewhere (a debit) to somewhere else (a credit). Some of the locations are physical locations (Goods In; Row 5, Column 4, Level 2; and Pick Line 3) and some locations are virtual (Supplier and Customer).
Over the centuries double-entry bookkeeping has become a standard because it avoids errors and is very simple once you understand it. It works as well today as it did then and because your stock is so valuable we think it should be protected by a double-entry system. But in our system you will be working on locations rather than ledger accounts.
Moving onto stock, a website might sell Minestrone Soup for several years. To the website all of that soup will be exactly the same (fungible would be the technical term). However in our WMS there could be hundreds of different production Lots with different Use By or Best Before dates. In other words the soup is not all the same, it is non-fungible. We call these units of soup (or whatever else it may be) Stock Units.
When an order is sent to Move Fresh we reserve non-fungible stock on the pick line for that particular order. In other words, if the order is for Minestrone Soup we reserve a particular Lot with a particular Use By date. We then make sure that exactly that particular soup is sent to the customer.
What is going on in the background is that a Stock Move is created (to an accountant our Stock Move would be called a Journal Entry). A Stock Move that has not yet happened is a Reservation which becomes a completed Stock Move once it has been executed. While it is a reservation it will prevent any other orders reserving or moving that Stock Unit.
The result is that you know exactly which soup your customer has received, what lot number it had, what expiration date it had, when it arrived in the warehouse, which Goods Received Note it was on and which of your Purchase Orders it came from. You have complete end-to-end traceability. This is required by various quality systems and is essential in a product recall situation.
The final concept to understand is Quarantine. There can be situation where stock is in the warehouse but there is doubt about its quality. Perhaps there are problems with packaging, or visible problems with the product or it could be very near the end of its shelf-life. In these cases the stock will moved to Quarantine for inspection before it is scrapped, returned to the supplier or, if all is well, it may be returned to stock in the warehouse.
When you look at stock levels of a product in our WMS you will be shown five numbers which are:
- Physical Qty: This is the number of units in the selected warehouse.
- Reserved Qty: The units that have a Reservation.
- To Be Reserved Qty: Ordered stock that has not yet been reserved.
- Available Qty: Physical quantity minus Reserved and To Be Reserved
- Quarantined Qty: Stock that needs to be inspected
As a quick reminder for accountants, in our double entry system:
- Journals are Stock Moves
- Draft journals that have not been executed are Reservations
- Accounts are Locations
- The balance at a Location are the Stock Units
- Debits are a move from a Location
- Credits are a move to a Location
- A Trial Balance of Stock Moves will have equal debits and credits