@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.
Files changed (159) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/package.json +1 -1
  3. package/skills/erp-kit-app-1-requirements/SKILL.md +6 -0
  4. package/skills/erp-kit-app-2-requirements-review/SKILL.md +6 -0
  5. package/skills/erp-kit-app-3-plan/SKILL.md +6 -0
  6. package/skills/erp-kit-app-4-plan-review/SKILL.md +6 -0
  7. package/skills/erp-kit-app-5-impl-backend/SKILL.md +7 -0
  8. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +6 -0
  9. package/skills/erp-kit-app-7-impl-review/SKILL.md +6 -0
  10. package/skills/erp-kit-app-shared/SKILL.md +2 -0
  11. package/skills/erp-kit-mock-scenario/SKILL.md +6 -0
  12. package/skills/erp-kit-module-1-requirements/SKILL.md +6 -0
  13. package/skills/erp-kit-module-2-requirements-review/SKILL.md +6 -0
  14. package/skills/erp-kit-module-3-plan/SKILL.md +6 -0
  15. package/skills/erp-kit-module-3-update-plan/SKILL.md +6 -0
  16. package/skills/erp-kit-module-4-plan-review/SKILL.md +6 -0
  17. package/skills/erp-kit-module-5-impl/SKILL.md +6 -0
  18. package/skills/erp-kit-module-6-impl-review/SKILL.md +6 -0
  19. package/skills/erp-kit-module-shared/SKILL.md +2 -0
  20. package/skills/erp-kit-module-shared/references/commands.md +3 -0
  21. package/skills/erp-kit-update/SKILL.md +6 -0
  22. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +3 -3
  23. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +1 -1
  24. package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +3 -3
  25. package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +1 -1
  26. package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +2 -2
  27. package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +1 -1
  28. package/src/modules/accounting/module.ts +1 -0
  29. package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +3 -3
  30. package/src/modules/business-partner/command/createPartnerBankAccount.ts +1 -1
  31. package/src/modules/business-partner/module.ts +1 -0
  32. package/src/modules/coa-management/command/activateAccount.test.ts +0 -15
  33. package/src/modules/coa-management/command/activateAccount.ts +1 -42
  34. package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +2 -31
  35. package/src/modules/coa-management/command/activateChartOfAccounts.ts +1 -37
  36. package/src/modules/coa-management/command/createAccount.test.ts +0 -28
  37. package/src/modules/coa-management/command/createAccount.ts +0 -43
  38. package/src/modules/coa-management/command/createAccountGroup.test.ts +2 -51
  39. package/src/modules/coa-management/command/createAccountGroup.ts +1 -56
  40. package/src/modules/coa-management/command/createChartOfAccounts.test.ts +1 -49
  41. package/src/modules/coa-management/command/createChartOfAccounts.ts +0 -51
  42. package/src/modules/coa-management/command/deactivateAccount.test.ts +0 -15
  43. package/src/modules/coa-management/command/deactivateAccount.ts +1 -53
  44. package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +2 -29
  45. package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +1 -37
  46. package/src/modules/coa-management/command/deleteAccount.test.ts +0 -13
  47. package/src/modules/coa-management/command/deleteAccount.ts +1 -42
  48. package/src/modules/coa-management/command/deleteAccountGroup.test.ts +0 -19
  49. package/src/modules/coa-management/command/deleteAccountGroup.ts +1 -42
  50. package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +2 -58
  51. package/src/modules/coa-management/command/deleteChartOfAccounts.ts +4 -88
  52. package/src/modules/coa-management/command/moveAccountGroup.test.ts +0 -27
  53. package/src/modules/coa-management/command/moveAccountGroup.ts +1 -48
  54. package/src/modules/coa-management/command/reactivateAccount.test.ts +0 -15
  55. package/src/modules/coa-management/command/reactivateAccount.ts +1 -53
  56. package/src/modules/coa-management/command/updateAccount.test.ts +0 -15
  57. package/src/modules/coa-management/command/updateAccount.ts +0 -92
  58. package/src/modules/coa-management/command/updateAccountGroup.test.ts +0 -20
  59. package/src/modules/coa-management/command/updateAccountGroup.ts +1 -61
  60. package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +2 -31
  61. package/src/modules/coa-management/command/updateChartOfAccounts.ts +1 -50
  62. package/src/modules/coa-management/docs/commands/ActivateAccount.md +1 -4
  63. package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +1 -4
  64. package/src/modules/coa-management/docs/commands/CreateAccount.md +1 -4
  65. package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +2 -5
  66. package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +2 -6
  67. package/src/modules/coa-management/docs/commands/DeactivateAccount.md +1 -4
  68. package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +1 -4
  69. package/src/modules/coa-management/docs/commands/DeleteAccount.md +1 -4
  70. package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +1 -4
  71. package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +1 -6
  72. package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +1 -4
  73. package/src/modules/coa-management/docs/commands/ReactivateAccount.md +1 -4
  74. package/src/modules/coa-management/docs/commands/UpdateAccount.md +1 -4
  75. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +2 -5
  76. package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +1 -4
  77. package/src/modules/coa-management/module.ts +16 -27
  78. package/src/modules/finance-ledger/module.ts +1 -0
  79. package/src/modules/inventory/command/approveInventoryAdjustment.test.ts +1 -1
  80. package/src/modules/inventory/command/approveInventoryAdjustment.ts +1 -1
  81. package/src/modules/inventory/command/cancelStockMovement.test.ts +2 -2
  82. package/src/modules/inventory/command/cancelStockMovement.ts +1 -1
  83. package/src/modules/inventory/command/confirmInventoryAdjustment.test.ts +4 -4
  84. package/src/modules/inventory/command/confirmInventoryAdjustment.ts +1 -1
  85. package/src/modules/inventory/command/confirmStockMovement.test.ts +1 -1
  86. package/src/modules/inventory/command/confirmStockMovement.ts +1 -1
  87. package/src/modules/inventory/command/createInventoryAdjustment.test.ts +6 -6
  88. package/src/modules/inventory/command/createInventoryAdjustment.ts +1 -1
  89. package/src/modules/inventory/command/createStockMovement.test.ts +3 -3
  90. package/src/modules/inventory/command/createStockMovement.ts +1 -1
  91. package/src/modules/inventory/command/executeStockMovement.test.ts +5 -5
  92. package/src/modules/inventory/command/executeStockMovement.ts +1 -1
  93. package/src/modules/inventory/command/rejectInventoryAdjustment.test.ts +1 -1
  94. package/src/modules/inventory/command/rejectInventoryAdjustment.ts +1 -1
  95. package/src/modules/inventory/command/reviseInventoryAdjustment.test.ts +2 -2
  96. package/src/modules/inventory/command/reviseInventoryAdjustment.ts +1 -1
  97. package/src/modules/inventory/command/submitInventoryAdjustment.test.ts +1 -1
  98. package/src/modules/inventory/command/submitInventoryAdjustment.ts +1 -1
  99. package/src/modules/inventory/command/updateStockMovement.test.ts +4 -4
  100. package/src/modules/inventory/command/updateStockMovement.ts +2 -2
  101. package/src/modules/inventory/module.ts +1 -0
  102. package/src/modules/item-management/command/createTaxonomyNode.test.ts +4 -4
  103. package/src/modules/item-management/command/createTaxonomyNode.ts +1 -1
  104. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +2 -2
  105. package/src/modules/item-management/command/moveTaxonomyNode.ts +2 -2
  106. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +2 -2
  107. package/src/modules/item-management/command/updateTaxonomyNode.ts +1 -1
  108. package/src/modules/item-management/module.ts +1 -0
  109. package/src/modules/manufacturing/command/createRouting.ts +1 -1
  110. package/src/modules/manufacturing/command/recordInventoryIssueOutcome.test.ts +1 -1
  111. package/src/modules/manufacturing/command/recordInventoryIssueOutcome.ts +1 -1
  112. package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.test.ts +1 -1
  113. package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.ts +1 -1
  114. package/src/modules/manufacturing/command/reviewManufacturingCostSummary.test.ts +1 -1
  115. package/src/modules/manufacturing/command/reviewManufacturingCostSummary.ts +1 -1
  116. package/src/modules/manufacturing/command/updateRouting.ts +1 -1
  117. package/src/modules/manufacturing/module.ts +1 -0
  118. package/src/modules/organization/module.ts +1 -0
  119. package/src/modules/primitives/module.ts +1 -0
  120. package/src/modules/product-management/command/assignProductToCategory.test.ts +2 -2
  121. package/src/modules/product-management/command/assignProductToCategory.ts +2 -2
  122. package/src/modules/product-management/command/createProductAttribute.test.ts +1 -1
  123. package/src/modules/product-management/command/createProductAttribute.ts +1 -1
  124. package/src/modules/product-management/command/createProductAttributeValue.test.ts +1 -1
  125. package/src/modules/product-management/command/createProductAttributeValue.ts +1 -1
  126. package/src/modules/product-management/command/createProductCategory.test.ts +2 -2
  127. package/src/modules/product-management/command/createProductCategory.ts +1 -1
  128. package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +3 -3
  129. package/src/modules/product-management/command/setProductAttributeAssignment.ts +2 -2
  130. package/src/modules/product-management/module.ts +1 -0
  131. package/src/modules/purchase/command/activatePurchasePaymentTerm.test.ts +4 -4
  132. package/src/modules/purchase/command/activatePurchasePaymentTerm.ts +2 -2
  133. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.test.ts +4 -4
  134. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.ts +2 -2
  135. package/src/modules/purchase/command/updatePurchasePaymentTerm.test.ts +2 -2
  136. package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +1 -1
  137. package/src/modules/purchase/module.ts +1 -0
  138. package/src/modules/sales/command/createSalesOrder.ts +1 -1
  139. package/src/modules/sales/module.ts +1 -0
  140. package/templates/scaffold/app/backend/eslint.config.js +17 -0
  141. package/templates/scaffold/app/backend/package.json +1 -0
  142. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +3 -3
  143. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +4 -4
  144. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +4 -4
  145. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +6 -6
  146. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +13 -13
  147. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +16 -17
  148. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +3 -3
  149. package/templates/scaffold/app/backend/tailor.config.ts +15 -1
  150. package/templates/scaffold/app/backend/tsconfig.json +1 -1
  151. package/templates/scaffold/app/frontend/src/App.tsx +57 -16
  152. package/templates/scaffold/module/eslint.config.js +24 -0
  153. package/templates/scaffold/module/module.ts +1 -0
  154. package/templates/scaffold/module/package.json +3 -1
  155. package/templates/scaffold/module/vitest.config.ts +11 -0
  156. /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/[id]/components/audit-entry-detail.tsx +0 -0
  157. /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/[id]/page.tsx +0 -0
  158. /package/templates/scaffold/app/frontend/src/pages/{user-management/audit → audit}/components/audit-entries-table.tsx +0 -0
  159. /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[Emit audit event]
