Proof / Case study
Product data cleanup for a textile manufacturer
A legacy-ERP migration left a textile manufacturer with twinned product records and colliding barcodes, so barcode scanning could no longer be trusted. A custom cleanup module restored unambiguous scanning and blocks new duplicates at the point of import.
Anonymized by policy. The facts are as delivered.
- Industry
- Manufacturing (textiles)
- Service
- Data Cleanup / Custom Module Development
01
Starting point
An earlier migration from a legacy ERP left duplicate product records behind: archived shadow rows twinned with active rows under the same internal SKU, and separate products sharing the same barcode/UPC.
Warehouse barcode scans could resolve to the wrong product, which made scanning-based receiving untrustworthy.
02
Constraints
- Open sales and purchase order lines pointed at archived products, and historical invoices referenced archived products as well.
- The records lived in Odoo 19 Enterprise alongside live receiving and ordering work, so any fix had to preserve the running order book.
03
Scope
- A full inventory of the product records in Odoo, cataloguing archived shadow rows twinned with active rows under the same internal SKU and separate products sharing a barcode/UPC.
- A detection wizard built into a custom data-cleanup module that produces a multi-sheet audit workbook for the ops team, re-run after every pass.
- A reheal wizard that re-points open sales and purchase order lines at canonical products.
- Dedupe passes run jointly with the client ops team on a weekly cadence, with a fresh audit after each one.
- Feature-flagged uniqueness constraints that block new duplicates at import, enforced through an import lockdown and a restricted data-steward access group.
- A design recommendation that keys scanning on the immutable product id plus an active flag, so archived items can never collide with active ones.
04
Approach
Stack
Odoo 19 Enterprise 路 custom data-cleanup module 路 detection and reheal wizards 路 import lockdown
- 01
Audit
Full inventory of the product records in Odoo, cataloguing archived shadow rows twinned with active rows under the same internal SKU and separate products sharing a barcode/UPC.
- 02
Detect & Report
A detection wizard built into a custom data-cleanup module produces a multi-sheet audit workbook for the ops team to work through, re-run after every pass.
- 03
Repair
A reheal wizard re-points open sales and purchase order lines at canonical products. Dedupe passes ran jointly with the client ops team on a weekly cadence, with a fresh audit after each one.
- 04
Prevent
Feature-flagged uniqueness constraints block new duplicates at import, enforced through an import lockdown and a restricted data-steward access group. A design recommendation keys scanning on the immutable product id plus an active flag, so archived items can never collide with active ones.
05
Evidence
Ambiguous-scan mismatches were eliminated as a class, and new duplicates are blocked at import rather than discovered later.
Oversight
The client ops team worked every dedupe pass jointly, with a fresh audit workbook after each pass. Root-cause diagnostics then traced a suspected scanning-integration defect to benign manual edits instead.
06
Limitations
- Historical data was not fully deduplicated.
- Residual edge cases are queued for a client merge decision and remain pending.
Start a project
Have a project like this one?
Tell us what you are building. A senior engineer writes back with a written plan and a fixed quote.
Start a projectFree written plan and a quote. No meeting.