@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,111 @@
1
+ # Internal Order Management
2
+
3
+ ## Overview
4
+
5
+ Internal Order Management provides the ability to create and manage internal orders that serve as temporary cost collectors for tracking expenses associated with specific short-to-medium-term activities such as projects, marketing campaigns, R&D initiatives, and corporate events. Unlike cost centers, which are permanent organizational units for ongoing cost accumulation, internal orders are purpose-bound objects with a defined lifecycle that begins at creation and ends at closure once costs have been fully reviewed.
6
+
7
+ Each internal order carries a unique order number, an order type (OVERHEAD, INVESTMENT, or ACCRUAL), a description, responsible person, validity dates, and a reference to the responsible cost center within the company. Internal orders follow a four-stage lifecycle: CREATED, RELEASED, TECHNICALLY_COMPLETED, and CLOSED. Cost postings are only permitted while the order is in RELEASED status. Orders may optionally have a budget assigned to control spending limits. Settlement of internal order costs to receivers (such as cost centers, fixed assets, or other orders) is out of scope for this feature and will be addressed in a dedicated settlement feature.
8
+
9
+ ## Business Purpose
10
+
11
+ Organizations need internal orders to isolate and monitor costs for discrete activities that cut across the permanent cost center structure:
12
+
13
+ - **Activity-based cost tracking**: Internal orders allow organizations to accumulate costs for specific initiatives (e.g., a trade show, an IT migration project, or a product launch campaign) independently of the department-level cost center hierarchy, providing precise visibility into activity-level spending
14
+ - **Order type classification**: Categorizing orders as OVERHEAD, INVESTMENT, or ACCRUAL mirrors SAP's internal order type model and enables differentiated handling — overhead orders track general expenses, investment orders capitalize costs into fixed assets, and accrual orders manage periodic cost deferrals
15
+ - **Lifecycle gating**: The four-stage lifecycle (CREATED -> RELEASED -> TECHNICALLY_COMPLETED -> CLOSED) ensures that cost postings are only accepted during the appropriate window, preventing premature charges to orders still in setup and accidental postings to orders under final review or already archived
16
+ - **Budget control**: Optional budget assignment to internal orders enables organizations to set spending limits for activities and monitor actual costs against planned budgets, supporting proactive cost governance
17
+ - **Responsible cost center linkage**: Each internal order references a responsible cost center, establishing organizational accountability and ensuring that activity costs can be traced back to the department or unit that owns the initiative
18
+ - **Temporal scoping**: Validity dates (valid-from and valid-to) define the time window during which the order is relevant, supporting planning and ensuring that postings outside the validity period are flagged or rejected
19
+ - **Company-scoped isolation**: Internal orders are scoped to a company, ensuring that cost data for different legal entities remains fully separated
20
+
21
+ ## Process Flow
22
+
23
+ ```mermaid
24
+ stateDiagram-v2
25
+ [*] --> Created: createInternalOrder
26
+ Created --> Released: releaseInternalOrder
27
+ Released --> TechnicallyCompleted: technicallyCompleteInternalOrder
28
+ TechnicallyCompleted --> Closed: closeInternalOrder
29
+ Created --> [*]: deleteInternalOrder
30
+ ```
31
+
32
+ ```mermaid
33
+ flowchart TD
34
+ A[Identify activity requiring cost tracking] --> B[Create internal order with type, description, responsible person, and cost center]
35
+ B --> C{Assign budget?}
36
+ C -- Yes --> D[Link budget to internal order]
37
+ C -- No --> E[Internal order in CREATED status]
38
+ D --> E
39
+ E --> F[Release internal order]
40
+ F --> G[Costs posted against the order during activity execution]
41
+ G --> H{Activity complete?}
42
+ H -- No --> G
43
+ H -- Yes --> I[Technically complete the order]
44
+ I --> J[Final review of accumulated costs]
45
+ J --> K[Close the order]
46
+ K --> L[Order archived — no further changes]
47
+ ```
48
+
49
+ ```mermaid
50
+ flowchart TD
51
+ A[Cost posting request targets internal order] --> B{Order status is RELEASED?}
52
+ B -- No --> C[Reject posting — order not in RELEASED status]
53
+ B -- Yes --> D{Posting date within validity period?}
54
+ D -- No --> E[Reject posting — outside validity window]
55
+ D -- Yes --> F{Budget assigned?}
56
+ F -- Yes --> G{Posting within budget limit?}
57
+ G -- No --> H[Reject or warn — budget exceeded]
58
+ G -- Yes --> I[Accept cost posting]
59
+ F -- No --> I
60
+ ```
61
+
62
+ ## Scenario Patterns
63
+
64
+ - **Marketing Campaign Tracking**: The marketing department creates an OVERHEAD internal order to track all costs for a product launch campaign — agency fees, print materials, event venue, and travel. The order is released when planning is finalized, costs are posted throughout the campaign period, and the order is technically completed and closed once all invoices are settled and reviewed
65
+ - **Capital Investment Project**: An INVESTMENT internal order is created for a facility renovation project. Costs for construction, equipment, and consulting are accumulated on the order. Upon project completion, the order is technically completed and the accumulated costs are reviewed before closure (settlement to a fixed asset would occur in a future settlement feature)
66
+ - **R&D Initiative**: An R&D team creates an OVERHEAD internal order with a budget to track development costs for a prototype. The budget cap ensures the team stays within the approved spending limit. When the prototype phase ends, the order is technically completed and costs are reviewed against the budget before closure
67
+ - **Corporate Event**: An internal order is created for an annual company conference. Costs for venue rental, catering, speakers, and logistics are posted during the event planning and execution phases. After the event, the order is technically completed, final costs are reconciled, and the order is closed
68
+ - **Accrual Order for Periodic Costs**: An ACCRUAL internal order is created to manage deferred cost recognition for an annual software license paid upfront. The order tracks the periodic accrual postings over the license term
69
+ - **Order Deletion Before Release**: A planned initiative is cancelled before any costs are incurred. The internal order, still in CREATED status, is deleted rather than progressed through the full lifecycle
70
+ - **Budget Overrun Prevention**: A project manager attempts to post costs to an internal order that would exceed the assigned budget. The system rejects the posting, prompting the manager to request a budget increase or reallocate costs to a different order
71
+
72
+ ## Test Cases
73
+
74
+ - Internal order lifecycle follows CREATED -> RELEASED -> TECHNICALLY_COMPLETED -> CLOSED state machine
75
+ - Internal order can only be created in CREATED status
76
+ - Internal order requires a valid order type (OVERHEAD, INVESTMENT, ACCRUAL)
77
+ - Internal order requires a unique order number within the company scope
78
+ - Internal order requires a description
79
+ - Internal order requires a responsible person
80
+ - Internal order must reference a valid companyId; the company must be in ACTIVE status
81
+ - Internal order must reference a valid responsible cost center within the same company
82
+ - Internal order validity dates (valid-from, valid-to) are optional; when both are provided, valid-from must precede valid-to
83
+ - Budget assignment to an internal order is optional
84
+ - When a budget is assigned, the budget entity must exist and belong to the same company
85
+ - Releasing an internal order transitions its status from CREATED to RELEASED
86
+ - Only CREATED orders can be released; releasing a RELEASED, TECHNICALLY_COMPLETED, or CLOSED order fails with an invalid status transition error
87
+ - Cost postings are only accepted when the internal order is in RELEASED status
88
+ - Cost postings to an order in CREATED, TECHNICALLY_COMPLETED, or CLOSED status are rejected
89
+ - Technically completing an internal order transitions its status from RELEASED to TECHNICALLY_COMPLETED
90
+ - Only RELEASED orders can be technically completed; technically completing a CREATED or CLOSED order fails with an invalid status transition error
91
+ - Closing an internal order transitions its status from TECHNICALLY_COMPLETED to CLOSED
92
+ - Only TECHNICALLY_COMPLETED orders can be closed; closing a CREATED or RELEASED order fails with an invalid status transition error
93
+ - CLOSED orders cannot transition to any other status
94
+ - Internal orders in CREATED status can be deleted
95
+ - Internal orders in RELEASED, TECHNICALLY_COMPLETED, or CLOSED status cannot be deleted
96
+ - Internal order fields (description, responsible person, cost center, validity dates) can be updated while the order is in CREATED or RELEASED status
97
+ - Internal order fields cannot be updated when the order is in TECHNICALLY_COMPLETED or CLOSED status
98
+ - Order type cannot be changed after the order is released
99
+ - Cost postings to an internal order with a budget must not exceed the assigned budget amount
100
+ - Cost postings that would exceed the budget are rejected with a budget exceeded error
101
+ - Internal orders are scoped to a company; orders from different companies are fully isolated
102
+ - Cost postings with a date outside the order's validity period (before valid-from or after valid-to) are rejected when validity dates are set
103
+ - Deleting an internal order in CREATED status removes the order and any associated budget assignment
104
+ - Creating an internal order without a responsible cost center reference fails validation
105
+
106
+ ## Reference Links
107
+
108
+ - [SAP S/4HANA Internal Orders](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee3509643e954b3da2e0ebfa846c02e1/7ce4944ab36c11d3b44c006094b9ea64.html)
109
+ - [SAP Internal Order Types and Usage](https://help.sap.com/docs/SAP_ERP/3bbd1036dae74238a8e3aab669e0ea3f/2ad1e0af437411d189740000e8323492.html)
110
+ - [Oracle Fusion Project Costing — Cost Collection](https://docs.oracle.com/en/cloud/saas/project-management/24d/oapjm/cost-collection.html)
111
+ - [Odoo Analytic Accounts for Cost Tracking](https://www.odoo.com/documentation/19.0/applications/finance/accounting/reporting/analytic_accounting.html)
@@ -0,0 +1,120 @@
1
+ # Profit Center Management
2
+
3
+ ## Overview
4
+
5
+ Profit Center Management provides the ability to create, maintain, and organize profit centers for internal profit and loss reporting within the accounting module. A profit center represents a discrete business segment — such as a product line, regional division, or service line — for which management can independently evaluate profitability. Each profit center carries a code, name, description, responsible person, validity period (valid-from/to), and an assignment to a profit center hierarchy node. Profit centers are scoped to a Company and follow a lifecycle from DRAFT through ACTIVE to INACTIVE.
6
+
7
+ Revenue and cost transactions posted in the finance-ledger are tagged with profit center assignments, enabling aggregation of income and expenses at the profit center level. Profit centers are organized into hierarchical groupings (ProfitCenterHierarchy) that form a tree structure, allowing roll-up reporting by business dimension such as region, product line, or service line. This hierarchical structure supports management analyses including return on investment (ROI), economic value added (EVA), and operating profit per segment. Profit centers are distinct from organizational units (sites, departments) managed by the organization module, but may optionally reference them for cross-dimensional reporting.
8
+
9
+ ## Business Purpose
10
+
11
+ Organizations need profit centers to measure and manage the profitability of individual business segments independently:
12
+
13
+ - **Segment profitability analysis**: Profit centers enable management to evaluate revenue, costs, and profit/loss for each business segment, supporting informed strategic decisions about resource allocation and investment priorities
14
+ - **Hierarchical roll-up reporting**: The tree-structured profit center hierarchy allows aggregation of results from leaf-level profit centers up through intermediate grouping nodes to the enterprise level, supporting multi-dimensional analysis by region, product line, or service line
15
+ - **Internal P&L and balance sheet**: Profit centers serve as the primary dimension for generating internal profit and loss statements and, where applicable, segment balance sheets — going beyond cost center reporting which tracks only the expense side
16
+ - **ROI and EVA analysis**: By capturing both revenue and cost flows, profit centers provide the data foundation for return on investment, economic value added, and operating margin calculations at the segment level
17
+ - **Responsibility accounting**: Each profit center is assigned a responsible person, establishing clear accountability for the financial performance of that business segment
18
+ - **Validity period control**: Valid-from and valid-to dates ensure that profit centers are only available for transaction assignment during their intended operational period, preventing postings to retired or not-yet-active segments
19
+ - **Separation from organizational structure**: Profit centers are deliberately decoupled from the organizational hierarchy (sites, departments) to allow flexible, cross-cutting profitability views that do not depend on the legal or administrative structure
20
+ - **Transaction tagging for aggregation**: Revenue and cost transactions are tagged with profit center assignments at posting time, enabling automated aggregation without requiring separate ledger entries per segment
21
+ - **Cross-module ownership**: The organization and coa-management modules explicitly defer profit center ownership to the accounting module, establishing a single authoritative source for profit center master data
22
+
23
+ ## Process Flow
24
+
25
+ ```mermaid
26
+ stateDiagram-v2
27
+ [*] --> Draft: createProfitCenter
28
+ Draft --> Draft: updateProfitCenter
29
+ Draft --> Active: activateProfitCenter
30
+ Active --> Active: updateProfitCenter (limited fields)
31
+ Active --> Inactive: deactivateProfitCenter
32
+ Inactive --> Active: reactivateProfitCenter
33
+ Draft --> [*]: deleteProfitCenter
34
+ ```
35
+
36
+ ```mermaid
37
+ flowchart TD
38
+ A[Identify business segment requiring profitability tracking] --> B[Create ProfitCenter in DRAFT status]
39
+ B --> C[Set code, name, description, responsible person, validity period]
40
+ C --> D{Profit center hierarchy exists?}
41
+ D -- No --> E[Create ProfitCenterHierarchy with root node]
42
+ E --> F[Add grouping nodes for business dimensions]
43
+ D -- Yes --> F
44
+ F --> G[Assign profit center to hierarchy node]
45
+ G --> H[Activate profit center]
46
+ H --> I[Profit center available for transaction tagging]
47
+ I --> J[Revenue and cost postings tagged with profit center]
48
+ J --> K[Aggregate P&L by profit center and hierarchy roll-up]
49
+ ```
50
+
51
+ ```mermaid
52
+ flowchart TD
53
+ A[Define profit center hierarchy structure] --> B[Create hierarchy with root node]
54
+ B --> C[Add intermediate grouping nodes by dimension]
55
+ C --> D[Assign profit centers as leaf nodes]
56
+ D --> E{All segments covered?}
57
+ E -- No --> C
58
+ E -- Yes --> F[Hierarchy ready for roll-up reporting]
59
+ F --> G[Generate segment P&L at any hierarchy level]
60
+ G --> H[Drill down from group totals to individual profit centers]
61
+ ```
62
+
63
+ ## Scenario Patterns
64
+
65
+ - **Regional Profit Center Setup**: A multinational company creates profit centers for each geographic region (North America, EMEA, APAC) and organizes them under a region-based hierarchy. Revenue and cost transactions are tagged with the appropriate regional profit center, enabling management to compare profitability across regions and identify underperforming markets
66
+ - **Product Line Profitability**: A manufacturing company creates profit centers for each product line (Consumer Electronics, Industrial Equipment, Spare Parts) under a product-based hierarchy. Sales revenue and production costs are assigned to the corresponding profit center, allowing product managers to track gross margins and operating profit per product line
67
+ - **Service Line Segmentation**: A professional services firm creates profit centers for each service offering (Consulting, Implementation, Managed Services) to separately measure revenue realization, utilization rates, and profitability. The hierarchy groups these under a single services division for consolidated reporting
68
+ - **Dual-Hierarchy Analysis**: A company maintains two profit center hierarchies — one by region and one by product line — to enable matrix reporting. The same set of profit centers can be analyzed along either dimension, supporting both geographic and product-oriented management views
69
+ - **Profit Center Retirement**: A business segment is discontinued. The responsible controller deactivates the profit center after the final posting period, ensuring no new transactions can be assigned to it while historical data remains available for comparative reporting
70
+ - **Cross-Departmental Profit Center**: A profit center spans multiple organizational departments (e.g., a product line served by both engineering and sales teams). Because profit centers are independent of the organizational hierarchy, revenue from sales and costs from engineering are both captured under the same profit center for unified profitability measurement
71
+ - **New Venture Tracking**: A company launches a new business initiative and creates a profit center in DRAFT status with a future valid-from date. Once the launch date arrives, the profit center is activated and begins receiving transaction assignments, allowing management to track the venture's financial performance from day one
72
+ - **Responsible Person Change**: The manager responsible for a profit center changes due to organizational restructuring. The responsible person field is updated on the active profit center, and the change is recorded in the audit trail for accountability tracking
73
+
74
+ ## Test Cases
75
+
76
+ - Profit center lifecycle follows DRAFT -> ACTIVE -> INACTIVE state machine; inactive profit centers can be reactivated to ACTIVE
77
+ - Profit center can only be created in DRAFT status
78
+ - Profit center requires a unique code within the company scope
79
+ - Profit center requires a name
80
+ - Profit center must reference a valid companyId; the company must be in ACTIVE status
81
+ - Profit center description is optional and can be updated in DRAFT or ACTIVE status
82
+ - Profit center responsible person is optional and can be updated in DRAFT or ACTIVE status
83
+ - Valid-from date is required; valid-to date is optional
84
+ - Valid-to date, when specified, must be on or after the valid-from date
85
+ - Activating a DRAFT profit center transitions its status to ACTIVE
86
+ - Activating an already ACTIVE profit center fails with an invalid status transition error
87
+ - Deactivating an ACTIVE profit center transitions its status to INACTIVE
88
+ - Deactivating a DRAFT profit center fails with an invalid status transition error
89
+ - Reactivating an INACTIVE profit center transitions its status to ACTIVE
90
+ - DRAFT profit centers can be deleted; deletion removes the profit center and its hierarchy assignment
91
+ - ACTIVE profit centers cannot be deleted; they must be deactivated first
92
+ - INACTIVE profit centers cannot be deleted
93
+ - Profit center code cannot be changed after activation
94
+ - Only ACTIVE profit centers within their validity period can receive transaction assignments
95
+ - Transactions cannot be assigned to a DRAFT profit center
96
+ - Transactions cannot be assigned to an INACTIVE profit center
97
+ - Transactions cannot be assigned to a profit center outside its validity period (before valid-from or after valid-to)
98
+ - A profit center hierarchy can be created with a root node and a descriptive name
99
+ - Hierarchy nodes can be added as children of existing nodes, forming a tree structure
100
+ - A profit center can be assigned to exactly one node within a given hierarchy
101
+ - A profit center can be assigned to nodes in multiple hierarchies simultaneously
102
+ - Removing a hierarchy node that has child nodes is rejected; children must be reassigned or removed first
103
+ - Removing a hierarchy node that has profit centers assigned is rejected; profit centers must be reassigned first
104
+ - Hierarchy roll-up aggregates financial results from child nodes up to parent nodes
105
+ - Profit centers are scoped to a company; profit centers from different companies are fully isolated
106
+ - Profit center hierarchies are scoped to a company
107
+ - Creating a profit center emits an audit event recording the acting user, timestamp, and initial field values
108
+ - Updating a profit center emits an audit event recording previous and new field values
109
+ - Activating or deactivating a profit center emits an audit event recording the status transition and acting user
110
+ - Assigning or reassigning a profit center to a hierarchy node emits an audit event
111
+ - Profit centers are independent of organizational units (sites, departments) but may optionally reference an organizational unit
112
+ - Only users with appropriate permissions can create, activate, deactivate, or update profit centers
113
+
114
+ ## Reference Links
115
+
116
+ - [SAP Profit Center Accounting](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee3509643e954b3da2e0ebfa846c02e1/4cae5a88ecaa7286e10000000a42189b.html)
117
+ - [SAP Profit Center Master Data](https://help.sap.com/docs/SAP_S4HANA_CLOUD/59463d9fe28a4e5f8b38557e1e2bafbb/577ab0e06d6d1014b3fc9283b0e91070.html)
118
+ - [Oracle Fusion Profit Center Reporting](https://docs.oracle.com/en/cloud/saas/financials/24d/oafcf/segment-reporting.html)
119
+ - [Odoo Analytic Accounting for Profit Centers](https://www.odoo.com/documentation/19.0/applications/finance/accounting/reporting/analytic_accounting.html)
120
+ - [NetSuite Department and Class Segmentation](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N3444641.html)
@@ -0,0 +1,130 @@
1
+ # Variance Analysis
2
+
3
+ ## Overview
4
+
5
+ Variance Analysis is the management accounting capability of the accounting module that compares planned (budget) amounts against actual costs and revenues by cost object and accounting period. A VarianceReport entity captures the cost object reference (cost center, profit center, or internal order), the accounting period, report status (DRAFT or FINAL), and summary totals (total planned, total actual, total variance). Each VarianceReport contains one or more VarianceReportLine child records, each keyed by cost element and accounting period, that capture the planned amount, actual amount, computed variance amount, variance percentage, and variance direction (FAVORABLE or UNFAVORABLE). This cost-element-level detail enables managers to diagnose which cost types are driving deviations rather than only seeing aggregate totals. Actual amounts are sourced from posted journal entries in the finance-ledger module, aggregated by cost element, period, and cost object. Planned amounts are sourced from BudgetLineItems in the budget-management module, which use cost elements as their planning axis.
6
+
7
+ The feature follows a five-step workflow: collect actuals from posted journal entries, collect plan amounts from budget line items, calculate variance per cost element as the difference between actual and planned, categorize the variance direction based on account type, and generate a management report with detail lines. Variance reports are scoped to a Company and reference a specific AccountingPeriod. Reports can be generated at the individual cost object level or aggregated up cost center and profit center hierarchies. Variance analysis typically runs as a period-end process after all postings for the period are complete. Detailed variance categorization (input price, input quantity, volume, mix) and manufacturing-specific variances (price, usage, efficiency) are out of scope for this feature.
8
+
9
+ ## Business Purpose
10
+
11
+ Organizations need systematic variance analysis to monitor financial performance against plans and enable timely corrective action:
12
+
13
+ - **Budget adherence monitoring**: Comparing actual costs and revenues against budgeted amounts by cost object reveals where spending is on track and where deviations require management attention
14
+ - **Favorable/unfavorable categorization**: Automatically classifying variances as favorable (actual costs below plan, or actual revenue above plan) or unfavorable (the inverse) provides immediate directional context for decision-makers without manual interpretation
15
+ - **Cost element detail**: VarianceReportLine records break down variances by cost element (salaries, travel, materials, etc.) within each cost object, enabling managers to identify exactly which cost type is driving deviations rather than only seeing an aggregate total — this is essential for actionable root-cause analysis
16
+ - **Cost object granularity**: Generating variance reports per cost center, profit center, or internal order allows managers to pinpoint exactly which organizational unit or project is driving deviations from plan
17
+ - **Hierarchy aggregation**: Rolling up variances along cost center and profit center hierarchies enables both detailed drill-down analysis and executive-level summary reporting in a single feature
18
+ - **Period-end management reporting**: Running variance analysis after all period postings are complete produces accurate, comprehensive reports that inform budget revisions, resource reallocation, and strategic decisions for subsequent periods
19
+ - **Variance quantification**: Calculating both absolute variance amounts and variance percentages allows managers to assess deviations in context — a large absolute variance on a small budget line signals a different issue than the same amount on a large budget line
20
+ - **Draft-to-final lifecycle**: The DRAFT to FINAL status progression allows controllers to review and validate variance reports before distributing them to management, preventing premature or incorrect reporting
21
+
22
+ ## Process Flow
23
+
24
+ ```mermaid
25
+ stateDiagram-v2
26
+ [*] --> CollectActuals: initiateVarianceAnalysis
27
+ CollectActuals --> CollectPlan: actuals aggregated
28
+ CollectPlan --> CalculateVariance: plan amounts retrieved
29
+ CalculateVariance --> Categorize: variance computed
30
+ Categorize --> GenerateReport: direction assigned
31
+ GenerateReport --> [*]: VarianceReport created (DRAFT)
32
+ ```
33
+
34
+ ```mermaid
35
+ flowchart TD
36
+ A[Period-end: all postings complete] --> B[Collect actual amounts from posted journal entries]
37
+ B --> C[Aggregate actuals by cost element + cost object + period]
38
+ C --> D[Collect planned amounts from budget-management BudgetLineItems by cost element]
39
+ D --> E[Match actuals to plan by cost element, cost object, and period]
40
+ E --> F[Calculate variance per cost element: Actual - Planned]
41
+ F --> G{Account type?}
42
+ G -- Cost/Expense --> H{Actual < Planned?}
43
+ H -- Yes --> I[FAVORABLE]
44
+ H -- No --> J[UNFAVORABLE]
45
+ G -- Revenue --> K{Actual > Planned?}
46
+ K -- Yes --> L[FAVORABLE]
47
+ K -- No --> M[UNFAVORABLE]
48
+ I --> N[Compute variance percentage]
49
+ J --> N
50
+ L --> N
51
+ M --> N
52
+ N --> O[Create VarianceReportLine per cost element]
53
+ O --> O2[Create VarianceReport in DRAFT with summary totals and detail lines]
54
+ O2 --> P{Review and validate}
55
+ P -- Approved --> Q[Finalize report: status FINAL]
56
+ P -- Issues found --> R[Investigate and correct source data]
57
+ R --> A
58
+ ```
59
+
60
+ ```mermaid
61
+ flowchart TD
62
+ A[Select reporting scope] --> B{Report level?}
63
+ B -- Individual cost object --> C[Generate report for single cost center / profit center / internal order]
64
+ B -- Hierarchy --> D[Retrieve child cost objects from hierarchy]
65
+ D --> E[Generate individual reports per child]
66
+ E --> F[Aggregate variances up hierarchy levels]
67
+ F --> G[Produce consolidated hierarchy report]
68
+ C --> H[VarianceReport ready for review]
69
+ G --> H
70
+ ```
71
+
72
+ ## Scenario Patterns
73
+
74
+ - **Monthly cost center review**: At month-end close, the controller initiates variance analysis for all cost centers within a company for the current accounting period. The system collects posted journal entry totals by cost center, retrieves corresponding budget line items, computes variances, and generates DRAFT variance reports. The controller reviews and finalizes each report before distributing to cost center managers
75
+ - **Profit center profitability check**: A division head requests a variance report for their profit center to compare actual revenue and costs against the annual plan. The report's detail lines show revenue above plan (FAVORABLE) but the material cost element significantly above plan (UNFAVORABLE), enabling the manager to pinpoint supplier pricing changes as the root cause without needing a separate drill-down report
76
+ - **Internal order cost overrun detection**: A project manager reviews the variance report for an internal order representing a capital project. The report reveals actual spending at 120% of the planned amount with two periods remaining, triggering a budget revision request and scope review
77
+ - **Hierarchy roll-up for executive reporting**: The CFO requests a consolidated variance report across all profit centers. The system generates individual profit center variance reports and then aggregates them up the profit center hierarchy, producing a company-level summary showing total planned vs. actual with net variance amounts and percentages
78
+ - **Cross-period trend analysis**: A controller generates variance reports for the same cost center across multiple consecutive periods to identify whether an unfavorable variance is a one-time event or a recurring trend, informing whether a structural budget adjustment is needed
79
+ - **Revenue variance investigation**: A sales manager receives a variance report showing actual revenue below plan (UNFAVORABLE) for their profit center. The variance percentage of -15% triggers a review of sales pipeline and customer order patterns to understand the shortfall
80
+ - **Period-end sequential processing**: The accounting team completes all journal entry postings and subledger reconciliations for the period, then runs variance analysis as the final step before period close. This sequence ensures variance reports reflect the complete and accurate financial picture for the period
81
+
82
+ ## Test Cases
83
+
84
+ - Variance report can only be created for a valid Company that is in ACTIVE status
85
+ - Variance report must reference a valid AccountingPeriod
86
+ - Variance report must reference a valid cost object (cost center, profit center, or internal order)
87
+ - Variance report is created in DRAFT status
88
+ - Variance report can transition from DRAFT to FINAL
89
+ - Variance report in FINAL status cannot be transitioned back to DRAFT
90
+ - A VarianceReport contains one or more VarianceReportLine child records, each keyed by cost element and accounting period
91
+ - Each VarianceReportLine records: cost element reference, accounting period, planned amount, actual amount, variance amount, variance percentage, and variance direction
92
+ - VarianceReport summary totals (total planned, total actual, total variance) are computed from the sum of its detail lines
93
+ - Variance amount on each VarianceReportLine is calculated as actual amount minus planned amount
94
+ - Variance percentage on each VarianceReportLine is calculated as (actual - planned) / planned * 100
95
+ - When planned amount is zero and actual amount is non-zero on a detail line, variance percentage is handled gracefully (not division by zero)
96
+ - For cost/expense cost elements, variance direction is FAVORABLE when actual amount is less than planned amount
97
+ - For cost/expense cost elements, variance direction is UNFAVORABLE when actual amount is greater than planned amount
98
+ - For revenue cost elements, variance direction is FAVORABLE when actual amount is greater than planned amount
99
+ - For revenue cost elements, variance direction is UNFAVORABLE when actual amount is less than planned amount
100
+ - When actual equals planned on a detail line, variance amount is zero and variance direction is FAVORABLE
101
+ - Actual amounts are sourced exclusively from POSTED journal entries in the finance-ledger module
102
+ - DRAFT journal entries are excluded from actual amount aggregation
103
+ - Actual amounts are aggregated by cost element, cost object, and accounting period
104
+ - Planned amounts are sourced from BudgetLineItems in the budget-management module, matched by cost element
105
+ - A variance report cannot be generated if no budget line items exist for the specified cost object and period
106
+ - A VarianceReportLine is created for each cost element that has either a planned amount or an actual amount (or both)
107
+ - A cost element with actual postings but no corresponding budget line item generates a detail line with zero planned amount
108
+ - Variance reports for cost centers aggregate all journal lines assigned to that cost center in the given period, grouped by cost element
109
+ - Variance reports for profit centers aggregate all journal lines assigned to that profit center in the given period, grouped by cost element
110
+ - Variance reports for internal orders aggregate all journal lines assigned to that internal order in the given period, grouped by cost element
111
+ - Hierarchy aggregation for cost centers sums child cost center variances into the parent cost center report
112
+ - Hierarchy aggregation for profit centers sums child profit center variances into the parent profit center report
113
+ - Hierarchy-aggregated reports include both the individual child variances and the consolidated parent totals
114
+ - A DRAFT variance report can be updated (e.g., to correct a cost object reference) before finalization
115
+ - A FINAL variance report cannot be modified
116
+ - Generating a variance report for a period with no posted journal entries results in zero actual amounts
117
+ - Variance reports are scoped to a single company; data from other companies is excluded
118
+ - Multiple variance reports can exist for the same cost object across different accounting periods
119
+ - Regenerating a variance report for the same cost object and period replaces the existing DRAFT report
120
+ - A FINAL variance report is not overwritten by regeneration; a new DRAFT is created alongside it if source data changes
121
+ - Variance report includes both the absolute variance amount and the variance percentage
122
+ - Variance report records the variance direction as either FAVORABLE or UNFAVORABLE
123
+
124
+ ## Reference Links
125
+
126
+ - [SAP S/4HANA Variance Analysis in Controlling](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee3509643e954b3da2e0ebfa846c02e1/b33fa239f4d446e9a6c8a585c4e148c8.html)
127
+ - [Oracle Fusion Budgetary Control and Variance Reporting](https://docs.oracle.com/en/cloud/saas/financials/24d/oafcf/budgetary-control.html)
128
+ - [Odoo Budget Management and Analysis](https://www.odoo.com/documentation/19.0/applications/finance/accounting/reporting/budget.html)
129
+ - [NetSuite Budget vs. Actual Reporting](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N1584498.html)
130
+ - [CIMA Management Accounting Variance Analysis](https://www.cimaglobal.com/resources/)
@@ -0,0 +1,81 @@
1
+ # AllocationCycle
2
+
3
+ ## Description
4
+
5
+ AllocationCycle is the controlling entity that groups a set of allocation rules for distributing overhead costs from sender cost centers to receiver cost objects (cost centers, profit centers, or internal orders). Each cycle carries a name, allocation type (ASSESSMENT or DISTRIBUTION), company scope, accounting period reference, and a status. Assessment-type allocations post using secondary cost elements, aggregating original cost elements into a single overhead category on the receiver. Distribution-type allocations preserve the original primary cost elements on the receiver side for full cost transparency. Allocation cycles progress through a controlled lifecycle — DRAFT, VALIDATED, EXECUTED, POSTED, and optionally REVERSED — ensuring allocations are reviewed and tested before affecting the general ledger.
6
+
7
+ ## Domain Model Definitions
8
+
9
+ ### Model type
10
+
11
+ Stateful
12
+
13
+ #### State Transitions
14
+
15
+ ```mermaid
16
+ stateDiagram-v2
17
+ [*] --> Draft: createAllocationCycle
18
+ Draft --> Draft: updateAllocationCycle / createAllocationRule / deleteAllocationRule
19
+ Draft --> Validated: validateAllocationCycle
20
+ Validated --> Draft: invalidateAllocationCycle
21
+ Validated --> Executed: executeAllocationCycle (ACTUAL)
22
+ Executed --> Posted: postAllocationCycle
23
+ Posted --> Reversed: reverseAllocationCycle
24
+ Draft --> [*]: deleteAllocationCycle
25
+ ```
26
+
27
+ ### Command Definitions
28
+
29
+ - [createAllocationCycle](../commands/CreateAllocationCycle.md) - Create a new allocation cycle in DRAFT status with type, name, company, and accounting period
30
+ - [updateAllocationCycle](../commands/UpdateAllocationCycle.md) - Update mutable fields of a DRAFT allocation cycle (name)
31
+ - [validateAllocationCycle](../commands/ValidateAllocationCycle.md) - Validate a DRAFT cycle, verifying all rules have percentages summing to 100% per sender
32
+ - [invalidateAllocationCycle](../commands/InvalidateAllocationCycle.md) - Return a VALIDATED cycle to DRAFT for further editing
33
+ - [executeAllocationCycle](../commands/ExecuteAllocationCycle.md) - Execute a VALIDATED cycle in ACTUAL mode, creating immutable allocation result records
34
+ - [postAllocationCycle](../commands/PostAllocationCycle.md) - Post an EXECUTED cycle, creating journal entries through finance-ledger subledger integration
35
+ - [reverseAllocationCycle](../commands/ReverseAllocationCycle.md) - Reverse a POSTED cycle by creating reversal journal entries with inverted amounts
36
+ - [deleteAllocationCycle](../commands/DeleteAllocationCycle.md) - Delete a DRAFT allocation cycle and its associated rules
37
+ - [createAllocationRule](../commands/CreateAllocationRule.md) - Add an allocation rule to a DRAFT cycle defining sender, receiver, and percentage
38
+ - [deleteAllocationRule](../commands/DeleteAllocationRule.md) - Remove an allocation rule from a DRAFT cycle
39
+
40
+ ### Query Definitions
41
+
42
+ - [GetAllocationCycle](../queries/GetAllocationCycle.md) - Retrieve an allocation cycle by id with its rules and results
43
+ - [ListAllocationCycles](../queries/ListAllocationCycles.md) - List allocation cycles with filters (type, status, company, period)
44
+
45
+ ### Models
46
+
47
+ - AllocationCycle
48
+ - AllocationRule
49
+ - AllocationResult
50
+
51
+ ### Invariants
52
+
53
+ - Allocation cycle can only be created in DRAFT status
54
+ - Allocation cycle requires a valid type (ASSESSMENT or DISTRIBUTION)
55
+ - Allocation cycle requires a valid name
56
+ - Allocation cycle must reference a valid companyId; the company must be in ACTIVE status
57
+ - Allocation cycle must reference a valid accounting period
58
+ - Allocation rules can only be added to or removed from a DRAFT cycle
59
+ - Allocation rule percentages for a given sender must sum to exactly 100%
60
+ - Allocation rule percentage values must be positive (greater than zero)
61
+ - A sender cost center cannot also appear as a receiver within the same allocation rule set
62
+ - Validating a cycle with no allocation rules fails
63
+ - A VALIDATED cycle can be returned to DRAFT for further editing
64
+ - Executing a cycle that is not in VALIDATED status fails
65
+ - Execution in ACTUAL mode creates immutable AllocationResult records
66
+ - Posting transitions the cycle from EXECUTED to POSTED, creating journal entries
67
+ - Assessment-type allocation postings use secondary cost elements in the generated journal entries
68
+ - Distribution-type allocation postings preserve the original primary cost elements in the generated journal entries
69
+ - Posting an allocation cycle to a CLOSED or PERMANENTLY_CLOSED period is rejected
70
+ - Reversing a POSTED cycle creates reversal journal entries with inverted amounts
71
+ - A REVERSED cycle cannot be reversed again
72
+ - Updating allocation cycle fields is only permitted while in DRAFT status
73
+ - Deleting an allocation cycle is only permitted while in DRAFT status
74
+ - Allocation cycles are scoped to a company; cycles from different companies are fully isolated
75
+
76
+ ### Relationships
77
+
78
+ - **References Company**: Each allocation cycle is scoped to a Company via companyId (organization module)
79
+ - **References AccountingPeriod**: Each allocation cycle references an AccountingPeriod via accountingPeriodId (finance-ledger module)
80
+ - **Has Many AllocationRule**: An allocation cycle contains one or more allocation rules defining sender-receiver-percentage mappings
81
+ - **Has Many AllocationResult**: An executed allocation cycle produces immutable allocation result records
@@ -0,0 +1,37 @@
1
+ # AllocationResult
2
+
3
+ ## Description
4
+
5
+ AllocationResult is an immutable record produced when an allocation cycle is executed in ACTUAL mode, capturing the outcome of a single sender-receiver cost distribution. Each result carries an allocation cycle reference, sender cost center reference, receiver type, receiver id, allocated amount, and cost element reference. Allocation results serve as the authoritative audit trail for cost allocations, linking the cycle, sender, receiver, allocated amount, and cost element used. Once created, allocation result records cannot be modified or deleted — corrections are handled exclusively through cycle reversal and re-execution.
6
+
7
+ ## Domain Model Definitions
8
+
9
+ ### Model type
10
+
11
+ AppendOnly
12
+
13
+ ### Command Definitions
14
+
15
+ - [executeAllocationCycle](../commands/ExecuteAllocationCycle.md) - Allocation results are created as part of executing an allocation cycle in ACTUAL mode
16
+
17
+ ### Query Definitions
18
+
19
+ - [GetAllocationCycle](../queries/GetAllocationCycle.md) - Retrieve allocation results as part of the parent allocation cycle
20
+
21
+ ### Models
22
+
23
+ - AllocationResult
24
+
25
+ ### Invariants
26
+
27
+ - Allocation results are created exclusively during allocation cycle execution in ACTUAL mode
28
+ - Allocation results cannot be modified or deleted after creation
29
+ - Each allocation result references the allocation cycle, sender, receiver, allocated amount, and cost element used
30
+ - Allocation results serve as the immutable audit trail for cost allocations
31
+
32
+ ### Relationships
33
+
34
+ - **Belongs to AllocationCycle**: Each allocation result belongs to an AllocationCycle via allocationCycleId
35
+ - **References CostCenter (sender)**: Each allocation result references a sender CostCenter via senderCostCenterId
36
+ - **Polymorphic Receiver**: Each allocation result references a receiver via receiverType and receiverId, which can be a CostCenter, ProfitCenter, or InternalOrder
37
+ - **References CostElement**: Each allocation result references a CostElement via costElementId
@@ -0,0 +1,41 @@
1
+ # AllocationRule
2
+
3
+ ## Description
4
+
5
+ AllocationRule defines a single sender-receiver-percentage mapping within an allocation cycle, specifying which cost center sends costs, which cost object receives them, and the allocation percentage. Each rule carries an allocation cycle reference, sender cost center reference, receiver type, receiver id, and percentage. Receivers can be cost centers, profit centers, or internal orders (polymorphic reference). Multiple rules within a cycle define how a sender's costs are split across multiple receivers, with the constraint that percentages for a given sender must sum to exactly 100%.
6
+
7
+ ## Domain Model Definitions
8
+
9
+ ### Model type
10
+
11
+ Standard
12
+
13
+ ### Command Definitions
14
+
15
+ - [createAllocationRule](../commands/CreateAllocationRule.md) - Add an allocation rule to a DRAFT allocation cycle
16
+ - [deleteAllocationRule](../commands/DeleteAllocationRule.md) - Remove an allocation rule from a DRAFT allocation cycle
17
+
18
+ ### Query Definitions
19
+
20
+ - [GetAllocationCycle](../queries/GetAllocationCycle.md) - Retrieve allocation rules as part of the parent allocation cycle
21
+
22
+ ### Models
23
+
24
+ - AllocationRule
25
+
26
+ ### Invariants
27
+
28
+ - Allocation rule must reference a valid allocation cycle via allocationCycleId
29
+ - Allocation rule can only be added to or removed from a DRAFT allocation cycle
30
+ - Allocation rule must reference a valid sender cost center
31
+ - Allocation rule must reference a valid receiver cost object (cost center, profit center, or internal order)
32
+ - A sender cost center cannot also appear as a receiver within the same allocation rule set
33
+ - Allocation rule percentage must be a positive value (greater than zero)
34
+ - Allocation rule percentages for a given sender must sum to exactly 100% across all rules in the cycle
35
+ - Allocation rules cannot be modified after the cycle leaves DRAFT status
36
+
37
+ ### Relationships
38
+
39
+ - **Belongs to AllocationCycle**: Each allocation rule belongs to an AllocationCycle via allocationCycleId
40
+ - **References CostCenter (sender)**: Each allocation rule references a sender CostCenter via senderCostCenterId
41
+ - **Polymorphic Receiver**: Each allocation rule references a receiver via receiverType and receiverId, which can be a CostCenter, ProfitCenter, or InternalOrder
@@ -0,0 +1,77 @@
1
+ # Budget
2
+
3
+ ## Description
4
+
5
+ Budget is the financial planning entity of the accounting module, enabling organizations to create budgets with line items per cost element, manage approval workflows, track multiple budget versions, and compare budgeted amounts against actual postings from finance-ledger. Each budget carries a name, optional description, budget holder, fiscal year reference, company scope, cost object type and id (polymorphic reference to cost center, profit center, or internal order), plan version reference, total amount, and status. Budgets follow a five-stage lifecycle — DRAFT, SUBMITTED, APPROVED, ACTIVE, CLOSED — enforcing segregation of duties between budget creation, approval, and cost posting. When active, budgets enable budgetary control (funds check) that validates transactions against available budget using the formula: Available = Budget - (Actual + Commitments + Encumbrances).
6
+
7
+ ## Domain Model Definitions
8
+
9
+ ### Model type
10
+
11
+ Stateful
12
+
13
+ #### State Transitions
14
+
15
+ ```mermaid
16
+ stateDiagram-v2
17
+ [*] --> Draft: createBudget
18
+ Draft --> Draft: updateBudget / createBudgetLineItem / deleteBudgetLineItem
19
+ Draft --> Submitted: submitBudget
20
+ Submitted --> Approved: approveBudget
21
+ Submitted --> Draft: rejectBudget
22
+ Approved --> Active: activateBudget
23
+ Active --> Closed: closeBudget
24
+ Draft --> [*]: deleteBudget
25
+ ```
26
+
27
+ ### Command Definitions
28
+
29
+ - [createBudget](../commands/CreateBudget.md) - Create a new budget in DRAFT status with name, budget holder, fiscal year, cost object, and plan version
30
+ - [updateBudget](../commands/UpdateBudget.md) - Update mutable fields of a DRAFT budget (name, description, budget holder)
31
+ - [submitBudget](../commands/SubmitBudget.md) - Submit a DRAFT budget for approval review
32
+ - [approveBudget](../commands/ApproveBudget.md) - Approve a SUBMITTED budget, advancing it toward activation
33
+ - [rejectBudget](../commands/RejectBudget.md) - Reject a SUBMITTED budget back to DRAFT with a rejection reason
34
+ - [activateBudget](../commands/ActivateBudget.md) - Activate an APPROVED budget, enabling budgetary control (funds check)
35
+ - [closeBudget](../commands/CloseBudget.md) - Close an ACTIVE budget, preventing further modifications
36
+ - [deleteBudget](../commands/DeleteBudget.md) - Delete a DRAFT budget and all associated line items
37
+ - [createBudgetLineItem](../commands/CreateBudgetLineItem.md) - Add a budget line item to a DRAFT budget specifying cost element, period, and planned amount
38
+ - [deleteBudgetLineItem](../commands/DeleteBudgetLineItem.md) - Remove a budget line item from a DRAFT budget
39
+
40
+ ### Query Definitions
41
+
42
+ - [GetBudget](../queries/GetBudget.md) - Retrieve a budget by id with all line items
43
+ - [ListBudgets](../queries/ListBudgets.md) - List budgets with filters (status, company, fiscal year, cost object)
44
+ - [CalculateBudgetAvailability](../queries/CalculateBudgetAvailability.md) - Compute budget availability as Budget - (Actual + Commitments + Encumbrances) for a cost element, period, and cost object
45
+
46
+ ### Models
47
+
48
+ - Budget
49
+ - BudgetLineItem
50
+
51
+ ### Invariants
52
+
53
+ - Budget can only be created in DRAFT status
54
+ - Budget requires a valid companyId; the company must be in ACTIVE status
55
+ - Budget requires a valid fiscal year reference from finance-ledger
56
+ - Budget requires a name, budget holder, and cost object reference (cost center, profit center, or internal order)
57
+ - Budget must reference a valid PlanVersion (BUDGET, FORECAST, or SIMULATION)
58
+ - A budget with no line items cannot be submitted
59
+ - Only a user different from the budget creator can approve the budget (segregation of duties)
60
+ - Rejection requires a reason text
61
+ - Only one ACTIVE budget of type BUDGET can exist per cost object per fiscal year
62
+ - Multiple FORECAST or SIMULATION versions can coexist for the same cost object and fiscal year
63
+ - Line items can only be added to or removed from a DRAFT budget
64
+ - A CLOSED budget cannot be reopened; no further modifications are permitted
65
+ - Funds check computes BudgetAvailability as Budget - (Actual + Commitments + Encumbrances) for the target cost element, period, and cost object
66
+ - A transaction that exceeds BudgetAvailability is rejected with a budget exceeded error when budgetary control is active
67
+ - Budget periods align with finance-ledger AccountingPeriod boundaries; misaligned periods are rejected
68
+ - Locking a budget period prevents further modifications to planned amounts for that period
69
+ - Budgets are scoped to a company; budgets from different companies are fully isolated
70
+
71
+ ### Relationships
72
+
73
+ - **References Company**: Each budget is scoped to a Company via companyId (organization module)
74
+ - **References FiscalYear**: Each budget references a FiscalYear via fiscalYearId (finance-ledger module)
75
+ - **References PlanVersion**: Each budget references a PlanVersion via planVersionId
76
+ - **Polymorphic Cost Object**: Each budget references a cost object via costObjectType and costObjectId, which can be a CostCenter, ProfitCenter, or InternalOrder
77
+ - **Has Many BudgetLineItem**: A budget contains one or more budget line items specifying planned amounts per cost element and period