Skip to main content
Unbuild, Disassembly & Salvage Orders — A build-to-order Odoo module that turns rejects, returns, and rework into structured  — 1/1Illustrative preview

A build-to-order Odoo module that turns rejects, returns, and rework into structured unbuild/disassembly orders

— recovering components back to stock with defined salvage yields, preserved lot/serial traceability, and correct recovered-component valuation.

ECOSIRE scopes, builds, installs, and supports it on your Odoo 17/18/19.

What is Unbuild, Disassembly & Salvage Orders?

A build-to-order Odoo module that turns rejects, returns, and rework into structured unbuild/disassembly orders — recovering components back to stock with defined salvage yields, preserved lot/serial traceability, and correct recovered-component valuation. ECOSIRE scopes, builds, installs, and supports it on your Odoo 17/18/19. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Extends Odoo's native `mrp.unbuild` (or a governed `ecosire.salvage.order` model) to support partial and graded recovery instead of a fixed BOM explosion
Per-BOM-line salvage yield definition — declare expected recovery percentage and quantity for each component of the parent unit
Condition/disposition routing per component: reuse-to-stock, send-to-rework, scrap, or warranty-return, each with its own destination `stock.location`
Recovered-component valuation via `compute`/`@api.depends` from the parent's inventory cost, posting through standard or AVCO valuation so stock and COGS stay accurate
Lot/serial preservation — disassembly `stock.move.line` records link each recovered part's lot/serial back to the parent unit's serial for intact upstream/downstream traceability
Rework-loop integration: a failed unit's salvage order can spawn a manufacturing or repair order that consumes the recovered components
Automated action to auto-create a salvage/disassembly order when a linked `quality.check` fails (Enterprise Quality)
OWL-based salvage-yield editor for fast per-line entry of expected quantity, condition, and destination
QWeb 'Disassembly & Recovery' report listing recovered components, condition grade, and revalued cost for audit and finance
Multi-company and warehouse isolation enforced through `ir.model.access.csv` plus `ir.rule` record rules
Full XML-RPC / JSON-RPC API surface so reverse-logistics, WMS, or PLM systems can create and query salvage orders
Configurable salvage BOM templates so recurring reject/return types recover a consistent component set
Scrap vs salvage split on a single order, with scrap flowing to Odoo's standard scrap location and salvage to reusable stock
Version-matched builds for Odoo 17.0, 18.0, and 19.0, respecting each release's `mrp`/`stock` API changes

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Every plant accumulates value it can't sell: quality-failed finished goods, customer returns, superseded assemblies, and rework candidates sitting in a quarantine bin. Odoo's native mrp.unbuild order does exist, but it is deliberately simple — it consumes one finished product and returns the exact BOM component quantities to stock, with no concept of partial recovery, scrap-versus-salvage split, per-component yield, condition grading, or the fact that a disassembled unit rarely gives back 100% of its bill of materials. Teams end up doing the recovery math in spreadsheets, manually creating inventory adjustments, and losing the lot/serial thread between the parent unit and the parts pulled out of it. That breaks traceability and quietly distorts inventory valuation.

ECOSIRE builds a dedicated Unbuild, Disassembly & Salvage layer on top of Odoo's manufacturing core. We extend mrp.unbuild (or introduce a governed ecosire.salvage.order model where a cleaner separation is warranted) with per-BOM-line salvage definitions: for each component you declare an expected recovery yield, a condition/disposition (reuse, rework, scrap, warranty-return), and a destination location. A compute/@api.depends layer derives recoverable quantities and recovered value from the parent unit's inventory cost and your yield rules, so the stock moves that get generated reflect what actually came off the line — not an idealized BOM explosion. Lot and serial numbers are preserved on disassembly: the module writes stock-move lines that link each recovered component's lot/serial back to the parent's serial, so stock.lot traceability (upstream and downstream) stays intact and auditable. When a unit fails quality, the order can spawn a rework loop that feeds the salvaged components straight into a new manufacturing or repair order rather than back to raw stock.

Technically, the module ships as a proper Odoo addon: a versioned __manifest__.py declaring dependencies on mrp, stock, and quality (Enterprise) or a Community-safe fallback; new models.Model classes with fields, compute methods, and constraints; access control via ir.model.access.csv plus record rules for multi-company and warehouse-level isolation; backend list/form/kanban views in XML with OWL components for the salvage-yield editor; a QWeb "Disassembly & Recovery" report showing recovered components, condition, and revalued cost; and optional automated actions (e.g., auto-create a salvage order when a quality.check fails). Everything is reachable over the standard XML-RPC / JSON-RPC API, so WMS, PLM, or reverse-logistics systems can create and read salvage orders programmatically. Recovered-component valuation posts correctly through Odoo's inventory valuation (standard or AVCO), so your stock and COGS reflect reclaimed value.

Because this is build-to-order, nothing is a shrink-wrapped download. We start with a short scoping call, confirm your BOM structure, valuation method (Community vs Enterprise differences matter here), quality workflow, and Odoo version (17.0, 18.0, or 19.0), then write a fixed-scope specification. We build against a copy of your configuration, run UAT on a staging database, and hand over installable source, documentation, and a git repository. Typical delivery is one working week from confirmed scope, followed by a post-go-live support window. You own the code.

What you get

  • Installable module source code built for your exact Odoo version (17.0, 18.0, or 19.0), Community or Enterprise
  • On-site or remote installation and configuration against your production Odoo, including BOM/valuation/quality wiring
  • Technical documentation: data model, `compute` logic, security rules, automated actions, and API endpoints
  • End-user guide plus a live training session for production, quality, and inventory teams
  • UAT on a staging database with a documented rollback plan before any production change
  • Post-go-live support window for defect fixes and configuration questions
  • Git repository handover with full commit history and branch/tag for your version
  • Signed-off fixed-scope specification and acceptance checklist

