@tailor-platform/erp-kit 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (635) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +8 -4
  3. package/dist/cli.mjs +70 -70
  4. package/package.json +1 -1
  5. package/skills/erp-kit-app-5-impl-backend/SKILL.md +5 -5
  6. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -1
  7. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +37 -12
  8. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +3 -1
  9. package/skills/erp-kit-app-6-impl-frontend/references/component.md +90 -0
  10. package/skills/erp-kit-app-6-impl-frontend/references/detail-view.md +255 -0
  11. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +1 -5
  12. package/skills/erp-kit-app-7-impl-review/SKILL.md +3 -2
  13. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +14 -8
  14. package/skills/erp-kit-module-6-impl-review/SKILL.md +16 -19
  15. package/skills/erp-kit-module-shared/references/commands.md +68 -1
  16. package/src/commands/index.ts +8 -2
  17. package/src/commands/init.test.ts +24 -8
  18. package/src/commands/init.ts +5 -12
  19. package/src/commands/lib/distribute.test.ts +1 -20
  20. package/src/commands/lib/distribute.ts +0 -14
  21. package/src/commands/update.test.ts +1 -1
  22. package/src/generator/scaffold.ts +25 -4
  23. package/src/module.ts +4 -1
  24. package/src/modules/accounting/README.md +63 -0
  25. package/src/modules/accounting/command/activateBudget.generated.ts +6 -0
  26. package/src/modules/accounting/command/activateBudget.test.ts +119 -0
  27. package/src/modules/accounting/command/activateBudget.ts +77 -0
  28. package/src/modules/accounting/command/activateCostElement.generated.ts +6 -0
  29. package/src/modules/accounting/command/activateCostElement.test.ts +59 -0
  30. package/src/modules/accounting/command/activateCostElement.ts +41 -0
  31. package/src/modules/accounting/command/activateProfitCenter.generated.ts +6 -0
  32. package/src/modules/accounting/command/activateProfitCenter.test.ts +60 -0
  33. package/src/modules/accounting/command/activateProfitCenter.ts +38 -0
  34. package/src/modules/accounting/command/approveBudget.generated.ts +6 -0
  35. package/src/modules/accounting/command/approveBudget.test.ts +69 -0
  36. package/src/modules/accounting/command/approveBudget.ts +47 -0
  37. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.generated.ts +6 -0
  38. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.test.ts +112 -0
  39. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.ts +67 -0
  40. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.generated.ts +6 -0
  41. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +123 -0
  42. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +71 -0
  43. package/src/modules/accounting/command/closeBudget.generated.ts +6 -0
  44. package/src/modules/accounting/command/closeBudget.test.ts +93 -0
  45. package/src/modules/accounting/command/closeBudget.ts +40 -0
  46. package/src/modules/accounting/command/closeInternalOrder.generated.ts +6 -0
  47. package/src/modules/accounting/command/closeInternalOrder.test.ts +74 -0
  48. package/src/modules/accounting/command/closeInternalOrder.ts +38 -0
  49. package/src/modules/accounting/command/consumeCommitment.generated.ts +6 -0
  50. package/src/modules/accounting/command/consumeCommitment.test.ts +123 -0
  51. package/src/modules/accounting/command/consumeCommitment.ts +62 -0
  52. package/src/modules/accounting/command/createAllocationCycle.generated.ts +6 -0
  53. package/src/modules/accounting/command/createAllocationCycle.test.ts +166 -0
  54. package/src/modules/accounting/command/createAllocationCycle.ts +68 -0
  55. package/src/modules/accounting/command/createAllocationRule.generated.ts +6 -0
  56. package/src/modules/accounting/command/createAllocationRule.test.ts +195 -0
  57. package/src/modules/accounting/command/createAllocationRule.ts +103 -0
  58. package/src/modules/accounting/command/createBudget.generated.ts +6 -0
  59. package/src/modules/accounting/command/createBudget.test.ts +159 -0
  60. package/src/modules/accounting/command/createBudget.ts +100 -0
  61. package/src/modules/accounting/command/createBudgetLineItem.generated.ts +6 -0
  62. package/src/modules/accounting/command/createBudgetLineItem.test.ts +178 -0
  63. package/src/modules/accounting/command/createBudgetLineItem.ts +104 -0
  64. package/src/modules/accounting/command/createCostCenter.generated.ts +6 -0
  65. package/src/modules/accounting/command/createCostCenter.test.ts +179 -0
  66. package/src/modules/accounting/command/createCostCenter.ts +112 -0
  67. package/src/modules/accounting/command/createCostCenterHierarchy.generated.ts +6 -0
  68. package/src/modules/accounting/command/createCostCenterHierarchy.test.ts +91 -0
  69. package/src/modules/accounting/command/createCostCenterHierarchy.ts +48 -0
  70. package/src/modules/accounting/command/createCostCenterHierarchyNode.generated.ts +6 -0
  71. package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +171 -0
  72. package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +117 -0
  73. package/src/modules/accounting/command/createCostElement.generated.ts +6 -0
  74. package/src/modules/accounting/command/createCostElement.test.ts +317 -0
  75. package/src/modules/accounting/command/createCostElement.ts +149 -0
  76. package/src/modules/accounting/command/createInternalOrder.generated.ts +6 -0
  77. package/src/modules/accounting/command/createInternalOrder.test.ts +206 -0
  78. package/src/modules/accounting/command/createInternalOrder.ts +104 -0
  79. package/src/modules/accounting/command/createPlanVersion.generated.ts +6 -0
  80. package/src/modules/accounting/command/createPlanVersion.test.ts +230 -0
  81. package/src/modules/accounting/command/createPlanVersion.ts +71 -0
  82. package/src/modules/accounting/command/createProfitCenter.generated.ts +6 -0
  83. package/src/modules/accounting/command/createProfitCenter.test.ts +227 -0
  84. package/src/modules/accounting/command/createProfitCenter.ts +81 -0
  85. package/src/modules/accounting/command/createProfitCenterHierarchy.generated.ts +6 -0
  86. package/src/modules/accounting/command/createProfitCenterHierarchy.test.ts +91 -0
  87. package/src/modules/accounting/command/createProfitCenterHierarchy.ts +46 -0
  88. package/src/modules/accounting/command/createProfitCenterHierarchyNode.generated.ts +6 -0
  89. package/src/modules/accounting/command/createProfitCenterHierarchyNode.test.ts +160 -0
  90. package/src/modules/accounting/command/createProfitCenterHierarchyNode.ts +109 -0
  91. package/src/modules/accounting/command/deactivateCostElement.generated.ts +6 -0
  92. package/src/modules/accounting/command/deactivateCostElement.test.ts +59 -0
  93. package/src/modules/accounting/command/deactivateCostElement.ts +41 -0
  94. package/src/modules/accounting/command/deactivateProfitCenter.generated.ts +6 -0
  95. package/src/modules/accounting/command/deactivateProfitCenter.test.ts +60 -0
  96. package/src/modules/accounting/command/deactivateProfitCenter.ts +42 -0
  97. package/src/modules/accounting/command/deleteAllocationCycle.generated.ts +6 -0
  98. package/src/modules/accounting/command/deleteAllocationCycle.test.ts +90 -0
  99. package/src/modules/accounting/command/deleteAllocationCycle.ts +39 -0
  100. package/src/modules/accounting/command/deleteAllocationRule.generated.ts +6 -0
  101. package/src/modules/accounting/command/deleteAllocationRule.test.ts +98 -0
  102. package/src/modules/accounting/command/deleteAllocationRule.ts +40 -0
  103. package/src/modules/accounting/command/deleteBudget.generated.ts +6 -0
  104. package/src/modules/accounting/command/deleteBudget.test.ts +90 -0
  105. package/src/modules/accounting/command/deleteBudget.ts +35 -0
  106. package/src/modules/accounting/command/deleteBudgetLineItem.generated.ts +6 -0
  107. package/src/modules/accounting/command/deleteBudgetLineItem.test.ts +85 -0
  108. package/src/modules/accounting/command/deleteBudgetLineItem.ts +50 -0
  109. package/src/modules/accounting/command/deleteCostCenter.generated.ts +6 -0
  110. package/src/modules/accounting/command/deleteCostCenter.test.ts +79 -0
  111. package/src/modules/accounting/command/deleteCostCenter.ts +67 -0
  112. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.generated.ts +6 -0
  113. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.test.ts +59 -0
  114. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.ts +58 -0
  115. package/src/modules/accounting/command/deleteCostElement.generated.ts +6 -0
  116. package/src/modules/accounting/command/deleteCostElement.test.ts +58 -0
  117. package/src/modules/accounting/command/deleteCostElement.ts +33 -0
  118. package/src/modules/accounting/command/deleteInternalOrder.generated.ts +6 -0
  119. package/src/modules/accounting/command/deleteInternalOrder.test.ts +81 -0
  120. package/src/modules/accounting/command/deleteInternalOrder.ts +37 -0
  121. package/src/modules/accounting/command/deleteProfitCenter.generated.ts +6 -0
  122. package/src/modules/accounting/command/deleteProfitCenter.test.ts +68 -0
  123. package/src/modules/accounting/command/deleteProfitCenter.ts +39 -0
  124. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.generated.ts +6 -0
  125. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.test.ts +72 -0
  126. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.ts +61 -0
  127. package/src/modules/accounting/command/executeAllocationCycle.generated.ts +6 -0
  128. package/src/modules/accounting/command/executeAllocationCycle.test.ts +167 -0
  129. package/src/modules/accounting/command/executeAllocationCycle.ts +94 -0
  130. package/src/modules/accounting/command/finalizeVarianceReport.generated.ts +6 -0
  131. package/src/modules/accounting/command/finalizeVarianceReport.test.ts +60 -0
  132. package/src/modules/accounting/command/finalizeVarianceReport.ts +45 -0
  133. package/src/modules/accounting/command/generateVarianceReport.generated.ts +6 -0
  134. package/src/modules/accounting/command/generateVarianceReport.test.ts +386 -0
  135. package/src/modules/accounting/command/generateVarianceReport.ts +219 -0
  136. package/src/modules/accounting/command/invalidateAllocationCycle.generated.ts +6 -0
  137. package/src/modules/accounting/command/invalidateAllocationCycle.test.ts +84 -0
  138. package/src/modules/accounting/command/invalidateAllocationCycle.ts +45 -0
  139. package/src/modules/accounting/command/moveCostCenterHierarchyNode.generated.ts +6 -0
  140. package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +135 -0
  141. package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +81 -0
  142. package/src/modules/accounting/command/postAllocationCycle.generated.ts +6 -0
  143. package/src/modules/accounting/command/postAllocationCycle.test.ts +98 -0
  144. package/src/modules/accounting/command/postAllocationCycle.ts +65 -0
  145. package/src/modules/accounting/command/reactivateCostElement.generated.ts +6 -0
  146. package/src/modules/accounting/command/reactivateCostElement.test.ts +59 -0
  147. package/src/modules/accounting/command/reactivateCostElement.ts +41 -0
  148. package/src/modules/accounting/command/reactivateProfitCenter.generated.ts +6 -0
  149. package/src/modules/accounting/command/reactivateProfitCenter.test.ts +60 -0
  150. package/src/modules/accounting/command/reactivateProfitCenter.ts +42 -0
  151. package/src/modules/accounting/command/recordCommitment.generated.ts +6 -0
  152. package/src/modules/accounting/command/recordCommitment.test.ts +157 -0
  153. package/src/modules/accounting/command/recordCommitment.ts +113 -0
  154. package/src/modules/accounting/command/rejectBudget.generated.ts +6 -0
  155. package/src/modules/accounting/command/rejectBudget.test.ts +105 -0
  156. package/src/modules/accounting/command/rejectBudget.ts +51 -0
  157. package/src/modules/accounting/command/releaseCommitment.generated.ts +6 -0
  158. package/src/modules/accounting/command/releaseCommitment.test.ts +94 -0
  159. package/src/modules/accounting/command/releaseCommitment.ts +51 -0
  160. package/src/modules/accounting/command/releaseInternalOrder.generated.ts +6 -0
  161. package/src/modules/accounting/command/releaseInternalOrder.test.ts +74 -0
  162. package/src/modules/accounting/command/releaseInternalOrder.ts +38 -0
  163. package/src/modules/accounting/command/reverseAllocationCycle.generated.ts +6 -0
  164. package/src/modules/accounting/command/reverseAllocationCycle.test.ts +124 -0
  165. package/src/modules/accounting/command/reverseAllocationCycle.ts +63 -0
  166. package/src/modules/accounting/command/submitBudget.generated.ts +6 -0
  167. package/src/modules/accounting/command/submitBudget.test.ts +60 -0
  168. package/src/modules/accounting/command/submitBudget.ts +51 -0
  169. package/src/modules/accounting/command/technicallyCompleteInternalOrder.generated.ts +6 -0
  170. package/src/modules/accounting/command/technicallyCompleteInternalOrder.test.ts +74 -0
  171. package/src/modules/accounting/command/technicallyCompleteInternalOrder.ts +42 -0
  172. package/src/modules/accounting/command/updateAllocationCycle.generated.ts +6 -0
  173. package/src/modules/accounting/command/updateAllocationCycle.test.ts +112 -0
  174. package/src/modules/accounting/command/updateAllocationCycle.ts +41 -0
  175. package/src/modules/accounting/command/updateBudget.generated.ts +6 -0
  176. package/src/modules/accounting/command/updateBudget.test.ts +112 -0
  177. package/src/modules/accounting/command/updateBudget.ts +44 -0
  178. package/src/modules/accounting/command/updateCostCenter.generated.ts +6 -0
  179. package/src/modules/accounting/command/updateCostCenter.test.ts +105 -0
  180. package/src/modules/accounting/command/updateCostCenter.ts +79 -0
  181. package/src/modules/accounting/command/updateCostElement.generated.ts +6 -0
  182. package/src/modules/accounting/command/updateCostElement.test.ts +265 -0
  183. package/src/modules/accounting/command/updateCostElement.ts +158 -0
  184. package/src/modules/accounting/command/updateInternalOrder.generated.ts +6 -0
  185. package/src/modules/accounting/command/updateInternalOrder.test.ts +209 -0
  186. package/src/modules/accounting/command/updateInternalOrder.ts +88 -0
  187. package/src/modules/accounting/command/updateProfitCenter.generated.ts +6 -0
  188. package/src/modules/accounting/command/updateProfitCenter.test.ts +162 -0
  189. package/src/modules/accounting/command/updateProfitCenter.ts +73 -0
  190. package/src/modules/accounting/command/validateAllocationCycle.generated.ts +6 -0
  191. package/src/modules/accounting/command/validateAllocationCycle.test.ts +141 -0
  192. package/src/modules/accounting/command/validateAllocationCycle.ts +80 -0
  193. package/src/modules/accounting/db/allocationCycle.ts +59 -0
  194. package/src/modules/accounting/db/allocationResult.ts +58 -0
  195. package/src/modules/accounting/db/allocationRule.ts +48 -0
  196. package/src/modules/accounting/db/budget.ts +84 -0
  197. package/src/modules/accounting/db/budgetLineItem.ts +64 -0
  198. package/src/modules/accounting/db/commitment.ts +60 -0
  199. package/src/modules/accounting/db/costCenter.ts +73 -0
  200. package/src/modules/accounting/db/costCenterHierarchy.ts +37 -0
  201. package/src/modules/accounting/db/costCenterHierarchyNode.ts +48 -0
  202. package/src/modules/accounting/db/costElement.ts +56 -0
  203. package/src/modules/accounting/db/internalOrder.ts +69 -0
  204. package/src/modules/accounting/db/planVersion.ts +47 -0
  205. package/src/modules/accounting/db/profitCenter.ts +52 -0
  206. package/src/modules/accounting/db/profitCenterHierarchy.ts +36 -0
  207. package/src/modules/accounting/db/profitCenterHierarchyAssignment.ts +62 -0
  208. package/src/modules/accounting/db/profitCenterHierarchyNode.ts +48 -0
  209. package/src/modules/accounting/db/varianceReport.ts +54 -0
  210. package/src/modules/accounting/db/varianceReportLine.ts +62 -0
  211. package/src/modules/accounting/docs/commands/ActivateBudget.md +54 -0
  212. package/src/modules/accounting/docs/commands/ActivateCostElement.md +43 -0
  213. package/src/modules/accounting/docs/commands/ActivateProfitCenter.md +43 -0
  214. package/src/modules/accounting/docs/commands/ApproveBudget.md +46 -0
  215. package/src/modules/accounting/docs/commands/AssignCostCenterToHierarchyNode.md +46 -0
  216. package/src/modules/accounting/docs/commands/AssignProfitCenterToHierarchyNode.md +47 -0
  217. package/src/modules/accounting/docs/commands/CloseBudget.md +47 -0
  218. package/src/modules/accounting/docs/commands/CloseInternalOrder.md +45 -0
  219. package/src/modules/accounting/docs/commands/ConsumeCommitment.md +53 -0
  220. package/src/modules/accounting/docs/commands/CreateAllocationCycle.md +55 -0
  221. package/src/modules/accounting/docs/commands/CreateAllocationRule.md +60 -0
  222. package/src/modules/accounting/docs/commands/CreateBudget.md +65 -0
  223. package/src/modules/accounting/docs/commands/CreateBudgetLineItem.md +66 -0
  224. package/src/modules/accounting/docs/commands/CreateCostCenter.md +64 -0
  225. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchy.md +45 -0
  226. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchyNode.md +61 -0
  227. package/src/modules/accounting/docs/commands/CreateCostElement.md +91 -0
  228. package/src/modules/accounting/docs/commands/CreateInternalOrder.md +72 -0
  229. package/src/modules/accounting/docs/commands/CreatePlanVersion.md +59 -0
  230. package/src/modules/accounting/docs/commands/CreateProfitCenter.md +63 -0
  231. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchy.md +45 -0
  232. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchyNode.md +60 -0
  233. package/src/modules/accounting/docs/commands/DeactivateCostElement.md +43 -0
  234. package/src/modules/accounting/docs/commands/DeactivateProfitCenter.md +44 -0
  235. package/src/modules/accounting/docs/commands/DeleteAllocationCycle.md +46 -0
  236. package/src/modules/accounting/docs/commands/DeleteAllocationRule.md +45 -0
  237. package/src/modules/accounting/docs/commands/DeleteBudget.md +46 -0
  238. package/src/modules/accounting/docs/commands/DeleteBudgetLineItem.md +45 -0
  239. package/src/modules/accounting/docs/commands/DeleteCostCenter.md +50 -0
  240. package/src/modules/accounting/docs/commands/DeleteCostCenterHierarchyNode.md +45 -0
  241. package/src/modules/accounting/docs/commands/DeleteCostElement.md +43 -0
  242. package/src/modules/accounting/docs/commands/DeleteInternalOrder.md +45 -0
  243. package/src/modules/accounting/docs/commands/DeleteProfitCenter.md +46 -0
  244. package/src/modules/accounting/docs/commands/DeleteProfitCenterHierarchyNode.md +46 -0
  245. package/src/modules/accounting/docs/commands/ExecuteAllocationCycle.md +54 -0
  246. package/src/modules/accounting/docs/commands/FinalizeVarianceReport.md +44 -0
  247. package/src/modules/accounting/docs/commands/GenerateVarianceReport.md +83 -0
  248. package/src/modules/accounting/docs/commands/InvalidateAllocationCycle.md +45 -0
  249. package/src/modules/accounting/docs/commands/MoveCostCenterHierarchyNode.md +51 -0
  250. package/src/modules/accounting/docs/commands/PostAllocationCycle.md +58 -0
  251. package/src/modules/accounting/docs/commands/ReactivateCostElement.md +43 -0
  252. package/src/modules/accounting/docs/commands/ReactivateProfitCenter.md +43 -0
  253. package/src/modules/accounting/docs/commands/RecordCommitment.md +60 -0
  254. package/src/modules/accounting/docs/commands/RejectBudget.md +49 -0
  255. package/src/modules/accounting/docs/commands/ReleaseCommitment.md +45 -0
  256. package/src/modules/accounting/docs/commands/ReleaseInternalOrder.md +44 -0
  257. package/src/modules/accounting/docs/commands/ReverseAllocationCycle.md +55 -0
  258. package/src/modules/accounting/docs/commands/SubmitBudget.md +47 -0
  259. package/src/modules/accounting/docs/commands/TechnicallyCompleteInternalOrder.md +44 -0
  260. package/src/modules/accounting/docs/commands/UpdateAllocationCycle.md +45 -0
  261. package/src/modules/accounting/docs/commands/UpdateBudget.md +47 -0
  262. package/src/modules/accounting/docs/commands/UpdateCostCenter.md +50 -0
  263. package/src/modules/accounting/docs/commands/UpdateCostElement.md +82 -0
  264. package/src/modules/accounting/docs/commands/UpdateInternalOrder.md +62 -0
  265. package/src/modules/accounting/docs/commands/UpdateProfitCenter.md +56 -0
  266. package/src/modules/accounting/docs/commands/ValidateAllocationCycle.md +57 -0
  267. package/src/modules/accounting/docs/features/budget-management.md +147 -0
  268. package/src/modules/accounting/docs/features/cost-allocation.md +129 -0
  269. package/src/modules/accounting/docs/features/cost-center-management.md +118 -0
  270. package/src/modules/accounting/docs/features/cost-element-management.md +114 -0
  271. package/src/modules/accounting/docs/features/internal-order-management.md +111 -0
  272. package/src/modules/accounting/docs/features/profit-center-management.md +120 -0
  273. package/src/modules/accounting/docs/features/variance-analysis.md +130 -0
  274. package/src/modules/accounting/docs/models/AllocationCycle.md +81 -0
  275. package/src/modules/accounting/docs/models/AllocationResult.md +37 -0
  276. package/src/modules/accounting/docs/models/AllocationRule.md +41 -0
  277. package/src/modules/accounting/docs/models/Budget.md +77 -0
  278. package/src/modules/accounting/docs/models/BudgetLineItem.md +40 -0
  279. package/src/modules/accounting/docs/models/Commitment.md +45 -0
  280. package/src/modules/accounting/docs/models/CostCenter.md +51 -0
  281. package/src/modules/accounting/docs/models/CostCenterHierarchy.md +38 -0
  282. package/src/modules/accounting/docs/models/CostCenterHierarchyNode.md +41 -0
  283. package/src/modules/accounting/docs/models/CostElement.md +66 -0
  284. package/src/modules/accounting/docs/models/InternalOrder.md +67 -0
  285. package/src/modules/accounting/docs/models/PlanVersion.md +36 -0
  286. package/src/modules/accounting/docs/models/ProfitCenter.md +66 -0
  287. package/src/modules/accounting/docs/models/ProfitCenterHierarchy.md +36 -0
  288. package/src/modules/accounting/docs/models/ProfitCenterHierarchyAssignment.md +36 -0
  289. package/src/modules/accounting/docs/models/ProfitCenterHierarchyNode.md +39 -0
  290. package/src/modules/accounting/docs/models/VarianceReport.md +58 -0
  291. package/src/modules/accounting/docs/models/VarianceReportLine.md +43 -0
  292. package/src/modules/accounting/docs/queries/CalculateBudgetAvailability.md +64 -0
  293. package/src/modules/accounting/docs/queries/GetAllocationCycle.md +43 -0
  294. package/src/modules/accounting/docs/queries/GetBudget.md +42 -0
  295. package/src/modules/accounting/docs/queries/GetCostCenter.md +38 -0
  296. package/src/modules/accounting/docs/queries/GetCostCenterHierarchy.md +45 -0
  297. package/src/modules/accounting/docs/queries/GetCostElement.md +39 -0
  298. package/src/modules/accounting/docs/queries/GetInternalOrder.md +42 -0
  299. package/src/modules/accounting/docs/queries/GetProfitCenter.md +38 -0
  300. package/src/modules/accounting/docs/queries/GetProfitCenterHierarchy.md +46 -0
  301. package/src/modules/accounting/docs/queries/GetVarianceReport.md +45 -0
  302. package/src/modules/accounting/docs/queries/ListAllocationCycles.md +63 -0
  303. package/src/modules/accounting/docs/queries/ListBudgets.md +70 -0
  304. package/src/modules/accounting/docs/queries/ListCostCenters.md +55 -0
  305. package/src/modules/accounting/docs/queries/ListCostElements.md +63 -0
  306. package/src/modules/accounting/docs/queries/ListInternalOrders.md +62 -0
  307. package/src/modules/accounting/docs/queries/ListProfitCenters.md +49 -0
  308. package/src/modules/accounting/generated/enums.ts +110 -0
  309. package/src/modules/accounting/generated/kysely-tailordb.ts +302 -0
  310. package/src/modules/accounting/index.ts +2 -0
  311. package/src/modules/accounting/lib/_db_deps.ts +70 -0
  312. package/src/modules/accounting/lib/actualAmounts.ts +93 -0
  313. package/src/modules/accounting/lib/allocationPosting.ts +152 -0
  314. package/src/modules/accounting/lib/errors.generated.ts +432 -0
  315. package/src/modules/accounting/lib/permissions.generated.ts +61 -0
  316. package/src/modules/accounting/lib/types.ts +114 -0
  317. package/src/modules/accounting/module.ts +428 -0
  318. package/src/modules/accounting/permissions.ts +3 -0
  319. package/src/modules/accounting/query/calculateBudgetAvailability.generated.ts +5 -0
  320. package/src/modules/accounting/query/calculateBudgetAvailability.test.ts +229 -0
  321. package/src/modules/accounting/query/calculateBudgetAvailability.ts +147 -0
  322. package/src/modules/accounting/query/getAllocationCycle.generated.ts +5 -0
  323. package/src/modules/accounting/query/getAllocationCycle.test.ts +94 -0
  324. package/src/modules/accounting/query/getAllocationCycle.ts +37 -0
  325. package/src/modules/accounting/query/getBudget.generated.ts +5 -0
  326. package/src/modules/accounting/query/getBudget.test.ts +80 -0
  327. package/src/modules/accounting/query/getBudget.ts +31 -0
  328. package/src/modules/accounting/query/getCostCenter.generated.ts +5 -0
  329. package/src/modules/accounting/query/getCostCenter.test.ts +50 -0
  330. package/src/modules/accounting/query/getCostCenter.ts +33 -0
  331. package/src/modules/accounting/query/getCostCenterHierarchy.generated.ts +5 -0
  332. package/src/modules/accounting/query/getCostCenterHierarchy.test.ts +100 -0
  333. package/src/modules/accounting/query/getCostCenterHierarchy.ts +80 -0
  334. package/src/modules/accounting/query/getCostElement.generated.ts +5 -0
  335. package/src/modules/accounting/query/getCostElement.test.ts +57 -0
  336. package/src/modules/accounting/query/getCostElement.ts +21 -0
  337. package/src/modules/accounting/query/getInternalOrder.generated.ts +5 -0
  338. package/src/modules/accounting/query/getInternalOrder.test.ts +73 -0
  339. package/src/modules/accounting/query/getInternalOrder.ts +21 -0
  340. package/src/modules/accounting/query/getProfitCenter.generated.ts +5 -0
  341. package/src/modules/accounting/query/getProfitCenter.test.ts +65 -0
  342. package/src/modules/accounting/query/getProfitCenter.ts +31 -0
  343. package/src/modules/accounting/query/getProfitCenterHierarchy.generated.ts +5 -0
  344. package/src/modules/accounting/query/getProfitCenterHierarchy.test.ts +97 -0
  345. package/src/modules/accounting/query/getProfitCenterHierarchy.ts +87 -0
  346. package/src/modules/accounting/query/getVarianceReport.generated.ts +5 -0
  347. package/src/modules/accounting/query/getVarianceReport.test.ts +108 -0
  348. package/src/modules/accounting/query/getVarianceReport.ts +31 -0
  349. package/src/modules/accounting/query/listAllocationCycles.generated.ts +5 -0
  350. package/src/modules/accounting/query/listAllocationCycles.test.ts +152 -0
  351. package/src/modules/accounting/query/listAllocationCycles.ts +96 -0
  352. package/src/modules/accounting/query/listBudgets.generated.ts +5 -0
  353. package/src/modules/accounting/query/listBudgets.test.ts +150 -0
  354. package/src/modules/accounting/query/listBudgets.ts +85 -0
  355. package/src/modules/accounting/query/listCostCenters.generated.ts +5 -0
  356. package/src/modules/accounting/query/listCostCenters.test.ts +111 -0
  357. package/src/modules/accounting/query/listCostCenters.ts +71 -0
  358. package/src/modules/accounting/query/listCostElements.generated.ts +5 -0
  359. package/src/modules/accounting/query/listCostElements.test.ts +138 -0
  360. package/src/modules/accounting/query/listCostElements.ts +105 -0
  361. package/src/modules/accounting/query/listInternalOrders.generated.ts +5 -0
  362. package/src/modules/accounting/query/listInternalOrders.test.ts +129 -0
  363. package/src/modules/accounting/query/listInternalOrders.ts +94 -0
  364. package/src/modules/accounting/query/listProfitCenters.generated.ts +5 -0
  365. package/src/modules/accounting/query/listProfitCenters.test.ts +94 -0
  366. package/src/modules/accounting/query/listProfitCenters.ts +56 -0
  367. package/src/modules/accounting/seed/index.ts +19 -0
  368. package/src/modules/accounting/tailor.config.ts +13 -0
  369. package/src/modules/accounting/testing/commandTestUtils.ts +35 -0
  370. package/src/modules/accounting/testing/fixtures.ts +502 -0
  371. package/src/modules/audit/command/logAuditEvent.ts +43 -38
  372. package/src/modules/audit/command/updateAuditPolicy.ts +2 -2
  373. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +1 -1
  374. package/src/modules/audit/module.ts +4 -0
  375. package/src/modules/business-partner/command/updateContactPerson.ts +3 -4
  376. package/src/modules/business-partner/command/updatePartner.ts +13 -6
  377. package/src/modules/business-partner/command/updatePartnerAddress.ts +13 -6
  378. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +3 -4
  379. package/src/modules/business-partner/command/updatePartnerIdentification.ts +3 -4
  380. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +3 -3
  381. package/src/modules/business-partner/docs/commands/UpdatePartner.md +2 -2
  382. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +2 -2
  383. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +2 -2
  384. package/src/modules/coa-management/command/updateAccount.ts +3 -3
  385. package/src/modules/coa-management/command/updateAccountGroup.test.ts +22 -0
  386. package/src/modules/coa-management/command/updateAccountGroup.ts +30 -18
  387. package/src/modules/coa-management/command/updateChartOfAccounts.ts +3 -4
  388. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +4 -3
  389. package/src/modules/finance-ledger/command/updateFiscalYear.ts +2 -3
  390. package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +0 -17
  391. package/src/modules/finance-ledger/command/updateJournalEntry.ts +2 -10
  392. package/src/modules/finance-ledger/command/updateJournalLine.ts +2 -3
  393. package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +1 -4
  394. package/src/modules/inventory/command/updateLot.test.ts +1 -1
  395. package/src/modules/inventory/command/updateLot.ts +2 -3
  396. package/src/modules/inventory/command/updateStockMovement.ts +2 -3
  397. package/src/modules/inventory/command/updateStorageLocation.ts +12 -17
  398. package/src/modules/inventory/command/updateValuationPolicy.ts +2 -3
  399. package/src/modules/inventory/command/updateWarehouse.ts +2 -3
  400. package/src/modules/inventory/docs/commands/UpdateLot.md +3 -3
  401. package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +6 -6
  402. package/src/modules/inventory/docs/commands/UpdateWarehouse.md +2 -2
  403. package/src/modules/item-management/command/updateItem.test.ts +16 -12
  404. package/src/modules/item-management/command/updateItem.ts +47 -31
  405. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +15 -16
  406. package/src/modules/item-management/command/updateTaxonomyNode.ts +42 -29
  407. package/src/modules/item-management/docs/commands/UpdateItem.md +7 -11
  408. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +10 -14
  409. package/src/modules/manufacturing/command/updateBillOfMaterial.ts +3 -4
  410. package/src/modules/manufacturing/command/updateProductionOrder.ts +3 -4
  411. package/src/modules/manufacturing/command/updateRouting.ts +3 -4
  412. package/src/modules/manufacturing/command/updateWorkCenter.test.ts +16 -7
  413. package/src/modules/manufacturing/command/updateWorkCenter.ts +41 -38
  414. package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +2 -0
  415. package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +2 -0
  416. package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +1 -0
  417. package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +1 -0
  418. package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +6 -5
  419. package/src/modules/manufacturing/docs/models/BillOfMaterialLine.md +42 -0
  420. package/src/modules/manufacturing/docs/models/CostVarianceLine.md +36 -0
  421. package/src/modules/manufacturing/docs/models/ManufacturingCostLine.md +37 -0
  422. package/src/modules/manufacturing/docs/models/ManufacturingCostSettlementRecord.md +34 -0
  423. package/src/modules/manufacturing/docs/models/ProductionOrderBomSnapshot.md +35 -0
  424. package/src/modules/manufacturing/docs/models/ProductionOrderCostBaseline.md +36 -0
  425. package/src/modules/manufacturing/docs/models/ProductionOrderMaterialRequirement.md +35 -0
  426. package/src/modules/manufacturing/docs/models/ProductionOrderRoutingSnapshot.md +34 -0
  427. package/src/modules/manufacturing/docs/models/RoutingOperation.md +40 -0
  428. package/src/modules/manufacturing/docs/models/WorkOrderExecutionEvent.md +38 -0
  429. package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +1 -0
  430. package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +1 -0
  431. package/src/modules/organization/command/updateCompany.test.ts +6 -6
  432. package/src/modules/organization/command/updateCompany.ts +3 -4
  433. package/src/modules/organization/command/updateDepartment.test.ts +7 -7
  434. package/src/modules/organization/command/updateDepartment.ts +13 -12
  435. package/src/modules/organization/command/updateSite.test.ts +10 -10
  436. package/src/modules/organization/command/updateSite.ts +3 -4
  437. package/src/modules/organization/docs/commands/UpdateCompany.md +6 -6
  438. package/src/modules/organization/docs/commands/UpdateDepartment.md +9 -10
  439. package/src/modules/organization/docs/commands/UpdateSite.md +12 -12
  440. package/src/modules/product-management/command/updateProduct.test.ts +17 -11
  441. package/src/modules/product-management/command/updateProduct.ts +45 -28
  442. package/src/modules/product-management/command/updateProductAttribute.test.ts +16 -21
  443. package/src/modules/product-management/command/updateProductAttribute.ts +40 -26
  444. package/src/modules/product-management/command/updateProductAttributeValue.ts +2 -3
  445. package/src/modules/product-management/command/updateProductCategory.test.ts +14 -19
  446. package/src/modules/product-management/command/updateProductCategory.ts +42 -26
  447. package/src/modules/product-management/docs/commands/UpdateProduct.md +16 -20
  448. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +10 -14
  449. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +10 -14
  450. package/src/modules/purchase/command/updateGoodsReceipt.ts +2 -3
  451. package/src/modules/purchase/command/updatePurchaseBill.ts +2 -3
  452. package/src/modules/purchase/command/updatePurchaseOrder.ts +2 -3
  453. package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +2 -3
  454. package/src/modules/purchase/command/updatePurchasePriceList.ts +2 -3
  455. package/src/modules/purchase/command/updatePurchasePriceRule.ts +2 -3
  456. package/src/modules/sales/command/updateChannel.test.ts +4 -4
  457. package/src/modules/sales/command/updateChannel.ts +2 -3
  458. package/src/modules/sales/command/updateListing.test.ts +2 -2
  459. package/src/modules/sales/command/updateListing.ts +2 -3
  460. package/src/modules/sales/command/updateSalesCreditNote.test.ts +2 -2
  461. package/src/modules/sales/command/updateSalesCreditNote.ts +2 -3
  462. package/src/modules/sales/command/updateSalesInvoice.test.ts +2 -2
  463. package/src/modules/sales/command/updateSalesInvoice.ts +2 -3
  464. package/src/modules/sales/command/updateSalesOrder.test.ts +3 -3
  465. package/src/modules/sales/command/updateSalesOrder.ts +2 -3
  466. package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +2 -2
  467. package/src/modules/sales/command/updateSalesPaymentTerm.ts +2 -3
  468. package/src/modules/sales/command/updateSalesPriceList.test.ts +3 -3
  469. package/src/modules/sales/command/updateSalesPriceList.ts +2 -3
  470. package/src/modules/sales/command/updateSalesPriceRule.test.ts +3 -3
  471. package/src/modules/sales/command/updateSalesPriceRule.ts +2 -3
  472. package/src/modules/sales/command/updateShipment.test.ts +2 -2
  473. package/src/modules/sales/command/updateShipment.ts +2 -3
  474. package/src/modules/sales/docs/commands/UpdateChannel.md +4 -4
  475. package/src/modules/sales/docs/commands/UpdateListing.md +2 -2
  476. package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +2 -2
  477. package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +2 -2
  478. package/src/modules/sales/docs/commands/UpdateSalesOrder.md +3 -3
  479. package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +2 -2
  480. package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +3 -3
  481. package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +3 -3
  482. package/src/modules/sales/docs/commands/UpdateShipment.md +2 -2
  483. package/src/modules/user-management/README.md +2 -1
  484. package/src/modules/user-management/command/updateOwnProfile.generated.ts +6 -0
  485. package/src/modules/user-management/command/updateOwnProfile.test.ts +191 -0
  486. package/src/modules/user-management/command/updateOwnProfile.ts +82 -0
  487. package/src/modules/user-management/command/updateUser.generated.ts +6 -0
  488. package/src/modules/user-management/command/updateUser.test.ts +195 -0
  489. package/src/modules/user-management/command/updateUser.ts +76 -0
  490. package/src/modules/user-management/docs/commands/UpdateOwnProfile.md +68 -0
  491. package/src/modules/user-management/docs/commands/UpdateUser.md +67 -0
  492. package/src/modules/user-management/docs/features/user-account-management.md +28 -3
  493. package/src/modules/user-management/docs/models/User.md +2 -0
  494. package/src/modules/user-management/lib/errors.generated.ts +5 -0
  495. package/src/modules/user-management/lib/permissions.generated.ts +2 -0
  496. package/src/modules/user-management/module.ts +5 -0
  497. package/src/modules/user-management/seed/index.ts +19 -0
  498. package/templates/scaffold/app/backend/seed/data/AuditEntry.schema.ts +20 -0
  499. package/templates/scaffold/app/backend/seed/data/AuditPolicy.jsonl +7 -0
  500. package/templates/scaffold/app/backend/seed/data/AuditPolicy.schema.ts +15 -0
  501. package/templates/scaffold/app/backend/seed/data/AuditableEntity.jsonl +4 -0
  502. package/templates/scaffold/app/backend/seed/data/AuditableEntity.schema.ts +20 -0
  503. package/templates/scaffold/app/backend/seed/data/ChangeDetail.schema.ts +20 -0
  504. package/templates/scaffold/app/backend/seed/data/Company.schema.ts +15 -0
  505. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +13 -0
  506. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +1 -1
  507. package/templates/scaffold/app/backend/seed/data/PolicyFieldRule.schema.ts +20 -0
  508. package/templates/scaffold/app/backend/seed/data/Role.jsonl +1 -0
  509. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +1 -1
  510. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +13 -0
  511. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +1 -1
  512. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -1
  513. package/templates/scaffold/app/backend/seed/data/User.schema.ts +1 -1
  514. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +1 -0
  515. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +1 -1
  516. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -1
  517. package/templates/scaffold/app/backend/seed/exec.mjs +12 -0
  518. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +2 -2
  519. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +2 -2
  520. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +62 -0
  521. package/templates/scaffold/app/backend/src/modules-db.ts +13 -0
  522. package/templates/scaffold/app/backend/src/modules.ts +3 -5
  523. package/templates/scaffold/app/backend/src/resolvers/assignPermissionToRole.ts +70 -0
  524. package/templates/scaffold/app/backend/src/resolvers/assignRoleToUser.ts +72 -0
  525. package/templates/scaffold/app/backend/src/resolvers/createRole.ts +92 -0
  526. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +113 -13
  527. package/templates/scaffold/app/backend/src/resolvers/deactivateUser.ts +67 -0
  528. package/templates/scaffold/app/backend/src/resolvers/reactivateUser.ts +63 -0
  529. package/templates/scaffold/app/backend/src/resolvers/revokePermissionFromRole.ts +72 -0
  530. package/templates/scaffold/app/backend/src/resolvers/revokeRoleFromUser.ts +72 -0
  531. package/templates/scaffold/app/backend/src/resolvers/updateOwnProfile.ts +107 -0
  532. package/templates/scaffold/app/backend/src/resolvers/updateUserProfile.ts +107 -0
  533. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +79 -0
  534. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log.test.ts +86 -0
  535. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +103 -0
  536. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--create-role.test.ts +61 -0
  537. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +89 -0
  538. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--update-role-permissions.test.ts +125 -0
  539. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--browse-user-list.test.ts +91 -0
  540. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--create-user-account.test.ts +97 -0
  541. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +131 -0
  542. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +85 -0
  543. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +158 -0
  544. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-own-profile.test.ts +30 -0
  545. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +98 -0
  546. package/templates/scaffold/app/backend/tailor.config.ts +6 -2
  547. package/templates/scaffold/app/docs/actors/user.md +11 -0
  548. package/templates/scaffold/app/docs/business-flow/audit-log/README.md +31 -0
  549. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log-detail.md +35 -0
  550. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log.md +44 -0
  551. package/templates/scaffold/app/docs/business-flow/role-management/README.md +33 -0
  552. package/templates/scaffold/app/docs/business-flow/role-management/story/user--assign-role-to-user.md +35 -0
  553. package/templates/scaffold/app/docs/business-flow/role-management/story/user--create-role.md +41 -0
  554. package/templates/scaffold/app/docs/business-flow/role-management/story/user--remove-role-from-user.md +33 -0
  555. package/templates/scaffold/app/docs/business-flow/role-management/story/user--update-role-permissions.md +41 -0
  556. package/templates/scaffold/app/docs/business-flow/user-lifecycle/README.md +48 -0
  557. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--browse-user-list.md +38 -0
  558. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--create-user-account.md +45 -0
  559. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--toggle-user-status.md +38 -0
  560. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-own-profile.md +36 -0
  561. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-user-profile.md +41 -0
  562. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-own-profile.md +30 -0
  563. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-user-detail.md +33 -0
  564. package/templates/scaffold/app/docs/resolver/assignPermissionToRole.md +16 -0
  565. package/templates/scaffold/app/docs/resolver/assignRoleToUser.md +17 -0
  566. package/templates/scaffold/app/docs/resolver/createRole.md +17 -0
  567. package/templates/scaffold/app/docs/resolver/createUser.md +23 -0
  568. package/templates/scaffold/app/docs/resolver/deactivateUser.md +17 -0
  569. package/templates/scaffold/app/docs/resolver/reactivateUser.md +16 -0
  570. package/templates/scaffold/app/docs/resolver/revokePermissionFromRole.md +17 -0
  571. package/templates/scaffold/app/docs/resolver/revokeRoleFromUser.md +17 -0
  572. package/templates/scaffold/app/docs/resolver/updateOwnProfile.md +20 -0
  573. package/templates/scaffold/app/docs/resolver/updateUserProfile.md +19 -0
  574. package/templates/scaffold/app/docs/screen/audit-entry-detail.md +30 -0
  575. package/templates/scaffold/app/docs/screen/audit-entry-list.md +25 -0
  576. package/templates/scaffold/app/docs/screen/my-profile-edit-form.md +22 -0
  577. package/templates/scaffold/app/docs/screen/my-profile.md +27 -0
  578. package/templates/scaffold/app/docs/screen/role-create-form.md +23 -0
  579. package/templates/scaffold/app/docs/screen/role-detail.md +27 -0
  580. package/templates/scaffold/app/docs/screen/role-edit-form.md +21 -0
  581. package/templates/scaffold/app/docs/screen/role-list.md +23 -0
  582. package/templates/scaffold/app/docs/screen/user-create-form.md +23 -0
  583. package/templates/scaffold/app/docs/screen/user-detail.md +33 -0
  584. package/templates/scaffold/app/docs/screen/user-edit-form.md +22 -0
  585. package/templates/scaffold/app/docs/screen/user-list.md +24 -0
  586. package/templates/scaffold/app/frontend/package.json +1 -1
  587. package/templates/scaffold/app/frontend/src/App.tsx +4 -0
  588. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +1 -1
  589. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +59 -31
  590. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1411 -688
  591. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +1 -1
  592. package/templates/scaffold/app/frontend/src/lib/permission-groups.ts +59 -0
  593. package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/components/audit-entry-detail.tsx +102 -0
  594. package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/page.tsx +65 -0
  595. package/templates/scaffold/app/frontend/src/pages/user-management/audit/components/audit-entries-table.tsx +90 -0
  596. package/templates/scaffold/app/frontend/src/pages/user-management/audit/page.tsx +52 -0
  597. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/components/edit-profile-form.tsx +125 -0
  598. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/page.tsx +19 -0
  599. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +41 -21
  600. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-actions.tsx +26 -0
  601. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-detail.tsx +69 -0
  602. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/components/edit-role-form.tsx +192 -0
  603. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/page.tsx +51 -0
  604. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/page.tsx +56 -0
  605. package/templates/scaffold/app/frontend/src/pages/user-management/role/components/roles-table.tsx +85 -0
  606. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/components/create-role-form.tsx +204 -0
  607. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/page.tsx +19 -0
  608. package/templates/scaffold/app/frontend/src/pages/user-management/role/page.tsx +60 -0
  609. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-actions.tsx +216 -0
  610. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +97 -33
  611. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/components/edit-user-form.tsx +115 -0
  612. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/page.tsx +51 -0
  613. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +8 -2
  614. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +43 -42
  615. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +120 -45
  616. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +3 -4
  617. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +8 -1
  618. package/templates/scaffold/module/eslint.config.js +8 -0
  619. package/templates/scaffold/project/__dot__gitignore +1 -0
  620. package/templates/scaffold/project/__pnpm-workspace.yaml +3 -0
  621. package/templates/scaffold/project/apps/.gitkeep +0 -0
  622. package/templates/scaffold/project/modules/.gitkeep +0 -0
  623. package/templates/scaffold/project/package.json +15 -0
  624. package/templates/workflows/erp-kit-check.yml +10 -4
  625. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +0 -39
  626. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +0 -60
  627. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +0 -75
  628. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +0 -21
  629. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +0 -90
  630. /package/src/modules/{supplier-portal → accounting/executor}/.gitkeep +0 -0
  631. /package/templates/scaffold/app/{docs/actors/.gitkeep → backend/seed/data/AuditEntry.jsonl} +0 -0
  632. /package/templates/scaffold/app/{docs/business-flow/.gitkeep → backend/seed/data/ChangeDetail.jsonl} +0 -0
  633. /package/templates/scaffold/app/{docs/resolver/.gitkeep → backend/seed/data/Company.jsonl} +0 -0
  634. /package/templates/scaffold/app/{docs/screen/.gitkeep → backend/seed/data/PolicyFieldRule.jsonl} +0 -0
  635. /package/templates/{config → scaffold/project}/license.config.json +0 -0
