Receipts, deliveries, replenishment: Odoo inventory management covers the warehouse, but also what the Commercial Code and the PCN 2020 expect from your stock at year-end. The two belong together.

In short. Odoo inventory management covers an SME's flows (receipts, deliveries, replenishment, stock counts) and links them to invoicing and accounting. In Luxembourg, two precise requirements come on top: the at-least-annual stocktake required by the Commercial Code, and the valuation of stock in the annual accounts, under class 3 of the PCN 2020. The goal is not just accurate quantities in the warehouse: it is the same figure in the books.

Poorly tracked stock costs you twice: first in stock-outs and overstock, then at year-end, when the accountant finds a gap between the physical count and the books. Here is how Odoo's inventory management works, and how to align it with Luxembourg obligations.

What Odoo's Inventory app covers

Odoo's Inventory app handles supplier receipts, customer deliveries, internal transfers, replenishment rules and physical counts. Every movement updates quantities in real time and, if automated valuation is enabled, posts the matching journal entries without manual input.

Everything connects to the other apps: a sales order reserves stock, a receipt closes a purchase order, a delivery triggers invoicing. That continuity is what separates it from a spreadsheet kept next to the invoicing tool: there is only one truth about quantities.

Odoo also handles multiple warehouses and locations, lot and serial numbers, expiry dates and barcodes. A trading SME will only switch on a fraction of all this: the right reflex is to start simple and add refinements once the need is proven.

Linking stock to the accounts: the question SMEs discover too late

Many businesses track their quantities correctly, but with no link to the books. As a result, the stock value is only updated once a year, at the count, and the real margin stays invisible eleven months out of twelve.

Odoo offers two approaches. With manual (periodic) valuation, quantities live in the Inventory app and the accountant books the stock variation at year-end. With automated valuation, every inbound and outbound movement posts its entry: the balance sheet reflects the stock value continuously, at standard cost, FIFO or average cost depending on the method chosen.

In Luxembourg annual accounts, stock sits in class 3 of the PCN 2020 (raw materials, work in progress, goods for resale). The valuation method set in Odoo must match the one defended in the accounts: that setting is decided with the accountant, not alone in the configuration screen. It is the direct extension of what we describe in setting up Luxembourg accounting in Odoo.

Your stock and your accounts tell two different stories? That is the classic symptom of a valuation that was never framed. Advena aligns the Odoo setup and the accounting method in a single pass. Book a 30-minute call.

The annual stocktake: a Commercial Code obligation, not an option

The Luxembourg Commercial Code requires businesses to draw up an inventory of their assets at least once a year. That count feeds directly into the annual accounts, to be filed with the RCS within the legal deadlines, a subject covered in filing annual accounts in Luxembourg.

In Odoo, the physical count is prepared rather than endured. The counting tool freezes a list, records the quantities found and validates the adjustments, with a trace of who counted what and when. And nothing forces you to count everything on 31 December: cycle counting (one product family per month, for instance) spreads the effort across the year and makes the year-end count almost a formality.

Buying and selling across borders: VAT follows the goods

For a Luxembourg SME, stock crosses borders constantly: purchases from a Belgian wholesaler, sales to French customers, returns. Odoo's fiscal positions automatically apply the right VAT treatment depending on origin and destination (intra-EU acquisition, intra-EU supply, export), and those flows feed the returns filed on eCDF. Above certain intra-EU trade volumes, Intrastat statistical returns come on top: clean movement tracking in Odoo makes preparing them considerably easier.

Replenishing without thinking about it (and without over-configuring)

Odoo's replenishment rules (minimum and maximum stock per product, or buy-to-order) turn the supplier ordering chore into a list of suggestions to validate. Set properly, they cut both stock-outs and money sleeping on shelves.

The opposite trap exists too: complex logistics routes, rules on hundreds of references in the first month, locations multiplied "just in case". A stock configuration is judged by what it simplifies, not by what it can do. The mistakes we see most often on databases we take over:

  • Negative stock tolerated. Convenient at first, it hides discrepancies and ruins the valuation. It gets banned as soon as processes hold.
  • Inconsistent units of measure. Bought by the box, sold by the unit: if the conversion is not set on the product, quantities drift.
  • Wrongly typed products. A "consumable" is not tracked in stock; a "storable" product is. A wrong type at the start skews everything after.
  • Counts never validated. A count entered but not validated corrects nothing: the discrepancies stay in the books.

Illustrative case (provided as an example; it does not correspond to a real client). A supplies wholesaler in Foetz, eight people, one warehouse. Before: quantities in a spreadsheet, stock value computed once a year, a gap of several thousand euros at every closing. After moving to Odoo: automated valuation at average cost, monthly cycle counts by family, and a year-end count wrapped up in half a day with a negligible residual gap.

Frequently asked questions

Is Odoo inventory management free?

The Inventory app exists in the Community edition, open source and free. The real costs of a project come from hosting, configuration and, if you choose the Enterprise edition, the per-user licence. Choosing between the two editions deserves its own analysis.

Does Odoo handle several warehouses?

Yes. Each warehouse has its locations, its rules and its internal transfers. An SME with a main depot and a buffer stock in the shop manages both in the same database, with consolidated visibility on quantities.

Can you do cycle counting in Odoo?

Yes. The counting tool lets you plan partial counts (by family, by zone, by frequency) and validate adjustments as you go. The Commercial Code's annual inventory obligation is covered without a year-end counting marathon.

How does stock appear in the annual accounts?

Under class 3 of the PCN 2020, according to its nature (raw materials, work in progress, goods). The value follows from the valuation method (average cost, FIFO, standard cost), kept consistent between the Odoo setup and the accountant's position.

Why Advena?

  • Stock and accounting handled together: the logistics setup and the valuation method are aligned from the start, not painfully reconciled at closing.
  • Luxembourg grounding: PCN 2020, the annual stocktake, intra-EU VAT and eCDF built into the project, not discovered afterwards.
  • Clear fixed prices, no hourly billing: you know what you pay before you start.
  • Direct access to the founders: the partners support you, not a junior.

Read next: Odoo in Luxembourg: is it the right ERP for your SME? · Setting up Luxembourg accounting in Odoo · Filing annual accounts in Luxembourg · How much does an Odoo implementation cost? · Migrating to Odoo without losing your accounts

Stock to straighten out, in the warehouse and in the books?

Book a free assessment