Factorizer/Cluster ERP WikiCluster ERP Türkçe
Home / API reference

API

Production API (production)

HTTP endpoints of the production module under /api/v1/production: 102 routes with permissions, schemas, status codes, and error codes.

The production module serves work centres, operation types, routings and their operations, routing templates and cut technology rules, production versions, capacity reads, component allocations, production orders, work orders, and scheduling. All 102 endpoints sit under /api/v1/production. For business meaning see the Production module page.

Group facts

Item Value Source
Base path /api/v1/production src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/production/module.py:89
Routers 11 router objects in 10 files; listed in the section Endpoint summary src/cluster_erp/modules/production/module.py:51
Endpoints 102, counted from the route decorators and add_api_route calls of the routers that register_routes mounts src/cluster_erp/modules/production/capacity/routes.py, src/cluster_erp/modules/production/component_allocations/routes.py, src/cluster_erp/modules/production/operation_types/routes.py ...
Authentication Bearer header or session cookie, resolved by get_current_user; see Authentication and headers src/cluster_erp/modules/auth/guards.py:85-167
Permission guard 102 of 102 routes declare require_permission src/cluster_erp/modules/auth/guards.py:205-240
App entitlement gate require_app("production") on every mounted router src/cluster_erp/modules/production/module.py:102
Error format JSON body {"error": {...}}; see Errors src/cluster_erp/server/error_handler.py:33-46

Endpoint summary

One row per sub-module folder. The router prefix is added to the base path.

Sub-module Routers Endpoints Router source
work_centers router (/work-centers) 8 src/cluster_erp/modules/production/work_centers/routes.py:22
operation_types router (/operation-types) 8 src/cluster_erp/modules/production/operation_types/routes.py:23
routings router (/routings) 28 src/cluster_erp/modules/production/routings/routes.py:38
routing_templates router (/routing-templates), rules_router (/cut-technology-rules) 16 src/cluster_erp/modules/production/routing_templates/routes.py:29, src/cluster_erp/modules/production/routing_templates/routes.py:30
production_versions router (/production-versions) 4 src/cluster_erp/modules/production/production_versions/routes.py:34
capacity router (/capacity) 2 src/cluster_erp/modules/production/capacity/routes.py:15
component_allocations router (/component-allocations) 6 src/cluster_erp/modules/production/component_allocations/routes.py:23
production_orders router (/production-orders) 17 src/cluster_erp/modules/production/production_orders/routes.py:34
work_orders router (/work-orders) 8 src/cluster_erp/modules/production/work_orders/routes.py:23
scheduling router (/scheduling) 5 src/cluster_erp/modules/production/scheduling/routes.py:32

Work centres endpoints

Work centre records and the operation types of a work centre.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/work-centers/ list_work_centers work_center.read none search, active_only, limit, offset dict 200 (default) src/cluster_erp/modules/production/work_centers/routes.py:25
POST /api/v1/production/work-centers/ create_work_center work_center.create WorkCenterCreate none WorkCenterRead 201 src/cluster_erp/modules/production/work_centers/routes.py:50
GET /api/v1/production/work-centers/{work_center_id} get_work_center work_center.read none none WorkCenterRead 200 (default) src/cluster_erp/modules/production/work_centers/routes.py:61
PUT /api/v1/production/work-centers/{work_center_id} update_work_center work_center.update WorkCenterUpdate none WorkCenterRead 200 (default) src/cluster_erp/modules/production/work_centers/routes.py:74
GET /api/v1/production/work-centers/{work_center_id}/operation-types get_work_center_operation_types work_center.read none none list[str] 200 (default) src/cluster_erp/modules/production/work_centers/routes.py:88
PUT /api/v1/production/work-centers/{work_center_id}/operation-types set_work_center_operation_types work_center.update WorkCenterCapabilityUpdate none list[str] 200 (default) src/cluster_erp/modules/production/work_centers/routes.py:101
POST /api/v1/production/work-centers/bulk-delete bulk_delete_work_centers work_center.bulk_delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/work_centers/routes.py:121
DELETE /api/v1/production/work-centers/{work_center_id} delete_work_center work_center.delete none none none 204 src/cluster_erp/modules/production/work_centers/routes.py:132

Operation types endpoints

