Some stock needs a name, not just a count: food and pharma by batch (a lot with an expiry date), electronics and equipment by serial number (every unit its own). LedgersLab tracks both, and answers the recall question — which customers got lot B? — from the movements it already records.
#Turning it on
On the item form, Inventory tracking → Track by: Quantity only (the default), Batch / lot or Serial number. A batch item can also require an expiry on every batch, carry a shelf life (defaults a batch's expiry from its manufacturing date) and have its batch numbers generated instead of typed. The setting can only change while the item has nothing on hand.
On a category, Pick order chooses which batch leaves first when a line does not say: FEFO (nearest expiry first, the default) or FIFO (oldest receipt first).
#On documents
Every grid that moves stock — bills, goods receipts, invoices, receipts, credit notes, vendor credits, adjustments, transfers — has a Lots cell on tracked items. When the warehouse has bins (section 10.14) the cell appears on every stocked item, reading Auto-place or Auto-pick, and each lot row can name its bin.
- Receiving (a bill, a goods receipt, a return from a customer, an increment): say what arrived. A batch item takes a batch number (an existing one, or a new one with its expiry) and a quantity per lot; a serial item takes one serial per unit — paste or scan them, one per line. The cell turns red until the lots add up to the line quantity. An item with generated batch numbers, and every production entry's finished goods, get a batch without asking.
- Issuing (an invoice, a receipt, a delivery, a return to a vendor, a decrement, a transfer): leave the cell on Auto-pick and the pick order chooses from what is in stock in that warehouse — unexpired, not on hold — or open it and choose the lots or units yourself. A reopened document shows what it shipped (2 lots · auto).
Tracked stock never goes negative: a line short of stock in its warehouse is refused with the shortfall, an expired lot is refused (unless Settings → Inventory → Allow expired sales is on), and a serial that is not in stock — or sits in another warehouse — is refused.
#Batches & Serials
Inventory → Batches & Serials lists every lot (item, on hand, where, expiry with expired / N days flags, status) and every unit (status — in stock, in transit, delivered, consumed, returned to vendor, scrapped — where it is, and the documents that received and issued it). In stock only and Expiring within 30 days narrow the list. Click a row for the trace: where the lot came from, every document it went out on with the customer, and for manufactured goods the component lots it consumed.
#Costing
A batch's units leave at that batch's own cost under FIFO (the layers are kept per batch, not blended); AVCO is unchanged. Serials are not valued one by one.