@tailor-platform/erp-kit 0.7.0 → 0.8.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 (635) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +8 -4
  3. package/dist/cli.mjs +70 -70
  4. package/package.json +1 -1
  5. package/skills/erp-kit-app-5-impl-backend/SKILL.md +5 -5
  6. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -1
  7. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +37 -12
  8. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +3 -1
  9. package/skills/erp-kit-app-6-impl-frontend/references/component.md +90 -0
  10. package/skills/erp-kit-app-6-impl-frontend/references/detail-view.md +255 -0
  11. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +1 -5
  12. package/skills/erp-kit-app-7-impl-review/SKILL.md +3 -2
  13. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +14 -8
  14. package/skills/erp-kit-module-6-impl-review/SKILL.md +16 -19
  15. package/skills/erp-kit-module-shared/references/commands.md +68 -1
  16. package/src/commands/index.ts +8 -2
  17. package/src/commands/init.test.ts +24 -8
  18. package/src/commands/init.ts +5 -12
  19. package/src/commands/lib/distribute.test.ts +1 -20
  20. package/src/commands/lib/distribute.ts +0 -14
  21. package/src/commands/update.test.ts +1 -1
  22. package/src/generator/scaffold.ts +25 -4
  23. package/src/module.ts +4 -1
  24. package/src/modules/accounting/README.md +63 -0
  25. package/src/modules/accounting/command/activateBudget.generated.ts +6 -0
  26. package/src/modules/accounting/command/activateBudget.test.ts +119 -0
  27. package/src/modules/accounting/command/activateBudget.ts +77 -0
  28. package/src/modules/accounting/command/activateCostElement.generated.ts +6 -0
  29. package/src/modules/accounting/command/activateCostElement.test.ts +59 -0
  30. package/src/modules/accounting/command/activateCostElement.ts +41 -0
  31. package/src/modules/accounting/command/activateProfitCenter.generated.ts +6 -0
  32. package/src/modules/accounting/command/activateProfitCenter.test.ts +60 -0
  33. package/src/modules/accounting/command/activateProfitCenter.ts +38 -0
  34. package/src/modules/accounting/command/approveBudget.generated.ts +6 -0
  35. package/src/modules/accounting/command/approveBudget.test.ts +69 -0
  36. package/src/modules/accounting/command/approveBudget.ts +47 -0
  37. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.generated.ts +6 -0
  38. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.test.ts +112 -0
  39. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.ts +67 -0
  40. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.generated.ts +6 -0
  41. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +123 -0
  42. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +71 -0
  43. package/src/modules/accounting/command/closeBudget.generated.ts +6 -0
  44. package/src/modules/accounting/command/closeBudget.test.ts +93 -0
  45. package/src/modules/accounting/command/closeBudget.ts +40 -0
  46. package/src/modules/accounting/command/closeInternalOrder.generated.ts +6 -0
  47. package/src/modules/accounting/command/closeInternalOrder.test.ts +74 -0
  48. package/src/modules/accounting/command/closeInternalOrder.ts +38 -0
  49. package/src/modules/accounting/command/consumeCommitment.generated.ts +6 -0
  50. package/src/modules/accounting/command/consumeCommitment.test.ts +123 -0
  51. package/src/modules/accounting/command/consumeCommitment.ts +62 -0
  52. package/src/modules/accounting/command/createAllocationCycle.generated.ts +6 -0
  53. package/src/modules/accounting/command/createAllocationCycle.test.ts +166 -0
  54. package/src/modules/accounting/command/createAllocationCycle.ts +68 -0
  55. package/src/modules/accounting/command/createAllocationRule.generated.ts +6 -0
  56. package/src/modules/accounting/command/createAllocationRule.test.ts +195 -0
  57. package/src/modules/accounting/command/createAllocationRule.ts +103 -0
  58. package/src/modules/accounting/command/createBudget.generated.ts +6 -0
  59. package/src/modules/accounting/command/createBudget.test.ts +159 -0
  60. package/src/modules/accounting/command/createBudget.ts +100 -0
  61. package/src/modules/accounting/command/createBudgetLineItem.generated.ts +6 -0
  62. package/src/modules/accounting/command/createBudgetLineItem.test.ts +178 -0
  63. package/src/modules/accounting/command/createBudgetLineItem.ts +104 -0
  64. package/src/modules/accounting/command/createCostCenter.generated.ts +6 -0
  65. package/src/modules/accounting/command/createCostCenter.test.ts +179 -0
  66. package/src/modules/accounting/command/createCostCenter.ts +112 -0
  67. package/src/modules/accounting/command/createCostCenterHierarchy.generated.ts +6 -0
  68. package/src/modules/accounting/command/createCostCenterHierarchy.test.ts +91 -0
  69. package/src/modules/accounting/command/createCostCenterHierarchy.ts +48 -0
  70. package/src/modules/accounting/command/createCostCenterHierarchyNode.generated.ts +6 -0
  71. package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +171 -0
  72. package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +117 -0
  73. package/src/modules/accounting/command/createCostElement.generated.ts +6 -0
  74. package/src/modules/accounting/command/createCostElement.test.ts +317 -0
  75. package/src/modules/accounting/command/createCostElement.ts +149 -0
  76. package/src/modules/accounting/command/createInternalOrder.generated.ts +6 -0
  77. package/src/modules/accounting/command/createInternalOrder.test.ts +206 -0
  78. package/src/modules/accounting/command/createInternalOrder.ts +104 -0
  79. package/src/modules/accounting/command/createPlanVersion.generated.ts +6 -0
  80. package/src/modules/accounting/command/createPlanVersion.test.ts +230 -0
  81. package/src/modules/accounting/command/createPlanVersion.ts +71 -0
  82. package/src/modules/accounting/command/createProfitCenter.generated.ts +6 -0
  83. package/src/modules/accounting/command/createProfitCenter.test.ts +227 -0
  84. package/src/modules/accounting/command/createProfitCenter.ts +81 -0
  85. package/src/modules/accounting/command/createProfitCenterHierarchy.generated.ts +6 -0
  86. package/src/modules/accounting/command/createProfitCenterHierarchy.test.ts +91 -0
  87. package/src/modules/accounting/command/createProfitCenterHierarchy.ts +46 -0
  88. package/src/modules/accounting/command/createProfitCenterHierarchyNode.generated.ts +6 -0
  89. package/src/modules/accounting/command/createProfitCenterHierarchyNode.test.ts +160 -0
  90. package/src/modules/accounting/command/createProfitCenterHierarchyNode.ts +109 -0
  91. package/src/modules/accounting/command/deactivateCostElement.generated.ts +6 -0
  92. package/src/modules/accounting/command/deactivateCostElement.test.ts +59 -0
  93. package/src/modules/accounting/command/deactivateCostElement.ts +41 -0
  94. package/src/modules/accounting/command/deactivateProfitCenter.generated.ts +6 -0
  95. package/src/modules/accounting/command/deactivateProfitCenter.test.ts +60 -0
  96. package/src/modules/accounting/command/deactivateProfitCenter.ts +42 -0
  97. package/src/modules/accounting/command/deleteAllocationCycle.generated.ts +6 -0
  98. package/src/modules/accounting/command/deleteAllocationCycle.test.ts +90 -0
  99. package/src/modules/accounting/command/deleteAllocationCycle.ts +39 -0
  100. package/src/modules/accounting/command/deleteAllocationRule.generated.ts +6 -0
  101. package/src/modules/accounting/command/deleteAllocationRule.test.ts +98 -0
  102. package/src/modules/accounting/command/deleteAllocationRule.ts +40 -0
  103. package/src/modules/accounting/command/deleteBudget.generated.ts +6 -0
  104. package/src/modules/accounting/command/deleteBudget.test.ts +90 -0
  105. package/src/modules/accounting/command/deleteBudget.ts +35 -0
  106. package/src/modules/accounting/command/deleteBudgetLineItem.generated.ts +6 -0
  107. package/src/modules/accounting/command/deleteBudgetLineItem.test.ts +85 -0
  108. package/src/modules/accounting/command/deleteBudgetLineItem.ts +50 -0
  109. package/src/modules/accounting/command/deleteCostCenter.generated.ts +6 -0
  110. package/src/modules/accounting/command/deleteCostCenter.test.ts +79 -0
  111. package/src/modules/accounting/command/deleteCostCenter.ts +67 -0
  112. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.generated.ts +6 -0
  113. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.test.ts +59 -0
  114. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.ts +58 -0
  115. package/src/modules/accounting/command/deleteCostElement.generated.ts +6 -0
  116. package/src/modules/accounting/command/deleteCostElement.test.ts +58 -0
  117. package/src/modules/accounting/command/deleteCostElement.ts +33 -0
  118. package/src/modules/accounting/command/deleteInternalOrder.generated.ts +6 -0
  119. package/src/modules/accounting/command/deleteInternalOrder.test.ts +81 -0
  120. package/src/modules/accounting/command/deleteInternalOrder.ts +37 -0
  121. package/src/modules/accounting/command/deleteProfitCenter.generated.ts +6 -0
  122. package/src/modules/accounting/command/deleteProfitCenter.test.ts +68 -0
  123. package/src/modules/accounting/command/deleteProfitCenter.ts +39 -0
  124. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.generated.ts +6 -0
  125. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.test.ts +72 -0
  126. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.ts +61 -0
  127. package/src/modules/accounting/command/executeAllocationCycle.generated.ts +6 -0
  128. package/src/modules/accounting/command/executeAllocationCycle.test.ts +167 -0
  129. package/src/modules/accounting/command/executeAllocationCycle.ts +94 -0
  130. package/src/modules/accounting/command/finalizeVarianceReport.generated.ts +6 -0
  131. package/src/modules/accounting/command/finalizeVarianceReport.test.ts +60 -0
  132. package/src/modules/accounting/command/finalizeVarianceReport.ts +45 -0
  133. package/src/modules/accounting/command/generateVarianceReport.generated.ts +6 -0
  134. package/src/modules/accounting/command/generateVarianceReport.test.ts +386 -0
  135. package/src/modules/accounting/command/generateVarianceReport.ts +219 -0
  136. package/src/modules/accounting/command/invalidateAllocationCycle.generated.ts +6 -0
  137. package/src/modules/accounting/command/invalidateAllocationCycle.test.ts +84 -0
  138. package/src/modules/accounting/command/invalidateAllocationCycle.ts +45 -0
  139. package/src/modules/accounting/command/moveCostCenterHierarchyNode.generated.ts +6 -0
  140. package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +135 -0
  141. package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +81 -0
  142. package/src/modules/accounting/command/postAllocationCycle.generated.ts +6 -0
  143. package/src/modules/accounting/command/postAllocationCycle.test.ts +98 -0
  144. package/src/modules/accounting/command/postAllocationCycle.ts +65 -0
  145. package/src/modules/accounting/command/reactivateCostElement.generated.ts +6 -0
  146. package/src/modules/accounting/command/reactivateCostElement.test.ts +59 -0
  147. package/src/modules/accounting/command/reactivateCostElement.ts +41 -0
  148. package/src/modules/accounting/command/reactivateProfitCenter.generated.ts +6 -0
  149. package/src/modules/accounting/command/reactivateProfitCenter.test.ts +60 -0
  150. package/src/modules/accounting/command/reactivateProfitCenter.ts +42 -0
  151. package/src/modules/accounting/command/recordCommitment.generated.ts +6 -0
  152. package/src/modules/accounting/command/recordCommitment.test.ts +157 -0
  153. package/src/modules/accounting/command/recordCommitment.ts +113 -0
  154. package/src/modules/accounting/command/rejectBudget.generated.ts +6 -0
  155. package/src/modules/accounting/command/rejectBudget.test.ts +105 -0
  156. package/src/modules/accounting/command/rejectBudget.ts +51 -0
  157. package/src/modules/accounting/command/releaseCommitment.generated.ts +6 -0
  158. package/src/modules/accounting/command/releaseCommitment.test.ts +94 -0
  159. package/src/modules/accounting/command/releaseCommitment.ts +51 -0
  160. package/src/modules/accounting/command/releaseInternalOrder.generated.ts +6 -0
  161. package/src/modules/accounting/command/releaseInternalOrder.test.ts +74 -0
  162. package/src/modules/accounting/command/releaseInternalOrder.ts +38 -0
  163. package/src/modules/accounting/command/reverseAllocationCycle.generated.ts +6 -0
  164. package/src/modules/accounting/command/reverseAllocationCycle.test.ts +124 -0
  165. package/src/modules/accounting/command/reverseAllocationCycle.ts +63 -0
  166. package/src/modules/accounting/command/submitBudget.generated.ts +6 -0
  167. package/src/modules/accounting/command/submitBudget.test.ts +60 -0
  168. package/src/modules/accounting/command/submitBudget.ts +51 -0
  169. package/src/modules/accounting/command/technicallyCompleteInternalOrder.generated.ts +6 -0
  170. package/src/modules/accounting/command/technicallyCompleteInternalOrder.test.ts +74 -0
  171. package/src/modules/accounting/command/technicallyCompleteInternalOrder.ts +42 -0
  172. package/src/modules/accounting/command/updateAllocationCycle.generated.ts +6 -0
  173. package/src/modules/accounting/command/updateAllocationCycle.test.ts +112 -0
  174. package/src/modules/accounting/command/updateAllocationCycle.ts +41 -0
  175. package/src/modules/accounting/command/updateBudget.generated.ts +6 -0
  176. package/src/modules/accounting/command/updateBudget.test.ts +112 -0
  177. package/src/modules/accounting/command/updateBudget.ts +44 -0
  178. package/src/modules/accounting/command/updateCostCenter.generated.ts +6 -0
  179. package/src/modules/accounting/command/updateCostCenter.test.ts +105 -0
  180. package/src/modules/accounting/command/updateCostCenter.ts +79 -0
  181. package/src/modules/accounting/command/updateCostElement.generated.ts +6 -0
  182. package/src/modules/accounting/command/updateCostElement.test.ts +265 -0
  183. package/src/modules/accounting/command/updateCostElement.ts +158 -0
  184. package/src/modules/accounting/command/updateInternalOrder.generated.ts +6 -0
  185. package/src/modules/accounting/command/updateInternalOrder.test.ts +209 -0
  186. package/src/modules/accounting/command/updateInternalOrder.ts +88 -0
  187. package/src/modules/accounting/command/updateProfitCenter.generated.ts +6 -0
  188. package/src/modules/accounting/command/updateProfitCenter.test.ts +162 -0
  189. package/src/modules/accounting/command/updateProfitCenter.ts +73 -0
  190. package/src/modules/accounting/command/validateAllocationCycle.generated.ts +6 -0
  191. package/src/modules/accounting/command/validateAllocationCycle.test.ts +141 -0
  192. package/src/modules/accounting/command/validateAllocationCycle.ts +80 -0
  193. package/src/modules/accounting/db/allocationCycle.ts +59 -0
  194. package/src/modules/accounting/db/allocationResult.ts +58 -0
  195. package/src/modules/accounting/db/allocationRule.ts +48 -0
  196. package/src/modules/accounting/db/budget.ts +84 -0
  197. package/src/modules/accounting/db/budgetLineItem.ts +64 -0
  198. package/src/modules/accounting/db/commitment.ts +60 -0
  199. package/src/modules/accounting/db/costCenter.ts +73 -0
  200. package/src/modules/accounting/db/costCenterHierarchy.ts +37 -0
  201. package/src/modules/accounting/db/costCenterHierarchyNode.ts +48 -0
  202. package/src/modules/accounting/db/costElement.ts +56 -0
  203. package/src/modules/accounting/db/internalOrder.ts +69 -0
  204. package/src/modules/accounting/db/planVersion.ts +47 -0
  205. package/src/modules/accounting/db/profitCenter.ts +52 -0
  206. package/src/modules/accounting/db/profitCenterHierarchy.ts +36 -0
  207. package/src/modules/accounting/db/profitCenterHierarchyAssignment.ts +62 -0
  208. package/src/modules/accounting/db/profitCenterHierarchyNode.ts +48 -0
  209. package/src/modules/accounting/db/varianceReport.ts +54 -0
  210. package/src/modules/accounting/db/varianceReportLine.ts +62 -0
  211. package/src/modules/accounting/docs/commands/ActivateBudget.md +54 -0
  212. package/src/modules/accounting/docs/commands/ActivateCostElement.md +43 -0
  213. package/src/modules/accounting/docs/commands/ActivateProfitCenter.md +43 -0
  214. package/src/modules/accounting/docs/commands/ApproveBudget.md +46 -0
  215. package/src/modules/accounting/docs/commands/AssignCostCenterToHierarchyNode.md +46 -0
  216. package/src/modules/accounting/docs/commands/AssignProfitCenterToHierarchyNode.md +47 -0
  217. package/src/modules/accounting/docs/commands/CloseBudget.md +47 -0
  218. package/src/modules/accounting/docs/commands/CloseInternalOrder.md +45 -0
  219. package/src/modules/accounting/docs/commands/ConsumeCommitment.md +53 -0
  220. package/src/modules/accounting/docs/commands/CreateAllocationCycle.md +55 -0
  221. package/src/modules/accounting/docs/commands/CreateAllocationRule.md +60 -0
  222. package/src/modules/accounting/docs/commands/CreateBudget.md +65 -0
  223. package/src/modules/accounting/docs/commands/CreateBudgetLineItem.md +66 -0
  224. package/src/modules/accounting/docs/commands/CreateCostCenter.md +64 -0
  225. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchy.md +45 -0
  226. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchyNode.md +61 -0
  227. package/src/modules/accounting/docs/commands/CreateCostElement.md +91 -0
  228. package/src/modules/accounting/docs/commands/CreateInternalOrder.md +72 -0
  229. package/src/modules/accounting/docs/commands/CreatePlanVersion.md +59 -0
  230. package/src/modules/accounting/docs/commands/CreateProfitCenter.md +63 -0
  231. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchy.md +45 -0
  232. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchyNode.md +60 -0
  233. package/src/modules/accounting/docs/commands/DeactivateCostElement.md +43 -0
  234. package/src/modules/accounting/docs/commands/DeactivateProfitCenter.md +44 -0
  235. package/src/modules/accounting/docs/commands/DeleteAllocationCycle.md +46 -0
  236. package/src/modules/accounting/docs/commands/DeleteAllocationRule.md +45 -0
  237. package/src/modules/accounting/docs/commands/DeleteBudget.md +46 -0
  238. package/src/modules/accounting/docs/commands/DeleteBudgetLineItem.md +45 -0
  239. package/src/modules/accounting/docs/commands/DeleteCostCenter.md +50 -0
  240. package/src/modules/accounting/docs/commands/DeleteCostCenterHierarchyNode.md +45 -0
  241. package/src/modules/accounting/docs/commands/DeleteCostElement.md +43 -0
  242. package/src/modules/accounting/docs/commands/DeleteInternalOrder.md +45 -0
  243. package/src/modules/accounting/docs/commands/DeleteProfitCenter.md +46 -0
  244. package/src/modules/accounting/docs/commands/DeleteProfitCenterHierarchyNode.md +46 -0
  245. package/src/modules/accounting/docs/commands/ExecuteAllocationCycle.md +54 -0
  246. package/src/modules/accounting/docs/commands/FinalizeVarianceReport.md +44 -0
  247. package/src/modules/accounting/docs/commands/GenerateVarianceReport.md +83 -0
  248. package/src/modules/accounting/docs/commands/InvalidateAllocationCycle.md +45 -0
  249. package/src/modules/accounting/docs/commands/MoveCostCenterHierarchyNode.md +51 -0
  250. package/src/modules/accounting/docs/commands/PostAllocationCycle.md +58 -0
  251. package/src/modules/accounting/docs/commands/ReactivateCostElement.md +43 -0
  252. package/src/modules/accounting/docs/commands/ReactivateProfitCenter.md +43 -0
  253. package/src/modules/accounting/docs/commands/RecordCommitment.md +60 -0
  254. package/src/modules/accounting/docs/commands/RejectBudget.md +49 -0
  255. package/src/modules/accounting/docs/commands/ReleaseCommitment.md +45 -0
  256. package/src/modules/accounting/docs/commands/ReleaseInternalOrder.md +44 -0
  257. package/src/modules/accounting/docs/commands/ReverseAllocationCycle.md +55 -0
  258. package/src/modules/accounting/docs/commands/SubmitBudget.md +47 -0
  259. package/src/modules/accounting/docs/commands/TechnicallyCompleteInternalOrder.md +44 -0
  260. package/src/modules/accounting/docs/commands/UpdateAllocationCycle.md +45 -0
  261. package/src/modules/accounting/docs/commands/UpdateBudget.md +47 -0
  262. package/src/modules/accounting/docs/commands/UpdateCostCenter.md +50 -0
  263. package/src/modules/accounting/docs/commands/UpdateCostElement.md +82 -0
  264. package/src/modules/accounting/docs/commands/UpdateInternalOrder.md +62 -0
  265. package/src/modules/accounting/docs/commands/UpdateProfitCenter.md +56 -0
  266. package/src/modules/accounting/docs/commands/ValidateAllocationCycle.md +57 -0
  267. package/src/modules/accounting/docs/features/budget-management.md +147 -0
  268. package/src/modules/accounting/docs/features/cost-allocation.md +129 -0
  269. package/src/modules/accounting/docs/features/cost-center-management.md +118 -0
  270. package/src/modules/accounting/docs/features/cost-element-management.md +114 -0
  271. package/src/modules/accounting/docs/features/internal-order-management.md +111 -0
  272. package/src/modules/accounting/docs/features/profit-center-management.md +120 -0
  273. package/src/modules/accounting/docs/features/variance-analysis.md +130 -0
  274. package/src/modules/accounting/docs/models/AllocationCycle.md +81 -0
  275. package/src/modules/accounting/docs/models/AllocationResult.md +37 -0
  276. package/src/modules/accounting/docs/models/AllocationRule.md +41 -0
  277. package/src/modules/accounting/docs/models/Budget.md +77 -0
  278. package/src/modules/accounting/docs/models/BudgetLineItem.md +40 -0
  279. package/src/modules/accounting/docs/models/Commitment.md +45 -0
  280. package/src/modules/accounting/docs/models/CostCenter.md +51 -0
  281. package/src/modules/accounting/docs/models/CostCenterHierarchy.md +38 -0
  282. package/src/modules/accounting/docs/models/CostCenterHierarchyNode.md +41 -0
  283. package/src/modules/accounting/docs/models/CostElement.md +66 -0
  284. package/src/modules/accounting/docs/models/InternalOrder.md +67 -0
  285. package/src/modules/accounting/docs/models/PlanVersion.md +36 -0
  286. package/src/modules/accounting/docs/models/ProfitCenter.md +66 -0
  287. package/src/modules/accounting/docs/models/ProfitCenterHierarchy.md +36 -0
  288. package/src/modules/accounting/docs/models/ProfitCenterHierarchyAssignment.md +36 -0
  289. package/src/modules/accounting/docs/models/ProfitCenterHierarchyNode.md +39 -0
  290. package/src/modules/accounting/docs/models/VarianceReport.md +58 -0
  291. package/src/modules/accounting/docs/models/VarianceReportLine.md +43 -0
  292. package/src/modules/accounting/docs/queries/CalculateBudgetAvailability.md +64 -0
  293. package/src/modules/accounting/docs/queries/GetAllocationCycle.md +43 -0
  294. package/src/modules/accounting/docs/queries/GetBudget.md +42 -0
  295. package/src/modules/accounting/docs/queries/GetCostCenter.md +38 -0
  296. package/src/modules/accounting/docs/queries/GetCostCenterHierarchy.md +45 -0
  297. package/src/modules/accounting/docs/queries/GetCostElement.md +39 -0
  298. package/src/modules/accounting/docs/queries/GetInternalOrder.md +42 -0
  299. package/src/modules/accounting/docs/queries/GetProfitCenter.md +38 -0
  300. package/src/modules/accounting/docs/queries/GetProfitCenterHierarchy.md +46 -0
  301. package/src/modules/accounting/docs/queries/GetVarianceReport.md +45 -0
  302. package/src/modules/accounting/docs/queries/ListAllocationCycles.md +63 -0
  303. package/src/modules/accounting/docs/queries/ListBudgets.md +70 -0
  304. package/src/modules/accounting/docs/queries/ListCostCenters.md +55 -0
  305. package/src/modules/accounting/docs/queries/ListCostElements.md +63 -0
  306. package/src/modules/accounting/docs/queries/ListInternalOrders.md +62 -0
  307. package/src/modules/accounting/docs/queries/ListProfitCenters.md +49 -0
  308. package/src/modules/accounting/generated/enums.ts +110 -0
  309. package/src/modules/accounting/generated/kysely-tailordb.ts +302 -0
  310. package/src/modules/accounting/index.ts +2 -0
  311. package/src/modules/accounting/lib/_db_deps.ts +70 -0
  312. package/src/modules/accounting/lib/actualAmounts.ts +93 -0
  313. package/src/modules/accounting/lib/allocationPosting.ts +152 -0
  314. package/src/modules/accounting/lib/errors.generated.ts +432 -0
  315. package/src/modules/accounting/lib/permissions.generated.ts +61 -0
  316. package/src/modules/accounting/lib/types.ts +114 -0
  317. package/src/modules/accounting/module.ts +428 -0
  318. package/src/modules/accounting/permissions.ts +3 -0
  319. package/src/modules/accounting/query/calculateBudgetAvailability.generated.ts +5 -0
  320. package/src/modules/accounting/query/calculateBudgetAvailability.test.ts +229 -0
  321. package/src/modules/accounting/query/calculateBudgetAvailability.ts +147 -0
  322. package/src/modules/accounting/query/getAllocationCycle.generated.ts +5 -0
  323. package/src/modules/accounting/query/getAllocationCycle.test.ts +94 -0
  324. package/src/modules/accounting/query/getAllocationCycle.ts +37 -0
  325. package/src/modules/accounting/query/getBudget.generated.ts +5 -0
  326. package/src/modules/accounting/query/getBudget.test.ts +80 -0
  327. package/src/modules/accounting/query/getBudget.ts +31 -0
  328. package/src/modules/accounting/query/getCostCenter.generated.ts +5 -0
  329. package/src/modules/accounting/query/getCostCenter.test.ts +50 -0
  330. package/src/modules/accounting/query/getCostCenter.ts +33 -0
  331. package/src/modules/accounting/query/getCostCenterHierarchy.generated.ts +5 -0
  332. package/src/modules/accounting/query/getCostCenterHierarchy.test.ts +100 -0
  333. package/src/modules/accounting/query/getCostCenterHierarchy.ts +80 -0
  334. package/src/modules/accounting/query/getCostElement.generated.ts +5 -0
  335. package/src/modules/accounting/query/getCostElement.test.ts +57 -0
  336. package/src/modules/accounting/query/getCostElement.ts +21 -0
  337. package/src/modules/accounting/query/getInternalOrder.generated.ts +5 -0
  338. package/src/modules/accounting/query/getInternalOrder.test.ts +73 -0
  339. package/src/modules/accounting/query/getInternalOrder.ts +21 -0
  340. package/src/modules/accounting/query/getProfitCenter.generated.ts +5 -0
  341. package/src/modules/accounting/query/getProfitCenter.test.ts +65 -0
  342. package/src/modules/accounting/query/getProfitCenter.ts +31 -0
  343. package/src/modules/accounting/query/getProfitCenterHierarchy.generated.ts +5 -0
  344. package/src/modules/accounting/query/getProfitCenterHierarchy.test.ts +97 -0
  345. package/src/modules/accounting/query/getProfitCenterHierarchy.ts +87 -0
  346. package/src/modules/accounting/query/getVarianceReport.generated.ts +5 -0
  347. package/src/modules/accounting/query/getVarianceReport.test.ts +108 -0
  348. package/src/modules/accounting/query/getVarianceReport.ts +31 -0
  349. package/src/modules/accounting/query/listAllocationCycles.generated.ts +5 -0
  350. package/src/modules/accounting/query/listAllocationCycles.test.ts +152 -0
  351. package/src/modules/accounting/query/listAllocationCycles.ts +96 -0
  352. package/src/modules/accounting/query/listBudgets.generated.ts +5 -0
  353. package/src/modules/accounting/query/listBudgets.test.ts +150 -0
  354. package/src/modules/accounting/query/listBudgets.ts +85 -0
  355. package/src/modules/accounting/query/listCostCenters.generated.ts +5 -0
  356. package/src/modules/accounting/query/listCostCenters.test.ts +111 -0
  357. package/src/modules/accounting/query/listCostCenters.ts +71 -0
  358. package/src/modules/accounting/query/listCostElements.generated.ts +5 -0
  359. package/src/modules/accounting/query/listCostElements.test.ts +138 -0
  360. package/src/modules/accounting/query/listCostElements.ts +105 -0
  361. package/src/modules/accounting/query/listInternalOrders.generated.ts +5 -0
  362. package/src/modules/accounting/query/listInternalOrders.test.ts +129 -0
  363. package/src/modules/accounting/query/listInternalOrders.ts +94 -0
  364. package/src/modules/accounting/query/listProfitCenters.generated.ts +5 -0
  365. package/src/modules/accounting/query/listProfitCenters.test.ts +94 -0
  366. package/src/modules/accounting/query/listProfitCenters.ts +56 -0
  367. package/src/modules/accounting/seed/index.ts +19 -0
  368. package/src/modules/accounting/tailor.config.ts +13 -0
  369. package/src/modules/accounting/testing/commandTestUtils.ts +35 -0
  370. package/src/modules/accounting/testing/fixtures.ts +502 -0
  371. package/src/modules/audit/command/logAuditEvent.ts +43 -38
  372. package/src/modules/audit/command/updateAuditPolicy.ts +2 -2
  373. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +1 -1
  374. package/src/modules/audit/module.ts +4 -0
  375. package/src/modules/business-partner/command/updateContactPerson.ts +3 -4
  376. package/src/modules/business-partner/command/updatePartner.ts +13 -6
  377. package/src/modules/business-partner/command/updatePartnerAddress.ts +13 -6
  378. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +3 -4
  379. package/src/modules/business-partner/command/updatePartnerIdentification.ts +3 -4
  380. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +3 -3
  381. package/src/modules/business-partner/docs/commands/UpdatePartner.md +2 -2
  382. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +2 -2
  383. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +2 -2
  384. package/src/modules/coa-management/command/updateAccount.ts +3 -3
  385. package/src/modules/coa-management/command/updateAccountGroup.test.ts +22 -0
  386. package/src/modules/coa-management/command/updateAccountGroup.ts +30 -18
  387. package/src/modules/coa-management/command/updateChartOfAccounts.ts +3 -4
  388. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +4 -3
  389. package/src/modules/finance-ledger/command/updateFiscalYear.ts +2 -3
  390. package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +0 -17
  391. package/src/modules/finance-ledger/command/updateJournalEntry.ts +2 -10
  392. package/src/modules/finance-ledger/command/updateJournalLine.ts +2 -3
  393. package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +1 -4
  394. package/src/modules/inventory/command/updateLot.test.ts +1 -1
  395. package/src/modules/inventory/command/updateLot.ts +2 -3
  396. package/src/modules/inventory/command/updateStockMovement.ts +2 -3
  397. package/src/modules/inventory/command/updateStorageLocation.ts +12 -17
  398. package/src/modules/inventory/command/updateValuationPolicy.ts +2 -3
  399. package/src/modules/inventory/command/updateWarehouse.ts +2 -3
  400. package/src/modules/inventory/docs/commands/UpdateLot.md +3 -3
  401. package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +6 -6
  402. package/src/modules/inventory/docs/commands/UpdateWarehouse.md +2 -2
  403. package/src/modules/item-management/command/updateItem.test.ts +16 -12
  404. package/src/modules/item-management/command/updateItem.ts +47 -31
  405. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +15 -16
  406. package/src/modules/item-management/command/updateTaxonomyNode.ts +42 -29
  407. package/src/modules/item-management/docs/commands/UpdateItem.md +7 -11
  408. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +10 -14
  409. package/src/modules/manufacturing/command/updateBillOfMaterial.ts +3 -4
  410. package/src/modules/manufacturing/command/updateProductionOrder.ts +3 -4
  411. package/src/modules/manufacturing/command/updateRouting.ts +3 -4
  412. package/src/modules/manufacturing/command/updateWorkCenter.test.ts +16 -7
  413. package/src/modules/manufacturing/command/updateWorkCenter.ts +41 -38
  414. package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +2 -0
  415. package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +2 -0
  416. package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +1 -0
  417. package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +1 -0
  418. package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +6 -5
  419. package/src/modules/manufacturing/docs/models/BillOfMaterialLine.md +42 -0
  420. package/src/modules/manufacturing/docs/models/CostVarianceLine.md +36 -0
  421. package/src/modules/manufacturing/docs/models/ManufacturingCostLine.md +37 -0
  422. package/src/modules/manufacturing/docs/models/ManufacturingCostSettlementRecord.md +34 -0
  423. package/src/modules/manufacturing/docs/models/ProductionOrderBomSnapshot.md +35 -0
  424. package/src/modules/manufacturing/docs/models/ProductionOrderCostBaseline.md +36 -0
  425. package/src/modules/manufacturing/docs/models/ProductionOrderMaterialRequirement.md +35 -0
  426. package/src/modules/manufacturing/docs/models/ProductionOrderRoutingSnapshot.md +34 -0
  427. package/src/modules/manufacturing/docs/models/RoutingOperation.md +40 -0
  428. package/src/modules/manufacturing/docs/models/WorkOrderExecutionEvent.md +38 -0
  429. package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +1 -0
  430. package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +1 -0
  431. package/src/modules/organization/command/updateCompany.test.ts +6 -6
  432. package/src/modules/organization/command/updateCompany.ts +3 -4
  433. package/src/modules/organization/command/updateDepartment.test.ts +7 -7
  434. package/src/modules/organization/command/updateDepartment.ts +13 -12
  435. package/src/modules/organization/command/updateSite.test.ts +10 -10
  436. package/src/modules/organization/command/updateSite.ts +3 -4
  437. package/src/modules/organization/docs/commands/UpdateCompany.md +6 -6
  438. package/src/modules/organization/docs/commands/UpdateDepartment.md +9 -10
  439. package/src/modules/organization/docs/commands/UpdateSite.md +12 -12
  440. package/src/modules/product-management/command/updateProduct.test.ts +17 -11
  441. package/src/modules/product-management/command/updateProduct.ts +45 -28
  442. package/src/modules/product-management/command/updateProductAttribute.test.ts +16 -21
  443. package/src/modules/product-management/command/updateProductAttribute.ts +40 -26
  444. package/src/modules/product-management/command/updateProductAttributeValue.ts +2 -3
  445. package/src/modules/product-management/command/updateProductCategory.test.ts +14 -19
  446. package/src/modules/product-management/command/updateProductCategory.ts +42 -26
  447. package/src/modules/product-management/docs/commands/UpdateProduct.md +16 -20
  448. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +10 -14
  449. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +10 -14
  450. package/src/modules/purchase/command/updateGoodsReceipt.ts +2 -3
  451. package/src/modules/purchase/command/updatePurchaseBill.ts +2 -3
  452. package/src/modules/purchase/command/updatePurchaseOrder.ts +2 -3
  453. package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +2 -3
  454. package/src/modules/purchase/command/updatePurchasePriceList.ts +2 -3
  455. package/src/modules/purchase/command/updatePurchasePriceRule.ts +2 -3
  456. package/src/modules/sales/command/updateChannel.test.ts +4 -4
  457. package/src/modules/sales/command/updateChannel.ts +2 -3
  458. package/src/modules/sales/command/updateListing.test.ts +2 -2
  459. package/src/modules/sales/command/updateListing.ts +2 -3
  460. package/src/modules/sales/command/updateSalesCreditNote.test.ts +2 -2
  461. package/src/modules/sales/command/updateSalesCreditNote.ts +2 -3
  462. package/src/modules/sales/command/updateSalesInvoice.test.ts +2 -2
  463. package/src/modules/sales/command/updateSalesInvoice.ts +2 -3
  464. package/src/modules/sales/command/updateSalesOrder.test.ts +3 -3
  465. package/src/modules/sales/command/updateSalesOrder.ts +2 -3
  466. package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +2 -2
  467. package/src/modules/sales/command/updateSalesPaymentTerm.ts +2 -3
  468. package/src/modules/sales/command/updateSalesPriceList.test.ts +3 -3
  469. package/src/modules/sales/command/updateSalesPriceList.ts +2 -3
  470. package/src/modules/sales/command/updateSalesPriceRule.test.ts +3 -3
  471. package/src/modules/sales/command/updateSalesPriceRule.ts +2 -3
  472. package/src/modules/sales/command/updateShipment.test.ts +2 -2
  473. package/src/modules/sales/command/updateShipment.ts +2 -3
  474. package/src/modules/sales/docs/commands/UpdateChannel.md +4 -4
  475. package/src/modules/sales/docs/commands/UpdateListing.md +2 -2
  476. package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +2 -2
  477. package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +2 -2
  478. package/src/modules/sales/docs/commands/UpdateSalesOrder.md +3 -3
  479. package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +2 -2
  480. package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +3 -3
  481. package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +3 -3
  482. package/src/modules/sales/docs/commands/UpdateShipment.md +2 -2
  483. package/src/modules/user-management/README.md +2 -1
  484. package/src/modules/user-management/command/updateOwnProfile.generated.ts +6 -0
  485. package/src/modules/user-management/command/updateOwnProfile.test.ts +191 -0
  486. package/src/modules/user-management/command/updateOwnProfile.ts +82 -0
  487. package/src/modules/user-management/command/updateUser.generated.ts +6 -0
  488. package/src/modules/user-management/command/updateUser.test.ts +195 -0
  489. package/src/modules/user-management/command/updateUser.ts +76 -0
  490. package/src/modules/user-management/docs/commands/UpdateOwnProfile.md +68 -0
  491. package/src/modules/user-management/docs/commands/UpdateUser.md +67 -0
  492. package/src/modules/user-management/docs/features/user-account-management.md +28 -3
  493. package/src/modules/user-management/docs/models/User.md +2 -0
  494. package/src/modules/user-management/lib/errors.generated.ts +5 -0
  495. package/src/modules/user-management/lib/permissions.generated.ts +2 -0
  496. package/src/modules/user-management/module.ts +5 -0
  497. package/src/modules/user-management/seed/index.ts +19 -0
  498. package/templates/scaffold/app/backend/seed/data/AuditEntry.schema.ts +20 -0
  499. package/templates/scaffold/app/backend/seed/data/AuditPolicy.jsonl +7 -0
  500. package/templates/scaffold/app/backend/seed/data/AuditPolicy.schema.ts +15 -0
  501. package/templates/scaffold/app/backend/seed/data/AuditableEntity.jsonl +4 -0
  502. package/templates/scaffold/app/backend/seed/data/AuditableEntity.schema.ts +20 -0
  503. package/templates/scaffold/app/backend/seed/data/ChangeDetail.schema.ts +20 -0
  504. package/templates/scaffold/app/backend/seed/data/Company.schema.ts +15 -0
  505. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +13 -0
  506. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +1 -1
  507. package/templates/scaffold/app/backend/seed/data/PolicyFieldRule.schema.ts +20 -0
  508. package/templates/scaffold/app/backend/seed/data/Role.jsonl +1 -0
  509. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +1 -1
  510. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +13 -0
  511. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +1 -1
  512. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -1
  513. package/templates/scaffold/app/backend/seed/data/User.schema.ts +1 -1
  514. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +1 -0
  515. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +1 -1
  516. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -1
  517. package/templates/scaffold/app/backend/seed/exec.mjs +12 -0
  518. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +2 -2
  519. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +2 -2
  520. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +62 -0
  521. package/templates/scaffold/app/backend/src/modules-db.ts +13 -0
  522. package/templates/scaffold/app/backend/src/modules.ts +3 -5
  523. package/templates/scaffold/app/backend/src/resolvers/assignPermissionToRole.ts +70 -0
  524. package/templates/scaffold/app/backend/src/resolvers/assignRoleToUser.ts +72 -0
  525. package/templates/scaffold/app/backend/src/resolvers/createRole.ts +92 -0
  526. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +113 -13
  527. package/templates/scaffold/app/backend/src/resolvers/deactivateUser.ts +67 -0
  528. package/templates/scaffold/app/backend/src/resolvers/reactivateUser.ts +63 -0
  529. package/templates/scaffold/app/backend/src/resolvers/revokePermissionFromRole.ts +72 -0
  530. package/templates/scaffold/app/backend/src/resolvers/revokeRoleFromUser.ts +72 -0
  531. package/templates/scaffold/app/backend/src/resolvers/updateOwnProfile.ts +107 -0
  532. package/templates/scaffold/app/backend/src/resolvers/updateUserProfile.ts +107 -0
  533. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +79 -0
  534. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log.test.ts +86 -0
  535. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +103 -0
  536. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--create-role.test.ts +61 -0
  537. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +89 -0
  538. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--update-role-permissions.test.ts +125 -0
  539. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--browse-user-list.test.ts +91 -0
  540. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--create-user-account.test.ts +97 -0
  541. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +131 -0
  542. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +85 -0
  543. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +158 -0
  544. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-own-profile.test.ts +30 -0
  545. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +98 -0
  546. package/templates/scaffold/app/backend/tailor.config.ts +6 -2
  547. package/templates/scaffold/app/docs/actors/user.md +11 -0
  548. package/templates/scaffold/app/docs/business-flow/audit-log/README.md +31 -0
  549. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log-detail.md +35 -0
  550. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log.md +44 -0
  551. package/templates/scaffold/app/docs/business-flow/role-management/README.md +33 -0
  552. package/templates/scaffold/app/docs/business-flow/role-management/story/user--assign-role-to-user.md +35 -0
  553. package/templates/scaffold/app/docs/business-flow/role-management/story/user--create-role.md +41 -0
  554. package/templates/scaffold/app/docs/business-flow/role-management/story/user--remove-role-from-user.md +33 -0
  555. package/templates/scaffold/app/docs/business-flow/role-management/story/user--update-role-permissions.md +41 -0
  556. package/templates/scaffold/app/docs/business-flow/user-lifecycle/README.md +48 -0
  557. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--browse-user-list.md +38 -0
  558. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--create-user-account.md +45 -0
  559. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--toggle-user-status.md +38 -0
  560. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-own-profile.md +36 -0
  561. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-user-profile.md +41 -0
  562. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-own-profile.md +30 -0
  563. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-user-detail.md +33 -0
  564. package/templates/scaffold/app/docs/resolver/assignPermissionToRole.md +16 -0
  565. package/templates/scaffold/app/docs/resolver/assignRoleToUser.md +17 -0
  566. package/templates/scaffold/app/docs/resolver/createRole.md +17 -0
  567. package/templates/scaffold/app/docs/resolver/createUser.md +23 -0
  568. package/templates/scaffold/app/docs/resolver/deactivateUser.md +17 -0
  569. package/templates/scaffold/app/docs/resolver/reactivateUser.md +16 -0
  570. package/templates/scaffold/app/docs/resolver/revokePermissionFromRole.md +17 -0
  571. package/templates/scaffold/app/docs/resolver/revokeRoleFromUser.md +17 -0
  572. package/templates/scaffold/app/docs/resolver/updateOwnProfile.md +20 -0
  573. package/templates/scaffold/app/docs/resolver/updateUserProfile.md +19 -0
  574. package/templates/scaffold/app/docs/screen/audit-entry-detail.md +30 -0
  575. package/templates/scaffold/app/docs/screen/audit-entry-list.md +25 -0
  576. package/templates/scaffold/app/docs/screen/my-profile-edit-form.md +22 -0
  577. package/templates/scaffold/app/docs/screen/my-profile.md +27 -0
  578. package/templates/scaffold/app/docs/screen/role-create-form.md +23 -0
  579. package/templates/scaffold/app/docs/screen/role-detail.md +27 -0
  580. package/templates/scaffold/app/docs/screen/role-edit-form.md +21 -0
  581. package/templates/scaffold/app/docs/screen/role-list.md +23 -0
  582. package/templates/scaffold/app/docs/screen/user-create-form.md +23 -0
  583. package/templates/scaffold/app/docs/screen/user-detail.md +33 -0
  584. package/templates/scaffold/app/docs/screen/user-edit-form.md +22 -0
  585. package/templates/scaffold/app/docs/screen/user-list.md +24 -0
  586. package/templates/scaffold/app/frontend/package.json +1 -1
  587. package/templates/scaffold/app/frontend/src/App.tsx +4 -0
  588. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +1 -1
  589. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +59 -31
  590. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1411 -688
  591. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +1 -1
  592. package/templates/scaffold/app/frontend/src/lib/permission-groups.ts +59 -0
  593. package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/components/audit-entry-detail.tsx +102 -0
  594. package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/page.tsx +65 -0
  595. package/templates/scaffold/app/frontend/src/pages/user-management/audit/components/audit-entries-table.tsx +90 -0
  596. package/templates/scaffold/app/frontend/src/pages/user-management/audit/page.tsx +52 -0
  597. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/components/edit-profile-form.tsx +125 -0
  598. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/page.tsx +19 -0
  599. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +41 -21
  600. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-actions.tsx +26 -0
  601. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-detail.tsx +69 -0
  602. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/components/edit-role-form.tsx +192 -0
  603. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/page.tsx +51 -0
  604. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/page.tsx +56 -0
  605. package/templates/scaffold/app/frontend/src/pages/user-management/role/components/roles-table.tsx +85 -0
  606. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/components/create-role-form.tsx +204 -0
  607. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/page.tsx +19 -0
  608. package/templates/scaffold/app/frontend/src/pages/user-management/role/page.tsx +60 -0
  609. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-actions.tsx +216 -0
  610. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +97 -33
  611. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/components/edit-user-form.tsx +115 -0
  612. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/page.tsx +51 -0
  613. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +8 -2
  614. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +43 -42
  615. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +120 -45
  616. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +3 -4
  617. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +8 -1
  618. package/templates/scaffold/module/eslint.config.js +8 -0
  619. package/templates/scaffold/project/__dot__gitignore +1 -0
  620. package/templates/scaffold/project/__pnpm-workspace.yaml +3 -0
  621. package/templates/scaffold/project/apps/.gitkeep +0 -0
  622. package/templates/scaffold/project/modules/.gitkeep +0 -0
  623. package/templates/scaffold/project/package.json +15 -0
  624. package/templates/workflows/erp-kit-check.yml +10 -4
  625. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +0 -39
  626. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +0 -60
  627. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +0 -75
  628. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +0 -21
  629. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +0 -90
  630. /package/src/modules/{supplier-portal → accounting/executor}/.gitkeep +0 -0
  631. /package/templates/scaffold/app/{docs/actors/.gitkeep → backend/seed/data/AuditEntry.jsonl} +0 -0
  632. /package/templates/scaffold/app/{docs/business-flow/.gitkeep → backend/seed/data/ChangeDetail.jsonl} +0 -0
  633. /package/templates/scaffold/app/{docs/resolver/.gitkeep → backend/seed/data/Company.jsonl} +0 -0
  634. /package/templates/scaffold/app/{docs/screen/.gitkeep → backend/seed/data/PolicyFieldRule.jsonl} +0 -0
  635. /package/templates/{config → scaffold/project}/license.config.json +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  } from "../lib/errors.generated";
