Production Reference Public

Engineering Changes (ECO)

Advanced Manufacturing Engineering Changes (ECO) An Engineering Change Order (ECO) is the formal, auditable request to change a manufacturing Bill of Materials — add a new one…

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 15 min 2 views
Advanced Manufacturing

Engineering Changes (ECO)

An Engineering Change Order (ECO) is the formal, auditable request to change a manufacturing Bill of Materials — add a new one, revise an existing one, or retire it — captured with a review-and-approval workflow so every BOM change leaves a paper trail.

ℹ️
An ECO is the governance layer that sits on top of BOM versioning. The ECO documents and authorizes a change (what, why, how urgent, when); the actual BOM edit is still performed by hand in the BOM module after approval. Marking an ECO Implemented only flags the change order — it does not edit the BOM for you.

Where it lives

Engineering Change Orders are part of Advanced Manufacturing. You reach the area from the Manufacturing left-menu group as Engineering Change Orders, which opens the ECO list at production/Eco. The area requires the manufacturing module to be enabled and the manufacturing_eco permission; without them you are redirected away.

The three screens

An ECO is handled across three screens: a list, a modal form, and a read-only detail page that also carries the workflow buttons.

ScreenRouteWhat it is for
ECO List production/Eco Landing page — a DataTable of all ECOs (newest first) with in-table filter dropdowns and a New ECO button. Columns: ECO #, Title, BOM, Type, Priority, Status, Requested By, and a per-row action gear (View / Edit / Delete).
Add / Edit Modal production/Eco/modal_form Popup to create a new ECO (auto-fills the next ECO number) or edit an existing one.
View / Detail production/Eco/view/{id} Read-only detail with a Change Order Details panel and a Workflow sidebar, plus the status-driven action buttons (Submit / Approve / Reject / Mark Implemented).

The ECO lifecycle

Every ECO moves through a controlled sequence of states. The happy path runs left to right; two states (Implemented and Rejected) are terminal — nothing follows them.

Draft
being prepared, editable
Submitted
awaiting review
Under Review
being evaluated
Approved
authorized
Implemented
change carried out

The alternative ending — from Under Review the approver may decline instead of approve:

Under Review
being evaluated
Rejected
declined, terminal

Status legend

DraftInitial state on creation. Editable; nothing committed yet. The only state that can be submitted.
SubmittedSubmitted and awaiting the start of review.
Under ReviewBeing evaluated by a reviewer/approver — the only state that shows the Approve and Reject buttons.
ApprovedThe change is authorized and ready to implement; records the approver and approval time.
ImplementedThe approved change has been carried out in the BOM. Terminal success state; records the implementer and time.
RejectedThe change was declined. Terminal; records the reviewer, review time, and optional review comments.
????
Colour differs by screen. The status label colours are not consistent between the two views: Under Review shows yellow in the list but blue on the detail page; Approved shows blue in the list but green on the detail page. The meaning is identical — only the chip colour changes.
⚠️
Biggest workflow gap. Approve and Reject only appear while status is under_review, but there is no built-in button that moves an ECO from submitted to under_review. A submitted ECO can get stuck: its status must be set to Under Review by other means before it can be approved or rejected.
No server-side transition guards. The workflow endpoints (submit / approve / reject / implement) do not validate the current status before changing it — they simply set the new state. Called directly, out-of-order transitions are technically possible. Stick to the buttons the detail page offers for each status.

What an ECO captures

An ECO records what is changing, why, how urgent it is, which BOM it applies to, and when it should take effect — plus a full audit trail of who requested, reviewed, approved, and implemented it. The fields below are split into the ones you fill in the modal form and the ones the system sets automatically as the ECO moves through its workflow.

Fields you enter (the modal form)

