FIFO vs. weighted average — when each actually makes sense on the factory floor. A practical field guide for Odoo 17 / Community & Enterprise.
Inventory valuation isn't just an accounting checkbox — it directly shapes your COGS, gross margin, and the accuracy of every financial report your ops team touches. Choosing the wrong method in Odoo is a one-way door that's painful to reverse mid-year.
When you buy the same raw material at different prices across multiple purchase orders, you have to decide: which price do you use when that material leaves your warehouse?
Odoo gives you two primary methods: FIFO (First In, First Out) and Average Cost (weighted moving average). Both are IFRS and GAAP compliant. Both are available in Odoo's inventory module. But they produce meaningfully different numbers — and different operational behaviors.
You buy steel coil three times: 100 kg at ৳80/kg in January, 100 kg at ৳95/kg in February, and 100 kg at ৳110/kg in March. You then consume 150 kg in production in April. Which cost hits your COGS?
Under FIFO: 100 kg at ৳80 + 50 kg at ৳95 = ৳12,750 COGS. The remaining stock still holds the February and March costs.
Under Weighted Average: blended cost = (8,000 + 9,500 + 11,000) / 300 = ৳95/kg. So 150 kg × ৳95 = ৳14,250 COGS. Simpler math, different bottom line.
| Method | Odoo availability | Valuation mode |
|---|---|---|
| FIFO | Community + Enterprise | Manual or Automated (Enterprise) |
| Average Cost (AVCO) | Community + Enterprise | Manual or Automated (Enterprise) |
| Standard Price | Community + Enterprise | Manual only |
| LIFO | Not available | Not IFRS-compliant |
Changing the costing method on an active product in Odoo requires careful planning — it can trigger journal entry reversals and affect open manufacturing orders. Always change at the start of a fiscal period with zero stock if possible.
FIFO matches the physical flow most manufacturers actually use — older stock gets consumed first. It produces the most accurate per-unit cost tracking but demands more from your Odoo configuration.
Odoo maintains a queue of inventory lots with their original purchase costs. When you validate a delivery or post a manufacturing consumption, Odoo pulls from the oldest layers first. Each layer is a purchase order line with its own unit cost.
In Enterprise with automated accounting, each stock move generates a journal entry in real time. In Community (manual), you run a periodic valuation report and post manually.
Negative stock kills FIFO. If Odoo allows stock to go negative (common in Community without strict validation), the cost layer queue breaks — Odoo can't pull from a layer that doesn't exist yet. The cost gets assigned as $0 or revalued after the receipt, creating phantom journal entries.
Also: FIFO with many small purchase orders creates a long cost layer list. Reports can become slow and valuation exports grow large. For high-transaction environments, monitor the stock.valuation.layer table size.
Weighted average blends all purchase prices into a single running cost per unit. It's simpler to manage day-to-day and produces smoother margins — at the cost of per-batch cost precision.
Every time a receipt is validated, Odoo recalculates the average cost using:
This new average cost then applies to all existing stock — Odoo revalues the entire on-hand quantity. Under automated accounting, this triggers a journal entry for the revaluation difference.
Unlike FIFO, AVCO tolerates negative stock better — but the resulting average cost becomes meaningless (mathematically undefined). When stock goes negative and then a receipt arrives, Odoo uses the receipt cost as the new AVCO. This often inflates or deflates the average depending on timing.
Each receipt under AVCO potentially posts a revaluation journal entry for the difference between the old AVCO and the new AVCO applied to existing stock. In high-receipt-frequency environments, this creates a large volume of small journal entries. Consider your accountant's bandwidth.
When prices are rising: FIFO produces lower COGS (older, cheaper layers consumed first) → higher gross profit → higher tax. AVCO blends, landing somewhere in between.
When prices are falling: FIFO produces higher COGS → lower profit. Neither method is universally "better" — it depends on your margin management goals and tax planning strategy.
Use this reference during your Week 1 discovery call. Run through each dimension with your client and score them. The method with more ticks wins — but always verify against their accountant's requirements.
Odoo lets you set costing method per product category. In practice, as an Odoo consultant in Bangladesh, I see most mid-size manufacturers end up with:
FIFO for strategic raw materials (metals, chemicals, key imported components) where price visibility matters. FIFO
AVCO for generic consumables, packaging, and low-value MRO items where cost-layer overhead isn't worth the granularity. AVCO
Standard Price for finished goods if you want to isolate production variances from material cost variances.
A step-by-step guide to configuring inventory valuation in Odoo 17. Do this before any stock is received — changing mid-flight requires a full revaluation exercise with your accountant.
The single most common valuation misconfiguration I see: the Stock Input account is set to an expense account instead of a liability/GRNI account. This causes double-booking of COGS — once on receipt, once on vendor bill. Always use a clearing (GRNI) account for Stock Input, never an expense account directly.
What inventory valuation methods are available in Odoo?
Odoo supports three methods: Standard Price (fixed cost per unit — simple, but inaccurate for variable-cost goods), Average Cost (AVCO) (weighted average updated on each receipt — best for most Bangladesh manufacturers), and FIFO (tracks each batch individually — required for pharmaceutical and food companies with expiry tracking). LIFO is not available and is not IFRS-compliant.
When should a Bangladesh manufacturer use AVCO vs FIFO in Odoo?
Use AVCO for raw materials with stable prices and no expiry-tracking requirement — it is simpler to manage and suits most textile, cycle, and general manufacturing companies. Use FIFO when you need lot/serial tracking for compliance (pharma, food, medical devices) or to accurately trace import-cost fluctuations for duty drawback. The decision matrix in Section 04 walks through this factor by factor.
How does Odoo handle inventory valuation for imported goods?
Odoo's Landed Costs feature lets you add import-related costs — freight, customs duty, port handling, insurance — to the unit cost of received goods. These landed costs update the product's average cost (AVCO) or specific lot cost (FIFO), giving the true delivered cost. For how those import costs flow into a full project budget, see Odoo ERP cost in Bangladesh.