@tailor-platform/erp-kit 0.6.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 (913) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +18 -14
  3. package/dist/cli.mjs +477 -139
  4. package/package.json +1 -1
  5. package/skills/erp-kit-app-1-requirements/SKILL.md +33 -17
  6. package/skills/erp-kit-app-2-requirements-review/SKILL.md +12 -0
  7. package/skills/erp-kit-app-3-plan/SKILL.md +18 -4
  8. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +1 -1
  9. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +1 -1
  10. package/skills/erp-kit-app-4-plan-review/SKILL.md +12 -0
  11. package/skills/erp-kit-app-5-impl-backend/SKILL.md +17 -5
  12. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -1
  13. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +37 -12
  14. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +15 -1
  15. package/skills/erp-kit-app-6-impl-frontend/references/component.md +90 -0
  16. package/skills/erp-kit-app-6-impl-frontend/references/detail-view.md +255 -0
  17. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +1 -5
  18. package/skills/erp-kit-app-7-impl-review/SKILL.md +16 -3
  19. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +14 -8
  20. package/skills/erp-kit-app-shared/references/progress-protocol.md +77 -0
  21. package/skills/erp-kit-mock-scenario/SKILL.md +1 -1
  22. package/skills/erp-kit-module-1-requirements/SKILL.md +1 -1
  23. package/skills/erp-kit-module-3-plan/SKILL.md +3 -3
  24. package/skills/erp-kit-module-3-update-plan/SKILL.md +3 -3
  25. package/skills/erp-kit-module-5-impl/SKILL.md +1 -1
  26. package/skills/erp-kit-module-6-impl-review/SKILL.md +16 -19
  27. package/skills/erp-kit-module-shared/references/commands.md +68 -1
  28. package/src/commands/app/index.ts +2 -0
  29. package/src/commands/app/progress/git-context.ts +16 -0
  30. package/src/commands/app/progress/index.ts +45 -0
  31. package/src/commands/app/progress/log.ts +49 -0
  32. package/src/commands/app/progress/progress.test.ts +128 -0
  33. package/src/commands/app/progress/schema-cmd.ts +10 -0
  34. package/src/commands/check.test.ts +4 -4
  35. package/src/commands/index.ts +8 -2
  36. package/src/commands/init.test.ts +24 -8
  37. package/src/commands/init.ts +5 -12
  38. package/src/commands/lib/discovery.test.ts +5 -7
  39. package/src/commands/lib/discovery.ts +8 -8
  40. package/src/commands/lib/distribute.test.ts +1 -20
  41. package/src/commands/lib/distribute.ts +0 -14
  42. package/src/commands/lib/sync-check-source.test.ts +1 -1
  43. package/src/commands/lib/sync-check-source.ts +6 -1
  44. package/src/commands/lib/sync-check-tests.test.ts +43 -0
  45. package/src/commands/lib/sync-check-tests.ts +20 -2
  46. package/src/commands/sync-check.ts +3 -0
  47. package/src/commands/update.test.ts +1 -1
  48. package/src/generator/generate-app-code.test.ts +0 -6
  49. package/src/generator/generate-app-code.ts +3 -13
  50. package/src/generator/generate-code.test.ts +10 -40
  51. package/src/generator/generate-code.ts +6 -12
  52. package/src/generator/scaffold.ts +25 -4
  53. package/src/generator/stub-templates.test.ts +0 -7
  54. package/src/generator/stub-templates.ts +0 -14
  55. package/src/module.ts +4 -1
  56. package/src/modules/accounting/README.md +63 -0
  57. package/src/modules/accounting/command/activateBudget.generated.ts +6 -0
  58. package/src/modules/accounting/command/activateBudget.test.ts +119 -0
  59. package/src/modules/accounting/command/activateBudget.ts +77 -0
  60. package/src/modules/accounting/command/activateCostElement.generated.ts +6 -0
  61. package/src/modules/accounting/command/activateCostElement.test.ts +59 -0
  62. package/src/modules/accounting/command/activateCostElement.ts +41 -0
  63. package/src/modules/accounting/command/activateProfitCenter.generated.ts +6 -0
  64. package/src/modules/accounting/command/activateProfitCenter.test.ts +60 -0
  65. package/src/modules/accounting/command/activateProfitCenter.ts +38 -0
  66. package/src/modules/accounting/command/approveBudget.generated.ts +6 -0
  67. package/src/modules/accounting/command/approveBudget.test.ts +69 -0
  68. package/src/modules/accounting/command/approveBudget.ts +47 -0
  69. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.generated.ts +6 -0
  70. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.test.ts +112 -0
  71. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.ts +67 -0
  72. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.generated.ts +6 -0
  73. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +123 -0
  74. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +71 -0
  75. package/src/modules/accounting/command/closeBudget.generated.ts +6 -0
  76. package/src/modules/accounting/command/closeBudget.test.ts +93 -0
  77. package/src/modules/accounting/command/closeBudget.ts +40 -0
  78. package/src/modules/accounting/command/closeInternalOrder.generated.ts +6 -0
  79. package/src/modules/accounting/command/closeInternalOrder.test.ts +74 -0
  80. package/src/modules/accounting/command/closeInternalOrder.ts +38 -0
  81. package/src/modules/accounting/command/consumeCommitment.generated.ts +6 -0
  82. package/src/modules/accounting/command/consumeCommitment.test.ts +123 -0
  83. package/src/modules/accounting/command/consumeCommitment.ts +62 -0
  84. package/src/modules/accounting/command/createAllocationCycle.generated.ts +6 -0
  85. package/src/modules/accounting/command/createAllocationCycle.test.ts +166 -0
  86. package/src/modules/accounting/command/createAllocationCycle.ts +68 -0
  87. package/src/modules/accounting/command/createAllocationRule.generated.ts +6 -0
  88. package/src/modules/accounting/command/createAllocationRule.test.ts +195 -0
  89. package/src/modules/accounting/command/createAllocationRule.ts +103 -0
  90. package/src/modules/accounting/command/createBudget.generated.ts +6 -0
  91. package/src/modules/accounting/command/createBudget.test.ts +159 -0
  92. package/src/modules/accounting/command/createBudget.ts +100 -0
  93. package/src/modules/accounting/command/createBudgetLineItem.generated.ts +6 -0
  94. package/src/modules/accounting/command/createBudgetLineItem.test.ts +178 -0
  95. package/src/modules/accounting/command/createBudgetLineItem.ts +104 -0
  96. package/src/modules/accounting/command/createCostCenter.generated.ts +6 -0
  97. package/src/modules/accounting/command/createCostCenter.test.ts +179 -0
  98. package/src/modules/accounting/command/createCostCenter.ts +112 -0
  99. package/src/modules/accounting/command/createCostCenterHierarchy.generated.ts +6 -0
  100. package/src/modules/accounting/command/createCostCenterHierarchy.test.ts +91 -0
  101. package/src/modules/accounting/command/createCostCenterHierarchy.ts +48 -0
  102. package/src/modules/accounting/command/createCostCenterHierarchyNode.generated.ts +6 -0
  103. package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +171 -0
  104. package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +117 -0
  105. package/src/modules/accounting/command/createCostElement.generated.ts +6 -0
  106. package/src/modules/accounting/command/createCostElement.test.ts +317 -0
  107. package/src/modules/accounting/command/createCostElement.ts +149 -0
  108. package/src/modules/accounting/command/createInternalOrder.generated.ts +6 -0
  109. package/src/modules/accounting/command/createInternalOrder.test.ts +206 -0
  110. package/src/modules/accounting/command/createInternalOrder.ts +104 -0
  111. package/src/modules/accounting/command/createPlanVersion.generated.ts +6 -0
  112. package/src/modules/accounting/command/createPlanVersion.test.ts +230 -0
  113. package/src/modules/accounting/command/createPlanVersion.ts +71 -0
  114. package/src/modules/accounting/command/createProfitCenter.generated.ts +6 -0
  115. package/src/modules/accounting/command/createProfitCenter.test.ts +227 -0
  116. package/src/modules/accounting/command/createProfitCenter.ts +81 -0
  117. package/src/modules/accounting/command/createProfitCenterHierarchy.generated.ts +6 -0
  118. package/src/modules/accounting/command/createProfitCenterHierarchy.test.ts +91 -0
  119. package/src/modules/accounting/command/createProfitCenterHierarchy.ts +46 -0
  120. package/src/modules/accounting/command/createProfitCenterHierarchyNode.generated.ts +6 -0
  121. package/src/modules/accounting/command/createProfitCenterHierarchyNode.test.ts +160 -0
  122. package/src/modules/accounting/command/createProfitCenterHierarchyNode.ts +109 -0
  123. package/src/modules/accounting/command/deactivateCostElement.generated.ts +6 -0
  124. package/src/modules/accounting/command/deactivateCostElement.test.ts +59 -0
  125. package/src/modules/accounting/command/deactivateCostElement.ts +41 -0
  126. package/src/modules/accounting/command/deactivateProfitCenter.generated.ts +6 -0
  127. package/src/modules/accounting/command/deactivateProfitCenter.test.ts +60 -0
  128. package/src/modules/accounting/command/deactivateProfitCenter.ts +42 -0
  129. package/src/modules/accounting/command/deleteAllocationCycle.generated.ts +6 -0
  130. package/src/modules/accounting/command/deleteAllocationCycle.test.ts +90 -0
  131. package/src/modules/accounting/command/deleteAllocationCycle.ts +39 -0
  132. package/src/modules/accounting/command/deleteAllocationRule.generated.ts +6 -0
  133. package/src/modules/accounting/command/deleteAllocationRule.test.ts +98 -0
  134. package/src/modules/accounting/command/deleteAllocationRule.ts +40 -0
  135. package/src/modules/accounting/command/deleteBudget.generated.ts +6 -0
  136. package/src/modules/accounting/command/deleteBudget.test.ts +90 -0
  137. package/src/modules/accounting/command/deleteBudget.ts +35 -0
  138. package/src/modules/accounting/command/deleteBudgetLineItem.generated.ts +6 -0
  139. package/src/modules/accounting/command/deleteBudgetLineItem.test.ts +85 -0
  140. package/src/modules/accounting/command/deleteBudgetLineItem.ts +50 -0
  141. package/src/modules/accounting/command/deleteCostCenter.generated.ts +6 -0
  142. package/src/modules/accounting/command/deleteCostCenter.test.ts +79 -0
  143. package/src/modules/accounting/command/deleteCostCenter.ts +67 -0
  144. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.generated.ts +6 -0
  145. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.test.ts +59 -0
  146. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.ts +58 -0
  147. package/src/modules/accounting/command/deleteCostElement.generated.ts +6 -0
  148. package/src/modules/accounting/command/deleteCostElement.test.ts +58 -0
  149. package/src/modules/accounting/command/deleteCostElement.ts +33 -0
  150. package/src/modules/accounting/command/deleteInternalOrder.generated.ts +6 -0
  151. package/src/modules/accounting/command/deleteInternalOrder.test.ts +81 -0
  152. package/src/modules/accounting/command/deleteInternalOrder.ts +37 -0
  153. package/src/modules/accounting/command/deleteProfitCenter.generated.ts +6 -0
  154. package/src/modules/accounting/command/deleteProfitCenter.test.ts +68 -0
  155. package/src/modules/accounting/command/deleteProfitCenter.ts +39 -0
  156. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.generated.ts +6 -0
  157. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.test.ts +72 -0
  158. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.ts +61 -0
  159. package/src/modules/accounting/command/executeAllocationCycle.generated.ts +6 -0
  160. package/src/modules/accounting/command/executeAllocationCycle.test.ts +167 -0
  161. package/src/modules/accounting/command/executeAllocationCycle.ts +94 -0
  162. package/src/modules/accounting/command/finalizeVarianceReport.generated.ts +6 -0
  163. package/src/modules/accounting/command/finalizeVarianceReport.test.ts +60 -0
  164. package/src/modules/accounting/command/finalizeVarianceReport.ts +45 -0
  165. package/src/modules/accounting/command/generateVarianceReport.generated.ts +6 -0
  166. package/src/modules/accounting/command/generateVarianceReport.test.ts +386 -0
  167. package/src/modules/accounting/command/generateVarianceReport.ts +219 -0
  168. package/src/modules/accounting/command/invalidateAllocationCycle.generated.ts +6 -0
  169. package/src/modules/accounting/command/invalidateAllocationCycle.test.ts +84 -0
  170. package/src/modules/accounting/command/invalidateAllocationCycle.ts +45 -0
  171. package/src/modules/accounting/command/moveCostCenterHierarchyNode.generated.ts +6 -0
  172. package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +135 -0
  173. package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +81 -0
  174. package/src/modules/accounting/command/postAllocationCycle.generated.ts +6 -0
  175. package/src/modules/accounting/command/postAllocationCycle.test.ts +98 -0
  176. package/src/modules/accounting/command/postAllocationCycle.ts +65 -0
  177. package/src/modules/accounting/command/reactivateCostElement.generated.ts +6 -0
  178. package/src/modules/accounting/command/reactivateCostElement.test.ts +59 -0
  179. package/src/modules/accounting/command/reactivateCostElement.ts +41 -0
  180. package/src/modules/accounting/command/reactivateProfitCenter.generated.ts +6 -0
  181. package/src/modules/accounting/command/reactivateProfitCenter.test.ts +60 -0
  182. package/src/modules/accounting/command/reactivateProfitCenter.ts +42 -0
  183. package/src/modules/accounting/command/recordCommitment.generated.ts +6 -0
  184. package/src/modules/accounting/command/recordCommitment.test.ts +157 -0
  185. package/src/modules/accounting/command/recordCommitment.ts +113 -0
  186. package/src/modules/accounting/command/rejectBudget.generated.ts +6 -0
  187. package/src/modules/accounting/command/rejectBudget.test.ts +105 -0
  188. package/src/modules/accounting/command/rejectBudget.ts +51 -0
  189. package/src/modules/accounting/command/releaseCommitment.generated.ts +6 -0
  190. package/src/modules/accounting/command/releaseCommitment.test.ts +94 -0
  191. package/src/modules/accounting/command/releaseCommitment.ts +51 -0
  192. package/src/modules/accounting/command/releaseInternalOrder.generated.ts +6 -0
  193. package/src/modules/accounting/command/releaseInternalOrder.test.ts +74 -0
  194. package/src/modules/accounting/command/releaseInternalOrder.ts +38 -0
  195. package/src/modules/accounting/command/reverseAllocationCycle.generated.ts +6 -0
  196. package/src/modules/accounting/command/reverseAllocationCycle.test.ts +124 -0
  197. package/src/modules/accounting/command/reverseAllocationCycle.ts +63 -0
  198. package/src/modules/accounting/command/submitBudget.generated.ts +6 -0
  199. package/src/modules/accounting/command/submitBudget.test.ts +60 -0
  200. package/src/modules/accounting/command/submitBudget.ts +51 -0
  201. package/src/modules/accounting/command/technicallyCompleteInternalOrder.generated.ts +6 -0
  202. package/src/modules/accounting/command/technicallyCompleteInternalOrder.test.ts +74 -0
  203. package/src/modules/accounting/command/technicallyCompleteInternalOrder.ts +42 -0
  204. package/src/modules/accounting/command/updateAllocationCycle.generated.ts +6 -0
  205. package/src/modules/accounting/command/updateAllocationCycle.test.ts +112 -0
  206. package/src/modules/accounting/command/updateAllocationCycle.ts +41 -0
  207. package/src/modules/accounting/command/updateBudget.generated.ts +6 -0
  208. package/src/modules/accounting/command/updateBudget.test.ts +112 -0
  209. package/src/modules/accounting/command/updateBudget.ts +44 -0
  210. package/src/modules/accounting/command/updateCostCenter.generated.ts +6 -0
  211. package/src/modules/accounting/command/updateCostCenter.test.ts +105 -0
  212. package/src/modules/accounting/command/updateCostCenter.ts +79 -0
  213. package/src/modules/accounting/command/updateCostElement.generated.ts +6 -0
  214. package/src/modules/accounting/command/updateCostElement.test.ts +265 -0
  215. package/src/modules/accounting/command/updateCostElement.ts +158 -0
  216. package/src/modules/accounting/command/updateInternalOrder.generated.ts +6 -0
  217. package/src/modules/accounting/command/updateInternalOrder.test.ts +209 -0
  218. package/src/modules/accounting/command/updateInternalOrder.ts +88 -0
  219. package/src/modules/accounting/command/updateProfitCenter.generated.ts +6 -0
  220. package/src/modules/accounting/command/updateProfitCenter.test.ts +162 -0
  221. package/src/modules/accounting/command/updateProfitCenter.ts +73 -0
  222. package/src/modules/accounting/command/validateAllocationCycle.generated.ts +6 -0
  223. package/src/modules/accounting/command/validateAllocationCycle.test.ts +141 -0
  224. package/src/modules/accounting/command/validateAllocationCycle.ts +80 -0
  225. package/src/modules/accounting/db/allocationCycle.ts +59 -0
  226. package/src/modules/accounting/db/allocationResult.ts +58 -0
  227. package/src/modules/accounting/db/allocationRule.ts +48 -0
  228. package/src/modules/accounting/db/budget.ts +84 -0
  229. package/src/modules/accounting/db/budgetLineItem.ts +64 -0
  230. package/src/modules/accounting/db/commitment.ts +60 -0
  231. package/src/modules/accounting/db/costCenter.ts +73 -0
  232. package/src/modules/accounting/db/costCenterHierarchy.ts +37 -0
  233. package/src/modules/accounting/db/costCenterHierarchyNode.ts +48 -0
  234. package/src/modules/accounting/db/costElement.ts +56 -0
  235. package/src/modules/accounting/db/internalOrder.ts +69 -0
  236. package/src/modules/accounting/db/planVersion.ts +47 -0
  237. package/src/modules/accounting/db/profitCenter.ts +52 -0
  238. package/src/modules/accounting/db/profitCenterHierarchy.ts +36 -0
  239. package/src/modules/accounting/db/profitCenterHierarchyAssignment.ts +62 -0
  240. package/src/modules/accounting/db/profitCenterHierarchyNode.ts +48 -0
  241. package/src/modules/accounting/db/varianceReport.ts +54 -0
  242. package/src/modules/accounting/db/varianceReportLine.ts +62 -0
  243. package/src/modules/accounting/docs/commands/ActivateBudget.md +54 -0
  244. package/src/modules/accounting/docs/commands/ActivateCostElement.md +43 -0
  245. package/src/modules/accounting/docs/commands/ActivateProfitCenter.md +43 -0
  246. package/src/modules/accounting/docs/commands/ApproveBudget.md +46 -0
  247. package/src/modules/accounting/docs/commands/AssignCostCenterToHierarchyNode.md +46 -0
  248. package/src/modules/accounting/docs/commands/AssignProfitCenterToHierarchyNode.md +47 -0
  249. package/src/modules/accounting/docs/commands/CloseBudget.md +47 -0
  250. package/src/modules/accounting/docs/commands/CloseInternalOrder.md +45 -0
  251. package/src/modules/accounting/docs/commands/ConsumeCommitment.md +53 -0
  252. package/src/modules/accounting/docs/commands/CreateAllocationCycle.md +55 -0
  253. package/src/modules/accounting/docs/commands/CreateAllocationRule.md +60 -0
  254. package/src/modules/accounting/docs/commands/CreateBudget.md +65 -0
  255. package/src/modules/accounting/docs/commands/CreateBudgetLineItem.md +66 -0
  256. package/src/modules/accounting/docs/commands/CreateCostCenter.md +64 -0
  257. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchy.md +45 -0
  258. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchyNode.md +61 -0
  259. package/src/modules/accounting/docs/commands/CreateCostElement.md +91 -0
  260. package/src/modules/accounting/docs/commands/CreateInternalOrder.md +72 -0
  261. package/src/modules/accounting/docs/commands/CreatePlanVersion.md +59 -0
  262. package/src/modules/accounting/docs/commands/CreateProfitCenter.md +63 -0
  263. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchy.md +45 -0
  264. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchyNode.md +60 -0
  265. package/src/modules/accounting/docs/commands/DeactivateCostElement.md +43 -0
  266. package/src/modules/accounting/docs/commands/DeactivateProfitCenter.md +44 -0
  267. package/src/modules/accounting/docs/commands/DeleteAllocationCycle.md +46 -0
  268. package/src/modules/accounting/docs/commands/DeleteAllocationRule.md +45 -0
  269. package/src/modules/accounting/docs/commands/DeleteBudget.md +46 -0
  270. package/src/modules/accounting/docs/commands/DeleteBudgetLineItem.md +45 -0
  271. package/src/modules/accounting/docs/commands/DeleteCostCenter.md +50 -0
  272. package/src/modules/accounting/docs/commands/DeleteCostCenterHierarchyNode.md +45 -0
  273. package/src/modules/accounting/docs/commands/DeleteCostElement.md +43 -0
  274. package/src/modules/accounting/docs/commands/DeleteInternalOrder.md +45 -0
  275. package/src/modules/accounting/docs/commands/DeleteProfitCenter.md +46 -0
  276. package/src/modules/accounting/docs/commands/DeleteProfitCenterHierarchyNode.md +46 -0
  277. package/src/modules/accounting/docs/commands/ExecuteAllocationCycle.md +54 -0
  278. package/src/modules/accounting/docs/commands/FinalizeVarianceReport.md +44 -0
  279. package/src/modules/accounting/docs/commands/GenerateVarianceReport.md +83 -0
  280. package/src/modules/accounting/docs/commands/InvalidateAllocationCycle.md +45 -0
  281. package/src/modules/accounting/docs/commands/MoveCostCenterHierarchyNode.md +51 -0
  282. package/src/modules/accounting/docs/commands/PostAllocationCycle.md +58 -0
  283. package/src/modules/accounting/docs/commands/ReactivateCostElement.md +43 -0
  284. package/src/modules/accounting/docs/commands/ReactivateProfitCenter.md +43 -0
  285. package/src/modules/accounting/docs/commands/RecordCommitment.md +60 -0
  286. package/src/modules/accounting/docs/commands/RejectBudget.md +49 -0
  287. package/src/modules/accounting/docs/commands/ReleaseCommitment.md +45 -0
  288. package/src/modules/accounting/docs/commands/ReleaseInternalOrder.md +44 -0
  289. package/src/modules/accounting/docs/commands/ReverseAllocationCycle.md +55 -0
  290. package/src/modules/accounting/docs/commands/SubmitBudget.md +47 -0
  291. package/src/modules/accounting/docs/commands/TechnicallyCompleteInternalOrder.md +44 -0
  292. package/src/modules/accounting/docs/commands/UpdateAllocationCycle.md +45 -0
  293. package/src/modules/accounting/docs/commands/UpdateBudget.md +47 -0
  294. package/src/modules/accounting/docs/commands/UpdateCostCenter.md +50 -0
  295. package/src/modules/accounting/docs/commands/UpdateCostElement.md +82 -0
  296. package/src/modules/accounting/docs/commands/UpdateInternalOrder.md +62 -0
  297. package/src/modules/accounting/docs/commands/UpdateProfitCenter.md +56 -0
  298. package/src/modules/accounting/docs/commands/ValidateAllocationCycle.md +57 -0
  299. package/src/modules/accounting/docs/features/budget-management.md +147 -0
  300. package/src/modules/accounting/docs/features/cost-allocation.md +129 -0
  301. package/src/modules/accounting/docs/features/cost-center-management.md +118 -0
  302. package/src/modules/accounting/docs/features/cost-element-management.md +114 -0
  303. package/src/modules/accounting/docs/features/internal-order-management.md +111 -0
  304. package/src/modules/accounting/docs/features/profit-center-management.md +120 -0
  305. package/src/modules/accounting/docs/features/variance-analysis.md +130 -0
  306. package/src/modules/accounting/docs/models/AllocationCycle.md +81 -0
  307. package/src/modules/accounting/docs/models/AllocationResult.md +37 -0
  308. package/src/modules/accounting/docs/models/AllocationRule.md +41 -0
  309. package/src/modules/accounting/docs/models/Budget.md +77 -0
  310. package/src/modules/accounting/docs/models/BudgetLineItem.md +40 -0
  311. package/src/modules/accounting/docs/models/Commitment.md +45 -0
  312. package/src/modules/accounting/docs/models/CostCenter.md +51 -0
  313. package/src/modules/accounting/docs/models/CostCenterHierarchy.md +38 -0
  314. package/src/modules/accounting/docs/models/CostCenterHierarchyNode.md +41 -0
  315. package/src/modules/accounting/docs/models/CostElement.md +66 -0
  316. package/src/modules/accounting/docs/models/InternalOrder.md +67 -0
  317. package/src/modules/accounting/docs/models/PlanVersion.md +36 -0
  318. package/src/modules/accounting/docs/models/ProfitCenter.md +66 -0
  319. package/src/modules/accounting/docs/models/ProfitCenterHierarchy.md +36 -0
  320. package/src/modules/accounting/docs/models/ProfitCenterHierarchyAssignment.md +36 -0
  321. package/src/modules/accounting/docs/models/ProfitCenterHierarchyNode.md +39 -0
  322. package/src/modules/accounting/docs/models/VarianceReport.md +58 -0
  323. package/src/modules/accounting/docs/models/VarianceReportLine.md +43 -0
  324. package/src/modules/accounting/docs/queries/CalculateBudgetAvailability.md +64 -0
  325. package/src/modules/accounting/docs/queries/GetAllocationCycle.md +43 -0
  326. package/src/modules/accounting/docs/queries/GetBudget.md +42 -0
  327. package/src/modules/accounting/docs/queries/GetCostCenter.md +38 -0
  328. package/src/modules/accounting/docs/queries/GetCostCenterHierarchy.md +45 -0
  329. package/src/modules/accounting/docs/queries/GetCostElement.md +39 -0
  330. package/src/modules/accounting/docs/queries/GetInternalOrder.md +42 -0
  331. package/src/modules/accounting/docs/queries/GetProfitCenter.md +38 -0
  332. package/src/modules/accounting/docs/queries/GetProfitCenterHierarchy.md +46 -0
  333. package/src/modules/accounting/docs/queries/GetVarianceReport.md +45 -0
  334. package/src/modules/accounting/docs/queries/ListAllocationCycles.md +63 -0
  335. package/src/modules/accounting/docs/queries/ListBudgets.md +70 -0
  336. package/src/modules/accounting/docs/queries/ListCostCenters.md +55 -0
  337. package/src/modules/accounting/docs/queries/ListCostElements.md +63 -0
  338. package/src/modules/accounting/docs/queries/ListInternalOrders.md +62 -0
  339. package/src/modules/accounting/docs/queries/ListProfitCenters.md +49 -0
  340. package/src/modules/accounting/generated/enums.ts +110 -0
  341. package/src/modules/accounting/generated/kysely-tailordb.ts +302 -0
  342. package/src/modules/accounting/index.ts +2 -0
  343. package/src/modules/accounting/lib/_db_deps.ts +70 -0
  344. package/src/modules/accounting/lib/actualAmounts.ts +93 -0
  345. package/src/modules/accounting/lib/allocationPosting.ts +152 -0
  346. package/src/modules/accounting/lib/errors.generated.ts +432 -0
  347. package/src/modules/accounting/lib/permissions.generated.ts +61 -0
  348. package/src/modules/accounting/lib/types.ts +114 -0
  349. package/src/modules/accounting/module.ts +428 -0
  350. package/src/modules/accounting/permissions.ts +3 -0
  351. package/src/modules/accounting/query/calculateBudgetAvailability.generated.ts +5 -0
  352. package/src/modules/accounting/query/calculateBudgetAvailability.test.ts +229 -0
  353. package/src/modules/accounting/query/calculateBudgetAvailability.ts +147 -0
  354. package/src/modules/accounting/query/getAllocationCycle.generated.ts +5 -0
  355. package/src/modules/accounting/query/getAllocationCycle.test.ts +94 -0
  356. package/src/modules/accounting/query/getAllocationCycle.ts +37 -0
  357. package/src/modules/accounting/query/getBudget.generated.ts +5 -0
  358. package/src/modules/accounting/query/getBudget.test.ts +80 -0
  359. package/src/modules/accounting/query/getBudget.ts +31 -0
  360. package/src/modules/accounting/query/getCostCenter.generated.ts +5 -0
  361. package/src/modules/accounting/query/getCostCenter.test.ts +50 -0
  362. package/src/modules/accounting/query/getCostCenter.ts +33 -0
  363. package/src/modules/accounting/query/getCostCenterHierarchy.generated.ts +5 -0
  364. package/src/modules/accounting/query/getCostCenterHierarchy.test.ts +100 -0
  365. package/src/modules/accounting/query/getCostCenterHierarchy.ts +80 -0
  366. package/src/modules/accounting/query/getCostElement.generated.ts +5 -0
  367. package/src/modules/accounting/query/getCostElement.test.ts +57 -0
  368. package/src/modules/accounting/query/getCostElement.ts +21 -0
  369. package/src/modules/accounting/query/getInternalOrder.generated.ts +5 -0
  370. package/src/modules/accounting/query/getInternalOrder.test.ts +73 -0
  371. package/src/modules/accounting/query/getInternalOrder.ts +21 -0
  372. package/src/modules/accounting/query/getProfitCenter.generated.ts +5 -0
  373. package/src/modules/accounting/query/getProfitCenter.test.ts +65 -0
  374. package/src/modules/accounting/query/getProfitCenter.ts +31 -0
  375. package/src/modules/accounting/query/getProfitCenterHierarchy.generated.ts +5 -0
  376. package/src/modules/accounting/query/getProfitCenterHierarchy.test.ts +97 -0
  377. package/src/modules/accounting/query/getProfitCenterHierarchy.ts +87 -0
  378. package/src/modules/accounting/query/getVarianceReport.generated.ts +5 -0
  379. package/src/modules/accounting/query/getVarianceReport.test.ts +108 -0
  380. package/src/modules/accounting/query/getVarianceReport.ts +31 -0
  381. package/src/modules/accounting/query/listAllocationCycles.generated.ts +5 -0
  382. package/src/modules/accounting/query/listAllocationCycles.test.ts +152 -0
  383. package/src/modules/accounting/query/listAllocationCycles.ts +96 -0
  384. package/src/modules/accounting/query/listBudgets.generated.ts +5 -0
  385. package/src/modules/accounting/query/listBudgets.test.ts +150 -0
  386. package/src/modules/accounting/query/listBudgets.ts +85 -0
  387. package/src/modules/accounting/query/listCostCenters.generated.ts +5 -0
  388. package/src/modules/accounting/query/listCostCenters.test.ts +111 -0
  389. package/src/modules/accounting/query/listCostCenters.ts +71 -0
  390. package/src/modules/accounting/query/listCostElements.generated.ts +5 -0
  391. package/src/modules/accounting/query/listCostElements.test.ts +138 -0
  392. package/src/modules/accounting/query/listCostElements.ts +105 -0
  393. package/src/modules/accounting/query/listInternalOrders.generated.ts +5 -0
  394. package/src/modules/accounting/query/listInternalOrders.test.ts +129 -0
  395. package/src/modules/accounting/query/listInternalOrders.ts +94 -0
  396. package/src/modules/accounting/query/listProfitCenters.generated.ts +5 -0
  397. package/src/modules/accounting/query/listProfitCenters.test.ts +94 -0
  398. package/src/modules/accounting/query/listProfitCenters.ts +56 -0
  399. package/src/modules/accounting/seed/index.ts +19 -0
  400. package/src/modules/accounting/tailor.config.ts +13 -0
  401. package/src/modules/accounting/testing/commandTestUtils.ts +35 -0
  402. package/src/modules/accounting/testing/fixtures.ts +502 -0
  403. package/src/modules/audit/command/logAuditEvent.ts +43 -38
  404. package/src/modules/audit/command/updateAuditPolicy.ts +2 -2
  405. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +1 -1
  406. package/src/modules/audit/module.ts +4 -0
  407. package/src/modules/business-partner/command/updateContactPerson.ts +3 -4
  408. package/src/modules/business-partner/command/updatePartner.ts +13 -6
  409. package/src/modules/business-partner/command/updatePartnerAddress.ts +13 -6
  410. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +3 -4
  411. package/src/modules/business-partner/command/updatePartnerIdentification.ts +3 -4
  412. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +3 -3
  413. package/src/modules/business-partner/docs/commands/UpdatePartner.md +2 -2
  414. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +2 -2
  415. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +2 -2
  416. package/src/modules/coa-management/command/updateAccount.ts +3 -3
  417. package/src/modules/coa-management/command/updateAccountGroup.test.ts +22 -0
  418. package/src/modules/coa-management/command/updateAccountGroup.ts +30 -18
  419. package/src/modules/coa-management/command/updateChartOfAccounts.ts +3 -4
  420. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +4 -3
  421. package/src/modules/finance-ledger/README.md +50 -0
  422. package/src/modules/finance-ledger/command/addJournalLine.generated.ts +6 -0
  423. package/src/modules/finance-ledger/command/addJournalLine.test.ts +438 -0
  424. package/src/modules/finance-ledger/command/addJournalLine.ts +122 -0
  425. package/src/modules/finance-ledger/command/approveAndLockPeriod.generated.ts +6 -0
  426. package/src/modules/finance-ledger/command/approveAndLockPeriod.test.ts +107 -0
  427. package/src/modules/finance-ledger/command/approveAndLockPeriod.ts +72 -0
  428. package/src/modules/finance-ledger/command/beginClose.generated.ts +6 -0
  429. package/src/modules/finance-ledger/command/beginClose.test.ts +106 -0
  430. package/src/modules/finance-ledger/command/beginClose.ts +58 -0
  431. package/src/modules/finance-ledger/command/closePeriod.generated.ts +6 -0
  432. package/src/modules/finance-ledger/command/closePeriod.test.ts +87 -0
  433. package/src/modules/finance-ledger/command/closePeriod.ts +44 -0
  434. package/src/modules/finance-ledger/command/createAccountingPeriod.generated.ts +6 -0
  435. package/src/modules/finance-ledger/command/createAccountingPeriod.test.ts +425 -0
  436. package/src/modules/finance-ledger/command/createAccountingPeriod.ts +133 -0
  437. package/src/modules/finance-ledger/command/createFiscalYear.generated.ts +6 -0
  438. package/src/modules/finance-ledger/command/createFiscalYear.test.ts +197 -0
  439. package/src/modules/finance-ledger/command/createFiscalYear.ts +70 -0
  440. package/src/modules/finance-ledger/command/createJournalEntry.generated.ts +6 -0
  441. package/src/modules/finance-ledger/command/createJournalEntry.test.ts +261 -0
  442. package/src/modules/finance-ledger/command/createJournalEntry.ts +121 -0
  443. package/src/modules/finance-ledger/command/deleteAccountingPeriod.generated.ts +6 -0
  444. package/src/modules/finance-ledger/command/deleteAccountingPeriod.test.ts +71 -0
  445. package/src/modules/finance-ledger/command/deleteAccountingPeriod.ts +55 -0
  446. package/src/modules/finance-ledger/command/deleteFiscalYear.generated.ts +6 -0
  447. package/src/modules/finance-ledger/command/deleteFiscalYear.test.ts +38 -0
  448. package/src/modules/finance-ledger/command/deleteFiscalYear.ts +34 -0
  449. package/src/modules/finance-ledger/command/deleteJournalEntry.generated.ts +6 -0
  450. package/src/modules/finance-ledger/command/deleteJournalEntry.test.ts +58 -0
  451. package/src/modules/finance-ledger/command/deleteJournalEntry.ts +43 -0
  452. package/src/modules/finance-ledger/command/executeYearEndClose.generated.ts +6 -0
  453. package/src/modules/finance-ledger/command/executeYearEndClose.test.ts +239 -0
  454. package/src/modules/finance-ledger/command/executeYearEndClose.ts +415 -0
  455. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.generated.ts +6 -0
  456. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.test.ts +102 -0
  457. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.ts +76 -0
  458. package/src/modules/finance-ledger/command/finalizeFinancialStatement.generated.ts +6 -0
  459. package/src/modules/finance-ledger/command/finalizeFinancialStatement.test.ts +73 -0
  460. package/src/modules/finance-ledger/command/finalizeFinancialStatement.ts +73 -0
  461. package/src/modules/finance-ledger/command/generateFinancialStatement.generated.ts +6 -0
  462. package/src/modules/finance-ledger/command/generateFinancialStatement.test.ts +311 -0
  463. package/src/modules/finance-ledger/command/generateFinancialStatement.ts +275 -0
  464. package/src/modules/finance-ledger/command/generatePreliminaryStatements.generated.ts +6 -0
  465. package/src/modules/finance-ledger/command/generatePreliminaryStatements.test.ts +152 -0
  466. package/src/modules/finance-ledger/command/generatePreliminaryStatements.ts +140 -0
  467. package/src/modules/finance-ledger/command/generateTrialBalance.generated.ts +6 -0
  468. package/src/modules/finance-ledger/command/generateTrialBalance.test.ts +439 -0
  469. package/src/modules/finance-ledger/command/generateTrialBalance.ts +268 -0
  470. package/src/modules/finance-ledger/command/initiatePeriodClose.generated.ts +6 -0
  471. package/src/modules/finance-ledger/command/initiatePeriodClose.test.ts +153 -0
  472. package/src/modules/finance-ledger/command/initiatePeriodClose.ts +84 -0
  473. package/src/modules/finance-ledger/command/openForAdvanceEntry.generated.ts +6 -0
  474. package/src/modules/finance-ledger/command/openForAdvanceEntry.test.ts +87 -0
  475. package/src/modules/finance-ledger/command/openForAdvanceEntry.ts +44 -0
  476. package/src/modules/finance-ledger/command/openPeriod.generated.ts +6 -0
  477. package/src/modules/finance-ledger/command/openPeriod.test.ts +90 -0
  478. package/src/modules/finance-ledger/command/openPeriod.ts +44 -0
  479. package/src/modules/finance-ledger/command/permanentlyClosePeriod.generated.ts +6 -0
  480. package/src/modules/finance-ledger/command/permanentlyClosePeriod.test.ts +87 -0
  481. package/src/modules/finance-ledger/command/permanentlyClosePeriod.ts +48 -0
  482. package/src/modules/finance-ledger/command/postAdjustingEntries.generated.ts +6 -0
  483. package/src/modules/finance-ledger/command/postAdjustingEntries.test.ts +392 -0
  484. package/src/modules/finance-ledger/command/postAdjustingEntries.ts +156 -0
  485. package/src/modules/finance-ledger/command/postJournalEntry.generated.ts +6 -0
  486. package/src/modules/finance-ledger/command/postJournalEntry.test.ts +346 -0
  487. package/src/modules/finance-ledger/command/postJournalEntry.ts +160 -0
  488. package/src/modules/finance-ledger/command/processInventoryHandoff.generated.ts +6 -0
  489. package/src/modules/finance-ledger/command/processInventoryHandoff.test.ts +211 -0
  490. package/src/modules/finance-ledger/command/processInventoryHandoff.ts +133 -0
  491. package/src/modules/finance-ledger/command/processManufacturingHandoff.generated.ts +6 -0
  492. package/src/modules/finance-ledger/command/processManufacturingHandoff.test.ts +221 -0
  493. package/src/modules/finance-ledger/command/processManufacturingHandoff.ts +133 -0
  494. package/src/modules/finance-ledger/command/processPurchaseHandoff.generated.ts +6 -0
  495. package/src/modules/finance-ledger/command/processPurchaseHandoff.test.ts +222 -0
  496. package/src/modules/finance-ledger/command/processPurchaseHandoff.ts +133 -0
  497. package/src/modules/finance-ledger/command/processSalesHandoff.generated.ts +6 -0
  498. package/src/modules/finance-ledger/command/processSalesHandoff.test.ts +257 -0
  499. package/src/modules/finance-ledger/command/processSalesHandoff.ts +135 -0
  500. package/src/modules/finance-ledger/command/regenerateFinancialStatement.generated.ts +6 -0
  501. package/src/modules/finance-ledger/command/regenerateFinancialStatement.test.ts +129 -0
  502. package/src/modules/finance-ledger/command/regenerateFinancialStatement.ts +186 -0
  503. package/src/modules/finance-ledger/command/removeJournalLine.generated.ts +6 -0
  504. package/src/modules/finance-ledger/command/removeJournalLine.test.ts +65 -0
  505. package/src/modules/finance-ledger/command/removeJournalLine.ts +39 -0
  506. package/src/modules/finance-ledger/command/reopenPeriod.generated.ts +6 -0
  507. package/src/modules/finance-ledger/command/reopenPeriod.test.ts +87 -0
  508. package/src/modules/finance-ledger/command/reopenPeriod.ts +44 -0
  509. package/src/modules/finance-ledger/command/reverseJournalEntry.generated.ts +6 -0
  510. package/src/modules/finance-ledger/command/reverseJournalEntry.test.ts +337 -0
  511. package/src/modules/finance-ledger/command/reverseJournalEntry.ts +140 -0
  512. package/src/modules/finance-ledger/command/revertSoftLock.generated.ts +6 -0
  513. package/src/modules/finance-ledger/command/revertSoftLock.test.ts +96 -0
  514. package/src/modules/finance-ledger/command/revertSoftLock.ts +67 -0
  515. package/src/modules/finance-ledger/command/updateFiscalYear.generated.ts +6 -0
  516. package/src/modules/finance-ledger/command/updateFiscalYear.test.ts +138 -0
  517. package/src/modules/finance-ledger/command/updateFiscalYear.ts +84 -0
  518. package/src/modules/finance-ledger/command/updateJournalEntry.generated.ts +6 -0
  519. package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +178 -0
  520. package/src/modules/finance-ledger/command/updateJournalEntry.ts +78 -0
  521. package/src/modules/finance-ledger/command/updateJournalLine.generated.ts +6 -0
  522. package/src/modules/finance-ledger/command/updateJournalLine.test.ts +385 -0
  523. package/src/modules/finance-ledger/command/updateJournalLine.ts +154 -0
  524. package/src/modules/finance-ledger/command/verifySubledgerTransfers.generated.ts +6 -0
  525. package/src/modules/finance-ledger/command/verifySubledgerTransfers.test.ts +201 -0
  526. package/src/modules/finance-ledger/command/verifySubledgerTransfers.ts +113 -0
  527. package/src/modules/finance-ledger/command/verifyTrialBalance.generated.ts +6 -0
  528. package/src/modules/finance-ledger/command/verifyTrialBalance.test.ts +136 -0
  529. package/src/modules/finance-ledger/command/verifyTrialBalance.ts +97 -0
  530. package/src/modules/finance-ledger/db/accountingPeriod.ts +58 -0
  531. package/src/modules/finance-ledger/db/financialStatement.ts +92 -0
  532. package/src/modules/finance-ledger/db/financialStatementLineItem.ts +76 -0
  533. package/src/modules/finance-ledger/db/fiscalYear.ts +41 -0
  534. package/src/modules/finance-ledger/db/journalEntry.ts +101 -0
  535. package/src/modules/finance-ledger/db/journalLine.ts +64 -0
  536. package/src/modules/finance-ledger/db/periodClose.ts +97 -0
  537. package/src/modules/finance-ledger/db/trialBalance.ts +63 -0
  538. package/src/modules/finance-ledger/db/trialBalanceLine.ts +63 -0
  539. package/src/modules/finance-ledger/docs/commands/AddJournalLine.md +74 -0
  540. package/src/modules/finance-ledger/docs/commands/ApproveAndLockPeriod.md +53 -0
  541. package/src/modules/finance-ledger/docs/commands/BeginClose.md +47 -0
  542. package/src/modules/finance-ledger/docs/commands/ClosePeriod.md +45 -0
  543. package/src/modules/finance-ledger/docs/commands/CreateAccountingPeriod.md +69 -0
  544. package/src/modules/finance-ledger/docs/commands/CreateFiscalYear.md +56 -0
  545. package/src/modules/finance-ledger/docs/commands/CreateJournalEntry.md +63 -0
  546. package/src/modules/finance-ledger/docs/commands/DeleteAccountingPeriod.md +46 -0
  547. package/src/modules/finance-ledger/docs/commands/DeleteFiscalYear.md +40 -0
  548. package/src/modules/finance-ledger/docs/commands/DeleteJournalEntry.md +44 -0
  549. package/src/modules/finance-ledger/docs/commands/ExecuteYearEndClose.md +81 -0
  550. package/src/modules/finance-ledger/docs/commands/FinalCloseAndLockPeriod.md +49 -0
  551. package/src/modules/finance-ledger/docs/commands/FinalizeFinancialStatement.md +43 -0
  552. package/src/modules/finance-ledger/docs/commands/GenerateFinancialStatement.md +86 -0
  553. package/src/modules/finance-ledger/docs/commands/GeneratePreliminaryStatements.md +53 -0
  554. package/src/modules/finance-ledger/docs/commands/GenerateTrialBalance.md +75 -0
  555. package/src/modules/finance-ledger/docs/commands/InitiatePeriodClose.md +58 -0
  556. package/src/modules/finance-ledger/docs/commands/OpenForAdvanceEntry.md +44 -0
  557. package/src/modules/finance-ledger/docs/commands/OpenPeriod.md +45 -0
  558. package/src/modules/finance-ledger/docs/commands/PermanentlyClosePeriod.md +45 -0
  559. package/src/modules/finance-ledger/docs/commands/PostAdjustingEntries.md +61 -0
  560. package/src/modules/finance-ledger/docs/commands/PostJournalEntry.md +81 -0
  561. package/src/modules/finance-ledger/docs/commands/ProcessInventoryHandoff.md +72 -0
  562. package/src/modules/finance-ledger/docs/commands/ProcessManufacturingHandoff.md +68 -0
  563. package/src/modules/finance-ledger/docs/commands/ProcessPurchaseHandoff.md +68 -0
  564. package/src/modules/finance-ledger/docs/commands/ProcessSalesHandoff.md +71 -0
  565. package/src/modules/finance-ledger/docs/commands/RegenerateFinancialStatement.md +60 -0
  566. package/src/modules/finance-ledger/docs/commands/RemoveJournalLine.md +42 -0
  567. package/src/modules/finance-ledger/docs/commands/ReopenPeriod.md +45 -0
  568. package/src/modules/finance-ledger/docs/commands/ReverseJournalEntry.md +62 -0
  569. package/src/modules/finance-ledger/docs/commands/RevertSoftLock.md +49 -0
  570. package/src/modules/finance-ledger/docs/commands/UpdateFiscalYear.md +60 -0
  571. package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +47 -0
  572. package/src/modules/finance-ledger/docs/commands/UpdateJournalLine.md +61 -0
  573. package/src/modules/finance-ledger/docs/commands/VerifySubledgerTransfers.md +59 -0
  574. package/src/modules/finance-ledger/docs/commands/VerifyTrialBalance.md +53 -0
  575. package/src/modules/finance-ledger/docs/features/accounting-period-management.md +110 -0
  576. package/src/modules/finance-ledger/docs/features/financial-statement-generation.md +115 -0
  577. package/src/modules/finance-ledger/docs/features/journal-entry-management.md +138 -0
  578. package/src/modules/finance-ledger/docs/features/period-end-close.md +102 -0
  579. package/src/modules/finance-ledger/docs/features/subledger-integration.md +141 -0
  580. package/src/modules/finance-ledger/docs/features/trial-balance.md +99 -0
  581. package/src/modules/finance-ledger/docs/features/year-end-close.md +84 -0
  582. package/src/modules/finance-ledger/docs/models/AccountingPeriod.md +71 -0
  583. package/src/modules/finance-ledger/docs/models/FinancialStatement.md +76 -0
  584. package/src/modules/finance-ledger/docs/models/FinancialStatementLineItem.md +41 -0
  585. package/src/modules/finance-ledger/docs/models/FiscalYear.md +41 -0
  586. package/src/modules/finance-ledger/docs/models/JournalEntry.md +80 -0
  587. package/src/modules/finance-ledger/docs/models/JournalLine.md +47 -0
  588. package/src/modules/finance-ledger/docs/models/PeriodClose.md +83 -0
  589. package/src/modules/finance-ledger/docs/models/TrialBalance.md +56 -0
  590. package/src/modules/finance-ledger/docs/models/TrialBalanceLine.md +37 -0
  591. package/src/modules/finance-ledger/docs/queries/GetAccountingPeriod.md +35 -0
  592. package/src/modules/finance-ledger/docs/queries/GetFinancialStatement.md +38 -0
  593. package/src/modules/finance-ledger/docs/queries/GetFiscalYear.md +35 -0
  594. package/src/modules/finance-ledger/docs/queries/GetJournalEntry.md +37 -0
  595. package/src/modules/finance-ledger/docs/queries/GetPeriodByDate.md +38 -0
  596. package/src/modules/finance-ledger/docs/queries/GetPeriodClose.md +36 -0
  597. package/src/modules/finance-ledger/docs/queries/GetSubledgerTransferStatus.md +45 -0
  598. package/src/modules/finance-ledger/docs/queries/GetTrialBalance.md +38 -0
  599. package/src/modules/finance-ledger/docs/queries/ListAccountingPeriods.md +46 -0
  600. package/src/modules/finance-ledger/docs/queries/ListFinancialStatements.md +46 -0
  601. package/src/modules/finance-ledger/docs/queries/ListFiscalYears.md +42 -0
  602. package/src/modules/finance-ledger/docs/queries/ListJournalEntries.md +48 -0
  603. package/src/modules/finance-ledger/docs/queries/ListPeriodCloses.md +46 -0
  604. package/src/modules/finance-ledger/docs/queries/ListTrialBalances.md +51 -0
  605. package/src/modules/finance-ledger/generated/enums.ts +109 -0
  606. package/src/modules/finance-ledger/generated/kysely-tailordb.ts +202 -0
  607. package/src/modules/finance-ledger/index.ts +2 -0
  608. package/src/modules/finance-ledger/lib/_db_deps.ts +56 -0
  609. package/src/modules/finance-ledger/lib/errors.generated.ts +332 -0
  610. package/src/modules/finance-ledger/lib/permissions.generated.ts +41 -0
  611. package/src/modules/finance-ledger/lib/types.ts +66 -0
  612. package/src/modules/finance-ledger/module.ts +262 -0
  613. package/src/modules/finance-ledger/package.json +26 -0
  614. package/src/modules/finance-ledger/permissions.ts +3 -0
  615. package/src/modules/finance-ledger/query/getAccountingPeriod.generated.ts +5 -0
  616. package/src/modules/finance-ledger/query/getAccountingPeriod.test.ts +31 -0
  617. package/src/modules/finance-ledger/query/getAccountingPeriod.ts +21 -0
  618. package/src/modules/finance-ledger/query/getFinancialStatement.generated.ts +5 -0
  619. package/src/modules/finance-ledger/query/getFinancialStatement.test.ts +35 -0
  620. package/src/modules/finance-ledger/query/getFinancialStatement.ts +29 -0
  621. package/src/modules/finance-ledger/query/getFiscalYear.generated.ts +5 -0
  622. package/src/modules/finance-ledger/query/getFiscalYear.test.ts +31 -0
  623. package/src/modules/finance-ledger/query/getFiscalYear.ts +21 -0
  624. package/src/modules/finance-ledger/query/getJournalEntry.generated.ts +5 -0
  625. package/src/modules/finance-ledger/query/getJournalEntry.test.ts +35 -0
  626. package/src/modules/finance-ledger/query/getJournalEntry.ts +29 -0
  627. package/src/modules/finance-ledger/query/getPeriodByDate.generated.ts +5 -0
  628. package/src/modules/finance-ledger/query/getPeriodByDate.test.ts +53 -0
  629. package/src/modules/finance-ledger/query/getPeriodByDate.ts +27 -0
  630. package/src/modules/finance-ledger/query/getPeriodClose.generated.ts +5 -0
  631. package/src/modules/finance-ledger/query/getPeriodClose.test.ts +31 -0
  632. package/src/modules/finance-ledger/query/getPeriodClose.ts +21 -0
  633. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.generated.ts +5 -0
  634. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.test.ts +101 -0
  635. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.ts +68 -0
  636. package/src/modules/finance-ledger/query/getTrialBalance.generated.ts +5 -0
  637. package/src/modules/finance-ledger/query/getTrialBalance.test.ts +33 -0
  638. package/src/modules/finance-ledger/query/getTrialBalance.ts +30 -0
  639. package/src/modules/finance-ledger/query/listAccountingPeriods.generated.ts +5 -0
  640. package/src/modules/finance-ledger/query/listAccountingPeriods.test.ts +81 -0
  641. package/src/modules/finance-ledger/query/listAccountingPeriods.ts +61 -0
  642. package/src/modules/finance-ledger/query/listFinancialStatements.generated.ts +5 -0
  643. package/src/modules/finance-ledger/query/listFinancialStatements.test.ts +76 -0
  644. package/src/modules/finance-ledger/query/listFinancialStatements.ts +62 -0
  645. package/src/modules/finance-ledger/query/listFiscalYears.generated.ts +5 -0
  646. package/src/modules/finance-ledger/query/listFiscalYears.test.ts +63 -0
  647. package/src/modules/finance-ledger/query/listFiscalYears.ts +45 -0
  648. package/src/modules/finance-ledger/query/listJournalEntries.generated.ts +5 -0
  649. package/src/modules/finance-ledger/query/listJournalEntries.test.ts +91 -0
  650. package/src/modules/finance-ledger/query/listJournalEntries.ts +64 -0
  651. package/src/modules/finance-ledger/query/listPeriodCloses.generated.ts +5 -0
  652. package/src/modules/finance-ledger/query/listPeriodCloses.test.ts +63 -0
  653. package/src/modules/finance-ledger/query/listPeriodCloses.ts +64 -0
  654. package/src/modules/finance-ledger/query/listTrialBalances.generated.ts +5 -0
  655. package/src/modules/finance-ledger/query/listTrialBalances.test.ts +78 -0
  656. package/src/modules/finance-ledger/query/listTrialBalances.ts +56 -0
  657. package/src/modules/finance-ledger/seed/index.ts +19 -0
  658. package/src/modules/finance-ledger/tailor.config.ts +13 -0
  659. package/src/modules/finance-ledger/tailor.d.ts +13 -0
  660. package/src/modules/finance-ledger/testing/commandTestUtils.ts +35 -0
  661. package/src/modules/finance-ledger/testing/fixtures.ts +382 -0
  662. package/src/modules/finance-ledger/tsconfig.json +16 -0
  663. package/src/modules/inventory/command/updateLot.test.ts +1 -1
  664. package/src/modules/inventory/command/updateLot.ts +2 -3
  665. package/src/modules/inventory/command/updateStockMovement.ts +2 -3
  666. package/src/modules/inventory/command/updateStorageLocation.ts +12 -17
  667. package/src/modules/inventory/command/updateValuationPolicy.ts +2 -3
  668. package/src/modules/inventory/command/updateWarehouse.ts +2 -3
  669. package/src/modules/inventory/docs/commands/UpdateLot.md +3 -3
  670. package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +6 -6
  671. package/src/modules/inventory/docs/commands/UpdateWarehouse.md +2 -2
  672. package/src/modules/item-management/command/updateItem.test.ts +16 -12
  673. package/src/modules/item-management/command/updateItem.ts +47 -31
  674. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +15 -16
  675. package/src/modules/item-management/command/updateTaxonomyNode.ts +42 -29
  676. package/src/modules/item-management/docs/commands/UpdateItem.md +7 -11
  677. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +10 -14
  678. package/src/modules/manufacturing/command/updateBillOfMaterial.ts +3 -4
  679. package/src/modules/manufacturing/command/updateProductionOrder.ts +3 -4
  680. package/src/modules/manufacturing/command/updateRouting.ts +3 -4
  681. package/src/modules/manufacturing/command/updateWorkCenter.test.ts +16 -7
  682. package/src/modules/manufacturing/command/updateWorkCenter.ts +41 -38
  683. package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +2 -0
  684. package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +2 -0
  685. package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +1 -0
  686. package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +1 -0
  687. package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +6 -5
  688. package/src/modules/manufacturing/docs/models/BillOfMaterialLine.md +42 -0
  689. package/src/modules/manufacturing/docs/models/CostVarianceLine.md +36 -0
  690. package/src/modules/manufacturing/docs/models/ManufacturingCostLine.md +37 -0
  691. package/src/modules/manufacturing/docs/models/ManufacturingCostSettlementRecord.md +34 -0
  692. package/src/modules/manufacturing/docs/models/ProductionOrderBomSnapshot.md +35 -0
  693. package/src/modules/manufacturing/docs/models/ProductionOrderCostBaseline.md +36 -0
  694. package/src/modules/manufacturing/docs/models/ProductionOrderMaterialRequirement.md +35 -0
  695. package/src/modules/manufacturing/docs/models/ProductionOrderRoutingSnapshot.md +34 -0
  696. package/src/modules/manufacturing/docs/models/RoutingOperation.md +40 -0
  697. package/src/modules/manufacturing/docs/models/WorkOrderExecutionEvent.md +38 -0
  698. package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +1 -0
  699. package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +1 -0
  700. package/src/modules/organization/command/updateCompany.test.ts +6 -6
  701. package/src/modules/organization/command/updateCompany.ts +3 -4
  702. package/src/modules/organization/command/updateDepartment.test.ts +7 -7
  703. package/src/modules/organization/command/updateDepartment.ts +13 -12
  704. package/src/modules/organization/command/updateSite.test.ts +10 -10
  705. package/src/modules/organization/command/updateSite.ts +3 -4
  706. package/src/modules/organization/docs/commands/UpdateCompany.md +6 -6
  707. package/src/modules/organization/docs/commands/UpdateDepartment.md +9 -10
  708. package/src/modules/organization/docs/commands/UpdateSite.md +12 -12
  709. package/src/modules/product-management/command/updateProduct.test.ts +17 -11
  710. package/src/modules/product-management/command/updateProduct.ts +45 -28
  711. package/src/modules/product-management/command/updateProductAttribute.test.ts +16 -21
  712. package/src/modules/product-management/command/updateProductAttribute.ts +40 -26
  713. package/src/modules/product-management/command/updateProductAttributeValue.ts +2 -3
  714. package/src/modules/product-management/command/updateProductCategory.test.ts +14 -19
  715. package/src/modules/product-management/command/updateProductCategory.ts +42 -26
  716. package/src/modules/product-management/docs/commands/UpdateProduct.md +16 -20
  717. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +10 -14
  718. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +10 -14
  719. package/src/modules/purchase/command/updateGoodsReceipt.ts +2 -3
  720. package/src/modules/purchase/command/updatePurchaseBill.ts +2 -3
  721. package/src/modules/purchase/command/updatePurchaseOrder.ts +2 -3
  722. package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +2 -3
  723. package/src/modules/purchase/command/updatePurchasePriceList.ts +2 -3
  724. package/src/modules/purchase/command/updatePurchasePriceRule.ts +2 -3
  725. package/src/modules/sales/command/updateChannel.test.ts +4 -4
  726. package/src/modules/sales/command/updateChannel.ts +2 -3
  727. package/src/modules/sales/command/updateListing.test.ts +2 -2
  728. package/src/modules/sales/command/updateListing.ts +2 -3
  729. package/src/modules/sales/command/updateSalesCreditNote.test.ts +2 -2
  730. package/src/modules/sales/command/updateSalesCreditNote.ts +2 -3
  731. package/src/modules/sales/command/updateSalesInvoice.test.ts +2 -2
  732. package/src/modules/sales/command/updateSalesInvoice.ts +2 -3
  733. package/src/modules/sales/command/updateSalesOrder.test.ts +3 -3
  734. package/src/modules/sales/command/updateSalesOrder.ts +2 -3
  735. package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +2 -2
  736. package/src/modules/sales/command/updateSalesPaymentTerm.ts +2 -3
  737. package/src/modules/sales/command/updateSalesPriceList.test.ts +3 -3
  738. package/src/modules/sales/command/updateSalesPriceList.ts +2 -3
  739. package/src/modules/sales/command/updateSalesPriceRule.test.ts +3 -3
  740. package/src/modules/sales/command/updateSalesPriceRule.ts +2 -3
  741. package/src/modules/sales/command/updateShipment.test.ts +2 -2
  742. package/src/modules/sales/command/updateShipment.ts +2 -3
  743. package/src/modules/sales/docs/commands/UpdateChannel.md +4 -4
  744. package/src/modules/sales/docs/commands/UpdateListing.md +2 -2
  745. package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +2 -2
  746. package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +2 -2
  747. package/src/modules/sales/docs/commands/UpdateSalesOrder.md +3 -3
  748. package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +2 -2
  749. package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +3 -3
  750. package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +3 -3
  751. package/src/modules/sales/docs/commands/UpdateShipment.md +2 -2
  752. package/src/modules/user-management/README.md +2 -1
  753. package/src/modules/user-management/command/updateOwnProfile.generated.ts +6 -0
  754. package/src/modules/user-management/command/updateOwnProfile.test.ts +191 -0
  755. package/src/modules/user-management/command/updateOwnProfile.ts +82 -0
  756. package/src/modules/user-management/command/updateUser.generated.ts +6 -0
  757. package/src/modules/user-management/command/updateUser.test.ts +195 -0
  758. package/src/modules/user-management/command/updateUser.ts +76 -0
  759. package/src/modules/user-management/docs/commands/UpdateOwnProfile.md +68 -0
  760. package/src/modules/user-management/docs/commands/UpdateUser.md +67 -0
  761. package/src/modules/user-management/docs/features/user-account-management.md +28 -3
  762. package/src/modules/user-management/docs/models/User.md +2 -0
  763. package/src/modules/user-management/lib/errors.generated.ts +5 -0
  764. package/src/modules/user-management/lib/permissions.generated.ts +2 -0
  765. package/src/modules/user-management/module.ts +5 -0
  766. package/src/modules/user-management/seed/index.ts +19 -0
  767. package/src/progress/schema.test.ts +161 -0
  768. package/src/progress/schema.ts +316 -0
  769. package/templates/scaffold/app/backend/package.json +1 -3
  770. package/templates/scaffold/app/backend/seed/data/AuditEntry.jsonl +0 -0
  771. package/templates/scaffold/app/backend/seed/data/AuditEntry.schema.ts +20 -0
  772. package/templates/scaffold/app/backend/seed/data/AuditPolicy.jsonl +7 -0
  773. package/templates/scaffold/app/backend/seed/data/AuditPolicy.schema.ts +15 -0
  774. package/templates/scaffold/app/backend/seed/data/AuditableEntity.jsonl +4 -0
  775. package/templates/scaffold/app/backend/seed/data/AuditableEntity.schema.ts +20 -0
  776. package/templates/scaffold/app/backend/seed/data/ChangeDetail.jsonl +0 -0
  777. package/templates/scaffold/app/backend/seed/data/ChangeDetail.schema.ts +20 -0
  778. package/templates/scaffold/app/backend/seed/data/Company.jsonl +0 -0
  779. package/templates/scaffold/app/backend/seed/data/Company.schema.ts +15 -0
  780. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +13 -0
  781. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +1 -1
  782. package/templates/scaffold/app/backend/seed/data/PolicyFieldRule.jsonl +0 -0
  783. package/templates/scaffold/app/backend/seed/data/PolicyFieldRule.schema.ts +20 -0
  784. package/templates/scaffold/app/backend/seed/data/Role.jsonl +1 -0
  785. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +1 -1
  786. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +13 -0
  787. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +1 -1
  788. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -1
  789. package/templates/scaffold/app/backend/seed/data/User.schema.ts +1 -1
  790. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +1 -0
  791. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +1 -1
  792. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -1
  793. package/templates/scaffold/app/backend/seed/exec.mjs +12 -0
  794. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +2 -2
  795. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +2 -2
  796. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +62 -0
  797. package/templates/scaffold/app/backend/src/modules-db.ts +13 -0
  798. package/templates/scaffold/app/backend/src/modules.ts +3 -5
  799. package/templates/scaffold/app/backend/src/resolvers/assignPermissionToRole.ts +70 -0
  800. package/templates/scaffold/app/backend/src/resolvers/assignRoleToUser.ts +72 -0
  801. package/templates/scaffold/app/backend/src/resolvers/createRole.ts +92 -0
  802. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +113 -13
  803. package/templates/scaffold/app/backend/src/resolvers/deactivateUser.ts +67 -0
  804. package/templates/scaffold/app/backend/src/resolvers/reactivateUser.ts +63 -0
  805. package/templates/scaffold/app/backend/src/resolvers/revokePermissionFromRole.ts +72 -0
  806. package/templates/scaffold/app/backend/src/resolvers/revokeRoleFromUser.ts +72 -0
  807. package/templates/scaffold/app/backend/src/resolvers/updateOwnProfile.ts +107 -0
  808. package/templates/scaffold/app/backend/src/resolvers/updateUserProfile.ts +107 -0
  809. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +79 -0
  810. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log.test.ts +86 -0
  811. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +103 -0
  812. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--create-role.test.ts +61 -0
  813. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +89 -0
  814. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--update-role-permissions.test.ts +125 -0
  815. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--browse-user-list.test.ts +91 -0
  816. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--create-user-account.test.ts +97 -0
  817. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +131 -0
  818. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +85 -0
  819. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +158 -0
  820. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-own-profile.test.ts +30 -0
  821. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +98 -0
  822. package/templates/scaffold/app/backend/tailor.config.ts +6 -2
  823. package/templates/scaffold/app/backend/vitest.config.ts +4 -21
  824. package/templates/scaffold/app/docs/actors/user.md +11 -0
  825. package/templates/scaffold/app/docs/business-flow/audit-log/README.md +31 -0
  826. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log-detail.md +35 -0
  827. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log.md +44 -0
  828. package/templates/scaffold/app/docs/business-flow/role-management/README.md +33 -0
  829. package/templates/scaffold/app/docs/business-flow/role-management/story/user--assign-role-to-user.md +35 -0
  830. package/templates/scaffold/app/docs/business-flow/role-management/story/user--create-role.md +41 -0
  831. package/templates/scaffold/app/docs/business-flow/role-management/story/user--remove-role-from-user.md +33 -0
  832. package/templates/scaffold/app/docs/business-flow/role-management/story/user--update-role-permissions.md +41 -0
  833. package/templates/scaffold/app/docs/business-flow/user-lifecycle/README.md +48 -0
  834. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--browse-user-list.md +38 -0
  835. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--create-user-account.md +45 -0
  836. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--toggle-user-status.md +38 -0
  837. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-own-profile.md +36 -0
  838. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-user-profile.md +41 -0
  839. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-own-profile.md +30 -0
  840. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-user-detail.md +33 -0
  841. package/templates/scaffold/app/docs/resolver/assignPermissionToRole.md +16 -0
  842. package/templates/scaffold/app/docs/resolver/assignRoleToUser.md +17 -0
  843. package/templates/scaffold/app/docs/resolver/createRole.md +17 -0
  844. package/templates/scaffold/app/docs/resolver/createUser.md +23 -0
  845. package/templates/scaffold/app/docs/resolver/deactivateUser.md +17 -0
  846. package/templates/scaffold/app/docs/resolver/reactivateUser.md +16 -0
  847. package/templates/scaffold/app/docs/resolver/revokePermissionFromRole.md +17 -0
  848. package/templates/scaffold/app/docs/resolver/revokeRoleFromUser.md +17 -0
  849. package/templates/scaffold/app/docs/resolver/updateOwnProfile.md +20 -0
  850. package/templates/scaffold/app/docs/resolver/updateUserProfile.md +19 -0
  851. package/templates/scaffold/app/docs/screen/audit-entry-detail.md +30 -0
  852. package/templates/scaffold/app/docs/screen/audit-entry-list.md +25 -0
  853. package/templates/scaffold/app/docs/screen/my-profile-edit-form.md +22 -0
  854. package/templates/scaffold/app/docs/screen/my-profile.md +27 -0
  855. package/templates/scaffold/app/docs/screen/role-create-form.md +23 -0
  856. package/templates/scaffold/app/docs/screen/role-detail.md +27 -0
  857. package/templates/scaffold/app/docs/screen/role-edit-form.md +21 -0
  858. package/templates/scaffold/app/docs/screen/role-list.md +23 -0
  859. package/templates/scaffold/app/docs/screen/user-create-form.md +23 -0
  860. package/templates/scaffold/app/docs/screen/user-detail.md +33 -0
  861. package/templates/scaffold/app/docs/screen/user-edit-form.md +22 -0
  862. package/templates/scaffold/app/docs/screen/user-list.md +24 -0
  863. package/templates/scaffold/app/frontend/package.json +1 -1
  864. package/templates/scaffold/app/frontend/src/App.tsx +4 -0
  865. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +1 -1
  866. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +59 -31
  867. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1411 -688
  868. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +1 -1
  869. package/templates/scaffold/app/frontend/src/lib/permission-groups.ts +59 -0
  870. package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/components/audit-entry-detail.tsx +102 -0
  871. package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/page.tsx +65 -0
  872. package/templates/scaffold/app/frontend/src/pages/user-management/audit/components/audit-entries-table.tsx +90 -0
  873. package/templates/scaffold/app/frontend/src/pages/user-management/audit/page.tsx +52 -0
  874. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/components/edit-profile-form.tsx +125 -0
  875. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/page.tsx +19 -0
  876. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +41 -21
  877. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-actions.tsx +26 -0
  878. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-detail.tsx +69 -0
  879. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/components/edit-role-form.tsx +192 -0
  880. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/page.tsx +51 -0
  881. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/page.tsx +56 -0
  882. package/templates/scaffold/app/frontend/src/pages/user-management/role/components/roles-table.tsx +85 -0
  883. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/components/create-role-form.tsx +204 -0
  884. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/page.tsx +19 -0
  885. package/templates/scaffold/app/frontend/src/pages/user-management/role/page.tsx +60 -0
  886. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-actions.tsx +216 -0
  887. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +97 -33
  888. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/components/edit-user-form.tsx +115 -0
  889. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/page.tsx +51 -0
  890. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +8 -2
  891. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +43 -42
  892. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +120 -45
  893. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +3 -4
  894. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +8 -1
  895. package/templates/scaffold/module/eslint.config.js +8 -0
  896. package/templates/scaffold/project/__dot__gitignore +1 -0
  897. package/templates/scaffold/project/__pnpm-workspace.yaml +3 -0
  898. package/templates/scaffold/project/apps/.gitkeep +0 -0
  899. package/templates/scaffold/project/modules/.gitkeep +0 -0
  900. package/templates/scaffold/project/package.json +15 -0
  901. package/templates/workflows/erp-kit-check.yml +10 -4
  902. package/src/generator/generate-stubs.ts +0 -35
  903. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +0 -39
  904. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +0 -60
  905. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +0 -75
  906. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +0 -21
  907. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +0 -90
  908. /package/src/modules/{supplier-portal → accounting/executor}/.gitkeep +0 -0
  909. /package/{templates/scaffold/app/docs/actors → src/modules/finance-ledger/command}/.gitkeep +0 -0
  910. /package/{templates/scaffold/app/docs/business-flow → src/modules/finance-ledger/db}/.gitkeep +0 -0
  911. /package/{templates/scaffold/app/docs/resolver → src/modules/finance-ledger/executor}/.gitkeep +0 -0
  912. /package/{templates/scaffold/app/docs/screen → src/modules/finance-ledger/query}/.gitkeep +0 -0
  913. /package/templates/{config → scaffold/project}/license.config.json +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  import type { PrimitivesQueries } from "../module";
