@tailor-platform/erp-kit 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (756) hide show
  1. package/CHANGELOG.md +40 -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-1-requirements/SKILL.md +6 -0
  6. package/skills/erp-kit-app-2-requirements-review/SKILL.md +6 -0
  7. package/skills/erp-kit-app-3-plan/SKILL.md +6 -0
  8. package/skills/erp-kit-app-4-plan-review/SKILL.md +6 -0
  9. package/skills/erp-kit-app-5-impl-backend/SKILL.md +12 -5
  10. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -1
  11. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +37 -12
  12. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +9 -1
  13. package/skills/erp-kit-app-6-impl-frontend/references/component.md +90 -0
  14. package/skills/erp-kit-app-6-impl-frontend/references/detail-view.md +255 -0
  15. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +1 -5
  16. package/skills/erp-kit-app-7-impl-review/SKILL.md +9 -2
  17. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +14 -8
  18. package/skills/erp-kit-app-shared/SKILL.md +2 -0
  19. package/skills/erp-kit-mock-scenario/SKILL.md +6 -0
  20. package/skills/erp-kit-module-1-requirements/SKILL.md +6 -0
  21. package/skills/erp-kit-module-2-requirements-review/SKILL.md +6 -0
  22. package/skills/erp-kit-module-3-plan/SKILL.md +6 -0
  23. package/skills/erp-kit-module-3-update-plan/SKILL.md +6 -0
  24. package/skills/erp-kit-module-4-plan-review/SKILL.md +6 -0
  25. package/skills/erp-kit-module-5-impl/SKILL.md +6 -0
  26. package/skills/erp-kit-module-6-impl-review/SKILL.md +22 -19
  27. package/skills/erp-kit-module-shared/SKILL.md +2 -0
  28. package/skills/erp-kit-module-shared/references/commands.md +71 -1
  29. package/skills/erp-kit-update/SKILL.md +6 -0
  30. package/src/commands/index.ts +8 -2
  31. package/src/commands/init.test.ts +24 -8
  32. package/src/commands/init.ts +5 -12
  33. package/src/commands/lib/distribute.test.ts +1 -20
  34. package/src/commands/lib/distribute.ts +0 -14
  35. package/src/commands/update.test.ts +1 -1
  36. package/src/generator/scaffold.ts +25 -4
  37. package/src/module.ts +4 -1
  38. package/src/modules/accounting/README.md +63 -0
  39. package/src/modules/accounting/command/activateBudget.generated.ts +6 -0
  40. package/src/modules/accounting/command/activateBudget.test.ts +119 -0
  41. package/src/modules/accounting/command/activateBudget.ts +77 -0
  42. package/src/modules/accounting/command/activateCostElement.generated.ts +6 -0
  43. package/src/modules/accounting/command/activateCostElement.test.ts +59 -0
  44. package/src/modules/accounting/command/activateCostElement.ts +41 -0
  45. package/src/modules/accounting/command/activateProfitCenter.generated.ts +6 -0
  46. package/src/modules/accounting/command/activateProfitCenter.test.ts +60 -0
  47. package/src/modules/accounting/command/activateProfitCenter.ts +38 -0
  48. package/src/modules/accounting/command/approveBudget.generated.ts +6 -0
  49. package/src/modules/accounting/command/approveBudget.test.ts +69 -0
  50. package/src/modules/accounting/command/approveBudget.ts +47 -0
  51. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.generated.ts +6 -0
  52. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.test.ts +112 -0
  53. package/src/modules/accounting/command/assignCostCenterToHierarchyNode.ts +67 -0
  54. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.generated.ts +6 -0
  55. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +123 -0
  56. package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +71 -0
  57. package/src/modules/accounting/command/closeBudget.generated.ts +6 -0
  58. package/src/modules/accounting/command/closeBudget.test.ts +93 -0
  59. package/src/modules/accounting/command/closeBudget.ts +40 -0
  60. package/src/modules/accounting/command/closeInternalOrder.generated.ts +6 -0
  61. package/src/modules/accounting/command/closeInternalOrder.test.ts +74 -0
  62. package/src/modules/accounting/command/closeInternalOrder.ts +38 -0
  63. package/src/modules/accounting/command/consumeCommitment.generated.ts +6 -0
  64. package/src/modules/accounting/command/consumeCommitment.test.ts +123 -0
  65. package/src/modules/accounting/command/consumeCommitment.ts +62 -0
  66. package/src/modules/accounting/command/createAllocationCycle.generated.ts +6 -0
  67. package/src/modules/accounting/command/createAllocationCycle.test.ts +166 -0
  68. package/src/modules/accounting/command/createAllocationCycle.ts +68 -0
  69. package/src/modules/accounting/command/createAllocationRule.generated.ts +6 -0
  70. package/src/modules/accounting/command/createAllocationRule.test.ts +195 -0
  71. package/src/modules/accounting/command/createAllocationRule.ts +103 -0
  72. package/src/modules/accounting/command/createBudget.generated.ts +6 -0
  73. package/src/modules/accounting/command/createBudget.test.ts +159 -0
  74. package/src/modules/accounting/command/createBudget.ts +100 -0
  75. package/src/modules/accounting/command/createBudgetLineItem.generated.ts +6 -0
  76. package/src/modules/accounting/command/createBudgetLineItem.test.ts +178 -0
  77. package/src/modules/accounting/command/createBudgetLineItem.ts +104 -0
  78. package/src/modules/accounting/command/createCostCenter.generated.ts +6 -0
  79. package/src/modules/accounting/command/createCostCenter.test.ts +179 -0
  80. package/src/modules/accounting/command/createCostCenter.ts +112 -0
  81. package/src/modules/accounting/command/createCostCenterHierarchy.generated.ts +6 -0
  82. package/src/modules/accounting/command/createCostCenterHierarchy.test.ts +91 -0
  83. package/src/modules/accounting/command/createCostCenterHierarchy.ts +48 -0
  84. package/src/modules/accounting/command/createCostCenterHierarchyNode.generated.ts +6 -0
  85. package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +171 -0
  86. package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +117 -0
  87. package/src/modules/accounting/command/createCostElement.generated.ts +6 -0
  88. package/src/modules/accounting/command/createCostElement.test.ts +317 -0
  89. package/src/modules/accounting/command/createCostElement.ts +149 -0
  90. package/src/modules/accounting/command/createInternalOrder.generated.ts +6 -0
  91. package/src/modules/accounting/command/createInternalOrder.test.ts +206 -0
  92. package/src/modules/accounting/command/createInternalOrder.ts +104 -0
  93. package/src/modules/accounting/command/createPlanVersion.generated.ts +6 -0
  94. package/src/modules/accounting/command/createPlanVersion.test.ts +230 -0
  95. package/src/modules/accounting/command/createPlanVersion.ts +71 -0
  96. package/src/modules/accounting/command/createProfitCenter.generated.ts +6 -0
  97. package/src/modules/accounting/command/createProfitCenter.test.ts +227 -0
  98. package/src/modules/accounting/command/createProfitCenter.ts +81 -0
  99. package/src/modules/accounting/command/createProfitCenterHierarchy.generated.ts +6 -0
  100. package/src/modules/accounting/command/createProfitCenterHierarchy.test.ts +91 -0
  101. package/src/modules/accounting/command/createProfitCenterHierarchy.ts +46 -0
  102. package/src/modules/accounting/command/createProfitCenterHierarchyNode.generated.ts +6 -0
  103. package/src/modules/accounting/command/createProfitCenterHierarchyNode.test.ts +160 -0
  104. package/src/modules/accounting/command/createProfitCenterHierarchyNode.ts +109 -0
  105. package/src/modules/accounting/command/deactivateCostElement.generated.ts +6 -0
  106. package/src/modules/accounting/command/deactivateCostElement.test.ts +59 -0
  107. package/src/modules/accounting/command/deactivateCostElement.ts +41 -0
  108. package/src/modules/accounting/command/deactivateProfitCenter.generated.ts +6 -0
  109. package/src/modules/accounting/command/deactivateProfitCenter.test.ts +60 -0
  110. package/src/modules/accounting/command/deactivateProfitCenter.ts +42 -0
  111. package/src/modules/accounting/command/deleteAllocationCycle.generated.ts +6 -0
  112. package/src/modules/accounting/command/deleteAllocationCycle.test.ts +90 -0
  113. package/src/modules/accounting/command/deleteAllocationCycle.ts +39 -0
  114. package/src/modules/accounting/command/deleteAllocationRule.generated.ts +6 -0
  115. package/src/modules/accounting/command/deleteAllocationRule.test.ts +98 -0
  116. package/src/modules/accounting/command/deleteAllocationRule.ts +40 -0
  117. package/src/modules/accounting/command/deleteBudget.generated.ts +6 -0
  118. package/src/modules/accounting/command/deleteBudget.test.ts +90 -0
  119. package/src/modules/accounting/command/deleteBudget.ts +35 -0
  120. package/src/modules/accounting/command/deleteBudgetLineItem.generated.ts +6 -0
  121. package/src/modules/accounting/command/deleteBudgetLineItem.test.ts +85 -0
  122. package/src/modules/accounting/command/deleteBudgetLineItem.ts +50 -0
  123. package/src/modules/accounting/command/deleteCostCenter.generated.ts +6 -0
  124. package/src/modules/accounting/command/deleteCostCenter.test.ts +79 -0
  125. package/src/modules/accounting/command/deleteCostCenter.ts +67 -0
  126. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.generated.ts +6 -0
  127. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.test.ts +59 -0
  128. package/src/modules/accounting/command/deleteCostCenterHierarchyNode.ts +58 -0
  129. package/src/modules/accounting/command/deleteCostElement.generated.ts +6 -0
  130. package/src/modules/accounting/command/deleteCostElement.test.ts +58 -0
  131. package/src/modules/accounting/command/deleteCostElement.ts +33 -0
  132. package/src/modules/accounting/command/deleteInternalOrder.generated.ts +6 -0
  133. package/src/modules/accounting/command/deleteInternalOrder.test.ts +81 -0
  134. package/src/modules/accounting/command/deleteInternalOrder.ts +37 -0
  135. package/src/modules/accounting/command/deleteProfitCenter.generated.ts +6 -0
  136. package/src/modules/accounting/command/deleteProfitCenter.test.ts +68 -0
  137. package/src/modules/accounting/command/deleteProfitCenter.ts +39 -0
  138. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.generated.ts +6 -0
  139. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.test.ts +72 -0
  140. package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.ts +61 -0
  141. package/src/modules/accounting/command/executeAllocationCycle.generated.ts +6 -0
  142. package/src/modules/accounting/command/executeAllocationCycle.test.ts +167 -0
  143. package/src/modules/accounting/command/executeAllocationCycle.ts +94 -0
  144. package/src/modules/accounting/command/finalizeVarianceReport.generated.ts +6 -0
  145. package/src/modules/accounting/command/finalizeVarianceReport.test.ts +60 -0
  146. package/src/modules/accounting/command/finalizeVarianceReport.ts +45 -0
  147. package/src/modules/accounting/command/generateVarianceReport.generated.ts +6 -0
  148. package/src/modules/accounting/command/generateVarianceReport.test.ts +386 -0
  149. package/src/modules/accounting/command/generateVarianceReport.ts +219 -0
  150. package/src/modules/accounting/command/invalidateAllocationCycle.generated.ts +6 -0
  151. package/src/modules/accounting/command/invalidateAllocationCycle.test.ts +84 -0
  152. package/src/modules/accounting/command/invalidateAllocationCycle.ts +45 -0
  153. package/src/modules/accounting/command/moveCostCenterHierarchyNode.generated.ts +6 -0
  154. package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +135 -0
  155. package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +81 -0
  156. package/src/modules/accounting/command/postAllocationCycle.generated.ts +6 -0
  157. package/src/modules/accounting/command/postAllocationCycle.test.ts +98 -0
  158. package/src/modules/accounting/command/postAllocationCycle.ts +65 -0
  159. package/src/modules/accounting/command/reactivateCostElement.generated.ts +6 -0
  160. package/src/modules/accounting/command/reactivateCostElement.test.ts +59 -0
  161. package/src/modules/accounting/command/reactivateCostElement.ts +41 -0
  162. package/src/modules/accounting/command/reactivateProfitCenter.generated.ts +6 -0
  163. package/src/modules/accounting/command/reactivateProfitCenter.test.ts +60 -0
  164. package/src/modules/accounting/command/reactivateProfitCenter.ts +42 -0
  165. package/src/modules/accounting/command/recordCommitment.generated.ts +6 -0
  166. package/src/modules/accounting/command/recordCommitment.test.ts +157 -0
  167. package/src/modules/accounting/command/recordCommitment.ts +113 -0
  168. package/src/modules/accounting/command/rejectBudget.generated.ts +6 -0
  169. package/src/modules/accounting/command/rejectBudget.test.ts +105 -0
  170. package/src/modules/accounting/command/rejectBudget.ts +51 -0
  171. package/src/modules/accounting/command/releaseCommitment.generated.ts +6 -0
  172. package/src/modules/accounting/command/releaseCommitment.test.ts +94 -0
  173. package/src/modules/accounting/command/releaseCommitment.ts +51 -0
  174. package/src/modules/accounting/command/releaseInternalOrder.generated.ts +6 -0
  175. package/src/modules/accounting/command/releaseInternalOrder.test.ts +74 -0
  176. package/src/modules/accounting/command/releaseInternalOrder.ts +38 -0
  177. package/src/modules/accounting/command/reverseAllocationCycle.generated.ts +6 -0
  178. package/src/modules/accounting/command/reverseAllocationCycle.test.ts +124 -0
  179. package/src/modules/accounting/command/reverseAllocationCycle.ts +63 -0
  180. package/src/modules/accounting/command/submitBudget.generated.ts +6 -0
  181. package/src/modules/accounting/command/submitBudget.test.ts +60 -0
  182. package/src/modules/accounting/command/submitBudget.ts +51 -0
  183. package/src/modules/accounting/command/technicallyCompleteInternalOrder.generated.ts +6 -0
  184. package/src/modules/accounting/command/technicallyCompleteInternalOrder.test.ts +74 -0
  185. package/src/modules/accounting/command/technicallyCompleteInternalOrder.ts +42 -0
  186. package/src/modules/accounting/command/updateAllocationCycle.generated.ts +6 -0
  187. package/src/modules/accounting/command/updateAllocationCycle.test.ts +112 -0
  188. package/src/modules/accounting/command/updateAllocationCycle.ts +41 -0
  189. package/src/modules/accounting/command/updateBudget.generated.ts +6 -0
  190. package/src/modules/accounting/command/updateBudget.test.ts +112 -0
  191. package/src/modules/accounting/command/updateBudget.ts +44 -0
  192. package/src/modules/accounting/command/updateCostCenter.generated.ts +6 -0
  193. package/src/modules/accounting/command/updateCostCenter.test.ts +105 -0
  194. package/src/modules/accounting/command/updateCostCenter.ts +79 -0
  195. package/src/modules/accounting/command/updateCostElement.generated.ts +6 -0
  196. package/src/modules/accounting/command/updateCostElement.test.ts +265 -0
  197. package/src/modules/accounting/command/updateCostElement.ts +158 -0
  198. package/src/modules/accounting/command/updateInternalOrder.generated.ts +6 -0
  199. package/src/modules/accounting/command/updateInternalOrder.test.ts +209 -0
  200. package/src/modules/accounting/command/updateInternalOrder.ts +88 -0
  201. package/src/modules/accounting/command/updateProfitCenter.generated.ts +6 -0
  202. package/src/modules/accounting/command/updateProfitCenter.test.ts +162 -0
  203. package/src/modules/accounting/command/updateProfitCenter.ts +73 -0
  204. package/src/modules/accounting/command/validateAllocationCycle.generated.ts +6 -0
  205. package/src/modules/accounting/command/validateAllocationCycle.test.ts +141 -0
  206. package/src/modules/accounting/command/validateAllocationCycle.ts +80 -0
  207. package/src/modules/accounting/db/allocationCycle.ts +59 -0
  208. package/src/modules/accounting/db/allocationResult.ts +58 -0
  209. package/src/modules/accounting/db/allocationRule.ts +48 -0
  210. package/src/modules/accounting/db/budget.ts +84 -0
  211. package/src/modules/accounting/db/budgetLineItem.ts +64 -0
  212. package/src/modules/accounting/db/commitment.ts +60 -0
  213. package/src/modules/accounting/db/costCenter.ts +73 -0
  214. package/src/modules/accounting/db/costCenterHierarchy.ts +37 -0
  215. package/src/modules/accounting/db/costCenterHierarchyNode.ts +48 -0
  216. package/src/modules/accounting/db/costElement.ts +56 -0
  217. package/src/modules/accounting/db/internalOrder.ts +69 -0
  218. package/src/modules/accounting/db/planVersion.ts +47 -0
  219. package/src/modules/accounting/db/profitCenter.ts +52 -0
  220. package/src/modules/accounting/db/profitCenterHierarchy.ts +36 -0
  221. package/src/modules/accounting/db/profitCenterHierarchyAssignment.ts +62 -0
  222. package/src/modules/accounting/db/profitCenterHierarchyNode.ts +48 -0
  223. package/src/modules/accounting/db/varianceReport.ts +54 -0
  224. package/src/modules/accounting/db/varianceReportLine.ts +62 -0
  225. package/src/modules/accounting/docs/commands/ActivateBudget.md +54 -0
  226. package/src/modules/accounting/docs/commands/ActivateCostElement.md +43 -0
  227. package/src/modules/accounting/docs/commands/ActivateProfitCenter.md +43 -0
  228. package/src/modules/accounting/docs/commands/ApproveBudget.md +46 -0
  229. package/src/modules/accounting/docs/commands/AssignCostCenterToHierarchyNode.md +46 -0
  230. package/src/modules/accounting/docs/commands/AssignProfitCenterToHierarchyNode.md +47 -0
  231. package/src/modules/accounting/docs/commands/CloseBudget.md +47 -0
  232. package/src/modules/accounting/docs/commands/CloseInternalOrder.md +45 -0
  233. package/src/modules/accounting/docs/commands/ConsumeCommitment.md +53 -0
  234. package/src/modules/accounting/docs/commands/CreateAllocationCycle.md +55 -0
  235. package/src/modules/accounting/docs/commands/CreateAllocationRule.md +60 -0
  236. package/src/modules/accounting/docs/commands/CreateBudget.md +65 -0
  237. package/src/modules/accounting/docs/commands/CreateBudgetLineItem.md +66 -0
  238. package/src/modules/accounting/docs/commands/CreateCostCenter.md +64 -0
  239. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchy.md +45 -0
  240. package/src/modules/accounting/docs/commands/CreateCostCenterHierarchyNode.md +61 -0
  241. package/src/modules/accounting/docs/commands/CreateCostElement.md +91 -0
  242. package/src/modules/accounting/docs/commands/CreateInternalOrder.md +72 -0
  243. package/src/modules/accounting/docs/commands/CreatePlanVersion.md +59 -0
  244. package/src/modules/accounting/docs/commands/CreateProfitCenter.md +63 -0
  245. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchy.md +45 -0
  246. package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchyNode.md +60 -0
  247. package/src/modules/accounting/docs/commands/DeactivateCostElement.md +43 -0
  248. package/src/modules/accounting/docs/commands/DeactivateProfitCenter.md +44 -0
  249. package/src/modules/accounting/docs/commands/DeleteAllocationCycle.md +46 -0
  250. package/src/modules/accounting/docs/commands/DeleteAllocationRule.md +45 -0
  251. package/src/modules/accounting/docs/commands/DeleteBudget.md +46 -0
  252. package/src/modules/accounting/docs/commands/DeleteBudgetLineItem.md +45 -0
  253. package/src/modules/accounting/docs/commands/DeleteCostCenter.md +50 -0
  254. package/src/modules/accounting/docs/commands/DeleteCostCenterHierarchyNode.md +45 -0
  255. package/src/modules/accounting/docs/commands/DeleteCostElement.md +43 -0
  256. package/src/modules/accounting/docs/commands/DeleteInternalOrder.md +45 -0
  257. package/src/modules/accounting/docs/commands/DeleteProfitCenter.md +46 -0
  258. package/src/modules/accounting/docs/commands/DeleteProfitCenterHierarchyNode.md +46 -0
  259. package/src/modules/accounting/docs/commands/ExecuteAllocationCycle.md +54 -0
  260. package/src/modules/accounting/docs/commands/FinalizeVarianceReport.md +44 -0
  261. package/src/modules/accounting/docs/commands/GenerateVarianceReport.md +83 -0
  262. package/src/modules/accounting/docs/commands/InvalidateAllocationCycle.md +45 -0
  263. package/src/modules/accounting/docs/commands/MoveCostCenterHierarchyNode.md +51 -0
  264. package/src/modules/accounting/docs/commands/PostAllocationCycle.md +58 -0
  265. package/src/modules/accounting/docs/commands/ReactivateCostElement.md +43 -0
  266. package/src/modules/accounting/docs/commands/ReactivateProfitCenter.md +43 -0
  267. package/src/modules/accounting/docs/commands/RecordCommitment.md +60 -0
  268. package/src/modules/accounting/docs/commands/RejectBudget.md +49 -0
  269. package/src/modules/accounting/docs/commands/ReleaseCommitment.md +45 -0
  270. package/src/modules/accounting/docs/commands/ReleaseInternalOrder.md +44 -0
  271. package/src/modules/accounting/docs/commands/ReverseAllocationCycle.md +55 -0
  272. package/src/modules/accounting/docs/commands/SubmitBudget.md +47 -0
  273. package/src/modules/accounting/docs/commands/TechnicallyCompleteInternalOrder.md +44 -0
  274. package/src/modules/accounting/docs/commands/UpdateAllocationCycle.md +45 -0
  275. package/src/modules/accounting/docs/commands/UpdateBudget.md +47 -0
  276. package/src/modules/accounting/docs/commands/UpdateCostCenter.md +50 -0
  277. package/src/modules/accounting/docs/commands/UpdateCostElement.md +82 -0
  278. package/src/modules/accounting/docs/commands/UpdateInternalOrder.md +62 -0
  279. package/src/modules/accounting/docs/commands/UpdateProfitCenter.md +56 -0
  280. package/src/modules/accounting/docs/commands/ValidateAllocationCycle.md +57 -0
  281. package/src/modules/accounting/docs/features/budget-management.md +147 -0
  282. package/src/modules/accounting/docs/features/cost-allocation.md +129 -0
  283. package/src/modules/accounting/docs/features/cost-center-management.md +118 -0
  284. package/src/modules/accounting/docs/features/cost-element-management.md +114 -0
  285. package/src/modules/accounting/docs/features/internal-order-management.md +111 -0
  286. package/src/modules/accounting/docs/features/profit-center-management.md +120 -0
  287. package/src/modules/accounting/docs/features/variance-analysis.md +130 -0
  288. package/src/modules/accounting/docs/models/AllocationCycle.md +81 -0
  289. package/src/modules/accounting/docs/models/AllocationResult.md +37 -0
  290. package/src/modules/accounting/docs/models/AllocationRule.md +41 -0
  291. package/src/modules/accounting/docs/models/Budget.md +77 -0
  292. package/src/modules/accounting/docs/models/BudgetLineItem.md +40 -0
  293. package/src/modules/accounting/docs/models/Commitment.md +45 -0
  294. package/src/modules/accounting/docs/models/CostCenter.md +51 -0
  295. package/src/modules/accounting/docs/models/CostCenterHierarchy.md +38 -0
  296. package/src/modules/accounting/docs/models/CostCenterHierarchyNode.md +41 -0
  297. package/src/modules/accounting/docs/models/CostElement.md +66 -0
  298. package/src/modules/accounting/docs/models/InternalOrder.md +67 -0
  299. package/src/modules/accounting/docs/models/PlanVersion.md +36 -0
  300. package/src/modules/accounting/docs/models/ProfitCenter.md +66 -0
  301. package/src/modules/accounting/docs/models/ProfitCenterHierarchy.md +36 -0
  302. package/src/modules/accounting/docs/models/ProfitCenterHierarchyAssignment.md +36 -0
  303. package/src/modules/accounting/docs/models/ProfitCenterHierarchyNode.md +39 -0
  304. package/src/modules/accounting/docs/models/VarianceReport.md +58 -0
  305. package/src/modules/accounting/docs/models/VarianceReportLine.md +43 -0
  306. package/src/modules/accounting/docs/queries/CalculateBudgetAvailability.md +64 -0
  307. package/src/modules/accounting/docs/queries/GetAllocationCycle.md +43 -0
  308. package/src/modules/accounting/docs/queries/GetBudget.md +42 -0
  309. package/src/modules/accounting/docs/queries/GetCostCenter.md +38 -0
  310. package/src/modules/accounting/docs/queries/GetCostCenterHierarchy.md +45 -0
  311. package/src/modules/accounting/docs/queries/GetCostElement.md +39 -0
  312. package/src/modules/accounting/docs/queries/GetInternalOrder.md +42 -0
  313. package/src/modules/accounting/docs/queries/GetProfitCenter.md +38 -0
  314. package/src/modules/accounting/docs/queries/GetProfitCenterHierarchy.md +46 -0
  315. package/src/modules/accounting/docs/queries/GetVarianceReport.md +45 -0
  316. package/src/modules/accounting/docs/queries/ListAllocationCycles.md +63 -0
  317. package/src/modules/accounting/docs/queries/ListBudgets.md +70 -0
  318. package/src/modules/accounting/docs/queries/ListCostCenters.md +55 -0
  319. package/src/modules/accounting/docs/queries/ListCostElements.md +63 -0
  320. package/src/modules/accounting/docs/queries/ListInternalOrders.md +62 -0
  321. package/src/modules/accounting/docs/queries/ListProfitCenters.md +49 -0
  322. package/src/modules/accounting/generated/enums.ts +110 -0
  323. package/src/modules/accounting/generated/kysely-tailordb.ts +302 -0
  324. package/src/modules/accounting/index.ts +2 -0
  325. package/src/modules/accounting/lib/_db_deps.ts +70 -0
  326. package/src/modules/accounting/lib/actualAmounts.ts +93 -0
  327. package/src/modules/accounting/lib/allocationPosting.ts +152 -0
  328. package/src/modules/accounting/lib/errors.generated.ts +432 -0
  329. package/src/modules/accounting/lib/permissions.generated.ts +61 -0
  330. package/src/modules/accounting/lib/types.ts +114 -0
  331. package/src/modules/accounting/module.ts +429 -0
  332. package/src/modules/accounting/permissions.ts +3 -0
  333. package/src/modules/accounting/query/calculateBudgetAvailability.generated.ts +5 -0
  334. package/src/modules/accounting/query/calculateBudgetAvailability.test.ts +229 -0
  335. package/src/modules/accounting/query/calculateBudgetAvailability.ts +147 -0
  336. package/src/modules/accounting/query/getAllocationCycle.generated.ts +5 -0
  337. package/src/modules/accounting/query/getAllocationCycle.test.ts +94 -0
  338. package/src/modules/accounting/query/getAllocationCycle.ts +37 -0
  339. package/src/modules/accounting/query/getBudget.generated.ts +5 -0
  340. package/src/modules/accounting/query/getBudget.test.ts +80 -0
  341. package/src/modules/accounting/query/getBudget.ts +31 -0
  342. package/src/modules/accounting/query/getCostCenter.generated.ts +5 -0
  343. package/src/modules/accounting/query/getCostCenter.test.ts +50 -0
  344. package/src/modules/accounting/query/getCostCenter.ts +33 -0
  345. package/src/modules/accounting/query/getCostCenterHierarchy.generated.ts +5 -0
  346. package/src/modules/accounting/query/getCostCenterHierarchy.test.ts +100 -0
  347. package/src/modules/accounting/query/getCostCenterHierarchy.ts +80 -0
  348. package/src/modules/accounting/query/getCostElement.generated.ts +5 -0
  349. package/src/modules/accounting/query/getCostElement.test.ts +57 -0
  350. package/src/modules/accounting/query/getCostElement.ts +21 -0
  351. package/src/modules/accounting/query/getInternalOrder.generated.ts +5 -0
  352. package/src/modules/accounting/query/getInternalOrder.test.ts +73 -0
  353. package/src/modules/accounting/query/getInternalOrder.ts +21 -0
  354. package/src/modules/accounting/query/getProfitCenter.generated.ts +5 -0
  355. package/src/modules/accounting/query/getProfitCenter.test.ts +65 -0
  356. package/src/modules/accounting/query/getProfitCenter.ts +31 -0
  357. package/src/modules/accounting/query/getProfitCenterHierarchy.generated.ts +5 -0
  358. package/src/modules/accounting/query/getProfitCenterHierarchy.test.ts +97 -0
  359. package/src/modules/accounting/query/getProfitCenterHierarchy.ts +87 -0
  360. package/src/modules/accounting/query/getVarianceReport.generated.ts +5 -0
  361. package/src/modules/accounting/query/getVarianceReport.test.ts +108 -0
  362. package/src/modules/accounting/query/getVarianceReport.ts +31 -0
  363. package/src/modules/accounting/query/listAllocationCycles.generated.ts +5 -0
  364. package/src/modules/accounting/query/listAllocationCycles.test.ts +152 -0
  365. package/src/modules/accounting/query/listAllocationCycles.ts +96 -0
  366. package/src/modules/accounting/query/listBudgets.generated.ts +5 -0
  367. package/src/modules/accounting/query/listBudgets.test.ts +150 -0
  368. package/src/modules/accounting/query/listBudgets.ts +85 -0
  369. package/src/modules/accounting/query/listCostCenters.generated.ts +5 -0
  370. package/src/modules/accounting/query/listCostCenters.test.ts +111 -0
  371. package/src/modules/accounting/query/listCostCenters.ts +71 -0
  372. package/src/modules/accounting/query/listCostElements.generated.ts +5 -0
  373. package/src/modules/accounting/query/listCostElements.test.ts +138 -0
  374. package/src/modules/accounting/query/listCostElements.ts +105 -0
  375. package/src/modules/accounting/query/listInternalOrders.generated.ts +5 -0
  376. package/src/modules/accounting/query/listInternalOrders.test.ts +129 -0
  377. package/src/modules/accounting/query/listInternalOrders.ts +94 -0
  378. package/src/modules/accounting/query/listProfitCenters.generated.ts +5 -0
  379. package/src/modules/accounting/query/listProfitCenters.test.ts +94 -0
  380. package/src/modules/accounting/query/listProfitCenters.ts +56 -0
  381. package/src/modules/accounting/seed/index.ts +19 -0
  382. package/src/modules/accounting/tailor.config.ts +13 -0
  383. package/src/modules/accounting/testing/commandTestUtils.ts +35 -0
  384. package/src/modules/accounting/testing/fixtures.ts +502 -0
  385. package/src/modules/audit/command/logAuditEvent.ts +43 -38
  386. package/src/modules/audit/command/updateAuditPolicy.ts +2 -2
  387. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +1 -1
  388. package/src/modules/audit/module.ts +4 -0
  389. package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +3 -3
  390. package/src/modules/business-partner/command/createPartnerBankAccount.ts +1 -1
  391. package/src/modules/business-partner/command/updateContactPerson.ts +3 -4
  392. package/src/modules/business-partner/command/updatePartner.ts +13 -6
  393. package/src/modules/business-partner/command/updatePartnerAddress.ts +13 -6
  394. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +3 -4
  395. package/src/modules/business-partner/command/updatePartnerIdentification.ts +3 -4
  396. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +3 -3
  397. package/src/modules/business-partner/docs/commands/UpdatePartner.md +2 -2
  398. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +2 -2
  399. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +2 -2
  400. package/src/modules/business-partner/module.ts +1 -0
  401. package/src/modules/coa-management/command/activateAccount.test.ts +0 -15
  402. package/src/modules/coa-management/command/activateAccount.ts +1 -42
  403. package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +2 -31
  404. package/src/modules/coa-management/command/activateChartOfAccounts.ts +1 -37
  405. package/src/modules/coa-management/command/createAccount.test.ts +0 -28
  406. package/src/modules/coa-management/command/createAccount.ts +0 -43
  407. package/src/modules/coa-management/command/createAccountGroup.test.ts +2 -51
  408. package/src/modules/coa-management/command/createAccountGroup.ts +1 -56
  409. package/src/modules/coa-management/command/createChartOfAccounts.test.ts +1 -49
  410. package/src/modules/coa-management/command/createChartOfAccounts.ts +0 -51
  411. package/src/modules/coa-management/command/deactivateAccount.test.ts +0 -15
  412. package/src/modules/coa-management/command/deactivateAccount.ts +1 -53
  413. package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +2 -29
  414. package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +1 -37
  415. package/src/modules/coa-management/command/deleteAccount.test.ts +0 -13
  416. package/src/modules/coa-management/command/deleteAccount.ts +1 -42
  417. package/src/modules/coa-management/command/deleteAccountGroup.test.ts +0 -19
  418. package/src/modules/coa-management/command/deleteAccountGroup.ts +1 -42
  419. package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +2 -58
  420. package/src/modules/coa-management/command/deleteChartOfAccounts.ts +4 -88
  421. package/src/modules/coa-management/command/moveAccountGroup.test.ts +0 -27
  422. package/src/modules/coa-management/command/moveAccountGroup.ts +1 -48
  423. package/src/modules/coa-management/command/reactivateAccount.test.ts +0 -15
  424. package/src/modules/coa-management/command/reactivateAccount.ts +1 -53
  425. package/src/modules/coa-management/command/updateAccount.test.ts +0 -15
  426. package/src/modules/coa-management/command/updateAccount.ts +3 -95
  427. package/src/modules/coa-management/command/updateAccountGroup.test.ts +22 -20
  428. package/src/modules/coa-management/command/updateAccountGroup.ts +30 -78
  429. package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +2 -31
  430. package/src/modules/coa-management/command/updateChartOfAccounts.ts +4 -54
  431. package/src/modules/coa-management/docs/commands/ActivateAccount.md +1 -4
  432. package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +1 -4
  433. package/src/modules/coa-management/docs/commands/CreateAccount.md +1 -4
  434. package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +2 -5
  435. package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +2 -6
  436. package/src/modules/coa-management/docs/commands/DeactivateAccount.md +1 -4
  437. package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +1 -4
  438. package/src/modules/coa-management/docs/commands/DeleteAccount.md +1 -4
  439. package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +1 -4
  440. package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +1 -6
  441. package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +1 -4
  442. package/src/modules/coa-management/docs/commands/ReactivateAccount.md +1 -4
  443. package/src/modules/coa-management/docs/commands/UpdateAccount.md +1 -4
  444. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +6 -8
  445. package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +1 -4
  446. package/src/modules/coa-management/module.ts +16 -27
  447. package/src/modules/finance-ledger/command/updateFiscalYear.ts +2 -3
  448. package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +0 -17
  449. package/src/modules/finance-ledger/command/updateJournalEntry.ts +2 -10
  450. package/src/modules/finance-ledger/command/updateJournalLine.ts +2 -3
  451. package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +1 -4
  452. package/src/modules/finance-ledger/module.ts +1 -0
  453. package/src/modules/inventory/command/approveInventoryAdjustment.test.ts +1 -1
  454. package/src/modules/inventory/command/approveInventoryAdjustment.ts +1 -1
  455. package/src/modules/inventory/command/cancelStockMovement.test.ts +2 -2
  456. package/src/modules/inventory/command/cancelStockMovement.ts +1 -1
  457. package/src/modules/inventory/command/confirmInventoryAdjustment.test.ts +4 -4
  458. package/src/modules/inventory/command/confirmInventoryAdjustment.ts +1 -1
  459. package/src/modules/inventory/command/confirmStockMovement.test.ts +1 -1
  460. package/src/modules/inventory/command/confirmStockMovement.ts +1 -1
  461. package/src/modules/inventory/command/createInventoryAdjustment.test.ts +6 -6
  462. package/src/modules/inventory/command/createInventoryAdjustment.ts +1 -1
  463. package/src/modules/inventory/command/createStockMovement.test.ts +3 -3
  464. package/src/modules/inventory/command/createStockMovement.ts +1 -1
  465. package/src/modules/inventory/command/executeStockMovement.test.ts +5 -5
  466. package/src/modules/inventory/command/executeStockMovement.ts +1 -1
  467. package/src/modules/inventory/command/rejectInventoryAdjustment.test.ts +1 -1
  468. package/src/modules/inventory/command/rejectInventoryAdjustment.ts +1 -1
  469. package/src/modules/inventory/command/reviseInventoryAdjustment.test.ts +2 -2
  470. package/src/modules/inventory/command/reviseInventoryAdjustment.ts +1 -1
  471. package/src/modules/inventory/command/submitInventoryAdjustment.test.ts +1 -1
  472. package/src/modules/inventory/command/submitInventoryAdjustment.ts +1 -1
  473. package/src/modules/inventory/command/updateLot.test.ts +1 -1
  474. package/src/modules/inventory/command/updateLot.ts +2 -3
  475. package/src/modules/inventory/command/updateStockMovement.test.ts +4 -4
  476. package/src/modules/inventory/command/updateStockMovement.ts +4 -5
  477. package/src/modules/inventory/command/updateStorageLocation.ts +12 -17
  478. package/src/modules/inventory/command/updateValuationPolicy.ts +2 -3
  479. package/src/modules/inventory/command/updateWarehouse.ts +2 -3
  480. package/src/modules/inventory/docs/commands/UpdateLot.md +3 -3
  481. package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +6 -6
  482. package/src/modules/inventory/docs/commands/UpdateWarehouse.md +2 -2
  483. package/src/modules/inventory/module.ts +1 -0
  484. package/src/modules/item-management/command/createTaxonomyNode.test.ts +4 -4
  485. package/src/modules/item-management/command/createTaxonomyNode.ts +1 -1
  486. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +2 -2
  487. package/src/modules/item-management/command/moveTaxonomyNode.ts +2 -2
  488. package/src/modules/item-management/command/updateItem.test.ts +16 -12
  489. package/src/modules/item-management/command/updateItem.ts +47 -31
  490. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +16 -17
  491. package/src/modules/item-management/command/updateTaxonomyNode.ts +43 -30
  492. package/src/modules/item-management/docs/commands/UpdateItem.md +7 -11
  493. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +10 -14
  494. package/src/modules/item-management/module.ts +1 -0
  495. package/src/modules/manufacturing/command/createRouting.ts +1 -1
  496. package/src/modules/manufacturing/command/recordInventoryIssueOutcome.test.ts +1 -1
  497. package/src/modules/manufacturing/command/recordInventoryIssueOutcome.ts +1 -1
  498. package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.test.ts +1 -1
  499. package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.ts +1 -1
  500. package/src/modules/manufacturing/command/reviewManufacturingCostSummary.test.ts +1 -1
  501. package/src/modules/manufacturing/command/reviewManufacturingCostSummary.ts +1 -1
  502. package/src/modules/manufacturing/command/updateBillOfMaterial.ts +3 -4
  503. package/src/modules/manufacturing/command/updateProductionOrder.ts +3 -4
  504. package/src/modules/manufacturing/command/updateRouting.ts +4 -5
  505. package/src/modules/manufacturing/command/updateWorkCenter.test.ts +16 -7
  506. package/src/modules/manufacturing/command/updateWorkCenter.ts +41 -38
  507. package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +2 -0
  508. package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +2 -0
  509. package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +1 -0
  510. package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +1 -0
  511. package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +6 -5
  512. package/src/modules/manufacturing/docs/models/BillOfMaterialLine.md +42 -0
  513. package/src/modules/manufacturing/docs/models/CostVarianceLine.md +36 -0
  514. package/src/modules/manufacturing/docs/models/ManufacturingCostLine.md +37 -0
  515. package/src/modules/manufacturing/docs/models/ManufacturingCostSettlementRecord.md +34 -0
  516. package/src/modules/manufacturing/docs/models/ProductionOrderBomSnapshot.md +35 -0
  517. package/src/modules/manufacturing/docs/models/ProductionOrderCostBaseline.md +36 -0
  518. package/src/modules/manufacturing/docs/models/ProductionOrderMaterialRequirement.md +35 -0
  519. package/src/modules/manufacturing/docs/models/ProductionOrderRoutingSnapshot.md +34 -0
  520. package/src/modules/manufacturing/docs/models/RoutingOperation.md +40 -0
  521. package/src/modules/manufacturing/docs/models/WorkOrderExecutionEvent.md +38 -0
  522. package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +1 -0
  523. package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +1 -0
  524. package/src/modules/manufacturing/module.ts +1 -0
  525. package/src/modules/organization/command/updateCompany.test.ts +6 -6
  526. package/src/modules/organization/command/updateCompany.ts +3 -4
  527. package/src/modules/organization/command/updateDepartment.test.ts +7 -7
  528. package/src/modules/organization/command/updateDepartment.ts +13 -12
  529. package/src/modules/organization/command/updateSite.test.ts +10 -10
  530. package/src/modules/organization/command/updateSite.ts +3 -4
  531. package/src/modules/organization/docs/commands/UpdateCompany.md +6 -6
  532. package/src/modules/organization/docs/commands/UpdateDepartment.md +9 -10
  533. package/src/modules/organization/docs/commands/UpdateSite.md +12 -12
  534. package/src/modules/organization/module.ts +1 -0
  535. package/src/modules/primitives/module.ts +1 -0
  536. package/src/modules/product-management/command/assignProductToCategory.test.ts +2 -2
  537. package/src/modules/product-management/command/assignProductToCategory.ts +2 -2
  538. package/src/modules/product-management/command/createProductAttribute.test.ts +1 -1
  539. package/src/modules/product-management/command/createProductAttribute.ts +1 -1
  540. package/src/modules/product-management/command/createProductAttributeValue.test.ts +1 -1
  541. package/src/modules/product-management/command/createProductAttributeValue.ts +1 -1
  542. package/src/modules/product-management/command/createProductCategory.test.ts +2 -2
  543. package/src/modules/product-management/command/createProductCategory.ts +1 -1
  544. package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +3 -3
  545. package/src/modules/product-management/command/setProductAttributeAssignment.ts +2 -2
  546. package/src/modules/product-management/command/updateProduct.test.ts +17 -11
  547. package/src/modules/product-management/command/updateProduct.ts +45 -28
  548. package/src/modules/product-management/command/updateProductAttribute.test.ts +16 -21
  549. package/src/modules/product-management/command/updateProductAttribute.ts +40 -26
  550. package/src/modules/product-management/command/updateProductAttributeValue.ts +2 -3
  551. package/src/modules/product-management/command/updateProductCategory.test.ts +14 -19
  552. package/src/modules/product-management/command/updateProductCategory.ts +42 -26
  553. package/src/modules/product-management/docs/commands/UpdateProduct.md +16 -20
  554. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +10 -14
  555. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +10 -14
  556. package/src/modules/product-management/module.ts +1 -0
  557. package/src/modules/purchase/command/activatePurchasePaymentTerm.test.ts +4 -4
  558. package/src/modules/purchase/command/activatePurchasePaymentTerm.ts +2 -2
  559. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.test.ts +4 -4
  560. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.ts +2 -2
  561. package/src/modules/purchase/command/updateGoodsReceipt.ts +2 -3
  562. package/src/modules/purchase/command/updatePurchaseBill.ts +2 -3
  563. package/src/modules/purchase/command/updatePurchaseOrder.ts +2 -3
  564. package/src/modules/purchase/command/updatePurchasePaymentTerm.test.ts +2 -2
  565. package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +3 -4
  566. package/src/modules/purchase/command/updatePurchasePriceList.ts +2 -3
  567. package/src/modules/purchase/command/updatePurchasePriceRule.ts +2 -3
  568. package/src/modules/purchase/module.ts +1 -0
  569. package/src/modules/sales/command/createSalesOrder.ts +1 -1
  570. package/src/modules/sales/command/updateChannel.test.ts +4 -4
  571. package/src/modules/sales/command/updateChannel.ts +2 -3
  572. package/src/modules/sales/command/updateListing.test.ts +2 -2
  573. package/src/modules/sales/command/updateListing.ts +2 -3
  574. package/src/modules/sales/command/updateSalesCreditNote.test.ts +2 -2
  575. package/src/modules/sales/command/updateSalesCreditNote.ts +2 -3
  576. package/src/modules/sales/command/updateSalesInvoice.test.ts +2 -2
  577. package/src/modules/sales/command/updateSalesInvoice.ts +2 -3
  578. package/src/modules/sales/command/updateSalesOrder.test.ts +3 -3
  579. package/src/modules/sales/command/updateSalesOrder.ts +2 -3
  580. package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +2 -2
  581. package/src/modules/sales/command/updateSalesPaymentTerm.ts +2 -3
  582. package/src/modules/sales/command/updateSalesPriceList.test.ts +3 -3
  583. package/src/modules/sales/command/updateSalesPriceList.ts +2 -3
  584. package/src/modules/sales/command/updateSalesPriceRule.test.ts +3 -3
  585. package/src/modules/sales/command/updateSalesPriceRule.ts +2 -3
  586. package/src/modules/sales/command/updateShipment.test.ts +2 -2
  587. package/src/modules/sales/command/updateShipment.ts +2 -3
  588. package/src/modules/sales/docs/commands/UpdateChannel.md +4 -4
  589. package/src/modules/sales/docs/commands/UpdateListing.md +2 -2
  590. package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +2 -2
  591. package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +2 -2
  592. package/src/modules/sales/docs/commands/UpdateSalesOrder.md +3 -3
  593. package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +2 -2
  594. package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +3 -3
  595. package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +3 -3
  596. package/src/modules/sales/docs/commands/UpdateShipment.md +2 -2
  597. package/src/modules/sales/module.ts +1 -0
  598. package/src/modules/user-management/README.md +2 -1
  599. package/src/modules/user-management/command/updateOwnProfile.generated.ts +6 -0
  600. package/src/modules/user-management/command/updateOwnProfile.test.ts +191 -0
  601. package/src/modules/user-management/command/updateOwnProfile.ts +82 -0
  602. package/src/modules/user-management/command/updateUser.generated.ts +6 -0
  603. package/src/modules/user-management/command/updateUser.test.ts +195 -0
  604. package/src/modules/user-management/command/updateUser.ts +76 -0
  605. package/src/modules/user-management/docs/commands/UpdateOwnProfile.md +68 -0
  606. package/src/modules/user-management/docs/commands/UpdateUser.md +67 -0
  607. package/src/modules/user-management/docs/features/user-account-management.md +28 -3
  608. package/src/modules/user-management/docs/models/User.md +2 -0
  609. package/src/modules/user-management/lib/errors.generated.ts +5 -0
  610. package/src/modules/user-management/lib/permissions.generated.ts +2 -0
  611. package/src/modules/user-management/module.ts +5 -0
  612. package/src/modules/user-management/seed/index.ts +19 -0
  613. package/templates/scaffold/app/backend/eslint.config.js +17 -0
  614. package/templates/scaffold/app/backend/package.json +1 -0
  615. package/templates/scaffold/app/backend/seed/data/AuditEntry.schema.ts +20 -0
  616. package/templates/scaffold/app/backend/seed/data/AuditPolicy.jsonl +7 -0
  617. package/templates/scaffold/app/backend/seed/data/AuditPolicy.schema.ts +15 -0
  618. package/templates/scaffold/app/backend/seed/data/AuditableEntity.jsonl +4 -0
  619. package/templates/scaffold/app/backend/seed/data/AuditableEntity.schema.ts +20 -0
  620. package/templates/scaffold/app/backend/seed/data/ChangeDetail.schema.ts +20 -0
  621. package/templates/scaffold/app/backend/seed/data/Company.schema.ts +15 -0
  622. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +13 -0
  623. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +1 -1
  624. package/templates/scaffold/app/backend/seed/data/PolicyFieldRule.schema.ts +20 -0
  625. package/templates/scaffold/app/backend/seed/data/Role.jsonl +1 -0
  626. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +1 -1
  627. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +13 -0
  628. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +1 -1
  629. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -1
  630. package/templates/scaffold/app/backend/seed/data/User.schema.ts +1 -1
  631. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +1 -0
  632. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +1 -1
  633. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -1
  634. package/templates/scaffold/app/backend/seed/exec.mjs +12 -0
  635. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +2 -2
  636. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +2 -2
  637. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +62 -0
  638. package/templates/scaffold/app/backend/src/modules-db.ts +13 -0
  639. package/templates/scaffold/app/backend/src/modules.ts +3 -5
  640. package/templates/scaffold/app/backend/src/resolvers/assignPermissionToRole.ts +70 -0
  641. package/templates/scaffold/app/backend/src/resolvers/assignRoleToUser.ts +72 -0
  642. package/templates/scaffold/app/backend/src/resolvers/createRole.ts +92 -0
  643. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +113 -13
  644. package/templates/scaffold/app/backend/src/resolvers/deactivateUser.ts +67 -0
  645. package/templates/scaffold/app/backend/src/resolvers/reactivateUser.ts +63 -0
  646. package/templates/scaffold/app/backend/src/resolvers/revokePermissionFromRole.ts +72 -0
  647. package/templates/scaffold/app/backend/src/resolvers/revokeRoleFromUser.ts +72 -0
  648. package/templates/scaffold/app/backend/src/resolvers/updateOwnProfile.ts +107 -0
  649. package/templates/scaffold/app/backend/src/resolvers/updateUserProfile.ts +107 -0
  650. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +79 -0
  651. package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log.test.ts +86 -0
  652. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +103 -0
  653. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--create-role.test.ts +61 -0
  654. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +89 -0
  655. package/templates/scaffold/app/backend/src/tests/stories/role-management/user--update-role-permissions.test.ts +125 -0
  656. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--browse-user-list.test.ts +91 -0
  657. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--create-user-account.test.ts +97 -0
  658. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +131 -0
  659. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +85 -0
  660. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +157 -0
  661. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-own-profile.test.ts +30 -0
  662. package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +98 -0
  663. package/templates/scaffold/app/backend/tailor.config.ts +21 -3
  664. package/templates/scaffold/app/backend/tsconfig.json +1 -1
  665. package/templates/scaffold/app/docs/actors/user.md +11 -0
  666. package/templates/scaffold/app/docs/business-flow/audit-log/README.md +31 -0
  667. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log-detail.md +35 -0
  668. package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log.md +44 -0
  669. package/templates/scaffold/app/docs/business-flow/role-management/README.md +33 -0
  670. package/templates/scaffold/app/docs/business-flow/role-management/story/user--assign-role-to-user.md +35 -0
  671. package/templates/scaffold/app/docs/business-flow/role-management/story/user--create-role.md +41 -0
  672. package/templates/scaffold/app/docs/business-flow/role-management/story/user--remove-role-from-user.md +33 -0
  673. package/templates/scaffold/app/docs/business-flow/role-management/story/user--update-role-permissions.md +41 -0
  674. package/templates/scaffold/app/docs/business-flow/user-lifecycle/README.md +48 -0
  675. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--browse-user-list.md +38 -0
  676. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--create-user-account.md +45 -0
  677. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--toggle-user-status.md +38 -0
  678. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-own-profile.md +36 -0
  679. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-user-profile.md +41 -0
  680. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-own-profile.md +30 -0
  681. package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-user-detail.md +33 -0
  682. package/templates/scaffold/app/docs/resolver/assignPermissionToRole.md +16 -0
  683. package/templates/scaffold/app/docs/resolver/assignRoleToUser.md +17 -0
  684. package/templates/scaffold/app/docs/resolver/createRole.md +17 -0
  685. package/templates/scaffold/app/docs/resolver/createUser.md +23 -0
  686. package/templates/scaffold/app/docs/resolver/deactivateUser.md +17 -0
  687. package/templates/scaffold/app/docs/resolver/reactivateUser.md +16 -0
  688. package/templates/scaffold/app/docs/resolver/revokePermissionFromRole.md +17 -0
  689. package/templates/scaffold/app/docs/resolver/revokeRoleFromUser.md +17 -0
  690. package/templates/scaffold/app/docs/resolver/updateOwnProfile.md +20 -0
  691. package/templates/scaffold/app/docs/resolver/updateUserProfile.md +19 -0
  692. package/templates/scaffold/app/docs/screen/audit-entry-detail.md +30 -0
  693. package/templates/scaffold/app/docs/screen/audit-entry-list.md +25 -0
  694. package/templates/scaffold/app/docs/screen/my-profile-edit-form.md +22 -0
  695. package/templates/scaffold/app/docs/screen/my-profile.md +27 -0
  696. package/templates/scaffold/app/docs/screen/role-create-form.md +23 -0
  697. package/templates/scaffold/app/docs/screen/role-detail.md +27 -0
  698. package/templates/scaffold/app/docs/screen/role-edit-form.md +21 -0
  699. package/templates/scaffold/app/docs/screen/role-list.md +23 -0
  700. package/templates/scaffold/app/docs/screen/user-create-form.md +23 -0
  701. package/templates/scaffold/app/docs/screen/user-detail.md +33 -0
  702. package/templates/scaffold/app/docs/screen/user-edit-form.md +22 -0
  703. package/templates/scaffold/app/docs/screen/user-list.md +24 -0
  704. package/templates/scaffold/app/frontend/package.json +1 -1
  705. package/templates/scaffold/app/frontend/src/App.tsx +57 -12
  706. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +1 -1
  707. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +59 -31
  708. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1411 -688
  709. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +1 -1
  710. package/templates/scaffold/app/frontend/src/lib/permission-groups.ts +59 -0
  711. package/templates/scaffold/app/frontend/src/pages/audit/[id]/components/audit-entry-detail.tsx +102 -0
  712. package/templates/scaffold/app/frontend/src/pages/audit/[id]/page.tsx +65 -0
  713. package/templates/scaffold/app/frontend/src/pages/audit/components/audit-entries-table.tsx +90 -0
  714. package/templates/scaffold/app/frontend/src/pages/audit/page.tsx +52 -0
  715. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/components/edit-profile-form.tsx +125 -0
  716. package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/page.tsx +19 -0
  717. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +41 -21
  718. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-actions.tsx +26 -0
  719. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-detail.tsx +69 -0
  720. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/components/edit-role-form.tsx +192 -0
  721. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/page.tsx +51 -0
  722. package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/page.tsx +56 -0
  723. package/templates/scaffold/app/frontend/src/pages/user-management/role/components/roles-table.tsx +85 -0
  724. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/components/create-role-form.tsx +204 -0
  725. package/templates/scaffold/app/frontend/src/pages/user-management/role/create/page.tsx +19 -0
  726. package/templates/scaffold/app/frontend/src/pages/user-management/role/page.tsx +60 -0
  727. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-actions.tsx +216 -0
  728. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +97 -33
  729. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/components/edit-user-form.tsx +115 -0
  730. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/page.tsx +51 -0
  731. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +8 -2
  732. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +43 -42
  733. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +120 -45
  734. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +3 -4
  735. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +8 -1
  736. package/templates/scaffold/module/eslint.config.js +32 -0
  737. package/templates/scaffold/module/module.ts +1 -0
  738. package/templates/scaffold/module/package.json +3 -1
  739. package/templates/scaffold/module/vitest.config.ts +11 -0
  740. package/templates/scaffold/project/__dot__gitignore +1 -0
  741. package/templates/scaffold/project/__pnpm-workspace.yaml +3 -0
  742. package/templates/scaffold/project/apps/.gitkeep +0 -0
  743. package/templates/scaffold/project/modules/.gitkeep +0 -0
  744. package/templates/scaffold/project/package.json +15 -0
  745. package/templates/workflows/erp-kit-check.yml +10 -4
  746. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +0 -39
  747. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +0 -60
  748. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +0 -75
  749. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +0 -21
  750. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +0 -90
  751. /package/src/modules/{supplier-portal → accounting/executor}/.gitkeep +0 -0
  752. /package/templates/scaffold/app/{docs/actors/.gitkeep → backend/seed/data/AuditEntry.jsonl} +0 -0
  753. /package/templates/scaffold/app/{docs/business-flow/.gitkeep → backend/seed/data/ChangeDetail.jsonl} +0 -0
  754. /package/templates/scaffold/app/{docs/resolver/.gitkeep → backend/seed/data/Company.jsonl} +0 -0
  755. /package/templates/scaffold/app/{docs/screen/.gitkeep → backend/seed/data/PolicyFieldRule.jsonl} +0 -0
  756. /package/templates/{config → scaffold/project}/license.config.json +0 -0
