Removal Strategies (FIFO, LIFO, FEFO) in Odoo

When stock of a product is needed, which of it is taken? Removal strategies decide, by rule.

When stock of a product is needed and there is more than one lot or quantity of it, something has to decide which to take. Removal strategies decide, by rule. This piece is about removal strategies in Odoo.

What a removal strategy is

A removal strategy is a rule that governs which stock is taken when stock of a product is needed. Where there are several lots or quantities of a product in stock, the removal strategy decides which one is used. Rather than the choice being arbitrary, made by whoever happens to pick the stock, the removal strategy makes it a governed rule. Odoo supports removal strategies, set per product or category.

FIFO: first-in-first-out

FIFO, first-in-first-out, takes the oldest stock first: the stock that came in earliest is used first. The effect is that stock is used in the order it arrived, so stock does not sit indefinitely while newer stock is used ahead of it. FIFO suits products where using stock in arrival order matters, which is many products: it keeps stock moving and prevents older stock stagnating. FIFO is a sensible, common default.

LIFO: last-in-first-out

LIFO, last-in-first-out, takes the newest stock first: the most recently received stock is used first. It is the opposite of FIFO. LIFO is the less commonly appropriate strategy, because for most products, leaving the oldest stock unused while the newest is taken is not what a business wants, it lets old stock stagnate. LIFO has specific uses, but a business should choose it deliberately, for a genuine reason, rather than as a default.

FEFO: first-expiry-first-out

FEFO, first-expiry-first-out, takes the stock closest to its expiry first: the stock that will expire soonest is used first. FEFO is the right strategy for perishable products. It ensures stock is used in expiry order, so stock is used while it is still good rather than being left to expire while fresher stock is used ahead of it. For any product with an expiry date, FEFO is what minimises the amount lost to expiry. FEFO depends on expiry dates being tracked, since it works by taking the lot with the earliest expiry.

Choosing the removal strategy

The removal strategy is chosen per product, to match the product. For perishable products, FEFO, so stock is used before it expires. For most non-perishable products, FIFO, so stock moves in arrival order and old stock does not stagnate. LIFO, deliberately, where there is a genuine specific reason for it. The principle is to match the removal strategy to what genuinely matters for the product: expiry order for perishables, arrival order for most else. A removal strategy chosen to match the product means the right stock is always used; an arbitrary choice, or no strategy, means stock used in no sensible order, with the waste and stagnation that brings.

Why removal strategies matter

Removal strategies matter because which stock is used has real consequences. The wrong stock used means perishable stock left to expire, old stock left to stagnate, value lost. The right stock used, governed by a removal strategy matched to the product, means stock used in the order that genuinely makes sense, which avoids that waste. Removal strategies turn the choice of which stock to take from an arbitrary, ad hoc decision into a governed rule that serves the business.

The takeaway

Removal strategies in Odoo govern which stock is taken when stock of a product is needed: FIFO, first-in-first-out, takes the oldest first, keeping stock moving in arrival order; LIFO, last-in-first-out, takes the newest first, appropriate only for specific reasons; FEFO, first-expiry-first-out, takes the soonest-to-expire first, the right choice for perishables. Choose the strategy per product to match what genuinely matters, FEFO for perishables, FIFO for most else, so the right stock is always used and waste is avoided. For how we approach Odoo, see our ERP practice.

All posts

Got a Topic Worth Posting?

Suggest a Topic

If a question keeps coming up in your operations, it might be worth its own post.