Operation type records, groups, and a seed of defaults.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/operation-types/ list_operation_types routing.read none active_only, search, limit, offset dict 200 (default) src/cluster_erp/modules/production/operation_types/routes.py:26
GET /api/v1/production/operation-types/groups list_operation_type_groups routing.read none none list[str] 200 (default) src/cluster_erp/modules/production/operation_types/routes.py:51
POST /api/v1/production/operation-types/ create_operation_type routing.create OperationTypeCreate none OperationTypeRead 201 src/cluster_erp/modules/production/operation_types/routes.py:61
GET /api/v1/production/operation-types/{type_id} get_operation_type routing.read none none OperationTypeRead 200 (default) src/cluster_erp/modules/production/operation_types/routes.py:72
PUT /api/v1/production/operation-types/{type_id} update_operation_type routing.update OperationTypeUpdate none OperationTypeRead 200 (default) src/cluster_erp/modules/production/operation_types/routes.py:85
DELETE /api/v1/production/operation-types/{type_id} delete_operation_type routing.delete none none none 204 src/cluster_erp/modules/production/operation_types/routes.py:99
POST /api/v1/production/operation-types/bulk-delete bulk_delete_operation_types routing.bulk_delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/operation_types/routes.py:110
POST /api/v1/production/operation-types/seed-defaults seed_defaults routing.create none none dict 200 (default) src/cluster_erp/modules/production/operation_types/routes.py:121

Routings endpoints

Routing records, scaffold from a BOM (plan and apply), copy to, readiness, full read, status change, operations, operation inputs, and prep operations.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/routings/ list_routings routing.read none search, product_id, status, limit, offset dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:46
POST /api/v1/production/routings/ create_routing routing.create RoutingCreate none RoutingRead 201 src/cluster_erp/modules/production/routings/routes.py:74
POST /api/v1/production/routings/scaffold-from-bom scaffold_routing_from_bom routing.create RoutingScaffoldRequest none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:86
POST /api/v1/production/routings/scaffold-tree-from-bom scaffold_routing_tree_from_bom routing.create RoutingScaffoldTreeRequest none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:117
POST /api/v1/production/routings/scaffold-plan scaffold_plan routing.create ScaffoldPlanRequest none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:155
POST /api/v1/production/routings/scaffold-apply scaffold_apply routing.create ScaffoldApplyRequest none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:207
POST /api/v1/production/routings/{routing_id}/copy-to copy_routing_to routing.create RoutingCopyToRequest none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:263
GET /api/v1/production/routings/for-product/{product_id} get_routing_for_product routing.read none include_draft RoutingRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:298
GET /api/v1/production/routings/{routing_id}/readiness get_routing_readiness routing.read none none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:319
GET /api/v1/production/routings/{routing_id}/full get_routing_full routing.read none none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:333
GET /api/v1/production/routings/{routing_id} get_routing routing.read none none RoutingRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:344
PUT /api/v1/production/routings/{routing_id} update_routing routing.update RoutingUpdate none RoutingRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:358
POST /api/v1/production/routings/{routing_id}/status change_routing_status routing.update RoutingStatusUpdate none RoutingRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:373
POST /api/v1/production/routings/bulk-delete bulk_delete_routings routing.bulk_delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/routings/routes.py:386
DELETE /api/v1/production/routings/{routing_id} delete_routing routing.delete none none none 204 src/cluster_erp/modules/production/routings/routes.py:398
GET /api/v1/production/routings/operations/all list_all_operations routing.read none routing_id, limit, offset dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:415
POST /api/v1/production/routings/operations/ create_operation_flat routing.update RoutingOperationFlatCreate none RoutingOperationRead 201 src/cluster_erp/modules/production/routings/routes.py:463
PUT /api/v1/production/routings/operations/{operation_id} update_operation_flat routing.update RoutingOperationUpdate none RoutingOperationRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:475
DELETE /api/v1/production/routings/operations/{operation_id} delete_operation_flat routing.update none none none 204 src/cluster_erp/modules/production/routings/routes.py:490
POST /api/v1/production/routings/{routing_id}/operations add_operation routing.update RoutingOperationCreate none RoutingOperationRead 201 src/cluster_erp/modules/production/routings/routes.py:502
PUT /api/v1/production/routings/{routing_id}/operations/{operation_id} update_operation routing.update RoutingOperationUpdate none RoutingOperationRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:519
DELETE /api/v1/production/routings/{routing_id}/operations/{operation_id} delete_operation routing.update none none none 204 src/cluster_erp/modules/production/routings/routes.py:538
POST /api/v1/production/routings/{routing_id}/operations/{operation_id}/inputs add_operation_input routing.update OperationInputCreate none dict 201 src/cluster_erp/modules/production/routings/routes.py:559
DELETE /api/v1/production/routings/{routing_id}/operations/{operation_id}/inputs/{input_id} delete_operation_input routing.update none none none 204 src/cluster_erp/modules/production/routings/routes.py:593
GET /api/v1/production/routings/{routing_id}/prep-operations list_prep_operations routing.read none none dict 200 (default) src/cluster_erp/modules/production/routings/routes.py:621
POST /api/v1/production/routings/{routing_id}/prep-operations create_prep_operation routing.update PrepOperationCreate none PrepOperationRead 201 src/cluster_erp/modules/production/routings/routes.py:636
PUT /api/v1/production/routings/{routing_id}/prep-operations/{prep_id} update_prep_operation routing.update PrepOperationUpdate none PrepOperationRead 200 (default) src/cluster_erp/modules/production/routings/routes.py:653
DELETE /api/v1/production/routings/{routing_id}/prep-operations/{prep_id} delete_prep_operation routing.update none none none 204 src/cluster_erp/modules/production/routings/routes.py:672

