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

  1. 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.

  2. 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.

  3. 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.

  4. 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 project

Free written plan and a quote. No meeting.

Back to all case studies