FieldMeaningRequiredNotes
eco_number — ECO # Unique, human-readable identifier for the change order. Required Auto-generated for new records as {prefix}-000001 (zero-padded to 6 digits, incrementing). The prefix comes from Manufacturing Settings eco_prefix (default ECO-). Editable in the form. Must be unique.
bom_id — BOM The Bill of Materials this change order applies to. Required Select2 dropdown of all BOMs, shown as {bom_code} - {product_name}; the first option is a blank -. Always pick one — see the warning below.
change_type — Change Type Nature of the change: New (introduce a BOM/product), Revision (modify an existing BOM), or Obsolete (retire a BOM). Optional Enum new / revision / obsolete. The form shows New as its default; if submitted empty the server defaults to revision.
priority — Priority Urgency of the change. Optional Enum low / medium / high / critical, default Medium.
change_description — Description What is being changed. Also used as the record Title in the list and as the detail-page header. Required Textarea (3 rows). Line breaks are preserved on the view page.
change_reason — Reason for Change Why the change is needed (the justification). Optional Textarea (3 rows). The form treats it as optional even though the underlying column is stored as text; supply a reason so approvers can judge the change.
effective_date — Effective Date The date the change should take effect. Optional Date picker. Shows Not set on the view page when empty.
⚠️
Always pick a BOM. The BOM field is marked required with a red asterisk and a client-side rule, and every ECO must link to exactly one BOM. If the field is somehow left blank the record cannot be stored. Selecting the correct BOM is what ties the ECO to the change it authorizes.

Fields the system sets (workflow & audit)

You never type these — the system records them automatically as the ECO is created and moves through the workflow. They appear in the Workflow sidebar of the detail page.

FieldMeaningRequiredNotes
status — Status Current lifecycle state. System-set Enum draft / submitted / under_review / approved / rejected / implemented. Set to Draft on create; advanced only via the workflow buttons.
requested_by — Requested By The user who raised the ECO. System-set Set to the logged-in user on create; shown as the requester's full name.
requested_at — Request Date When the ECO was raised. System-set Set to the current UTC time on create. Note: the view page's Request Date label actually displays created_at, not requested_at.
reviewer_id — Reviewer The user who reviewed (rejected) the ECO. System-set Set to the logged-in user when Reject is performed.
reviewed_at — Reviewed At Timestamp of the review / rejection. System-set Set on Reject.
review_comments — Review Comments The reviewer's rejection reason / notes. Optional Saved only if a reason is supplied at reject time; shown in red on the view page. See the warning under the Reject SOP.
approver_id — Approved By The user who approved the ECO. System-set Set to the logged-in user on Approve; shown as their full name. Shows Pending until approved.
approved_at — Approved Date Timestamp of approval. System-set Set on Approve. Shows N/A until set.
approval_comments — Approval Comments Notes captured at approval time. The column exists but is not written or displayed by the current interface.
implemented_by — Implemented By The user who marked the ECO implemented. System-set Set to the logged-in user on Mark Implemented.
implemented_at — Implemented Date When the change was implemented. System-set Set on Mark Implemented. Only shown on the view page once set.
created_at — Created At Record creation timestamp. System-set Set on create. Used as the Request Date label on the view page and as the default list sort key (newest first).
updated_at — Updated At Last modification timestamp. System-set Set on every save and on every workflow action (submit / approve / reject / implement).
uuid — UUID Internal globally-unique identifier. System-set Generated on create; unique. Not shown to users.

Priority legend

Priority is a hint about urgency; it does not change any workflow behaviour, but it helps supervisors triage which pending ECOs to review first.

LowLowest urgency.
MediumDefault urgency.
HighElevated urgency.
CriticalHighest urgency.

Change Type legend

NewIntroduce a new BOM / product.
RevisionModify an existing BOM (swap a component, change quantities, correct an error).
ObsoleteRetire a BOM that is no longer used.

How an ECO relates to BOM versioning

The ECO is the authorization wrapper around a BOM change; it never edits the BOM itself. Think of it as two connected halves:

