An experienced Odoo functional consultant can help manufacturers configure scrap workflows, inventory valuation, and production reporting correctly so every scrap transaction supports better cost control and operational visibility.

Scrap is one of those costs that hides in plain sight. A cracked component on the assembly line, a batch that fails quality control, a finished good that gets damaged before it ever reaches the warehouse, these losses happen in every manufacturing operation. The question is not whether scrap occurs, it’s whether your ERP actually captures it accurately enough to inform decisions. For manufacturers running Odoo 19, getting this right starts with understanding how the platform’s scrap workflow works and where it needs reinforcement. Many of the businesses I support through Odoo consulting services come to me after months of treating scrap as a footnote in their inventory adjustments, only to discover their cost of goods sold figures were quietly off the whole time.

This guide walks through how scrap functions inside Odoo 19 Manufacturing, what the system does well out of the box, and where you need to build process discipline around it to get real value from the data.

What Scrap Management Actually Means in Odoo 19

In Odoo, scrapping a product does not delete it from your records. Instead, the system moves the scrapped quantity to a virtual location, typically labeled Virtual Locations or Scrap, which is not a physical shelf or bin but a bookkeeping construct. This matters because it preserves traceability. Every scrapped unit, whether it’s a raw material consumed in a work order or a finished product that failed inspection, leaves a record of when it was scrapped, by whom, and at what quantity.

This is fundamentally different from simply adjusting your on hand inventory downward. An inventory adjustment without a scrap order tells you stock changed, but not why. A proper scrap order gives you a documented reason, a timestamp, and a link back to the originating operation, which becomes invaluable when you’re trying to diagnose recurring production defects months later.

Why Manufacturers Can't Afford to Treat Scrap as an Afterthought

Unmanaged scrap creates two separate problems. The first is financial. If your inventory valuation method is set to automatic, every scrap transaction generates a journal entry that debits an expense or loss account and credits inventory. Skip this step or log it inconsistently, and your cost of goods sold no longer reflects reality. Your finished goods look more profitable than they actually are, right up until your accountant finds the gap at month end close.

The second problem is operational blindness. Without consistent scrap logging, you can’t answer basic questions like which work center produces the most defects, which component has the highest wastage rate, or whether a new supplier’s raw materials are causing more failures than the old one. Scrap data, tracked properly, becomes one of the most useful diagnostic tools a production manager has. Tracked poorly, it’s just noise in your stock reports.

How Odoo 19 Handles Scrap During Production

Odoo 19 gives you three main entry points for scrapping, depending on where in the production cycle the loss occurs.

Scrapping Components From a Manufacturing Order

Once a manufacturing order is confirmed, you can open it, click the Actions icon, and select Scrap from the dropdown. This opens the Scrap Products window, where you choose the component being scrapped from the Product field and enter the quantity. The source location defaults to the warehouse’s pre-production location, while the scrap location defaults to the virtual scrap location, though both can be overridden if your setup requires it. If the component uses lot or serial tracking, Odoo will prompt for that identifier too, which matters for businesses that need full traceability back to a specific batch.

One detail worth flagging for anyone managing multi-step work orders: scrapping a component does not automatically trigger a demand to replace it. If you scrap five units of a raw material mid build, Odoo does not generate a pick or purchase suggestion to replenish those five units unless you’ve explicitly configured a replenishment rule and selected the Replenish Quantities option during the scrap action.

Scrapping From the Shop Floor Module

For manufacturers running floor operations through the Shop Floor module rather than the back office Manufacturing app, scrapping works slightly differently. From the relevant manufacturing order card, tapping the Actions icon and selecting Scrap in the resulting menu opens the same Scrap Products window. The key restriction here is that only components can be scrapped from Shop Floor, not the finished product itself. This is a deliberate design choice, since Shop Floor is meant for operators executing work orders in real time, and finished product scrapping is treated as a back office or quality control decision.

Scrapping the Finished Product Itself

Before a manufacturing order is marked done, only the components can be scrapped, never the finished good, because Odoo logically can’t scrap something that hasn’t been produced yet. Once the order is complete, the finished product becomes eligible for scrapping through the same Actions menu on the manufacturing order, which is the correct path for goods that pass through production successfully but fail final inspection or get damaged before shipping.

Scrap Locations, Journal Entries, and Inventory Valuation

This is where scrap management intersects with accounting, and where a lot of manufacturers lose visibility without realizing it. When automated inventory valuation is active, every scrap transaction posts a journal entry. The system debits an expense or loss account and credits the inventory account, reducing your recorded stock value to match physical reality. If you’re using average cost valuation, the unit cost used for that journal entry reflects your dynamically averaged cost, which fluctuates with vendor pricing and recent purchases.

The practical issue is that none of this happens automatically if your team is bypassing the scrap workflow in favor of generic inventory adjustments. An adjustment changes the quantity on hand but doesn’t carry the same accounting context, so your books and your physical stock can drift apart without anyone noticing until a reconciliation forces the question. If you want your inventory valuation report, accessible under Inventory then Reports then Inventory Valuation, to mean anything, scrap has to flow through proper scrap orders every time.

Setting Up Scrap Tracking the Right Way From Day One

Most of the friction I see in scrap management isn’t a software limitation, it’s a configuration and process gap that shows up months after go live.

Configuring Scrap and Virtual Locations

