@tailor-platform/erp-kit 0.5.0 → 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 +24 -0
- package/dist/cli.mjs +139 -35
- package/package.json +1 -1
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +10 -5
- 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/init-module.test.ts +17 -3
- package/src/commands/init-module.ts +0 -12
- 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-code-boilerplate.test.ts +9 -1
- package/src/generator/generate-stubs.ts +4 -0
- package/src/generator/scaffold.ts +6 -2
- package/src/generator/stub-templates.test.ts +11 -0
- package/src/generator/stub-templates.ts +22 -1
- package/src/mdschema.ts +39 -3
- 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/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
- package/templates/scaffold/module/__dot__gitignore +3 -0
- package/templates/scaffold/module/eslint.config.js +31 -0
- package/templates/scaffold/module/generated/kysely-tailordb.ts +3 -0
- package/templates/scaffold/module/lib/types.ts +1 -6
- package/templates/scaffold/module/package.json +26 -0
- package/templates/scaffold/module/tsconfig.json +16 -0
- /package/{templates/scaffold/module/generated → src/modules/manufacturing/command}/.gitkeep +0 -0
|
@@ -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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# DeactivateWorkCenter
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
DeactivateWorkCenter removes a work center from future routing and release selection. The command preserves historical work-order and cost records while blocking new execution use.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target work center must exist.
|
|
10
|
+
- Only `ACTIVE` work centers can be deactivated.
|
|
11
|
+
- Deactivation may be blocked when future active routings or open released work still require the work center.
|
|
12
|
+
- Historical work orders and cost baselines remain intact after deactivation.
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive deactivate request] --> B{Work center exists?}
|
|
19
|
+
B -->|No| C[Return WORK_CENTER_NOT_FOUND]
|
|
20
|
+
B -->|Yes| D{Status is ACTIVE?}
|
|
21
|
+
D -->|No| E[Return WORK_CENTER_NOT_DEACTIVATABLE]
|
|
22
|
+
D -->|Yes| F{Open dependency check passes?}
|
|
23
|
+
F -->|No| G[Return WORK_CENTER_IN_USE]
|
|
24
|
+
F -->|Yes| H[Set status to INACTIVE]
|
|
25
|
+
H --> I[Return inactive work center]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- [Routing](../models/Routing.md) - Future active routings may block deactivation.
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **WORK_CENTER_NOT_FOUND**: Target work center does not exist.
|
|
35
|
+
- **WORK_CENTER_NOT_DEACTIVATABLE**: The work center is not in `ACTIVE`.
|
|
36
|
+
- **WORK_CENTER_IN_USE**: Future routings or open released work still require the work center.
|
|
37
|
+
|
|
38
|
+
## Test Cases
|
|
39
|
+
|
|
40
|
+
- deactivates an active work center with no blocking dependencies
|
|
41
|
+
- returns error when the work center does not exist
|
|
42
|
+
- returns error when the work center is not active
|
|
43
|
+
- returns error when open routing or released-work dependencies block deactivation
|
|
44
|
+
- returns error when open work orders block deactivation
|
|
45
|
+
- preserves historical work-order and cost data after deactivation
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# PauseWorkOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
PauseWorkOrder temporarily halts an in-progress operation and records the reason for the interruption. The command preserves accumulated execution history so the work order can later resume.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target work order must exist.
|
|
10
|
+
- Work order must be in `IN_PROGRESS`.
|
|
11
|
+
- Pause reason is required.
|
|
12
|
+
- Pausing preserves previously reported quantity, scrap, and time.
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive pause request] --> B{Work order exists?}
|
|
19
|
+
B -->|No| C[Return WORK_ORDER_NOT_FOUND]
|
|
20
|
+
B -->|Yes| D{Status is IN_PROGRESS?}
|
|
21
|
+
D -->|No| E[Return WORK_ORDER_NOT_PAUSABLE]
|
|
22
|
+
D -->|Yes| F{Pause reason provided?}
|
|
23
|
+
F -->|No| G[Return PAUSE_REASON_REQUIRED]
|
|
24
|
+
F -->|Yes| H[Record pause event and set PAUSED]
|
|
25
|
+
H --> I[Return paused work order]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- None
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **WORK_ORDER_NOT_FOUND**: Target work order does not exist.
|
|
35
|
+
- **WORK_ORDER_NOT_PAUSABLE**: Work order is not in `IN_PROGRESS`.
|
|
36
|
+
- **PAUSE_REASON_REQUIRED**: No pause reason was provided.
|
|
37
|
+
|
|
38
|
+
## Test Cases
|
|
39
|
+
|
|
40
|
+
- pauses an in-progress work order
|
|
41
|
+
- returns error when the work order does not exist
|
|
42
|
+
- returns error when the work order is not in progress
|
|
43
|
+
- returns error when no pause reason is provided
|
|
44
|
+
- preserves prior execution quantities and time after pause
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# RecordInventoryIssueOutcome
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
RecordInventoryIssueOutcome applies one inventory-owned valuation outcome to the manufacturing cost summary for a production order. It is the only valid path for actual material cost to enter manufacturing.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Referenced production order and cost summary must exist.
|
|
10
|
+
- Cost summary must be in `COLLECTING`.
|
|
11
|
+
- Inventory outcome payload must include `productionOrderReference`, `inventoryIssueReference`, `itemReference`, `issuedQuantity`, `unitOfMeasure`, `actualUnitCost`, `actualExtendedCost`, `currency`, `valuationMethod`, `postingDate`, and `siteReference`.
|
|
12
|
+
- Inventory issue outcome must already be final-valued by inventory.
|
|
13
|
+
- The event must not be double-applied to the same summary.
|
|
14
|
+
- Actual material cost is recorded using the payload values rather than manufacturing-side recalculation.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive inventory issue outcome] --> B[Resolve production order and cost summary]
|
|
21
|
+
B --> C[Validate required payload fields]
|
|
22
|
+
C --> D{Summary collecting?}
|
|
23
|
+
D -->|No| E[Return COST_SUMMARY_NOT_COLLECTING]
|
|
24
|
+
D -->|Yes| F{Inventory valuation final?}
|
|
25
|
+
F -->|No| G[Return ISSUE_OUTCOME_NOT_FINAL]
|
|
26
|
+
F -->|Yes| H{Already applied?}
|
|
27
|
+
H -->|Yes| I[Return DUPLICATE_ISSUE_OUTCOME]
|
|
28
|
+
H -->|No| J[Apply actual material cost to summary]
|
|
29
|
+
J --> K[Return updated summary]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## External Dependencies
|
|
33
|
+
|
|
34
|
+
- [ManufacturingCostSummary](../models/ManufacturingCostSummary.md) - Actual material issue outcomes accumulate on the linked summary.
|
|
35
|
+
|
|
36
|
+
## Error Scenarios
|
|
37
|
+
|
|
38
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Referenced production order does not exist.
|
|
39
|
+
- **COST_SUMMARY_NOT_FOUND**: Linked cost summary does not exist.
|
|
40
|
+
- **COST_SUMMARY_NOT_COLLECTING**: Summary is not in `COLLECTING`.
|
|
41
|
+
- **MISSING_INVENTORY_ISSUE_REFERENCE**: `inventoryIssueReference` was not provided in the outcome payload.
|
|
42
|
+
- **MISSING_ACTUAL_UNIT_COST**: `actualUnitCost` was not provided in the outcome payload.
|
|
43
|
+
- **MISSING_ACTUAL_EXTENDED_COST**: `actualExtendedCost` was not provided in the outcome payload.
|
|
44
|
+
- **MISSING_POSTING_DATE**: `postingDate` was not provided in the outcome payload.
|
|
45
|
+
- **ISSUE_OUTCOME_NOT_FINAL**: Inventory valuation is not yet final.
|
|
46
|
+
- **DUPLICATE_ISSUE_OUTCOME**: The same inventory issue outcome was already applied.
|
|
47
|
+
|
|
48
|
+
## Test Cases
|
|
49
|
+
|
|
50
|
+
- applies a final-valued inventory issue outcome to a collecting summary
|
|
51
|
+
- returns error when the production order does not exist
|
|
52
|
+
- returns error when the linked cost summary does not exist
|
|
53
|
+
- returns error when the summary is not collecting
|
|
54
|
+
- returns error when `inventoryIssueReference` is missing from the outcome payload
|
|
55
|
+
- returns error when `actualUnitCost` is missing from the outcome payload
|
|
56
|
+
- returns error when `actualExtendedCost` is missing from the outcome payload
|
|
57
|
+
- returns error when `postingDate` is missing from the outcome payload
|
|
58
|
+
- returns error when the inventory issue outcome is not yet final
|
|
59
|
+
- returns error when the same issue outcome is applied twice
|
package/src/modules/manufacturing/docs/commands/RecordManufacturingCostSettlementAcknowledgment.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# RecordManufacturingCostSettlementAcknowledgment
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
RecordManufacturingCostSettlementAcknowledgment persists the downstream accounting acknowledgment that a reviewed manufacturing cost handoff has been consumed by settlement processing. It is the only path that moves a reviewed summary to `SETTLED`.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target cost summary must exist and be in `VARIANCE_REVIEWED`.
|
|
10
|
+
- Acknowledgment payload must match the reviewed summary's production order, summary reference, and settlement currency.
|
|
11
|
+
- Downstream accounting owns the acknowledgment payload; manufacturing may record it but must not fabricate it.
|
|
12
|
+
- An acknowledgment that is rejected, reversed, or superseded by downstream accounting must not settle the summary and requires a valid replacement acknowledgment before settlement can proceed.
|
|
13
|
+
- Successful recording sets the summary status to `SETTLED`.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive settlement acknowledgment] --> B{Summary exists and is reviewed?}
|
|
20
|
+
B -->|No| C[Return COST_SUMMARY_NOT_SETTLABLE]
|
|
21
|
+
B -->|Yes| D[Validate payload identity and currency]
|
|
22
|
+
D --> E{Payload valid?}
|
|
23
|
+
E -->|No| F[Return ACKNOWLEDGMENT_MISMATCH]
|
|
24
|
+
E -->|Yes| G{Downstream accepted and not superseded?}
|
|
25
|
+
G -->|No| H[Return ACKNOWLEDGMENT_REJECTED_OR_SUPERSEDED]
|
|
26
|
+
G -->|Yes| I[Persist acknowledgment and set SETTLED]
|
|
27
|
+
I --> J[Return settled summary]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## External Dependencies
|
|
31
|
+
|
|
32
|
+
- None
|
|
33
|
+
|
|
34
|
+
## Error Scenarios
|
|
35
|
+
|
|
36
|
+
- **COST_SUMMARY_NOT_FOUND**: Target cost summary does not exist.
|
|
37
|
+
- **COST_SUMMARY_NOT_SETTLABLE**: Summary is not in `VARIANCE_REVIEWED`.
|
|
38
|
+
- **ACKNOWLEDGMENT_MISMATCH**: Order, summary reference, or currency does not match the reviewed handoff.
|
|
39
|
+
- **ACKNOWLEDGMENT_REJECTED_OR_SUPERSEDED**: Downstream accounting rejected, reversed, or superseded the reviewed handoff, so the summary must remain in `VARIANCE_REVIEWED`.
|
|
40
|
+
- **ACKNOWLEDGMENT_SOURCE_INVALID**: Payload was not produced by the downstream settlement process.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- records a valid downstream settlement acknowledgment and settles the summary
|
|
45
|
+
- returns error when the summary does not exist
|
|
46
|
+
- returns error when the summary is not variance reviewed
|
|
47
|
+
- returns error when the payload does not match the reviewed handoff
|
|
48
|
+
- returns error when downstream accounting rejects, reverses, or supersedes the reviewed handoff
|
|
49
|
+
- returns error when the acknowledgment source is invalid
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ReleaseProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ReleaseProductionOrder turns a draft plan into executable work by resolving active BOM and routing content, freezing snapshots, creating work orders and material requirements, and opening manufacturing cost collection.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist and be in `DRAFT`.
|
|
10
|
+
- An active BOM and active routing must be explicitly selected or resolvable by default.
|
|
11
|
+
- BOM and routing must belong to the same company as the order, and any site-scoped master must match the order site exactly.
|
|
12
|
+
- Planned material unit cost for every required component must be resolved from inventory-owned valuation data at release time.
|
|
13
|
+
- Release snapshots BOM lines, routing operations, work-center rates, overhead policy, and planned material valuation.
|
|
14
|
+
- Release creates work orders, material requirements, and one manufacturing cost summary in `COLLECTING`.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive release request] --> B{Order exists and is DRAFT?}
|
|
21
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_RELEASABLE]
|
|
22
|
+
B -->|Yes| D[Resolve active BOM and routing]
|
|
23
|
+
D --> E[Validate company and site scope of resolved masters]
|
|
24
|
+
E --> F[Query inventory valuation for planned material cost]
|
|
25
|
+
F --> G[Snapshot BOM, routing, and cost baseline]
|
|
26
|
+
G --> H[Create work orders and material requirements]
|
|
27
|
+
H --> I[Set order status to RELEASED]
|
|
28
|
+
I --> J[Return released order]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## External Dependencies
|
|
32
|
+
|
|
33
|
+
- [BillOfMaterial](../models/BillOfMaterial.md) - One active BOM version must be selected or resolved.
|
|
34
|
+
- [Routing](../models/Routing.md) - One active routing revision must be selected or resolved.
|
|
35
|
+
- [ManufacturingCostSummary](../models/ManufacturingCostSummary.md) - Release opens cost collection and freezes the baseline.
|
|
36
|
+
|
|
37
|
+
## Error Scenarios
|
|
38
|
+
|
|
39
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
40
|
+
- **PRODUCTION_ORDER_NOT_RELEASABLE**: The order is not in `DRAFT`.
|
|
41
|
+
- **BOM_NOT_RESOLVED**: No valid active BOM could be selected for the order scope.
|
|
42
|
+
- **ROUTING_NOT_RESOLVED**: No valid active routing could be selected for the order scope.
|
|
43
|
+
- **CROSS_COMPANY_MASTER_REFERENCE**: Selected BOM or routing belongs to another company.
|
|
44
|
+
- **CROSS_SITE_MASTER_REFERENCE**: Selected BOM or routing belongs to another site than the production order, even if the company matches.
|
|
45
|
+
- **PLANNED_MATERIAL_COST_UNAVAILABLE**: Inventory could not resolve planned component cost for release.
|
|
46
|
+
|
|
47
|
+
## Test Cases
|
|
48
|
+
|
|
49
|
+
- releases a draft order with valid BOM and routing snapshots
|
|
50
|
+
- returns error when the order does not exist
|
|
51
|
+
- returns error when the order is not in `DRAFT`
|
|
52
|
+
- returns error when no active BOM can be resolved
|
|
53
|
+
- returns error when no active routing can be resolved
|
|
54
|
+
- returns error when BOM or routing belongs to another company
|
|
55
|
+
- returns error when BOM or routing belongs to another site in the same company
|
|
56
|
+
- returns error when inventory valuation for a required component is unavailable
|
|
57
|
+
- creates work orders and a collecting cost summary at release
|