Skip to main content
September 23, 202610 min read

Inventory valuation in Odoo: FIFO, average cost and their effect on cost

Share

Inventory valuation is where the warehouse meets the accounts. In Odoo the decision does not start on the product form but on the product category, where the Costing Method and the Inventory Valuation mode are set, and from those two the value of stock on the balance sheet and the cost of goods sold in the income statement are derived. Settling that decision is not a technical task: it is an accounting policy owned by the entity and its accountant, and our role is to explain the effect of each option before implementation.

The costing method is set on the product category

Odoo offers three costing methods on the product category: Standard Price, First In First Out (FIFO) and Average Cost. Every product inherits its category setting and can be overridden on an individual product, which is why the classification is built first: categories for raw materials, for finished goods and for spare parts.

The method does not change the number printed on an invoice, it changes how the internal cost figure is built and what later appears in cost of goods sold and in stock value. Before choosing, the entity has to answer a policy question: do we want a fixed cost we can plan against, or a cost that follows the actual prices of receipts? All of these settings are managed from Odoo Inventory.

What each method does to cost and to stock value

Standard Price fixes the unit cost in the standard price field so it does not move on receipt; the difference between the vendor bill and that price is treated as a price difference, and stock value stays at the fixed price until it is updated manually or through a revaluation. It suits a stable, known cost, but it separates book stock from reality once prices move.

FIFO keeps valuation layers for every receipt at its own price and consumes the oldest first, so cost of goods sold reflects the actual prices of the layers consumed and the remaining stock reflects the newest receipts. Average Cost recomputes the average unit cost on every receipt by combining the current stock value with the value of the new receipt, updating the standard price automatically. The practical result is that FIFO keeps stock value close to recent prices, while average cost smooths cost fluctuation between periods.

Under every method, selling without enough quantity on hand, that is negative stock, creates cost errors: a layer is created at an estimated price and corrected when the receipt arrives, leaving a temporary cost of goods sold that needs review.

Manual versus automated valuation and the stock accounts

Alongside the method, the product category carries the valuation mode: manual or automated. Under manual valuation Odoo does not create automatic journal entries for stock movements; stock value is recorded at period end by a manual entry or through the valuation report. Under automated valuation the system creates an entry for every value-affecting movement through a stock valuation layer, using a stock valuation account, a stock input account and a stock output account, with a dedicated stock journal.

This is where Anglo-Saxon and continental treatment differ. In the Anglo-Saxon treatment cost is closed through the input and output accounts and settled at period end, and Odoo controls that behaviour with a company-level setting tied to the input and output accounts on the category. In the continental treatment cost is recognised at the invoice and the stock account works directly. The choice is not technical: it is an accounting policy that changes when cost is recognised and how the periodic reconciliation is shaped, and the entity accountant has to approve it.

Why the method must be settled before the first real transaction

The method field can be changed later in Odoo, but the change does not recompute earlier layers and entries, so previous periods end up on one basis and later periods on another. The method and the policy are therefore settled before any real movement is posted. The sequence we follow before go-live:

  1. The entity accountant approves the costing policy and the method for each category.
  2. Product categories, products and their cost fields are created.
  3. Valuation accounts and the stock journal are configured for automated valuation.
  4. Opening stock quantities are entered from a physical count, not from an old file.
  5. A full pilot cycle is run: receipt, internal transfer, delivery and return.
  6. The valuation report is reconciled against the stock account balance.
  7. The pilot period is closed and the configuration corrected before live operation.

Units of measure, rounding and landed costs on receipts

Units of measure are a common source of cost drift. Each unit carries its own rounding, and each product has a stock unit and a purchase unit; when you buy in cartons and consume in pieces, the conversion and its rounding create value differences that accumulate on the layers. Set the unit precision before migration and review the products that need more than one unit, because rounding at receipt can produce a unit cost that is not the value divided by the quantity.

Landed costs bring freight, insurance, customs duties and unloading into the cost of goods. In Odoo they are created as a landed cost record linked to specific receipts, with a split method chosen from equal, by quantity, by weight or by volume. Applying them adjusts the valuation layers by the added cost, which then appears in cost of goods sold and in stock value, provided the product allows landed costs and the increase in stock value is reasonable against the balance. The details of that cycle are usually designed as part of a warehouse management project.

Manufacturing cost, and the gap between the count and the book value

In manufacturing, product cost is built from the bill of materials components at their own cost, plus the cost of work-centre operations: operation time multiplied by the hourly cost defined on the work centre. Odoo Manufacturing can compute the price from the bill of materials and the work centres, but indirect overhead is not allocated automatically; anyone who wants it loaded must add it as a component or through the work-centre cost, and those are accounting decisions rather than settings.

The gap between the physical count and the book value is expected, but it needs an explanation rather than a silent adjustment:

  • Movements posted with a backdated effective date that later alters a balance.
  • A change of costing method or valuation settings between two periods.
  • Valuation entries left unposted under manual valuation.
  • Negative stock or receipts without a vendor bill, leaving layers at an estimated price.
  • Landed costs that were never applied to the relevant receipts.
  • Rounding differences accumulated from unit-of-measure conversions.

The investigation starts from the inventory valuation report and the valuation layers, reconciles their total against the stock account balance in the general ledger, and traces the movements that generated the difference before any balance is adjusted.

What we do not guarantee

  • We do not guarantee any particular commercial outcome, and we do not guarantee search ranking.
  • We do not quote a binding price before analysing your data and your current costing method.
  • We do not state a binding duration before a written scope agreed by both parties, and any time estimate we mention remains a planning range.
  • We do not provide an accounting or tax ruling; the choice of costing policy remains with the entity and its accountant.
  • We do not claim any vendor partner tier, official standing or formal credential.
  • We do not guarantee that the configuration will never need revision; changes in activity or prices require a fresh review.

Need Help with this Topic?

Contact our experts for a tailored consultation.

Contact Us