Routing templates and cut rules endpoints

Two routers: routing templates with template operations, and cut technology rules.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/routing-templates/ops/all list_template_ops routing_template_op.read none template_id, limit, offset dict 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:42
POST /api/v1/production/routing-templates/ops/ create_template_op routing_template_op.create RoutingTemplateOpCreate none RoutingTemplateOpRead 201 src/cluster_erp/modules/production/routing_templates/routes.py:61
PUT /api/v1/production/routing-templates/ops/{op_id} update_template_op routing_template_op.update RoutingTemplateOpUpdate none RoutingTemplateOpRead 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:74
DELETE /api/v1/production/routing-templates/ops/{op_id} delete_template_op routing_template_op.delete none none none 204 src/cluster_erp/modules/production/routing_templates/routes.py:88
GET /api/v1/production/routing-templates/ list_routing_templates routing_template.read none active_only, search, limit, offset dict 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:104
POST /api/v1/production/routing-templates/ create_routing_template routing_template.create RoutingTemplateCreate none RoutingTemplateRead 201 src/cluster_erp/modules/production/routing_templates/routes.py:129
GET /api/v1/production/routing-templates/{template_id} get_routing_template routing_template.read none none RoutingTemplateRead 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:140
PUT /api/v1/production/routing-templates/{template_id} update_routing_template routing_template.update RoutingTemplateUpdate none RoutingTemplateRead 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:153
DELETE /api/v1/production/routing-templates/{template_id} delete_routing_template routing_template.delete none none none 204 src/cluster_erp/modules/production/routing_templates/routes.py:167
POST /api/v1/production/routing-templates/bulk-delete bulk_delete_routing_templates routing_template.delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:178
GET /api/v1/production/cut-technology-rules/ list_cut_technology_rules cut_technology_rule.read none limit, offset dict 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:194
POST /api/v1/production/cut-technology-rules/ create_cut_technology_rule cut_technology_rule.create CutTechnologyRuleCreate none CutTechnologyRuleRead 201 src/cluster_erp/modules/production/routing_templates/routes.py:212
GET /api/v1/production/cut-technology-rules/{rule_id} get_cut_technology_rule cut_technology_rule.read none none CutTechnologyRuleRead 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:223
PUT /api/v1/production/cut-technology-rules/{rule_id} update_cut_technology_rule cut_technology_rule.update CutTechnologyRuleUpdate none CutTechnologyRuleRead 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:236
DELETE /api/v1/production/cut-technology-rules/{rule_id} delete_cut_technology_rule cut_technology_rule.delete none none none 204 src/cluster_erp/modules/production/routing_templates/routes.py:250
POST /api/v1/production/cut-technology-rules/bulk-delete bulk_delete_cut_technology_rules cut_technology_rule.delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/routing_templates/routes.py:261

Production versions endpoints

