@tailor-platform/erp-kit 0.2.2 → 0.4.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 (639) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +193 -69
  3. package/dist/cli.mjs +1038 -398
  4. package/package.json +7 -5
  5. package/skills/erp-kit-app-1-requirements/SKILL.md +27 -17
  6. package/skills/erp-kit-app-2-requirements-review/SKILL.md +5 -4
  7. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +10 -1
  8. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +10 -1
  9. package/skills/erp-kit-app-3-plan/SKILL.md +31 -34
  10. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +22 -36
  11. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +15 -1
  12. package/skills/erp-kit-app-3-plan/references/story-extraction.md +8 -2
  13. package/skills/erp-kit-app-4-plan-review/SKILL.md +1 -10
  14. package/skills/erp-kit-app-5-impl-backend/SKILL.md +10 -19
  15. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -22
  16. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +0 -1
  17. package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +13 -4
  18. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +5 -0
  19. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +16 -46
  20. package/skills/erp-kit-app-7-impl-review/SKILL.md +13 -11
  21. package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +16 -17
  22. package/skills/erp-kit-app-shared/SKILL.md +15 -0
  23. package/skills/erp-kit-app-shared/references/link-format-reference.md +13 -0
  24. package/skills/erp-kit-app-shared/references/naming-conventions.md +21 -0
  25. package/skills/erp-kit-app-shared/references/resolver-classification.md +23 -0
  26. package/skills/erp-kit-app-shared/references/schema-constraints.md +25 -0
  27. package/skills/erp-kit-module-1-requirements/SKILL.md +7 -13
  28. package/skills/erp-kit-module-1-requirements/references/feature-doc.md +1 -1
  29. package/skills/erp-kit-module-2-requirements-review/SKILL.md +21 -5
  30. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +19 -0
  31. package/skills/erp-kit-module-3-plan/SKILL.md +6 -8
  32. package/skills/erp-kit-module-3-plan/references/naming.md +15 -1
  33. package/skills/erp-kit-module-4-plan-review/SKILL.md +21 -5
  34. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +15 -0
  35. package/skills/erp-kit-module-5-impl/SKILL.md +12 -10
  36. package/skills/erp-kit-module-5-impl/references/generated-code.md +2 -2
  37. package/skills/erp-kit-module-6-impl-review/SKILL.md +21 -7
  38. package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +1 -1
  39. package/skills/erp-kit-module-6-impl-review/references/errors.md +1 -1
  40. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +15 -0
  41. package/skills/erp-kit-module-shared/SKILL.md +4 -0
  42. package/skills/erp-kit-module-shared/references/errors.md +1 -1
  43. package/skills/erp-kit-module-shared/references/queries.md +1 -1
  44. package/skills/erp-kit-module-shared/references/structure.md +1 -1
  45. package/skills/erp-kit-update/SKILL.md +2 -2
  46. package/src/commands/app/index.ts +75 -31
  47. package/src/commands/check.test.ts +1 -1
  48. package/src/commands/check.ts +2 -35
  49. package/src/commands/doc/index.ts +83 -0
  50. package/src/commands/doc/module.test.ts +119 -0
  51. package/src/commands/doc/module.ts +114 -0
  52. package/src/commands/doc/modules.test.ts +103 -0
  53. package/src/commands/doc/modules.ts +98 -0
  54. package/src/commands/doc/search.test.ts +94 -0
  55. package/src/commands/doc/search.ts +111 -0
  56. package/src/commands/generate-doc.test.ts +63 -0
  57. package/src/commands/generate-doc.ts +105 -0
  58. package/src/commands/index.ts +20 -8
  59. package/src/commands/init-module.test.ts +43 -0
  60. package/src/commands/init-module.ts +74 -0
  61. package/src/commands/lib/command-result.ts +30 -0
  62. package/src/commands/lib/discovery.test.ts +74 -0
  63. package/src/commands/lib/discovery.ts +106 -0
  64. package/src/commands/lib/paths.ts +22 -0
  65. package/src/commands/lib/sync-check-source.test.ts +197 -0
  66. package/src/commands/lib/sync-check-source.ts +100 -0
  67. package/src/commands/lib/sync-check-tests.test.ts +178 -0
  68. package/src/commands/lib/sync-check-tests.ts +69 -0
  69. package/src/commands/mock/index.ts +11 -6
  70. package/src/commands/module/generate.ts +39 -14
  71. package/src/commands/module/index.ts +31 -45
  72. package/src/commands/parse-doc-test-cases.ts +13 -2
  73. package/src/commands/sync-check.test.ts +6 -364
  74. package/src/commands/sync-check.ts +7 -251
  75. package/src/generator/generate-app-code.test.ts +121 -0
  76. package/src/generator/generate-app-code.ts +51 -0
  77. package/src/{commands/scaffold.test.ts → generator/generate-code-boilerplate.test.ts} +19 -89
  78. package/src/generator/generate-code.test.ts +57 -6
  79. package/src/generator/generate-code.ts +40 -157
  80. package/src/generator/generate-errors.ts +34 -0
  81. package/src/generator/generate-permissions.ts +12 -0
  82. package/src/generator/generate-shells.ts +28 -0
  83. package/src/generator/generate-stubs.ts +31 -0
  84. package/src/generator/parse-resolver-doc.test.ts +89 -0
  85. package/src/generator/parse-resolver-doc.ts +125 -0
  86. package/src/generator/scaffold.ts +57 -0
  87. package/src/generator/stub-templates.test.ts +55 -0
  88. package/src/generator/stub-templates.ts +145 -0
  89. package/src/integration.test.ts +2 -2
  90. package/src/modules/audit/README.md +46 -0
  91. package/src/modules/audit/command/activateAuditPolicy.generated.ts +6 -0
  92. package/src/modules/audit/command/activateAuditPolicy.test.ts +186 -0
  93. package/src/modules/audit/command/activateAuditPolicy.ts +97 -0
  94. package/src/modules/audit/command/createAuditPolicy.generated.ts +6 -0
  95. package/src/modules/audit/command/createAuditPolicy.test.ts +395 -0
  96. package/src/modules/audit/command/createAuditPolicy.ts +131 -0
  97. package/src/modules/audit/command/deactivateAuditPolicy.generated.ts +6 -0
  98. package/src/modules/audit/command/deactivateAuditPolicy.test.ts +138 -0
  99. package/src/modules/audit/command/deactivateAuditPolicy.ts +58 -0
  100. package/src/modules/audit/command/deleteAuditPolicy.generated.ts +6 -0
  101. package/src/modules/audit/command/deleteAuditPolicy.test.ts +121 -0
  102. package/src/modules/audit/command/deleteAuditPolicy.ts +52 -0
  103. package/src/modules/audit/command/logAuditEvent.generated.ts +6 -0
  104. package/src/modules/audit/command/logAuditEvent.test.ts +991 -0
  105. package/src/modules/audit/command/logAuditEvent.ts +357 -0
  106. package/src/modules/audit/command/reactivateAuditPolicy.generated.ts +6 -0
  107. package/src/modules/audit/command/reactivateAuditPolicy.test.ts +143 -0
  108. package/src/modules/audit/command/reactivateAuditPolicy.ts +79 -0
  109. package/src/modules/audit/command/registerAuditableEntity.generated.ts +6 -0
  110. package/src/modules/audit/command/registerAuditableEntity.test.ts +268 -0
  111. package/src/modules/audit/command/registerAuditableEntity.ts +94 -0
  112. package/src/modules/audit/command/replaceAuditPolicy.generated.ts +6 -0
  113. package/src/modules/audit/command/replaceAuditPolicy.test.ts +242 -0
  114. package/src/modules/audit/command/replaceAuditPolicy.ts +91 -0
  115. package/src/modules/audit/command/updateAuditPolicy.generated.ts +6 -0
  116. package/src/modules/audit/command/updateAuditPolicy.test.ts +284 -0
  117. package/src/modules/audit/command/updateAuditPolicy.ts +151 -0
  118. package/src/modules/audit/db/auditEntry.ts +47 -0
  119. package/src/modules/audit/db/auditPolicy.ts +33 -0
  120. package/src/modules/audit/db/auditableEntity.ts +22 -0
  121. package/src/modules/audit/db/changeDetail.ts +28 -0
  122. package/src/modules/audit/db/policyFieldRule.ts +23 -0
  123. package/src/modules/audit/docs/commands/ActivateAuditPolicy.md +69 -0
  124. package/src/modules/audit/docs/commands/CreateAuditPolicy.md +79 -0
  125. package/src/modules/audit/docs/commands/DeactivateAuditPolicy.md +55 -0
  126. package/src/modules/audit/docs/commands/DeleteAuditPolicy.md +55 -0
  127. package/src/modules/audit/docs/commands/LogAuditEvent.md +137 -0
  128. package/src/modules/audit/docs/commands/ReactivateAuditPolicy.md +58 -0
  129. package/src/modules/audit/docs/commands/RegisterAuditableEntity.md +62 -0
  130. package/src/modules/audit/docs/commands/ReplaceAuditPolicy.md +72 -0
  131. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +77 -0
  132. package/src/modules/audit/docs/features/audit-event-logging.md +126 -0
  133. package/src/modules/audit/docs/features/audit-policy-configuration.md +135 -0
  134. package/src/modules/audit/docs/features/field-level-change-tracking.md +95 -0
  135. package/src/modules/audit/docs/models/AuditEntry.md +55 -0
  136. package/src/modules/audit/docs/models/AuditPolicy.md +79 -0
  137. package/src/modules/audit/docs/models/AuditableEntity.md +38 -0
  138. package/src/modules/audit/docs/models/ChangeDetail.md +55 -0
  139. package/src/modules/audit/docs/models/PolicyFieldRule.md +45 -0
  140. package/src/modules/audit/docs/queries/GetAuditEntry.md +49 -0
  141. package/src/modules/audit/docs/queries/GetAuditPolicy.md +54 -0
  142. package/src/modules/audit/docs/queries/GetAuditSummary.md +84 -0
  143. package/src/modules/audit/docs/queries/GetChangeDetails.md +56 -0
  144. package/src/modules/audit/docs/queries/ListAuditPolicies.md +58 -0
  145. package/src/modules/audit/docs/queries/SearchAuditEntries.md +91 -0
  146. package/src/modules/audit/generated/kysely-tailordb.ts +92 -0
  147. package/src/modules/audit/index.ts +2 -0
  148. package/src/modules/audit/lib/_db_deps.ts +13 -0
  149. package/src/modules/audit/lib/errors.generated.ts +120 -0
  150. package/src/modules/audit/lib/permissions.generated.ts +14 -0
  151. package/src/modules/audit/lib/types.ts +28 -0
  152. package/src/modules/audit/module.ts +57 -0
  153. package/src/modules/audit/permissions.ts +39 -0
  154. package/src/modules/audit/query/getAuditEntry.generated.ts +5 -0
  155. package/src/modules/audit/query/getAuditEntry.test.ts +123 -0
  156. package/src/modules/audit/query/getAuditEntry.ts +36 -0
  157. package/src/modules/audit/query/getAuditPolicy.generated.ts +5 -0
  158. package/src/modules/audit/query/getAuditPolicy.test.ts +169 -0
  159. package/src/modules/audit/query/getAuditPolicy.ts +42 -0
  160. package/src/modules/audit/query/getAuditSummary.generated.ts +5 -0
  161. package/src/modules/audit/query/getAuditSummary.test.ts +632 -0
  162. package/src/modules/audit/query/getAuditSummary.ts +164 -0
  163. package/src/modules/audit/query/getChangeDetails.generated.ts +5 -0
  164. package/src/modules/audit/query/getChangeDetails.test.ts +195 -0
  165. package/src/modules/audit/query/getChangeDetails.ts +42 -0
  166. package/src/modules/audit/query/listAuditPolicies.generated.ts +5 -0
  167. package/src/modules/audit/query/listAuditPolicies.test.ts +239 -0
  168. package/src/modules/audit/query/listAuditPolicies.ts +100 -0
  169. package/src/modules/audit/query/searchAuditEntries.generated.ts +5 -0
  170. package/src/modules/audit/query/searchAuditEntries.test.ts +424 -0
  171. package/src/modules/audit/query/searchAuditEntries.ts +121 -0
  172. package/src/modules/audit/tailor.config.ts +13 -0
  173. package/src/modules/audit/tailor.d.ts +13 -0
  174. package/src/modules/audit/testing/fixtures.ts +215 -0
  175. package/src/modules/business-partner/README.md +60 -0
  176. package/src/modules/business-partner/command/.gitkeep +0 -0
  177. package/src/modules/business-partner/command/activatePartner.generated.ts +6 -0
  178. package/src/modules/business-partner/command/activatePartner.test.ts +59 -0
  179. package/src/modules/business-partner/command/activatePartner.ts +45 -0
  180. package/src/modules/business-partner/command/assignRoleToPartner.generated.ts +6 -0
  181. package/src/modules/business-partner/command/assignRoleToPartner.test.ts +113 -0
  182. package/src/modules/business-partner/command/assignRoleToPartner.ts +72 -0
  183. package/src/modules/business-partner/command/createContactPerson.generated.ts +6 -0
  184. package/src/modules/business-partner/command/createContactPerson.test.ts +193 -0
  185. package/src/modules/business-partner/command/createContactPerson.ts +98 -0
  186. package/src/modules/business-partner/command/createPartner.generated.ts +6 -0
  187. package/src/modules/business-partner/command/createPartner.test.ts +179 -0
  188. package/src/modules/business-partner/command/createPartner.ts +83 -0
  189. package/src/modules/business-partner/command/createPartnerAddress.generated.ts +6 -0
  190. package/src/modules/business-partner/command/createPartnerAddress.test.ts +195 -0
  191. package/src/modules/business-partner/command/createPartnerAddress.ts +119 -0
  192. package/src/modules/business-partner/command/createPartnerBankAccount.generated.ts +6 -0
  193. package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +297 -0
  194. package/src/modules/business-partner/command/createPartnerBankAccount.ts +114 -0
  195. package/src/modules/business-partner/command/createPartnerIdentification.generated.ts +6 -0
  196. package/src/modules/business-partner/command/createPartnerIdentification.test.ts +255 -0
  197. package/src/modules/business-partner/command/createPartnerIdentification.ts +97 -0
  198. package/src/modules/business-partner/command/deactivateContactPerson.generated.ts +6 -0
  199. package/src/modules/business-partner/command/deactivateContactPerson.test.ts +70 -0
  200. package/src/modules/business-partner/command/deactivateContactPerson.ts +54 -0
  201. package/src/modules/business-partner/command/deactivatePartner.generated.ts +6 -0
  202. package/src/modules/business-partner/command/deactivatePartner.test.ts +59 -0
  203. package/src/modules/business-partner/command/deactivatePartner.ts +46 -0
  204. package/src/modules/business-partner/command/deleteContactPerson.generated.ts +6 -0
  205. package/src/modules/business-partner/command/deleteContactPerson.test.ts +61 -0
  206. package/src/modules/business-partner/command/deleteContactPerson.ts +48 -0
  207. package/src/modules/business-partner/command/deletePartner.generated.ts +6 -0
  208. package/src/modules/business-partner/command/deletePartner.test.ts +58 -0
  209. package/src/modules/business-partner/command/deletePartner.ts +46 -0
  210. package/src/modules/business-partner/command/deletePartnerAddress.generated.ts +6 -0
  211. package/src/modules/business-partner/command/deletePartnerAddress.test.ts +74 -0
  212. package/src/modules/business-partner/command/deletePartnerAddress.ts +52 -0
  213. package/src/modules/business-partner/command/deletePartnerBankAccount.generated.ts +6 -0
  214. package/src/modules/business-partner/command/deletePartnerBankAccount.test.ts +55 -0
  215. package/src/modules/business-partner/command/deletePartnerBankAccount.ts +36 -0
  216. package/src/modules/business-partner/command/deletePartnerIdentification.generated.ts +6 -0
  217. package/src/modules/business-partner/command/deletePartnerIdentification.test.ts +47 -0
  218. package/src/modules/business-partner/command/deletePartnerIdentification.ts +37 -0
  219. package/src/modules/business-partner/command/reactivateContactPerson.generated.ts +6 -0
  220. package/src/modules/business-partner/command/reactivateContactPerson.test.ts +48 -0
  221. package/src/modules/business-partner/command/reactivateContactPerson.ts +48 -0
  222. package/src/modules/business-partner/command/reactivatePartner.generated.ts +6 -0
  223. package/src/modules/business-partner/command/reactivatePartner.test.ts +59 -0
  224. package/src/modules/business-partner/command/reactivatePartner.ts +46 -0
  225. package/src/modules/business-partner/command/removeRoleFromPartner.generated.ts +6 -0
  226. package/src/modules/business-partner/command/removeRoleFromPartner.test.ts +82 -0
  227. package/src/modules/business-partner/command/removeRoleFromPartner.ts +73 -0
  228. package/src/modules/business-partner/command/setDefaultPartnerAddress.generated.ts +6 -0
  229. package/src/modules/business-partner/command/setDefaultPartnerAddress.test.ts +60 -0
  230. package/src/modules/business-partner/command/setDefaultPartnerAddress.ts +48 -0
  231. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.generated.ts +6 -0
  232. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.test.ts +56 -0
  233. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.ts +51 -0
  234. package/src/modules/business-partner/command/setPrimaryContactPerson.generated.ts +6 -0
  235. package/src/modules/business-partner/command/setPrimaryContactPerson.test.ts +63 -0
  236. package/src/modules/business-partner/command/setPrimaryContactPerson.ts +55 -0
  237. package/src/modules/business-partner/command/updateContactPerson.generated.ts +6 -0
  238. package/src/modules/business-partner/command/updateContactPerson.test.ts +193 -0
  239. package/src/modules/business-partner/command/updateContactPerson.ts +92 -0
  240. package/src/modules/business-partner/command/updatePartner.generated.ts +6 -0
  241. package/src/modules/business-partner/command/updatePartner.test.ts +101 -0
  242. package/src/modules/business-partner/command/updatePartner.ts +76 -0
  243. package/src/modules/business-partner/command/updatePartnerAddress.generated.ts +6 -0
  244. package/src/modules/business-partner/command/updatePartnerAddress.test.ts +148 -0
  245. package/src/modules/business-partner/command/updatePartnerAddress.ts +64 -0
  246. package/src/modules/business-partner/command/updatePartnerBankAccount.generated.ts +6 -0
  247. package/src/modules/business-partner/command/updatePartnerBankAccount.test.ts +249 -0
  248. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +109 -0
  249. package/src/modules/business-partner/command/updatePartnerIdentification.generated.ts +6 -0
  250. package/src/modules/business-partner/command/updatePartnerIdentification.test.ts +162 -0
  251. package/src/modules/business-partner/command/updatePartnerIdentification.ts +105 -0
  252. package/src/modules/business-partner/db/.gitkeep +0 -0
  253. package/src/modules/business-partner/db/businessPartner.ts +59 -0
  254. package/src/modules/business-partner/db/contactPerson.ts +49 -0
  255. package/src/modules/business-partner/db/partnerAddress.ts +45 -0
  256. package/src/modules/business-partner/db/partnerBankAccount.ts +53 -0
  257. package/src/modules/business-partner/db/partnerIdentification.ts +53 -0
  258. package/src/modules/business-partner/db/partnerRole.ts +43 -0
  259. package/src/modules/business-partner/docs/commands/ActivatePartner.md +39 -0
  260. package/src/modules/business-partner/docs/commands/AssignRoleToPartner.md +49 -0
  261. package/src/modules/business-partner/docs/commands/CreateContactPerson.md +59 -0
  262. package/src/modules/business-partner/docs/commands/CreatePartner.md +54 -0
  263. package/src/modules/business-partner/docs/commands/CreatePartnerAddress.md +60 -0
  264. package/src/modules/business-partner/docs/commands/CreatePartnerBankAccount.md +68 -0
  265. package/src/modules/business-partner/docs/commands/CreatePartnerIdentification.md +59 -0
  266. package/src/modules/business-partner/docs/commands/DeactivateContactPerson.md +42 -0
  267. package/src/modules/business-partner/docs/commands/DeactivatePartner.md +39 -0
  268. package/src/modules/business-partner/docs/commands/DeleteContactPerson.md +43 -0
  269. package/src/modules/business-partner/docs/commands/DeletePartner.md +40 -0
  270. package/src/modules/business-partner/docs/commands/DeletePartnerAddress.md +40 -0
  271. package/src/modules/business-partner/docs/commands/DeletePartnerBankAccount.md +35 -0
  272. package/src/modules/business-partner/docs/commands/DeletePartnerIdentification.md +33 -0
  273. package/src/modules/business-partner/docs/commands/ReactivateContactPerson.md +38 -0
  274. package/src/modules/business-partner/docs/commands/ReactivatePartner.md +39 -0
  275. package/src/modules/business-partner/docs/commands/RemoveRoleFromPartner.md +46 -0
  276. package/src/modules/business-partner/docs/commands/SetDefaultPartnerAddress.md +38 -0
  277. package/src/modules/business-partner/docs/commands/SetDefaultPartnerBankAccount.md +38 -0
  278. package/src/modules/business-partner/docs/commands/SetPrimaryContactPerson.md +43 -0
  279. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +66 -0
  280. package/src/modules/business-partner/docs/commands/UpdatePartner.md +48 -0
  281. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +46 -0
  282. package/src/modules/business-partner/docs/commands/UpdatePartnerBankAccount.md +64 -0
  283. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +52 -0
  284. package/src/modules/business-partner/docs/features/contact-person-management.md +70 -0
  285. package/src/modules/business-partner/docs/features/partner-address-management.md +96 -0
  286. package/src/modules/business-partner/docs/features/partner-bank-account.md +70 -0
  287. package/src/modules/business-partner/docs/features/partner-identification.md +76 -0
  288. package/src/modules/business-partner/docs/features/partner-lifecycle.md +59 -0
  289. package/src/modules/business-partner/docs/features/partner-role-classification.md +73 -0
  290. package/src/modules/business-partner/docs/models/BusinessPartner.md +64 -0
  291. package/src/modules/business-partner/docs/models/ContactPerson.md +62 -0
  292. package/src/modules/business-partner/docs/models/PartnerAddress.md +52 -0
  293. package/src/modules/business-partner/docs/models/PartnerBankAccount.md +50 -0
  294. package/src/modules/business-partner/docs/models/PartnerIdentification.md +46 -0
  295. package/src/modules/business-partner/docs/models/PartnerRole.md +42 -0
  296. package/src/modules/business-partner/docs/queries/GetContactPerson.md +34 -0
  297. package/src/modules/business-partner/docs/queries/GetDefaultPartnerAddress.md +40 -0
  298. package/src/modules/business-partner/docs/queries/GetDefaultPartnerBankAccount.md +36 -0
  299. package/src/modules/business-partner/docs/queries/GetPartner.md +35 -0
  300. package/src/modules/business-partner/docs/queries/GetPartnerAddress.md +34 -0
  301. package/src/modules/business-partner/docs/queries/GetPartnerBankAccount.md +34 -0
  302. package/src/modules/business-partner/docs/queries/GetPartnerIdentification.md +34 -0
  303. package/src/modules/business-partner/docs/queries/GetPartnerRole.md +34 -0
  304. package/src/modules/business-partner/docs/queries/GetPrimaryContactPerson.md +36 -0
  305. package/src/modules/business-partner/docs/queries/ListContactPersonsByPartner.md +39 -0
  306. package/src/modules/business-partner/docs/queries/ListPartnerAddressesByPartner.md +41 -0
  307. package/src/modules/business-partner/docs/queries/ListPartnerBankAccountsByPartner.md +39 -0
  308. package/src/modules/business-partner/docs/queries/ListPartnerIdentificationsByPartner.md +41 -0
  309. package/src/modules/business-partner/docs/queries/ListPartnersByRole.md +47 -0
  310. package/src/modules/business-partner/executor/.gitkeep +0 -0
  311. package/src/modules/business-partner/generated/.gitkeep +0 -0
  312. package/src/modules/business-partner/generated/enums.ts +60 -0
  313. package/src/modules/business-partner/generated/kysely-tailordb.ts +114 -0
  314. package/src/modules/business-partner/index.ts +2 -0
  315. package/src/modules/business-partner/lib/_db_deps.ts +17 -0
  316. package/src/modules/business-partner/lib/errors.generated.ts +172 -0
  317. package/src/modules/business-partner/lib/errors.ts +2 -0
  318. package/src/modules/business-partner/lib/permissions.generated.ts +30 -0
  319. package/src/modules/business-partner/lib/types.ts +53 -0
  320. package/src/modules/business-partner/module.ts +181 -0
  321. package/src/modules/business-partner/permissions.ts +3 -0
  322. package/src/modules/business-partner/query/.gitkeep +0 -0
  323. package/src/modules/business-partner/query/getContactPerson.generated.ts +5 -0
  324. package/src/modules/business-partner/query/getContactPerson.test.ts +31 -0
  325. package/src/modules/business-partner/query/getContactPerson.ts +16 -0
  326. package/src/modules/business-partner/query/getDefaultPartnerAddress.generated.ts +5 -0
  327. package/src/modules/business-partner/query/getDefaultPartnerAddress.test.ts +45 -0
  328. package/src/modules/business-partner/query/getDefaultPartnerAddress.ts +30 -0
  329. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.generated.ts +5 -0
  330. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.test.ts +43 -0
  331. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.ts +17 -0
  332. package/src/modules/business-partner/query/getPartner.generated.ts +5 -0
  333. package/src/modules/business-partner/query/getPartner.test.ts +31 -0
  334. package/src/modules/business-partner/query/getPartner.ts +16 -0
  335. package/src/modules/business-partner/query/getPartnerAddress.generated.ts +5 -0
  336. package/src/modules/business-partner/query/getPartnerAddress.test.ts +31 -0
  337. package/src/modules/business-partner/query/getPartnerAddress.ts +16 -0
  338. package/src/modules/business-partner/query/getPartnerBankAccount.generated.ts +5 -0
  339. package/src/modules/business-partner/query/getPartnerBankAccount.test.ts +31 -0
  340. package/src/modules/business-partner/query/getPartnerBankAccount.ts +16 -0
  341. package/src/modules/business-partner/query/getPartnerIdentification.generated.ts +5 -0
  342. package/src/modules/business-partner/query/getPartnerIdentification.test.ts +31 -0
  343. package/src/modules/business-partner/query/getPartnerIdentification.ts +16 -0
  344. package/src/modules/business-partner/query/getPartnerRole.generated.ts +5 -0
  345. package/src/modules/business-partner/query/getPartnerRole.test.ts +31 -0
  346. package/src/modules/business-partner/query/getPartnerRole.ts +19 -0
  347. package/src/modules/business-partner/query/getPrimaryContactPerson.generated.ts +5 -0
  348. package/src/modules/business-partner/query/getPrimaryContactPerson.test.ts +43 -0
  349. package/src/modules/business-partner/query/getPrimaryContactPerson.ts +17 -0
  350. package/src/modules/business-partner/query/listContactPersonsByPartner.generated.ts +5 -0
  351. package/src/modules/business-partner/query/listContactPersonsByPartner.test.ts +77 -0
  352. package/src/modules/business-partner/query/listContactPersonsByPartner.ts +32 -0
  353. package/src/modules/business-partner/query/listPartnerAddressesByPartner.generated.ts +5 -0
  354. package/src/modules/business-partner/query/listPartnerAddressesByPartner.test.ts +71 -0
  355. package/src/modules/business-partner/query/listPartnerAddressesByPartner.ts +37 -0
  356. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.generated.ts +5 -0
  357. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.test.ts +59 -0
  358. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.ts +32 -0
  359. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.generated.ts +5 -0
  360. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.test.ts +72 -0
  361. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.ts +40 -0
  362. package/src/modules/business-partner/query/listPartnersByRole.generated.ts +5 -0
  363. package/src/modules/business-partner/query/listPartnersByRole.test.ts +103 -0
  364. package/src/modules/business-partner/query/listPartnersByRole.ts +47 -0
  365. package/src/modules/business-partner/tailor.config.ts +13 -0
  366. package/src/modules/business-partner/tailor.d.ts +13 -0
  367. package/src/modules/business-partner/testing/fixtures.ts +204 -0
  368. package/src/modules/coa-management/README.md +61 -0
  369. package/src/modules/coa-management/command/.gitkeep +0 -0
  370. package/src/modules/coa-management/command/activateAccount.generated.ts +6 -0
  371. package/src/modules/coa-management/command/activateAccount.test.ts +125 -0
  372. package/src/modules/coa-management/command/activateAccount.ts +105 -0
  373. package/src/modules/coa-management/command/activateChartOfAccounts.generated.ts +6 -0
  374. package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +113 -0
  375. package/src/modules/coa-management/command/activateChartOfAccounts.ts +104 -0
  376. package/src/modules/coa-management/command/createAccount.generated.ts +6 -0
  377. package/src/modules/coa-management/command/createAccount.test.ts +767 -0
  378. package/src/modules/coa-management/command/createAccount.ts +247 -0
  379. package/src/modules/coa-management/command/createAccountGroup.generated.ts +6 -0
  380. package/src/modules/coa-management/command/createAccountGroup.test.ts +494 -0
  381. package/src/modules/coa-management/command/createAccountGroup.ts +207 -0
  382. package/src/modules/coa-management/command/createChartOfAccounts.generated.ts +6 -0
  383. package/src/modules/coa-management/command/createChartOfAccounts.test.ts +502 -0
  384. package/src/modules/coa-management/command/createChartOfAccounts.ts +267 -0
  385. package/src/modules/coa-management/command/deactivateAccount.generated.ts +6 -0
  386. package/src/modules/coa-management/command/deactivateAccount.test.ts +199 -0
  387. package/src/modules/coa-management/command/deactivateAccount.ts +142 -0
  388. package/src/modules/coa-management/command/deactivateChartOfAccounts.generated.ts +6 -0
  389. package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +91 -0
  390. package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +88 -0
  391. package/src/modules/coa-management/command/deleteAccount.generated.ts +6 -0
  392. package/src/modules/coa-management/command/deleteAccount.test.ts +122 -0
  393. package/src/modules/coa-management/command/deleteAccount.ts +103 -0
  394. package/src/modules/coa-management/command/deleteAccountGroup.generated.ts +6 -0
  395. package/src/modules/coa-management/command/deleteAccountGroup.test.ts +120 -0
  396. package/src/modules/coa-management/command/deleteAccountGroup.ts +113 -0
  397. package/src/modules/coa-management/command/deleteChartOfAccounts.generated.ts +6 -0
  398. package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +154 -0
  399. package/src/modules/coa-management/command/deleteChartOfAccounts.ts +133 -0
  400. package/src/modules/coa-management/command/moveAccountGroup.generated.ts +6 -0
  401. package/src/modules/coa-management/command/moveAccountGroup.test.ts +199 -0
  402. package/src/modules/coa-management/command/moveAccountGroup.ts +145 -0
  403. package/src/modules/coa-management/command/reactivateAccount.generated.ts +6 -0
  404. package/src/modules/coa-management/command/reactivateAccount.test.ts +126 -0
  405. package/src/modules/coa-management/command/reactivateAccount.ts +123 -0
  406. package/src/modules/coa-management/command/updateAccount.generated.ts +6 -0
  407. package/src/modules/coa-management/command/updateAccount.test.ts +669 -0
  408. package/src/modules/coa-management/command/updateAccount.ts +370 -0
  409. package/src/modules/coa-management/command/updateAccountGroup.generated.ts +6 -0
  410. package/src/modules/coa-management/command/updateAccountGroup.test.ts +253 -0
  411. package/src/modules/coa-management/command/updateAccountGroup.ts +191 -0
  412. package/src/modules/coa-management/command/updateChartOfAccounts.generated.ts +6 -0
  413. package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +153 -0
  414. package/src/modules/coa-management/command/updateChartOfAccounts.ts +133 -0
  415. package/src/modules/coa-management/db/.gitkeep +0 -0
  416. package/src/modules/coa-management/db/account.ts +119 -0
  417. package/src/modules/coa-management/db/accountGroup.ts +57 -0
  418. package/src/modules/coa-management/db/chartOfAccounts.ts +55 -0
  419. package/src/modules/coa-management/docs/commands/ActivateAccount.md +49 -0
  420. package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +47 -0
  421. package/src/modules/coa-management/docs/commands/CreateAccount.md +94 -0
  422. package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +70 -0
  423. package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +72 -0
  424. package/src/modules/coa-management/docs/commands/DeactivateAccount.md +65 -0
  425. package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +44 -0
  426. package/src/modules/coa-management/docs/commands/DeleteAccount.md +52 -0
  427. package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +50 -0
  428. package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +48 -0
  429. package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +57 -0
  430. package/src/modules/coa-management/docs/commands/ReactivateAccount.md +50 -0
  431. package/src/modules/coa-management/docs/commands/UpdateAccount.md +102 -0
  432. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +62 -0
  433. package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +49 -0
  434. package/src/modules/coa-management/docs/features/account-group-hierarchy.md +81 -0
  435. package/src/modules/coa-management/docs/features/account-lifecycle.md +80 -0
  436. package/src/modules/coa-management/docs/features/account-management.md +114 -0
  437. package/src/modules/coa-management/docs/features/chart-of-accounts-setup.md +86 -0
  438. package/src/modules/coa-management/docs/models/Account.md +84 -0
  439. package/src/modules/coa-management/docs/models/AccountGroup.md +55 -0
  440. package/src/modules/coa-management/docs/models/ChartOfAccounts.md +65 -0
  441. package/src/modules/coa-management/docs/queries/DetectCircularReference.md +52 -0
  442. package/src/modules/coa-management/docs/queries/GetAccount.md +42 -0
  443. package/src/modules/coa-management/docs/queries/GetAccountGroup.md +42 -0
  444. package/src/modules/coa-management/docs/queries/GetChartOfAccounts.md +48 -0
  445. package/src/modules/coa-management/docs/queries/ListAccountGroups.md +42 -0
  446. package/src/modules/coa-management/docs/queries/ListAccounts.md +54 -0
  447. package/src/modules/coa-management/docs/queries/ListUnassignedAccounts.md +40 -0
  448. package/src/modules/coa-management/executor/.gitkeep +0 -0
  449. package/src/modules/coa-management/generated/.gitkeep +0 -0
  450. package/src/modules/coa-management/generated/enums.ts +45 -0
  451. package/src/modules/coa-management/generated/kysely-tailordb.ts +81 -0
  452. package/src/modules/coa-management/index.ts +2 -0
  453. package/src/modules/coa-management/lib/_db_deps.ts +17 -0
  454. package/src/modules/coa-management/lib/errors.generated.ts +162 -0
  455. package/src/modules/coa-management/lib/errors.ts +0 -0
  456. package/src/modules/coa-management/lib/permissions.generated.ts +20 -0
  457. package/src/modules/coa-management/lib/types.ts +22 -0
  458. package/src/modules/coa-management/module.ts +136 -0
  459. package/src/modules/coa-management/permissions.ts +3 -0
  460. package/src/modules/coa-management/query/.gitkeep +0 -0
  461. package/src/modules/coa-management/query/detectCircularReference.generated.ts +5 -0
  462. package/src/modules/coa-management/query/detectCircularReference.test.ts +88 -0
  463. package/src/modules/coa-management/query/detectCircularReference.ts +46 -0
  464. package/src/modules/coa-management/query/getAccount.generated.ts +5 -0
  465. package/src/modules/coa-management/query/getAccount.test.ts +55 -0
  466. package/src/modules/coa-management/query/getAccount.ts +25 -0
  467. package/src/modules/coa-management/query/getAccountGroup.generated.ts +5 -0
  468. package/src/modules/coa-management/query/getAccountGroup.test.ts +55 -0
  469. package/src/modules/coa-management/query/getAccountGroup.ts +25 -0
  470. package/src/modules/coa-management/query/getChartOfAccounts.generated.ts +5 -0
  471. package/src/modules/coa-management/query/getChartOfAccounts.test.ts +79 -0
  472. package/src/modules/coa-management/query/getChartOfAccounts.ts +28 -0
  473. package/src/modules/coa-management/query/listAccountGroups.generated.ts +5 -0
  474. package/src/modules/coa-management/query/listAccountGroups.test.ts +72 -0
  475. package/src/modules/coa-management/query/listAccountGroups.ts +49 -0
  476. package/src/modules/coa-management/query/listAccounts.generated.ts +5 -0
  477. package/src/modules/coa-management/query/listAccounts.test.ts +136 -0
  478. package/src/modules/coa-management/query/listAccounts.ts +82 -0
  479. package/src/modules/coa-management/query/listUnassignedAccounts.generated.ts +5 -0
  480. package/src/modules/coa-management/query/listUnassignedAccounts.test.ts +96 -0
  481. package/src/modules/coa-management/query/listUnassignedAccounts.ts +39 -0
  482. package/src/modules/coa-management/tailor.config.ts +13 -0
  483. package/src/modules/coa-management/tailor.d.ts +13 -0
  484. package/src/modules/coa-management/testing/fixtures.ts +201 -0
  485. package/src/modules/item-management/README.md +1 -1
  486. package/src/modules/organization/README.md +57 -0
  487. package/src/modules/organization/command/.gitkeep +0 -0
  488. package/src/modules/organization/command/activateCompany.generated.ts +6 -0
  489. package/src/modules/organization/command/activateCompany.test.ts +184 -0
  490. package/src/modules/organization/command/activateCompany.ts +92 -0
  491. package/src/modules/organization/command/createCompany.generated.ts +6 -0
  492. package/src/modules/organization/command/createCompany.test.ts +156 -0
  493. package/src/modules/organization/command/createCompany.ts +80 -0
  494. package/src/modules/organization/command/createDepartment.generated.ts +6 -0
  495. package/src/modules/organization/command/createDepartment.test.ts +239 -0
  496. package/src/modules/organization/command/createDepartment.ts +98 -0
  497. package/src/modules/organization/command/createSite.generated.ts +6 -0
  498. package/src/modules/organization/command/createSite.test.ts +262 -0
  499. package/src/modules/organization/command/createSite.ts +155 -0
  500. package/src/modules/organization/command/deactivateCompany.generated.ts +6 -0
  501. package/src/modules/organization/command/deactivateCompany.test.ts +58 -0
  502. package/src/modules/organization/command/deactivateCompany.ts +47 -0
  503. package/src/modules/organization/command/deactivateDepartment.generated.ts +6 -0
  504. package/src/modules/organization/command/deactivateDepartment.test.ts +115 -0
  505. package/src/modules/organization/command/deactivateDepartment.ts +63 -0
  506. package/src/modules/organization/command/deactivateSite.generated.ts +6 -0
  507. package/src/modules/organization/command/deactivateSite.test.ts +53 -0
  508. package/src/modules/organization/command/deactivateSite.ts +47 -0
  509. package/src/modules/organization/command/deleteCompany.generated.ts +6 -0
  510. package/src/modules/organization/command/deleteCompany.test.ts +99 -0
  511. package/src/modules/organization/command/deleteCompany.ts +66 -0
  512. package/src/modules/organization/command/reactivateCompany.generated.ts +6 -0
  513. package/src/modules/organization/command/reactivateCompany.test.ts +58 -0
  514. package/src/modules/organization/command/reactivateCompany.ts +47 -0
  515. package/src/modules/organization/command/reactivateDepartment.generated.ts +6 -0
  516. package/src/modules/organization/command/reactivateDepartment.test.ts +59 -0
  517. package/src/modules/organization/command/reactivateDepartment.ts +47 -0
  518. package/src/modules/organization/command/reactivateSite.generated.ts +6 -0
  519. package/src/modules/organization/command/reactivateSite.test.ts +53 -0
  520. package/src/modules/organization/command/reactivateSite.ts +47 -0
  521. package/src/modules/organization/command/updateCompany.generated.ts +6 -0
  522. package/src/modules/organization/command/updateCompany.test.ts +239 -0
  523. package/src/modules/organization/command/updateCompany.ts +127 -0
  524. package/src/modules/organization/command/updateDepartment.generated.ts +6 -0
  525. package/src/modules/organization/command/updateDepartment.test.ts +232 -0
  526. package/src/modules/organization/command/updateDepartment.ts +120 -0
  527. package/src/modules/organization/command/updateSite.generated.ts +6 -0
  528. package/src/modules/organization/command/updateSite.test.ts +274 -0
  529. package/src/modules/organization/command/updateSite.ts +176 -0
  530. package/src/modules/organization/db/.gitkeep +0 -0
  531. package/src/modules/organization/db/company.ts +44 -0
  532. package/src/modules/organization/db/department.ts +46 -0
  533. package/src/modules/organization/db/site.ts +44 -0
  534. package/src/modules/organization/docs/commands/ActivateCompany.md +62 -0
  535. package/src/modules/organization/docs/commands/CreateCompany.md +49 -0
  536. package/src/modules/organization/docs/commands/CreateDepartment.md +62 -0
  537. package/src/modules/organization/docs/commands/CreateSite.md +74 -0
  538. package/src/modules/organization/docs/commands/DeactivateCompany.md +40 -0
  539. package/src/modules/organization/docs/commands/DeactivateDepartment.md +44 -0
  540. package/src/modules/organization/docs/commands/DeactivateSite.md +38 -0
  541. package/src/modules/organization/docs/commands/DeleteCompany.md +50 -0
  542. package/src/modules/organization/docs/commands/ReactivateCompany.md +39 -0
  543. package/src/modules/organization/docs/commands/ReactivateDepartment.md +37 -0
  544. package/src/modules/organization/docs/commands/ReactivateSite.md +37 -0
  545. package/src/modules/organization/docs/commands/UpdateCompany.md +58 -0
  546. package/src/modules/organization/docs/commands/UpdateDepartment.md +64 -0
  547. package/src/modules/organization/docs/commands/UpdateSite.md +80 -0
  548. package/src/modules/organization/docs/features/company-lifecycle.md +76 -0
  549. package/src/modules/organization/docs/features/department-management.md +66 -0
  550. package/src/modules/organization/docs/features/site-management.md +86 -0
  551. package/src/modules/organization/docs/models/Company.md +60 -0
  552. package/src/modules/organization/docs/models/Department.md +57 -0
  553. package/src/modules/organization/docs/models/Site.md +57 -0
  554. package/src/modules/organization/docs/queries/DetectDepartmentCircularReference.md +50 -0
  555. package/src/modules/organization/docs/queries/GetCompany.md +40 -0
  556. package/src/modules/organization/docs/queries/GetDepartment.md +44 -0
  557. package/src/modules/organization/docs/queries/GetDepartmentChildren.md +40 -0
  558. package/src/modules/organization/docs/queries/GetSite.md +37 -0
  559. package/src/modules/organization/docs/queries/ListDepartmentsByCompany.md +54 -0
  560. package/src/modules/organization/docs/queries/ListSitesByCompany.md +54 -0
  561. package/src/modules/organization/executor/.gitkeep +0 -0
  562. package/src/modules/organization/generated/.gitkeep +0 -0
  563. package/src/modules/organization/generated/kysely-tailordb.ts +77 -0
  564. package/src/modules/organization/index.ts +2 -0
  565. package/src/modules/organization/lib/_db_deps.ts +10 -0
  566. package/src/modules/organization/lib/errors.generated.ts +117 -0
  567. package/src/modules/organization/lib/errors.ts +1 -0
  568. package/src/modules/organization/lib/permissions.generated.ts +19 -0
  569. package/src/modules/organization/lib/types.ts +16 -0
  570. package/src/modules/organization/module.ts +89 -0
  571. package/src/modules/organization/permissions.ts +3 -0
  572. package/src/modules/organization/query/.gitkeep +0 -0
  573. package/src/modules/organization/query/detectDepartmentCircularReference.generated.ts +5 -0
  574. package/src/modules/organization/query/detectDepartmentCircularReference.test.ts +102 -0
  575. package/src/modules/organization/query/detectDepartmentCircularReference.ts +27 -0
  576. package/src/modules/organization/query/getCompany.generated.ts +5 -0
  577. package/src/modules/organization/query/getCompany.test.ts +70 -0
  578. package/src/modules/organization/query/getCompany.ts +16 -0
  579. package/src/modules/organization/query/getDepartment.generated.ts +5 -0
  580. package/src/modules/organization/query/getDepartment.test.ts +85 -0
  581. package/src/modules/organization/query/getDepartment.ts +17 -0
  582. package/src/modules/organization/query/getDepartmentChildren.generated.ts +5 -0
  583. package/src/modules/organization/query/getDepartmentChildren.test.ts +75 -0
  584. package/src/modules/organization/query/getDepartmentChildren.ts +21 -0
  585. package/src/modules/organization/query/getSite.generated.ts +5 -0
  586. package/src/modules/organization/query/getSite.test.ts +55 -0
  587. package/src/modules/organization/query/getSite.ts +16 -0
  588. package/src/modules/organization/query/listDepartmentsByCompany.generated.ts +5 -0
  589. package/src/modules/organization/query/listDepartmentsByCompany.test.ts +124 -0
  590. package/src/modules/organization/query/listDepartmentsByCompany.ts +43 -0
  591. package/src/modules/organization/query/listSitesByCompany.generated.ts +5 -0
  592. package/src/modules/organization/query/listSitesByCompany.test.ts +126 -0
  593. package/src/modules/organization/query/listSitesByCompany.ts +41 -0
  594. package/src/modules/organization/tailor.config.ts +13 -0
  595. package/src/modules/organization/tailor.d.ts +13 -0
  596. package/src/modules/organization/testing/fixtures.ts +155 -0
  597. package/src/modules/primitives/README.md +1 -1
  598. package/src/modules/primitives/command/setBaseCurrency.test.ts +8 -64
  599. package/src/modules/primitives/command/setBaseCurrency.ts +6 -64
  600. package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -1
  601. package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -1
  602. package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -1
  603. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +2 -2
  604. package/src/modules/primitives/docs/commands/CreateUnit.md +1 -1
  605. package/src/modules/primitives/docs/commands/DeactivateCategory.md +1 -1
  606. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +1 -1
  607. package/src/modules/primitives/docs/commands/DeactivateUnit.md +1 -1
  608. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +13 -23
  609. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +1 -1
  610. package/src/modules/primitives/docs/features/currency-definitions.md +13 -14
  611. package/src/modules/primitives/docs/models/Currency.md +3 -4
  612. package/src/modules/primitives/docs/queries/ConvertAmount.md +2 -2
  613. package/src/modules/primitives/docs/queries/ConvertQuantity.md +2 -2
  614. package/src/modules/primitives/lib/errors.generated.ts +5 -0
  615. package/src/modules/product-management/README.md +1 -1
  616. package/src/modules/user-management/docs/commands/CreatePermission.md +3 -3
  617. package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
  618. package/src/modules/user-management/docs/queries/ListRolePermissionsByRole.md +39 -0
  619. package/src/modules/user-management/docs/queries/ListUserRolesByUser.md +39 -0
  620. package/src/modules/user-management/generated/enums.ts +0 -15
  621. package/src/modules/user-management/generated/kysely-tailordb.ts +0 -11
  622. package/src/shared/createContext.ts +2 -1
  623. package/src/shared/defineQuery.ts +36 -1
  624. package/src/shared/requirePermission.ts +3 -3
  625. package/src/shared/types.ts +3 -0
  626. package/templates/scaffold/app/backend/package.json +8 -7
  627. package/templates/scaffold/app/frontend/eslint.config.js +12 -0
  628. package/templates/scaffold/app/frontend/package.json +19 -16
  629. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +30 -0
  630. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +3 -2
  631. package/templates/scaffold/app/frontend/vite.config.ts +5 -5
  632. package/templates/workflows/erp-kit-check.yml +2 -2
  633. package/src/commands/module/list.test.ts +0 -57
  634. package/src/commands/module/list.ts +0 -64
  635. package/src/commands/scaffold.ts +0 -176
  636. /package/src/modules/{accounting → audit/db}/.gitkeep +0 -0
  637. /package/src/modules/audit/{.gitkeep → executor/.gitkeep} +0 -0
  638. /package/src/modules/{coa-management/.gitkeep → audit/lib/errors.ts} +0 -0
  639. /package/src/modules/{supplier-management → business-partner}/.gitkeep +0 -0