The ECO (this module)
Documents and authorizes the change — the description, reason, priority, target BOM, effective date, and the review / approval / implementation trail. Each ECO links to exactly one BOM via bom_id.
The BOM edit (the BOM module)
Where the real change happens — you revise the component lines, bump the BOM version, or retire the recipe. This is a separate, manual step performed after the ECO is approved.
????
Sequence matters: approve the ECO first, then make the BOM change in the BOM module (bump the version / apply the component change), and only then come back and click Mark Implemented. That way the ECO is the permanent record of exactly which BOM revision the change produced. See also Mfg Work Centers & BOM.

Actions & who can do them

The ECO area is gated as a whole by the manufacturing_eco permission. The individual create, edit, and delete permissions below exist as registered permission keys that conceptually govern those operations.

ActionWhat it doesConfirm?Permission
New ECO Opens the blank modal form with the next auto-generated ECO number pre-filled. manufacturing_eco (create key: manufacturing_eco_create)
Save Submits the modal. On create: generates the UUID, sets you as requester, stamps the request / created time (UTC), sets status to Draft, and applies the change-type (revision) and priority (medium) defaults if left empty. On edit: updates the editable fields. Always stamps updated_at. None manufacturing_eco
Edit Opens the modal pre-loaded with the record for modification. manufacturing_eco (update key: manufacturing_eco_update)
View Navigates to the ECO detail page (production/Eco/view/{id}). manufacturing_eco
Delete Soft-deletes the ECO (sets deleted = 1). Yes — standard delete-confirmation dialog manufacturing_eco (delete key: manufacturing_eco_delete)
Submit for Review Sets status to Submitted. Shown only when status is Draft. None (plain link) manufacturing_eco
Approve Sets status to Approved, records you as approver, stamps the approved time. Shown only when status is Under Review. None (plain link) manufacturing_eco
Reject Sets status to Rejected, records you as reviewer, stamps the reviewed time, and saves review comments if a reason was posted. Shown only when status is Under Review. None (plain link) manufacturing_eco
Mark Implemented Sets status to Implemented, records you as implementer, stamps the implemented time. Shown only when status is Approved. None (plain link) manufacturing_eco
Back Returns to the ECO list. manufacturing_eco
????
One gate in practice. Access to the whole area requires both the manufacturing module to be enabled and the manufacturing_eco permission. The workflow endpoints (submit / approve / reject / implement) and the save / delete endpoints are all gated only by that single check — there is no per-action permission enforcement in the code, so the create / update / delete keys act as organisational conventions rather than hard blocks.

SOP — Raise, approve, and implement an ECO

????
Goal. Take a needed BOM change from an idea to a permanent, approved, implemented audit record. Preconditions. The target BOM must already exist in the Manufacturing BOM module, and you must have manufacturing_eco access.
  1. Engineer — raise the ECO

    Go to Manufacturing → Engineering Change Orders and click New ECO. The ECO # is pre-filled (e.g. ECO-000007). Select the affected BOM, set Change Type (e.g. Revision) and Priority (e.g. High), write the Description of what is changing (e.g. "Replace resistor R12 220Ω with 330Ω"), fill the Reason for Change (e.g. "Field failures due to overheating"), and optionally set an Effective Date.

  2. Engineer — save as Draft

    Click Save. The ECO is created in Draft with you recorded as the requester and the request time stamped. On success you see "Record saved successfully" and the row appears at the top of the list.

  3. Engineer — submit for review

    Open the ECO from the cog menu → View, confirm it is in Draft, and click Submit for Review. The status becomes Submitted and you see "ECO submitted for review".

  4. Move it into Under Review

    Before an approver can act, the ECO must be in Under Review — the state that exposes the Approve and Reject buttons. See the warning below: there is no built-in button for this submitted → under_review step.

  5. Approver — evaluate and decide

    Open the ECO (View) while it is Under Review, read the Description and Reason for Change, then click Approve to authorize it (records you as approver + timestamp; message "ECO approved") or Reject to decline it (message "ECO rejected"). An approved ECO becomes Approved and is ready to implement.

  6. Engineer — make the real BOM change

    For an approved ECO, perform the actual edit in the BOM module: revise the component lines and/or bump the BOM version to reflect the change. The ECO itself does not touch the BOM.

  7. Engineer — mark it implemented

    Return to the ECO detail page and click Mark Implemented. The status becomes Implemented, with your name and the implementation time recorded. You see "ECO implemented". The ECO now stands as the permanent audit record for that BOM change.