@@ -0,0 +1,44 @@
1
+ # TechnicallyCompleteInternalOrder
2
+
3
+ ## Overview
4
+
5
+ technicallyCompleteInternalOrder transitions an internal order from RELEASED status to TECHNICALLY_COMPLETED status. This indicates that the activity tracked by the order is complete and no further cost postings are expected, though the order remains open for final review before closure.
6
+
7
+ ## Business Rules
8
+
9
+ - Internal order must exist
10
+ - Internal order must be in RELEASED status to be technically completed
11
+ - Technically completing a CREATED, already TECHNICALLY_COMPLETED, or CLOSED order is rejected as an invalid state transition
12
+ - Once technically completed, no further cost postings are accepted
13
+ - Emits an audit event recording the status transition and acting user
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive technically complete internal order request] --> B{Internal order exists?}
20
+ B -->|No| C[Return error: INTERNAL_ORDER_NOT_FOUND]
21
+ B -->|Yes| D{Status is RELEASED?}
22
+ D -->|No| E[Return error: INVALID_STATE]
23
+ D -->|Yes| F[Transition status from RELEASED to TECHNICALLY_COMPLETED]
24
+ F --> G[Emit audit event]
25
+ G --> H[Return technically completed internal order]
26
+ ```
27
+
28
+ ## External Dependencies
29
+
30
+ - None
31
+
32
+ ## Error Scenarios
33
+
34
+ - **INTERNAL_ORDER_NOT_FOUND**: Internal order with the specified ID does not exist
35
+ - **INVALID_STATE**: Internal order is not in RELEASED status
36
+
37
+ ## Test Cases
38
+
39
+ - technically completes a RELEASED internal order transitioning it to TECHNICALLY_COMPLETED status
40
+ - returns error when internal order does not exist
41
+ - returns error when internal order is in CREATED status
42
+ - returns error when internal order is already TECHNICALLY_COMPLETED
43
+ - returns error when internal order is CLOSED
44
+ - emits audit event recording the status transition and acting user
@@ -0,0 +1,45 @@
1
+ # UpdateAllocationCycle
2
+
3
+ ## Overview
4
+
5
+ updateAllocationCycle modifies an existing allocation cycle. Updates are only permitted when the cycle is in DRAFT status. In the current implementation, only the cycle name can be updated while in DRAFT.
6
+
7
+ ## Business Rules
8
+
9
+ - Allocation cycle must exist
10
+ - Allocation cycle must be in DRAFT status to be updated
11
+ - Updates to cycles in VALIDATED, EXECUTED, POSTED, or REVERSED status are rejected
12
+ - Only `name` can be updated
13
+ - Emits an audit event recording previous and new field values
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive update allocation cycle request] --> B{Allocation cycle exists?}
20
+ B -->|No| C[Return error: ALLOCATION_CYCLE_NOT_FOUND]
21
+ B -->|Yes| D{Status is DRAFT?}
22
+ D -->|No| E[Return error: INVALID_STATE]
23
+ D -->|Yes| F[Apply updates to allocation cycle]
24
+ F --> G[Emit audit event]
25
+ G --> H[Return updated allocation cycle]
26
+ ```
27
+
28
+ ## External Dependencies
29
+
30
+ - None
31
+
32
+ ## Error Scenarios
33
+
34
+ - **ALLOCATION_CYCLE_NOT_FOUND**: Allocation cycle with the specified ID does not exist
35
+ - **INVALID_STATE**: Allocation cycle is not in DRAFT status
36
+
37
+ ## Test Cases
38
+
39
+ - updates name on a DRAFT allocation cycle
40
+ - returns error when allocation cycle does not exist
41
+ - returns error when allocation cycle is in VALIDATED status
42
+ - returns error when allocation cycle is in EXECUTED status
43
+ - returns error when allocation cycle is in POSTED status
44
+ - returns error when allocation cycle is in REVERSED status
45
+ - emits audit event recording previous and new field values
@@ -0,0 +1,47 @@
1
+ # UpdateBudget
2
+
3
+ ## Overview
4
+
5
+ updateBudget modifies fields on an existing budget. Updates are only permitted when the budget is in DRAFT status. Name, description, and budget holder can be updated while in DRAFT.
6
+
7
+ ## Business Rules
8
+
9
+ - Budget must exist
10
+ - Budget must be in DRAFT status to be updated
11
+ - Name, description, and budget holder can be updated
12
+ - Updates to budgets in SUBMITTED, APPROVED, ACTIVE, or CLOSED status are rejected
13
+ - Emits an audit event recording previous and new field values
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive update budget request] --> B{Budget exists?}
20
+ B -->|No| C[Return error: BUDGET_NOT_FOUND]
21
+ B -->|Yes| D{Status is DRAFT?}
22
+ D -->|No| E[Return error: INVALID_STATE]
23
+ D -->|Yes| F[Apply updates to budget]
24
+ F --> G[Emit audit event]
25
+ G --> H[Return updated budget]
26
+ ```
27
+
28
+ ## External Dependencies
29
+
30
+ - None
31
+
32
+ ## Error Scenarios
33
+
34
+ - **BUDGET_NOT_FOUND**: Budget with the specified ID does not exist
35
+ - **INVALID_STATE**: Budget is not in DRAFT status
36
+
37
+ ## Test Cases
38
+
39
+ - updates name on a DRAFT budget
40
+ - updates description on a DRAFT budget
41
+ - updates budget holder on a DRAFT budget
42
+ - returns error when budget does not exist
43
+ - returns error when budget is in SUBMITTED status
44
+ - returns error when budget is in APPROVED status
45
+ - returns error when budget is in ACTIVE status
46
+ - returns error when budget is in CLOSED status
47
+ - emits audit event recording previous and new field values
@@ -0,0 +1,50 @@
1
+ # UpdateCostCenter
2
+
3
+ ## Overview
4
+
5
+ updateCostCenter modifies fields on an existing cost center. Name, description, category, responsible person, department, and validity period can be updated. The cost center code is fixed by the existing record and is not part of the update input.
6
+
7
+ ## Business Rules
8
+
9
+ - Cost center must exist
10
+ - Name, description, category, responsible person, and department can be updated
11
+ - Category must be from the defined set: overhead, production, administration, sales, or research
12
+ - When updating validTo, it must remain on or after validFrom
13
+ - Emits an audit event recording previous and new field values
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive update cost center request] --> B{Lookup by costCenterId}
20
+ B -->|Not found| C[Return error: COST_CENTER_NOT_FOUND]
21
+ B -->|Found| D{Valid name if provided?}
22
+ D -->|No| E[Return error: INVALID_NAME]
23
+ D -->|Yes| F{Valid category if changed?}
24
+ F -->|No| G[Return error: INVALID_CATEGORY]
25
+ F -->|Yes| H{validTo >= validFrom when both set?}
26
+ H -->|No| I[Return error: INVALID_VALIDITY_PERIOD]
27
+ H -->|Yes| J[Apply updates to cost center]
28
+ J --> K[Emit audit event]
29
+ K --> L[Return updated cost center]
30
+ ```
31
+
32
+ ## External Dependencies
33
+
34
+ - None
35
+
36
+ ## Error Scenarios
37
+
38
+ - **COST_CENTER_NOT_FOUND**: Cost center with the specified ID does not exist
39
+ - **INVALID_NAME**: Name is empty or blank when provided
40
+ - **INVALID_CATEGORY**: Category is not one of the recognized values (overhead, production, administration, sales, research)
41
+ - **INVALID_VALIDITY_PERIOD**: validTo is before validFrom
42
+
43
+ ## Test Cases
44
+
45
+ - returns error when cost center does not exist
46
+ - returns error when name is empty string
47
+ - returns error when category is invalid
48
+ - returns error when validTo is before validFrom
49
+ - updates cost center with valid fields
50
+ - updates multiple fields at once
@@ -0,0 +1,82 @@
1
+ # UpdateCostElement
2
+
3
+ ## Overview
4
+
5
+ updateCostElement modifies fields on an existing cost element that is in DRAFT or ACTIVE status. Description and name can be updated in both DRAFT and ACTIVE status. Category and GL account reference changes are only permitted while the element is in DRAFT status. Type changes are never permitted. The command enforces field-level mutability rules based on the current lifecycle status to preserve referential integrity of downstream cost postings and allocations.
6
+
7
+ ## Business Rules
8
+
9
+ - Cost element must exist and be in DRAFT or ACTIVE status
10
+ - Description can be updated in both DRAFT and ACTIVE status
11
+ - Name can be updated in both DRAFT and ACTIVE status
12
+ - Category change is not permitted when the cost element is in ACTIVE status
13
+ - GL account reference change is not permitted after activation (only updatable in DRAFT)
14
+ - Type change (PRIMARY to SECONDARY or vice versa) is never permitted
15
+ - When updating category, the new category must still match the element's type
16
+ - When updating GL account reference on a DRAFT PRIMARY element, the new GL account must be active in an active CoA
17
+ - When updating GL account reference, no other PRIMARY element in the same company may reference the new GL account
18
+ - When updating validFrom/validTo, validFrom must be less than or equal to validTo when both are set
19
+ - INACTIVE cost elements cannot be updated
20
+ - Emits an audit event recording previous and new field values
21
+
22
+ ## Process Flow
23
+
24
+ ```mermaid
25
+ flowchart TD
26
+ A[Receive update cost element request] --> B{Cost element exists?}
27
+ B -->|No| C[Return error: COST_ELEMENT_NOT_FOUND]
28
+ B -->|Yes| D{Status is DRAFT or ACTIVE?}
29
+ D -->|No| E[Return error: INVALID_STATE]
30
+ D -->|Yes| F{Type change attempted?}
31
+ F -->|Yes| G[Return error: TYPE_CHANGE_NOT_ALLOWED]
32
+ F -->|No| H{Status is ACTIVE and category change attempted?}
33
+ H -->|Yes| I[Return error: CATEGORY_CHANGE_NOT_ALLOWED]
34
+ H -->|No| J{Status is ACTIVE and GL account change attempted?}
35
+ J -->|Yes| K[Return error: GL_ACCOUNT_CHANGE_NOT_ALLOWED]
36
+ J -->|No| L{Category matches type if changed?}
37
+ L -->|No| M[Return error: INVALID_CATEGORY_FOR_TYPE]
38
+ L -->|Yes| N{GL account valid if changed?}
39
+ N -->|No| O[Return error: GL_ACCOUNT_NOT_FOUND]
40
+ N -->|Yes| P{Duplicate GL account reference?}
41
+ P -->|Yes| Q[Return error: DUPLICATE_GL_ACCOUNT_REFERENCE]
42
+ P -->|No| R{validFrom <= validTo when both set?}
43
+ R -->|No| S[Return error: INVALID_VALIDITY_PERIOD]
44
+ R -->|Yes| T[Apply updates to cost element]
45
+ T --> U[Emit audit event]
46
+ U --> V[Return updated cost element]
47
+ ```
48
+
49
+ ## External Dependencies
50
+
51
+ - [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) — Validates updated GL account reference if changed
52
+
53
+ ## Error Scenarios
54
+
55
+ - **COST_ELEMENT_NOT_FOUND**: Cost element with the specified ID does not exist
56
+ - **INVALID_STATE**: Cost element is in INACTIVE status and cannot be updated
57
+ - **TYPE_CHANGE_NOT_ALLOWED**: Changing the type (PRIMARY/SECONDARY) is never permitted
58
+ - **CATEGORY_CHANGE_NOT_ALLOWED**: Category cannot be changed when the cost element is in ACTIVE status
59
+ - **GL_ACCOUNT_CHANGE_NOT_ALLOWED**: GL account reference cannot be changed after activation
60
+ - **INVALID_CATEGORY_FOR_TYPE**: New category does not match the cost element type
61
+ - **GL_ACCOUNT_NOT_FOUND**: Updated GL account does not exist or is not active in an active Chart of Accounts
62
+ - **DUPLICATE_GL_ACCOUNT_REFERENCE**: Another PRIMARY cost element in the same company already references the specified GL account
63
+ - **INVALID_VALIDITY_PERIOD**: validFrom is after validTo
64
+
65
+ ## Test Cases
66
+
67
+ - updates description on a DRAFT cost element
68
+ - updates description on an ACTIVE cost element
69
+ - updates name on a DRAFT cost element
70
+ - updates name on an ACTIVE cost element
71
+ - updates category on a DRAFT cost element
72
+ - returns error when changing category on an ACTIVE cost element
73
+ - returns error when changing type on any cost element
74
+ - returns error when changing GL account on an ACTIVE cost element
75
+ - updates GL account on a DRAFT PRIMARY cost element
76
+ - returns error when updated GL account does not exist
77
+ - returns error when updated GL account is already referenced by another PRIMARY element
78
+ - returns error when new category does not match the element type
79
+ - returns error when cost element does not exist
80
+ - returns error when cost element is INACTIVE
81
+ - returns error when validFrom is after validTo
82
+ - emits audit event recording previous and new field values
@@ -0,0 +1,62 @@
1
+ # UpdateInternalOrder
2
+
3
+ ## Overview
4
+
5
+ updateInternalOrder modifies fields on an existing internal order. Updates are permitted when the order is in CREATED or RELEASED status. Orders in TECHNICALLY_COMPLETED or CLOSED status cannot be updated. The order type cannot be changed after the order has been released.
6
+
7
+ ## Business Rules
8
+
9
+ - Internal order must exist
10
+ - Internal order must be in CREATED or RELEASED status
11
+ - Description, responsible person, cost center, and validity dates can be updated in CREATED or RELEASED status
12
+ - Order type cannot be changed after the order is released
13
+ - Orders in TECHNICALLY_COMPLETED or CLOSED status cannot be updated
14
+ - When updating validity dates, validFrom must precede validTo when both are set
15
+ - Updated cost center must belong to the same company
16
+ - Emits an audit event recording previous and new field values
17
+
18
+ ## Process Flow
19
+
20
+ ```mermaid
21
+ flowchart TD
22
+ A[Receive update internal order request] --> B{Internal order exists?}
23
+ B -->|No| C[Return error: INTERNAL_ORDER_NOT_FOUND]
24
+ B -->|Yes| D{Status is CREATED or RELEASED?}
25
+ D -->|No| E[Return error: INVALID_STATE]
26
+ D -->|Yes| F{Order type change attempted after release?}
27
+ F -->|Yes| G[Return error: ORDER_TYPE_CHANGE_NOT_ALLOWED]
28
+ F -->|No| H{Cost center valid if changed?}
29
+ H -->|No| I[Return error: COST_CENTER_NOT_FOUND]
30
+ H -->|Yes| J{validFrom <= validTo when both set?}
31
+ J -->|No| K[Return error: INVALID_VALIDITY_PERIOD]
32
+ J -->|Yes| L[Apply updates to internal order]
33
+ L --> M[Emit audit event]
34
+ M --> N[Return updated internal order]
35
+ ```
36
+
37
+ ## External Dependencies
38
+
39
+ - None
40
+
41
+ ## Error Scenarios
42
+
43
+ - **INTERNAL_ORDER_NOT_FOUND**: Internal order with the specified ID does not exist
44
+ - **INVALID_STATE**: Internal order is in TECHNICALLY_COMPLETED or CLOSED status and cannot be updated
45
+ - **ORDER_TYPE_CHANGE_NOT_ALLOWED**: Order type cannot be changed after the order is released
46
+ - **COST_CENTER_NOT_FOUND**: Updated cost center does not exist or does not belong to the same company
47
+ - **INVALID_VALIDITY_PERIOD**: validFrom is after validTo
48
+
49
+ ## Test Cases
50
+
51
+ - updates description on a CREATED internal order
52
+ - updates description on a RELEASED internal order
53
+ - updates responsible person on a CREATED internal order
54
+ - updates cost center on a CREATED internal order
55
+ - updates validity dates on a CREATED internal order
56
+ - returns error when internal order does not exist
57
+ - returns error when internal order is TECHNICALLY_COMPLETED
58
+ - returns error when internal order is CLOSED
59
+ - returns error when changing order type after release
60
+ - returns error when updated cost center does not exist
61
+ - returns error when validFrom is after validTo
62
+ - emits audit event recording previous and new field values
@@ -0,0 +1,56 @@
1
+ # UpdateProfitCenter
2
+
3
+ ## Overview
4
+
5
+ updateProfitCenter modifies fields on an existing profit center. In DRAFT status, all mutable fields can be updated. In ACTIVE status, only limited fields (description, responsible person) can be updated. INACTIVE profit centers cannot be updated.
6
+
7
+ ## Business Rules
8
+
9
+ - Profit center must exist
10
+ - Profit center must be in DRAFT or ACTIVE status
11
+ - In DRAFT status: name, description, responsible person, validFrom, validTo can be updated
12
+ - In ACTIVE status: only description and responsible person can be updated
13
+ - When updating validTo, it must remain on or after validFrom
14
+ - INACTIVE profit centers cannot be updated
15
+ - Emits an audit event recording previous and new field values
16
+
17
+ ## Process Flow
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ A[Receive update profit center request] --> B{Profit center exists?}
22
+ B -->|No| C[Return error: PROFIT_CENTER_NOT_FOUND]
23
+ B -->|Yes| D{Status is DRAFT or ACTIVE?}
24
+ D -->|No| E[Return error: INVALID_STATE]
25
+ D -->|Yes| F{Status is ACTIVE and restricted field change?}
26
+ F -->|Yes| G[Return error: FIELD_NOT_UPDATABLE]
27
+ F -->|No| H{validTo >= validFrom when both set?}
28
+ H -->|No| I[Return error: INVALID_VALIDITY_PERIOD]
29
+ H -->|Yes| J[Apply updates to profit center]
30
+ J --> K[Emit audit event]
31
+ K --> L[Return updated profit center]
32
+ ```
33
+
34
+ ## External Dependencies
35
+
36
+ - None
37
+
38
+ ## Error Scenarios
39
+
40
+ - **PROFIT_CENTER_NOT_FOUND**: Profit center with the specified ID does not exist
41
+ - **INVALID_STATE**: Profit center is in INACTIVE status and cannot be updated
42
+ - **FIELD_NOT_UPDATABLE**: Attempted to change a field that is not updatable in ACTIVE status
43
+ - **INVALID_VALIDITY_PERIOD**: validTo is before validFrom
44
+
45
+ ## Test Cases
46
+
47
+ - updates name on a DRAFT profit center
48
+ - updates description on a DRAFT profit center
49
+ - updates description on an ACTIVE profit center
50
+ - updates responsible person on a DRAFT profit center
51
+ - updates responsible person on an ACTIVE profit center
52
+ - returns error when changing restricted fields on an ACTIVE profit center
53
+ - returns error when profit center does not exist
54
+ - returns error when profit center is INACTIVE
55
+ - returns error when validTo is before validFrom
56
+ - emits audit event recording previous and new field values
@@ -0,0 +1,57 @@
1
+ # ValidateAllocationCycle
2
+
3
+ ## Overview
4
+
5
+ validateAllocationCycle transitions an allocation cycle from DRAFT status to VALIDATED status. Validation verifies that the cycle has at least one allocation rule and that receiver percentages sum to exactly 100% for each sender. Only DRAFT cycles can be validated.
6
+
7
+ ## Business Rules
8
+
9
+ - Allocation cycle must exist
10
+ - Allocation cycle must be in DRAFT status to be validated
11
+ - Cycle must have at least one allocation rule
12
+ - Allocation rule percentages for each sender must sum to exactly 100%
13
+ - Percentage values must be positive (greater than zero)
14
+ - Upon validation, the cycle becomes eligible for execution
15
+ - Emits an audit event recording the status transition and acting user
16
+
17
+ ## Process Flow
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ A[Receive validate allocation cycle request] --> B{Allocation cycle exists?}
22
+ B -->|No| C[Return error: ALLOCATION_CYCLE_NOT_FOUND]
23
+ B -->|Yes| D{Status is DRAFT?}
24
+ D -->|No| E[Return error: INVALID_STATE]
25
+ D -->|Yes| F{Has at least one allocation rule?}
26
+ F -->|No| G[Return error: NO_ALLOCATION_RULES]
27
+ F -->|Yes| P{All percentages positive?}
28
+ P -->|No| Q[Return error: INVALID_PERCENTAGE]
29
+ P -->|Yes| H{Percentages sum to 100% per sender?}
30
+ H -->|No| I[Return error: INVALID_PERCENTAGE_SUM]
31
+ H -->|Yes| J[Transition status from DRAFT to VALIDATED]
32
+ J --> K[Emit audit event]
33
+ K --> L[Return validated allocation cycle]
34
+ ```
35
+
36
+ ## External Dependencies
37
+
38
+ - None
39
+
40
+ ## Error Scenarios
41
+
42
+ - **ALLOCATION_CYCLE_NOT_FOUND**: Allocation cycle with the specified ID does not exist
43
+ - **INVALID_STATE**: Allocation cycle is not in DRAFT status
44
+ - **NO_ALLOCATION_RULES**: Cycle has no allocation rules defined
45
+ - **INVALID_PERCENTAGE**: One or more percentage values are zero or negative
46
+ - **INVALID_PERCENTAGE_SUM**: Allocation rule percentages for one or more senders do not sum to exactly 100%
47
+
48
+ ## Test Cases
49
+
50
+ - validates a DRAFT allocation cycle with valid rules transitioning it to VALIDATED status
51
+ - returns error when allocation cycle does not exist
52
+ - returns error when allocation cycle is not in DRAFT status
53
+ - returns error when cycle has no allocation rules
54
+ - returns error when any percentage is zero or negative
55
+ - returns error when percentages do not sum to 100% for a sender
56
+ - validates with multiple senders each summing to 100%
57
+ - emits audit event recording the status transition and acting user
@@ -0,0 +1,147 @@
1
+ # Budget Management
2
+
3
+ ## Overview
4
+
5
+ Budget Management provides the planning and control capabilities 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. A budget entity carries a name, budget holder, fiscal year, period range, total amount, status, version type, and a cost object reference (cost center, profit center, or internal order). Each budget contains one or more BudgetLineItem records that specify a cost element, planned amount, and accounting period. The corresponding GL account for each line item is derived automatically from the primary cost element's one-to-one GL account mapping defined in cost-element-management, ensuring a single authoritative planning axis while preserving traceability to the general ledger. A PlanVersion entity (BUDGET, FORECAST, or SIMULATION) supports multi-version planning so organizations can maintain an approved operating budget alongside rolling forecasts and what-if simulations.
6
+
7
+ Budgets follow a five-stage lifecycle — DRAFT, SUBMITTED, APPROVED, ACTIVE, CLOSED — enforcing segregation of duties between budget creation, approval, and cost posting. Budgetary control (funds check) provides real-time validation that prevents transactions from exceeding approved budget amounts, using the BudgetAvailability formula: `Available = Budget - (Actual + Commitments + Encumbrances)`. Actual amounts are sourced from posted journal entries in finance-ledger. Commitments represent outstanding purchase order amounts received from the purchase module via commitment events; encumbrances represent purchase requisition amounts (future extension). This three-bucket model aligns with SAP availability control and Oracle budgetary control patterns. Budget periods reference finance-ledger FiscalYear and AccountingPeriod entities for period alignment, and budget lock at period-end integrates with finance-ledger period close. All budgets are scoped to a Company.
8
+
9
+ ## Business Purpose
10
+
11
+ Organizations need a structured budgeting process to plan expenditures, control costs, and measure financial performance against targets:
12
+
13
+ - **Expenditure planning**: Budgets translate strategic objectives into quantified financial plans by allocating planned amounts to cost elements across accounting periods, providing a financial roadmap for the fiscal year. The corresponding GL account is derived from each primary cost element's GL mapping, ensuring consistency between management and financial accounting without requiring dual-axis maintenance
14
+ - **Approval workflow enforcement**: The DRAFT to SUBMITTED to APPROVED progression ensures budgets are reviewed and authorized before activation, enforcing segregation of duties required by SOX and internal control frameworks — budget approval must be separate from budget creation and cost posting
15
+ - **Multi-version planning**: PlanVersion support (BUDGET, FORECAST, SIMULATION) allows organizations to maintain an approved operating budget alongside rolling forecasts and what-if simulations, enabling agile financial planning without altering the baseline commitment
16
+ - **Budgetary control (funds check)**: Real-time validation prevents transactions from exceeding available budget using the formula `Available = Budget - (Actual + Commitments + Encumbrances)`. This three-bucket availability check catches overspend at entry time, including amounts committed via purchase orders that have not yet been invoiced, preventing the common failure mode where PO-committed funds are double-spent
17
+ - **Commitment tracking**: Outstanding purchase order amounts are tracked as commitments that reduce available budget. When the purchase module confirms, receives, or invoices a PO, commitment amounts are consumed and reclassified as actuals. This integration requires consuming commitment events from the purchase module (PO confirmed, goods received, invoice matched)
18
+ - **Budget vs. actual comparison**: Comparing budgeted amounts against actual postings from finance-ledger journal entries surfaces variances early, enabling corrective action before period close
19
+ - **Cost object alignment**: Budgets reference cost centers, profit centers, or internal orders, linking financial plans to the organizational and project structures managed by the accounting module
20
+ - **Period alignment with finance-ledger**: Budget periods reference FiscalYear and AccountingPeriod from finance-ledger, ensuring budget and actual data share the same temporal boundaries for accurate variance analysis
21
+ - **Budget lock at period-end**: Closing a budget period prevents further modifications to planned amounts, integrating with finance-ledger period close to produce a frozen baseline for reporting and audit
22
+ - **Audit trail**: Every lifecycle transition — creation, submission, approval, activation, closure — is recorded with the acting user and timestamp, supporting internal and external audit requirements
23
+
24
+ ## Process Flow
25
+
26
+ ```mermaid
27
+ stateDiagram-v2
28
+ [*] --> Draft: createBudget
29
+ Draft --> Draft: updateBudget / addLineItem / removeLineItem
30
+ Draft --> Submitted: submitBudget
31
+ Submitted --> Approved: approveBudget
32
+ Submitted --> Draft: rejectBudget
33
+ Approved --> Active: activateBudget
34
+ Active --> Closed: closeBudget
35
+ Draft --> [*]: deleteBudget
36
+ ```
37
+
38
+ ```mermaid
39
+ flowchart TD
40
+ A[Define budget scope: fiscal year, cost object, version type] --> B[Create Budget in DRAFT with header fields]
41
+ B --> C[Add BudgetLineItem records per cost element and period]
42
+ C --> D{All periods and cost elements covered?}
43
+ D -- No --> C
44
+ D -- Yes --> E[Submit budget for approval]
45
+ E --> F{Approver reviews budget}
46
+ F -- Reject --> G[Return to DRAFT with rejection reason]
47
+ G --> C
48
+ F -- Approve --> H[Budget status set to APPROVED]
49
+ H --> I[Activate budget for budgetary control]
50
+ I --> J[Funds check enabled: transactions validated against budget]
51
+ J --> K{Period-end reached?}
52
+ K -- No --> J
53
+ K -- Yes --> L[Lock budget period and run variance analysis]
54
+ L --> M{All periods complete?}
55
+ M -- No --> K
56
+ M -- Yes --> N[Close budget]
57
+ ```
58
+
59
+ ```mermaid
60
+ flowchart TD
61
+ A[Transaction submitted against cost element] --> B{Budget exists and ACTIVE for cost object?}
62
+ B -- No --> C[Transaction proceeds without funds check]
63
+ B -- Yes --> D[Compute BudgetAvailability]
64
+ D --> D1[Available = Budget - Actual + Commitments + Encumbrances]
65
+ D1 --> E{Available >= transaction amount?}
66
+ E -- Yes --> F[Transaction passes funds check]
67
+ E -- No --> G[Transaction rejected: budget exceeded]
68
+ ```
69
+
70
+ ```mermaid
71
+ flowchart TD
72
+ A[Purchase Order confirmed in purchase module] --> B[Commitment event received by accounting]
73
+ B --> C[Record commitment amount against cost element + cost object + period]
74
+ C --> D[BudgetAvailability reduced by commitment amount]
75
+ D --> E{Goods receipt or invoice posted?}
76
+ E -- Goods Receipt --> F[Reduce commitment, increase actual by received amount]
77
+ E -- Invoice Matched --> G[Reduce remaining commitment, actual reflects invoiced amount]
78
+ E -- PO Cancelled --> H[Release commitment amount back to available budget]
79
+ ```
80
+
81
+ ## Scenario Patterns
82
+
83
+ - **Annual Operating Budget Creation**: A finance manager creates a new budget for fiscal year 2026 scoped to a cost center, adds line items for each cost element (salaries, travel, office supplies) distributed across twelve monthly periods, submits for department head approval, and activates upon approval to enable funds checking
84
+ - **Rolling Forecast Update**: A financial analyst creates a FORECAST plan version based on the approved BUDGET version, adjusts planned amounts for Q3 and Q4 to reflect revised revenue projections, and submits the forecast for review — the original BUDGET version remains unchanged as the committed baseline
85
+ - **What-If Simulation**: A planning team creates a SIMULATION plan version to model the financial impact of opening a new office, copying the current budget as a base and adding incremental line items for rent, staffing, and equipment — the simulation is never activated but serves as decision support
86
+ - **Budget Rejection and Revision**: A department submits a budget that exceeds the company-wide allocation. The finance director rejects it with a note to reduce travel expenses by 15%. The budget returns to DRAFT, the submitter adjusts the travel line items, and resubmits for approval
87
+ - **Funds Check Blocking an Overspend**: An employee submits a purchase order for office furniture. The funds check computes BudgetAvailability as `Budget - (Actual + Commitments + Encumbrances)` for the office supplies cost element in the current period. The available budget is insufficient after accounting for existing PO commitments, and the transaction is rejected with a budget exceeded error
88
+ - **Commitment Tracking from Purchase Orders**: A department issues a PO for consulting services worth $50,000. The purchase module emits a commitment event, and accounting records a $50,000 commitment against the consulting cost element budget. When the first invoice for $20,000 is matched, the commitment reduces by $20,000 and actual increases by $20,000, keeping BudgetAvailability unchanged. When the PO is fully invoiced, the commitment reaches zero
89
+ - **Mid-Year Budget Transfer**: A budget holder reallocates planned amounts between cost elements within the same budget (e.g., moving unused travel budget to training) by updating line items while the budget is ACTIVE, subject to approval controls
90
+ - **Budget vs. Actual Variance Report**: At month-end, a controller compares budgeted amounts against actual postings from finance-ledger journal entries for each cost element and period. The comparison highlights a 20% overrun in consulting expenses, triggering a management review
91
+ - **Period-End Budget Lock**: As the finance-ledger accounting period for January is closed, the corresponding budget period is locked, freezing planned amounts for January and preventing retroactive adjustments to the baseline
92
+ - **Multi-Cost-Object Budgeting**: A company creates separate budgets for three profit centers within the same fiscal year, each with its own line items and approval chain, enabling decentralized budget ownership while maintaining company-level consolidation
93
+
94
+ ## Test Cases
95
+
96
+ - Budget lifecycle follows DRAFT -> SUBMITTED -> APPROVED -> ACTIVE -> CLOSED state machine
97
+ - Budget can only be created in DRAFT status
98
+ - Budget requires a valid companyId; the company must be in ACTIVE status
99
+ - Budget requires a valid fiscal year reference from finance-ledger
100
+ - Budget requires a name, budget holder, and cost object reference (cost center, profit center, or internal order)
101
+ - Budget must reference a valid PlanVersion (BUDGET, FORECAST, or SIMULATION)
102
+ - A DRAFT budget can be updated (name, description, budget holder, line items)
103
+ - A DRAFT budget can be deleted; deletion removes all associated line items
104
+ - Submitting a budget transitions status from DRAFT to SUBMITTED
105
+ - A budget with no line items cannot be submitted
106
+ - Only a user different from the budget creator can approve the budget (segregation of duties)
107
+ - Approving a budget transitions status from SUBMITTED to APPROVED
108
+ - Rejecting a budget transitions status from SUBMITTED back to DRAFT
109
+ - Rejection requires a reason text
110
+ - Activating an APPROVED budget transitions status to ACTIVE and enables funds checking
111
+ - Only one ACTIVE budget of type BUDGET can exist per cost object per fiscal year
112
+ - Multiple FORECAST or SIMULATION versions can coexist for the same cost object and fiscal year
113
+ - Closing an ACTIVE budget transitions status to CLOSED; no further modifications are permitted
114
+ - A CLOSED budget cannot be reopened
115
+ - BudgetLineItem requires a valid cost element reference; the cost element must be a PRIMARY type in ACTIVE status
116
+ - BudgetLineItem derives its GL account automatically from the referenced primary cost element's GL account mapping; no separate GL account field is required
117
+ - BudgetLineItem requires a valid accounting period reference from finance-ledger
118
+ - BudgetLineItem planned amount must be a positive value
119
+ - Line items can be added to or removed from a DRAFT budget
120
+ - Line items cannot be added to or removed from a SUBMITTED, APPROVED, or CLOSED budget
121
+ - Duplicate line items (same account and period) within a single budget are rejected
122
+ - Funds check computes BudgetAvailability as `Budget - (Actual + Commitments + Encumbrances)` for the target cost element, period, and cost object
123
+ - A transaction that exceeds BudgetAvailability is rejected with a budget exceeded error when budgetary control is active
124
+ - A transaction against a cost element with no corresponding budget line item is flagged as unbudgeted
125
+ - Commitment amounts are recorded when a purchase order confirmation event is received from the purchase module
126
+ - Commitment amounts are reduced and actual amounts are increased when a goods receipt or invoice match event is received from the purchase module
127
+ - Commitment amounts are fully released when a purchase order cancellation event is received from the purchase module
128
+ - Encumbrances (purchase requisition amounts) are tracked as a future extension; the availability formula reserves the field but the initial implementation treats encumbrances as zero
129
+ - Budget vs. actual comparison retrieves actual amounts from finance-ledger posted journal entries matching the budget's cost object, cost element, and period
130
+ - Variance is computed as planned amount minus actual amount; positive variance indicates underspend, negative indicates overspend
131
+ - Budget periods align with finance-ledger AccountingPeriod boundaries; misaligned periods are rejected
132
+ - Locking a budget period prevents further modifications to planned amounts for that period
133
+ - Budget lock integrates with finance-ledger period close; closing an accounting period triggers the corresponding budget period lock
134
+ - PlanVersion of type FORECAST or SIMULATION can reference a base version from which line items are copied
135
+ - Creating a budget emits an audit event recording the acting user, timestamp, and initial field values
136
+ - Submitting, approving, rejecting, activating, and closing a budget each emit audit events recording the status transition and acting user
137
+ - Budgets are scoped to a company; budgets from different companies are fully isolated
138
+ - Only users with appropriate permissions can create, submit, approve, activate, or close budgets
139
+ - Unauthorized users receive a permission denied error when attempting budget operations
140
+
141
+ ## Reference Links
142
+
143
+ - [SAP S/4HANA Budget Management and Availability Control](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/4dbfa293944e410aa3ca0e0905bda494/d0b843994f0d1014a585e2078de58ced.html)
144
+ - [Oracle Fusion Financials Budgetary Control](https://docs.oracle.com/en/cloud/saas/financials/24d/oafcf/budgetary-control.html)
145
+ - [Odoo Budget Management](https://www.odoo.com/documentation/19.0/applications/finance/accounting/reporting/budget.html)
146
+ - [NetSuite Budgets Overview](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N2169498.html)
147
+ - [Sage Intacct Budgeting and Planning](https://www.sage.com/en-us/sage-business-cloud/intacct/features/budgeting-and-planning/)