Factorizer/Cluster ERP WikiCluster ERP Türkçe
Home / Business modules

Module

Design engineering module (design_engineering)

Module page for design_engineering, which holds designs with review and approval and the engineering change notes that create new design versions.

The design_engineering module in src/cluster_erp/modules/design_engineering/ holds designs and engineering change notes (ECN). A design belongs to a project, can name the part it describes, links its drawing, 3D model, and DXF documents, and goes through review and approval. An approved design is locked; a change goes through an ECN, which creates the next design version and supersedes the old one. Approving a design with a part makes the bom module create a BOM card.

At a glance

Item Value Source
Package src/cluster_erp/modules/design_engineering/ folder
Module class Module src/cluster_erp/modules/design_engineering/module.py:15
name / version design_engineering / 0.1.0 src/cluster_erp/modules/design_engineering/module.py:16-22
API prefix /api/v1/design_engineering (ModuleBase.api_prefix) src/cluster_erp/core/module_base.py:37-38
Sub-modules 2: designs, ecns folder listing
Tables 2: design_engineering_designs, design_engineering_ecns src/cluster_erp/modules/design_engineering/designs/models.py:18, src/cluster_erp/modules/design_engineering/ecns/models.py:18
Entities in metadata 2: design, ecn src/cluster_erp/modules/design_engineering/module.py:146-149
Routes 20 route decorators in the package grep for @router.
Web app presence Catalogue app design-engineering src/cluster_erp/modules/app_store/catalog.json (entry design-engineering)
Desktop presence Generic widgets only; no folder in src/cluster_erp/desktop/modules/ folder

What the module does

  • Records designs of type concept, detail, or manufacturing, each with a number, a project, an optional part, a version number, CAD file entries, document links, specifications, and a description (src/cluster_erp/modules/design_engineering/designs/models.py:17-78, src/cluster_erp/modules/design_engineering/designs/schemas.py:9).
  • Moves a design through review and approval (src/cluster_erp/modules/design_engineering/designs/services.py:37-41).
  • Records change notes against approved designs and implements them as new design versions (src/cluster_erp/modules/design_engineering/ecns/services.py:94-111, src/cluster_erp/modules/design_engineering/ecns/services.py:252-314).
  • Answers other modules' questions about a design (src/cluster_erp/modules/design_engineering/module.py:49-92).

Sub-modules

Sub-module Purpose Main entities Router Source
designs Designs and their lifecycle Design /api/v1/design_engineering/designs src/cluster_erp/modules/design_engineering/designs/routes.py:31
ecns Engineering change notes Ecn /api/v1/design_engineering/ecns src/cluster_erp/modules/design_engineering/ecns/routes.py:30

Data model

Entity Table Key fields Notes Source
Design design_engineering_designs design_no, project_id, part_id, type, status, parent_design_id, version_no, created_by_user_id, reviewed_by, approved_by, approved_at, cad_files, drawing_pdf_doc_id, model_3d_doc_id, dxf_doc_id, specs, description, extra design_no unique; parent_design_id points at the earlier version src/cluster_erp/modules/design_engineering/designs/models.py:17-78
Ecn design_engineering_ecns ecn_no, design_id, reason, impact, status, proposed_by, approved_by, approved_at, rejected_by, rejected_at, implemented_by, implemented_at, new_design_id, extra ecn_no unique src/cluster_erp/modules/design_engineering/ecns/models.py:17-57

project_id and part_id are plain UUID columns. The module asks no other module about them; a grep for query contracts constructed in the package finds none.

Screens and metadata

get_metadata declares a sidebar group Design & Engineering (Turkish Tasarım & Mühendislik) with two lists, Designs and Change Notes (src/cluster_erp/modules/design_engineering/module.py:109-150). Both entities accept tenant-defined fields in extra (src/cluster_erp/modules/design_engineering/designs/models.py:19-22, src/cluster_erp/modules/design_engineering/ecns/models.py:19-22).

Status and actions

Design statuses are draft, in_review, approved, and superseded (src/cluster_erp/modules/design_engineering/designs/schemas.py:10). ECN statuses are proposed, approved, rejected, and implemented (src/cluster_erp/modules/design_engineering/ecns/schemas.py:9).

Action Label Condition Endpoint Permission Source
design submit_review Submit for Review status is draft POST /designs/{id}/submit-review design.create src/cluster_erp/modules/design_engineering/designs/metadata.py:52-62, src/cluster_erp/modules/design_engineering/designs/routes.py:144-153
design approve Approve status is in_review POST /designs/{id}/approve design.approve src/cluster_erp/modules/design_engineering/designs/metadata.py:63-73, src/cluster_erp/modules/design_engineering/designs/routes.py:156-165
design reject Reject status is in_review POST /designs/{id}/reject design.approve src/cluster_erp/modules/design_engineering/designs/metadata.py:74-84, src/cluster_erp/modules/design_engineering/designs/routes.py:168-177
ECN approve Approve status is proposed POST /ecns/{id}/approve ecn.approve src/cluster_erp/modules/design_engineering/ecns/metadata.py:52-62, src/cluster_erp/modules/design_engineering/ecns/routes.py:141-150
ECN reject Reject status is proposed POST /ecns/{id}/reject ecn.approve src/cluster_erp/modules/design_engineering/ecns/metadata.py:63-73, src/cluster_erp/modules/design_engineering/ecns/routes.py:153-162
ECN implement Implement status is approved POST /ecns/{id}/implement ecn.approve src/cluster_erp/modules/design_engineering/ecns/metadata.py:74-84, src/cluster_erp/modules/design_engineering/ecns/routes.py:165-174

The diagram shows both lifecycles.

