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.
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.
Where the actual component/version change is made after an ECO is approved.
The advanced BOM workspace an ECO targets.
The manufacturing_eco* keys that gate this area.
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.
| Screen | Route | What 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.
The alternative ending — from Under Review the approver may decline instead of approve:
Status legend
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.
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)
| Field | Meaning | Required | Notes |
|---|---|---|---|
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. |
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.
| Field | Meaning | Required | Notes |
|---|---|---|---|
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.
Change Type legend
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.
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.
| Action | What it does | Confirm? | 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 |
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
manufacturing_eco access.
-
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. -
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.
-
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".
-
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_reviewstep. -
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.
-
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.
-
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.
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.
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)
-
Approver — open an Under Review ECO
Open the ECO (View) while it is Under Review.
-
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
-
Open the ECO list
Go to Manufacturing → Engineering Change Orders.
-
Filter by status
Use the Status filter dropdown above the table and choose Under Review (or another status you want to focus on).
-
Filter by priority
Use the Priority filter dropdown and choose Critical or High. You can also filter by Change Type (New / Revision / Obsolete).
-
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:
| When | Message |
|---|---|
| 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 clicked | Standard app delete-confirmation dialog |
| Submit for Review succeeds | "ECO submitted for review" |
| Approve succeeds | "ECO approved" |
| Reject succeeds | "ECO rejected" |
| Implement succeeds | "ECO implemented" |
Gotchas & good practice
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.created_at as Request Date; it is
not the separate requested_at column.revision. Set it explicitly to avoid surprises.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.