Production version records.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/production-versions/ list_production_versions routing.read none product_id, status, limit, offset dict 200 (default) src/cluster_erp/modules/production/production_versions/routes.py:87
POST /api/v1/production/production-versions/ create_production_version routing.create PvCreate none PvRead 201 src/cluster_erp/modules/production/production_versions/routes.py:122
PUT /api/v1/production/production-versions/{pv_id} update_production_version routing.update PvUpdate none PvRead 200 (default) src/cluster_erp/modules/production/production_versions/routes.py:190
DELETE /api/v1/production/production-versions/{pv_id} delete_production_version routing.update none none none 204 src/cluster_erp/modules/production/production_versions/routes.py:233

Capacity endpoints

Capacity load and input-output reads.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/capacity/load capacity_load production_order.read none weeks, mode dict 200 (default) src/cluster_erp/modules/production/capacity/routes.py:18
GET /api/v1/production/capacity/input-output capacity_input_output production_order.read none weeks dict 200 (default) src/cluster_erp/modules/production/capacity/routes.py:34

Component allocations endpoints

Component allocation records.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/component-allocations/ list_allocations routing.read none routing_id, routing_operation_id, bom_version_id, input_kind, product_id, limit, offset dict 200 (default) src/cluster_erp/modules/production/component_allocations/routes.py:29
POST /api/v1/production/component-allocations/ create_allocation routing.update ComponentAllocationCreate none ComponentAllocationRead 201 src/cluster_erp/modules/production/component_allocations/routes.py:61
GET /api/v1/production/component-allocations/{allocation_id} get_allocation routing.read none none ComponentAllocationRead 200 (default) src/cluster_erp/modules/production/component_allocations/routes.py:73
PUT /api/v1/production/component-allocations/{allocation_id} update_allocation routing.update ComponentAllocationUpdate none ComponentAllocationRead 200 (default) src/cluster_erp/modules/production/component_allocations/routes.py:87
DELETE /api/v1/production/component-allocations/{allocation_id} delete_allocation routing.update none none none 204 src/cluster_erp/modules/production/component_allocations/routes.py:102
POST /api/v1/production/component-allocations/bulk-delete bulk_delete_allocations routing.bulk_delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/component_allocations/routes.py:114

Production orders endpoints

Order records, work order generation, status change, complete, cancel, hold, material consumption, order operations, and order components.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/production-orders/operations/all list_order_operations production_order.read none production_order_id, limit, offset dict 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:42
POST /api/v1/production/production-orders/{order_id}/generate-work-orders generate_work_orders work_order.create none none dict 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:102
GET /api/v1/production/production-orders/ list_production_orders production_order.read none search, product_id, project_id, status, planned_start_from, planned_start_to, limit, offset dict 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:130
POST /api/v1/production/production-orders/ create_production_order production_order.create ProductionOrderCreate none ProductionOrderRead 201 src/cluster_erp/modules/production/production_orders/routes.py:164
GET /api/v1/production/production-orders/{order_id} get_production_order production_order.read none none ProductionOrderRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:176
PUT /api/v1/production/production-orders/{order_id} update_production_order production_order.update ProductionOrderUpdate none ProductionOrderRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:190
POST /api/v1/production/production-orders/{order_id}/status change_order_status production_order.update ProductionOrderStatusUpdate none ProductionOrderRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:205
POST /api/v1/production/production-orders/{order_id}/complete complete_production_order production_order.update ProductionOrderCompleteData none ProductionOrderRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:218
POST /api/v1/production/production-orders/{order_id}/cancel cancel_production_order production_order.update ProductionOrderCancelData none ProductionOrderRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:231
POST /api/v1/production/production-orders/{order_id}/hold hold_production_order production_order.update ProductionOrderHoldData none ProductionOrderRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:244
POST /api/v1/production/production-orders/bulk-delete bulk_delete_production_orders production_order.bulk_delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:257
DELETE /api/v1/production/production-orders/{order_id} delete_production_order production_order.delete none none none 204 src/cluster_erp/modules/production/production_orders/routes.py:269
POST /api/v1/production/production-orders/{order_id}/consume-material consume_material production_order.update MaterialConsumptionCreate none ProductionOrderComponentRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:286
PUT /api/v1/production/production-orders/{order_id}/operations/{operation_id} update_operation production_order.update ProductionOrderOperationUpdate none ProductionOrderOperationRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:307
POST /api/v1/production/production-orders/{order_id}/components add_component production_order.update ProductionOrderComponentCreate none ProductionOrderComponentRead 201 src/cluster_erp/modules/production/production_orders/routes.py:331
PUT /api/v1/production/production-orders/{order_id}/components/{component_id} update_component production_order.update ProductionOrderComponentUpdate none ProductionOrderComponentRead 200 (default) src/cluster_erp/modules/production/production_orders/routes.py:348
DELETE /api/v1/production/production-orders/{order_id}/components/{component_id} delete_component production_order.update none none none 204 src/cluster_erp/modules/production/production_orders/routes.py:367

