@tailor-platform/erp-kit 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/cli.mjs +103 -23
- package/package.json +1 -1
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +7 -4
- package/skills/erp-kit-app-7-impl-review/SKILL.md +1 -1
- package/skills/erp-kit-module-6-impl-review/SKILL.md +39 -17
- package/src/commands/generate-doc.ts +1 -1
- package/src/commands/lib/discovery.test.ts +13 -3
- package/src/commands/lib/discovery.ts +10 -2
- package/src/commands/lib/paths.ts +4 -2
- package/src/commands/lib/sync-check-tests.test.ts +84 -6
- package/src/commands/lib/sync-check-tests.ts +63 -3
- package/src/commands/sync-check.ts +7 -3
- package/src/generator/generate-app-code.ts +51 -16
- package/src/generator/generate-stubs.ts +4 -0
- package/src/generator/stub-templates.test.ts +11 -0
- package/src/generator/stub-templates.ts +22 -1
- package/src/modules/inventory/docs/features/inventory-adjustment.md +2 -1
- package/src/modules/inventory/docs/features/scrap-management.md +39 -1
- package/src/modules/manufacturing/README.md +63 -0
- package/src/modules/manufacturing/command/.gitkeep +0 -0
- package/src/modules/manufacturing/command/activateBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/activateBillOfMaterial.test.ts +166 -0
- package/src/modules/manufacturing/command/activateBillOfMaterial.ts +173 -0
- package/src/modules/manufacturing/command/activateRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/activateRouting.test.ts +152 -0
- package/src/modules/manufacturing/command/activateRouting.ts +92 -0
- package/src/modules/manufacturing/command/activateWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/activateWorkCenter.test.ts +135 -0
- package/src/modules/manufacturing/command/activateWorkCenter.ts +91 -0
- package/src/modules/manufacturing/command/cancelProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/cancelProductionOrder.test.ts +151 -0
- package/src/modules/manufacturing/command/cancelProductionOrder.ts +114 -0
- package/src/modules/manufacturing/command/closeProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/closeProductionOrder.test.ts +126 -0
- package/src/modules/manufacturing/command/closeProductionOrder.ts +87 -0
- package/src/modules/manufacturing/command/completeProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/completeProductionOrder.test.ts +132 -0
- package/src/modules/manufacturing/command/completeProductionOrder.ts +97 -0
- package/src/modules/manufacturing/command/completeWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/completeWorkOrder.test.ts +369 -0
- package/src/modules/manufacturing/command/completeWorkOrder.ts +212 -0
- package/src/modules/manufacturing/command/createBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/createBillOfMaterial.test.ts +210 -0
- package/src/modules/manufacturing/command/createBillOfMaterial.ts +176 -0
- package/src/modules/manufacturing/command/createProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/createProductionOrder.test.ts +160 -0
- package/src/modules/manufacturing/command/createProductionOrder.ts +129 -0
- package/src/modules/manufacturing/command/createRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/createRouting.test.ts +168 -0
- package/src/modules/manufacturing/command/createRouting.ts +128 -0
- package/src/modules/manufacturing/command/createWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/createWorkCenter.test.ts +148 -0
- package/src/modules/manufacturing/command/createWorkCenter.ts +131 -0
- package/src/modules/manufacturing/command/deactivateBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/deactivateBillOfMaterial.test.ts +103 -0
- package/src/modules/manufacturing/command/deactivateBillOfMaterial.ts +78 -0
- package/src/modules/manufacturing/command/deactivateRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/deactivateRouting.test.ts +112 -0
- package/src/modules/manufacturing/command/deactivateRouting.ts +76 -0
- package/src/modules/manufacturing/command/deactivateWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/deactivateWorkCenter.test.ts +113 -0
- package/src/modules/manufacturing/command/deactivateWorkCenter.ts +85 -0
- package/src/modules/manufacturing/command/pauseWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/pauseWorkOrder.test.ts +118 -0
- package/src/modules/manufacturing/command/pauseWorkOrder.ts +82 -0
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.generated.ts +6 -0
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.test.ts +183 -0
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.ts +139 -0
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.generated.ts +6 -0
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.test.ts +120 -0
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.ts +110 -0
- package/src/modules/manufacturing/command/releaseProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/releaseProductionOrder.test.ts +220 -0
- package/src/modules/manufacturing/command/releaseProductionOrder.ts +450 -0
- package/src/modules/manufacturing/command/reopenProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/reopenProductionOrder.test.ts +196 -0
- package/src/modules/manufacturing/command/reopenProductionOrder.ts +98 -0
- package/src/modules/manufacturing/command/reportWorkOrderProgress.generated.ts +6 -0
- package/src/modules/manufacturing/command/reportWorkOrderProgress.test.ts +204 -0
- package/src/modules/manufacturing/command/reportWorkOrderProgress.ts +129 -0
- package/src/modules/manufacturing/command/rescheduleProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/rescheduleProductionOrder.test.ts +185 -0
- package/src/modules/manufacturing/command/rescheduleProductionOrder.ts +95 -0
- package/src/modules/manufacturing/command/resumeWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/resumeWorkOrder.test.ts +122 -0
- package/src/modules/manufacturing/command/resumeWorkOrder.ts +94 -0
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.generated.ts +6 -0
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.test.ts +231 -0
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.ts +137 -0
- package/src/modules/manufacturing/command/startWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/startWorkOrder.test.ts +118 -0
- package/src/modules/manufacturing/command/startWorkOrder.ts +126 -0
- package/src/modules/manufacturing/command/technicallyCompleteProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/technicallyCompleteProductionOrder.test.ts +153 -0
- package/src/modules/manufacturing/command/technicallyCompleteProductionOrder.ts +106 -0
- package/src/modules/manufacturing/command/unreleaseProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/unreleaseProductionOrder.test.ts +140 -0
- package/src/modules/manufacturing/command/unreleaseProductionOrder.ts +131 -0
- package/src/modules/manufacturing/command/updateBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateBillOfMaterial.test.ts +149 -0
- package/src/modules/manufacturing/command/updateBillOfMaterial.ts +174 -0
- package/src/modules/manufacturing/command/updateProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateProductionOrder.test.ts +112 -0
- package/src/modules/manufacturing/command/updateProductionOrder.ts +145 -0
- package/src/modules/manufacturing/command/updateRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateRouting.test.ts +211 -0
- package/src/modules/manufacturing/command/updateRouting.ts +124 -0
- package/src/modules/manufacturing/command/updateWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateWorkCenter.test.ts +152 -0
- package/src/modules/manufacturing/command/updateWorkCenter.ts +137 -0
- package/src/modules/manufacturing/db/.gitkeep +0 -0
- package/src/modules/manufacturing/db/billOfMaterial.ts +70 -0
- package/src/modules/manufacturing/db/billOfMaterialLine.ts +49 -0
- package/src/modules/manufacturing/db/costVarianceLine.ts +53 -0
- package/src/modules/manufacturing/db/manufacturingCostLine.ts +35 -0
- package/src/modules/manufacturing/db/manufacturingCostSettlementRecord.ts +39 -0
- package/src/modules/manufacturing/db/manufacturingCostSummary.ts +59 -0
- package/src/modules/manufacturing/db/productionOrder.ts +83 -0
- package/src/modules/manufacturing/db/productionOrderBomSnapshot.ts +44 -0
- package/src/modules/manufacturing/db/productionOrderCostBaseline.ts +44 -0
- package/src/modules/manufacturing/db/productionOrderMaterialRequirement.ts +57 -0
- package/src/modules/manufacturing/db/productionOrderRoutingSnapshot.ts +43 -0
- package/src/modules/manufacturing/db/routing.ts +63 -0
- package/src/modules/manufacturing/db/routingOperation.ts +57 -0
- package/src/modules/manufacturing/db/workCenter.ts +87 -0
- package/src/modules/manufacturing/db/workOrder.ts +65 -0
- package/src/modules/manufacturing/db/workOrderExecutionEvent.ts +54 -0
- package/src/modules/manufacturing/docs/commands/ActivateBillOfMaterial.md +50 -0
- package/src/modules/manufacturing/docs/commands/ActivateRouting.md +48 -0
- package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +49 -0
- package/src/modules/manufacturing/docs/commands/CancelProductionOrder.md +48 -0
- package/src/modules/manufacturing/docs/commands/CloseProductionOrder.md +46 -0
- package/src/modules/manufacturing/docs/commands/CompleteProductionOrder.md +48 -0
- package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +66 -0
- package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +54 -0
- package/src/modules/manufacturing/docs/commands/CreateProductionOrder.md +49 -0
- package/src/modules/manufacturing/docs/commands/CreateRouting.md +50 -0
- package/src/modules/manufacturing/docs/commands/CreateWorkCenter.md +51 -0
- package/src/modules/manufacturing/docs/commands/DeactivateBillOfMaterial.md +45 -0
- package/src/modules/manufacturing/docs/commands/DeactivateRouting.md +45 -0
- package/src/modules/manufacturing/docs/commands/DeactivateWorkCenter.md +45 -0
- package/src/modules/manufacturing/docs/commands/PauseWorkOrder.md +44 -0
- package/src/modules/manufacturing/docs/commands/RecordInventoryIssueOutcome.md +59 -0
- package/src/modules/manufacturing/docs/commands/RecordManufacturingCostSettlementAcknowledgment.md +49 -0
- package/src/modules/manufacturing/docs/commands/ReleaseProductionOrder.md +57 -0
- package/src/modules/manufacturing/docs/commands/ReopenProductionOrder.md +54 -0
- package/src/modules/manufacturing/docs/commands/ReportWorkOrderProgress.md +53 -0
- package/src/modules/manufacturing/docs/commands/RescheduleProductionOrder.md +45 -0
- package/src/modules/manufacturing/docs/commands/ResumeWorkOrder.md +44 -0
- package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +52 -0
- package/src/modules/manufacturing/docs/commands/StartWorkOrder.md +46 -0
- package/src/modules/manufacturing/docs/commands/TechnicallyCompleteProductionOrder.md +51 -0
- package/src/modules/manufacturing/docs/commands/UnreleaseProductionOrder.md +46 -0
- package/src/modules/manufacturing/docs/commands/UpdateBillOfMaterial.md +48 -0
- package/src/modules/manufacturing/docs/commands/UpdateProductionOrder.md +48 -0
- package/src/modules/manufacturing/docs/commands/UpdateRouting.md +52 -0
- package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +48 -0
- package/src/modules/manufacturing/docs/features/bill-of-material-management.md +83 -0
- package/src/modules/manufacturing/docs/features/manufacturing-cost-and-variance.md +191 -0
- package/src/modules/manufacturing/docs/features/production-order-lifecycle.md +103 -0
- package/src/modules/manufacturing/docs/features/routing-and-work-center-definition.md +63 -0
- package/src/modules/manufacturing/docs/features/work-order-execution.md +115 -0
- package/src/modules/manufacturing/docs/models/BillOfMaterial.md +60 -0
- package/src/modules/manufacturing/docs/models/ManufacturingCostSummary.md +66 -0
- package/src/modules/manufacturing/docs/models/ProductionOrder.md +76 -0
- package/src/modules/manufacturing/docs/models/Routing.md +58 -0
- package/src/modules/manufacturing/docs/models/WorkCenter.md +56 -0
- package/src/modules/manufacturing/docs/models/WorkOrder.md +63 -0
- package/src/modules/manufacturing/docs/queries/DetectBillOfMaterialCircularReference.md +39 -0
- package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +56 -0
- package/src/modules/manufacturing/docs/queries/GetBillOfMaterial.md +37 -0
- package/src/modules/manufacturing/docs/queries/GetManufacturingCostSummary.md +39 -0
- package/src/modules/manufacturing/docs/queries/GetProductionOrder.md +37 -0
- package/src/modules/manufacturing/docs/queries/GetRouting.md +39 -0
- package/src/modules/manufacturing/docs/queries/GetWorkCenter.md +35 -0
- package/src/modules/manufacturing/docs/queries/GetWorkOrder.md +38 -0
- package/src/modules/manufacturing/docs/queries/ListBillOfMaterialsByItem.md +42 -0
- package/src/modules/manufacturing/docs/queries/ListManufacturingCostSummariesByStatus.md +41 -0
- package/src/modules/manufacturing/docs/queries/ListProductionOrdersByStatus.md +41 -0
- package/src/modules/manufacturing/docs/queries/ListRoutingsByItem.md +42 -0
- package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +38 -0
- package/src/modules/manufacturing/docs/queries/ListWorkOrdersByProductionOrder.md +39 -0
- package/src/modules/manufacturing/docs/queries/ListWorkOrdersByWorkCenter.md +43 -0
- package/src/modules/manufacturing/executor/.gitkeep +0 -0
- package/src/modules/manufacturing/generated/enums.ts +113 -0
- package/src/modules/manufacturing/generated/kysely-tailordb.ts +247 -0
- package/src/modules/manufacturing/index.ts +2 -0
- package/src/modules/manufacturing/lib/_db_deps.ts +22 -0
- package/src/modules/manufacturing/lib/errors.generated.ts +592 -0
- package/src/modules/manufacturing/lib/permissions.generated.ts +35 -0
- package/src/modules/manufacturing/lib/types.ts +111 -0
- package/src/modules/manufacturing/module.ts +226 -0
- package/src/modules/manufacturing/permissions.ts +3 -0
- package/src/modules/manufacturing/query/.gitkeep +0 -0
- package/src/modules/manufacturing/query/detectBillOfMaterialCircularReference.generated.ts +5 -0
- package/src/modules/manufacturing/query/detectBillOfMaterialCircularReference.test.ts +115 -0
- package/src/modules/manufacturing/query/detectBillOfMaterialCircularReference.ts +79 -0
- package/src/modules/manufacturing/query/explodeBillOfMaterial.generated.ts +5 -0
- package/src/modules/manufacturing/query/explodeBillOfMaterial.test.ts +445 -0
- package/src/modules/manufacturing/query/explodeBillOfMaterial.ts +306 -0
- package/src/modules/manufacturing/query/getBillOfMaterial.generated.ts +5 -0
- package/src/modules/manufacturing/query/getBillOfMaterial.test.ts +64 -0
- package/src/modules/manufacturing/query/getBillOfMaterial.ts +27 -0
- package/src/modules/manufacturing/query/getManufacturingCostSummary.generated.ts +5 -0
- package/src/modules/manufacturing/query/getManufacturingCostSummary.test.ts +147 -0
- package/src/modules/manufacturing/query/getManufacturingCostSummary.ts +46 -0
- package/src/modules/manufacturing/query/getProductionOrder.generated.ts +5 -0
- package/src/modules/manufacturing/query/getProductionOrder.test.ts +139 -0
- package/src/modules/manufacturing/query/getProductionOrder.ts +84 -0
- package/src/modules/manufacturing/query/getRouting.generated.ts +5 -0
- package/src/modules/manufacturing/query/getRouting.test.ts +71 -0
- package/src/modules/manufacturing/query/getRouting.ts +34 -0
- package/src/modules/manufacturing/query/getWorkCenter.generated.ts +5 -0
- package/src/modules/manufacturing/query/getWorkCenter.test.ts +37 -0
- package/src/modules/manufacturing/query/getWorkCenter.ts +21 -0
- package/src/modules/manufacturing/query/getWorkOrder.generated.ts +5 -0
- package/src/modules/manufacturing/query/getWorkOrder.test.ts +73 -0
- package/src/modules/manufacturing/query/getWorkOrder.ts +28 -0
- package/src/modules/manufacturing/query/listBillOfMaterialsByItem.generated.ts +5 -0
- package/src/modules/manufacturing/query/listBillOfMaterialsByItem.test.ts +107 -0
- package/src/modules/manufacturing/query/listBillOfMaterialsByItem.ts +58 -0
- package/src/modules/manufacturing/query/listManufacturingCostSummariesByStatus.generated.ts +5 -0
- package/src/modules/manufacturing/query/listManufacturingCostSummariesByStatus.test.ts +96 -0
- package/src/modules/manufacturing/query/listManufacturingCostSummariesByStatus.ts +77 -0
- package/src/modules/manufacturing/query/listProductionOrdersByStatus.generated.ts +5 -0
- package/src/modules/manufacturing/query/listProductionOrdersByStatus.test.ts +121 -0
- package/src/modules/manufacturing/query/listProductionOrdersByStatus.ts +83 -0
- package/src/modules/manufacturing/query/listRoutingsByItem.generated.ts +5 -0
- package/src/modules/manufacturing/query/listRoutingsByItem.test.ts +110 -0
- package/src/modules/manufacturing/query/listRoutingsByItem.ts +54 -0
- package/src/modules/manufacturing/query/listWorkCentersBySite.generated.ts +5 -0
- package/src/modules/manufacturing/query/listWorkCentersBySite.test.ts +81 -0
- package/src/modules/manufacturing/query/listWorkCentersBySite.ts +70 -0
- package/src/modules/manufacturing/query/listWorkOrdersByProductionOrder.generated.ts +5 -0
- package/src/modules/manufacturing/query/listWorkOrdersByProductionOrder.test.ts +102 -0
- package/src/modules/manufacturing/query/listWorkOrdersByProductionOrder.ts +53 -0
- package/src/modules/manufacturing/query/listWorkOrdersByWorkCenter.generated.ts +5 -0
- package/src/modules/manufacturing/query/listWorkOrdersByWorkCenter.test.ts +143 -0
- package/src/modules/manufacturing/query/listWorkOrdersByWorkCenter.ts +56 -0
- package/src/modules/manufacturing/seed/index.ts +19 -0
- package/src/modules/manufacturing/tailor.config.ts +13 -0
- package/src/modules/manufacturing/tailor.d.ts +13 -0
- package/src/modules/manufacturing/testing/commandTestUtils.ts +29 -0
- package/src/modules/manufacturing/testing/fixtures.ts +402 -0
- package/templates/scaffold/app/backend/package.json +9 -2
- package/templates/scaffold/app/backend/src/tests/utils/graphql-client.ts +66 -0
- package/templates/scaffold/app/backend/src/tests/utils/setup.ts +21 -0
- package/templates/scaffold/app/backend/tsconfig.json +9 -2
- package/templates/scaffold/app/backend/vitest.config.ts +35 -0
- package/templates/scaffold/app/frontend/package.json +2 -2
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# ActivateBillOfMaterial
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ActivateBillOfMaterial validates a draft BOM version and makes it selectable for production-order release. Activation is where circular-reference checks, effectivity conflicts, and component readiness are enforced.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target BOM must exist and be in `DRAFT`.
|
|
10
|
+
- The BOM must contain at least one valid component line.
|
|
11
|
+
- All referenced items must be active in the required scope.
|
|
12
|
+
- Manufactured-child references must not create a direct or indirect circular structure.
|
|
13
|
+
- Overlapping active effectivity windows for the same parent item and scope are rejected unless selection remains unambiguous.
|
|
14
|
+
- Activation preserves any already released production-order snapshots from other versions.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive activate request] --> B{BOM exists and is DRAFT?}
|
|
21
|
+
B -->|No| C[Return BOM_NOT_ACTIVATABLE]
|
|
22
|
+
B -->|Yes| D[Validate component readiness]
|
|
23
|
+
D --> E[Check circular references]
|
|
24
|
+
E --> F[Check effectivity conflicts]
|
|
25
|
+
F --> G[Set status to ACTIVE]
|
|
26
|
+
G --> H[Return active BOM]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [detectBillOfMaterialCircularReference](../queries/DetectBillOfMaterialCircularReference.md) - Prevent cyclical manufactured-item structures.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **BOM_NOT_FOUND**: Target BOM does not exist.
|
|
36
|
+
- **BOM_NOT_ACTIVATABLE**: The BOM is not in `DRAFT`.
|
|
37
|
+
- **COMPONENT_LINE_REQUIRED**: The BOM has no component lines.
|
|
38
|
+
- **COMPONENT_ITEM_INACTIVE**: A referenced component is inactive.
|
|
39
|
+
- **CIRCULAR_BOM_REFERENCE**: A direct or indirect manufactured-item loop was detected.
|
|
40
|
+
- **EFFECTIVITY_CONFLICT**: Activation would create conflicting active effectivity windows.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- activates a valid draft BOM
|
|
45
|
+
- returns error when the BOM does not exist
|
|
46
|
+
- returns error when the BOM is not in `DRAFT`
|
|
47
|
+
- returns error when the BOM has no component lines
|
|
48
|
+
- returns error when a component item is inactive
|
|
49
|
+
- returns error when a circular manufactured-item structure is detected
|
|
50
|
+
- returns error when activation would create an effectivity conflict
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# ActivateRouting
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ActivateRouting validates a draft routing and makes it eligible for production-order release. Activation enforces operation completeness, sequence integrity, and active work-center readiness.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target routing must exist and be in `DRAFT`.
|
|
10
|
+
- The routing must contain at least one operation.
|
|
11
|
+
- Operation sequence numbers must be unique and ordered.
|
|
12
|
+
- Every referenced work center must be active and within the same company.
|
|
13
|
+
- Activation preserves existing operation snapshots already frozen on released orders.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive activate request] --> B{Routing exists and is DRAFT?}
|
|
20
|
+
B -->|No| C[Return ROUTING_NOT_ACTIVATABLE]
|
|
21
|
+
B -->|Yes| D[Validate operations]
|
|
22
|
+
D --> E[Validate work-center readiness]
|
|
23
|
+
E --> F[Set status to ACTIVE]
|
|
24
|
+
F --> G[Return active routing]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## External Dependencies
|
|
28
|
+
|
|
29
|
+
- [WorkCenter](../models/WorkCenter.md) - Referenced work centers must already be active.
|
|
30
|
+
|
|
31
|
+
## Error Scenarios
|
|
32
|
+
|
|
33
|
+
- **ROUTING_NOT_FOUND**: Target routing does not exist.
|
|
34
|
+
- **ROUTING_NOT_ACTIVATABLE**: The routing is not in `DRAFT`.
|
|
35
|
+
- **OPERATION_REQUIRED**: The routing has no operations.
|
|
36
|
+
- **DUPLICATE_OPERATION_SEQUENCE**: Two operations use the same sequence number.
|
|
37
|
+
- **WORK_CENTER_NOT_ACTIVE**: A referenced work center is inactive.
|
|
38
|
+
- **CROSS_COMPANY_WORK_CENTER**: A work center belongs to a different company scope.
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- activates a valid draft routing
|
|
43
|
+
- returns error when the routing does not exist
|
|
44
|
+
- returns error when the routing is not in DRAFT
|
|
45
|
+
- returns error when the routing has no operations
|
|
46
|
+
- returns error when operation sequence numbers are duplicated
|
|
47
|
+
- returns error when a referenced work center is inactive
|
|
48
|
+
- returns error when a referenced work center is outside the routing company
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# ActivateWorkCenter
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ActivateWorkCenter validates that a draft or inactive work center has the execution data required by planning and costing, then marks it available for routing and work-order use.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target work center must exist.
|
|
10
|
+
- Only `DRAFT` or `INACTIVE` work centers can be activated.
|
|
11
|
+
- Required calendar or availability context must be present.
|
|
12
|
+
- Capacity must be positive.
|
|
13
|
+
- Any configured rates and overhead settings must be internally valid.
|
|
14
|
+
- Activation makes the work center eligible for active routing operations.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive activate request] --> B{Work center exists?}
|
|
21
|
+
B -->|No| C[Return WORK_CENTER_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Status activatable?}
|
|
23
|
+
D -->|No| E[Return WORK_CENTER_NOT_ACTIVATABLE]
|
|
24
|
+
D -->|Yes| F[Validate calendar, capacity, and rates]
|
|
25
|
+
F --> G[Set status to ACTIVE]
|
|
26
|
+
G --> H[Return active work center]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [Site](../../../organization/docs/models/Site.md) - Site-scoped activation requires a valid site context.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **WORK_CENTER_NOT_FOUND**: Target work center does not exist.
|
|
36
|
+
- **WORK_CENTER_NOT_ACTIVATABLE**: The current status does not allow activation.
|
|
37
|
+
- **MISSING_CALENDAR_CONTEXT**: Required calendar or availability data is missing.
|
|
38
|
+
- **INVALID_CAPACITY**: Capacity is zero or negative.
|
|
39
|
+
- **INVALID_RATE**: Labor or machine rate is negative.
|
|
40
|
+
- **OVERHEAD_CURRENCY_REQUIRED**: Fixed-amount overhead requires a currency.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- activates a valid draft work center
|
|
45
|
+
- reactivates a valid inactive work center
|
|
46
|
+
- returns error when the work center does not exist
|
|
47
|
+
- returns error when the status does not allow activation
|
|
48
|
+
- returns error when required calendar context is missing
|
|
49
|
+
- returns error when capacity is not positive
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CancelProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CancelProductionOrder abandons a draft or not-yet-started released order. It preserves audit history while blocking further execution updates and cascading cancellation to pending work orders.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist.
|
|
10
|
+
- Only `DRAFT` or `RELEASED` orders may be cancelled.
|
|
11
|
+
- Released orders cannot be cancelled once meaningful execution or inventory evidence exists.
|
|
12
|
+
- Cancelling a released order cascades cancellation to pending work orders.
|
|
13
|
+
- Cancelled orders reject all further execution, completion, and closeout commands.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive cancel request] --> B{Order exists?}
|
|
20
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status cancellable?}
|
|
22
|
+
D -->|No| E[Return PRODUCTION_ORDER_NOT_CANCELLABLE]
|
|
23
|
+
D -->|Yes| F{Execution or inventory evidence exists?}
|
|
24
|
+
F -->|Yes| G[Return EXECUTION_ALREADY_STARTED]
|
|
25
|
+
F -->|No| H[Cancel order and pending work orders]
|
|
26
|
+
H --> I[Return cancelled order]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [WorkOrder](../models/WorkOrder.md) - Pending child work orders are cancelled with the parent order.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
36
|
+
- **PRODUCTION_ORDER_NOT_CANCELLABLE**: The current status does not allow cancellation.
|
|
37
|
+
- **EXECUTION_ALREADY_STARTED**: Work-order execution evidence already exists.
|
|
38
|
+
- **INVENTORY_HANDOFF_EXISTS**: Inventory issue or receipt evidence already exists.
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- cancels a draft production order
|
|
43
|
+
- cancels a released order before execution starts
|
|
44
|
+
- returns error when the order does not exist
|
|
45
|
+
- returns error when the status does not allow cancellation
|
|
46
|
+
- returns error when execution evidence already exists
|
|
47
|
+
- returns error when inventory handoff evidence already exists
|
|
48
|
+
- cascades cancellation to pending work orders
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# CloseProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CloseProductionOrder performs the final administrative close after technical completion and downstream cost settlement are done. The command is the last lifecycle step for the production order.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist and be in `TECHNICALLY_COMPLETE`.
|
|
10
|
+
- All open work orders and execution exceptions must already be resolved.
|
|
11
|
+
- The linked manufacturing cost summary must be in `SETTLED`.
|
|
12
|
+
- Closed orders reject further execution, reopen, or rescheduling commands.
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive close request] --> B{Order exists and is TECHNICALLY_COMPLETE?}
|
|
19
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_CLOSABLE]
|
|
20
|
+
B -->|Yes| D{Open work or exceptions remain?}
|
|
21
|
+
D -->|Yes| E[Return OPEN_WORK_REMAINS]
|
|
22
|
+
D -->|No| F{Cost summary settled?}
|
|
23
|
+
F -->|No| G[Return COST_SUMMARY_NOT_SETTLED]
|
|
24
|
+
F -->|Yes| H[Set order status to CLOSED]
|
|
25
|
+
H --> I[Return closed order]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- [ManufacturingCostSummary](../models/ManufacturingCostSummary.md) - Administrative close depends on settled variance review.
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
35
|
+
- **PRODUCTION_ORDER_NOT_CLOSABLE**: The order is not in `TECHNICALLY_COMPLETE`.
|
|
36
|
+
- **OPEN_WORK_REMAINS**: Open work orders or execution exceptions still exist.
|
|
37
|
+
- **COST_SUMMARY_NOT_SETTLED**: The linked cost summary is not in `SETTLED`.
|
|
38
|
+
|
|
39
|
+
## Test Cases
|
|
40
|
+
|
|
41
|
+
- closes a technically complete order with a settled cost summary
|
|
42
|
+
- returns error when the order does not exist
|
|
43
|
+
- returns error when the order is not technically complete
|
|
44
|
+
- returns error when open work or execution exceptions remain
|
|
45
|
+
- returns error when the linked cost summary is not settled
|
|
46
|
+
- blocks further execution commands after close
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CompleteProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CompleteProductionOrder marks physical production complete once required work orders are finished and final receipt obligations are satisfied. The command freezes production execution while still allowing later technical completion and review.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist and be in `IN_PROGRESS`.
|
|
10
|
+
- All mandatory work orders must be completed.
|
|
11
|
+
- Final output reporting must exist for the required good quantity.
|
|
12
|
+
- Finished-goods or intermediate receipt handoff required by policy must already be submitted.
|
|
13
|
+
- Completing the order blocks additional operational production work except through controlled reopen.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive complete request] --> B{Order exists and is IN_PROGRESS?}
|
|
20
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_COMPLETABLE]
|
|
21
|
+
B -->|Yes| D{All required work orders complete?}
|
|
22
|
+
D -->|No| E[Return OPEN_WORK_ORDER_REMAINS]
|
|
23
|
+
D -->|Yes| F{Final reporting and receipt handoff complete?}
|
|
24
|
+
F -->|No| G[Return FINAL_RECEIPT_REQUIRED]
|
|
25
|
+
F -->|Yes| H[Set status to COMPLETED]
|
|
26
|
+
H --> I[Return completed order]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [WorkOrder](../models/WorkOrder.md) - Completion requires the operation-level plan to be done.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
36
|
+
- **PRODUCTION_ORDER_NOT_COMPLETABLE**: The order is not in `IN_PROGRESS`.
|
|
37
|
+
- **OPEN_WORK_ORDER_REMAINS**: One or more required work orders are still open.
|
|
38
|
+
- **FINAL_OUTPUT_REQUIRED**: Final output reporting is incomplete.
|
|
39
|
+
- **FINAL_RECEIPT_REQUIRED**: Required receipt handoff evidence is missing.
|
|
40
|
+
|
|
41
|
+
## Test Cases
|
|
42
|
+
|
|
43
|
+
- completes an in-progress order after all required work orders finish
|
|
44
|
+
- returns error when the order does not exist
|
|
45
|
+
- returns error when the order is not in `IN_PROGRESS`
|
|
46
|
+
- returns error when required work orders remain open
|
|
47
|
+
- returns error when final output reporting is incomplete
|
|
48
|
+
- returns error when required receipt handoff evidence is missing
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# CompleteWorkOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CompleteWorkOrder finishes an operation after final execution evidence is recorded. The command may trigger manual-issue reconciliation, backflush issue intent, and intermediate or finished receipt handoff to inventory.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target work order must exist and be in `IN_PROGRESS`.
|
|
10
|
+
- The work order must have started before completion.
|
|
11
|
+
- Completion transaction must report positive completed quantity or valid zero-quantity completion under an explicit bypass policy.
|
|
12
|
+
- Backflush consumption must not duplicate quantities already issued manually.
|
|
13
|
+
- Required receipt-handoff payload fields must be present when output receipt is required.
|
|
14
|
+
- `finishedGoodLotReference` is required whenever the receipted item is lot-tracked.
|
|
15
|
+
- `serialReferences` are required whenever the receipted item is serial-tracked.
|
|
16
|
+
- Completing the work order updates parent production-order progress.
|
|
17
|
+
|
|
18
|
+
## Process Flow
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart TD
|
|
22
|
+
A[Receive complete request] --> B{Work order exists and is IN_PROGRESS?}
|
|
23
|
+
B -->|No| C[Return WORK_ORDER_NOT_COMPLETABLE]
|
|
24
|
+
B -->|Yes| D[Validate completion quantities]
|
|
25
|
+
D --> E{Backflush required?}
|
|
26
|
+
E -->|Yes| F[Emit material issue intent]
|
|
27
|
+
E -->|No| G[Skip issue intent]
|
|
28
|
+
F --> H{Receipt handoff required?}
|
|
29
|
+
G --> H
|
|
30
|
+
H -->|Yes| I[Validate lot and serial receipt requirements]
|
|
31
|
+
I --> J[Emit ManufacturingReceiptHandoff]
|
|
32
|
+
H -->|No| K[Skip receipt handoff]
|
|
33
|
+
J --> L[Set status to COMPLETE]
|
|
34
|
+
K --> L
|
|
35
|
+
L --> M[Roll up parent progress]
|
|
36
|
+
M --> N[Return completed work order]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## External Dependencies
|
|
40
|
+
|
|
41
|
+
- [ProductionOrder](../models/ProductionOrder.md) - Completion rolls up into parent order progress and completion gating.
|
|
42
|
+
|
|
43
|
+
## Error Scenarios
|
|
44
|
+
|
|
45
|
+
- **WORK_ORDER_NOT_FOUND**: Target work order does not exist.
|
|
46
|
+
- **WORK_ORDER_NOT_COMPLETABLE**: Work order is not in `IN_PROGRESS`.
|
|
47
|
+
- **WORK_ORDER_NOT_STARTED**: No actual start evidence exists.
|
|
48
|
+
- **INVALID_COMPLETION_QUANTITY**: Completion quantity is invalid for the transaction.
|
|
49
|
+
- **DUPLICATE_BACKFLUSH_RISK**: Requested backflush would duplicate manual issue quantity.
|
|
50
|
+
- **RECEIPT_HANDOFF_REQUIRED**: Required receipt-handoff data is incomplete.
|
|
51
|
+
- **LOT_REFERENCE_REQUIRED**: `finishedGoodLotReference` is required for a lot-tracked receipted item.
|
|
52
|
+
- **SERIAL_REFERENCE_REQUIRED**: `serialReferences` are required for a serial-tracked receipted item.
|
|
53
|
+
|
|
54
|
+
## Test Cases
|
|
55
|
+
|
|
56
|
+
- completes an in-progress work order with final quantity reporting
|
|
57
|
+
- returns error when the work order does not exist
|
|
58
|
+
- returns error when the work order is not in progress
|
|
59
|
+
- returns error when the work order was never started
|
|
60
|
+
- returns error when completion quantity is invalid
|
|
61
|
+
- returns error when backflush would duplicate manual issue
|
|
62
|
+
- emits receipt handoff when output receipt is required
|
|
63
|
+
- returns error when receipt is required but receipt data is missing
|
|
64
|
+
- returns error when a lot-tracked receipt omits finishedGoodLotReference
|
|
65
|
+
- returns error when a serial-tracked receipt omits serialReferences
|
|
66
|
+
- rolls up completion to the parent order
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# CreateBillOfMaterial
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CreateBillOfMaterial creates a draft BOM version for one manufactured parent item at company or site scope. The command establishes the initial `bomType`, effectivity window, default-selection intent, and component-line payload that later activation validates.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Parent item is required and must be an active manufactured item.
|
|
10
|
+
- Company scope is required; site scope is optional.
|
|
11
|
+
- `bomType` must be `MANUFACTURE`, `PHANTOM`, or `KIT`.
|
|
12
|
+
- At least one component line is required.
|
|
13
|
+
- Each component line requires positive quantity and a compatible unit of measure.
|
|
14
|
+
- Inactive items cannot be added as components.
|
|
15
|
+
- Initial version identity must be unique within the same parent item and scope.
|
|
16
|
+
- New BOMs are created in `DRAFT`.
|
|
17
|
+
|
|
18
|
+
## Process Flow
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart TD
|
|
22
|
+
A[Receive create request] --> B[Validate parent item and scope]
|
|
23
|
+
B --> C[Validate bomType and lines]
|
|
24
|
+
C --> D{Version identity unique?}
|
|
25
|
+
D -->|No| E[Return BOM_VERSION_CONFLICT]
|
|
26
|
+
D -->|Yes| F[Create draft BOM and lines]
|
|
27
|
+
F --> G[Return draft BOM]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## External Dependencies
|
|
31
|
+
|
|
32
|
+
- [Item](../../../item-management/docs/models/Item.md) - Parent and component references must resolve to valid items.
|
|
33
|
+
|
|
34
|
+
## Error Scenarios
|
|
35
|
+
|
|
36
|
+
- **PARENT_ITEM_NOT_FOUND**: Referenced parent item does not exist.
|
|
37
|
+
- **PARENT_ITEM_NOT_MANUFACTURED**: Parent item is not eligible for manufacturing BOM ownership.
|
|
38
|
+
- **INVALID_BOM_TYPE**: `bomType` is not one of the supported values.
|
|
39
|
+
- **COMPONENT_LINE_REQUIRED**: No component lines were provided.
|
|
40
|
+
- **INVALID_COMPONENT_QUANTITY**: A component quantity is zero or negative.
|
|
41
|
+
- **COMPONENT_ITEM_INACTIVE**: A new component references an inactive item.
|
|
42
|
+
- **BOM_VERSION_CONFLICT**: The proposed version or effectivity identity already exists in the same scope.
|
|
43
|
+
|
|
44
|
+
## Test Cases
|
|
45
|
+
|
|
46
|
+
- creates a draft BOM for an active manufactured item
|
|
47
|
+
- returns error when the parent item does not exist
|
|
48
|
+
- returns error when the parent item is not manufacturable
|
|
49
|
+
- returns error when `bomType` is invalid
|
|
50
|
+
- returns error when no component lines are provided
|
|
51
|
+
- returns error when a component quantity is not positive
|
|
52
|
+
- returns error when a component item is inactive
|
|
53
|
+
- returns error when a component item exists but is inactive
|
|
54
|
+
- returns error when the version identity already exists in scope
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# CreateProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CreateProductionOrder creates a draft manufacturing request with produced item, quantity, site, and planned dates. It records planner intent without yet freezing BOM, routing, work orders, or cost assumptions.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Produced item, company, site, and planned quantity are required.
|
|
10
|
+
- Planned quantity must be greater than zero.
|
|
11
|
+
- Produced item must be an active manufacturable item.
|
|
12
|
+
- Referenced company and site must exist and belong to the same scope.
|
|
13
|
+
- Optional BOM or routing references must belong to the same company and site context.
|
|
14
|
+
- New production orders are created in `DRAFT`.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create request] --> B[Validate item, quantity, and scope]
|
|
21
|
+
B --> C[Validate optional BOM and routing references]
|
|
22
|
+
C --> D[Create draft production order]
|
|
23
|
+
D --> E[Return draft order]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## External Dependencies
|
|
27
|
+
|
|
28
|
+
- [Item](../../../item-management/docs/models/Item.md) - Produced item must be valid and manufacturable.
|
|
29
|
+
- [Company](../../../organization/docs/models/Company.md) - Order company scope must be valid.
|
|
30
|
+
- [Site](../../../organization/docs/models/Site.md) - Execution site must be valid for the company scope.
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **PRODUCTION_ITEM_NOT_FOUND**: Produced item does not exist.
|
|
35
|
+
- **PRODUCTION_ITEM_NOT_MANUFACTURABLE**: Produced item cannot be built through manufacturing.
|
|
36
|
+
- **INVALID_PLANNED_QUANTITY**: Planned quantity is zero or negative.
|
|
37
|
+
- **INVALID_SITE_SCOPE**: Company and site scope are missing or inconsistent.
|
|
38
|
+
- **CROSS_SCOPE_MASTER_REFERENCE**: BOM or routing reference belongs to another company or site.
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- creates a draft production order for a manufacturable item
|
|
43
|
+
- returns error when the produced item does not exist
|
|
44
|
+
- returns error when the produced item is not manufacturable
|
|
45
|
+
- returns error when planned quantity is not positive
|
|
46
|
+
- returns error when site scope is inconsistent with company
|
|
47
|
+
- returns error when site does not exist
|
|
48
|
+
- returns error when an optional BOM reference is outside scope
|
|
49
|
+
- returns error when an optional routing reference is outside scope
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# CreateRouting
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CreateRouting creates a draft process definition for one manufactured item or scope. The command stores ordered operation payload, standard times, instructions, and work-center assignments that later activation validates.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target manufactured item and company scope are required.
|
|
10
|
+
- At least one operation is required.
|
|
11
|
+
- Operation sequence numbers must be unique within the routing.
|
|
12
|
+
- Standard setup and run times must be zero or greater.
|
|
13
|
+
- Every operation must reference a valid work center in the same company scope.
|
|
14
|
+
- New routings are created in `DRAFT`.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create request] --> B[Validate parent item and scope]
|
|
21
|
+
B --> C[Validate operation payload]
|
|
22
|
+
C --> D{Sequence unique?}
|
|
23
|
+
D -->|No| E[Return DUPLICATE_OPERATION_SEQUENCE]
|
|
24
|
+
D -->|Yes| F[Create draft routing and operations]
|
|
25
|
+
F --> G[Return draft routing]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- [Item](../../../item-management/docs/models/Item.md) - The routing targets one manufactured parent item.
|
|
31
|
+
- [WorkCenter](../models/WorkCenter.md) - Each operation must reference a valid work center.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **ROUTING_ITEM_NOT_FOUND**: Referenced parent item does not exist.
|
|
36
|
+
- **OPERATION_REQUIRED**: No routing operations were provided.
|
|
37
|
+
- **DUPLICATE_OPERATION_SEQUENCE**: Two operations use the same sequence number.
|
|
38
|
+
- **INVALID_STANDARD_TIME**: Setup or run time is negative.
|
|
39
|
+
- **WORK_CENTER_NOT_FOUND**: A referenced work center does not exist.
|
|
40
|
+
- **CROSS_COMPANY_WORK_CENTER**: A work center belongs to a different company scope.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- creates a draft routing with ordered operations
|
|
45
|
+
- returns error when no operations are provided
|
|
46
|
+
- returns error when two operations share the same sequence
|
|
47
|
+
- returns error when a standard time is negative
|
|
48
|
+
- returns error when a referenced work center does not exist
|
|
49
|
+
- returns error when a work center is outside the routing company
|
|
50
|
+
- returns error when parent item does not exist
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# CreateWorkCenter
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CreateWorkCenter creates a draft work center with scope, capacity assumptions, labor or machine rate context, and optional overhead-absorption policy. The work center remains non-executable until explicitly activated.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Company scope and unique work-center code are required.
|
|
10
|
+
- Site scope is required when the company model uses site-level work centers.
|
|
11
|
+
- Capacity must be positive.
|
|
12
|
+
- Labor and machine rates must be zero or greater.
|
|
13
|
+
- Overhead method, when provided, must be supported by the manufacturing-cost policy.
|
|
14
|
+
- New work centers are created in `DRAFT`.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create request] --> B[Validate scope and code]
|
|
21
|
+
B --> C[Validate capacity and rates]
|
|
22
|
+
C --> D{Code unique in scope?}
|
|
23
|
+
D -->|No| E[Return DUPLICATE_WORK_CENTER_CODE]
|
|
24
|
+
D -->|Yes| F[Create draft work center]
|
|
25
|
+
F --> G[Return draft work center]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- [Company](../../../organization/docs/models/Company.md) - Work center scope must belong to a valid company.
|
|
31
|
+
- [Site](../../../organization/docs/models/Site.md) - Site-scoped work centers must reference a valid organization site.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **INVALID_SCOPE**: Required company or site scope is missing.
|
|
36
|
+
- **DUPLICATE_WORK_CENTER_CODE**: Another work center already uses the same code in scope.
|
|
37
|
+
- **INVALID_CAPACITY**: Capacity is zero or negative.
|
|
38
|
+
- **INVALID_RATE**: Labor or machine rate is negative.
|
|
39
|
+
- **INVALID_OVERHEAD_METHOD**: Overhead method is not supported.
|
|
40
|
+
- **OVERHEAD_CURRENCY_REQUIRED**: Fixed-amount overhead requires a currency.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- creates a draft work center with positive capacity
|
|
45
|
+
- returns error when scope is missing
|
|
46
|
+
- returns error when the code already exists in scope
|
|
47
|
+
- returns error when capacity is not positive
|
|
48
|
+
- returns error when a rate is negative
|
|
49
|
+
- returns error when overhead method is invalid
|
|
50
|
+
- returns error when fixed-amount overhead omits currency
|
|
51
|
+
- creates a draft work center without siteId when not required
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# DeactivateBillOfMaterial
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
DeactivateBillOfMaterial removes an active BOM version from future selection. The command preserves audit history and any released production-order snapshots that already depend on the version.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target BOM must exist.
|
|
10
|
+
- Only `ACTIVE` BOM versions can be deactivated.
|
|
11
|
+
- Deactivation prevents future production-order release from selecting the version.
|
|
12
|
+
- Existing production-order snapshots remain valid after deactivation.
|
|
13
|
+
- Deactivation may be blocked when policy requires a replacement active version first.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive deactivate request] --> B{BOM exists?}
|
|
20
|
+
B -->|No| C[Return BOM_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status is ACTIVE?}
|
|
22
|
+
D -->|No| E[Return BOM_NOT_DEACTIVATABLE]
|
|
23
|
+
D -->|Yes| F{Replacement policy satisfied?}
|
|
24
|
+
F -->|No| G[Return REPLACEMENT_REQUIRED]
|
|
25
|
+
F -->|Yes| H[Set status to INACTIVE]
|
|
26
|
+
H --> I[Return inactive BOM]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- None
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **BOM_NOT_FOUND**: Target BOM does not exist.
|
|
36
|
+
- **BOM_NOT_DEACTIVATABLE**: The BOM is not in `ACTIVE`.
|
|
37
|
+
- **REPLACEMENT_REQUIRED**: Policy requires another selectable BOM before deactivation.
|
|
38
|
+
|
|
39
|
+
## Test Cases
|
|
40
|
+
|
|
41
|
+
- deactivates an active BOM
|
|
42
|
+
- returns error when the BOM does not exist
|
|
43
|
+
- returns error when the BOM is not active
|
|
44
|
+
- returns error when replacement policy blocks deactivation
|
|
45
|
+
- preserves released production-order snapshots after deactivation
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# DeactivateRouting
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
DeactivateRouting removes an active routing from future production-order selection. Released production orders keep their frozen operation plan even after the routing is deactivated.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target routing must exist.
|
|
10
|
+
- Only `ACTIVE` routings can be deactivated.
|
|
11
|
+
- Deactivation blocks future selection for release.
|
|
12
|
+
- Existing production-order and work-order snapshots remain valid.
|
|
13
|
+
- Deactivation may be blocked when future scheduling policy requires a replacement routing first.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive deactivate request] --> B{Routing exists?}
|
|
20
|
+
B -->|No| C[Return ROUTING_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status is ACTIVE?}
|
|
22
|
+
D -->|No| E[Return ROUTING_NOT_DEACTIVATABLE]
|
|
23
|
+
D -->|Yes| F{Replacement policy satisfied?}
|
|
24
|
+
F -->|No| G[Return REPLACEMENT_REQUIRED]
|
|
25
|
+
F -->|Yes| H[Set status to INACTIVE]
|
|
26
|
+
H --> I[Return inactive routing]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- None
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **ROUTING_NOT_FOUND**: Target routing does not exist.
|
|
36
|
+
- **ROUTING_NOT_DEACTIVATABLE**: The routing is not in `ACTIVE`.
|
|
37
|
+
- **REPLACEMENT_REQUIRED**: Policy requires another selectable routing before deactivation.
|
|
38
|
+
|
|
39
|
+
## Test Cases
|
|
40
|
+
|
|
41
|
+
- deactivates an active routing
|
|
42
|
+
- returns error when the routing does not exist
|
|
43
|
+
- returns error when the routing is not active
|
|
44
|
+
- returns error when replacement policy blocks deactivation
|
|
45
|
+
- preserves released operation snapshots after deactivation
|