9
9
  import { ok, err } from "@tailor-platform/erp-kit/module";
10
10
 
11
- export interface UpdateContactPersonInput {
11
+ export type UpdateContactPersonInput = {
12
12
  id: string;
13
13
  firstName?: string;
14
14
  lastName?: string;
@@ -16,8 +16,7 @@ export interface UpdateContactPersonInput {
16
16
  phone?: string | null;
17
17
  jobTitle?: string | null;
18
18
  department?: string | null;
19
- }
20
-
19
+ };
21
20
  /**
22
21
  * Function: updateContactPerson
23
22
  *
@@ -27,7 +26,7 @@ export interface UpdateContactPersonInput {
27
26
  */
28
27
  export async function run<CF extends Record<string, unknown>>(
29
28
  db: Transaction,
30
- input: UpdateContactPersonInput & CF,
29
+ input: UpdateContactPersonInput & Omit<Partial<CF>, "status">,
31
30
  ) {
32
31
  const { id, firstName, lastName, email, phone, jobTitle, department, ...customFields } = input;
33
32
 
@@ -10,12 +10,11 @@ import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
10
10
  type PrimitivesModule = ReturnType<typeof definePrimitivesModule>;
11
11
  type PrimitivesQueries = PrimitivesModule["queries"];
12
12
 
13
- export interface UpdatePartnerInput {
13
+ export type UpdatePartnerInput = {
14
14
  id: string;
15
15
  name?: string;
16
16
  preferredCurrencyId?: string;
17
- }
18
-
17
+ };
19
18
  /**
20
19
  * Function: updatePartner
21
20
  *
@@ -24,11 +23,19 @@ export interface UpdatePartnerInput {
24
23
  */
25
24
  export async function run<CF extends Record<string, unknown>>(
26
25
  db: Transaction,
27
- input: UpdatePartnerInput & Partial<CF>,
26
+ input: UpdatePartnerInput & Omit<Partial<CF>, "status">,
28
27
  ctx: CommandContext,
29
28
  primitivesQueries?: Pick<PrimitivesQueries, "getCurrency">,
30
29
  ) {
31
- const { id, name, preferredCurrencyId, ...customFields } = input;
30
+ const { id, name, preferredCurrencyId } = input;
31
+
32
+ const KNOWN_KEYS = new Set(["id", "name", "preferredCurrencyId"]);
33
+ const customFields: Record<string, unknown> = {};
34
+ for (const [key, value] of Object.entries(input as Record<string, unknown>)) {
35
+ if (!KNOWN_KEYS.has(key)) {
36
+ customFields[key] = value;
37
+ }
38
+ }
32
39
 
33
40
  // 1. Check partner exists
34
41
  const partner = await db
@@ -59,7 +66,7 @@ export async function run<CF extends Record<string, unknown>>(
59
66
 
60
67
  // 4. Apply updates
61
68
  const updates: Record<string, unknown> = {
62
- ...(customFields as Record<string, unknown>),
69
+ ...customFields,
63
70
  updatedAt: new Date(),
64
71
  };
65
72
  if (name !== undefined) updates.name = name;
@@ -2,7 +2,7 @@ import type { Transaction } from "../generated/kysely-tailordb";
2
2
  import { AddressNotFoundError, InvalidCountryCodeError } from "../lib/errors.generated";
3
3
  import { ok, err } from "@tailor-platform/erp-kit/module";
4
4
 
5
- export interface UpdatePartnerAddressInput {
5
+ export type UpdatePartnerAddressInput = {
6
6
  id: string;
7
7
  line1?: string;
8
8
  line2?: string | null;
@@ -10,8 +10,7 @@ export interface UpdatePartnerAddressInput {
10
10
  state?: string | null;
11
11
  postalCode?: string;
12
12
  country?: string;
13
- }
14
-
13
+ };
15
14
  /**
16
15
  * Function: updatePartnerAddress
17
16
  *
@@ -20,9 +19,17 @@ export interface UpdatePartnerAddressInput {
20
19
  */
21
20
  export async function run<CF extends Record<string, unknown>>(
22
21
  db: Transaction,
23
- input: UpdatePartnerAddressInput & Partial<CF>,
22
+ input: UpdatePartnerAddressInput & Omit<Partial<CF>, "status">,
24
23
  ) {
25
- const { id, line1, line2, city, state, postalCode, country, ...customFields } = input;
24
+ const { id, line1, line2, city, state, postalCode, country } = input;
25
+
26
+ const KNOWN_KEYS = new Set(["id", "line1", "line2", "city", "state", "postalCode", "country"]);
27
+ const customFields: Record<string, unknown> = {};
28
+ for (const [key, value] of Object.entries(input as Record<string, unknown>)) {
29
+ if (!KNOWN_KEYS.has(key)) {
30
+ customFields[key] = value;
31
+ }
32
+ }
26
33
 
27
34
  // 1. Check address exists
28
35
  const address = await db
@@ -43,7 +50,7 @@ export async function run<CF extends Record<string, unknown>>(
43
50
 
44
51
  // 3. Apply updates
45
52
  const updates: Record<string, unknown> = {
46
- ...(customFields as Record<string, unknown>),
53
+ ...customFields,
47
54
  updatedAt: new Date(),
48
55
  };
49
56
  if (line1 !== undefined) updates.line1 = line1;
@@ -12,7 +12,7 @@ import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
12
12
  type PrimitivesModule = ReturnType<typeof definePrimitivesModule>;
13
13
  type PrimitivesQueries = PrimitivesModule["queries"];
14
14
 
15
- export interface UpdatePartnerBankAccountInput {
15
+ export type UpdatePartnerBankAccountInput = {
16
16
  id: string;
17
17
  bankName?: string;
18
18
  accountHolderName?: string;
@@ -21,8 +21,7 @@ export interface UpdatePartnerBankAccountInput {
21
21
  iban?: string;
22
22
  swiftBic?: string | null;
23
23
  currencyId?: string;
24
- }
25
-
24
+ };
26
25
  /**
27
26
  * Function: updatePartnerBankAccount
28
27
  *
@@ -31,7 +30,7 @@ export interface UpdatePartnerBankAccountInput {
31
30
  */
32
31
  export async function run<CF extends Record<string, unknown>>(
33
32
  db: Transaction,
34
- input: UpdatePartnerBankAccountInput & CF,
33
+ input: UpdatePartnerBankAccountInput & Omit<Partial<CF>, "status">,
35
34
  ctx: CommandContext,
36
35
  primitivesQueries?: Pick<PrimitivesQueries, "getCurrency">,
37
36
  ) {
@@ -7,14 +7,13 @@ import {
7
7
  } from "../lib/errors.generated";
8
8
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
9
9
 
10
- export interface UpdatePartnerIdentificationInput {
10
+ export type UpdatePartnerIdentificationInput = {
11
11
  id: string;
12
12
  value?: string;
13
13
  issuingCountry?: string;
14
14
  validFrom?: Date;
15
15
  validTo?: Date;
16
- }
17
-
16
+ };
18
17
  /**
19
18
  * Function: updatePartnerIdentification
20
19
  *
@@ -24,7 +23,7 @@ export interface UpdatePartnerIdentificationInput {
24
23
  */
25
24
  export async function run<CF extends Record<string, unknown>>(
26
25
  db: Transaction,
27
- input: UpdatePartnerIdentificationInput & CF,
26
+ input: UpdatePartnerIdentificationInput & Omit<Partial<CF>, "status">,
28
27
  _ctx: CommandContext,
29
28
  ) {
30
29
  const { id, value, issuingCountry, validFrom, validTo, ...customFields } = input;
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- updateContactPerson modifies the details of an existing contact person. All fields are optional, but validation rules are enforced for any provided values. The contact person's association with its organization partner cannot be changed. After the update, at least one communication channel (email or phone) must remain present.
5
+ updateContactPerson modifies the details of an existing contact person. All fields are optional, but validation rules are enforced for any provided values. The contact person's organization association is fixed by the existing record and is not part of the update input. After the update, at least one communication channel (email or phone) must remain present.
6
6
 
7
7
  ## Business Rules
8
8
 
@@ -11,8 +11,8 @@ updateContactPerson modifies the details of an existing contact person. All fiel
11
11
  - Last name, if provided, must be non-empty and not whitespace-only
12
12
  - Email, if provided, must be in a valid format
13
13
  - After update, at least one of email or phone must still be present (whitespace-only values do not count)
14
- - The organization association is immutable and cannot be changed
15
- - The primary contact designation (isPrimary) is not modifiable through this command; it is preserved as-is
14
+ - The organization association is not part of the update input
15
+ - The primary contact designation (`isPrimary`) is not part of the update input; the existing value is preserved as-is
16
16
  - Only provided fields are updated; omitted fields retain their current values
17
17
 
18
18
  ## Process Flow
@@ -2,14 +2,14 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- updatePartner modifies the mutable fields of an existing business partner. Only name and preferred currency can be updated. The partner type remains immutable after creation. This command supports incremental enrichment of partner data throughout the partner lifecycle.
5
+ updatePartner modifies the mutable fields of an existing business partner. Only name and preferred currency can be updated. Partner type is fixed by the existing record and is not part of the update input. This command supports incremental enrichment of partner data throughout the partner lifecycle.
6
6
 
7
7
  ## Business Rules
8
8
 
9
9
  - Partner must exist in the system
10
10
  - Name, if provided, must be non-empty
11
11
  - Preferred currency, if provided, must reference an existing Currency in the primitives module
12
- - Partner type cannot be changed via this command
12
+ - Partner type is not part of the update input
13
13
 
14
14
  ## Process Flow
15
15
 
@@ -2,13 +2,13 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- updatePartnerAddress modifies the fields of an existing partner address. The address type is immutable and cannot be changed after creation. All other address fields (line1, line2, city, state, postalCode, country) can be updated individually. Country validation is enforced when a new country value is provided. Updates are permitted regardless of the parent partner's lifecycle status (DRAFT, ACTIVE, or INACTIVE) — existing addresses always remain updatable.
5
+ updatePartnerAddress modifies the fields of an existing partner address. Address type is fixed by the existing record and is not part of the update input. All other address fields (line1, line2, city, state, postalCode, country) can be updated individually. Country validation is enforced when a new country value is provided. Updates are permitted regardless of the parent partner's lifecycle status (DRAFT, ACTIVE, or INACTIVE) — existing addresses always remain updatable.
6
6
 
7
7
  ## Business Rules
8
8
 
9
9
  - Address must exist in the system
10
10
  - Parent partner's lifecycle status is not checked — updates are permitted in any state (DRAFT, ACTIVE, or INACTIVE)
11
- - Address type is immutable it cannot be changed after creation
11
+ - Address type is not part of the update input
12
12
  - Country, if provided, must be a valid ISO 3166-1 alpha-2 code
13
13
  - Only provided fields are updated; omitted fields retain their current values
14
14
 
@@ -2,12 +2,12 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- updatePartnerIdentification modifies the fields of an existing partner identification. The identification type is immutable and cannot be changed after creation. When the value is updated, uniqueness is re-validated against the company scope to prevent duplicate registrations.
5
+ updatePartnerIdentification modifies the fields of an existing partner identification. Identification type is fixed by the existing record and is not part of the update input. When the value is updated, uniqueness is re-validated against the company scope to prevent duplicate registrations.
6
6
 
7
7
  ## Business Rules
8
8
 
9
9
  - Identification must exist in the system
10
- - Type is immutable it cannot be changed after creation
10
+ - Type is not part of the update input
11
11
  - If value is provided, it must be non-empty and not whitespace-only
12
12
  - If value is changed, the new (type, value) combination must be unique within the company scope
13
13
  - When both validFrom and validTo are set, validTo must be greater than or equal to validFrom
@@ -16,7 +16,7 @@ import {
16
16
  } from "../lib/errors.generated";
17
17
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
18
18
 
19
- export interface UpdateAccountInput {
19
+ export type UpdateAccountInput = {
20
20
  id: string;
21
21
  name?: string;
22
22
  code?: string;
@@ -34,7 +34,7 @@ export interface UpdateAccountInput {
34
34
  defaultTaxCode?: string | null;
35
35
  tags?: string | null;
36
36
  accountGroupId?: string | null;
37
- }
37
+ };
38
38
 
39
39
  export interface AuditCommands {
40
40
  logAuditEvent: (
@@ -80,7 +80,7 @@ const RECONCILIATION_REQUIRED_CLASSIFICATIONS = ["RECEIVABLE", "PAYABLE", "BANK_
80
80
  */
81
81
  export async function run<CF extends Record<string, unknown>>(
82
82
  db: Transaction,
83
- input: UpdateAccountInput & CF,
83
+ input: UpdateAccountInput & Omit<Partial<CF>, "status">,
84
84
  ctx: CommandContext,
85
85
  deps?: GetCurrencyDep,
86
86
  auditCommands?: AuditCommands,
@@ -52,6 +52,28 @@ describe("updateAccountGroup", () => {
52
52
  }
53
53
  });
54
54
 
55
+ it("looks up group by chartOfAccountsId and code and updates name", async () => {
56
+ const { db, spies } = createMockDb<Transaction>();
57
+ const updatedGroup = { ...baseRootGroup, name: "Lookup Assets" };
58
+ spies.select.mockReturnValueOnce(baseRootGroup).mockReturnValueOnce(baseActiveCoa);
59
+ spies.update.mockReturnValue(updatedGroup);
60
+
61
+ const result = await run(
62
+ db,
63
+ {
64
+ chartOfAccountsId: baseRootGroup.chartOfAccountsId,
65
+ code: baseRootGroup.code,
66
+ name: "Lookup Assets",
67
+ },
68
+ ctx,
69
+ );
70
+
71
+ expect(result.ok).toBe(true);
72
+ if (result.ok) {
73
+ expect(result.value.accountGroup.name).toBe("Lookup Assets");
74
+ }
75
+ });
76
+
55
77
  it("returns error when name is empty", async () => {
56
78
  const { db, spies } = createMockDb<Transaction>();
57
79
  spies.select
@@ -9,13 +9,15 @@ import {
9
9
  } from "../lib/errors.generated";
10
10
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
11
11
 
12
- export interface UpdateAccountGroupInput {
13
- id: string;
12
+ export type UpdateAccountGroupInput = (
13
+ | { id: string }
14
+ | { chartOfAccountsId: string; code: string }
15
+ ) & {
14
16
  name?: string;
15
17
  sortOrder?: number | null;
16
18
  numberRangeStart?: number | null;
17
19
  numberRangeEnd?: number | null;
18
- }
20
+ };
19
21
 
20
22
  export interface AuditCommands {
21
23
  logAuditEvent: (
@@ -33,7 +35,6 @@ export interface AuditCommands {
33
35
  ctx: CommandContext,
34
36
  ) => Promise<{ ok: true; value: unknown }>;
35
37
  }
36
-
37
38
  /**
38
39
  * Function: updateAccountGroup
39
40
  *
@@ -42,22 +43,33 @@ export interface AuditCommands {
42
43
  */
43
44
  export async function run<CF extends Record<string, unknown>>(
44
45
  db: Transaction,
45
- input: UpdateAccountGroupInput & CF,
46
+ input: UpdateAccountGroupInput & Omit<Partial<CF>, "status">,
46
47
  ctx: CommandContext,
47
48
  auditCommands?: AuditCommands,
48
49
  ) {
49
- const { id, name, sortOrder, numberRangeStart, numberRangeEnd, ...customFields } = input;
50
+ const { name, sortOrder, numberRangeStart, numberRangeEnd, ...customFields } = input;
51
+ delete (customFields as Record<string, unknown>).id;
52
+ delete (customFields as Record<string, unknown>).chartOfAccountsId;
53
+ delete (customFields as Record<string, unknown>).code;
50
54
 
51
55
  // 1. Find the group
52
- const existing = await db
53
- .selectFrom("AccountGroup")
54
- .selectAll()
55
- .where("id", "=", id)
56
- .forUpdate()
57
- .executeTakeFirst();
56
+ let existingQuery = db.selectFrom("AccountGroup").selectAll();
57
+ if ("id" in input) {
58
+ existingQuery = existingQuery.where("id", "=", (input as { id: string }).id);
59
+ } else {
60
+ const lookup = input as { chartOfAccountsId: string; code: string };
61
+ existingQuery = existingQuery
62
+ .where("chartOfAccountsId", "=", lookup.chartOfAccountsId)
63
+ .where("code", "=", lookup.code);
64
+ }
65
+ const existing = await existingQuery.forUpdate().executeTakeFirst();
58
66
 
59
67
  if (!existing) {
60
- return err(new AccountGroupNotFoundError(id));
68
+ const key =
69
+ "id" in input
70
+ ? (input as { id: string }).id
71
+ : `${(input as { chartOfAccountsId: string; code: string }).chartOfAccountsId}:${(input as { chartOfAccountsId: string; code: string }).code}`;
72
+ return err(new AccountGroupNotFoundError(key));
61
73
  }
62
74
 
63
75
  // 2. Check parent CoA status
@@ -101,7 +113,7 @@ export async function run<CF extends Record<string, unknown>>(
101
113
  .execute();
102
114
 
103
115
  for (const group of existingGroups) {
104
- if (group.id === id) continue;
116
+ if (group.id === existing.id) continue;
105
117
  if (group.numberRangeStart !== null && group.numberRangeEnd !== null) {
106
118
  if (newRangeStart <= group.numberRangeEnd && newRangeEnd >= group.numberRangeStart) {
107
119
  return err(new InvalidNumberRangeError(`${newRangeStart}-${newRangeEnd}`));
@@ -113,14 +125,14 @@ export async function run<CF extends Record<string, unknown>>(
113
125
  const assignedAccounts = await db
114
126
  .selectFrom("Account")
115
127
  .selectAll()
116
- .where("accountGroupId", "=", id)
128
+ .where("accountGroupId", "=", existing.id)
117
129
  .execute();
118
130
 
119
131
  for (const account of assignedAccounts) {
120
132
  const accountCode = parseInt(account.code, 10);
121
133
  if (!isNaN(accountCode)) {
122
134
  if (accountCode < newRangeStart || accountCode > newRangeEnd) {
123
- return err(new AccountsOutOfRangeError(id));
135
+ return err(new AccountsOutOfRangeError(existing.id));
124
136
  }
125
137
  }
126
138
  }
@@ -141,7 +153,7 @@ export async function run<CF extends Record<string, unknown>>(
141
153
  const accountGroup = await db
142
154
  .updateTable("AccountGroup")
143
155
  .set(updateData)
144
- .where("id", "=", id)
156
+ .where("id", "=", existing.id)
145
157
  .returningAll()
146
158
  .executeTakeFirst();
147
159
 
@@ -177,7 +189,7 @@ export async function run<CF extends Record<string, unknown>>(
177
189
  actorType: "USER",
178
190
  actorId: ctx.actorId,
179
191
  entityType: "AccountGroup",
180
- entityId: id,
192
+ entityId: existing.id,
181
193
  operationType: "UPDATE",
182
194
  companyId: coa!.companyId,
183
195
  changes,
@@ -7,11 +7,11 @@ import {
7
7
  } from "../lib/errors.generated";
8
8
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
9
9
 
10
- export interface UpdateChartOfAccountsInput {
10
+ export type UpdateChartOfAccountsInput = {
11
11
  id: string;
12
12
  name?: string;
13
13
  description?: string | null;
14
- }
14
+ };
15
15
 
16
16
  export interface AuditCommands {
17
17
  logAuditEvent: (
@@ -29,7 +29,6 @@ export interface AuditCommands {
29
29
  ctx: CommandContext,
30
30
  ) => Promise<{ ok: true; value: unknown }>;
31
31
  }
32
-
33
32
  /**
34
33
  * Function: updateChartOfAccounts
35
34
  *
@@ -38,7 +37,7 @@ export interface AuditCommands {
38
37
  */
39
38
  export async function run<CF extends Record<string, unknown>>(
40
39
  db: Transaction,
41
- input: UpdateChartOfAccountsInput & CF,
40
+ input: UpdateChartOfAccountsInput & Omit<Partial<CF>, "status">,
42
41
  ctx: CommandContext,
43
42
  auditCommands?: AuditCommands,
44
43
  ) {
@@ -2,14 +2,14 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- updateAccountGroup modifies the mutable fields (name, sort order, number range) of an existing account group. Code is immutable after creation. Number range changes must not conflict with existing account assignments or overlap with other groups' ranges.
5
+ updateAccountGroup modifies the mutable fields (name, sort order, number range) of an existing account group. The target group can be looked up by `id` or by `chartOfAccountsId` + `code`. Group code is fixed by the existing record and is used only as a lookup key when paired with `chartOfAccountsId`. Number range changes must not conflict with existing account assignments or overlap with other groups' ranges.
6
6
 
7
7
  ## Business Rules
8
8
 
9
- - Target group must exist
9
+ - Target group must exist (looked up by `id` or `chartOfAccountsId` + `code`)
10
10
  - Parent CoA must be in DRAFT or ACTIVE status; updating a group under an ARCHIVED CoA is rejected
11
11
  - Name, when provided, must be non-empty
12
- - Group code is immutable
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
15
  - Emits an audit event via the audit module recording the acting user, timestamp, and previous and new field values for all changed attributes
@@ -48,6 +48,7 @@ flowchart TD
48
48
  ## Test Cases
49
49
 
50
50
  - returns error when group does not exist
51
+ - looks up group by chartOfAccountsId and code and updates name
51
52
  - returns error when parent CoA is ARCHIVED
52
53
  - returns error when name is empty
53
54
  - returns error when new number range is invalid
@@ -8,13 +8,12 @@ import {
8
8
  OverlappingFiscalYearError,
9
9
  } from "../lib/errors.generated";
10
10
 
11
- export interface UpdateFiscalYearInput {
11
+ export type UpdateFiscalYearInput = {
12
12
  id: string;
13
13
  yearName?: string;
14
14
  startDate?: Date;
15
15
  endDate?: Date;
16
- }
17
-
16
+ };
18
17
  export async function run(db: Transaction, input: UpdateFiscalYearInput, ctx: CommandContext) {
19
18
  const existing = await db
20
19
  .selectFrom("FiscalYear")
@@ -5,7 +5,6 @@ import {
5
5
  JournalEntryNotFoundError,
6
6
  InvalidStatusForUpdateError,
7
7
  DuplicateReferenceNumberError,
8
- JournalTypeImmutableError,
9
8
  } from "../lib/errors.generated";
10
9
  import { baseJournalEntry, postedJournalEntry, reversedJournalEntry } from "../testing/fixtures";
11
10
  import { commandCtx, expectErr, expectOk } from "../testing/commandTestUtils";
@@ -60,22 +59,6 @@ describe("updateJournalEntry", () => {
60
59
  expectErr(result, InvalidStatusForUpdateError);
61
60
  });
62
61
 
63
- it("returns error when attempting to change journal type", async () => {
64
- const { db, spies } = createMockDb<Transaction>();
65
- spies.select.mockReturnValueOnce(baseJournalEntry);
66
-
67
- const result = await run(
68
- db,
69
- {
70
- journalEntryId: baseJournalEntry.id,
71
- journalType: "SALES",
72
- },
73
- commandCtx,
74
- );
75
-
76
- expectErr(result, JournalTypeImmutableError);
77
- });
78
-
79
62
  it("updates description on a DRAFT journal entry", async () => {
80
63
  const updatedEntry = { ...baseJournalEntry, description: "New description" };
81
64
  const { db, spies } = createMockDb<Transaction>();
@@ -4,18 +4,15 @@ import {
4
4
  JournalEntryNotFoundError,
5
5
  InvalidStatusForUpdateError,
6
6
  DuplicateReferenceNumberError,
7
- JournalTypeImmutableError,
8
7
  } from "../lib/errors.generated";
9
8
 
10
- export interface UpdateJournalEntryInput {
9
+ export type UpdateJournalEntryInput = {
11
10
  journalEntryId: string;
12
- journalType?: string;
13
11
  description?: string;
14
12
  sourceDocumentReference?: string;
15
13
  entryDate?: Date;
16
14
  referenceNumber?: string;
17
- }
18
-
15
+ };
19
16
  /**
20
17
  * Function: updateJournalEntry
21
18
  *
@@ -43,11 +40,6 @@ export async function run(db: Transaction, input: UpdateJournalEntryInput, _ctx:
43
40
  return err(new InvalidStatusForUpdateError(journalEntryId));
44
41
  }
45
42
 
46
- // 2b. Journal type cannot be changed after creation
47
- if (input.journalType !== undefined && input.journalType !== existing.journalType) {
48
- return err(new JournalTypeImmutableError(journalEntryId));
49
- }
50
-
51
43
  // 3. If referenceNumber is being updated, check uniqueness within company
52
44
  if (referenceNumber !== undefined) {
53
45
  const duplicate = await db
@@ -9,7 +9,7 @@ import {
9
9
  CurrencyNotFoundError,
10
10
  } from "../lib/errors.generated";
11
11
 
12
- export interface UpdateJournalLineInput {
12
+ export type UpdateJournalLineInput = {
13
13
  id: string;
14
14
  accountId?: string;
15
15
  debitAmount?: number | null;
@@ -17,8 +17,7 @@ export interface UpdateJournalLineInput {
17
17
  description?: string;
18
18
  currencyCode?: string | null;
19
19
  exchangeRate?: number | null;
20
- }
21
-
20
+ };
22
21
  export async function run(db: Transaction, input: UpdateJournalLineInput, ctx: CommandContext) {
23
22
  // 1. Fetch journal line
24
23
  const existing = await db
@@ -2,13 +2,12 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- updateJournalEntry modifies the header fields of an existing journal entry that is in DRAFT status. Updatable fields include description, source document reference, and other header-level attributes. Posted and reversed entries are immutable and cannot be updated. This command does not affect journal lines, which are managed via addJournalLine, updateJournalLine, and removeJournalLine.
5
+ updateJournalEntry modifies the header fields of an existing journal entry that is in DRAFT status. Updatable fields include description, source document reference, entry date, and reference number. Posted and reversed entries are immutable and cannot be updated. This command does not affect journal lines, which are managed via addJournalLine, updateJournalLine, and removeJournalLine.
6
6
 
7
7
  ## Business Rules
8
8
 
9
9
  - Journal entry must exist and be in DRAFT status
10
10
  - Only DRAFT entries can be updated; POSTED and REVERSED entries are immutable
11
- - Journal type cannot be changed after the entry is created
12
11
  - Entry date can be updated while in DRAFT status
13
12
  - Description and source document reference can be updated while in DRAFT status
14
13
  - Emits an audit event recording previous and new field values, acting user, and timestamp
@@ -34,7 +33,6 @@ flowchart TD
34
33
 
35
34
  - **JOURNAL_ENTRY_NOT_FOUND**: Referenced journal entry does not exist
36
35
  - **INVALID_STATUS_FOR_UPDATE**: Journal entry is not in DRAFT status; POSTED and REVERSED entries cannot be modified
37
- - **JOURNAL_TYPE_IMMUTABLE**: Attempted to change the journal type after creation; journal type is immutable once created
38
36
 
39
37
  ## Test Cases
40
38
 
@@ -46,5 +44,4 @@ flowchart TD
46
44
  - updates entry date on a DRAFT journal entry
47
45
  - updates reference number on a DRAFT journal entry with uniqueness check
48
46
  - returns error when updated reference number already exists
49
- - returns error when attempting to change journal type
50
47
  - emits audit event recording previous and new field values and acting user
@@ -61,7 +61,7 @@ describe("updateLot", () => {
61
61
  }
62
62
  });
63
63
 
64
- it("lot number cannot be changed", async () => {
64
+ it("lot number is not part of the update input", async () => {
65
65
  const { db, spies } = createMockDb<Transaction>();
66
66
  const updatedLot = { ...baseActiveLot }; // lotNumber remains the same
67
67
  spies.select.mockReturnValueOnce(baseActiveLot); // existing lot
@@ -2,13 +2,12 @@ import type { Transaction } from "../generated/kysely-tailordb";
2
2
  import { LotNotFoundError, LotFullyConsumedError } from "../lib/errors.generated";
3
3
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
4
4
 
5
- export interface UpdateLotInput {
5
+ export type UpdateLotInput = {
6
6
  id: string;
7
7
  manufactureDate?: Date | null;
8
8
  expirationDate?: Date | null;
9
9
  supplierLotReference?: string | null;
10
- }
11
-
10
+ };
12
11
  /**
13
12
  * Function: updateLot
14
13
  *
@@ -20,11 +20,11 @@ export interface UpdateMoveLineInput {
20
20
  serialNumberId?: string | null;
21
21
  }
22
22
 
23
- export interface UpdateStockMovementInput {
23
+ export type UpdateStockMovementInput = {
24
24
  id: string;
25
25
  reasonCode?: string | null;
26
26
  lines?: UpdateMoveLineInput[];
27
- }
27
+ };
28
28
 
29
29
  export interface ItemManagementQueries {
30
30
  getItem: (
@@ -36,7 +36,6 @@ export interface ItemManagementQueries {
36
36
  value: { item: { id: string; status: string; isLotTracked?: boolean } | null };
37
37
  }>;
38
38
  }
39
-
40
39
  /**
41
40
  * Function: updateStockMovement
42
41
  *