Who this is for

Manufacturing Operations Manager

Runs the reject/rework floor and needs failed and returned units turned into structured disassembly orders so recovered components flow back to stock predictably instead of via spreadsheets and manual inventory adjustments.

Quality Manager

Wants a quality failure to automatically trigger a salvage/disassembly decision, with each recovered component graded for reuse, rework, or scrap, and full lot/serial traceability preserved for audits and warranty claims.

Inventory & Costing Controller

Needs recovered components to post at correct value through Odoo's inventory valuation so reclaimed stock and COGS are accurate, and needs the disassembly report to reconcile what was consumed against what was recovered.

Reverse-Logistics / Returns Lead

Handles customer returns and superseded assemblies and needs to create and query salvage orders over the XML-RPC/JSON-RPC API from the returns or WMS system, routing parts to reuse, rework, or warranty-return locations.

How Unbuild, Disassembly & Salvage Orders Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Partial / graded recoveryPer-BOM-line yield %, condition and disposition per componentWhatever you spec and can build in-houseRarely — most stop at fixed BOM returnNone — returns full BOM quantities only
Lot/serial preservation on disassemblyRecovered parts linked back to parent serial, traceability intactPossible but easy to get wrong without deep MRP knowledgeInconsistent; often breaks the parent linkBasic; no salvage-aware linkage
Recovered-component valuationRevalued via `compute` through standard/AVCO, posts to COGS/stockDepends on your accounting expertiseUsually returns at BOM cost, not recovered valueReturns at component cost, no recovery logic
Rework-loop / quality integrationAuto-trigger from failed `quality.check`, spawn rework/repair orderBuildable but significant effortSeldom integrated with QualityManual and disconnected
Fit to your BOMs & processScoped to your BOM structure, valuation and workflowFully tailored — you own the effortGeneric; you adapt to its assumptionsGeneric core behavior
Delivery modelBuild-to-order, one working week, UAT on staging + rollbackYour timeline and internal capacityInstant install, then you fill the gapsAlready present, limited
Source & ownershipFull source + git repo handover, you own itYou own itVendor-locked, encrypted or licensedOdoo core, not customizable without dev
Support & upgradesPost-go-live window + optional version-upgrade retainerYour team maintains itVendor SLA varies; upgrades often paidCovered by your Odoo maintenance only

Frequently Asked Questions about Unbuild, Disassembly & Salvage Orders

How is this different from Odoo's built-in Unbuild order?

Native `mrp.unbuild` returns the exact BOM component quantities to stock and nothing more — no partial recovery, no per-component yield, no condition grading, no scrap-vs-salvage split, and no linkage from a quality failure. We add all of that: declared recovery yields per BOM line, disposition routing, preserved lot/serial linkage to the parent unit, recovered-component revaluation, and rework-loop integration.

What is the delivery lead time?

This is a build-to-order module, not an instant download. Typical delivery is one working week from confirmed scope. After a short scoping call we write a fixed-scope specification; once you sign off, we build against a copy of your configuration, run UAT on staging, and hand over the installable source and git repository.

How are updates and support handled after go-live?

Every engagement includes a post-go-live support window for defect fixes and configuration questions. Because you receive the full source and git repository, you own the code outright. We offer version-upgrade work (e.g., 18.0 to 19.0) and ongoing support as a separate, optional retainer.

Does it work on Odoo Community or only Enterprise?

Both. The core unbuild/salvage/valuation logic runs on Community. Some features — notably auto-creating a salvage order from a failed `quality.check` — depend on the Enterprise Quality app, so we confirm your edition during scoping and provide a Community-safe fallback (e.g., manual or server-action trigger) where a feature relies on Enterprise-only modules.

Is lot and serial traceability preserved when a unit is disassembled?

Yes. The disassembly stock moves write `stock.move.line` records that link each recovered component's lot/serial back to the parent unit's serial, so Odoo's upstream/downstream traceability on `stock.lot` remains intact and auditable for warranty and compliance.

Can our other systems create salvage orders automatically?

Yes. The models are exposed over the standard XML-RPC and JSON-RPC API, so your WMS, returns portal, or PLM can create, read, and update salvage/disassembly orders programmatically — for example creating a salvage order the moment a return is booked.

Which Odoo versions are supported?

We build and test against Odoo 17.0, 18.0, and 19.0, respecting each release's `mrp` and `stock` API differences. You tell us your target version during scoping and we deliver a version-matched build.

Request a quote

Unbuild, Disassembly & Salvage Orders

A build-to-order Odoo module that turns rejects, returns, and rework into structured unbuild/disassembly orders — recovering components back to stock with defined salvage yields, preserved lot/serial traceability, and correct recovered-component valuation. ECOSIRE scopes, builds, installs, and supports it on your Odoo 17/18/19.

  • Extends Odoo's native `mrp.unbuild` (or a governed `ecosire.salvage.order` model) to support partial and graded recovery instead of a fixed BOM explosion
  • Per-BOM-line salvage yield definition — declare expected recovery percentage and quantity for each component of the parent unit
  • Condition/disposition routing per component: reuse-to-stock, send-to-rework, scrap, or warranty-return, each with its own destination `stock.location`
  • Recovered-component valuation via `compute`/`@api.depends` from the parent's inventory cost, posting through standard or AVCO valuation so stock and COGS stay accurate

Request a Quotation

Tell us about your Unbuild, Disassembly & Salvage Orders requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.