9
9
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
10
10
 
11
- export interface UpdateCompanyInput {
11
+ export type UpdateCompanyInput = {
12
12
  companyId: string;
13
13
  legalName?: string;
14
14
  taxId?: string;
@@ -19,8 +19,7 @@ export interface UpdateCompanyInput {
19
19
  state?: string;
20
20
  postalCode?: string;
21
21
  country?: string;
22
- }
23
-
22
+ };
24
23
  /**
25
24
  * Function: updateCompany
26
25
  *
@@ -29,7 +28,7 @@ export interface UpdateCompanyInput {
29
28
  */
30
29
  export async function run<CF extends Record<string, unknown>>(
31
30
  db: Transaction,
32
- input: UpdateCompanyInput & CF,
31
+ input: UpdateCompanyInput & Omit<Partial<CF>, "status">,
33
32
  ctx: CommandContext,
34
33
  primitivesQueries?: Pick<PrimitivesQueries, "getCurrency">,
35
34
  ) {
@@ -88,7 +88,7 @@ describe("updateDepartment", () => {
88
88
  }
89
89
  });
90
90
 
91
- it("throws when department does not exist", async () => {
91
+ it("returns error when department does not exist", async () => {
92
92
  const { db, spies } = createMockDb<Transaction>();
93
93
  spies.select.mockReturnValue(undefined);
94
94
 
@@ -103,7 +103,7 @@ describe("updateDepartment", () => {
103
103
  }
104
104
  });
105
105
 
106
- it("throws when name is empty", async () => {
106
+ it("returns error when name is empty", async () => {
107
107
  const { db, spies } = createMockDb<Transaction>();
108
108
  spies.select.mockReturnValueOnce(activeDepartment);
109
109
 
@@ -118,7 +118,7 @@ describe("updateDepartment", () => {
118
118
  }
119
119
  });
120
120
 
121
- it("throws when name is whitespace-only", async () => {
121
+ it("returns error when name is whitespace-only", async () => {
122
122
  const { db, spies } = createMockDb<Transaction>();
123
123
  spies.select.mockReturnValueOnce(activeDepartment);
124
124
 
@@ -133,7 +133,7 @@ describe("updateDepartment", () => {
133
133
  }
134
134
  });
135
135
 
136
- it("throws when setting self as parent", async () => {
136
+ it("returns error when setting self as parent", async () => {
137
137
  const { db, spies } = createMockDb<Transaction>();
138
138
  spies.select.mockReturnValueOnce(activeDepartment);
139
139
 
@@ -148,7 +148,7 @@ describe("updateDepartment", () => {
148
148
  }
149
149
  });
150
150
 
151
- it("throws when parent does not exist", async () => {
151
+ it("returns error when parent does not exist", async () => {
152
152
  const { db, spies } = createMockDb<Transaction>();
153
153
  spies.select
154
154
  .mockReturnValueOnce(activeDepartment) // find department
@@ -165,7 +165,7 @@ describe("updateDepartment", () => {
165
165
  }
166
166
  });
167
167
 
168
- it("throws when parent belongs to different company", async () => {
168
+ it("returns error when parent belongs to different company", async () => {
169
169
  const { db, spies } = createMockDb<Transaction>();
170
170
  spies.select
171
171
  .mockReturnValueOnce(activeDepartment) // find department
@@ -182,7 +182,7 @@ describe("updateDepartment", () => {
182
182
  }
183
183
  });
184
184
 
185
- it("throws when reparenting creates circular reference", async () => {
185
+ it("returns error when reparenting creates circular reference", async () => {
186
186
  const { db, spies } = createMockDb<Transaction>();
187
187
  // activeDepartment -> childDepartment -> grandchildDepartment
188
188
  // Try to set activeDepartment's parent to grandchildDepartment
@@ -9,12 +9,11 @@ import {
9
9
  import { run as detectCircularReference } from "../query/detectDepartmentCircularReference";
10
10
  import { ok, err } from "@tailor-platform/erp-kit/module";
11
11
 
12
- export interface UpdateDepartmentInput {
12
+ export type UpdateDepartmentInput = {
13
13
  departmentId: string;
14
14
  name?: string;
15
15
  parentDepartmentId?: string | null;
16
- }
17
-
16
+ };
18
17
  /**
19
18
  * Function: updateDepartment
20
19
  *
@@ -23,20 +22,22 @@ export interface UpdateDepartmentInput {
23
22
  */
24
23
  export async function run<CF extends Record<string, unknown>>(
25
24
  db: Transaction,
26
- input: UpdateDepartmentInput & CF,
25
+ input: UpdateDepartmentInput & Omit<Partial<CF>, "status">,
27
26
  ) {
28
- const { departmentId, name, parentDepartmentId, ...customFields } = input;
27
+ const { name, parentDepartmentId, ...rest } = input;
28
+ const customFields = { ...rest } as Record<string, unknown>;
29
+ delete customFields.departmentId;
29
30
 
30
31
  // 1. Find department
31
32
  const existing = await db
32
33
  .selectFrom("Department")
33
34
  .selectAll()
34
- .where("id", "=", departmentId)
35
+ .where("id", "=", input.departmentId)
35
36
  .forUpdate()
36
37
  .executeTakeFirst();
37
38
 
38
39
  if (!existing) {
39
- return err(new DepartmentNotFoundError(departmentId));
40
+ return err(new DepartmentNotFoundError(input.departmentId));
40
41
  }
41
42
 
42
43
  // 2. Validate name if provided
@@ -47,8 +48,8 @@ export async function run<CF extends Record<string, unknown>>(
47
48
  // 3. Validate parentDepartmentId if provided
48
49
  if (parentDepartmentId !== undefined && parentDepartmentId !== null) {
49
50
  // Self-reference check
50
- if (parentDepartmentId === departmentId) {
51
- return err(new SelfReferenceError(departmentId));
51
+ if (parentDepartmentId === existing.id) {
52
+ return err(new SelfReferenceError(existing.id));
52
53
  }
53
54
 
54
55
  // Find parent department
@@ -69,11 +70,11 @@ export async function run<CF extends Record<string, unknown>>(
69
70
 
70
71
  // Circular reference detection via shared query
71
72
  const circularResult = await detectCircularReference(db, {
72
- departmentId,
73
+ departmentId: existing.id,
73
74
  newParentId: parentDepartmentId,
74
75
  });
75
76
  if (circularResult.ok && circularResult.value.isCircular) {
76
- return err(new CircularReferenceError(departmentId));
77
+ return err(new CircularReferenceError(existing.id));
77
78
  }
78
79
  }
79
80
 
@@ -112,7 +113,7 @@ export async function run<CF extends Record<string, unknown>>(
112
113
  const department = await db
113
114
  .updateTable("Department")
114
115
  .set(updateSet)
115
- .where("id", "=", departmentId)
116
+ .where("id", "=", existing.id)
116
117
  .returningAll()
117
118
  .executeTakeFirst();
118
119
 
@@ -88,7 +88,7 @@ describe("updateSite", () => {
88
88
  }
89
89
  });
90
90
 
91
- it("throws when site does not exist", async () => {
91
+ it("returns error when site does not exist", async () => {
92
92
  const { db, spies } = createMockDb<Transaction>();
93
93
  spies.select.mockReturnValue(undefined);
94
94
 
@@ -100,7 +100,7 @@ describe("updateSite", () => {
100
100
  }
101
101
  });
102
102
 
103
- it("throws when name is empty", async () => {
103
+ it("returns error when name is empty", async () => {
104
104
  const { db, spies } = createMockDb<Transaction>();
105
105
  spies.select.mockReturnValueOnce(activeSite);
106
106
 
@@ -112,7 +112,7 @@ describe("updateSite", () => {
112
112
  }
113
113
  });
114
114
 
115
- it("throws when name already exists in same company", async () => {
115
+ it("returns error when name already exists in same company", async () => {
116
116
  const { db, spies } = createMockDb<Transaction>();
117
117
  const otherSite = { ...activeSite, id: "site-other", name: "Existing Name" };
118
118
 
@@ -128,7 +128,7 @@ describe("updateSite", () => {
128
128
  }
129
129
  });
130
130
 
131
- it("throws when type is invalid", async () => {
131
+ it("returns error when type is invalid", async () => {
132
132
  const { db, spies } = createMockDb<Transaction>();
133
133
  spies.select.mockReturnValueOnce(activeSite);
134
134
 
@@ -140,7 +140,7 @@ describe("updateSite", () => {
140
140
  }
141
141
  });
142
142
 
143
- it("throws when country code is invalid", async () => {
143
+ it("returns error when country code is invalid", async () => {
144
144
  const { db, spies } = createMockDb<Transaction>();
145
145
  spies.select.mockReturnValueOnce(activeSite);
146
146
 
@@ -152,7 +152,7 @@ describe("updateSite", () => {
152
152
  }
153
153
  });
154
154
 
155
- it("throws when timezone is invalid", async () => {
155
+ it("returns error when timezone is invalid", async () => {
156
156
  const { db, spies } = createMockDb<Transaction>();
157
157
  spies.select.mockReturnValueOnce(activeSite);
158
158
 
@@ -179,7 +179,7 @@ describe("updateSite", () => {
179
179
  }
180
180
  });
181
181
 
182
- it("throws when street is set to empty", async () => {
182
+ it("returns error when street is set to empty", async () => {
183
183
  const { db, spies } = createMockDb<Transaction>();
184
184
  spies.select.mockReturnValueOnce(activeSite);
185
185
 
@@ -191,7 +191,7 @@ describe("updateSite", () => {
191
191
  }
192
192
  });
193
193
 
194
- it("throws when city is set to empty", async () => {
194
+ it("returns error when city is set to empty", async () => {
195
195
  const { db, spies } = createMockDb<Transaction>();
196
196
  spies.select.mockReturnValueOnce(activeSite);
197
197
 
@@ -203,7 +203,7 @@ describe("updateSite", () => {
203
203
  }
204
204
  });
205
205
 
206
- it("throws when postalCode is set to empty", async () => {
206
+ it("returns error when postalCode is set to empty", async () => {
207
207
  const { db, spies } = createMockDb<Transaction>();
208
208
  spies.select.mockReturnValueOnce(activeSite);
209
209
 
@@ -215,7 +215,7 @@ describe("updateSite", () => {
215
215
  }
216
216
  });
217
217
 
218
- it("throws when country is set to empty", async () => {
218
+ it("returns error when country is set to empty", async () => {
219
219
  const { db, spies } = createMockDb<Transaction>();
220
220
  spies.select.mockReturnValueOnce(activeSite);
221
221
 
@@ -10,7 +10,7 @@ import {
10
10
  } from "../lib/errors.generated";
11
11
  import { ok, err } from "@tailor-platform/erp-kit/module";
12
12
 
13
- export interface UpdateSiteInput {
13
+ export type UpdateSiteInput = {
14
14
  siteId: string;
15
15
  name?: string;
16
16
  type?: string;
@@ -20,7 +20,7 @@ export interface UpdateSiteInput {
20
20
  postalCode?: string;
21
21
  country?: string;
22
22
  timezone?: string;
23
- }
23
+ };
24
24
 
25
25
  const VALID_SITE_TYPES = ["OFFICE", "WAREHOUSE", "STORE", "FACTORY", "DISTRIBUTION_CENTER"];
26
26
 
@@ -42,7 +42,6 @@ function isValidTimezone(tz: string): boolean {
42
42
  return false;
43
43
  }
44
44
  }
45
-
46
45
  /**
47
46
  * Function: updateSite
48
47
  *
@@ -51,7 +50,7 @@ function isValidTimezone(tz: string): boolean {
51
50
  */
52
51
  export async function run<CF extends Record<string, unknown>>(
53
52
  db: Transaction,
54
- input: UpdateSiteInput & CF,
53
+ input: UpdateSiteInput & Omit<Partial<CF>, "status">,
55
54
  ) {
56
55
  const {
57
56
  siteId,
@@ -49,10 +49,10 @@ flowchart TD
49
49
  - updates legal name on DRAFT company
50
50
  - updates address fields on ACTIVE company
51
51
  - updates tax ID and registration number
52
- - throws when company does not exist
53
- - throws when legal name is empty
54
- - throws when changing base currency on ACTIVE company
55
- - throws when changing base currency on INACTIVE company
56
- - throws when new base currency does not exist
57
- - throws when new base currency is inactive
52
+ - returns error when company does not exist
53
+ - returns error when legal name is empty
54
+ - returns error when changing base currency on ACTIVE company
55
+ - returns error when changing base currency on INACTIVE company
56
+ - returns error when new base currency does not exist
57
+ - returns error when new base currency is inactive
58
58
  - updates base currency on DRAFT company
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- UpdateDepartment modifies the name or parent department of an existing department. The department code and company are immutable. Parent department changes are validated to prevent self-references and circular hierarchies. Updating is allowed on both ACTIVE and INACTIVE departments.
5
+ UpdateDepartment modifies the name or parent department of an existing department. Department code and company ownership are fixed by the existing record and are not part of the update input. Parent department changes are validated to prevent self-references and circular hierarchies. Updating is allowed on both ACTIVE and INACTIVE departments.
6
6
 
7
7
  This command supports organizational restructuring and department renaming.
8
8
 
@@ -10,8 +10,7 @@ This command supports organizational restructuring and department renaming.
10
10
 
11
11
  - Department must exist
12
12
  - Name, if provided, must be non-empty
13
- - Department code cannot be changed
14
- - companyId cannot be changed
13
+ - Department code and company ownership are not part of the update input
15
14
  - Parent department, if provided, must exist and belong to the same company
16
15
  - A department cannot reference itself as its own parent
17
16
  - Circular parent references are rejected
@@ -54,11 +53,11 @@ flowchart TD
54
53
  - updates department name
55
54
  - updates parent department
56
55
  - removes parent department (promotes to top-level)
57
- - throws when department does not exist
58
- - throws when name is empty
59
- - throws when name is whitespace-only
60
- - throws when setting self as parent
61
- - throws when parent does not exist
62
- - throws when parent belongs to different company
63
- - throws when reparenting creates circular reference
56
+ - returns error when department does not exist
57
+ - returns error when name is empty
58
+ - returns error when name is whitespace-only
59
+ - returns error when setting self as parent
60
+ - returns error when parent does not exist
61
+ - returns error when parent belongs to different company
62
+ - returns error when reparenting creates circular reference
64
63
  - updates parent on INACTIVE department
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- UpdateSite modifies fields on an existing site. Updatable fields include name, type, address fields, country, and timezone. The companyId is immutable after creation. Updating is permitted on both ACTIVE and INACTIVE sites.
5
+ UpdateSite modifies fields on an existing site. Updatable fields include name, type, address fields, country, and timezone. Company ownership is fixed by the existing record and is not part of the update input. Updating is permitted on both ACTIVE and INACTIVE sites.
6
6
 
7
7
  This command supports address corrections, type reclassification, and timezone updates.
8
8
 
@@ -12,7 +12,7 @@ This command supports address corrections, type reclassification, and timezone u
12
12
  - Name, if provided, must be non-empty
13
13
  - Name, if changed, must remain unique within the same company
14
14
  - Type, if provided, must be one of the allowed classifications
15
- - companyId cannot be changed
15
+ - companyId is not part of the update input
16
16
  - Timezone, if provided, must be a valid IANA timezone identifier
17
17
  - Country, if provided, must reference a valid country code
18
18
  - Address fields can be individually updated
@@ -64,17 +64,17 @@ flowchart TD
64
64
  - updates site address fields
65
65
  - updates site type
66
66
  - updates site timezone
67
- - throws when site does not exist
68
- - throws when name is empty
69
- - throws when name already exists in same company
70
- - throws when type is invalid
71
- - throws when country code is invalid
72
- - throws when timezone is invalid
67
+ - returns error when site does not exist
68
+ - returns error when name is empty
69
+ - returns error when name already exists in same company
70
+ - returns error when type is invalid
71
+ - returns error when country code is invalid
72
+ - returns error when timezone is invalid
73
73
  - updates site country
74
- - throws when street is set to empty
75
- - throws when city is set to empty
76
- - throws when postalCode is set to empty
77
- - throws when country is set to empty
74
+ - returns error when street is set to empty
75
+ - returns error when city is set to empty
76
+ - returns error when postalCode is set to empty
77
+ - returns error when country is set to empty
78
78
  - updates state/province field
79
79
  - clears state/province field
80
80
  - updates address fields on INACTIVE site
@@ -3,7 +3,6 @@ import { createMockDb } from "../../../testing/index";
3
3
  import type { GetUnitInput } from "../../primitives/query/getUnit";
4
4
  import type { Transaction } from "../generated/kysely-tailordb";
5
5
  import {
6
- CodeImmutableError,
7
6
  InvalidUomError,
8
7
  MissingRequiredFieldError,
9
8
  NoFieldsToUpdateError,
@@ -51,16 +50,6 @@ describe("updateProduct", () => {
51
50
  }
52
51
  });
53
52
 
54
- it("returns error when code change attempted", async () => {
55
- const { db, spies } = createMockDb<Transaction>();
56
- spies.select.mockReturnValueOnce({ ...baseDraftProduct });
57
- const result = await run(db, { id: "product-1", code: "NEW-CODE" }, ctx, primitivesQueries);
58
- expect(result.ok).toBe(false);
59
- if (!result.ok) {
60
- expect(result.error).toBeInstanceOf(CodeImmutableError);
61
- }
62
- });
63
-
64
53
  it("returns error when no fields provided", async () => {
65
54
  const { db, spies } = createMockDb<Transaction>();
66
55
  spies.select.mockReturnValueOnce({ ...baseDraftProduct });
@@ -147,6 +136,23 @@ describe("updateProduct", () => {
147
136
  }
148
137
  });
149
138
 
139
+ it("looks up product by code and updates name", async () => {
140
+ const { db, spies } = createMockDb<Transaction>();
141
+ const updated = { ...baseDraftProduct, name: "Updated Name" };
142
+ spies.select.mockReturnValueOnce({ ...baseDraftProduct });
143
+ spies.update.mockReturnValueOnce(updated);
144
+ const result = await run(
145
+ db,
146
+ { code: baseDraftProduct.code, name: "Updated Name" },
147
+ ctx,
148
+ primitivesQueries,
149
+ );
150
+ expect(result.ok).toBe(true);
151
+ if (result.ok) {
152
+ expect(result.value.product.name).toBe("Updated Name");
153
+ }
154
+ });
155
+
150
156
  it("passes custom fields through", async () => {
151
157
  const { db, spies } = createMockDb<Transaction>();
152
158
  const updated = { ...baseDraftProduct, customField1: "value1" };
@@ -1,7 +1,6 @@
1
1
  import { Transaction } from "../generated/kysely-tailordb";
2
2
  import {
3
3
  ProductNotFoundError,
4
- CodeImmutableError,
5
4
  NoFieldsToUpdateError,
6
5
  UomLockedError,
7
6
  InvalidUomError,
@@ -10,63 +9,81 @@ import {
10
9
  import type { PrimitivesQueries } from "../module";
11
10
  import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
12
11
 
13
- export interface UpdateProductInput {
14
- id: string;
15
- code?: string;
12
+ export type UpdateProductInput = (
13
+ | {
14
+ id: string;
15
+ }
16
+ | {
17
+ code: string;
18
+ }
19
+ ) & {
16
20
  name?: string;
17
21
  description?: string;
18
22
  unitId?: string;
19
- }
23
+ };
20
24
 
21
25
  /**
22
26
  * Function: updateProduct
23
27
  *
24
28
  * Updates mutable fields of an existing product.
29
+ * The product can be looked up by id or code. UoM can only be changed in DRAFT status.
25
30
  */
26
31
  export async function run<CF extends Record<string, unknown>>(
27
32
  db: Transaction,
28
- input: UpdateProductInput & CF,
33
+ input: UpdateProductInput & Omit<Partial<CF>, "status">,
29
34
  ctx: CommandContext,
30
35
  primitivesQueries: Pick<PrimitivesQueries, "getUnit">,
31
36
  ) {
32
- const { id, code, name, description, unitId, ...customFields } = input;
33
-
34
- // Check product exists (with lock)
35
- const product = await db
36
- .selectFrom("Product")
37
- .selectAll()
38
- .where("id", "=", id)
39
- .forUpdate()
40
- .executeTakeFirst();
37
+ const { name, description, unitId } = input;
41
38
 
42
- if (!product) {
43
- return err(new ProductNotFoundError(id));
39
+ const KNOWN_KEYS = new Set(["id", "code", "name", "description", "unitId"]);
40
+ const customFields: Record<string, unknown> = {};
41
+ for (const [key, value] of Object.entries(input as Record<string, unknown>)) {
42
+ if (!KNOWN_KEYS.has(key)) {
43
+ customFields[key] = value;
44
+ }
44
45
  }
45
46
 
46
- // Code is immutable
47
- if (code !== undefined) {
48
- return err(new CodeImmutableError(id));
47
+ // 1. Check product exists (lookup by id or code)
48
+ const product =
49
+ "id" in input
50
+ ? await db
51
+ .selectFrom("Product")
52
+ .selectAll()
53
+ .where("id", "=", (input as { id: string }).id)
54
+ .forUpdate()
55
+ .executeTakeFirst()
56
+ : await db
57
+ .selectFrom("Product")
58
+ .selectAll()
59
+ .where("code", "=", (input as { code: string }).code)
60
+ .forUpdate()
61
+ .executeTakeFirst();
62
+
63
+ if (!product) {
64
+ const key = "id" in input ? (input as { id: string }).id : (input as { code: string }).code;
65
+ return err(new ProductNotFoundError(key));
49
66
  }
50
67
 
51
- // Check if any fields to update
68
+ // 2. Check if any fields to update
52
69
  const hasNameUpdate = name !== undefined;
53
70
  const hasDescriptionUpdate = description !== undefined;
54
71
  const hasUnitUpdate = unitId !== undefined;
55
72
  const hasCustomFields = Object.keys(customFields).length > 0;
56
73
 
57
74
  if (!hasNameUpdate && !hasDescriptionUpdate && !hasUnitUpdate && !hasCustomFields) {
58
- return err(new NoFieldsToUpdateError(id));
75
+ return err(new NoFieldsToUpdateError(product.id));
59
76
  }
60
77
 
61
- // Validate name if provided
78
+ // 3. Validate name if provided
62
79
  if (hasNameUpdate && !name?.trim()) {
63
80
  return err(new MissingRequiredFieldError("name"));
64
81
  }
65
82
 
66
- // UoM can only be updated in DRAFT status
83
+ // 4. UoM can only be updated in DRAFT status
67
84
  if (hasUnitUpdate) {
68
85
  if (product.status !== "DRAFT") {
69
- return err(new UomLockedError(id));
86
+ return err(new UomLockedError(product.id));
70
87
  }
71
88
  const unitResult = await primitivesQueries.getUnit(db, { id: unitId }, ctx);
72
89
  if (!unitResult.ok) return err(new InvalidUomError(unitId));
@@ -75,9 +92,9 @@ export async function run<CF extends Record<string, unknown>>(
75
92
  }
76
93
  }
77
94
 
78
- // Build update payload
95
+ // 5. Build update payload
79
96
  const updates: Record<string, unknown> = {
80
- ...(customFields as Record<string, unknown>),
97
+ ...customFields,
81
98
  updatedAt: new Date(),
82
99
  };
83
100
  if (hasNameUpdate) updates.name = name;
@@ -87,7 +104,7 @@ export async function run<CF extends Record<string, unknown>>(
87
104
  const updated = await db
88
105
  .updateTable("Product")
89
106
  .set(updates)
90
- .where("id", "=", id)
107
+ .where("id", "=", product.id)
91
108
  .returningAll()
92
109
  .executeTakeFirst();
93
110
 
@@ -1,11 +1,7 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { createMockDb } from "../../../testing/index";
3
3
  import { Transaction } from "../generated/kysely-tailordb";
4
- import {
5
- AttributeNotFoundError,
6
- CodeImmutableError,
7
- MissingRequiredFieldError,
8
- } from "../lib/errors.generated";
4
+ import { AttributeNotFoundError, MissingRequiredFieldError } from "../lib/errors.generated";
9
5
  import { baseColorAttribute } from "../testing/fixtures";
10
6
  import { run } from "./updateProductAttribute";
11
7
 
@@ -22,22 +18,6 @@ describe("updateProductAttribute", () => {
22
18
  }
23
19
  });
24
20
 
25
- it("returns error when trying to change code", async () => {
26
- const { db, spies } = createMockDb<Transaction>();
27
- spies.select.mockReturnValueOnce(baseColorAttribute);
28
-
29
- const result = await run(db, {
30
- id: baseColorAttribute.id,
31
- code: "NEW-CODE",
32
- name: "Color",
33
- });
34
-
35
- expect(result.ok).toBe(false);
36
- if (!result.ok) {
37
- expect(result.error).toBeInstanceOf(CodeImmutableError);
38
- }
39
- });
40
-
41
21
  it("returns error when no fields provided", async () => {
42
22
  const { db, spies } = createMockDb<Transaction>();
43
23
  spies.select.mockReturnValueOnce(baseColorAttribute);
@@ -98,4 +78,19 @@ describe("updateProductAttribute", () => {
98
78
  }
99
79
  expect(spies.update).toHaveBeenCalled();
100
80
  });
81
+
82
+ it("looks up attribute by code and updates name", async () => {
83
+ const { db, spies } = createMockDb<Transaction>();
84
+ const updatedAttribute = { ...baseColorAttribute, name: "Updated Color" };
85
+
86
+ spies.select.mockReturnValueOnce(baseColorAttribute);
87
+ spies.update.mockReturnValue(updatedAttribute);
88
+
89
+ const result = await run(db, { code: baseColorAttribute.code, name: "Updated Color" });
90
+
91
+ expect(result.ok).toBe(true);
92
+ if (result.ok) {
93
+ expect(result.value.attribute.name).toBe("Updated Color");
94
+ }
95
+ });
101
96
  });