Skip to content

Core Concepts

Matteo Boscolo edited this page May 25, 2026 · 1 revision

Core Concepts

This page explains the building blocks of OdooPLM in user terms. For the technical architecture — the revision.plm.mixin, the underlying Odoo models and their roles — see the Architecture Overview in the README, which is the authoritative source. This page won't duplicate it.

Products & engineering code

OdooPLM extends the standard Odoo product with engineering data. The controlled identity of an engineering item is the pair engineering_code + engineering_revision, which is enforced as unique at the database level. Items carrying an engineering code participate in the revision and release lifecycle; items without one behave like normal Odoo products.

This separation is what powers features such as “only the latest revision is selectable in sale / purchase / manufacturing.”

Documents

A PLM document is a CAD file (part, assembly, drawing) or a non-CAD attachment stored in Odoo as an ir.attachment with PLM metadata. Documents:

  • carry their own revision and engineering state;
  • can be checked out (locked for editing) and checked in by the CAD client;
  • maintain parent/child relationships (the 3D assembly tree) between assemblies, sub-parts and drawings.

Revisions

A revision is a controlled version of a product or document. Instead of overwriting an engineering item, you create a new revision, preserving full history. Each revision runs its own lifecycle, and downstream modules can be configured to reference only the latest released revision. Revisions can be created from the CAD client or from the Odoo web interface (plm_web_revision).

Engineering BOM vs Manufacturing BOM

OdooPLM distinguishes:

  • Engineering BOM — the “as designed” structure derived from the CAD assembly (plm_engineering).
  • Manufacturing (MRP) BOM — the “as built” structure used by Odoo Manufacturing.

It keeps them aligned: plm_automate_normal_bom can generate a standard MRP BOM from a released engineering structure, and plm_compare_bom diffs two BOMs to show what changed between revisions.

The lifecycle / engineering state

Every versioned PLM object shares a single state machine (engineering_state), defined once on revision.plm.mixin:

State Meaning
Draft Work in progress. Freely editable.
Confirmed Submitted for review/approval.
Released Approved and frozen for use in production, sale and purchase.
Under modify A released item reopened to create a new revision.
Obsoleted Superseded / withdrawn (plm_suspended).
Draft  ──confirm──▶  Confirmed  ──release──▶  Released  ◀──▶  Under modify
                                                  │                 │
                                                  ▼                 ▼
                                              Obsoleted        Released (next rev)

A key property: objects are write-protected once they leave Draft (in confirmed, released, undermodify and obsoleted). To change a released item you must revise it — you can't silently edit it. Transitions can trigger custom workflow actions via plm_workflow_custom_action (built on Odoo base_automation).

How it fits with the rest of Odoo

OdooPLM is built on top of native Odoo apps, not beside them — PLM products are Odoo products, engineering BOMs feed MRP, the "only latest" modules guard Sale/Purchase/MO, plm_project links engineering to Project, and review steps use Odoo activities (activity_validation). PLM data is first-class ERP data, so it flows through the whole business without duplication.

Next steps

Clone this wiki locally