@tailor-platform/erp-kit 0.8.0 → 0.9.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/package.json +1 -1
- package/skills/erp-kit-app-1-requirements/SKILL.md +6 -0
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +6 -0
- package/skills/erp-kit-app-3-plan/SKILL.md +6 -0
- package/skills/erp-kit-app-4-plan-review/SKILL.md +6 -0
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +7 -0
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +6 -0
- package/skills/erp-kit-app-7-impl-review/SKILL.md +6 -0
- package/skills/erp-kit-app-shared/SKILL.md +2 -0
- package/skills/erp-kit-mock-scenario/SKILL.md +6 -0
- package/skills/erp-kit-module-1-requirements/SKILL.md +6 -0
- package/skills/erp-kit-module-2-requirements-review/SKILL.md +6 -0
- package/skills/erp-kit-module-3-plan/SKILL.md +6 -0
- package/skills/erp-kit-module-3-update-plan/SKILL.md +6 -0
- package/skills/erp-kit-module-4-plan-review/SKILL.md +6 -0
- package/skills/erp-kit-module-5-impl/SKILL.md +6 -0
- package/skills/erp-kit-module-6-impl-review/SKILL.md +6 -0
- package/skills/erp-kit-module-shared/SKILL.md +2 -0
- package/skills/erp-kit-module-shared/references/commands.md +3 -0
- package/skills/erp-kit-update/SKILL.md +6 -0
- package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +3 -3
- package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +1 -1
- package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +3 -3
- package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +1 -1
- package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +2 -2
- package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +1 -1
- package/src/modules/accounting/module.ts +1 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +3 -3
- package/src/modules/business-partner/command/createPartnerBankAccount.ts +1 -1
- package/src/modules/business-partner/module.ts +1 -0
- package/src/modules/coa-management/command/activateAccount.test.ts +0 -15
- package/src/modules/coa-management/command/activateAccount.ts +1 -42
- package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +2 -31
- package/src/modules/coa-management/command/activateChartOfAccounts.ts +1 -37
- package/src/modules/coa-management/command/createAccount.test.ts +0 -28
- package/src/modules/coa-management/command/createAccount.ts +0 -43
- package/src/modules/coa-management/command/createAccountGroup.test.ts +2 -51
- package/src/modules/coa-management/command/createAccountGroup.ts +1 -56
- package/src/modules/coa-management/command/createChartOfAccounts.test.ts +1 -49
- package/src/modules/coa-management/command/createChartOfAccounts.ts +0 -51
- package/src/modules/coa-management/command/deactivateAccount.test.ts +0 -15
- package/src/modules/coa-management/command/deactivateAccount.ts +1 -53
- package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +2 -29
- package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +1 -37
- package/src/modules/coa-management/command/deleteAccount.test.ts +0 -13
- package/src/modules/coa-management/command/deleteAccount.ts +1 -42
- package/src/modules/coa-management/command/deleteAccountGroup.test.ts +0 -19
- package/src/modules/coa-management/command/deleteAccountGroup.ts +1 -42
- package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +2 -58
- package/src/modules/coa-management/command/deleteChartOfAccounts.ts +4 -88
- package/src/modules/coa-management/command/moveAccountGroup.test.ts +0 -27
- package/src/modules/coa-management/command/moveAccountGroup.ts +1 -48
- package/src/modules/coa-management/command/reactivateAccount.test.ts +0 -15
- package/src/modules/coa-management/command/reactivateAccount.ts +1 -53
- package/src/modules/coa-management/command/updateAccount.test.ts +0 -15
- package/src/modules/coa-management/command/updateAccount.ts +0 -92
- package/src/modules/coa-management/command/updateAccountGroup.test.ts +0 -20
- package/src/modules/coa-management/command/updateAccountGroup.ts +1 -61
- package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +2 -31
- package/src/modules/coa-management/command/updateChartOfAccounts.ts +1 -50
- package/src/modules/coa-management/docs/commands/ActivateAccount.md +1 -4
- package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +1 -4
- package/src/modules/coa-management/docs/commands/CreateAccount.md +1 -4
- package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +2 -5
- package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +2 -6
- package/src/modules/coa-management/docs/commands/DeactivateAccount.md +1 -4
- package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +1 -4
- package/src/modules/coa-management/docs/commands/DeleteAccount.md +1 -4
- package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +1 -4
- package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +1 -6
- package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +1 -4
- package/src/modules/coa-management/docs/commands/ReactivateAccount.md +1 -4
- package/src/modules/coa-management/docs/commands/UpdateAccount.md +1 -4
- package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +2 -5
- package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +1 -4
- package/src/modules/coa-management/module.ts +16 -27
- package/src/modules/finance-ledger/module.ts +1 -0
- package/src/modules/inventory/command/approveInventoryAdjustment.test.ts +1 -1
- package/src/modules/inventory/command/approveInventoryAdjustment.ts +1 -1
- package/src/modules/inventory/command/cancelStockMovement.test.ts +2 -2
- package/src/modules/inventory/command/cancelStockMovement.ts +1 -1
- package/src/modules/inventory/command/confirmInventoryAdjustment.test.ts +4 -4
- package/src/modules/inventory/command/confirmInventoryAdjustment.ts +1 -1
- package/src/modules/inventory/command/confirmStockMovement.test.ts +1 -1
- package/src/modules/inventory/command/confirmStockMovement.ts +1 -1
- package/src/modules/inventory/command/createInventoryAdjustment.test.ts +6 -6
- package/src/modules/inventory/command/createInventoryAdjustment.ts +1 -1
- package/src/modules/inventory/command/createStockMovement.test.ts +3 -3
- package/src/modules/inventory/command/createStockMovement.ts +1 -1
- package/src/modules/inventory/command/executeStockMovement.test.ts +5 -5
- package/src/modules/inventory/command/executeStockMovement.ts +1 -1
- package/src/modules/inventory/command/rejectInventoryAdjustment.test.ts +1 -1
- package/src/modules/inventory/command/rejectInventoryAdjustment.ts +1 -1
- package/src/modules/inventory/command/reviseInventoryAdjustment.test.ts +2 -2
- package/src/modules/inventory/command/reviseInventoryAdjustment.ts +1 -1
- package/src/modules/inventory/command/submitInventoryAdjustment.test.ts +1 -1
- package/src/modules/inventory/command/submitInventoryAdjustment.ts +1 -1
- package/src/modules/inventory/command/updateStockMovement.test.ts +4 -4
- package/src/modules/inventory/command/updateStockMovement.ts +2 -2
- package/src/modules/inventory/module.ts +1 -0
- package/src/modules/item-management/command/createTaxonomyNode.test.ts +4 -4
- package/src/modules/item-management/command/createTaxonomyNode.ts +1 -1
- package/src/modules/item-management/command/moveTaxonomyNode.test.ts +2 -2
- package/src/modules/item-management/command/moveTaxonomyNode.ts +2 -2
- package/src/modules/item-management/command/updateTaxonomyNode.test.ts +2 -2
- package/src/modules/item-management/command/updateTaxonomyNode.ts +1 -1
- package/src/modules/item-management/module.ts +1 -0
- package/src/modules/manufacturing/command/createRouting.ts +1 -1
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.test.ts +1 -1
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.ts +1 -1
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.test.ts +1 -1
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.ts +1 -1
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.test.ts +1 -1
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.ts +1 -1
- package/src/modules/manufacturing/command/updateRouting.ts +1 -1
- package/src/modules/manufacturing/module.ts +1 -0
- package/src/modules/organization/module.ts +1 -0
- package/src/modules/primitives/module.ts +1 -0
- package/src/modules/product-management/command/assignProductToCategory.test.ts +2 -2
- package/src/modules/product-management/command/assignProductToCategory.ts +2 -2
- package/src/modules/product-management/command/createProductAttribute.test.ts +1 -1
- package/src/modules/product-management/command/createProductAttribute.ts +1 -1
- package/src/modules/product-management/command/createProductAttributeValue.test.ts +1 -1
- package/src/modules/product-management/command/createProductAttributeValue.ts +1 -1
- package/src/modules/product-management/command/createProductCategory.test.ts +2 -2
- package/src/modules/product-management/command/createProductCategory.ts +1 -1
- package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +3 -3
- package/src/modules/product-management/command/setProductAttributeAssignment.ts +2 -2
- package/src/modules/product-management/module.ts +1 -0
- package/src/modules/purchase/command/activatePurchasePaymentTerm.test.ts +4 -4
- package/src/modules/purchase/command/activatePurchasePaymentTerm.ts +2 -2
- package/src/modules/purchase/command/deactivatePurchasePaymentTerm.test.ts +4 -4
- package/src/modules/purchase/command/deactivatePurchasePaymentTerm.ts +2 -2
- package/src/modules/purchase/command/updatePurchasePaymentTerm.test.ts +2 -2
- package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +1 -1
- package/src/modules/purchase/module.ts +1 -0
- package/src/modules/sales/command/createSalesOrder.ts +1 -1
- package/src/modules/sales/module.ts +1 -0
- package/templates/scaffold/app/backend/eslint.config.js +17 -0
- package/templates/scaffold/app/backend/package.json +1 -0
- package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +3 -3
- package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +4 -4
- package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +4 -4
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +6 -6
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +13 -13
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +16 -17
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +3 -3
- package/templates/scaffold/app/backend/tailor.config.ts +15 -1
- package/templates/scaffold/app/backend/tsconfig.json +1 -1
- package/templates/scaffold/app/frontend/src/App.tsx +57 -16
- package/templates/scaffold/module/eslint.config.js +24 -0
- package/templates/scaffold/module/module.ts +1 -0
- package/templates/scaffold/module/package.json +3 -1
- package/templates/scaffold/module/vitest.config.ts +11 -0
- /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/[id]/components/audit-entry-detail.tsx +0 -0
- /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/[id]/page.tsx +0 -0
- /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/components/audit-entries-table.tsx +0 -0
- /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/page.tsx +0 -0
|
@@ -12,7 +12,6 @@ updateAccountGroup modifies the mutable fields (name, sort order, number range)
|
|
|
12
12
|
- Group code is not part of the update input
|
|
13
13
|
- Number range changes, when provided, require both start and end to be provided together, must remain a valid non-overlapping interval within the CoA
|
|
14
14
|
- Changing a number range must not invalidate existing accounts already assigned to the group (their codes must still fall within the new range)
|
|
15
|
-
- Emits an audit event via the audit module recording the acting user, timestamp, and previous and new field values for all changed attributes
|
|
16
15
|
|
|
17
16
|
## Process Flow
|
|
18
17
|
|
|
@@ -29,13 +28,12 @@ flowchart TD
|
|
|
29
28
|
F -->|Yes| H{Existing accounts within new range?}
|
|
30
29
|
H -->|No| I[Return error: accounts out of range]
|
|
31
30
|
H -->|Yes| J[Update group fields]
|
|
32
|
-
J --> K[
|
|
33
|
-
K --> L[Return updated group]
|
|
31
|
+
J --> K[Return updated group]
|
|
34
32
|
```
|
|
35
33
|
|
|
36
34
|
## External Dependencies
|
|
37
35
|
|
|
38
|
-
-
|
|
36
|
+
- None
|
|
39
37
|
|
|
40
38
|
## Error Scenarios
|
|
41
39
|
|
|
@@ -59,5 +57,4 @@ flowchart TD
|
|
|
59
57
|
- updates group name
|
|
60
58
|
- updates sort order
|
|
61
59
|
- updates number range
|
|
62
|
-
- emits audit event recording previous and new field values
|
|
63
60
|
- passes custom fields through to update
|
|
@@ -10,7 +10,6 @@ updateChartOfAccounts modifies the mutable fields (name, description) of an exis
|
|
|
10
10
|
- Target CoA must be in DRAFT or ACTIVE status; updating an ARCHIVED CoA is rejected
|
|
11
11
|
- Name, when provided, must be non-empty
|
|
12
12
|
- Description is optional and can be cleared
|
|
13
|
-
- Emits an audit event via the audit module recording the acting user, timestamp, and previous and new field values for all changed attributes
|
|
14
13
|
|
|
15
14
|
## Process Flow
|
|
16
15
|
|
|
@@ -23,8 +22,7 @@ flowchart TD
|
|
|
23
22
|
D -->|Yes| F{Name valid if provided?}
|
|
24
23
|
F -->|No| G[Return error: name required]
|
|
25
24
|
F -->|Yes| H[Update CoA fields]
|
|
26
|
-
H --> I[
|
|
27
|
-
I --> J[Return updated CoA]
|
|
25
|
+
H --> I[Return updated CoA]
|
|
28
26
|
```
|
|
29
27
|
|
|
30
28
|
## External Dependencies
|
|
@@ -45,5 +43,4 @@ flowchart TD
|
|
|
45
43
|
- updates name of a DRAFT CoA
|
|
46
44
|
- updates description of an ACTIVE CoA
|
|
47
45
|
- clears description by setting to null
|
|
48
|
-
- emits audit event recording previous and new field values
|
|
49
46
|
- passes custom fields through to update
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type TailorAnyDBField } from "@tailor-platform/sdk";
|
|
2
2
|
import type { defineModule as defineOrganizationModule } from "../organization";
|
|
3
3
|
import type { defineModule as definePrimitivesModule } from "../primitives";
|
|
4
|
-
import type { TemplateProvider
|
|
4
|
+
import type { TemplateProvider } from "./command/createChartOfAccounts";
|
|
5
5
|
// Commands
|
|
6
6
|
import { createChartOfAccounts } from "./command/createChartOfAccounts.generated";
|
|
7
7
|
import { updateChartOfAccounts } from "./command/updateChartOfAccounts.generated";
|
|
@@ -60,11 +60,9 @@ export interface DefineModuleParams<
|
|
|
60
60
|
queries: Pick<PrimitivesQueries, "getCurrency">;
|
|
61
61
|
};
|
|
62
62
|
templateProvider?: TemplateProvider;
|
|
63
|
-
audit?: {
|
|
64
|
-
commands: AuditCommands;
|
|
65
|
-
};
|
|
66
63
|
}
|
|
67
64
|
|
|
65
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
68
66
|
export const defineModule = <
|
|
69
67
|
const COAF extends Record<string, TailorAnyDBField> = EmptyFields,
|
|
70
68
|
const AGF extends Record<string, TailorAnyDBField> = EmptyFields,
|
|
@@ -88,8 +86,6 @@ export const defineModule = <
|
|
|
88
86
|
currencyType: params.primitives.db.currency,
|
|
89
87
|
});
|
|
90
88
|
|
|
91
|
-
const auditCommands = params.audit?.commands;
|
|
92
|
-
|
|
93
89
|
return {
|
|
94
90
|
db: {
|
|
95
91
|
chartOfAccounts: chartOfAccountsDb,
|
|
@@ -100,28 +96,21 @@ export const defineModule = <
|
|
|
100
96
|
createChartOfAccounts: createChartOfAccounts<FieldsToInsertable<COAF>>(
|
|
101
97
|
params.organization.queries,
|
|
102
98
|
params.templateProvider,
|
|
103
|
-
auditCommands,
|
|
104
|
-
),
|
|
105
|
-
updateChartOfAccounts: updateChartOfAccounts<FieldsToInsertable<COAF>>(auditCommands),
|
|
106
|
-
activateChartOfAccounts: activateChartOfAccounts(auditCommands),
|
|
107
|
-
deactivateChartOfAccounts: deactivateChartOfAccounts(auditCommands),
|
|
108
|
-
deleteChartOfAccounts: deleteChartOfAccounts(auditCommands),
|
|
109
|
-
createAccountGroup: createAccountGroup<FieldsToInsertable<AGF>>(auditCommands),
|
|
110
|
-
updateAccountGroup: updateAccountGroup<FieldsToInsertable<AGF>>(auditCommands),
|
|
111
|
-
moveAccountGroup: moveAccountGroup(auditCommands),
|
|
112
|
-
deleteAccountGroup: deleteAccountGroup(auditCommands),
|
|
113
|
-
createAccount: createAccount<FieldsToInsertable<AF>>(
|
|
114
|
-
params.primitives.queries,
|
|
115
|
-
auditCommands,
|
|
116
|
-
),
|
|
117
|
-
updateAccount: updateAccount<FieldsToInsertable<AF>>(
|
|
118
|
-
params.primitives.queries,
|
|
119
|
-
auditCommands,
|
|
120
99
|
),
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
100
|
+
updateChartOfAccounts: updateChartOfAccounts<FieldsToInsertable<COAF>>(),
|
|
101
|
+
activateChartOfAccounts: activateChartOfAccounts(),
|
|
102
|
+
deactivateChartOfAccounts: deactivateChartOfAccounts(),
|
|
103
|
+
deleteChartOfAccounts: deleteChartOfAccounts(),
|
|
104
|
+
createAccountGroup: createAccountGroup<FieldsToInsertable<AGF>>(),
|
|
105
|
+
updateAccountGroup: updateAccountGroup<FieldsToInsertable<AGF>>(),
|
|
106
|
+
moveAccountGroup: moveAccountGroup(),
|
|
107
|
+
deleteAccountGroup: deleteAccountGroup(),
|
|
108
|
+
createAccount: createAccount<FieldsToInsertable<AF>>(params.primitives.queries),
|
|
109
|
+
updateAccount: updateAccount<FieldsToInsertable<AF>>(params.primitives.queries),
|
|
110
|
+
activateAccount: activateAccount(),
|
|
111
|
+
deactivateAccount: deactivateAccount(),
|
|
112
|
+
reactivateAccount: reactivateAccount(),
|
|
113
|
+
deleteAccount: deleteAccount(),
|
|
125
114
|
},
|
|
126
115
|
queries: {
|
|
127
116
|
getChartOfAccounts,
|
|
@@ -129,6 +129,7 @@ export interface DefineModuleParams<
|
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
132
133
|
export const defineModule = <
|
|
133
134
|
const FyF extends Record<string, TailorAnyDBField> = EmptyFields,
|
|
134
135
|
const ApF extends Record<string, TailorAnyDBField> = EmptyFields,
|
|
@@ -49,7 +49,7 @@ describe("approveInventoryAdjustment", () => {
|
|
|
49
49
|
|
|
50
50
|
expect(result.ok).toBe(true);
|
|
51
51
|
if (result.ok) {
|
|
52
|
-
expect(result.value.
|
|
52
|
+
expect(result.value.inventoryAdjustment.status).toBe("APPROVED");
|
|
53
53
|
}
|
|
54
54
|
expect(spies.update).toHaveBeenCalled();
|
|
55
55
|
});
|
|
@@ -67,7 +67,7 @@ describe("cancelStockMovement", () => {
|
|
|
67
67
|
|
|
68
68
|
expect(result.ok).toBe(true);
|
|
69
69
|
if (result.ok) {
|
|
70
|
-
expect(result.value.
|
|
70
|
+
expect(result.value.stockMovement.status).toBe("CANCELLED");
|
|
71
71
|
}
|
|
72
72
|
expect(spies.update).toHaveBeenCalled();
|
|
73
73
|
});
|
|
@@ -82,7 +82,7 @@ describe("cancelStockMovement", () => {
|
|
|
82
82
|
|
|
83
83
|
expect(result.ok).toBe(true);
|
|
84
84
|
if (result.ok) {
|
|
85
|
-
expect(result.value.
|
|
85
|
+
expect(result.value.stockMovement.status).toBe("CANCELLED");
|
|
86
86
|
}
|
|
87
87
|
});
|
|
88
88
|
|
|
@@ -81,7 +81,7 @@ describe("confirmInventoryAdjustment", () => {
|
|
|
81
81
|
|
|
82
82
|
expect(result.ok).toBe(true);
|
|
83
83
|
if (result.ok) {
|
|
84
|
-
expect(result.value.
|
|
84
|
+
expect(result.value.inventoryAdjustment.status).toBe("CONFIRMED");
|
|
85
85
|
}
|
|
86
86
|
});
|
|
87
87
|
|
|
@@ -104,7 +104,7 @@ describe("confirmInventoryAdjustment", () => {
|
|
|
104
104
|
|
|
105
105
|
expect(result.ok).toBe(true);
|
|
106
106
|
if (result.ok) {
|
|
107
|
-
expect(result.value.
|
|
107
|
+
expect(result.value.inventoryAdjustment.status).toBe("CONFIRMED");
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
|
|
@@ -133,7 +133,7 @@ describe("confirmInventoryAdjustment", () => {
|
|
|
133
133
|
|
|
134
134
|
expect(result.ok).toBe(true);
|
|
135
135
|
if (result.ok) {
|
|
136
|
-
expect(result.value.
|
|
136
|
+
expect(result.value.inventoryAdjustment.status).toBe("CONFIRMED");
|
|
137
137
|
}
|
|
138
138
|
});
|
|
139
139
|
|
|
@@ -163,7 +163,7 @@ describe("confirmInventoryAdjustment", () => {
|
|
|
163
163
|
|
|
164
164
|
expect(result.ok).toBe(true);
|
|
165
165
|
if (result.ok) {
|
|
166
|
-
expect(result.value.
|
|
166
|
+
expect(result.value.inventoryAdjustment.status).toBe("CONFIRMED");
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
|
|
@@ -119,7 +119,7 @@ describe("confirmStockMovement", () => {
|
|
|
119
119
|
|
|
120
120
|
expect(result.ok).toBe(true);
|
|
121
121
|
if (result.ok) {
|
|
122
|
-
expect(result.value.
|
|
122
|
+
expect(result.value.stockMovement.status).toBe("CONFIRMED");
|
|
123
123
|
}
|
|
124
124
|
expect(spies.update).toHaveBeenCalled();
|
|
125
125
|
});
|
|
@@ -135,8 +135,8 @@ describe("createInventoryAdjustment", () => {
|
|
|
135
135
|
|
|
136
136
|
expect(result.ok).toBe(true);
|
|
137
137
|
if (result.ok) {
|
|
138
|
-
expect(result.value.
|
|
139
|
-
expect(result.value.
|
|
138
|
+
expect(result.value.inventoryAdjustment.adjustmentType).toBe("CORRECTION");
|
|
139
|
+
expect(result.value.inventoryAdjustment.quantityDelta).toBe(10);
|
|
140
140
|
}
|
|
141
141
|
expect(spies.insert).toHaveBeenCalled();
|
|
142
142
|
});
|
|
@@ -162,7 +162,7 @@ describe("createInventoryAdjustment", () => {
|
|
|
162
162
|
|
|
163
163
|
expect(result.ok).toBe(true);
|
|
164
164
|
if (result.ok) {
|
|
165
|
-
expect(result.value.
|
|
165
|
+
expect(result.value.inventoryAdjustment.quantityDelta).toBe(-5);
|
|
166
166
|
}
|
|
167
167
|
expect(spies.insert).toHaveBeenCalled();
|
|
168
168
|
});
|
|
@@ -188,8 +188,8 @@ describe("createInventoryAdjustment", () => {
|
|
|
188
188
|
|
|
189
189
|
expect(result.ok).toBe(true);
|
|
190
190
|
if (result.ok) {
|
|
191
|
-
expect(result.value.
|
|
192
|
-
expect(result.value.
|
|
191
|
+
expect(result.value.inventoryAdjustment.adjustmentType).toBe("SCRAP");
|
|
192
|
+
expect(result.value.inventoryAdjustment.quantityDelta).toBe(-3);
|
|
193
193
|
}
|
|
194
194
|
expect(spies.insert).toHaveBeenCalled();
|
|
195
195
|
});
|
|
@@ -216,7 +216,7 @@ describe("createInventoryAdjustment", () => {
|
|
|
216
216
|
|
|
217
217
|
expect(result.ok).toBe(true);
|
|
218
218
|
if (result.ok) {
|
|
219
|
-
expect(result.value.
|
|
219
|
+
expect(result.value.inventoryAdjustment.inventoryCountId).toBe("count-1");
|
|
220
220
|
}
|
|
221
221
|
expect(spies.insert).toHaveBeenCalled();
|
|
222
222
|
});
|
|
@@ -249,8 +249,8 @@ describe("createStockMovement", () => {
|
|
|
249
249
|
|
|
250
250
|
expect(result.ok).toBe(true);
|
|
251
251
|
if (result.ok) {
|
|
252
|
-
expect(result.value.
|
|
253
|
-
expect(result.value.
|
|
252
|
+
expect(result.value.stockMovement.status).toBe("DRAFT");
|
|
253
|
+
expect(result.value.stockMoveLines).toHaveLength(1);
|
|
254
254
|
}
|
|
255
255
|
});
|
|
256
256
|
|
|
@@ -335,7 +335,7 @@ describe("createStockMovement", () => {
|
|
|
335
335
|
|
|
336
336
|
expect(result.ok).toBe(true);
|
|
337
337
|
if (result.ok) {
|
|
338
|
-
expect(result.value.
|
|
338
|
+
expect(result.value.stockMoveLines).toHaveLength(2);
|
|
339
339
|
}
|
|
340
340
|
expect(spies.insert).toHaveBeenCalledTimes(3); // 1 movement + 2 lines
|
|
341
341
|
});
|
|
@@ -186,7 +186,7 @@ describe("executeStockMovement", () => {
|
|
|
186
186
|
|
|
187
187
|
expect(result.ok).toBe(true);
|
|
188
188
|
if (result.ok) {
|
|
189
|
-
expect(result.value.
|
|
189
|
+
expect(result.value.stockMovement.status).toBe("DONE");
|
|
190
190
|
}
|
|
191
191
|
expect(spies.update).toHaveBeenCalled();
|
|
192
192
|
});
|
|
@@ -217,7 +217,7 @@ describe("executeStockMovement", () => {
|
|
|
217
217
|
|
|
218
218
|
expect(result.ok).toBe(true);
|
|
219
219
|
if (result.ok) {
|
|
220
|
-
expect(result.value.
|
|
220
|
+
expect(result.value.stockMovement.status).toBe("DONE");
|
|
221
221
|
}
|
|
222
222
|
});
|
|
223
223
|
|
|
@@ -256,7 +256,7 @@ describe("executeStockMovement", () => {
|
|
|
256
256
|
|
|
257
257
|
expect(result.ok).toBe(true);
|
|
258
258
|
if (result.ok) {
|
|
259
|
-
expect(result.value.
|
|
259
|
+
expect(result.value.stockMovement.status).toBe("DONE");
|
|
260
260
|
}
|
|
261
261
|
});
|
|
262
262
|
|
|
@@ -290,7 +290,7 @@ describe("executeStockMovement", () => {
|
|
|
290
290
|
|
|
291
291
|
expect(result.ok).toBe(true);
|
|
292
292
|
if (result.ok) {
|
|
293
|
-
expect(result.value.
|
|
293
|
+
expect(result.value.stockMovement.status).toBe("DONE");
|
|
294
294
|
}
|
|
295
295
|
});
|
|
296
296
|
|
|
@@ -324,7 +324,7 @@ describe("executeStockMovement", () => {
|
|
|
324
324
|
|
|
325
325
|
expect(result.ok).toBe(true);
|
|
326
326
|
if (result.ok) {
|
|
327
|
-
expect(result.value.
|
|
327
|
+
expect(result.value.stockMovement.status).toBe("DONE");
|
|
328
328
|
}
|
|
329
329
|
});
|
|
330
330
|
|
|
@@ -207,7 +207,7 @@ export async function run(db: Transaction, input: ExecuteStockMovementInput, _ct
|
|
|
207
207
|
.returningAll()
|
|
208
208
|
.executeTakeFirst();
|
|
209
209
|
|
|
210
|
-
return ok({
|
|
210
|
+
return ok({ stockMovement: executed! });
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
// Helper: get stock level for item at location
|
|
@@ -49,7 +49,7 @@ describe("rejectInventoryAdjustment", () => {
|
|
|
49
49
|
|
|
50
50
|
expect(result.ok).toBe(true);
|
|
51
51
|
if (result.ok) {
|
|
52
|
-
expect(result.value.
|
|
52
|
+
expect(result.value.inventoryAdjustment.status).toBe("REJECTED");
|
|
53
53
|
}
|
|
54
54
|
expect(spies.update).toHaveBeenCalled();
|
|
55
55
|
});
|
|
@@ -46,7 +46,7 @@ describe("reviseInventoryAdjustment", () => {
|
|
|
46
46
|
|
|
47
47
|
expect(result.ok).toBe(true);
|
|
48
48
|
if (result.ok) {
|
|
49
|
-
expect(result.value.
|
|
49
|
+
expect(result.value.inventoryAdjustment.status).toBe("DRAFT");
|
|
50
50
|
}
|
|
51
51
|
expect(spies.update).toHaveBeenCalled();
|
|
52
52
|
});
|
|
@@ -62,7 +62,7 @@ describe("reviseInventoryAdjustment", () => {
|
|
|
62
62
|
expect(result.ok).toBe(true);
|
|
63
63
|
if (result.ok) {
|
|
64
64
|
// After revise, adjustment is back in DRAFT and can be modified/resubmitted
|
|
65
|
-
expect(result.value.
|
|
65
|
+
expect(result.value.inventoryAdjustment.status).toBe("DRAFT");
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
});
|
|
@@ -46,7 +46,7 @@ describe("submitInventoryAdjustment", () => {
|
|
|
46
46
|
|
|
47
47
|
expect(result.ok).toBe(true);
|
|
48
48
|
if (result.ok) {
|
|
49
|
-
expect(result.value.
|
|
49
|
+
expect(result.value.inventoryAdjustment.status).toBe("PENDING_APPROVAL");
|
|
50
50
|
}
|
|
51
51
|
expect(spies.update).toHaveBeenCalled();
|
|
52
52
|
});
|
|
@@ -71,7 +71,7 @@ describe("updateStockMovement", () => {
|
|
|
71
71
|
|
|
72
72
|
expect(result.ok).toBe(true);
|
|
73
73
|
if (result.ok) {
|
|
74
|
-
expect(result.value.
|
|
74
|
+
expect(result.value.stockMovement.reasonCode).toBe("new-reason");
|
|
75
75
|
}
|
|
76
76
|
expect(spies.update).toHaveBeenCalled();
|
|
77
77
|
});
|
|
@@ -215,9 +215,9 @@ describe("updateStockMovement", () => {
|
|
|
215
215
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
|
|
216
216
|
const value = result.value as any;
|
|
217
217
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
218
|
-
expect(value.
|
|
218
|
+
expect(value.stockMoveLines).toHaveLength(1);
|
|
219
219
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
220
|
-
expect(value.
|
|
220
|
+
expect(value.stockMoveLines![0].quantity).toBe(30);
|
|
221
221
|
}
|
|
222
222
|
});
|
|
223
223
|
|
|
@@ -244,7 +244,7 @@ describe("updateStockMovement", () => {
|
|
|
244
244
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
|
|
245
245
|
const value = result.value as any;
|
|
246
246
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
247
|
-
expect(value.
|
|
247
|
+
expect(value.stockMoveLines).toHaveLength(0);
|
|
248
248
|
}
|
|
249
249
|
});
|
|
250
250
|
});
|
|
@@ -156,8 +156,8 @@ export async function run(
|
|
|
156
156
|
newLines.push(moveLine!);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
return ok({
|
|
159
|
+
return ok({ stockMovement: updatedMovement!, stockMoveLines: newLines });
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
return ok({
|
|
162
|
+
return ok({ stockMovement: updatedMovement! });
|
|
163
163
|
}
|
|
@@ -94,6 +94,7 @@ export interface DefineModuleParams<WF extends Record<string, TailorAnyDBField>>
|
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
97
98
|
export const defineModule = <const WF extends Record<string, TailorAnyDBField> = EmptyFields>(
|
|
98
99
|
params: DefineModuleParams<WF>,
|
|
99
100
|
) => {
|
|
@@ -79,8 +79,8 @@ describe("createTaxonomyNode", () => {
|
|
|
79
79
|
|
|
80
80
|
expect(result.ok).toBe(true);
|
|
81
81
|
if (result.ok) {
|
|
82
|
-
expect(result.value.
|
|
83
|
-
expect(result.value.
|
|
82
|
+
expect(result.value.taxonomyNode.code).toBe("CLOTHING");
|
|
83
|
+
expect(result.value.taxonomyNode.parentId).toBeNull();
|
|
84
84
|
}
|
|
85
85
|
expect(spies.insert).toHaveBeenCalled();
|
|
86
86
|
});
|
|
@@ -108,8 +108,8 @@ describe("createTaxonomyNode", () => {
|
|
|
108
108
|
|
|
109
109
|
expect(result.ok).toBe(true);
|
|
110
110
|
if (result.ok) {
|
|
111
|
-
expect(result.value.
|
|
112
|
-
expect(result.value.
|
|
111
|
+
expect(result.value.taxonomyNode.code).toBe("TABLETS");
|
|
112
|
+
expect(result.value.taxonomyNode.parentId).toBe(baseRootNode.id);
|
|
113
113
|
}
|
|
114
114
|
});
|
|
115
115
|
|
|
@@ -87,7 +87,7 @@ describe("moveTaxonomyNode", () => {
|
|
|
87
87
|
|
|
88
88
|
expect(result.ok).toBe(true);
|
|
89
89
|
if (result.ok) {
|
|
90
|
-
expect(result.value.
|
|
90
|
+
expect(result.value.taxonomyNode.parentId).toBeNull();
|
|
91
91
|
}
|
|
92
92
|
expect(spies.update).toHaveBeenCalled();
|
|
93
93
|
});
|
|
@@ -110,7 +110,7 @@ describe("moveTaxonomyNode", () => {
|
|
|
110
110
|
|
|
111
111
|
expect(result.ok).toBe(true);
|
|
112
112
|
if (result.ok) {
|
|
113
|
-
expect(result.value.
|
|
113
|
+
expect(result.value.taxonomyNode.parentId).toBe(secondRootNode.id);
|
|
114
114
|
}
|
|
115
115
|
});
|
|
116
116
|
|
|
@@ -48,7 +48,7 @@ export async function run(
|
|
|
48
48
|
.returningAll()
|
|
49
49
|
.executeTakeFirst();
|
|
50
50
|
|
|
51
|
-
return ok({
|
|
51
|
+
return ok({ taxonomyNode: movedNode! });
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
// 3. Check new parent exists (validation only — no lock)
|
|
@@ -125,5 +125,5 @@ export async function run(
|
|
|
125
125
|
.returningAll()
|
|
126
126
|
.executeTakeFirst();
|
|
127
127
|
|
|
128
|
-
return ok({
|
|
128
|
+
return ok({ taxonomyNode: movedNode! });
|
|
129
129
|
}
|
|
@@ -49,7 +49,7 @@ describe("updateTaxonomyNode", () => {
|
|
|
49
49
|
|
|
50
50
|
expect(result.ok).toBe(true);
|
|
51
51
|
if (result.ok) {
|
|
52
|
-
expect(result.value.
|
|
52
|
+
expect(result.value.taxonomyNode.name).toBe("Consumer Electronics");
|
|
53
53
|
}
|
|
54
54
|
expect(spies.update).toHaveBeenCalled();
|
|
55
55
|
});
|
|
@@ -64,7 +64,7 @@ describe("updateTaxonomyNode", () => {
|
|
|
64
64
|
|
|
65
65
|
expect(result.ok).toBe(true);
|
|
66
66
|
if (result.ok) {
|
|
67
|
-
expect(result.value.
|
|
67
|
+
expect(result.value.taxonomyNode.name).toBe("Consumer Electronics");
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
70
|
|
|
@@ -124,5 +124,5 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
124
124
|
createdOperations.push(operation!);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
return ok({ routing: routing!,
|
|
127
|
+
return ok({ routing: routing!, routingOperations: createdOperations });
|
|
128
128
|
}
|
|
@@ -61,7 +61,7 @@ describe("recordInventoryIssueOutcome", () => {
|
|
|
61
61
|
|
|
62
62
|
expect(result.ok).toBe(true);
|
|
63
63
|
if (result.ok) {
|
|
64
|
-
expect(result.value.
|
|
64
|
+
expect(result.value.manufacturingCostSummary).toEqual(updatedSummary);
|
|
65
65
|
}
|
|
66
66
|
expect(spies.insert).toHaveBeenCalled();
|
|
67
67
|
expect(spies.update).toHaveBeenCalled();
|
package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.test.ts
CHANGED
|
@@ -45,7 +45,7 @@ describe("recordManufacturingCostSettlementAcknowledgment", () => {
|
|
|
45
45
|
|
|
46
46
|
expect(result.ok).toBe(true);
|
|
47
47
|
if (result.ok) {
|
|
48
|
-
expect(result.value.
|
|
48
|
+
expect(result.value.manufacturingCostSummary.status).toBe("SETTLED");
|
|
49
49
|
}
|
|
50
50
|
expect(spies.insert).toHaveBeenCalled();
|
|
51
51
|
expect(spies.update).toHaveBeenCalled();
|
|
@@ -92,7 +92,7 @@ describe("reviewManufacturingCostSummary", () => {
|
|
|
92
92
|
|
|
93
93
|
expect(result.ok).toBe(true);
|
|
94
94
|
if (result.ok) {
|
|
95
|
-
expect(result.value.
|
|
95
|
+
expect(result.value.manufacturingCostSummary.status).toBe("VARIANCE_REVIEWED");
|
|
96
96
|
}
|
|
97
97
|
// 8 variance lines inserted
|
|
98
98
|
expect(spies.insert).toHaveBeenCalledTimes(8);
|