Inventory is where gross margin is won or lost on paper. The selling price is rarely in dispute; the cost of goods sold behind it often is. Odoo 20 brings a group of changes that sit exactly on that line between inventory and COGS. This article goes through them from a finance point of view, then sets out the controls we would put around them. It assumes you already know the costing methods themselves; if not, start with our guide to FIFO and AVCO valuation in Odoo.
What changes in perpetual valuation closing?
According to the Odoo 20 release notes, under perpetual valuation, accrual entries affecting inventory valuation can be made from the inventory valuation closing report, and they post directly to the inventory valuation account rather than through the stock variation account. In practice this shortens the path from a closing adjustment to the balance sheet line it affects. It also means fewer intermediate balances to clear at month end, but only if the team knows the new route and stops reaching for the old one.
How does retroactive COGS affect margin?
The release notes describe a retroactive COGS update when a cost changes after delivery. Think of a receipt valued at a provisional cost, goods delivered to a customer, and the final vendor cost arriving later. In earlier versions that difference often stayed in inventory or needed a manual correction. In Odoo 20, cost of goods sold on the delivered quantity follows the corrected cost.
For margin reporting this is better: margin reflects what the goods actually cost. For the close it is a new risk: a cost change made after a month is reported can move COGS for goods that left the warehouse in that month. That is why the period lock matters more, not less, after this change.
What is new in landed costs?
Landed costs can now be assigned to individual products of a transfer. When one container holds several products and the freight or customs relates to only some of them, you no longer have to spread the charge across everything received. Unit costs, and therefore margins by product, become more precise. The control question is who decides the allocation and where the supporting document is kept.
Which new reports help at month end and in audit?
According to the release notes, Odoo 20 can show inventory at a past date and adds a stock aging report. Inventory at a past date answers the question auditors ask every year: what did you hold at the balance sheet date? Stock aging shows which items have not moved, which is the starting point for a slow-moving or obsolete stock review and any write-down discussion. Neither report decides the write-down for you, but both shorten the evidence work.
What else changes for valuation?
- Stock on hand and valuation can be managed without the Inventory app, which suits companies that hold some stock but do not run full warehouse operations.
- Suggested reordering rules propose minimum and maximum quantities from demand history, desired days of coverage and order frequency. They affect how much cash sits in stock, so treat the suggestions as proposals to approve, not settings to accept.
- Intercompany resupply from another company’s warehouse transfers valuation correctly, according to the release notes, which matters for groups that move stock between legal entities.
Feature availability can differ between Community and Enterprise, and much of the accounting automation remains Enterprise-only, so confirm what your edition includes before you design a process around it.
A more accurate cost is only useful if nobody can change it after the month is reported.
Which controls should go around these changes?
Each change above makes valuation more accurate. Each one also gives more people a way to move COGS. We recommend three controls, and we add them to the inventory section of the month-end close checklist:
- Period lock: lock each period once it is reported, so a retroactive cost change cannot silently alter COGS in a closed month. Changes after the lock go through a documented adjustment in the open period.
- Who can change costs: restrict product cost changes, landed cost allocations and valuation accruals to named roles, separate from the people who receive goods, and review a log of cost changes every month.
- Stock valuation to GL reconciliation: at each month end, reconcile the stock valuation report to the inventory valuation account in the general ledger, and explain every difference before the period is locked.
Should these changes drive your upgrade?
If inventory is material to your balance sheet and margins are a board-level number, they are a fair reason to plan the move to Odoo 20, especially from an older version. Test them on a copy of your own data first, and compare COGS for a closed month before and after. Where we act as Virtual CFO at MFT, that comparison is the evidence we want before any margin report is trusted.