Multi-Warehouse Inventory with Lot and Expiry Tracking
CareSuite tracks inventory across multiple warehouses down to the lot — with expiry dates and quantity-on-hand per lot — depth most people don't expect to find inside a customer-care CRM.
Most people don't open a customer-care CRM expecting real inventory management underneath it. CareSuite has it anyway, and it goes deeper than a single stock count per product: it tracks quantity by warehouse, and within each warehouse, by lot.
The three-layer model
Warehouses (care_warehouses) are the top layer — a name, an address, and an active flag. A business running out of two or three physical locations sets each up as its own warehouse rather than pretending inventory is one undifferentiated pool.
Stock lots (care_stock_lots) sit under a warehouse and a product, and this is where the depth shows up: each lot has its own lot_code, an expiry_date, a qty_on_hand, and a unit_cost. The same product can have multiple lots in the same warehouse — last month's batch and this month's batch — each with its own expiry and its own cost basis, rather than being averaged into a single number that loses that information.
Stock movements (care_stock_movements) are the ledger: every change in quantity — a type, a quantity delta, and an optional reference back to what caused it (an order, a return, a manual adjustment) — recorded against a specific warehouse, product, and lot. This is what lets you answer "why does this lot show this quantity" after the fact, instead of trusting a number with no history behind it.
Why lot and expiry tracking matters
For a business selling anything with a shelf life — pharmaceuticals, food and beverage, cosmetics — expiry-blind inventory is a real liability. If your system only tracks "50 units of Product X in Warehouse A" without distinguishing which lot those units came from, you can't answer "which of these are about to expire" without physically checking, and you can't guarantee you're shipping the oldest stock first. Lot-level expiry tracking makes both of those answerable from the data directly: sort by expiry_date within a product and warehouse, and you know exactly what needs to move first.
Working across multiple warehouses
Because stock lots and movements are scoped to a specific warehouse, CareSuite naturally supports the common multi-location question: "do we have this in stock, and where?" A product might be well-stocked in one warehouse and out in another — visible immediately rather than requiring a call to each location. When you need to move stock between warehouses, that's recorded as movements at both ends, keeping the same auditable trail as any other quantity change.
Setting it up
Start by creating your warehouses — one per physical location that holds its own stock. From there, stock lots get created as inventory arrives, each carrying its own lot code and expiry (when applicable) and its own cost. Movements then happen naturally as orders ship, returns come back, and manual adjustments correct discrepancies — each one referencing the lot it affects, so the quantity-on-hand you see for any lot is always the sum of a real, inspectable history rather than a number someone typed in once and never revisited.
This level of detail isn't necessary for every business CareSuite serves, but for the distributors and physical-goods retailers it's built for, it's the difference between inventory numbers you can actually trust and ones you have to double-check by hand.