⚠️
Step 4 has no button. Approve and Reject only appear at status under_review, yet the UI provides no control to advance a Submitted ECO into Under Review. Until the status is set to under_review by other means, a submitted ECO cannot be approved or rejected from the detail page.
Reject does not ask for a reason. On the detail page, Reject is a plain link that rejects the ECO immediately — it does not prompt you for a reason. The review_comments field is only saved when a reason is posted, so rejections done straight from the button will have empty review comments. If you need a documented reason on record, capture it separately.

Reject flow (the alternative ending)

  1. Approver — open an Under Review ECO

    Open the ECO (View) while it is Under Review.

  2. Approver — click Reject

    Click Reject. The status becomes Rejected (terminal), you are recorded as the reviewer, and the reviewed time is stamped. Review comments are stored only if a reason was supplied. You see "ECO rejected".


SOP — Find high-priority pending ECOs

  1. Open the ECO list

    Go to Manufacturing → Engineering Change Orders.

  2. Filter by status

    Use the Status filter dropdown above the table and choose Under Review (or another status you want to focus on).

  3. Filter by priority

    Use the Priority filter dropdown and choose Critical or High. You can also filter by Change Type (New / Revision / Obsolete).

  4. Review each row

    Open each filtered row via the cog menu → View to read its details and act on it.


Confirmation & validation messages

The messages you will see, quoted exactly:

WhenMessage
Save succeeds"Record saved successfully" (record_saved)
Save fails"error_occurred" message
Delete succeeds"record_deleted" message
Delete not allowed"record_cannot_be_deleted" message
Delete clickedStandard app delete-confirmation dialog
Submit for Review succeeds"ECO submitted for review"
Approve succeeds"ECO approved"
Reject succeeds"ECO rejected"
Implement succeeds"ECO implemented"
Validation on save. ECO # is required and must be unique — a duplicate ECO number will be rejected. Description is required. BOM and ECO # also carry client-side required rules. Fill all three before saving.

Gotchas & good practice

Approve / Reject only appear at under_review, and there is no built-in button to move an ECO from Submitted to Under Review. Plan for how your team advances that step.
The detail-page Reject link rejects immediately without prompting. Review comments are only stored when a reason is posted, so button-driven rejections have empty comments.
Under Review is yellow in the list but blue on the detail page; Approved is blue in the list but green on the detail page. Same meaning, different chip colour.
The view page labels created_at as Request Date; it is not the separate requested_at column.
The form shows New as the default, but if the field is submitted empty the server defaults it to revision. Set it explicitly to avoid surprises.
You can edit an ECO's fields at any status via the modal without changing its workflow state — editing does not reset or roll back the status.
Mark Implemented only flags the ECO. Updating the BOM components / version is a separate manual step in the BOM module.
ECO numbers auto-increment from the highest existing number matching the current prefix. Changing the eco_prefix in Manufacturing Settings starts a new numbering series for that prefix.

Key terms

ECO (Engineering Change Order)
A formal, tracked request to change a manufacturing BOM — new, revised, or obsolete — with a review/approval workflow and audit trail.
BOM (Bill of Materials)
The structured list of components, quantities, and operations needed to build a product. Each ECO targets exactly one BOM.
Change Type
Classification of the change: New (add a BOM/product), Revision (modify an existing BOM), Obsolete (retire a BOM).
Effective Date
The intended date the change takes effect.
Requester
The user who created the ECO.
Reviewer
The user who rejected an ECO — records who evaluated and declined the change.
Approver
The user who approved the ECO.
ECO Prefix
The configurable text (default ECO-) prepended to auto-generated ECO numbers, set in Manufacturing Settings.

Related pages

Was this guide helpful?

Report a content problem