OrderAirlock[ ≡ ] ANSI X12 355 PO AIRLOCK
← All 15 Wholesale ERP & EDI Import Error Guides · Odoo 19
ERR-07 • ODOO19-UOM-CATEGORY-MISMATCH • GATE 3 — ANSI X12 DE 355 UOM PACK-SIZE ARITHMETIC

Odoo 19 CSV Import Error: 'Unit of Measure Doesn't Belong to the Same Category as Product UoM'

Target ERP / Standard: Odoo 19 Sales (`sale.order` / `sale.order.line`) · Deterministic Compiler Profile: odoo_19

AUTOMATED PRE-ERP QUARANTINE & TRANSPARENT PRICING

OrderAirlock blocks ODOO19-UOM-CATEGORY-MISMATCH deterministically with zero LLM calls before bad quantities or prices enter Odoo 19 Sales (`sale.order` / `sale.order.line`). Starter: $249/mo ($2,490/yr annual, 500 POs/mo) · Distributor & FDE Pro: $499/mo ($4,990/yr annual, 2,500 POs/mo) — 0% transaction cut.

Run <60s Broken-PO Sandbox (/desk)Inspect Live Split-Screen WorkbenchView $249 / $499 Plans
Automated Fix & Pricing (`OrderAirlock`): Starter $249/mo ($2,490/yr annual, 500 POs/mo) · Distributor/FDE Pro $499/mo ($4,990/yr annual, 2,500 POs/mo) — resolves SKU-specific CS/BX pack multipliers into base Odoo Units (EA) with an equation audit column.

Direct Root Cause & Fix: Odoo 19 raises ValidationError: The unit of measure [Case/Box/Roll] defined on the order line doesn't belong to the same category as the unit of measure [Units] defined on the product whenever order_line/product_uom in a Sales Order CSV does not share the exact uom.category of product.template.uom_id.

Why Odoo's Global uom.uom Table Breaks Wholesale Distribution

In Odoo, Dozen (12) has a fixed ratio across all products, whereas in HVAC/plumbing distribution, 1 CS of 1/2" fittings is 25 EA while 1 CS of 2" valves is 4 EA. Creating dozens of custom Box of 4, Box of 25 records pollutes uom.uom and still fails whenever a customer PO simply says CS.

Deterministic Odoo 19 Import Pattern

  • Compute converted_base_qty = raw_qty * sku_pack_factor per SKU before CSV generation.
  • Populate order_line/product_uom_qty with converted_base_qty, order_line/product_uom with base EA (Units), order_line/price_unit to 4 decimals, and write [PO: 4 CS x 25] -> 100 EA into order_line/x_uom_equation_audit.
RAW BROKEN INBOUND PAYLOAD (QUARANTINED)
client_order_ref,partner_id/ref,date_order,order_line/product_id/default_code,order_line/product_uom_qty,order_line/product_uom,order_line/price_unit
PO-901,CUST-88,2026-11-11,PVC-ELB-05,4,CS,50.00
ORDERAIRLOCK VERIFIED ODOO_19 OUTPUT
client_order_ref,partner_id/ref,date_order,order_line/sequence,order_line/product_id/default_code,order_line/name,order_line/product_uom_qty,order_line/product_uom,order_line/price_unit,order_line/x_source_customer_sku,order_line/x_uom_equation_audit
PO-901,CUST-88,2026-11-11,1,PVC-ELB-05,1/2 PVC Elbow,100,EA,2.0000,ELB-05,"4 CS * 25 -> 100 EA"
COMMON PRACTITIONER DIAGNOSTIC QUERIES
  • Odoo 19 sale.order.line unit of measure doesn't belong to the same category
  • Odoo CSV import order_line/product_uom order_line/product_uom_qty error
  • convert wholesale PO cases to Odoo Units before CSV import