Work orders endpoints

Work order records, start, complete, and cancel.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/work-orders/ list_work_orders work_order.read none production_order_id, work_center_id, status, assigned_employee_id, search, limit, offset dict 200 (default) src/cluster_erp/modules/production/work_orders/routes.py:26
POST /api/v1/production/work-orders/ create_work_order work_order.create WorkOrderCreate none WorkOrderRead 201 src/cluster_erp/modules/production/work_orders/routes.py:52
GET /api/v1/production/work-orders/{work_order_id} get_work_order work_order.read none none WorkOrderRead 200 (default) src/cluster_erp/modules/production/work_orders/routes.py:64
PUT /api/v1/production/work-orders/{work_order_id} update_work_order work_order.update WorkOrderUpdate none WorkOrderRead 200 (default) src/cluster_erp/modules/production/work_orders/routes.py:78
DELETE /api/v1/production/work-orders/{work_order_id} delete_work_order work_order.delete none none none 204 src/cluster_erp/modules/production/work_orders/routes.py:97
POST /api/v1/production/work-orders/{work_order_id}/start start_work_order work_order.update none none WorkOrderRead 200 (default) src/cluster_erp/modules/production/work_orders/routes.py:112
POST /api/v1/production/work-orders/{work_order_id}/complete complete_work_order work_order.update WorkOrderComplete none WorkOrderRead 200 (default) src/cluster_erp/modules/production/work_orders/routes.py:127
POST /api/v1/production/work-orders/{work_order_id}/cancel cancel_work_order work_order.update none none WorkOrderRead 200 (default) src/cluster_erp/modules/production/work_orders/routes.py:144

Scheduling endpoints

The scheduling board, manual and automatic scheduling of work and production orders, and a recompute after a calendar change.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/production/scheduling/board scheduling_board work_order.read none date_from, date_to, work_center_id, production_order_id, project_id, scope BoardResponse 200 (default) src/cluster_erp/modules/production/scheduling/routes.py:41
PUT /api/v1/production/scheduling/work-orders/{work_order_id}/schedule schedule_work_order work_order.update WorkOrderScheduleUpdate none WorkOrderRead 200 (default) src/cluster_erp/modules/production/scheduling/routes.py:87
POST /api/v1/production/scheduling/work-orders/{work_order_id}/auto-schedule auto_schedule_work_order work_order.update WorkOrderAutoScheduleRequest none WorkOrderRead 200 (default) src/cluster_erp/modules/production/scheduling/routes.py:110
POST /api/v1/production/scheduling/production-orders/{order_id}/auto-schedule auto_schedule_production_order work_order.update ProductionOrderAutoScheduleRequest none CascadeResult 200 (default) src/cluster_erp/modules/production/scheduling/routes.py:136
POST /api/v1/production/scheduling/recompute recompute_after_calendar_change work_order.update RecomputeRequest none RecomputeResult 200 (default) src/cluster_erp/modules/production/scheduling/routes.py:175

Error codes

The table lists the error codes that code under src/cluster_erp/modules/production/ raises, found by a syntax-tree scan for AppError(...), the factories in src/cluster_erp/core/errors.py (not_found, conflict, protected, permission_denied, privilege_escalation, check_version), and HTTPException(...). A status of 400 is the AppError default (src/cluster_erp/core/errors.py:23). Guard errors (401, 403), the entitlement codes, and validation errors (422) apply to every route and are listed on Errors.