@@ -0,0 +1,55 @@
1
+ import {
2
+ db,
3
+ type TailorAnyDBField,
4
+ type TailorAnyDBType,
5
+ unsafeAllowAllGqlPermission,
6
+ unsafeAllowAllTypePermission,
7
+ } from "@tailor-platform/sdk";
8
+ import { company as companyStub, currency as currencyStub } from "../lib/_db_deps";
9
+
10
+ export const BASE_COA_STATUSES = ["DRAFT", "ACTIVE", "ARCHIVED"] as const;
11
+
12
+ export interface CreateChartOfAccountsTypeParams<F extends Record<string, TailorAnyDBField>> {
13
+ fields?: F;
14
+ additionalStatuses?: string[];
15
+ companyType?: TailorAnyDBType;
16
+ currencyType?: TailorAnyDBType;
17
+ }
18
+
19
+ export function createChartOfAccountsType<const F extends Record<string, TailorAnyDBField>>(
20
+ params: CreateChartOfAccountsTypeParams<F>,
21
+ ) {
22
+ const statuses = [...BASE_COA_STATUSES, ...(params.additionalStatuses ?? [])] as [
23
+ string,
24
+ ...string[],
25
+ ];
26
+
27
+ return db
28
+ .type(["ChartOfAccounts", "ChartsOfAccounts"], {
29
+ name: db.string().description("Name of the chart of accounts"),
30
+ description: db.string({ optional: true }).description("Optional description of the CoA"),
31
+ companyId: db
32
+ .uuid()
33
+ .relation({
34
+ type: "n-1",
35
+ toward: { type: params.companyType ?? companyStub },
36
+ backward: "chartOfAccounts",
37
+ })
38
+ .description("Foreign key to Company from organization module"),
39
+ baseCurrencyId: db
40
+ .uuid()
41
+ .relation({
42
+ type: "n-1",
43
+ toward: { type: params.currencyType ?? currencyStub },
44
+ backward: "chartsOfAccounts",
45
+ })
46
+ .description("Base currency inherited from the parent company at creation time"),
47
+ status: db.enum(statuses).description("Lifecycle status: DRAFT, ACTIVE, ARCHIVED"),
48
+ ...((params.fields ?? {}) as F),
49
+ ...db.fields.timestamps(),
50
+ })
51
+ .permission(unsafeAllowAllTypePermission)
52
+ .gqlPermission(unsafeAllowAllGqlPermission);
53
+ }
54
+
55
+ export const chartOfAccounts = createChartOfAccountsType({});
@@ -0,0 +1,49 @@
1
+ # ActivateAccount
2
+
3
+ ## Overview
4
+
5
+ activateAccount transitions a GL account from DRAFT to ACTIVE status, making it eligible to receive journal postings from downstream modules. Only DRAFT accounts can be activated; already ACTIVE or INACTIVE accounts require different transitions.
6
+
7
+ ## Business Rules
8
+
9
+ - Target account must exist
10
+ - Parent CoA must be in ACTIVE status; activating an account under a DRAFT CoA is rejected because the CoA itself has not yet been activated, and activating an account under an ARCHIVED CoA is rejected because archived CoAs are immutable
11
+ - Target account must be in DRAFT status
12
+ - Activating an already ACTIVE account fails with an invalid state transition error
13
+ - Activating an INACTIVE account fails (use reactivateAccount instead)
14
+ - Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, and status transition from DRAFT to ACTIVE
15
+
16
+ ## Process Flow
17
+
18
+ ```mermaid
19
+ flowchart TD
20
+ A[Receive activate request] --> B{Account exists?}
21
+ B -->|No| C[Return error: not found]
22
+ B -->|Yes| B2{Parent CoA is ACTIVE?}
23
+ B2 -->|No| B3[Return error: CoA is not ACTIVE]
24
+ B2 -->|Yes| D{Status is DRAFT?}
25
+ D -->|No| E[Return error: invalid state transition]
26
+ D -->|Yes| F[Update status to ACTIVE]
27
+ F --> G[Emit audit event]
28
+ G --> H[Return activated account]
29
+ ```
30
+
31
+ ## External Dependencies
32
+
33
+ - None
34
+
35
+ ## Error Scenarios
36
+
37
+ - **ACCOUNT_NOT_FOUND**: Specified account ID does not exist
38
+ - **CHART_OF_ACCOUNTS_NOT_ACTIVE**: Parent CoA is not in ACTIVE status; account activation requires the CoA to be ACTIVE
39
+ - **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
40
+
41
+ ## Test Cases
42
+
43
+ - returns error when account does not exist
44
+ - returns error when parent CoA is DRAFT
45
+ - returns error when parent CoA is ARCHIVED
46
+ - returns error when account is already ACTIVE
47
+ - returns error when account is INACTIVE
48
+ - activates a DRAFT account
49
+ - emits audit event recording status transition from DRAFT to ACTIVE
@@ -0,0 +1,47 @@
1
+ # ActivateChartOfAccounts
2
+
3
+ ## Overview
4
+
5
+ activateChartOfAccounts transitions a Chart of Accounts from DRAFT to ACTIVE status. Activation makes the CoA the authoritative account structure for its company, enabling accounts within it to receive journal postings from downstream modules. Only one CoA per company can be ACTIVE at a time.
6
+
7
+ ## Business Rules
8
+
9
+ - Target CoA must exist
10
+ - Target CoA must be in DRAFT status
11
+ - Activating an already ACTIVE or ARCHIVED CoA fails with an invalid state transition error
12
+ - Only one CoA per company can be in ACTIVE status; activating a second CoA for the same company fails with a uniqueness constraint error
13
+ - Emits an audit event via the audit module recording the acting user, timestamp, and status transition from DRAFT to ACTIVE
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive activate request] --> B{CoA exists?}
20
+ B -->|No| C[Return error: not found]
21
+ B -->|Yes| D{Status is DRAFT?}
22
+ D -->|No| E[Return error: invalid state transition]
23
+ D -->|Yes| F{Another ACTIVE CoA for same company?}
24
+ F -->|Yes| G[Return error: duplicate active CoA]
25
+ F -->|No| H[Update status to ACTIVE]
26
+ H --> I[Emit audit event]
27
+ I --> J[Return activated CoA]
28
+ ```
29
+
30
+ ## External Dependencies
31
+
32
+ - None
33
+
34
+ ## Error Scenarios
35
+
36
+ - **CHART_OF_ACCOUNTS_NOT_FOUND**: Specified CoA ID does not exist
37
+ - **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
38
+ - **DUPLICATE_ACTIVE_CHART_OF_ACCOUNTS**: Another ACTIVE CoA already exists for the same company
39
+
40
+ ## Test Cases
41
+
42
+ - returns error when CoA does not exist
43
+ - returns error when CoA is already ACTIVE
44
+ - returns error when CoA is ARCHIVED
45
+ - returns error when another ACTIVE CoA exists for the same company
46
+ - activates a DRAFT CoA
47
+ - emits audit event recording status transition from DRAFT to ACTIVE
@@ -0,0 +1,94 @@
1
+ # CreateAccount
2
+
3
+ ## Overview
4
+
5
+ createAccount establishes a new GL account in DRAFT status within a Chart of Accounts. Each account carries a structured numeric code, name, account type, account classification, and optional attributes (currency restriction, reconciliation flag, default tax code, tags, account group assignment). The parent CoA must be in DRAFT or ACTIVE status.
6
+
7
+ ## Business Rules
8
+
9
+ - Account code is required, must be a structured numeric identifier, and must be unique within the CoA
10
+ - Account name is required and must be non-empty
11
+ - Account type must be one of ASSET, LIABILITY, EQUITY, REVENUE, or EXPENSE
12
+ - Account classification must be one of REGULAR, RECEIVABLE, PAYABLE, BANK_CASH, FIXED_ASSET, RETAINED_EARNINGS, or NON_POSTING; defaults to REGULAR
13
+ - Classification must be compatible with account type: RECEIVABLE, BANK_CASH, and FIXED_ASSET require ASSET; PAYABLE requires LIABILITY; RETAINED_EARNINGS requires EQUITY; REGULAR and NON_POSTING are allowed with any type
14
+ - Only one account per CoA may carry the RETAINED_EARNINGS classification
15
+ - Accounts with RECEIVABLE, PAYABLE, or BANK_CASH classification must have reconciliation enabled; attempting to set reconciliation to false for these classifications is rejected
16
+ - Reconciliation flag defaults to false when not explicitly set for REGULAR, FIXED_ASSET, RETAINED_EARNINGS, and NON_POSTING classifications
17
+ - NON_POSTING classification marks the account as excluded from journal entry posting target selection; this constraint is stored on the account and enforced by downstream posting modules
18
+ - RECEIVABLE and PAYABLE classifications mark the account as a sub-ledger control account; direct manual journal postings are blocked (only automated sub-ledger module postings are permitted). This constraint is stored on the account and enforced by the GL/posting layer
19
+ - Currency restriction, when provided, must reference a valid currency from the primitives module. An account with currency restriction only accepts postings denominated in that currency (enforced by downstream posting modules)
20
+ - Account group, when provided, must belong to the same CoA and account code must fall within the group's number range (if defined)
21
+ - Parent CoA must exist and be in DRAFT or ACTIVE status
22
+ - Account is always created in DRAFT status
23
+ - Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, classification, and initial field values
24
+
25
+ ## Process Flow
26
+
27
+ ```mermaid
28
+ flowchart TD
29
+ A[Receive create request] --> B{CoA exists and is DRAFT or ACTIVE?}
30
+ B -->|No| C[Return error: CoA not found or invalid status]
31
+ B -->|Yes| D{Account code unique within CoA?}
32
+ D -->|No| E[Return error: duplicate code]
33
+ D -->|Yes| F{Classification compatible with type?}
34
+ F -->|No| G[Return error: incompatible classification]
35
+ F -->|Yes| H{RETAINED_EARNINGS unique in CoA?}
36
+ H -->|No| I[Return error: duplicate retained earnings]
37
+ H -->|Yes| J{Currency valid if provided?}
38
+ J -->|No| K[Return error: currency not found]
39
+ J -->|Yes| L{Group valid if provided?}
40
+ L -->|No| M[Return error: group not found or code out of range]
41
+ L -->|Yes| N{Reconciliation valid for classification?}
42
+ N -->|No| Q[Return error: reconciliation required]
43
+ N -->|Yes| O[Create account in DRAFT]
44
+ O --> P[Emit audit event]
45
+ P --> Q[Return created account]
46
+ ```
47
+
48
+ ## External Dependencies
49
+
50
+ - [primitives::getCurrency](../../../primitives/docs/queries/GetCurrency.md) - Validates that the referenced currency exists and is active
51
+
52
+ ## Error Scenarios
53
+
54
+ - **CHART_OF_ACCOUNTS_NOT_FOUND**: Referenced CoA does not exist or is not in DRAFT/ACTIVE status
55
+ - **DUPLICATE_ACCOUNT_CODE**: An account with the same code already exists in the CoA
56
+ - **INCOMPATIBLE_CLASSIFICATION**: Account classification is not compatible with the account type
57
+ - **DUPLICATE_RETAINED_EARNINGS**: Another account in the CoA already has RETAINED_EARNINGS classification
58
+ - **CURRENCY_NOT_FOUND**: Referenced currency does not exist or is not active
59
+ - **ACCOUNT_GROUP_NOT_FOUND**: Referenced account group does not exist or belongs to a different CoA
60
+ - **CODE_OUT_OF_RANGE**: Account code does not fall within the assigned group's number range
61
+ - **NAME_REQUIRED**: Account name is empty or not provided
62
+ - **INVALID_ACCOUNT_CODE**: Account code is not a valid structured numeric identifier
63
+ - **RECONCILIATION_REQUIRED**: Reconciliation cannot be set to false for RECEIVABLE, PAYABLE, or BANK_CASH classifications
64
+
65
+ ## Test Cases
66
+
67
+ - returns error when CoA does not exist
68
+ - returns error when CoA is ARCHIVED
69
+ - returns error when account code already exists in CoA
70
+ - returns error when account code is not a valid numeric identifier
71
+ - returns error when name is empty
72
+ - returns error when classification is incompatible with type
73
+ - returns error when RETAINED_EARNINGS already exists in CoA
74
+ - returns error when currency does not exist
75
+ - returns error when account group belongs to different CoA
76
+ - returns error when account code is outside group number range
77
+ - creates account in DRAFT status with defaults
78
+ - creates account with RECEIVABLE classification and enforces reconciliation
79
+ - creates account with PAYABLE classification and enforces reconciliation
80
+ - creates account with BANK_CASH classification and enforces reconciliation
81
+ - creates NON_POSTING account that is marked as excluded from journal entry posting
82
+ - creates RECEIVABLE account that is marked as control account blocking manual postings
83
+ - creates PAYABLE account that is marked as control account blocking manual postings
84
+ - creates account with currency restriction that constrains posting currency
85
+ - creates account with optional currency restriction
86
+ - creates account with optional tags
87
+ - creates account with optional default tax code
88
+ - creates account assigned to a group
89
+ - defaults classification to REGULAR when not specified
90
+ - returns error when reconciliation explicitly set to false for RECEIVABLE classification
91
+ - returns error when reconciliation explicitly set to false for PAYABLE classification
92
+ - returns error when reconciliation explicitly set to false for BANK_CASH classification
93
+ - emits audit event recording acting user, timestamp, CoA reference, account code, and classification
94
+ - passes custom fields through to insert
@@ -0,0 +1,70 @@
1
+ # CreateAccountGroup
2
+
3
+ ## Overview
4
+
5
+ createAccountGroup establishes a new account group within a Chart of Accounts. Groups organize GL accounts into logical categories and can be nested to form a multi-level tree hierarchy. Each group has a code, name, optional parent reference, sort order, and optional account number range.
6
+
7
+ ## Business Rules
8
+
9
+ - Parent CoA must exist and be in DRAFT or ACTIVE status; creating a group under an ARCHIVED CoA is rejected
10
+ - Group code is required and must be unique within the CoA
11
+ - Group name is required and must be non-empty
12
+ - Parent group, when provided, must exist within the same CoA
13
+ - Account number range, when defined, requires both start and end to be provided together, must be a valid interval (start < end), and must not overlap with other groups' ranges within the CoA
14
+ - Sort order controls display sequence among sibling groups
15
+ - Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, group code, and initial field values
16
+
17
+ ## Process Flow
18
+
19
+ ```mermaid
20
+ flowchart TD
21
+ A[Receive create request] --> B{CoA exists?}
22
+ B -->|No| C[Return error: CoA not found]
23
+ B -->|Yes| B2{CoA is DRAFT or ACTIVE?}
24
+ B2 -->|No| B3[Return error: CoA is ARCHIVED]
25
+ B2 -->|Yes| C2{Code non-empty?}
26
+ C2 -->|No| C3[Return error: code required]
27
+ C2 -->|Yes| D{Code unique within CoA?}
28
+ D -->|No| E[Return error: duplicate code]
29
+ D -->|Yes| F{Parent group valid if provided?}
30
+ F -->|No| G[Return error: parent not found]
31
+ F -->|Yes| H{Number range valid and non-overlapping?}
32
+ H -->|No| I[Return error: invalid or overlapping range]
33
+ H -->|Yes| J[Create account group]
34
+ J --> K[Emit audit event]
35
+ K --> L[Return created group]
36
+ ```
37
+
38
+ ## External Dependencies
39
+
40
+ - [audit](../../../audit/README.md) — Receives audit events emitted by this command
41
+
42
+ ## Error Scenarios
43
+
44
+ - **CHART_OF_ACCOUNTS_NOT_FOUND**: Referenced CoA does not exist
45
+ - **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
46
+ - **CODE_REQUIRED**: Group code is empty or not provided
47
+ - **DUPLICATE_GROUP_CODE**: A group with the same code already exists in the CoA
48
+ - **NAME_REQUIRED**: Group name is empty or not provided
49
+ - **PARENT_GROUP_NOT_FOUND**: Specified parent group does not exist or belongs to a different CoA
50
+ - **INVALID_NUMBER_RANGE**: Number range is invalid (start >= end) or overlaps with another group's range
51
+
52
+ ## Test Cases
53
+
54
+ - returns error when CoA does not exist
55
+ - returns error when parent CoA is ARCHIVED
56
+ - returns error when group code is empty
57
+ - returns error when group code already exists in CoA
58
+ - returns error when name is empty
59
+ - returns error when parent group does not exist
60
+ - returns error when parent group belongs to different CoA
61
+ - returns error when number range is invalid
62
+ - returns error when number range overlaps with existing group
63
+ - returns error when only numberRangeStart is provided
64
+ - returns error when only numberRangeEnd is provided
65
+ - creates a root group with no parent
66
+ - creates a child group with valid parent
67
+ - creates a group with account number range
68
+ - creates a group with sort order
69
+ - emits audit event recording acting user, timestamp, CoA reference, group code, and initial field values
70
+ - passes custom fields through to insert
@@ -0,0 +1,72 @@
1
+ # CreateChartOfAccounts
2
+
3
+ ## Overview
4
+
5
+ createChartOfAccounts establishes a new Chart of Accounts container in DRAFT status for a company. The CoA inherits its base currency from the parent company. The referenced company must be in ACTIVE status, which guarantees structural identity completeness including base currency assignment.
6
+
7
+ ## Business Rules
8
+
9
+ - CoA name is required and must be non-empty
10
+ - CoA must reference a valid companyId from the organization module
11
+ - The referenced company must be in ACTIVE status; creating a CoA for a DRAFT or INACTIVE company is rejected
12
+ - CoA inherits its base currency from the parent company's base currency
13
+ - CoA is always created in DRAFT status
14
+ - Description is optional
15
+ - An optional `templateId` can be provided to initialize the CoA from a country-specific localized template; when omitted, a blank CoA is created with no pre-populated account groups or accounts
16
+ - Templates are externally managed configuration data (not owned by this module). Each template is an immutable snapshot containing pre-defined account groups (with numbering ranges) and GL accounts for a specific country or industry. Template storage, versioning, and catalog management are outside the scope of coa-management
17
+ - When `templateId` is provided, the command delegates template resolution to the template provider (external dependency). The provider must return the template's account groups and accounts. If no template provider is configured, templateId is rejected with TEMPLATE_PROVIDER_NOT_CONFIGURED
18
+ - When a valid template is resolved, the command copies the template's account groups (with numbering ranges) and GL accounts into the new CoA in DRAFT status
19
+ - Template-based creation is a convenience shortcut — all copied entities are fully mutable in DRAFT and can be modified before activation
20
+ - Emits an audit event via the audit module recording the acting user, timestamp, initial field values, and whether the CoA was created from a template or blank
21
+
22
+ ## Process Flow
23
+
24
+ ```mermaid
25
+ flowchart TD
26
+ A[Receive create request] --> B{Company exists and is ACTIVE?}
27
+ B -->|No| C[Return error: company not found or not active]
28
+ B -->|Yes| D{Name non-empty?}
29
+ D -->|No| E[Return error: name required]
30
+ D -->|Yes| F[Inherit base currency from company]
31
+ F --> G{templateId provided?}
32
+ G -->|Yes| G2{Template provider configured?}
33
+ G2 -->|No| G3[Return error: template provider not configured]
34
+ G2 -->|Yes| H{Template exists and is valid?}
35
+ H -->|No| I[Return error: template not found]
36
+ H -->|Yes| J[Create CoA in DRAFT with template contents]
37
+ G -->|No| K[Create blank CoA in DRAFT]
38
+ J --> L[Emit audit event]
39
+ K --> L
40
+ L --> M[Return created CoA]
41
+ ```
42
+
43
+ ## External Dependencies
44
+
45
+ - [organization::getCompany](../../../organization/docs/queries/GetCompany.md) - Validates that the referenced company exists and is ACTIVE
46
+ - **Template Provider (external)** - Resolves templateId to a template snapshot containing account groups and GL accounts. Template storage, versioning, and catalog management are outside the scope of this module. When no template provider is configured, only blank CoA creation is available
47
+
48
+ ## Error Scenarios
49
+
50
+ - **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
51
+ - **NAME_REQUIRED**: CoA name is empty or not provided
52
+ - **TEMPLATE_NOT_FOUND**: Specified templateId does not reference a valid template in the template provider
53
+ - **TEMPLATE_PROVIDER_NOT_CONFIGURED**: templateId was provided but no template provider is configured
54
+
55
+ ## Test Cases
56
+
57
+ - returns error when company does not exist
58
+ - returns error when company is not ACTIVE
59
+ - returns error when name is empty
60
+ - returns error when templateId is provided but no template provider is configured
61
+ - returns error when templateId does not reference a valid template
62
+ - creates blank CoA in DRAFT status when no templateId is provided
63
+ - creates CoA from template with pre-populated account groups and accounts in DRAFT status
64
+ - creates CoA from template with nested groups provided in child-first order
65
+ - creates CoA with optional description
66
+ - passes custom fields through to insert
67
+ - validates company via organizationQueries when provided
68
+ - returns error when organizationQueries reports company not found
69
+ - creates blank CoA in DRAFT status with inherited base currency when no templateId is provided
70
+ - template-copied entities are mutable and can be modified before activation
71
+ - emits audit event recording acting user, timestamp, and initial field values
72
+ - audit event includes whether CoA was created from template or blank
@@ -0,0 +1,65 @@
1
+ # DeactivateAccount
2
+
3
+ ## Overview
4
+
5
+ deactivateAccount transitions a GL account from ACTIVE to INACTIVE status, preventing new journal postings while preserving the account and its history for regulatory reporting and audit purposes. An optional successor account can be designated during deactivation; posting redirection is owned by the general-ledger module. A pre-deactivation hook is exposed for the GL module to block deactivation when open or unreconciled balances exist.
6
+
7
+ ## Business Rules
8
+
9
+ - Target account must exist
10
+ - Parent CoA must be in ACTIVE status; deactivating an account under an ARCHIVED CoA is rejected. Note: the DRAFT CoA case is unreachable because account activation requires an ACTIVE CoA, so an ACTIVE account cannot exist under a DRAFT CoA
11
+ - Target account must be in ACTIVE status
12
+ - Deactivating a DRAFT account fails with an invalid state transition error
13
+ - A successor account, when provided, must be ACTIVE at the time of mapping
14
+ - Deactivation exposes a pre-deactivation hook for the GL module to block the transition when open balances exist
15
+ - Without a GL module integrated, deactivation proceeds without balance checks
16
+ - Successor account mapping is optional
17
+ - Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, status transition from ACTIVE to INACTIVE, and successor mapping if provided
18
+
19
+ ## Process Flow
20
+
21
+ ```mermaid
22
+ flowchart TD
23
+ A[Receive deactivate request] --> B{Account exists?}
24
+ B -->|No| C[Return error: not found]
25
+ B -->|Yes| B2{Parent CoA is ACTIVE?}
26
+ B2 -->|No| B3[Return error: CoA is not ACTIVE]
27
+ B2 -->|Yes| D{Status is ACTIVE?}
28
+ D -->|No| E[Return error: invalid state transition]
29
+ D -->|Yes| F{Pre-deactivation hook registered?}
30
+ F -->|Yes| G{Balance check passes?}
31
+ G -->|No| H[Return error: open balances]
32
+ G -->|Yes| I{Successor provided?}
33
+ F -->|No| I
34
+ I -->|Yes| J{Successor is ACTIVE?}
35
+ J -->|No| K[Return error: successor not active]
36
+ J -->|Yes| L[Map successor and set INACTIVE]
37
+ I -->|No| L[Set status to INACTIVE]
38
+ L --> M[Emit audit event]
39
+ M --> N[Return deactivated account]
40
+ ```
41
+
42
+ ## External Dependencies
43
+
44
+ - None (GL module balance check is an optional integration hook)
45
+
46
+ ## Error Scenarios
47
+
48
+ - **ACCOUNT_NOT_FOUND**: Specified account ID does not exist
49
+ - **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
50
+ - **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
51
+ - **OPEN_BALANCES_EXIST**: Pre-deactivation hook reports open or unreconciled balances (GL module integration)
52
+ - **SUCCESSOR_NOT_ACTIVE**: Specified successor account is not in ACTIVE status
53
+
54
+ ## Test Cases
55
+
56
+ - returns error when account does not exist
57
+ - returns error when parent CoA is ARCHIVED
58
+ - returns error when account is not ACTIVE
59
+ - returns error when account is DRAFT
60
+ - returns error when successor account is not ACTIVE
61
+ - deactivates an ACTIVE account without successor
62
+ - deactivates an ACTIVE account with successor mapping
63
+ - deactivates without balance check when GL hook is not registered
64
+ - returns error when GL hook reports open balances
65
+ - emits audit event recording status transition from ACTIVE to INACTIVE and successor mapping
@@ -0,0 +1,44 @@
1
+ # DeactivateChartOfAccounts
2
+
3
+ ## Overview
4
+
5
+ deactivateChartOfAccounts transitions a Chart of Accounts from ACTIVE to ARCHIVED status. Archiving permanently retires the CoA while preserving the historical account structure for audit and restatement purposes. This is a one-way transition — ARCHIVED CoA records cannot be reactivated. The command name follows the canonical verb convention (`deactivate` instead of `archive`); the target status is ARCHIVED.
6
+
7
+ ## Business Rules
8
+
9
+ - Target CoA must exist
10
+ - Target CoA must be in ACTIVE status
11
+ - Deactivating a DRAFT or already ARCHIVED CoA fails with an invalid state transition error
12
+ - Archived CoA records and their accounts remain queryable for reporting and audit
13
+ - This is a one-way transition; reactivation from ARCHIVED is not permitted
14
+ - Emits an audit event via the audit module recording the acting user, timestamp, and status transition from ACTIVE to ARCHIVED
15
+
16
+ ## Process Flow
17
+
18
+ ```mermaid
19
+ flowchart TD
20
+ A[Receive deactivate request] --> B{CoA exists?}
21
+ B -->|No| C[Return error: not found]
22
+ B -->|Yes| D{Status is ACTIVE?}
23
+ D -->|No| E[Return error: invalid state transition]
24
+ D -->|Yes| F[Update status to ARCHIVED]
25
+ F --> G[Emit audit event]
26
+ G --> H[Return archived CoA]
27
+ ```
28
+
29
+ ## External Dependencies
30
+
31
+ - None
32
+
33
+ ## Error Scenarios
34
+
35
+ - **CHART_OF_ACCOUNTS_NOT_FOUND**: Specified CoA ID does not exist
36
+ - **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
37
+
38
+ ## Test Cases
39
+
40
+ - returns error when CoA does not exist
41
+ - returns error when CoA is DRAFT
42
+ - returns error when CoA is already ARCHIVED
43
+ - archives an ACTIVE CoA
44
+ - emits audit event recording status transition from ACTIVE to ARCHIVED
@@ -0,0 +1,52 @@
1
+ # DeleteAccount
2
+
3
+ ## Overview
4
+
5
+ deleteAccount permanently removes a GL account that is in DRAFT status and has no posted transactions. Accounts in ACTIVE or INACTIVE status cannot be deleted — they must be deactivated instead. Accounts with posted transactions cannot be deleted regardless of status, preserving ledger integrity.
6
+
7
+ ## Business Rules
8
+
9
+ - Target account must exist
10
+ - Parent CoA must be in DRAFT or ACTIVE status; deleting an account under an ARCHIVED CoA is rejected
11
+ - Target account must be in DRAFT status
12
+ - Target account must have no posted transactions
13
+ - Deleting ACTIVE or INACTIVE accounts is rejected
14
+ - Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, and deletion
15
+
16
+ ## Process Flow
17
+
18
+ ```mermaid
19
+ flowchart TD
20
+ A[Receive delete request] --> B{Account exists?}
21
+ B -->|No| C[Return error: not found]
22
+ B -->|Yes| B2{Parent CoA is DRAFT or ACTIVE?}
23
+ B2 -->|No| B3[Return error: CoA is ARCHIVED]
24
+ B2 -->|Yes| D{Status is DRAFT?}
25
+ D -->|No| E[Return error: only DRAFT can be deleted]
26
+ D -->|Yes| F{Has posted transactions?}
27
+ F -->|Yes| G[Return error: has posted transactions]
28
+ F -->|No| H[Delete account record]
29
+ H --> I[Emit audit event]
30
+ I --> J[Return success]
31
+ ```
32
+
33
+ ## External Dependencies
34
+
35
+ - None
36
+
37
+ ## Error Scenarios
38
+
39
+ - **ACCOUNT_NOT_FOUND**: Specified account ID does not exist
40
+ - **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
41
+ - **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
42
+ - **HAS_POSTED_TRANSACTIONS**: Account has posted transactions and cannot be deleted
43
+
44
+ ## Test Cases
45
+
46
+ - returns error when account does not exist
47
+ - returns error when parent CoA is ARCHIVED
48
+ - returns error when account is ACTIVE
49
+ - returns error when account is INACTIVE
50
+ - returns error when DRAFT account has posted transactions
51
+ - deletes a DRAFT account with no posted transactions
52
+ - emits audit event recording deletion, acting user, and account code
@@ -0,0 +1,50 @@
1
+ # DeleteAccountGroup
2
+
3
+ ## Overview
4
+
5
+ deleteAccountGroup permanently removes an account group that has no child groups and no assigned accounts. Groups with children or assigned accounts must have those relationships resolved before deletion.
6
+
7
+ ## Business Rules
8
+
9
+ - Target group must exist
10
+ - Parent CoA must be in DRAFT or ACTIVE status; deleting a group under an ARCHIVED CoA is rejected
11
+ - Group must have no child groups
12
+ - Group must have no accounts assigned to it
13
+ - Emits an audit event via the audit module recording the acting user, timestamp, and deletion of the group
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive delete request] --> B{Group exists?}
20
+ B -->|No| C[Return error: not found]
21
+ B -->|Yes| B2{Parent CoA is DRAFT or ACTIVE?}
22
+ B2 -->|No| B3[Return error: CoA is ARCHIVED]
23
+ B2 -->|Yes| D{Has child groups?}
24
+ D -->|Yes| E[Return error: has children]
25
+ D -->|No| F{Has assigned accounts?}
26
+ F -->|Yes| G[Return error: has assigned accounts]
27
+ F -->|No| H[Delete group]
28
+ H --> I[Emit audit event]
29
+ I --> J[Return success]
30
+ ```
31
+
32
+ ## External Dependencies
33
+
34
+ - None
35
+
36
+ ## Error Scenarios
37
+
38
+ - **ACCOUNT_GROUP_NOT_FOUND**: Specified group ID does not exist
39
+ - **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
40
+ - **HAS_CHILD_GROUPS**: Group contains child groups and cannot be deleted
41
+ - **HAS_ASSIGNED_ACCOUNTS**: Group has accounts assigned to it and cannot be deleted
42
+
43
+ ## Test Cases
44
+
45
+ - returns error when group does not exist
46
+ - returns error when parent CoA is ARCHIVED
47
+ - returns error when group has child groups
48
+ - returns error when group has assigned accounts
49
+ - deletes a leaf group with no assigned accounts
50
+ - emits audit event recording deletion and acting user
@@ -0,0 +1,48 @@
1
+ # DeleteChartOfAccounts
2
+
3
+ ## Overview
4
+
5
+ deleteChartOfAccounts permanently removes a Chart of Accounts that is still in DRAFT status. Only DRAFT CoA records can be deleted. ACTIVE and ARCHIVED records are preserved for operational and audit purposes.
6
+
7
+ ## Business Rules
8
+
9
+ - Target CoA must exist
10
+ - Target CoA must be in DRAFT status; deleting ACTIVE or ARCHIVED CoA is rejected
11
+ - Deletion cascade-deletes all child Account and AccountGroup records belonging to the CoA. Because only DRAFT CoA records can be deleted, and accounts can only be created under a DRAFT or ACTIVE CoA, all child accounts are guaranteed to be in DRAFT status with no posted transactions at this point — making cascade deletion safe and consistent with the account deletion invariant
12
+ - Each cascade-deleted child record (Account and AccountGroup) emits its own audit event, followed by the CoA deletion audit event
13
+ - Emits an audit event via the audit module recording the acting user, timestamp, and deletion of the CoA
14
+
15
+ ## Process Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Receive delete request] --> B{CoA exists?}
20
+ B -->|No| C[Return error: not found]
21
+ B -->|Yes| D{Status is DRAFT?}
22
+ D -->|No| E[Return error: only DRAFT can be deleted]
23
+ D -->|Yes| F[Cascade-delete all child Accounts]
24
+ F --> G[Cascade-delete all child AccountGroups]
25
+ G --> H[Delete CoA record]
26
+ H --> I[Emit audit events for each deleted child and the CoA]
27
+ I --> J[Return success]
28
+ ```
29
+
30
+ ## External Dependencies
31
+
32
+ - None
33
+
34
+ ## Error Scenarios
35
+
36
+ - **CHART_OF_ACCOUNTS_NOT_FOUND**: Specified CoA ID does not exist
37
+ - **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
38
+
39
+ ## Test Cases
40
+
41
+ - returns error when CoA does not exist
42
+ - returns error when CoA is ACTIVE
43
+ - returns error when CoA is ARCHIVED
44
+ - deletes a DRAFT CoA with no child records
45
+ - deletes a DRAFT CoA and cascade-deletes all child Accounts
46
+ - deletes a DRAFT CoA and cascade-deletes all child AccountGroups
47
+ - emits audit events for each cascade-deleted Account and AccountGroup
48
+ - emits audit event recording CoA deletion and acting user