@@ -0,0 +1,55 @@
1
+ # CreateAllocationCycle
2
+
3
+ ## Overview
4
+
5
+ createAllocationCycle establishes a new allocation cycle in DRAFT status. An allocation cycle groups a set of allocation rules that define how overhead costs are distributed from sender cost centers to receiver cost objects. It requires a name, allocation type (ASSESSMENT or DISTRIBUTION), a company reference, and an accounting period reference.
6
+
7
+ ## Business Rules
8
+
9
+ - Allocation cycle is always created in DRAFT status
10
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
11
+ - Requires a valid `name`
12
+ - Requires a valid `type` of either ASSESSMENT or DISTRIBUTION
13
+ - Requires a valid `accountingPeriodId` referencing an existing accounting period from finance-ledger
14
+ - Allocation cycles are scoped to a company; cycles from different companies are fully isolated
15
+ - Emits an audit event recording the acting user, timestamp, and initial field values
16
+
17
+ ## Process Flow
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ A[Receive create allocation cycle request] --> B{Company exists and is ACTIVE?}
22
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
23
+ B -->|Yes| D{Valid allocation type?}
24
+ D -->|No| E[Return error: INVALID_ALLOCATION_TYPE]
25
+ D -->|Yes| F{Accounting period exists?}
26
+ F -->|No| G[Return error: ACCOUNTING_PERIOD_NOT_FOUND]
27
+ F -->|Yes| H{Name provided?}
28
+ H -->|No| I[Return error: INVALID_NAME]
29
+ H -->|Yes| J[Create allocation cycle in DRAFT status]
30
+ J --> K[Emit audit event]
31
+ K --> L[Return created allocation cycle]
32
+ ```
33
+
34
+ ## External Dependencies
35
+
36
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
37
+ - [finance-ledger::getAccountingPeriod](../../../finance-ledger/docs/queries/GetAccountingPeriod.md) — Validates that the referenced accounting period exists
38
+
39
+ ## Error Scenarios
40
+
41
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
42
+ - **INVALID_ALLOCATION_TYPE**: Type is not ASSESSMENT or DISTRIBUTION
43
+ - **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
44
+ - **INVALID_NAME**: Name is missing or empty
45
+
46
+ ## Test Cases
47
+
48
+ - creates allocation cycle in DRAFT status with required fields
49
+ - returns error when company does not exist
50
+ - returns error when company is not ACTIVE
51
+ - returns error when allocation type is invalid
52
+ - returns error when accounting period does not exist
53
+ - returns error when name is missing
54
+ - allocation cycles from different companies are isolated
55
+ - emits audit event recording acting user, timestamp, and initial field values
@@ -0,0 +1,60 @@
1
+ # CreateAllocationRule
2
+
3
+ ## Overview
4
+
5
+ createAllocationRule adds an allocation rule to a DRAFT allocation cycle. Each rule defines a sender cost center, one or more receiver cost objects (cost center, profit center, or internal order), and the allocation percentage for each receiver. The sender cannot also appear as a receiver within the same rule. Percentage values must be positive.
6
+
7
+ ## Business Rules
8
+
9
+ - Allocation cycle must exist and be in DRAFT status
10
+ - Rules cannot be added to cycles in VALIDATED, EXECUTED, POSTED, or REVERSED status
11
+ - Requires a valid sender cost center reference
12
+ - Requires one or more valid receiver cost objects (cost center, profit center, or internal order)
13
+ - Sender cost center cannot also be a receiver within the same rule set
14
+ - Percentage values for each receiver must be positive (greater than zero)
15
+ - Emits an audit event recording the rule creation and acting user
16
+
17
+ ## Process Flow
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ A[Receive create allocation rule request] --> B{Allocation cycle exists?}
22
+ B -->|No| C[Return error: ALLOCATION_CYCLE_NOT_FOUND]
23
+ B -->|Yes| D{Status is DRAFT?}
24
+ D -->|No| E[Return error: INVALID_STATE]
25
+ D -->|Yes| F{Sender cost center valid?}
26
+ F -->|No| G[Return error: SENDER_NOT_FOUND]
27
+ F -->|Yes| H{All receivers valid?}
28
+ H -->|No| I[Return error: RECEIVER_NOT_FOUND]
29
+ H -->|Yes| J{Sender appears as receiver?}
30
+ J -->|Yes| K[Return error: SENDER_IS_RECEIVER]
31
+ J -->|No| L{All percentages positive?}
32
+ L -->|No| M[Return error: INVALID_PERCENTAGE]
33
+ L -->|Yes| N[Create allocation rule]
34
+ N --> O[Emit audit event]
35
+ O --> P[Return created allocation rule]
36
+ ```
37
+
38
+ ## External Dependencies
39
+
40
+ - None
41
+
42
+ ## Error Scenarios
43
+
44
+ - **ALLOCATION_CYCLE_NOT_FOUND**: Allocation cycle with the specified ID does not exist
45
+ - **INVALID_STATE**: Allocation cycle is not in DRAFT status
46
+ - **SENDER_NOT_FOUND**: Referenced sender cost center does not exist
47
+ - **RECEIVER_NOT_FOUND**: One or more referenced receiver cost objects do not exist
48
+ - **SENDER_IS_RECEIVER**: Sender cost center appears as a receiver in the same rule
49
+ - **INVALID_PERCENTAGE**: One or more percentage values are not positive
50
+
51
+ ## Test Cases
52
+
53
+ - adds an allocation rule to a DRAFT allocation cycle
54
+ - returns error when allocation cycle does not exist
55
+ - returns error when allocation cycle is not in DRAFT status
56
+ - returns error when sender cost center does not exist
57
+ - returns error when a receiver cost object does not exist
58
+ - returns error when sender appears as a receiver
59
+ - returns error when percentage value is zero or negative
60
+ - emits audit event recording the rule creation and acting user
@@ -0,0 +1,65 @@
1
+ # CreateBudget
2
+
3
+ ## Overview
4
+
5
+ createBudget establishes a new budget in DRAFT status. A budget is a financial plan that allocates planned amounts to cost elements across accounting periods for a specific cost object. It requires a name, budget holder, fiscal year reference, company reference, cost object type and ID, and a plan version reference.
6
+
7
+ ## Business Rules
8
+
9
+ - Budget is always created in DRAFT status
10
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
11
+ - Requires a `name`
12
+ - Requires a `budgetHolderId`
13
+ - Requires a valid `fiscalYearId` referencing an existing fiscal year from finance-ledger
14
+ - Requires a `costObjectType` and `costObjectId` referencing a valid cost object (cost center, profit center, or internal order)
15
+ - Requires a valid `planVersionId` referencing an existing plan version
16
+ - Budgets are scoped to a company; budgets from different companies are fully isolated
17
+ - Emits an audit event recording the acting user, timestamp, and initial field values
18
+
19
+ ## Process Flow
20
+
21
+ ```mermaid
22
+ flowchart TD
23
+ A[Receive create budget request] --> B{Company exists and is ACTIVE?}
24
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
25
+ B -->|Yes| D{Fiscal year exists?}
26
+ D -->|No| E[Return error: FISCAL_YEAR_NOT_FOUND]
27
+ D -->|Yes| F{Cost object exists?}
28
+ F -->|No| G[Return error: COST_OBJECT_NOT_FOUND]
29
+ F -->|Yes| H{Plan version exists?}
30
+ H -->|No| I[Return error: PLAN_VERSION_NOT_FOUND]
31
+ H -->|Yes| J{Name provided?}
32
+ J -->|No| K[Return error: INVALID_NAME]
33
+ J -->|Yes| L{Budget holder provided?}
34
+ L -->|No| M[Return error: BUDGET_HOLDER_REQUIRED]
35
+ L -->|Yes| N[Create budget in DRAFT status]
36
+ N --> O[Emit audit event]
37
+ O --> P[Return created budget]
38
+ ```
39
+
40
+ ## External Dependencies
41
+
42
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
43
+ - [finance-ledger::getFiscalYear](../../../finance-ledger/docs/queries/GetFiscalYear.md) — Validates that the referenced fiscal year exists
44
+
45
+ ## Error Scenarios
46
+
47
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
48
+ - **FISCAL_YEAR_NOT_FOUND**: Referenced fiscal year does not exist
49
+ - **COST_OBJECT_NOT_FOUND**: Referenced cost object (cost center, profit center, or internal order) does not exist
50
+ - **PLAN_VERSION_NOT_FOUND**: Referenced plan version does not exist
51
+ - **INVALID_NAME**: Name is missing or empty
52
+ - **BUDGET_HOLDER_REQUIRED**: Budget holder reference is missing
53
+
54
+ ## Test Cases
55
+
56
+ - creates budget in DRAFT status with required fields
57
+ - returns error when company does not exist
58
+ - returns error when company is not ACTIVE
59
+ - returns error when fiscal year does not exist
60
+ - returns error when cost object does not exist
61
+ - returns error when plan version does not exist
62
+ - returns error when name is missing
63
+ - returns error when budget holder is missing
64
+ - budgets from different companies are isolated
65
+ - emits audit event recording acting user, timestamp, and initial field values
@@ -0,0 +1,66 @@
1
+ # CreateBudgetLineItem
2
+
3
+ ## Overview
4
+
5
+ createBudgetLineItem adds a line item to a DRAFT budget. Each line item specifies a cost element, an accounting period, and a planned amount. The GL account is derived automatically from the primary cost element's GL account mapping. Duplicate line items (same cost element and period) within a single budget are rejected.
6
+
7
+ ## Business Rules
8
+
9
+ - Budget must exist and be in DRAFT status
10
+ - Line items cannot be added to budgets in SUBMITTED, APPROVED, ACTIVE, or CLOSED status
11
+ - Requires a valid `costElementId` referencing a PRIMARY cost element in ACTIVE status
12
+ - Requires a valid `accountingPeriodId` referencing an existing accounting period from finance-ledger
13
+ - Requires a `plannedAmount` that is a positive value
14
+ - GL account is derived automatically from the referenced primary cost element's GL account mapping
15
+ - Duplicate line items (same cost element and same period) within the same budget are rejected
16
+ - Emits an audit event recording the line item creation and acting user
17
+
18
+ ## Process Flow
19
+
20
+ ```mermaid
21
+ flowchart TD
22
+ A[Receive create budget line item request] --> B{Budget exists?}
23
+ B -->|No| C[Return error: BUDGET_NOT_FOUND]
24
+ B -->|Yes| D{Status is DRAFT?}
25
+ D -->|No| E[Return error: INVALID_STATE]
26
+ D -->|Yes| F{Cost element exists, is PRIMARY, and ACTIVE?}
27
+ F -->|No| G[Return error: INVALID_COST_ELEMENT]
28
+ F -->|Yes| H{Accounting period exists?}
29
+ H -->|No| I[Return error: ACCOUNTING_PERIOD_NOT_FOUND]
30
+ H -->|Yes| J{Planned amount is positive?}
31
+ J -->|No| K[Return error: INVALID_PLANNED_AMOUNT]
32
+ J -->|Yes| L{Duplicate line item exists?}
33
+ L -->|Yes| M[Return error: DUPLICATE_LINE_ITEM]
34
+ L -->|No| N[Derive GL account from cost element]
35
+ N --> O[Create budget line item]
36
+ O --> P[Emit audit event]
37
+ P --> Q[Return created line item]
38
+ ```
39
+
40
+ ## External Dependencies
41
+
42
+ - [finance-ledger::getAccountingPeriod](../../../finance-ledger/docs/queries/GetAccountingPeriod.md) — Validates that the referenced accounting period exists
43
+
44
+ ## Error Scenarios
45
+
46
+ - **BUDGET_NOT_FOUND**: Budget with the specified ID does not exist
47
+ - **INVALID_STATE**: Budget is not in DRAFT status
48
+ - **INVALID_COST_ELEMENT**: Referenced cost element does not exist, is not PRIMARY type, or is not in ACTIVE status
49
+ - **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
50
+ - **INVALID_PLANNED_AMOUNT**: Planned amount is not a positive value
51
+ - **DUPLICATE_LINE_ITEM**: A line item with the same cost element and period already exists in this budget
52
+
53
+ ## Test Cases
54
+
55
+ - adds a line item to a DRAFT budget with valid cost element, period, and amount
56
+ - derives GL account automatically from the primary cost element
57
+ - returns error when budget does not exist
58
+ - returns error when budget is not in DRAFT status
59
+ - returns error when cost element does not exist
60
+ - returns error when cost element is not PRIMARY type
61
+ - returns error when cost element is not in ACTIVE status
62
+ - returns error when accounting period does not exist
63
+ - returns error when planned amount is zero
64
+ - returns error when planned amount is negative
65
+ - returns error when duplicate line item exists (same cost element and period)
66
+ - emits audit event recording the line item creation and acting user
@@ -0,0 +1,64 @@
1
+ # CreateCostCenter
2
+
3
+ ## Overview
4
+
5
+ createCostCenter establishes a new cost center within a company. A cost center is a responsibility area that accumulates overhead costs for management accounting reporting. It requires a unique code within the company, a name, a category, a reference to a hierarchy node within the same company, and a valid-from date. Cost centers serve as the primary receiver for overhead costs and are foundational cost objects for allocation, budgeting, and variance analysis.
6
+
7
+ ## Business Rules
8
+
9
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
10
+ - Requires a `code` that is unique within the company scope
11
+ - Requires a `name`
12
+ - Requires a `category` from a defined set: overhead, production, administration, sales, or research
13
+ - Requires a `hierarchyNodeId` referencing an existing node within the same company's cost center hierarchy
14
+ - A cost center hierarchy must exist before cost centers can be created
15
+ - Requires a `validFrom` date
16
+ - `validTo` is optional; when provided, it must be on or after the `validFrom` date
17
+ - `responsiblePersonId` is optional
18
+ - `departmentId` is optional (informational mapping to the organization module)
19
+ - Cost centers are scoped to a company; cost centers from different companies are fully isolated
20
+ - Emits an audit event recording the acting user, timestamp, and initial field values
21
+
22
+ ## Process Flow
23
+
24
+ ```mermaid
25
+ flowchart TD
26
+ A[Receive create cost center request] --> B{Company exists and is ACTIVE?}
27
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
28
+ B -->|Yes| D{Code unique within company?}
29
+ D -->|No| E[Return error: DUPLICATE_COST_CENTER_CODE]
30
+ D -->|Yes| F{Valid category?}
31
+ F -->|No| G[Return error: INVALID_CATEGORY]
32
+ F -->|Yes| H{Hierarchy node exists in same company?}
33
+ H -->|No| I[Return error: HIERARCHY_NODE_NOT_FOUND]
34
+ H -->|Yes| J{validTo >= validFrom when both set?}
35
+ J -->|No| K[Return error: INVALID_VALIDITY_PERIOD]
36
+ J -->|Yes| L[Create cost center]
37
+ L --> M[Emit audit event]
38
+ M --> N[Return created cost center]
39
+ ```
40
+
41
+ ## External Dependencies
42
+
43
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
44
+
45
+ ## Error Scenarios
46
+
47
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
48
+ - **DUPLICATE_COST_CENTER_CODE**: A cost center with the same code already exists within the company
49
+ - **INVALID_CATEGORY**: Category is not one of the recognized values (overhead, production, administration, sales, research)
50
+ - **HIERARCHY_NODE_NOT_FOUND**: Referenced hierarchy node does not exist or does not belong to the same company
51
+ - **INVALID_VALIDITY_PERIOD**: validTo is before validFrom
52
+
53
+ ## Test Cases
54
+
55
+ - returns error when company does not exist
56
+ - returns error when company is not ACTIVE
57
+ - returns error when name is empty
58
+ - returns error when code already exists within company
59
+ - returns error when category is invalid
60
+ - returns error when hierarchy node does not exist
61
+ - returns error when hierarchy node belongs to different company
62
+ - returns error when validTo is before validFrom
63
+ - creates cost center with valid inputs
64
+ - creates cost center without optional fields
@@ -0,0 +1,45 @@
1
+ # CreateCostCenterHierarchy
2
+
3
+ ## Overview
4
+
5
+ createCostCenterHierarchy establishes a new cost center hierarchy within a company. The hierarchy provides the tree structure required for organizing cost centers into grouping nodes for hierarchical roll-up reporting. A hierarchy carries a name, version identifier, and company reference. Hierarchies are scoped to a company and must be established before cost centers can be created.
6
+
7
+ ## Business Rules
8
+
9
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
10
+ - Requires a `name` for the hierarchy
11
+ - Requires a `version` identifier
12
+ - Hierarchy is scoped to a company; hierarchies from different companies are fully isolated
13
+ - A company can have multiple hierarchy versions
14
+ - Emits an audit event recording the acting user, timestamp, and initial field values
15
+
16
+ ## Process Flow
17
+
18
+ ```mermaid
19
+ flowchart TD
20
+ A[Receive create cost center hierarchy request] --> B{Company exists and is ACTIVE?}
21
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
22
+ B -->|Yes| D{Name provided?}
23
+ D -->|No| E[Return error: INVALID_NAME]
24
+ D -->|Yes| F[Create cost center hierarchy]
25
+ F --> G[Emit audit event]
26
+ G --> H[Return created hierarchy]
27
+ ```
28
+
29
+ ## External Dependencies
30
+
31
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
32
+
33
+ ## Error Scenarios
34
+
35
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
36
+ - **INVALID_NAME**: Hierarchy name is missing or empty
37
+
38
+ ## Test Cases
39
+
40
+ - returns error when company does not exist
41
+ - returns error when company is not ACTIVE
42
+ - returns error when name is empty
43
+ - returns error when name is whitespace only
44
+ - creates hierarchy with valid inputs
45
+ - emits audit event by calling insert
@@ -0,0 +1,61 @@
1
+ # CreateCostCenterHierarchyNode
2
+
3
+ ## Overview
4
+
5
+ createCostCenterHierarchyNode adds a new node to an existing cost center hierarchy. Nodes form a tree structure with parent-child relationships, supporting hierarchical roll-up reporting. A root node must be created before child nodes can be added. Nodes carry a name, sort order, and level attribute within the hierarchy.
6
+
7
+ ## Business Rules
8
+
9
+ - Hierarchy must exist
10
+ - Parent node must exist when creating a child node (except for root node creation)
11
+ - A root node must be established before child nodes can be added
12
+ - A node cannot reference itself as its parent (no self-referencing)
13
+ - Creating a node must not introduce a circular reference in the hierarchy
14
+ - Node carries a name, sort order, and level attribute
15
+ - Emits an audit event recording the acting user, timestamp, and initial field values
16
+
17
+ ## Process Flow
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ A[Receive create hierarchy node request] --> B{Hierarchy exists?}
22
+ B -->|No| C[Return error: HIERARCHY_NOT_FOUND]
23
+ B -->|Yes| D{Is root node creation?}
24
+ D -->|Yes| E{Root node already exists?}
25
+ E -->|Yes| F[Return error: DUPLICATE_ROOT_NODE]
26
+ E -->|No| G[Create root node]
27
+ D -->|No| H{Parent node exists?}
28
+ H -->|No| I[Return error: PARENT_NODE_NOT_FOUND]
29
+ H -->|Yes| J{Self-referencing?}
30
+ J -->|Yes| K[Return error: SELF_REFERENCE]
31
+ J -->|No| L{Circular reference?}
32
+ L -->|Yes| M[Return error: CIRCULAR_REFERENCE]
33
+ L -->|No| N[Create child node under parent]
34
+ G --> O[Emit audit event]
35
+ N --> O
36
+ O --> P[Return created node]
37
+ ```
38
+
39
+ ## External Dependencies
40
+
41
+ - None
42
+
43
+ ## Error Scenarios
44
+
45
+ - **HIERARCHY_NOT_FOUND**: Referenced hierarchy does not exist
46
+ - **PARENT_NODE_NOT_FOUND**: Referenced parent node does not exist within the hierarchy
47
+ - **DUPLICATE_ROOT_NODE**: A root node already exists in this hierarchy
48
+ - **SELF_REFERENCE**: Node cannot reference itself as its parent
49
+ - **CIRCULAR_REFERENCE**: Creating this node would introduce a circular reference in the hierarchy
50
+
51
+ ## Test Cases
52
+
53
+ - returns error when name is empty
54
+ - returns error when hierarchy does not exist
55
+ - returns error when parent node does not exist in hierarchy
56
+ - returns error when creating duplicate root node (no parentNodeId)
57
+ - creates root node when no root exists
58
+ - creates child node with correct computed level
59
+ - returns error when node references itself as parent
60
+ - returns error when node would create a circular reference
61
+ - emits audit event by calling insert
@@ -0,0 +1,91 @@
1
+ # CreateCostElement
2
+
3
+ ## Overview
4
+
5
+ createCostElement establishes a new cost element in DRAFT status within the management accounting module. The cost element carries a company reference, a unique code within the company scope, a name, a type (PRIMARY or SECONDARY), a category that must match the type, an optional GL account reference (required for PRIMARY, forbidden for SECONDARY), optional validity dates (validFrom, validTo), and an optional description. Cost elements are the foundational classification for all cost postings and allocations in the accounting module.
6
+
7
+ ## Business Rules
8
+
9
+ - Cost element is always created in DRAFT status
10
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
11
+ - Requires a `code` that is unique within the company scope
12
+ - Requires a `name`
13
+ - Requires a `type` of either PRIMARY or SECONDARY
14
+ - Requires a `category` appropriate to its type: overhead, material, labor, or depreciation for PRIMARY; assessment, distribution, internal_activity_allocation, or settlement for SECONDARY
15
+ - PRIMARY cost elements must provide a `glAccountId` referencing an active GL account from an active Chart of Accounts
16
+ - SECONDARY cost elements must not provide a `glAccountId`; supplying one is rejected
17
+ - Two PRIMARY cost elements within the same company cannot reference the same GL account
18
+ - When both `validFrom` and `validTo` are provided, `validFrom` must be less than or equal to `validTo`
19
+ - `validFrom` and `validTo` are optional; omitting them means the element is valid indefinitely
20
+ - `description` is optional and can be set on creation
21
+ - Cost elements are scoped to a company; elements from different companies are fully isolated
22
+ - Emits an audit event recording the acting user, timestamp, and initial field values
23
+
24
+ ## Process Flow
25
+
26
+ ```mermaid
27
+ flowchart TD
28
+ A[Receive create cost element request] --> B{Company exists and is ACTIVE?}
29
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
30
+ B -->|Yes| D{Code unique within company?}
31
+ D -->|No| E[Return error: DUPLICATE_COST_ELEMENT_CODE]
32
+ D -->|Yes| F{Valid type: PRIMARY or SECONDARY?}
33
+ F -->|No| G[Return error: INVALID_COST_ELEMENT_TYPE]
34
+ F -->|Yes| H{Category matches type?}
35
+ H -->|No| I[Return error: INVALID_CATEGORY_FOR_TYPE]
36
+ H -->|Yes| J{Type is PRIMARY?}
37
+ J -->|Yes| K{glAccountId provided?}
38
+ K -->|No| L[Return error: GL_ACCOUNT_REQUIRED]
39
+ K -->|Yes| M{GL account exists and is active in active CoA?}
40
+ M -->|No| N[Return error: GL_ACCOUNT_NOT_FOUND]
41
+ M -->|Yes| O{Another PRIMARY element references same GL account?}
42
+ O -->|Yes| P[Return error: DUPLICATE_GL_ACCOUNT_REFERENCE]
43
+ O -->|No| Q[Validate dates]
44
+ J -->|No| R{glAccountId provided?}
45
+ R -->|Yes| S[Return error: GL_ACCOUNT_NOT_ALLOWED]
46
+ R -->|No| Q
47
+ Q --> T{validFrom <= validTo when both set?}
48
+ T -->|No| U[Return error: INVALID_VALIDITY_PERIOD]
49
+ T -->|Yes| V[Create cost element in DRAFT status]
50
+ V --> W[Emit audit event]
51
+ W --> X[Return created cost element]
52
+ ```
53
+
54
+ ## External Dependencies
55
+
56
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
57
+ - [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) — Validates that the referenced GL account exists and is active within an active Chart of Accounts
58
+
59
+ ## Error Scenarios
60
+
61
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
62
+ - **DUPLICATE_COST_ELEMENT_CODE**: A cost element with the same code already exists within the company
63
+ - **INVALID_COST_ELEMENT_TYPE**: Type is not PRIMARY or SECONDARY
64
+ - **INVALID_CATEGORY_FOR_TYPE**: Category does not match the cost element type (e.g., assessment category on a PRIMARY element)
65
+ - **GL_ACCOUNT_REQUIRED**: PRIMARY cost element is missing the required glAccountId
66
+ - **GL_ACCOUNT_NOT_FOUND**: Referenced GL account does not exist or is not active within an active Chart of Accounts
67
+ - **GL_ACCOUNT_NOT_ALLOWED**: SECONDARY cost element must not reference a GL account
68
+ - **DUPLICATE_GL_ACCOUNT_REFERENCE**: Another PRIMARY cost element within the same company already references the specified GL account
69
+ - **INVALID_VALIDITY_PERIOD**: validFrom is after validTo
70
+
71
+ ## Test Cases
72
+
73
+ - creates cost element in DRAFT status with required fields
74
+ - returns error when company does not exist
75
+ - returns error when company is not ACTIVE
76
+ - returns error when code already exists within the company
77
+ - returns error when type is not PRIMARY or SECONDARY
78
+ - returns error when category does not match the type (primary category on secondary element)
79
+ - returns error when category does not match the type (secondary category on primary element)
80
+ - returns error when PRIMARY element is missing glAccountId
81
+ - returns error when GL account does not exist
82
+ - returns error when GL account is not active
83
+ - returns error when GL account is not in an active Chart of Accounts
84
+ - returns error when SECONDARY element provides a glAccountId
85
+ - returns error when another PRIMARY element in the same company references the same GL account
86
+ - returns error when validFrom is after validTo
87
+ - creates cost element with optional description
88
+ - creates cost element with validFrom and validTo dates
89
+ - creates cost element without validity dates (indefinitely valid)
90
+ - cost elements from different companies are isolated
91
+ - emits audit event recording acting user, timestamp, and initial field values
@@ -0,0 +1,72 @@
1
+ # CreateInternalOrder
2
+
3
+ ## Overview
4
+
5
+ createInternalOrder establishes a new internal order in CREATED status. An internal order is a temporary cost collector for tracking expenses associated with specific short-to-medium-term activities such as projects, marketing campaigns, and R&D initiatives. It requires a unique order number within the company, an order type, a description, a responsible person, a responsible cost center within the same company, and a company reference. Optional fields include validity dates and a budget reference.
6
+
7
+ ## Business Rules
8
+
9
+ - Internal order is always created in CREATED status
10
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
11
+ - Requires an `orderNumber` that is unique within the company scope
12
+ - Requires an `orderType` of OVERHEAD, INVESTMENT, or ACCRUAL
13
+ - Requires a `description`
14
+ - Requires a `responsiblePersonId`
15
+ - Requires a `costCenterId` referencing a valid cost center within the same company
16
+ - `validFrom` and `validTo` are optional; when both are provided, validFrom must precede validTo
17
+ - Budget assignment is optional; when assigned, the budget must exist and belong to the same company
18
+ - Internal orders are scoped to a company; orders from different companies are fully isolated
19
+ - Emits an audit event recording the acting user, timestamp, and initial field values
20
+
21
+ ## Process Flow
22
+
23
+ ```mermaid
24
+ flowchart TD
25
+ A[Receive create internal order request] --> B{Company exists and is ACTIVE?}
26
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
27
+ B -->|Yes| D{Order number unique within company?}
28
+ D -->|No| E[Return error: DUPLICATE_ORDER_NUMBER]
29
+ D -->|Yes| F{Valid order type?}
30
+ F -->|No| G[Return error: INVALID_ORDER_TYPE]
31
+ F -->|Yes| H{Description provided?}
32
+ H -->|No| I[Return error: DESCRIPTION_REQUIRED]
33
+ H -->|Yes| J{Responsible person provided?}
34
+ J -->|No| K[Return error: RESPONSIBLE_PERSON_REQUIRED]
35
+ J -->|Yes| L{Cost center exists in same company?}
36
+ L -->|No| M[Return error: COST_CENTER_NOT_FOUND]
37
+ L -->|Yes| N{validFrom <= validTo when both set?}
38
+ N -->|No| O[Return error: INVALID_VALIDITY_PERIOD]
39
+ N -->|Yes| P[Create internal order in CREATED status]
40
+ P --> Q[Emit audit event]
41
+ Q --> R[Return created internal order]
42
+ ```
43
+
44
+ ## External Dependencies
45
+
46
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
47
+
48
+ ## Error Scenarios
49
+
50
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
51
+ - **DUPLICATE_ORDER_NUMBER**: An internal order with the same order number already exists within the company
52
+ - **INVALID_ORDER_TYPE**: Order type is not one of the recognized values (OVERHEAD, INVESTMENT, ACCRUAL)
53
+ - **DESCRIPTION_REQUIRED**: Description is missing or empty
54
+ - **RESPONSIBLE_PERSON_REQUIRED**: Responsible person reference is missing
55
+ - **COST_CENTER_NOT_FOUND**: Referenced cost center does not exist or does not belong to the same company
56
+ - **INVALID_VALIDITY_PERIOD**: validFrom is after validTo
57
+
58
+ ## Test Cases
59
+
60
+ - creates internal order in CREATED status with required fields
61
+ - returns error when company does not exist
62
+ - returns error when company is not ACTIVE
63
+ - returns error when order number already exists within the company
64
+ - returns error when order type is invalid
65
+ - returns error when description is missing
66
+ - returns error when responsible person is missing
67
+ - returns error when cost center does not exist
68
+ - returns error when cost center belongs to a different company
69
+ - returns error when validFrom is after validTo
70
+ - creates internal order with optional validity dates
71
+ - internal orders from different companies are isolated
72
+ - emits audit event recording acting user, timestamp, and initial field values
@@ -0,0 +1,59 @@
1
+ # CreatePlanVersion
2
+
3
+ ## Overview
4
+
5
+ createPlanVersion establishes a new plan version for multi-version budget planning. A plan version defines the type of planning exercise (BUDGET, FORECAST, or SIMULATION) and is scoped to a company. An optional base version can be referenced to copy line items from an existing version.
6
+
7
+ ## Business Rules
8
+
9
+ - Requires a `name`
10
+ - Requires a valid `type` of BUDGET, FORECAST, or SIMULATION
11
+ - Requires a valid `companyId` referencing an ACTIVE company from the organization module
12
+ - `baseVersionId` is optional; when provided, it must reference an existing plan version from which line items can be copied
13
+ - Plan versions are scoped to a company
14
+ - Emits an audit event recording the acting user, timestamp, and initial field values
15
+
16
+ ## Process Flow
17
+
18
+ ```mermaid
19
+ flowchart TD
20
+ A[Receive create plan version request] --> B{Company exists and is ACTIVE?}
21
+ B -->|No| C[Return error: COMPANY_NOT_FOUND]
22
+ B -->|Yes| D{Valid version type?}
23
+ D -->|No| E[Return error: INVALID_VERSION_TYPE]
24
+ D -->|Yes| F{Name provided?}
25
+ F -->|No| G[Return error: INVALID_NAME]
26
+ F -->|Yes| H{Base version provided?}
27
+ H -->|Yes| I{Base version exists?}
28
+ I -->|No| J[Return error: BASE_VERSION_NOT_FOUND]
29
+ I -->|Yes| K[Create plan version with base reference]
30
+ H -->|No| L[Create plan version without base reference]
31
+ K --> M[Emit audit event]
32
+ L --> M
33
+ M --> N[Return created plan version]
34
+ ```
35
+
36
+ ## External Dependencies
37
+
38
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
39
+
40
+ ## Error Scenarios
41
+
42
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
43
+ - **INVALID_VERSION_TYPE**: Type is not BUDGET, FORECAST, or SIMULATION
44
+ - **INVALID_NAME**: Name is missing or empty
45
+ - **BASE_VERSION_NOT_FOUND**: Referenced base version does not exist
46
+
47
+ ## Test Cases
48
+
49
+ - creates a plan version of type BUDGET
50
+ - creates a plan version of type FORECAST
51
+ - creates a plan version of type SIMULATION
52
+ - creates a plan version with a base version reference
53
+ - creates a plan version without a base version reference
54
+ - returns error when company does not exist
55
+ - returns error when company is not ACTIVE
56
+ - returns error when version type is invalid
57
+ - returns error when name is missing
58
+ - returns error when base version does not exist
59
+ - emits audit event recording acting user, timestamp, and initial field values