Code HTTP status Raised in First site
CONCURRENCY_VERSION_CONFLICT 409 component_allocations, operation_types, production_orders, production_versions, routing_templates, scheduling, work_orders src/cluster_erp/modules/production/component_allocations/services.py:174
PRODUCTION_BOM_EMPTY 422 routings src/cluster_erp/modules/production/routings/scaffold.py:207
PRODUCTION_BOM_REQUIRED 422 routings src/cluster_erp/modules/production/routings/scaffold.py:199
PRODUCTION_CUT_RULE_EXISTS 422 routing_templates src/cluster_erp/modules/production/routing_templates/services.py:268
PRODUCTION_INSUFFICIENT_MATERIAL 400 production_orders src/cluster_erp/modules/production/production_orders/services.py:763
PRODUCTION_MATERIAL_CONSUMPTION_FAILED 400 production_orders src/cluster_erp/modules/production/production_orders/services.py:798
PRODUCTION_OPERATION_NO_MATERIAL_IO 422 component_allocations src/cluster_erp/modules/production/component_allocations/services.py:513
PRODUCTION_ORDER_EXISTS_FOR_PROJECT_PRODUCT 422 module src/cluster_erp/modules/production/module.py:675
PRODUCTION_ORDER_INVALID_STATUS 400, 422 production_orders, work_orders src/cluster_erp/modules/production/production_orders/services.py:450
PRODUCTION_PRODUCT_NOT_MANUFACTURABLE 400 production_orders, routings src/cluster_erp/modules/production/production_orders/services.py:152
PRODUCTION_ROUTING_INCOMPLETE 422 routings src/cluster_erp/modules/production/routings/scaffold.py:1703
PRODUCTION_ROUTING_REQUIRED 400 routings src/cluster_erp/modules/production/routings/services.py:621
PRODUCTION_SCHEDULE_INVALID_RANGE 422 scheduling src/cluster_erp/modules/production/scheduling/routes.py:58
PRODUCTION_SCHEDULE_NO_SLOT 422 scheduling src/cluster_erp/modules/production/scheduling/services.py:716
PRODUCTION_WORK_ORDER_INVALID_STATUS 422 scheduling, work_orders src/cluster_erp/modules/production/scheduling/services.py:324
PRODUCTION_WORK_ORDER_QTY_EXCEEDED 422 work_orders src/cluster_erp/modules/production/work_orders/services.py:372
RESOURCE_NOT_FOUND 404, 422 component_allocations, operation_types, production_orders, production_versions, routing_templates, routings, scheduling, work_centers, work_orders src/cluster_erp/modules/production/component_allocations/routes.py:83
SCAFFOLD_ANSWER_REQUIRED 422 routings src/cluster_erp/modules/production/routings/scaffold.py:1099
SCAFFOLD_CHANGE_PROTECTED 422 routings src/cluster_erp/modules/production/routings/scaffold.py:1806
SCAFFOLD_COPY_SAME_TARGET 422 routings src/cluster_erp/modules/production/routings/scaffold.py:2124
SCAFFOLD_PLAN_STALE 409 routings src/cluster_erp/modules/production/routings/scaffold.py:1065
SCAFFOLD_ROUTING_EXISTS 409 routings src/cluster_erp/modules/production/routings/scaffold.py:1144
SCAFFOLD_TEMPLATE_AMBIGUOUS 422 routings src/cluster_erp/modules/production/routings/scaffold.py:522
VALIDATION_ERROR 422 production_versions, routing_templates src/cluster_erp/modules/production/production_versions/routes.py:56

Events emitted

The table lists the contract classes that code under src/cluster_erp/modules/production/ passes directly to EventBus.emit, found by a syntax-tree scan. Events built in a variable first are not counted. The contracts are described in Contracts reference.

Contract Sites First site
MaterialConsumed 1 src/cluster_erp/modules/production/production_orders/services.py:812
ProductionOrderCancelled 1 src/cluster_erp/modules/production/production_orders/services.py:572
ProductionOrderCompleted 1 src/cluster_erp/modules/production/production_orders/services.py:716
ProductionOrderCreated 1 src/cluster_erp/modules/production/production_orders/services.py:227
ProductionOrderOnHold 1 src/cluster_erp/modules/production/production_orders/services.py:616
ProductionOrderStatusChanged 4 src/cluster_erp/modules/production/production_orders/services.py:519
WorkOrderCompleted 1 src/cluster_erp/modules/production/work_orders/services.py:404

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

Verified against commit 92f8051 · 2026-11-13