stateDiagram-v2
 state Design {
 [*] --> draft
 draft --> in_review: submit_review
 in_review --> approved: approve
 in_review --> draft: reject
 approved --> superseded: ECN implement
 }
 state ECN {
 [*] --> proposed
 proposed --> approved_ecn: approve
 proposed --> rejected: reject
 approved_ecn --> implemented: implement
 }

In prose: a design starts as draft, is submitted to in_review, and is then approved or sent back to draft (src/cluster_erp/modules/design_engineering/designs/services.py:37-41). An approved design becomes superseded only when an ECN against it is implemented. An ECN starts as proposed and is approved or rejected; an approved ECN can be implemented (src/cluster_erp/modules/design_engineering/ecns/services.py:29-32). In the diagram, approved_ecn stands for the ECN status approved.

Business rules

  • A design of type concept cannot be approved; the answer is DESIGN_CONCEPT_NO_APPROVAL (src/cluster_erp/modules/design_engineering/designs/services.py:282-287).
  • Approval commits the transaction before DesignApproved is emitted, so that the BOM created by the subscriber depends on a stored approval; the code comment states this reason (src/cluster_erp/modules/design_engineering/designs/services.py:298-315).
  • An approved or superseded design cannot be edited (src/cluster_erp/modules/design_engineering/designs/services.py:189-199); only a draft design can be deleted (src/cluster_erp/modules/design_engineering/designs/services.py:229-233).
  • An ECN can be created only for an approved design (src/cluster_erp/modules/design_engineering/ecns/services.py:94-111); only a proposed ECN can be edited or deleted (src/cluster_erp/modules/design_engineering/ecns/services.py:150-153, src/cluster_erp/modules/design_engineering/ecns/services.py:184-187).
  • Implementing an ECN creates a new draft design with the next version number, the same project, part, type, files, and specifications, and the old design as parent; the old design becomes superseded; the ECN stores the new design id (src/cluster_erp/modules/design_engineering/ecns/services.py:252-314).
  • design_no and ecn_no come from the yearly sequences design and ecn (src/cluster_erp/modules/design_engineering/designs/services.py:144, src/cluster_erp/modules/design_engineering/ecns/services.py:112).
  • GET /designs/{id}/files returns the CAD file list and the three document ids (src/cluster_erp/modules/design_engineering/designs/services.py:108-117).

Events and queries

The module consumes 2 contracts and produces 6, counted as on the parties module page.

Direction Contract class Handler or emitter Source
emits DesignCreated DesignService.create src/cluster_erp/modules/design_engineering/designs/services.py:167-175
emits DesignApproved DesignService.approve src/cluster_erp/modules/design_engineering/designs/services.py:307-315
emits DesignSuperseded DesignService.supersede src/cluster_erp/modules/design_engineering/designs/services.py:348-355
emits EcnProposed, EcnApproved, EcnImplemented EcnService.create, .approve, .implement src/cluster_erp/modules/design_engineering/ecns/services.py:128, src/cluster_erp/modules/design_engineering/ecns/services.py:227-236, src/cluster_erp/modules/design_engineering/ecns/services.py:304-312
answers query GetDesignById _handle_get_design src/cluster_erp/modules/design_engineering/module.py:53, src/cluster_erp/modules/design_engineering/module.py:56-77
answers query IsDesignApproved _handle_is_design_approved src/cluster_erp/modules/design_engineering/module.py:54, src/cluster_erp/modules/design_engineering/module.py:79-92

DesignApproved is consumed by the bom module, which creates a BOM card for the design's part; see BOM module. The contracts reference finds no consumer for the other five events at this commit.

Permissions

Permission key Used by Source
design.read design reads, file list, ECN list per design, ECN reads src/cluster_erp/modules/design_engineering/designs/routes.py:52-196, src/cluster_erp/modules/design_engineering/ecns/routes.py:50-79
design.create design create, update, delete, bulk delete, submit for review src/cluster_erp/modules/design_engineering/designs/routes.py:96-147
design.approve design approve and reject src/cluster_erp/modules/design_engineering/designs/routes.py:159-171
ecn.propose ECN create, update, delete, bulk delete src/cluster_erp/modules/design_engineering/ecns/routes.py:93-132
ecn.approve ECN approve, reject, implement src/cluster_erp/modules/design_engineering/ecns/routes.py:144-168

Privacy, retention, and history

The module stores user ids of authors and approvers but no personal fields of its own, and it has no privacy_handlers.py. Changes are captured by change history.

Analytics facts

This module has no analytics_facts.py.

Settings and reference data

The module has no settings section and seeds nothing (src/cluster_erp/modules/design_engineering/module.py:28-30). Design types and statuses are fixed literals in the schemas (src/cluster_erp/modules/design_engineering/designs/schemas.py:9-10).

Tests

Found by a grep for design_engineering in tests/ and web-client/.

Kind File Covers
e2e web-client/_e2e_deseng_currencies.mjs the design engineering app and its actions in the web app
e2e web-client/_e2e_tenant_fields_phase4b.mjs, web-client/_e2e_tenant_fields_phase4c.mjs tenant-defined fields on design records

No pytest file imports the module.

Discrepancies

Terms introduced

Term Code identifier Definition Turkish term Source
design Design A versioned engineering design of a part within a project. Tasarım src/cluster_erp/modules/design_engineering/designs/models.py:17
engineering change note Ecn A recorded change to an approved design that, once implemented, creates its next version. Değişiklik notu src/cluster_erp/modules/design_engineering/ecns/models.py:17
design type type concept, detail, or manufacturing; concept designs cannot be approved. Tasarım türü src/cluster_erp/modules/design_engineering/designs/schemas.py:9

Verified against commit 92f8051 on 2026-11-13.

Verified against commit 92f8051 · 2026-11-13