Start by confirming your scrap location sits under Virtual Locations rather than as a physical warehouse location. This ensures scrapped items are correctly excluded from on hand stock counts while keeping the movement history intact for audit purposes. You can view scrap locations under Inventory then Configuration then Locations, removing the Internal filter to surface all virtual locations including Virtual Locations/Scrap. If you run multiple warehouses or companies, decide early whether each one needs its own dedicated scrap location or whether a shared one is acceptable, since this affects how granular your scrap reporting can get later.

Before locking in this structure, it’s worth treating it the same way you’d treat any other functional requirement. I generally recommend documenting expected scrap workflows the same way you would when writing a functional spec for the build, which is exactly the kind of groundwork I cover when translating client requirements into clear functional specs before any configuration begins. Skipping that step is how teams end up retrofitting scrap policies after they’ve already gone live.

Replenishment Rules on Scrapped Components

If a scrapped component is a fast moving part with a reordering rule already configured, tick the Replenish Quantities checkbox in the Scrap Products window when logging the transaction. This tells Odoo to trigger replenishment for the scrapped quantity, which keeps your work orders from stalling because a component silently went missing from stock without anyone flagging it for reorder. Without this step, your planner has to catch the shortfall manually, which is exactly the kind of gap that causes missed production deadlines.

Where Odoo 19's Native Scrap Tools Fall Short

Odoo 19 handles the mechanics of scrapping well: locations, journal entries, traceability, lot tracking. What it does not give you out of the box is scrap as a distinct cost analysis dimension. There’s no built in scrap rate tracking broken down per product, per bill of materials, per work center, or per production period. There’s no standard scrap allowance field on the BOM that lets you set an expected wastage percentage and then measure actual results against it. And critically, there’s no variance report showing whether your scrap costs are trending up, which production line is generating the most waste, or how scrap is eating into your margins on a specific finished good.

For manufacturers running tight margins, this gap matters. You can see that scrap happened, and you can see its effect on inventory valuation after the fact, but you can’t proactively monitor scrap as a key production metric without either building custom reporting or layering in additional tracking fields on your BOMs and work centers.

Turning Scrap Data Into an Actual Cost Control Tool

The fix here isn’t necessarily new software, it’s deliberate configuration. A standard scrap allowance field added to your BOM, paired with a simple variance calculation comparing actual scrap quantity against that allowance, gives production managers something they can act on weekly rather than discovering at month end close. Tagging scrap orders with the originating work center, even informally through a custom field, lets you build a pivot report that surfaces which station is generating disproportionate waste.

None of this requires ripping out Odoo’s native scrap workflow. It requires extending it thoughtfully, which is the kind of work that pays for itself quickly once a manufacturer can see, in concrete numbers, where their highest cost waste is actually coming from. If your team is scrapping consistently but flying blind on the underlying trend, that’s usually a sign the configuration was never built out past the default, not that the platform can’t support it.

If you’d like a second set of eyes on how your scrap workflow is configured, or want help building variance reporting on top of your existing BOMs, Book a Consultation and we can walk through what a tighter scrap process would look like for your specific production setup.

Conclusion

Scrap management in Odoo 19 gives manufacturers a solid, traceable foundation: scrap orders, virtual locations, automatic journal entries, and lot level tracking when needed. Where it falls short is in turning that raw data into a proactive cost control signal, since there’s no native scrap allowance, rate tracking, or variance reporting built into the BOM structure. Manufacturers who treat scrap logging as a disciplined, consistent process, and who extend the default setup with a bit of custom tracking, end up with far more accurate inventory valuation and a much clearer picture of where production waste is actually costing them money.

Frequently Asked Questions

Does Odoo automatically calculate an expected scrap percentage per product?

No, Odoo 19 does not include a native standard scrap allowance field on the bill of materials. You can track actual scrap quantities through scrap orders, but comparing them against an expected percentage requires either a custom field or manual tracking outside the system.

Will scrapping a component automatically trigger a purchase order to replace it?

Only if a replenishment rule already exists for that component and you select the Replenish Quantities checkbox while logging the scrap transaction. Otherwise, scrapping a component reduces stock without generating any automatic replacement demand.

What's the difference between scrapping from the Manufacturing app versus the Inventory app?

Scrapping through a manufacturing order ties the loss directly to that production run, which is useful for component or work order related defects. Scrapping through Inventory then Operations then Scrap is meant for standalone losses, like a damaged item found on a shelf, that aren’t connected to any specific manufacturing order.

Can I scrap the finished product after the manufacturing order is marked done?

Yes. Once an MO is complete, you can scrap the finished product through the Actions menu on that order. Before completion, only the components can be scrapped, since the finished good technically doesn’t exist yet in the system.

Does scrapping automatically update my cost of goods sold?

If automated inventory valuation is enabled, yes. Odoo posts a journal entry debiting an expense or loss account and crediting inventory at the time of scrapping, which keeps your books aligned with your physical stock. If you’re on manual valuation, this adjustment has to be handled through your standard month end process instead.

How can I see the total value of everything scrapped over a given period?

Navigate to Inventory then Reports then Inventory Valuation to see current stock value, or check the Scrap Orders list under Inventory then Operations to review individual transactions. For period over period trend analysis, you’ll generally need to export this data or build a custom report, since Odoo doesn’t offer a dedicated scrap variance dashboard natively.

Reach Out for Support

Facing a problem? Contact us and receive expert help and fast solutions.