33
- K --> L[Return updated group]
31
+ J --> K[Return updated group]
34
32
  ```
35
33
 
36
34
  ## External Dependencies
37
35
 
38
- - [audit](../../../audit/README.md) — Receives audit events emitted by this command
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[Emit audit event]
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, AuditCommands } from "./command/createChartOfAccounts";
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
- activateAccount: activateAccount(auditCommands),
122
- deactivateAccount: deactivateAccount(auditCommands),
123
- reactivateAccount: reactivateAccount(auditCommands),
124
- deleteAccount: deleteAccount(auditCommands),
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.adjustment.status).toBe("APPROVED");
52
+ expect(result.value.inventoryAdjustment.status).toBe("APPROVED");
53
53
  }
54
54
  expect(spies.update).toHaveBeenCalled();
55
55
  });
@@ -46,5 +46,5 @@ export async function run(
46
46
  .returningAll()
47
47
  .executeTakeFirst();
48
48
 
49
- return ok({ adjustment: updated! });
49
+ return ok({ inventoryAdjustment: updated! });
50
50
  }
@@ -67,7 +67,7 @@ describe("cancelStockMovement", () => {
67
67
 
68
68
  expect(result.ok).toBe(true);
69
69
  if (result.ok) {
70
- expect(result.value.movement.status).toBe("CANCELLED");
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.movement.status).toBe("CANCELLED");
85
+ expect(result.value.stockMovement.status).toBe("CANCELLED");
86
86
  }
87
87
  });
88
88
 
@@ -52,5 +52,5 @@ export async function run(db: Transaction, input: CancelStockMovementInput, _ctx
52
52
  .returningAll()
53
53
  .executeTakeFirst();
54
54
 
55
- return ok({ movement: cancelled! });
55
+ return ok({ stockMovement: cancelled! });
56
56
  }
@@ -81,7 +81,7 @@ describe("confirmInventoryAdjustment", () => {
81
81
 
82
82
  expect(result.ok).toBe(true);
83
83
  if (result.ok) {
84
- expect(result.value.adjustment.status).toBe("CONFIRMED");
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.adjustment.status).toBe("CONFIRMED");
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.adjustment.status).toBe("CONFIRMED");
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.adjustment.status).toBe("CONFIRMED");
166
+ expect(result.value.inventoryAdjustment.status).toBe("CONFIRMED");
167
167
  }
168
168
  });
169
169
 
@@ -190,5 +190,5 @@ export async function run(
190
190
  .returningAll()
191
191
  .executeTakeFirst();
192
192
 
193
- return ok({ adjustment: confirmed! });
193
+ return ok({ inventoryAdjustment: confirmed! });
194
194
  }
@@ -119,7 +119,7 @@ describe("confirmStockMovement", () => {
119
119
 
120
120
  expect(result.ok).toBe(true);
121
121
  if (result.ok) {
122
- expect(result.value.movement.status).toBe("CONFIRMED");
122
+ expect(result.value.stockMovement.status).toBe("CONFIRMED");
123
123
  }
124
124
  expect(spies.update).toHaveBeenCalled();
125
125
  });
@@ -127,5 +127,5 @@ export async function run(
127
127
  .returningAll()
128
128
  .executeTakeFirst();
129
129
 
130
- return ok({ movement: confirmed! });
130
+ return ok({ stockMovement: confirmed! });
131
131
  }
@@ -135,8 +135,8 @@ describe("createInventoryAdjustment", () => {
135
135
 
136
136
  expect(result.ok).toBe(true);
137
137
  if (result.ok) {
138
- expect(result.value.adjustment.adjustmentType).toBe("CORRECTION");
139
- expect(result.value.adjustment.quantityDelta).toBe(10);
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.adjustment.quantityDelta).toBe(-5);
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.adjustment.adjustmentType).toBe("SCRAP");
192
- expect(result.value.adjustment.quantityDelta).toBe(-3);
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.adjustment.inventoryCountId).toBe("count-1");
219
+ expect(result.value.inventoryAdjustment.inventoryCountId).toBe("count-1");
220
220
  }
221
221
  expect(spies.insert).toHaveBeenCalled();
222
222
  });
@@ -120,5 +120,5 @@ export async function run(
120
120
  .returningAll()
121
121
  .executeTakeFirst();
122
122
 
123
- return ok({ adjustment: adjustment! });
123
+ return ok({ inventoryAdjustment: adjustment! });
124
124
  }
@@ -249,8 +249,8 @@ describe("createStockMovement", () => {
249
249
 
250
250
  expect(result.ok).toBe(true);
251
251
  if (result.ok) {
252
- expect(result.value.movement.status).toBe("DRAFT");
253
- expect(result.value.moveLines).toHaveLength(1);
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.moveLines).toHaveLength(2);
338
+ expect(result.value.stockMoveLines).toHaveLength(2);
339
339
  }
340
340
  expect(spies.insert).toHaveBeenCalledTimes(3); // 1 movement + 2 lines
341
341
  });
@@ -168,5 +168,5 @@ export async function run(
168
168
  moveLines.push(moveLine!);
169
169
  }
170
170
 
171
- return ok({ movement: movement!, moveLines });
171
+ return ok({ stockMovement: movement!, stockMoveLines: moveLines });
172
172
  }
@@ -186,7 +186,7 @@ describe("executeStockMovement", () => {
186
186
 
187
187
  expect(result.ok).toBe(true);
188
188
  if (result.ok) {
189
- expect(result.value.movement.status).toBe("DONE");
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.movement.status).toBe("DONE");
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.movement.status).toBe("DONE");
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.movement.status).toBe("DONE");
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.movement.status).toBe("DONE");
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({ movement: executed! });
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.adjustment.status).toBe("REJECTED");
52
+ expect(result.value.inventoryAdjustment.status).toBe("REJECTED");
53
53
  }
54
54
  expect(spies.update).toHaveBeenCalled();
55
55
  });
@@ -46,5 +46,5 @@ export async function run(
46
46
  .returningAll()
47
47
  .executeTakeFirst();
48
48
 
49
- return ok({ adjustment: updated! });
49
+ return ok({ inventoryAdjustment: updated! });
50
50
  }
@@ -46,7 +46,7 @@ describe("reviseInventoryAdjustment", () => {
46
46
 
47
47
  expect(result.ok).toBe(true);
48
48
  if (result.ok) {
49
- expect(result.value.adjustment.status).toBe("DRAFT");
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.adjustment.status).toBe("DRAFT");
65
+ expect(result.value.inventoryAdjustment.status).toBe("DRAFT");
66
66
  }
67
67
  });
68
68
  });
@@ -44,5 +44,5 @@ export async function run(
44
44
  .returningAll()
45
45
  .executeTakeFirst();
46
46
 
47
- return ok({ adjustment: updated! });
47
+ return ok({ inventoryAdjustment: updated! });
48
48
  }
@@ -46,7 +46,7 @@ describe("submitInventoryAdjustment", () => {
46
46
 
47
47
  expect(result.ok).toBe(true);
48
48
  if (result.ok) {
49
- expect(result.value.adjustment.status).toBe("PENDING_APPROVAL");
49
+ expect(result.value.inventoryAdjustment.status).toBe("PENDING_APPROVAL");
50
50
  }
51
51
  expect(spies.update).toHaveBeenCalled();
52
52
  });
@@ -43,5 +43,5 @@ export async function run(
43
43
  .returningAll()
44
44
  .executeTakeFirst();
45
45
 
46
- return ok({ adjustment: updated! });
46
+ return ok({ inventoryAdjustment: updated! });
47
47
  }
@@ -71,7 +71,7 @@ describe("updateStockMovement", () => {
71
71
 
72
72
  expect(result.ok).toBe(true);
73
73
  if (result.ok) {
74
- expect(result.value.movement.reasonCode).toBe("new-reason");
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.moveLines).toHaveLength(1);
218
+ expect(value.stockMoveLines).toHaveLength(1);
219
219
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
220
- expect(value.moveLines![0].quantity).toBe(30);
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.moveLines).toHaveLength(0);
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({ movement: updatedMovement!, moveLines: newLines });
159
+ return ok({ stockMovement: updatedMovement!, stockMoveLines: newLines });
160
160
  }
161
161
 
162
- return ok({ movement: updatedMovement! });
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.node.code).toBe("CLOTHING");
83
- expect(result.value.node.parentId).toBeNull();
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.node.code).toBe("TABLETS");
112
- expect(result.value.node.parentId).toBe(baseRootNode.id);
111
+ expect(result.value.taxonomyNode.code).toBe("TABLETS");
112
+ expect(result.value.taxonomyNode.parentId).toBe(baseRootNode.id);
113
113
  }
114
114
  });
115
115
 
@@ -85,5 +85,5 @@ export async function run<CF extends Record<string, unknown>>(
85
85
  .returningAll()
86
86
  .executeTakeFirstOrThrow();
87
87
 
88
- return ok({ node: node });
88
+ return ok({ taxonomyNode: node });
89
89
  }
@@ -87,7 +87,7 @@ describe("moveTaxonomyNode", () => {
87
87
 
88
88
  expect(result.ok).toBe(true);
89
89
  if (result.ok) {
90
- expect(result.value.node.parentId).toBeNull();
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.node.parentId).toBe(secondRootNode.id);
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({ node: movedNode! });
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({ node: movedNode! });
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.node.name).toBe("Consumer Electronics");
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.node.name).toBe("Consumer Electronics");
67
+ expect(result.value.taxonomyNode.name).toBe("Consumer Electronics");
68
68
  }
69
69
  });
70
70
 
@@ -74,5 +74,5 @@ export async function run<CF extends Record<string, unknown>>(
74
74
  .returningAll()
75
75
  .executeTakeFirstOrThrow();
76
76
 
77
- return ok({ node: updatedNode });
77
+ return ok({ taxonomyNode: updatedNode });
78
78
  }
@@ -49,6 +49,7 @@ export interface DefineModuleParams<
49
49
  };
50
50
  }
51
51
 
52
+ /* @__NO_SIDE_EFFECTS__ */
52
53
  export const defineModule = <
53
54
  const IF extends Record<string, TailorAnyDBField> = EmptyFields,
54
55
  const TNF extends Record<string, TailorAnyDBField> = EmptyFields,
@@ -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!, operations: createdOperations });
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.costSummary).toEqual(updatedSummary);
64
+ expect(result.value.manufacturingCostSummary).toEqual(updatedSummary);
65
65
  }
66
66
  expect(spies.insert).toHaveBeenCalled();
67
67
  expect(spies.update).toHaveBeenCalled();
@@ -135,5 +135,5 @@ export async function run<CF extends Record<string, unknown>>(
135
135
  .returningAll()
136
136
  .executeTakeFirst();
137
137
 
138
- return ok({ costSummary: updatedSummary! });
138
+ return ok({ manufacturingCostSummary: updatedSummary! });
139
139
  }
@@ -45,7 +45,7 @@ describe("recordManufacturingCostSettlementAcknowledgment", () => {
45
45
 
46
46
  expect(result.ok).toBe(true);
47
47
  if (result.ok) {
48
- expect(result.value.costSummary.status).toBe("SETTLED");
48
+ expect(result.value.manufacturingCostSummary.status).toBe("SETTLED");
49
49
  }
50
50
  expect(spies.insert).toHaveBeenCalled();
51
51
  expect(spies.update).toHaveBeenCalled();
@@ -106,5 +106,5 @@ export async function run<CF extends Record<string, unknown>>(
106
106
  .returningAll()
107
107
  .executeTakeFirst();
108
108
 
109
- return ok({ costSummary: updatedSummary! });
109
+ return ok({ manufacturingCostSummary: updatedSummary! });
110
110
  }
@@ -92,7 +92,7 @@ describe("reviewManufacturingCostSummary", () => {
92
92
 
93
93
  expect(result.ok).toBe(true);
94
94
  if (result.ok) {
95
- expect(result.value.costSummary.status).toBe("VARIANCE_REVIEWED");
95
+ expect(result.value.manufacturingCostSummary.status).toBe("VARIANCE_REVIEWED");
96
96
  }
97
97
  // 8 variance lines inserted
98
98
  expect(spies.insert).toHaveBeenCalledTimes(8);