5.3 Traceability & inventory valuation

Key Takeaways

  • A lot tracks a batch of identical units sharing one number, while a serial number uniquely identifies a single physical unit; both feed the full upstream/downstream Traceability report.
  • Expiration Dates (which need lot/serial tracking) give each lot best-before, removal, expiration, and alert dates, and FEFO reserves the soonest-expiring lot.
  • Inventory counts post a corrective move against the Inventory Adjustment / Inventory Loss location on Apply so double-entry stays balanced.
  • Removal strategies are FIFO (oldest), LIFO (newest), FEFO (earliest expiry, requires expiration dates), and Closest location; costing methods are Standard, FIFO, and AVCO.
  • Automated (real-time) valuation posts a journal entry on every stock move via Stock Input/Output interim accounts, and landed costs apply only to FIFO or AVCO products, not Standard Price.
Last updated: July 2026

Lots and serial numbers

Odoo's Lots & Serial Numbers feature adds unit-level traceability. Enable it once in Inventory settings, then switch on tracking per product on the Inventory tab:

  • A lot identifies a batch of identical units produced or received together — for example a single production run or a supplier delivery. Many units share one lot number.
  • A serial number identifies a single unit uniquely: one number per physical item, ideal for warranties and recalls of high-value goods.

You can require tracking on receipts, on deliveries, or on internal moves. Lot and serial numbers can be typed in manually, generated automatically from a sequence, or imported in bulk, and once a number is recorded every move line that touches it is stamped with it. The Traceability report (or the Traceability smart button on a lot/serial) then shows the full genealogy of that number — every move in and out, upstream and downstream — which is what makes recalls and quality audits possible. This is why only tracked goods can carry lots or serials: consumables and services keep no move history to trace.

Expiration dates

Turning on Expiration Dates (which requires lot/serial tracking) lets each lot carry four dates: best-before, removal, end-of-life / expiration, and alert. Odoo can warn about or block expired stock and, combined with the FEFO removal strategy, always reserves the lot that expires soonest. The removal date drives FEFO ordering, while the alert date surfaces lots on the dashboard before they turn, so planners can move or discount them in time.

Inventory adjustments and counts

Physical reality drifts from the system, so you run inventory counts. In Inventory → Operations → Physical Inventory, you enter the counted on-hand quantity per product and location; Odoo shows the difference against its expected figure, and on Apply it posts a corrective stock move against the Inventory Adjustment / Inventory Loss location so the double-entry stays balanced. If the count is higher than expected the move runs Inventory Loss to Stock; if lower, Stock to Inventory Loss. You can schedule counts by setting a counted date and use cyclic counting so different locations are recounted on a rolling basis rather than all at once, and under automated valuation each adjustment also books the matching accounting entry.

Removal strategies

A removal strategy decides which specific units leave first when a delivery reserves stock:

StrategyRemoves firstTypical use
FIFOOldest receivedPerishables and general best practice
LIFONewest receivedRare; certain tax regimes
FEFOEarliest expiration dateProducts with expiry dates
ClosestNearest locationFast picking in large warehouses

FEFO requires expiration dates to be enabled and populated; without them it cannot rank lots by expiry and effectively falls back to FIFO. Removal strategies are set on the product category or on a specific storage location, so different product families can each pick differently.

Inventory valuation

Valuation answers what is my stock worth. Two independent settings on the product category control it. First, the costing method decides the unit cost used when stock leaves:

  • Standard Price — a fixed cost you maintain manually; purchase-price differences are not automatically capitalized into the product value.
  • First In, First Out (FIFO) — each unit leaves at the exact cost it came in at, in order of receipt.
  • Average Cost (AVCO) — a rolling weighted-average unit cost, recomputed on every receipt.

A quick worked example: you receive 10 units at 10.00, then 10 more at 12.00. Under FIFO the first 10 you ship still leave at 10.00 each and the next 10 at 12.00; under AVCO every unit is now valued at the blended 11.00. Under Standard Price both receipts are valued at the fixed standard you set, and any purchase-price difference posts to a price-difference account instead of changing the product's value.

Second, the inventory valuation setting is either Manual/Periodic or Automated (real-time):

  • Manual valuation posts no accounting entries automatically; you record inventory value periodically with manual journal entries.
  • Automated valuation creates a journal entry on every stock move — debiting or crediting the Stock Valuation account against interim Stock Input (on receipt) or Stock Output (on delivery) accounts, which clear when the vendor bill or customer invoice is posted. Automated valuation requires the Accounting app and stock accounts configured on the category.

Landed costs

Landed costs add indirect expenses — freight, insurance, customs, handling — to a product's inventory value after receipt. Enable Landed Costs, then flag a vendor-bill line as a landed cost or create a dedicated Landed Cost record, and split the amount across the received products by quantity, weight, volume, or value. Odoo raises each product's valuation accordingly and, under automated valuation, posts the matching entries. A key limitation: landed costs apply only to products valued by FIFO or AVCO, not Standard Price, because standard-cost products do not capitalize incoming price variances. Mastering these settings lets you predict both the on-hand value and the exact journal entries Odoo will generate — a frequent exam theme.

Test Your Knowledge

A distributor wants deliveries to always ship the lot that expires soonest. Which removal strategy achieves this, and what must be enabled first?

A
B
C
D
Test Your Knowledge

Under automated (real-time) inventory valuation, when does Odoo create the accounting journal entries for inventory?

A
B
C
D
Test Your Knowledge

Which statement about landed costs in Odoo 19 is correct?

A
B
C
D