@tailor-platform/erp-kit 0.3.0 → 0.4.1

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 (817) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +35 -7
  3. package/dist/cli.mjs +783 -272
  4. package/package.json +5 -4
  5. package/skills/erp-kit-app-1-requirements/SKILL.md +39 -12
  6. package/skills/{erp-kit-app-3-plan → erp-kit-app-1-requirements}/references/story-extraction.md +1 -1
  7. package/skills/erp-kit-app-2-requirements-review/SKILL.md +29 -5
  8. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +4 -0
  9. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +4 -0
  10. package/skills/erp-kit-app-2-requirements-review/references/story-quality-check.md +67 -0
  11. package/skills/erp-kit-app-3-plan/SKILL.md +51 -50
  12. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +24 -18
  13. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +18 -2
  14. package/skills/erp-kit-app-4-plan-review/SKILL.md +16 -13
  15. package/skills/erp-kit-app-5-impl-backend/SKILL.md +19 -11
  16. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -22
  17. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +0 -1
  18. package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +13 -4
  19. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +16 -0
  20. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +16 -46
  21. package/skills/erp-kit-app-7-impl-review/SKILL.md +29 -23
  22. package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +16 -17
  23. package/skills/erp-kit-module-1-requirements/SKILL.md +6 -12
  24. package/skills/erp-kit-module-2-requirements-review/SKILL.md +29 -5
  25. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +19 -0
  26. package/skills/erp-kit-module-3-plan/SKILL.md +2 -4
  27. package/skills/erp-kit-module-4-plan-review/SKILL.md +30 -7
  28. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +15 -0
  29. package/skills/erp-kit-module-6-impl-review/SKILL.md +21 -7
  30. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +15 -0
  31. package/skills/erp-kit-module-shared/SKILL.md +4 -0
  32. package/skills/erp-kit-module-shared/references/commands.md +1 -1
  33. package/skills/erp-kit-module-shared/references/queries.md +5 -6
  34. package/src/commands/app/index.ts +28 -17
  35. package/src/commands/check.test.ts +1 -1
  36. package/src/commands/check.ts +2 -35
  37. package/src/commands/doc/index.ts +83 -0
  38. package/src/commands/doc/module.test.ts +119 -0
  39. package/src/commands/doc/module.ts +114 -0
  40. package/src/commands/doc/modules.test.ts +103 -0
  41. package/src/commands/doc/modules.ts +98 -0
  42. package/src/commands/doc/search.test.ts +94 -0
  43. package/src/commands/doc/search.ts +111 -0
  44. package/src/commands/generate-doc.ts +17 -10
  45. package/src/commands/index.ts +20 -8
  46. package/src/commands/lib/command-result.ts +30 -0
  47. package/src/commands/lib/discovery.test.ts +74 -0
  48. package/src/commands/lib/discovery.ts +106 -0
  49. package/src/commands/lib/paths.ts +22 -0
  50. package/src/commands/lib/sync-check-source.test.ts +197 -0
  51. package/src/commands/lib/sync-check-source.ts +100 -0
  52. package/src/commands/lib/sync-check-tests.test.ts +178 -0
  53. package/src/commands/lib/sync-check-tests.ts +69 -0
  54. package/src/commands/mock/index.ts +11 -6
  55. package/src/commands/module/generate.ts +13 -8
  56. package/src/commands/module/index.ts +17 -21
  57. package/src/commands/parse-doc-test-cases.ts +13 -2
  58. package/src/commands/sync-check.test.ts +6 -364
  59. package/src/commands/sync-check.ts +7 -251
  60. package/src/generator/generate-app-code.test.ts +121 -0
  61. package/src/generator/generate-app-code.ts +51 -0
  62. package/src/generator/generate-code-boilerplate.test.ts +1 -2
  63. package/src/generator/generate-code.test.ts +43 -12
  64. package/src/generator/generate-code.ts +12 -226
  65. package/src/generator/generate-errors.ts +34 -0
  66. package/src/generator/generate-permissions.ts +12 -0
  67. package/src/generator/generate-shells.ts +28 -0
  68. package/src/generator/generate-stubs.ts +31 -0
  69. package/src/generator/parse-resolver-doc.test.ts +89 -0
  70. package/src/generator/parse-resolver-doc.ts +125 -0
  71. package/src/generator/scaffold.ts +57 -0
  72. package/src/generator/stub-templates.test.ts +55 -0
  73. package/src/generator/stub-templates.ts +145 -0
  74. package/src/module.ts +3 -0
  75. package/src/modules/audit/README.md +46 -0
  76. package/src/modules/audit/command/activateAuditPolicy.generated.ts +6 -0
  77. package/src/modules/audit/command/activateAuditPolicy.test.ts +186 -0
  78. package/src/modules/audit/command/activateAuditPolicy.ts +97 -0
  79. package/src/modules/audit/command/createAuditPolicy.generated.ts +6 -0
  80. package/src/modules/audit/command/createAuditPolicy.test.ts +395 -0
  81. package/src/modules/audit/command/createAuditPolicy.ts +131 -0
  82. package/src/modules/audit/command/deactivateAuditPolicy.generated.ts +6 -0
  83. package/src/modules/audit/command/deactivateAuditPolicy.test.ts +138 -0
  84. package/src/modules/audit/command/deactivateAuditPolicy.ts +58 -0
  85. package/src/modules/audit/command/deleteAuditPolicy.generated.ts +6 -0
  86. package/src/modules/audit/command/deleteAuditPolicy.test.ts +121 -0
  87. package/src/modules/audit/command/deleteAuditPolicy.ts +52 -0
  88. package/src/modules/audit/command/logAuditEvent.generated.ts +6 -0
  89. package/src/modules/audit/command/logAuditEvent.test.ts +991 -0
  90. package/src/modules/audit/command/logAuditEvent.ts +357 -0
  91. package/src/modules/audit/command/reactivateAuditPolicy.generated.ts +6 -0
  92. package/src/modules/audit/command/reactivateAuditPolicy.test.ts +143 -0
  93. package/src/modules/audit/command/reactivateAuditPolicy.ts +79 -0
  94. package/src/modules/audit/command/registerAuditableEntity.generated.ts +6 -0
  95. package/src/modules/audit/command/registerAuditableEntity.test.ts +268 -0
  96. package/src/modules/audit/command/registerAuditableEntity.ts +94 -0
  97. package/src/modules/audit/command/replaceAuditPolicy.generated.ts +6 -0
  98. package/src/modules/audit/command/replaceAuditPolicy.test.ts +242 -0
  99. package/src/modules/audit/command/replaceAuditPolicy.ts +91 -0
  100. package/src/modules/audit/command/updateAuditPolicy.generated.ts +6 -0
  101. package/src/modules/audit/command/updateAuditPolicy.test.ts +284 -0
  102. package/src/modules/audit/command/updateAuditPolicy.ts +151 -0
  103. package/src/modules/audit/db/auditEntry.ts +47 -0
  104. package/src/modules/audit/db/auditPolicy.ts +33 -0
  105. package/src/modules/audit/db/auditableEntity.ts +22 -0
  106. package/src/modules/audit/db/changeDetail.ts +28 -0
  107. package/src/modules/audit/db/policyFieldRule.ts +23 -0
  108. package/src/modules/audit/docs/commands/ActivateAuditPolicy.md +69 -0
  109. package/src/modules/audit/docs/commands/CreateAuditPolicy.md +79 -0
  110. package/src/modules/audit/docs/commands/DeactivateAuditPolicy.md +55 -0
  111. package/src/modules/audit/docs/commands/DeleteAuditPolicy.md +55 -0
  112. package/src/modules/audit/docs/commands/LogAuditEvent.md +137 -0
  113. package/src/modules/audit/docs/commands/ReactivateAuditPolicy.md +58 -0
  114. package/src/modules/audit/docs/commands/RegisterAuditableEntity.md +62 -0
  115. package/src/modules/audit/docs/commands/ReplaceAuditPolicy.md +72 -0
  116. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +77 -0
  117. package/src/modules/audit/docs/features/audit-event-logging.md +126 -0
  118. package/src/modules/audit/docs/features/audit-policy-configuration.md +135 -0
  119. package/src/modules/audit/docs/features/field-level-change-tracking.md +95 -0
  120. package/src/modules/audit/docs/models/AuditEntry.md +55 -0
  121. package/src/modules/audit/docs/models/AuditPolicy.md +79 -0
  122. package/src/modules/audit/docs/models/AuditableEntity.md +38 -0
  123. package/src/modules/audit/docs/models/ChangeDetail.md +55 -0
  124. package/src/modules/audit/docs/models/PolicyFieldRule.md +45 -0
  125. package/src/modules/audit/docs/queries/GetAuditEntry.md +49 -0
  126. package/src/modules/audit/docs/queries/GetAuditPolicy.md +54 -0
  127. package/src/modules/audit/docs/queries/GetAuditSummary.md +84 -0
  128. package/src/modules/audit/docs/queries/GetChangeDetails.md +56 -0
  129. package/src/modules/audit/docs/queries/ListAuditPolicies.md +58 -0
  130. package/src/modules/audit/docs/queries/SearchAuditEntries.md +91 -0
  131. package/src/modules/audit/generated/kysely-tailordb.ts +92 -0
  132. package/src/modules/audit/index.ts +2 -0
  133. package/src/modules/audit/lib/_db_deps.ts +13 -0
  134. package/src/modules/audit/lib/errors.generated.ts +120 -0
  135. package/src/modules/audit/lib/permissions.generated.ts +14 -0
  136. package/src/modules/audit/lib/types.ts +33 -0
  137. package/src/modules/audit/module.ts +57 -0
  138. package/src/modules/audit/permissions.ts +39 -0
  139. package/src/modules/audit/query/getAuditEntry.generated.ts +5 -0
  140. package/src/modules/audit/query/getAuditEntry.test.ts +123 -0
  141. package/src/modules/audit/query/getAuditEntry.ts +42 -0
  142. package/src/modules/audit/query/getAuditPolicy.generated.ts +5 -0
  143. package/src/modules/audit/query/getAuditPolicy.test.ts +169 -0
  144. package/src/modules/audit/query/getAuditPolicy.ts +48 -0
  145. package/src/modules/audit/query/getAuditSummary.generated.ts +5 -0
  146. package/src/modules/audit/query/getAuditSummary.test.ts +632 -0
  147. package/src/modules/audit/query/getAuditSummary.ts +170 -0
  148. package/src/modules/audit/query/getChangeDetails.generated.ts +5 -0
  149. package/src/modules/audit/query/getChangeDetails.test.ts +195 -0
  150. package/src/modules/audit/query/getChangeDetails.ts +48 -0
  151. package/src/modules/audit/query/listAuditPolicies.generated.ts +5 -0
  152. package/src/modules/audit/query/listAuditPolicies.test.ts +239 -0
  153. package/src/modules/audit/query/listAuditPolicies.ts +100 -0
  154. package/src/modules/audit/query/searchAuditEntries.generated.ts +5 -0
  155. package/src/modules/audit/query/searchAuditEntries.test.ts +424 -0
  156. package/src/modules/audit/query/searchAuditEntries.ts +121 -0
  157. package/src/modules/audit/tailor.config.ts +13 -0
  158. package/src/modules/audit/tailor.d.ts +13 -0
  159. package/src/modules/audit/testing/fixtures.ts +215 -0
  160. package/src/modules/business-partner/README.md +60 -0
  161. package/src/modules/business-partner/command/activatePartner.generated.ts +6 -0
  162. package/src/modules/business-partner/command/activatePartner.test.ts +59 -0
  163. package/src/modules/business-partner/command/activatePartner.ts +45 -0
  164. package/src/modules/business-partner/command/assignRoleToPartner.generated.ts +6 -0
  165. package/src/modules/business-partner/command/assignRoleToPartner.test.ts +113 -0
  166. package/src/modules/business-partner/command/assignRoleToPartner.ts +72 -0
  167. package/src/modules/business-partner/command/createContactPerson.generated.ts +6 -0
  168. package/src/modules/business-partner/command/createContactPerson.test.ts +193 -0
  169. package/src/modules/business-partner/command/createContactPerson.ts +98 -0
  170. package/src/modules/business-partner/command/createPartner.generated.ts +6 -0
  171. package/src/modules/business-partner/command/createPartner.test.ts +179 -0
  172. package/src/modules/business-partner/command/createPartner.ts +82 -0
  173. package/src/modules/business-partner/command/createPartnerAddress.generated.ts +6 -0
  174. package/src/modules/business-partner/command/createPartnerAddress.test.ts +195 -0
  175. package/src/modules/business-partner/command/createPartnerAddress.ts +119 -0
  176. package/src/modules/business-partner/command/createPartnerBankAccount.generated.ts +6 -0
  177. package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +297 -0
  178. package/src/modules/business-partner/command/createPartnerBankAccount.ts +114 -0
  179. package/src/modules/business-partner/command/createPartnerIdentification.generated.ts +6 -0
  180. package/src/modules/business-partner/command/createPartnerIdentification.test.ts +255 -0
  181. package/src/modules/business-partner/command/createPartnerIdentification.ts +97 -0
  182. package/src/modules/business-partner/command/deactivateContactPerson.generated.ts +6 -0
  183. package/src/modules/business-partner/command/deactivateContactPerson.test.ts +70 -0
  184. package/src/modules/business-partner/command/deactivateContactPerson.ts +54 -0
  185. package/src/modules/business-partner/command/deactivatePartner.generated.ts +6 -0
  186. package/src/modules/business-partner/command/deactivatePartner.test.ts +59 -0
  187. package/src/modules/business-partner/command/deactivatePartner.ts +46 -0
  188. package/src/modules/business-partner/command/deleteContactPerson.generated.ts +6 -0
  189. package/src/modules/business-partner/command/deleteContactPerson.test.ts +61 -0
  190. package/src/modules/business-partner/command/deleteContactPerson.ts +48 -0
  191. package/src/modules/business-partner/command/deletePartner.generated.ts +6 -0
  192. package/src/modules/business-partner/command/deletePartner.test.ts +58 -0
  193. package/src/modules/business-partner/command/deletePartner.ts +46 -0
  194. package/src/modules/business-partner/command/deletePartnerAddress.generated.ts +6 -0
  195. package/src/modules/business-partner/command/deletePartnerAddress.test.ts +74 -0
  196. package/src/modules/business-partner/command/deletePartnerAddress.ts +52 -0
  197. package/src/modules/business-partner/command/deletePartnerBankAccount.generated.ts +6 -0
  198. package/src/modules/business-partner/command/deletePartnerBankAccount.test.ts +55 -0
  199. package/src/modules/business-partner/command/deletePartnerBankAccount.ts +36 -0
  200. package/src/modules/business-partner/command/deletePartnerIdentification.generated.ts +6 -0
  201. package/src/modules/business-partner/command/deletePartnerIdentification.test.ts +47 -0
  202. package/src/modules/business-partner/command/deletePartnerIdentification.ts +37 -0
  203. package/src/modules/business-partner/command/reactivateContactPerson.generated.ts +6 -0
  204. package/src/modules/business-partner/command/reactivateContactPerson.test.ts +48 -0
  205. package/src/modules/business-partner/command/reactivateContactPerson.ts +48 -0
  206. package/src/modules/business-partner/command/reactivatePartner.generated.ts +6 -0
  207. package/src/modules/business-partner/command/reactivatePartner.test.ts +59 -0
  208. package/src/modules/business-partner/command/reactivatePartner.ts +46 -0
  209. package/src/modules/business-partner/command/removeRoleFromPartner.generated.ts +6 -0
  210. package/src/modules/business-partner/command/removeRoleFromPartner.test.ts +82 -0
  211. package/src/modules/business-partner/command/removeRoleFromPartner.ts +73 -0
  212. package/src/modules/business-partner/command/setDefaultPartnerAddress.generated.ts +6 -0
  213. package/src/modules/business-partner/command/setDefaultPartnerAddress.test.ts +60 -0
  214. package/src/modules/business-partner/command/setDefaultPartnerAddress.ts +48 -0
  215. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.generated.ts +6 -0
  216. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.test.ts +56 -0
  217. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.ts +51 -0
  218. package/src/modules/business-partner/command/setPrimaryContactPerson.generated.ts +6 -0
  219. package/src/modules/business-partner/command/setPrimaryContactPerson.test.ts +63 -0
  220. package/src/modules/business-partner/command/setPrimaryContactPerson.ts +55 -0
  221. package/src/modules/business-partner/command/updateContactPerson.generated.ts +6 -0
  222. package/src/modules/business-partner/command/updateContactPerson.test.ts +193 -0
  223. package/src/modules/business-partner/command/updateContactPerson.ts +92 -0
  224. package/src/modules/business-partner/command/updatePartner.generated.ts +6 -0
  225. package/src/modules/business-partner/command/updatePartner.test.ts +101 -0
  226. package/src/modules/business-partner/command/updatePartner.ts +76 -0
  227. package/src/modules/business-partner/command/updatePartnerAddress.generated.ts +6 -0
  228. package/src/modules/business-partner/command/updatePartnerAddress.test.ts +148 -0
  229. package/src/modules/business-partner/command/updatePartnerAddress.ts +64 -0
  230. package/src/modules/business-partner/command/updatePartnerBankAccount.generated.ts +6 -0
  231. package/src/modules/business-partner/command/updatePartnerBankAccount.test.ts +249 -0
  232. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +109 -0
  233. package/src/modules/business-partner/command/updatePartnerIdentification.generated.ts +6 -0
  234. package/src/modules/business-partner/command/updatePartnerIdentification.test.ts +162 -0
  235. package/src/modules/business-partner/command/updatePartnerIdentification.ts +105 -0
  236. package/src/modules/business-partner/db/.gitkeep +0 -0
  237. package/src/modules/business-partner/db/businessPartner.ts +59 -0
  238. package/src/modules/business-partner/db/contactPerson.ts +49 -0
  239. package/src/modules/business-partner/db/partnerAddress.ts +45 -0
  240. package/src/modules/business-partner/db/partnerBankAccount.ts +53 -0
  241. package/src/modules/business-partner/db/partnerIdentification.ts +53 -0
  242. package/src/modules/business-partner/db/partnerRole.ts +43 -0
  243. package/src/modules/business-partner/docs/commands/ActivatePartner.md +39 -0
  244. package/src/modules/business-partner/docs/commands/AssignRoleToPartner.md +49 -0
  245. package/src/modules/business-partner/docs/commands/CreateContactPerson.md +59 -0
  246. package/src/modules/business-partner/docs/commands/CreatePartner.md +54 -0
  247. package/src/modules/business-partner/docs/commands/CreatePartnerAddress.md +60 -0
  248. package/src/modules/business-partner/docs/commands/CreatePartnerBankAccount.md +68 -0
  249. package/src/modules/business-partner/docs/commands/CreatePartnerIdentification.md +59 -0
  250. package/src/modules/business-partner/docs/commands/DeactivateContactPerson.md +42 -0
  251. package/src/modules/business-partner/docs/commands/DeactivatePartner.md +39 -0
  252. package/src/modules/business-partner/docs/commands/DeleteContactPerson.md +43 -0
  253. package/src/modules/business-partner/docs/commands/DeletePartner.md +40 -0
  254. package/src/modules/business-partner/docs/commands/DeletePartnerAddress.md +40 -0
  255. package/src/modules/business-partner/docs/commands/DeletePartnerBankAccount.md +35 -0
  256. package/src/modules/business-partner/docs/commands/DeletePartnerIdentification.md +33 -0
  257. package/src/modules/business-partner/docs/commands/ReactivateContactPerson.md +38 -0
  258. package/src/modules/business-partner/docs/commands/ReactivatePartner.md +39 -0
  259. package/src/modules/business-partner/docs/commands/RemoveRoleFromPartner.md +46 -0
  260. package/src/modules/business-partner/docs/commands/SetDefaultPartnerAddress.md +38 -0
  261. package/src/modules/business-partner/docs/commands/SetDefaultPartnerBankAccount.md +38 -0
  262. package/src/modules/business-partner/docs/commands/SetPrimaryContactPerson.md +43 -0
  263. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +66 -0
  264. package/src/modules/business-partner/docs/commands/UpdatePartner.md +48 -0
  265. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +46 -0
  266. package/src/modules/business-partner/docs/commands/UpdatePartnerBankAccount.md +64 -0
  267. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +52 -0
  268. package/src/modules/business-partner/docs/features/contact-person-management.md +70 -0
  269. package/src/modules/business-partner/docs/features/partner-address-management.md +96 -0
  270. package/src/modules/business-partner/docs/features/partner-bank-account.md +70 -0
  271. package/src/modules/business-partner/docs/features/partner-identification.md +76 -0
  272. package/src/modules/business-partner/docs/features/partner-lifecycle.md +59 -0
  273. package/src/modules/business-partner/docs/features/partner-role-classification.md +73 -0
  274. package/src/modules/business-partner/docs/models/BusinessPartner.md +64 -0
  275. package/src/modules/business-partner/docs/models/ContactPerson.md +62 -0
  276. package/src/modules/business-partner/docs/models/PartnerAddress.md +52 -0
  277. package/src/modules/business-partner/docs/models/PartnerBankAccount.md +50 -0
  278. package/src/modules/business-partner/docs/models/PartnerIdentification.md +46 -0
  279. package/src/modules/business-partner/docs/models/PartnerRole.md +42 -0
  280. package/src/modules/business-partner/docs/queries/GetContactPerson.md +34 -0
  281. package/src/modules/business-partner/docs/queries/GetDefaultPartnerAddress.md +40 -0
  282. package/src/modules/business-partner/docs/queries/GetDefaultPartnerBankAccount.md +36 -0
  283. package/src/modules/business-partner/docs/queries/GetPartner.md +35 -0
  284. package/src/modules/business-partner/docs/queries/GetPartnerAddress.md +34 -0
  285. package/src/modules/business-partner/docs/queries/GetPartnerBankAccount.md +34 -0
  286. package/src/modules/business-partner/docs/queries/GetPartnerIdentification.md +34 -0
  287. package/src/modules/business-partner/docs/queries/GetPartnerRole.md +34 -0
  288. package/src/modules/business-partner/docs/queries/GetPrimaryContactPerson.md +36 -0
  289. package/src/modules/business-partner/docs/queries/ListContactPersonsByPartner.md +39 -0
  290. package/src/modules/business-partner/docs/queries/ListPartnerAddressesByPartner.md +41 -0
  291. package/src/modules/business-partner/docs/queries/ListPartnerBankAccountsByPartner.md +39 -0
  292. package/src/modules/business-partner/docs/queries/ListPartnerIdentificationsByPartner.md +41 -0
  293. package/src/modules/business-partner/docs/queries/ListPartnersByRole.md +47 -0
  294. package/src/modules/business-partner/executor/.gitkeep +0 -0
  295. package/src/modules/business-partner/generated/.gitkeep +0 -0
  296. package/src/modules/business-partner/generated/enums.ts +60 -0
  297. package/src/modules/business-partner/generated/kysely-tailordb.ts +114 -0
  298. package/src/modules/business-partner/index.ts +2 -0
  299. package/src/modules/business-partner/lib/_db_deps.ts +17 -0
  300. package/src/modules/business-partner/lib/errors.generated.ts +172 -0
  301. package/src/modules/business-partner/lib/permissions.generated.ts +30 -0
  302. package/src/modules/business-partner/lib/types.ts +58 -0
  303. package/src/modules/business-partner/module.ts +181 -0
  304. package/src/modules/business-partner/permissions.ts +3 -0
  305. package/src/modules/business-partner/query/.gitkeep +0 -0
  306. package/src/modules/business-partner/query/getContactPerson.generated.ts +5 -0
  307. package/src/modules/business-partner/query/getContactPerson.test.ts +31 -0
  308. package/src/modules/business-partner/query/getContactPerson.ts +16 -0
  309. package/src/modules/business-partner/query/getDefaultPartnerAddress.generated.ts +5 -0
  310. package/src/modules/business-partner/query/getDefaultPartnerAddress.test.ts +45 -0
  311. package/src/modules/business-partner/query/getDefaultPartnerAddress.ts +30 -0
  312. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.generated.ts +5 -0
  313. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.test.ts +43 -0
  314. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.ts +17 -0
  315. package/src/modules/business-partner/query/getPartner.generated.ts +5 -0
  316. package/src/modules/business-partner/query/getPartner.test.ts +31 -0
  317. package/src/modules/business-partner/query/getPartner.ts +16 -0
  318. package/src/modules/business-partner/query/getPartnerAddress.generated.ts +5 -0
  319. package/src/modules/business-partner/query/getPartnerAddress.test.ts +31 -0
  320. package/src/modules/business-partner/query/getPartnerAddress.ts +16 -0
  321. package/src/modules/business-partner/query/getPartnerBankAccount.generated.ts +5 -0
  322. package/src/modules/business-partner/query/getPartnerBankAccount.test.ts +31 -0
  323. package/src/modules/business-partner/query/getPartnerBankAccount.ts +16 -0
  324. package/src/modules/business-partner/query/getPartnerIdentification.generated.ts +5 -0
  325. package/src/modules/business-partner/query/getPartnerIdentification.test.ts +31 -0
  326. package/src/modules/business-partner/query/getPartnerIdentification.ts +16 -0
  327. package/src/modules/business-partner/query/getPartnerRole.generated.ts +5 -0
  328. package/src/modules/business-partner/query/getPartnerRole.test.ts +31 -0
  329. package/src/modules/business-partner/query/getPartnerRole.ts +19 -0
  330. package/src/modules/business-partner/query/getPrimaryContactPerson.generated.ts +5 -0
  331. package/src/modules/business-partner/query/getPrimaryContactPerson.test.ts +43 -0
  332. package/src/modules/business-partner/query/getPrimaryContactPerson.ts +17 -0
  333. package/src/modules/business-partner/query/listContactPersonsByPartner.generated.ts +5 -0
  334. package/src/modules/business-partner/query/listContactPersonsByPartner.test.ts +77 -0
  335. package/src/modules/business-partner/query/listContactPersonsByPartner.ts +32 -0
  336. package/src/modules/business-partner/query/listPartnerAddressesByPartner.generated.ts +5 -0
  337. package/src/modules/business-partner/query/listPartnerAddressesByPartner.test.ts +71 -0
  338. package/src/modules/business-partner/query/listPartnerAddressesByPartner.ts +37 -0
  339. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.generated.ts +5 -0
  340. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.test.ts +59 -0
  341. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.ts +32 -0
  342. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.generated.ts +5 -0
  343. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.test.ts +72 -0
  344. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.ts +40 -0
  345. package/src/modules/business-partner/query/listPartnersByRole.generated.ts +5 -0
  346. package/src/modules/business-partner/query/listPartnersByRole.test.ts +103 -0
  347. package/src/modules/business-partner/query/listPartnersByRole.ts +47 -0
  348. package/src/modules/business-partner/tailor.config.ts +13 -0
  349. package/src/modules/business-partner/tailor.d.ts +13 -0
  350. package/src/modules/business-partner/testing/fixtures.ts +204 -0
  351. package/src/modules/coa-management/README.md +61 -0
  352. package/src/modules/coa-management/command/.gitkeep +0 -0
  353. package/src/modules/coa-management/command/activateAccount.generated.ts +6 -0
  354. package/src/modules/coa-management/command/activateAccount.test.ts +125 -0
  355. package/src/modules/coa-management/command/activateAccount.ts +105 -0
  356. package/src/modules/coa-management/command/activateChartOfAccounts.generated.ts +6 -0
  357. package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +113 -0
  358. package/src/modules/coa-management/command/activateChartOfAccounts.ts +104 -0
  359. package/src/modules/coa-management/command/createAccount.generated.ts +6 -0
  360. package/src/modules/coa-management/command/createAccount.test.ts +767 -0
  361. package/src/modules/coa-management/command/createAccount.ts +247 -0
  362. package/src/modules/coa-management/command/createAccountGroup.generated.ts +6 -0
  363. package/src/modules/coa-management/command/createAccountGroup.test.ts +494 -0
  364. package/src/modules/coa-management/command/createAccountGroup.ts +207 -0
  365. package/src/modules/coa-management/command/createChartOfAccounts.generated.ts +6 -0
  366. package/src/modules/coa-management/command/createChartOfAccounts.test.ts +502 -0
  367. package/src/modules/coa-management/command/createChartOfAccounts.ts +267 -0
  368. package/src/modules/coa-management/command/deactivateAccount.generated.ts +6 -0
  369. package/src/modules/coa-management/command/deactivateAccount.test.ts +199 -0
  370. package/src/modules/coa-management/command/deactivateAccount.ts +142 -0
  371. package/src/modules/coa-management/command/deactivateChartOfAccounts.generated.ts +6 -0
  372. package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +91 -0
  373. package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +88 -0
  374. package/src/modules/coa-management/command/deleteAccount.generated.ts +6 -0
  375. package/src/modules/coa-management/command/deleteAccount.test.ts +122 -0
  376. package/src/modules/coa-management/command/deleteAccount.ts +103 -0
  377. package/src/modules/coa-management/command/deleteAccountGroup.generated.ts +6 -0
  378. package/src/modules/coa-management/command/deleteAccountGroup.test.ts +120 -0
  379. package/src/modules/coa-management/command/deleteAccountGroup.ts +113 -0
  380. package/src/modules/coa-management/command/deleteChartOfAccounts.generated.ts +6 -0
  381. package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +154 -0
  382. package/src/modules/coa-management/command/deleteChartOfAccounts.ts +133 -0
  383. package/src/modules/coa-management/command/moveAccountGroup.generated.ts +6 -0
  384. package/src/modules/coa-management/command/moveAccountGroup.test.ts +199 -0
  385. package/src/modules/coa-management/command/moveAccountGroup.ts +145 -0
  386. package/src/modules/coa-management/command/reactivateAccount.generated.ts +6 -0
  387. package/src/modules/coa-management/command/reactivateAccount.test.ts +126 -0
  388. package/src/modules/coa-management/command/reactivateAccount.ts +123 -0
  389. package/src/modules/coa-management/command/updateAccount.generated.ts +6 -0
  390. package/src/modules/coa-management/command/updateAccount.test.ts +669 -0
  391. package/src/modules/coa-management/command/updateAccount.ts +370 -0
  392. package/src/modules/coa-management/command/updateAccountGroup.generated.ts +6 -0
  393. package/src/modules/coa-management/command/updateAccountGroup.test.ts +253 -0
  394. package/src/modules/coa-management/command/updateAccountGroup.ts +191 -0
  395. package/src/modules/coa-management/command/updateChartOfAccounts.generated.ts +6 -0
  396. package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +153 -0
  397. package/src/modules/coa-management/command/updateChartOfAccounts.ts +133 -0
  398. package/src/modules/coa-management/db/.gitkeep +0 -0
  399. package/src/modules/coa-management/db/account.ts +119 -0
  400. package/src/modules/coa-management/db/accountGroup.ts +57 -0
  401. package/src/modules/coa-management/db/chartOfAccounts.ts +55 -0
  402. package/src/modules/coa-management/docs/commands/ActivateAccount.md +49 -0
  403. package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +47 -0
  404. package/src/modules/coa-management/docs/commands/CreateAccount.md +94 -0
  405. package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +70 -0
  406. package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +72 -0
  407. package/src/modules/coa-management/docs/commands/DeactivateAccount.md +65 -0
  408. package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +44 -0
  409. package/src/modules/coa-management/docs/commands/DeleteAccount.md +52 -0
  410. package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +50 -0
  411. package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +48 -0
  412. package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +57 -0
  413. package/src/modules/coa-management/docs/commands/ReactivateAccount.md +50 -0
  414. package/src/modules/coa-management/docs/commands/UpdateAccount.md +102 -0
  415. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +62 -0
  416. package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +49 -0
  417. package/src/modules/coa-management/docs/features/account-group-hierarchy.md +81 -0
  418. package/src/modules/coa-management/docs/features/account-lifecycle.md +80 -0
  419. package/src/modules/coa-management/docs/features/account-management.md +114 -0
  420. package/src/modules/coa-management/docs/features/chart-of-accounts-setup.md +86 -0
  421. package/src/modules/coa-management/docs/models/Account.md +84 -0
  422. package/src/modules/coa-management/docs/models/AccountGroup.md +55 -0
  423. package/src/modules/coa-management/docs/models/ChartOfAccounts.md +65 -0
  424. package/src/modules/coa-management/docs/queries/DetectCircularReference.md +52 -0
  425. package/src/modules/coa-management/docs/queries/GetAccount.md +42 -0
  426. package/src/modules/coa-management/docs/queries/GetAccountGroup.md +42 -0
  427. package/src/modules/coa-management/docs/queries/GetChartOfAccounts.md +48 -0
  428. package/src/modules/coa-management/docs/queries/ListAccountGroups.md +42 -0
  429. package/src/modules/coa-management/docs/queries/ListAccounts.md +54 -0
  430. package/src/modules/coa-management/docs/queries/ListUnassignedAccounts.md +40 -0
  431. package/src/modules/coa-management/executor/.gitkeep +0 -0
  432. package/src/modules/coa-management/generated/.gitkeep +0 -0
  433. package/src/modules/coa-management/generated/enums.ts +45 -0
  434. package/src/modules/coa-management/generated/kysely-tailordb.ts +81 -0
  435. package/src/modules/coa-management/index.ts +2 -0
  436. package/src/modules/coa-management/lib/_db_deps.ts +17 -0
  437. package/src/modules/coa-management/lib/errors.generated.ts +162 -0
  438. package/src/modules/coa-management/lib/permissions.generated.ts +20 -0
  439. package/src/modules/coa-management/lib/types.ts +27 -0
  440. package/src/modules/coa-management/module.ts +136 -0
  441. package/src/modules/coa-management/permissions.ts +3 -0
  442. package/src/modules/coa-management/query/.gitkeep +0 -0
  443. package/src/modules/coa-management/query/detectCircularReference.generated.ts +5 -0
  444. package/src/modules/coa-management/query/detectCircularReference.test.ts +88 -0
  445. package/src/modules/coa-management/query/detectCircularReference.ts +46 -0
  446. package/src/modules/coa-management/query/getAccount.generated.ts +5 -0
  447. package/src/modules/coa-management/query/getAccount.test.ts +55 -0
  448. package/src/modules/coa-management/query/getAccount.ts +25 -0
  449. package/src/modules/coa-management/query/getAccountGroup.generated.ts +5 -0
  450. package/src/modules/coa-management/query/getAccountGroup.test.ts +55 -0
  451. package/src/modules/coa-management/query/getAccountGroup.ts +25 -0
  452. package/src/modules/coa-management/query/getChartOfAccounts.generated.ts +5 -0
  453. package/src/modules/coa-management/query/getChartOfAccounts.test.ts +79 -0
  454. package/src/modules/coa-management/query/getChartOfAccounts.ts +28 -0
  455. package/src/modules/coa-management/query/listAccountGroups.generated.ts +5 -0
  456. package/src/modules/coa-management/query/listAccountGroups.test.ts +72 -0
  457. package/src/modules/coa-management/query/listAccountGroups.ts +49 -0
  458. package/src/modules/coa-management/query/listAccounts.generated.ts +5 -0
  459. package/src/modules/coa-management/query/listAccounts.test.ts +136 -0
  460. package/src/modules/coa-management/query/listAccounts.ts +82 -0
  461. package/src/modules/coa-management/query/listUnassignedAccounts.generated.ts +5 -0
  462. package/src/modules/coa-management/query/listUnassignedAccounts.test.ts +96 -0
  463. package/src/modules/coa-management/query/listUnassignedAccounts.ts +39 -0
  464. package/src/modules/coa-management/tailor.config.ts +13 -0
  465. package/src/modules/coa-management/tailor.d.ts +13 -0
  466. package/src/modules/coa-management/testing/fixtures.ts +201 -0
  467. package/src/modules/item-management/README.md +1 -1
  468. package/src/modules/item-management/command/activateItem.generated.ts +1 -1
  469. package/src/modules/item-management/command/activateItem.ts +1 -1
  470. package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
  471. package/src/modules/item-management/command/assignItemToTaxonomy.ts +1 -1
  472. package/src/modules/item-management/command/createItem.generated.ts +1 -1
  473. package/src/modules/item-management/command/createItem.test.ts +1 -1
  474. package/src/modules/item-management/command/createItem.ts +1 -1
  475. package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
  476. package/src/modules/item-management/command/createTaxonomyNode.test.ts +1 -1
  477. package/src/modules/item-management/command/createTaxonomyNode.ts +1 -1
  478. package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
  479. package/src/modules/item-management/command/deactivateItem.ts +1 -1
  480. package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
  481. package/src/modules/item-management/command/deleteItem.ts +1 -1
  482. package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
  483. package/src/modules/item-management/command/deleteTaxonomyNode.ts +1 -1
  484. package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
  485. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +1 -1
  486. package/src/modules/item-management/command/moveTaxonomyNode.ts +1 -1
  487. package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
  488. package/src/modules/item-management/command/reactivateItem.ts +1 -1
  489. package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
  490. package/src/modules/item-management/command/removeItemFromTaxonomy.ts +1 -1
  491. package/src/modules/item-management/command/updateItem.generated.ts +1 -1
  492. package/src/modules/item-management/command/updateItem.test.ts +1 -1
  493. package/src/modules/item-management/command/updateItem.ts +1 -1
  494. package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
  495. package/src/modules/item-management/command/updateTaxonomyNode.ts +1 -1
  496. package/src/modules/item-management/lib/errors.generated.ts +1 -1
  497. package/src/modules/item-management/lib/permissions.generated.ts +1 -1
  498. package/src/modules/item-management/lib/types.ts +6 -1
  499. package/src/modules/item-management/module.ts +1 -1
  500. package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
  501. package/src/modules/item-management/query/calculateNodeDepth.ts +1 -1
  502. package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
  503. package/src/modules/item-management/query/calculateSubtreeDepth.ts +1 -1
  504. package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
  505. package/src/modules/item-management/query/detectCircularReference.ts +1 -1
  506. package/src/modules/item-management/query/getItem.generated.ts +1 -1
  507. package/src/modules/item-management/query/getItem.ts +1 -1
  508. package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
  509. package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +1 -1
  510. package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
  511. package/src/modules/item-management/query/getTaxonomyNode.ts +1 -1
  512. package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
  513. package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +1 -1
  514. package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
  515. package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +1 -1
  516. package/src/modules/organization/README.md +57 -0
  517. package/src/modules/organization/command/.gitkeep +0 -0
  518. package/src/modules/organization/command/activateCompany.generated.ts +6 -0
  519. package/src/modules/organization/command/activateCompany.test.ts +184 -0
  520. package/src/modules/organization/command/activateCompany.ts +92 -0
  521. package/src/modules/organization/command/createCompany.generated.ts +6 -0
  522. package/src/modules/organization/command/createCompany.test.ts +156 -0
  523. package/src/modules/organization/command/createCompany.ts +80 -0
  524. package/src/modules/organization/command/createDepartment.generated.ts +6 -0
  525. package/src/modules/organization/command/createDepartment.test.ts +239 -0
  526. package/src/modules/organization/command/createDepartment.ts +98 -0
  527. package/src/modules/organization/command/createSite.generated.ts +6 -0
  528. package/src/modules/organization/command/createSite.test.ts +262 -0
  529. package/src/modules/organization/command/createSite.ts +155 -0
  530. package/src/modules/organization/command/deactivateCompany.generated.ts +6 -0
  531. package/src/modules/organization/command/deactivateCompany.test.ts +58 -0
  532. package/src/modules/organization/command/deactivateCompany.ts +47 -0
  533. package/src/modules/organization/command/deactivateDepartment.generated.ts +6 -0
  534. package/src/modules/organization/command/deactivateDepartment.test.ts +115 -0
  535. package/src/modules/organization/command/deactivateDepartment.ts +63 -0
  536. package/src/modules/organization/command/deactivateSite.generated.ts +6 -0
  537. package/src/modules/organization/command/deactivateSite.test.ts +53 -0
  538. package/src/modules/organization/command/deactivateSite.ts +47 -0
  539. package/src/modules/organization/command/deleteCompany.generated.ts +6 -0
  540. package/src/modules/organization/command/deleteCompany.test.ts +99 -0
  541. package/src/modules/organization/command/deleteCompany.ts +66 -0
  542. package/src/modules/organization/command/reactivateCompany.generated.ts +6 -0
  543. package/src/modules/organization/command/reactivateCompany.test.ts +58 -0
  544. package/src/modules/organization/command/reactivateCompany.ts +47 -0
  545. package/src/modules/organization/command/reactivateDepartment.generated.ts +6 -0
  546. package/src/modules/organization/command/reactivateDepartment.test.ts +59 -0
  547. package/src/modules/organization/command/reactivateDepartment.ts +47 -0
  548. package/src/modules/organization/command/reactivateSite.generated.ts +6 -0
  549. package/src/modules/organization/command/reactivateSite.test.ts +53 -0
  550. package/src/modules/organization/command/reactivateSite.ts +47 -0
  551. package/src/modules/organization/command/updateCompany.generated.ts +6 -0
  552. package/src/modules/organization/command/updateCompany.test.ts +239 -0
  553. package/src/modules/organization/command/updateCompany.ts +127 -0
  554. package/src/modules/organization/command/updateDepartment.generated.ts +6 -0
  555. package/src/modules/organization/command/updateDepartment.test.ts +232 -0
  556. package/src/modules/organization/command/updateDepartment.ts +120 -0
  557. package/src/modules/organization/command/updateSite.generated.ts +6 -0
  558. package/src/modules/organization/command/updateSite.test.ts +274 -0
  559. package/src/modules/organization/command/updateSite.ts +176 -0
  560. package/src/modules/organization/db/.gitkeep +0 -0
  561. package/src/modules/organization/db/company.ts +44 -0
  562. package/src/modules/organization/db/department.ts +46 -0
  563. package/src/modules/organization/db/site.ts +44 -0
  564. package/src/modules/organization/docs/commands/ActivateCompany.md +62 -0
  565. package/src/modules/organization/docs/commands/CreateCompany.md +49 -0
  566. package/src/modules/organization/docs/commands/CreateDepartment.md +62 -0
  567. package/src/modules/organization/docs/commands/CreateSite.md +74 -0
  568. package/src/modules/organization/docs/commands/DeactivateCompany.md +40 -0
  569. package/src/modules/organization/docs/commands/DeactivateDepartment.md +44 -0
  570. package/src/modules/organization/docs/commands/DeactivateSite.md +38 -0
  571. package/src/modules/organization/docs/commands/DeleteCompany.md +50 -0
  572. package/src/modules/organization/docs/commands/ReactivateCompany.md +39 -0
  573. package/src/modules/organization/docs/commands/ReactivateDepartment.md +37 -0
  574. package/src/modules/organization/docs/commands/ReactivateSite.md +37 -0
  575. package/src/modules/organization/docs/commands/UpdateCompany.md +58 -0
  576. package/src/modules/organization/docs/commands/UpdateDepartment.md +64 -0
  577. package/src/modules/organization/docs/commands/UpdateSite.md +80 -0
  578. package/src/modules/organization/docs/features/company-lifecycle.md +76 -0
  579. package/src/modules/organization/docs/features/department-management.md +66 -0
  580. package/src/modules/organization/docs/features/site-management.md +86 -0
  581. package/src/modules/organization/docs/models/Company.md +60 -0
  582. package/src/modules/organization/docs/models/Department.md +57 -0
  583. package/src/modules/organization/docs/models/Site.md +57 -0
  584. package/src/modules/organization/docs/queries/DetectDepartmentCircularReference.md +50 -0
  585. package/src/modules/organization/docs/queries/GetCompany.md +40 -0
  586. package/src/modules/organization/docs/queries/GetDepartment.md +44 -0
  587. package/src/modules/organization/docs/queries/GetDepartmentChildren.md +40 -0
  588. package/src/modules/organization/docs/queries/GetSite.md +37 -0
  589. package/src/modules/organization/docs/queries/ListDepartmentsByCompany.md +54 -0
  590. package/src/modules/organization/docs/queries/ListSitesByCompany.md +54 -0
  591. package/src/modules/organization/executor/.gitkeep +0 -0
  592. package/src/modules/organization/generated/.gitkeep +0 -0
  593. package/src/modules/organization/generated/kysely-tailordb.ts +77 -0
  594. package/src/modules/organization/index.ts +2 -0
  595. package/src/modules/organization/lib/_db_deps.ts +10 -0
  596. package/src/modules/organization/lib/errors.generated.ts +117 -0
  597. package/src/modules/organization/lib/permissions.generated.ts +19 -0
  598. package/src/modules/organization/lib/types.ts +21 -0
  599. package/src/modules/organization/module.ts +89 -0
  600. package/src/modules/organization/permissions.ts +3 -0
  601. package/src/modules/organization/query/.gitkeep +0 -0
  602. package/src/modules/organization/query/detectDepartmentCircularReference.generated.ts +5 -0
  603. package/src/modules/organization/query/detectDepartmentCircularReference.test.ts +102 -0
  604. package/src/modules/organization/query/detectDepartmentCircularReference.ts +27 -0
  605. package/src/modules/organization/query/getCompany.generated.ts +5 -0
  606. package/src/modules/organization/query/getCompany.test.ts +70 -0
  607. package/src/modules/organization/query/getCompany.ts +16 -0
  608. package/src/modules/organization/query/getDepartment.generated.ts +5 -0
  609. package/src/modules/organization/query/getDepartment.test.ts +85 -0
  610. package/src/modules/organization/query/getDepartment.ts +17 -0
  611. package/src/modules/organization/query/getDepartmentChildren.generated.ts +5 -0
  612. package/src/modules/organization/query/getDepartmentChildren.test.ts +75 -0
  613. package/src/modules/organization/query/getDepartmentChildren.ts +21 -0
  614. package/src/modules/organization/query/getSite.generated.ts +5 -0
  615. package/src/modules/organization/query/getSite.test.ts +55 -0
  616. package/src/modules/organization/query/getSite.ts +16 -0
  617. package/src/modules/organization/query/listDepartmentsByCompany.generated.ts +5 -0
  618. package/src/modules/organization/query/listDepartmentsByCompany.test.ts +124 -0
  619. package/src/modules/organization/query/listDepartmentsByCompany.ts +43 -0
  620. package/src/modules/organization/query/listSitesByCompany.generated.ts +5 -0
  621. package/src/modules/organization/query/listSitesByCompany.test.ts +126 -0
  622. package/src/modules/organization/query/listSitesByCompany.ts +41 -0
  623. package/src/modules/organization/tailor.config.ts +13 -0
  624. package/src/modules/organization/tailor.d.ts +13 -0
  625. package/src/modules/organization/testing/fixtures.ts +155 -0
  626. package/src/modules/primitives/README.md +1 -1
  627. package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
  628. package/src/modules/primitives/command/activateCategory.ts +1 -1
  629. package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
  630. package/src/modules/primitives/command/activateCurrency.ts +1 -1
  631. package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
  632. package/src/modules/primitives/command/activateUnit.ts +1 -1
  633. package/src/modules/primitives/command/createCategory.generated.ts +1 -1
  634. package/src/modules/primitives/command/createCategory.ts +1 -1
  635. package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
  636. package/src/modules/primitives/command/createCurrency.ts +1 -1
  637. package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
  638. package/src/modules/primitives/command/createExchangeRate.ts +1 -1
  639. package/src/modules/primitives/command/createUnit.generated.ts +1 -1
  640. package/src/modules/primitives/command/createUnit.ts +1 -1
  641. package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
  642. package/src/modules/primitives/command/deactivateCategory.ts +1 -1
  643. package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
  644. package/src/modules/primitives/command/deactivateCurrency.ts +1 -1
  645. package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
  646. package/src/modules/primitives/command/deactivateUnit.ts +1 -1
  647. package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
  648. package/src/modules/primitives/command/setBaseCurrency.test.ts +8 -64
  649. package/src/modules/primitives/command/setBaseCurrency.ts +6 -64
  650. package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
  651. package/src/modules/primitives/command/setReferenceUnit.ts +1 -1
  652. package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -1
  653. package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -1
  654. package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -1
  655. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +2 -2
  656. package/src/modules/primitives/docs/commands/CreateUnit.md +1 -1
  657. package/src/modules/primitives/docs/commands/DeactivateCategory.md +1 -1
  658. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +1 -1
  659. package/src/modules/primitives/docs/commands/DeactivateUnit.md +1 -1
  660. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +13 -23
  661. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +1 -1
  662. package/src/modules/primitives/docs/features/currency-definitions.md +13 -14
  663. package/src/modules/primitives/docs/models/Currency.md +3 -4
  664. package/src/modules/primitives/docs/queries/ConvertAmount.md +2 -2
  665. package/src/modules/primitives/docs/queries/ConvertQuantity.md +2 -2
  666. package/src/modules/primitives/lib/errors.generated.ts +6 -1
  667. package/src/modules/primitives/lib/permissions.generated.ts +1 -1
  668. package/src/modules/primitives/lib/types.ts +6 -1
  669. package/src/modules/primitives/module.ts +1 -1
  670. package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
  671. package/src/modules/primitives/query/convertAmount.test.ts +1 -1
  672. package/src/modules/primitives/query/convertAmount.ts +1 -1
  673. package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
  674. package/src/modules/primitives/query/convertQuantity.test.ts +1 -1
  675. package/src/modules/primitives/query/convertQuantity.ts +1 -1
  676. package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
  677. package/src/modules/primitives/query/getBaseCurrency.test.ts +1 -1
  678. package/src/modules/primitives/query/getBaseCurrency.ts +1 -1
  679. package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
  680. package/src/modules/primitives/query/getCurrency.ts +1 -1
  681. package/src/modules/primitives/query/getUnit.generated.ts +1 -1
  682. package/src/modules/primitives/query/getUnit.ts +1 -1
  683. package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
  684. package/src/modules/primitives/query/getUoMCategory.ts +1 -1
  685. package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
  686. package/src/modules/primitives/query/listUnitsByCategory.ts +2 -2
  687. package/src/modules/product-management/README.md +1 -1
  688. package/src/modules/product-management/command/activateProduct.generated.ts +1 -1
  689. package/src/modules/product-management/command/activateProduct.ts +1 -1
  690. package/src/modules/product-management/command/assignProductToCategory.generated.ts +1 -1
  691. package/src/modules/product-management/command/assignProductToCategory.ts +1 -1
  692. package/src/modules/product-management/command/createProduct.generated.ts +1 -1
  693. package/src/modules/product-management/command/createProduct.test.ts +1 -1
  694. package/src/modules/product-management/command/createProduct.ts +1 -1
  695. package/src/modules/product-management/command/createProductAttribute.generated.ts +1 -1
  696. package/src/modules/product-management/command/createProductAttribute.ts +1 -1
  697. package/src/modules/product-management/command/createProductAttributeValue.generated.ts +1 -1
  698. package/src/modules/product-management/command/createProductAttributeValue.ts +1 -1
  699. package/src/modules/product-management/command/createProductCategory.generated.ts +1 -1
  700. package/src/modules/product-management/command/createProductCategory.test.ts +1 -1
  701. package/src/modules/product-management/command/createProductCategory.ts +1 -1
  702. package/src/modules/product-management/command/deactivateProduct.generated.ts +1 -1
  703. package/src/modules/product-management/command/deactivateProduct.ts +1 -1
  704. package/src/modules/product-management/command/deleteProduct.generated.ts +1 -1
  705. package/src/modules/product-management/command/deleteProduct.ts +1 -1
  706. package/src/modules/product-management/command/deleteProductAttribute.generated.ts +1 -1
  707. package/src/modules/product-management/command/deleteProductAttribute.ts +1 -1
  708. package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +1 -1
  709. package/src/modules/product-management/command/deleteProductAttributeValue.ts +1 -1
  710. package/src/modules/product-management/command/deleteProductCategory.generated.ts +1 -1
  711. package/src/modules/product-management/command/deleteProductCategory.ts +1 -1
  712. package/src/modules/product-management/command/generateVariants.generated.ts +1 -1
  713. package/src/modules/product-management/command/generateVariants.test.ts +1 -1
  714. package/src/modules/product-management/command/generateVariants.ts +1 -1
  715. package/src/modules/product-management/command/moveProductCategory.generated.ts +1 -1
  716. package/src/modules/product-management/command/moveProductCategory.test.ts +1 -1
  717. package/src/modules/product-management/command/moveProductCategory.ts +1 -1
  718. package/src/modules/product-management/command/reactivateProduct.generated.ts +1 -1
  719. package/src/modules/product-management/command/reactivateProduct.ts +1 -1
  720. package/src/modules/product-management/command/removeProductFromCategory.generated.ts +1 -1
  721. package/src/modules/product-management/command/removeProductFromCategory.ts +1 -1
  722. package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +1 -1
  723. package/src/modules/product-management/command/setProductAttributeAssignment.ts +1 -1
  724. package/src/modules/product-management/command/updateProduct.generated.ts +1 -1
  725. package/src/modules/product-management/command/updateProduct.test.ts +1 -1
  726. package/src/modules/product-management/command/updateProduct.ts +1 -1
  727. package/src/modules/product-management/command/updateProductAttribute.generated.ts +1 -1
  728. package/src/modules/product-management/command/updateProductAttribute.ts +1 -1
  729. package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +1 -1
  730. package/src/modules/product-management/command/updateProductAttributeValue.ts +1 -1
  731. package/src/modules/product-management/command/updateProductCategory.generated.ts +1 -1
  732. package/src/modules/product-management/command/updateProductCategory.ts +1 -1
  733. package/src/modules/product-management/lib/errors.generated.ts +1 -1
  734. package/src/modules/product-management/lib/permissions.generated.ts +1 -1
  735. package/src/modules/product-management/lib/types.ts +6 -1
  736. package/src/modules/product-management/module.ts +1 -1
  737. package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +1 -1
  738. package/src/modules/product-management/query/calculateCategoryDepth.ts +1 -1
  739. package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +1 -1
  740. package/src/modules/product-management/query/detectCategoryCircularReference.ts +1 -1
  741. package/src/modules/product-management/query/getProduct.generated.ts +1 -1
  742. package/src/modules/product-management/query/getProduct.ts +1 -1
  743. package/src/modules/product-management/query/getProductAttribute.generated.ts +1 -1
  744. package/src/modules/product-management/query/getProductAttribute.ts +1 -1
  745. package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +1 -1
  746. package/src/modules/product-management/query/getProductAttributeAssignment.ts +1 -1
  747. package/src/modules/product-management/query/getProductAttributeValue.generated.ts +1 -1
  748. package/src/modules/product-management/query/getProductAttributeValue.ts +1 -1
  749. package/src/modules/product-management/query/getProductCategory.generated.ts +1 -1
  750. package/src/modules/product-management/query/getProductCategory.ts +1 -1
  751. package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +1 -1
  752. package/src/modules/product-management/query/getProductCategoryAssignment.ts +1 -1
  753. package/src/modules/product-management/query/getProductVariant.generated.ts +1 -1
  754. package/src/modules/product-management/query/getProductVariant.ts +1 -1
  755. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +1 -1
  756. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +1 -1
  757. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +1 -1
  758. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +1 -1
  759. package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +1 -1
  760. package/src/modules/product-management/query/listProductAttributeAssignments.ts +1 -1
  761. package/src/modules/product-management/query/listProductAttributeValues.generated.ts +1 -1
  762. package/src/modules/product-management/query/listProductAttributeValues.ts +1 -1
  763. package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +1 -1
  764. package/src/modules/product-management/query/listProductCategoryAssignments.ts +1 -1
  765. package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +1 -1
  766. package/src/modules/product-management/query/listProductCategoryChildren.ts +1 -1
  767. package/src/modules/product-management/query/listProductVariants.generated.ts +1 -1
  768. package/src/modules/product-management/query/listProductVariants.ts +1 -1
  769. package/src/modules/user-management/command/activateUser.generated.ts +1 -1
  770. package/src/modules/user-management/command/activateUser.ts +1 -1
  771. package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
  772. package/src/modules/user-management/command/assignPermissionToRole.ts +1 -1
  773. package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
  774. package/src/modules/user-management/command/assignRoleToUser.ts +1 -1
  775. package/src/modules/user-management/command/createPermission.generated.ts +1 -1
  776. package/src/modules/user-management/command/createPermission.ts +1 -1
  777. package/src/modules/user-management/command/createRole.generated.ts +1 -1
  778. package/src/modules/user-management/command/createRole.ts +1 -1
  779. package/src/modules/user-management/command/createUser.generated.ts +1 -1
  780. package/src/modules/user-management/command/createUser.ts +1 -1
  781. package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
  782. package/src/modules/user-management/command/deactivateUser.ts +1 -1
  783. package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
  784. package/src/modules/user-management/command/reactivateUser.ts +1 -1
  785. package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
  786. package/src/modules/user-management/command/revokePermissionFromRole.ts +1 -1
  787. package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
  788. package/src/modules/user-management/command/revokeRoleFromUser.ts +1 -1
  789. package/src/modules/user-management/docs/commands/CreatePermission.md +3 -3
  790. package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
  791. package/src/modules/user-management/docs/queries/ListRolePermissionsByRole.md +39 -0
  792. package/src/modules/user-management/docs/queries/ListUserRolesByUser.md +39 -0
  793. package/src/modules/user-management/generated/enums.ts +0 -15
  794. package/src/modules/user-management/generated/kysely-tailordb.ts +0 -11
  795. package/src/modules/user-management/lib/errors.generated.ts +1 -1
  796. package/src/modules/user-management/lib/permissions.generated.ts +1 -1
  797. package/src/modules/user-management/lib/types.ts +6 -1
  798. package/src/modules/user-management/module.ts +1 -1
  799. package/src/shared/createContext.ts +2 -1
  800. package/src/shared/defineQuery.ts +36 -1
  801. package/src/shared/requirePermission.ts +3 -3
  802. package/src/shared/types.ts +3 -0
  803. package/templates/scaffold/app/backend/package.json +4 -3
  804. package/templates/scaffold/app/frontend/eslint.config.js +12 -0
  805. package/templates/scaffold/app/frontend/package.json +10 -7
  806. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +30 -0
  807. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +3 -2
  808. package/templates/scaffold/app/frontend/vite.config.ts +5 -5
  809. package/templates/scaffold/module/lib/types.ts +6 -1
  810. package/templates/scaffold/module/permissions.ts +1 -1
  811. package/src/commands/module/list.test.ts +0 -57
  812. package/src/commands/module/list.ts +0 -64
  813. package/templates/scaffold/module/lib/errors.ts +0 -1
  814. /package/src/modules/{accounting → audit/db}/.gitkeep +0 -0
  815. /package/src/modules/audit/{.gitkeep → executor/.gitkeep} +0 -0
  816. /package/src/modules/{coa-management → business-partner}/.gitkeep +0 -0
  817. /package/src/modules/{supplier-management → business-partner/command}/.gitkeep +0 -0
@@ -0,0 +1,45 @@
1
+ # PolicyFieldRule
2
+
3
+ ## Description
4
+
5
+ PolicyFieldRule defines how a specific field is handled during audit capture for a parent AuditPolicy. Each rule specifies a fieldName and a sensitivityMode that controls how the field's value is stored in ChangeDetail records. Sensitivity modes include CAPTURE (store raw value, default), MASK (store masked representation), HASH (store one-way hash), and EXCLUDE (record that the field changed but store null for both values). Field names must be a subset of the target entity's registered auditableFields.
6
+
7
+ Examples: "socialSecurityNumber with EXCLUDE mode", "salary with MASK mode", "amount with CAPTURE mode (default)".
8
+
9
+ ## Domain Model Definitions
10
+
11
+ ### Model type
12
+
13
+ Standard
14
+
15
+ ### Command Definitions
16
+
17
+ - [createAuditPolicy](../commands/CreateAuditPolicy.md) - PolicyFieldRules are created as part of audit policy creation
18
+ - [updateAuditPolicy](../commands/UpdateAuditPolicy.md) - PolicyFieldRules are modified as part of audit policy updates
19
+
20
+ ### Query Definitions
21
+
22
+ - [getAuditPolicy](../queries/GetAuditPolicy.md) - PolicyFieldRules are returned as part of audit policy retrieval
23
+ - [listAuditPolicies](../queries/ListAuditPolicies.md) - PolicyFieldRules are returned as part of audit policy listing
24
+
25
+ ### Models
26
+
27
+ - PolicyFieldRule
28
+
29
+ ### Invariants
30
+
31
+ - Each PolicyFieldRule belongs to exactly one AuditPolicy via auditPolicyId
32
+ - fieldName is required and must be non-empty
33
+ - fieldName must be a member of the target entity's registered auditableFields
34
+ - Duplicate fieldNames within the same AuditPolicy are rejected
35
+ - sensitivityMode must be one of CAPTURE, MASK, HASH, or EXCLUDE; defaults to CAPTURE if not specified
36
+ - When sensitivityMode is MASK, the stored value replaces all but the last 4 characters with asterisks (or stores "***" if the value is 4 characters or fewer)
37
+ - When sensitivityMode is HASH, the stored value is a one-way hash of the original value
38
+ - When sensitivityMode is EXCLUDE, ChangeDetail records store null for both oldValue and newValue
39
+ - Sensitivity modes are enforced at write time — once an audit entry is persisted, the original raw value cannot be recovered from MASK, HASH, or EXCLUDE entries
40
+ - Binary / BLOB fields are not eligible for policy field rules and cannot be added as a fieldName
41
+
42
+ ### Relationships
43
+
44
+ - **Belongs To AuditPolicy**: Each PolicyFieldRule is linked to exactly one AuditPolicy via auditPolicyId
45
+ - **Validated Against AuditableEntity**: fieldName must be a member of the target entity's registered auditableFields
@@ -0,0 +1,49 @@
1
+ # GetAuditEntry
2
+
3
+ ## Overview
4
+
5
+ GetAuditEntry retrieves a single audit entry by its unique identifier. Returns the full AuditEntry record including eventId, actor identity, entity reference, operation type, timestamp, and scope, or null if no matching entry exists.
6
+
7
+ This query requires the `viewAuditHistory` permission at the appropriate scope.
8
+
9
+ ## Business Rules
10
+
11
+ - Lookup by `id` performs an exact UUID match
12
+ - Returns the full AuditEntry record including all fields
13
+ - Returns null when no matching entry is found
14
+ - Caller must hold `viewAuditHistory` permission at the appropriate scope
15
+ - A caller with company-scoped permission can only retrieve entries for their assigned companies
16
+ - A caller with global-scoped permission can retrieve global (company-unscoped) entries
17
+
18
+ ## Process Flow
19
+
20
+ ```mermaid
21
+ flowchart TD
22
+ A[Receive lookup request] --> B{Caller has viewAuditHistory?}
23
+ B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
24
+ B -->|Yes| D[Query AuditEntry by id]
25
+ D --> E{Found?}
26
+ E -->|Yes| F{Caller authorized for entry's scope?}
27
+ F -->|No| G[Return error: UNAUTHORIZED]
28
+ F -->|Yes| H[Return audit entry]
29
+ E -->|No| I[Return null]
30
+ ```
31
+
32
+ ## External Dependencies
33
+
34
+ - None
35
+
36
+ ## Error Scenarios
37
+
38
+ - **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditHistory` permission
39
+ - **UNAUTHORIZED**: Caller's permission scope does not cover the requested entry's scope
40
+
41
+ ## Test Cases
42
+
43
+ - returns audit entry when found by id
44
+ - returns null when audit entry not found
45
+ - returns entry with all fields populated
46
+ - returns company-scoped entry when caller has matching company permission
47
+ - returns global entry when caller has global-scoped permission
48
+ - rejects when caller lacks viewAuditHistory permission
49
+ - rejects when caller lacks permission for entry's company scope
@@ -0,0 +1,54 @@
1
+ # GetAuditPolicy
2
+
3
+ ## Overview
4
+
5
+ GetAuditPolicy retrieves a single audit policy by its unique identifier. Returns the full AuditPolicy record including status, entity name, operation type, company scope, and associated PolicyFieldRule records, or null if no matching policy exists.
6
+
7
+ This query requires the `manageAuditPolicies` permission at the appropriate scope.
8
+
9
+ ## Business Rules
10
+
11
+ - Lookup by `id` performs an exact UUID match
12
+ - Returns the full AuditPolicy record including associated PolicyFieldRules
13
+ - Does not filter by status — returns DRAFT, ACTIVE, and INACTIVE policies
14
+ - Returns null when no matching policy is found
15
+ - Caller must hold `manageAuditPolicies` permission at the appropriate scope
16
+ - A caller with company-scoped `manageAuditPolicies` can only retrieve policies for their assigned companies
17
+ - A caller with global-scoped `manageAuditPolicies` can only retrieve global policies
18
+
19
+ ## Process Flow
20
+
21
+ ```mermaid
22
+ flowchart TD
23
+ A[Receive lookup request] --> B{Caller has manageAuditPolicies?}
24
+ B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
25
+ B -->|Yes| D[Query AuditPolicy by id]
26
+ D --> E{Found?}
27
+ E -->|Yes| F{Caller authorized for policy's scope?}
28
+ F -->|No| G[Return error: UNAUTHORIZED]
29
+ F -->|Yes| H[Load associated PolicyFieldRules]
30
+ H --> I[Return policy with field rules]
31
+ E -->|No| J[Return null]
32
+ ```
33
+
34
+ ## External Dependencies
35
+
36
+ - None
37
+
38
+ ## Error Scenarios
39
+
40
+ - **INSUFFICIENT_PERMISSION**: Caller lacks `manageAuditPolicies` permission
41
+ - **UNAUTHORIZED**: Caller's permission scope does not cover the policy's scope
42
+
43
+ ## Test Cases
44
+
45
+ - returns audit policy when found by id
46
+ - returns null when audit policy not found
47
+ - returns DRAFT policy
48
+ - returns ACTIVE policy
49
+ - returns INACTIVE policy
50
+ - includes associated PolicyFieldRules in response
51
+ - rejects when caller lacks manageAuditPolicies permission
52
+ - rejects when caller lacks permission for policy's company scope
53
+ - returns global policy when caller has global-scoped permission
54
+ - rejects when global-scoped caller retrieves company-scoped policy
@@ -0,0 +1,84 @@
1
+ # GetAuditSummary
2
+
3
+ ## Overview
4
+
5
+ GetAuditSummary returns aggregated audit statistics without exposing field-level change details. It provides counts of audit entries grouped by configurable dimensions such as entityType, operationType, actorType, and time period. This query is designed for compliance dashboards and operational oversight where administrators need a high-level view of audit activity without access to sensitive before/after field values.
6
+
7
+ This query requires the `viewAuditSummary` permission at the appropriate scope — a lower-privilege alternative to `viewAuditHistory` which grants access to full audit entry details.
8
+
9
+ ## Business Rules
10
+
11
+ - Caller must hold `viewAuditSummary` permission at the appropriate scope
12
+ - A caller with company-scoped `viewAuditSummary` can only retrieve summaries for their assigned companies
13
+ - A caller with global-scoped `viewAuditSummary` can retrieve summaries for global (company-unscoped) entries
14
+ - At least one grouping dimension must be specified (entityType, operationType, actorType, or timePeriod)
15
+ - Optional filters: entityType, operationType, actorType, companyId, date range
16
+ - An optional `scope` parameter accepts COMPANY, GLOBAL, or ALL to control which entries are summarized
17
+ - When `scope` is COMPANY (or companyId is provided without explicit scope), returns summary counts scoped to that company only; companyId is required in this case
18
+ - When `scope` is GLOBAL (or companyId is omitted without explicit scope), returns summary counts for global entries only
19
+ - When `scope` is ALL, returns combined summary counts for all scopes the caller is authorized for; if companyId is also provided, it acts as an additional filter within the combined results
20
+ - When both company and global scope are requested via `scope=ALL`, the caller must hold `viewAuditSummary` at each scope they wish to see — unauthorized scopes are silently excluded from the result
21
+ - Response contains only aggregate counts — no eventId, entityId, actorId, change details, or other entry-level data is returned
22
+ - Time period grouping supports DAY, WEEK, and MONTH granularities
23
+
24
+ ## Process Flow
25
+
26
+ ```mermaid
27
+ flowchart TD
28
+ A[Receive summary request] --> B{Caller has viewAuditSummary?}
29
+ B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
30
+ B -->|Yes| D{At least one grouping dimension?}
31
+ D -->|No| E[Return error: VALIDATION_ERROR]
32
+ D -->|Yes| F[Apply scope and filter criteria]
33
+ F --> G{Determine scope}
34
+ G -->|scope=COMPANY or companyId provided| H[Scope to company entries]
35
+ G -->|scope=GLOBAL or no companyId| I[Scope to global entries]
36
+ G -->|scope=ALL| I2[Combine company + global entries\nfor scopes caller is authorized for]
37
+ H --> J[Aggregate counts by grouping dimensions]
38
+ I --> J
39
+ I2 --> J
40
+ J --> K[Return summary results]
41
+ ```
42
+
43
+ ## External Dependencies
44
+
45
+ - None
46
+
47
+ ## Error Scenarios
48
+
49
+ - **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditSummary` permission
50
+ - **UNAUTHORIZED**: Caller's permission scope does not cover the requested company scope
51
+ - **VALIDATION_ERROR**: No grouping dimension specified (at least one of entityType, operationType, actorType, or timePeriod is required)
52
+ - **VALIDATION_ERROR**: `scope` is COMPANY but no companyId is provided
53
+ - **INVALID_SCOPE**: `scope` is not one of COMPANY, GLOBAL, or ALL
54
+
55
+ ## Test Cases
56
+
57
+ - returns entry counts grouped by entityType
58
+ - returns entry counts grouped by operationType
59
+ - returns entry counts grouped by actorType
60
+ - returns entry counts grouped by time period (DAY)
61
+ - returns entry counts grouped by time period (WEEK)
62
+ - returns entry counts grouped by time period (MONTH)
63
+ - combines multiple grouping dimensions
64
+ - filters by entityType before aggregation
65
+ - filters by operationType before aggregation
66
+ - filters by date range before aggregation
67
+ - filters by companyId returning only company-scoped counts
68
+ - returns global entry counts when companyId is omitted
69
+ - returns combined company and global counts when scope is ALL
70
+ - restricts combined results to scopes the caller is authorized for
71
+ - returns only company counts in combined scope when caller lacks global permission
72
+ - returns only global counts in combined scope when caller lacks company permission
73
+ - filters combined scope results by companyId when both scope=ALL and companyId are provided
74
+ - rejects scope=COMPANY when companyId is not provided
75
+ - rejects invalid scope value
76
+ - returns zero counts when no entries match filters
77
+ - rejects when no grouping dimension is specified
78
+ - rejects when caller lacks viewAuditSummary permission
79
+ - rejects when caller lacks permission for requested company scope
80
+ - restricts company-scoped caller to their company even when scope=GLOBAL
81
+ - restricts company-scoped caller to their company even when scope=ALL
82
+ - restricts global-scoped caller to global entries even when scope=COMPANY
83
+ - restricts global-scoped caller to global entries even when scope=ALL
84
+ - does not expose field-level change details in response
@@ -0,0 +1,56 @@
1
+ # GetChangeDetails
2
+
3
+ ## Overview
4
+
5
+ GetChangeDetails retrieves all field-level change detail records linked to a specific audit entry. Returns a list of ChangeDetail records containing the fieldName, oldValue, and newValue for each field that changed, enabling precise before/after comparison at the field level.
6
+
7
+ This query requires the `viewAuditHistory` permission at the appropriate scope.
8
+
9
+ ## Business Rules
10
+
11
+ - Lookup by `auditEntryId` returns all ChangeDetail records for that audit entry
12
+ - Returns an empty list if the audit entry has no change details
13
+ - Returns an error if the referenced audit entry does not exist
14
+ - Authorization is checked against the parent AuditEntry's scope: if the entry is company-scoped, the caller must hold `viewAuditHistory` for that company; if the entry is global, the caller must hold global-scoped `viewAuditHistory`
15
+ - A caller with company-scoped permission can only retrieve change details for entries belonging to their assigned companies
16
+ - A caller with global-scoped permission can retrieve change details for global (company-unscoped) entries
17
+ - ChangeDetail records reflect sensitivity mode processing applied at write time (values may be masked, hashed, or excluded)
18
+ - Caller must hold `viewAuditHistory` permission at the appropriate scope
19
+
20
+ ## Process Flow
21
+
22
+ ```mermaid
23
+ flowchart TD
24
+ A[Receive query request] --> B{Caller has viewAuditHistory?}
25
+ B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
26
+ B -->|Yes| D{AuditEntry exists?}
27
+ D -->|No| E[Return error: AUDIT_ENTRY_NOT_FOUND]
28
+ D -->|Yes| F{Caller authorized for entry's scope?}
29
+ F -->|No| F2[Return error: UNAUTHORIZED]
30
+ F -->|Yes| G[Query ChangeDetails by auditEntryId]
31
+ G --> H[Return list of change details]
32
+ ```
33
+
34
+ ## External Dependencies
35
+
36
+ - None
37
+
38
+ ## Error Scenarios
39
+
40
+ - **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditHistory` permission
41
+ - **UNAUTHORIZED**: Caller's permission scope does not cover the entry's scope
42
+ - **AUDIT_ENTRY_NOT_FOUND**: Referenced audit entry does not exist
43
+
44
+ ## Test Cases
45
+
46
+ - returns all change details for an audit entry
47
+ - returns empty list when audit entry has no change details
48
+ - returns change details with masked values for MASK sensitivity mode
49
+ - returns change details with hashed values for HASH sensitivity mode
50
+ - returns change details with null values for EXCLUDE sensitivity mode
51
+ - returns change details with raw values for CAPTURE sensitivity mode
52
+ - returns change details for company-scoped entry when caller has matching company permission
53
+ - returns change details for global entry when caller has global-scoped permission
54
+ - rejects when caller lacks permission for entry's company scope
55
+ - returns error when audit entry does not exist
56
+ - rejects when caller lacks viewAuditHistory permission
@@ -0,0 +1,58 @@
1
+ # ListAuditPolicies
2
+
3
+ ## Overview
4
+
5
+ ListAuditPolicies retrieves a list of audit policies with optional filters by entity name, status, company scope, and operation type. Returns policies with their associated PolicyFieldRule records. This query supports administrative views for managing audit configurations across entities and companies.
6
+
7
+ This query requires the `manageAuditPolicies` permission at the appropriate scope.
8
+
9
+ ## Business Rules
10
+
11
+ - All filter parameters are optional
12
+ - Filtering by entityName returns only policies targeting that entity
13
+ - Filtering by status returns only policies in the specified status (DRAFT, ACTIVE, INACTIVE)
14
+ - Filtering by companyId returns only policies scoped to that company
15
+ - Filtering by companyId explicitly set to null returns only global policies (companyId = null)
16
+ - Omitting the companyId filter entirely returns policies of all scopes (global and company-scoped), subject to the caller's permission scope
17
+ - Filtering by operationType returns only policies for that operation
18
+ - Caller must hold `manageAuditPolicies` permission at the appropriate scope
19
+ - A caller with company-scoped `manageAuditPolicies` can only retrieve policies for their assigned companies
20
+ - A caller with global-scoped `manageAuditPolicies` can only retrieve global policies
21
+
22
+ ## Process Flow
23
+
24
+ ```mermaid
25
+ flowchart TD
26
+ A[Receive list request] --> B{Caller has manageAuditPolicies?}
27
+ B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
28
+ B -->|Yes| D[Build query from filter criteria]
29
+ D --> E[Apply scope restrictions based on caller's permissions]
30
+ E --> F[Load matching policies with PolicyFieldRules]
31
+ F --> G[Return list of policies]
32
+ ```
33
+
34
+ ## External Dependencies
35
+
36
+ - None
37
+
38
+ ## Error Scenarios
39
+
40
+ - **INSUFFICIENT_PERMISSION**: Caller lacks `manageAuditPolicies` permission
41
+ - **UNAUTHORIZED**: Caller's permission scope does not cover the requested scope
42
+
43
+ ## Test Cases
44
+
45
+ - returns all policies when no filters applied
46
+ - returns policies filtered by entityName
47
+ - returns policies filtered by status
48
+ - returns policies filtered by companyId
49
+ - returns only global policies when companyId filter is explicitly null
50
+ - returns policies filtered by operationType
51
+ - combines multiple filter criteria
52
+ - returns policy objects with expected fields
53
+ - returns empty list when no policies match
54
+ - paginates results correctly
55
+ - rejects when caller lacks manageAuditPolicies permission
56
+ - rejects when caller with company-scoped permission requests policies for a different company
57
+ - returns only global policies when caller has global-scoped permission
58
+ - rejects when global-scoped caller requests company-scoped policies
@@ -0,0 +1,91 @@
1
+ # SearchAuditEntries
2
+
3
+ ## Overview
4
+
5
+ SearchAuditEntries searches and filters audit entries using multiple criteria: actor identity (actorType, actorId), entity reference (entityType, entityId), operation type, date range, company scope, and correlationId. Results are returned in chronological order by default and support pagination for efficient retrieval of large result sets.
6
+
7
+ This query requires the `viewAuditHistory` permission at the appropriate scope.
8
+
9
+ ## Business Rules
10
+
11
+ - All filter parameters are optional; at least one must be provided
12
+ - Querying by actorId returns only entries for that actor
13
+ - Querying by entityType and entityId returns the full change history for a specific record
14
+ - Querying by operationType filters entries to only the specified operation
15
+ - Querying by date range returns only entries whose timestamp falls within the range
16
+ - An optional `scope` parameter accepts COMPANY, GLOBAL, or ALL to control which entries are returned
17
+ - When `scope` is COMPANY (or companyId is provided without explicit scope), returns only entries scoped to that company; companyId is required in this case
18
+ - When `scope` is GLOBAL (or companyId is omitted without explicit scope), returns only global (company-unscoped) entries
19
+ - When `scope` is ALL, returns combined results for all scopes the caller is authorized for; if companyId is also provided, it acts as an additional filter within the combined results
20
+ - When `scope` is ALL, the caller must hold `viewAuditHistory` at each scope they wish to see — unauthorized scopes are silently excluded from the result
21
+ - An invalid `scope` value is rejected with INVALID_SCOPE
22
+ - `scope` is COMPANY but no companyId is provided is rejected with VALIDATION_ERROR
23
+ - Results are returned in chronological order by default
24
+ - Large result sets support pagination
25
+ - Caller must hold `viewAuditHistory` permission at the appropriate scope
26
+ - A caller with company-scoped permission can only retrieve entries for their assigned companies
27
+
28
+ ## Process Flow
29
+
30
+ ```mermaid
31
+ flowchart TD
32
+ A[Receive search request] --> B{Caller has viewAuditHistory?}
33
+ B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
34
+ B -->|Yes| D[Build query from filter criteria]
35
+ D --> D2{At least one filter provided?}
36
+ D2 -->|No| D3[Return error: VALIDATION_ERROR]
37
+ D2 -->|Yes| E{Determine scope}
38
+ E -->|scope=COMPANY or companyId provided| F[Scope to company entries]
39
+ E -->|scope=GLOBAL or no companyId| G[Scope to global entries]
40
+ E -->|scope=ALL| G2[Combine company + global entries\nfor scopes caller is authorized for]
41
+ F --> H[Apply remaining filters]
42
+ G --> H
43
+ G2 --> H
44
+ H --> I[Order by timestamp ascending]
45
+ I --> J[Apply pagination]
46
+ J --> K[Return paginated results]
47
+ ```
48
+
49
+ ## External Dependencies
50
+
51
+ - None
52
+
53
+ ## Error Scenarios
54
+
55
+ - **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditHistory` permission
56
+ - **UNAUTHORIZED**: Caller's permission scope does not cover the requested company scope
57
+ - **VALIDATION_ERROR**: No filter parameters provided (at least one is required)
58
+ - **VALIDATION_ERROR**: `scope` is COMPANY but no companyId is provided
59
+ - **INVALID_SCOPE**: `scope` is not one of COMPANY, GLOBAL, or ALL
60
+
61
+ ## Test Cases
62
+
63
+ - returns entries filtered by actorId
64
+ - returns entries filtered by actorType and actorId
65
+ - returns entries filtered by entityType
66
+ - returns entries filtered by entityType and entityId
67
+ - returns entries filtered by operationType
68
+ - returns entries filtered by date range
69
+ - returns entries filtered by companyId
70
+ - returns global entries when companyId is omitted
71
+ - returns only company entries when scope is COMPANY
72
+ - returns only global entries when scope is GLOBAL
73
+ - returns combined company and global entries when scope is ALL
74
+ - restricts combined results to scopes the caller is authorized for when scope is ALL
75
+ - returns only company entries in combined scope when caller lacks global permission
76
+ - returns only global entries in combined scope when caller lacks company permission
77
+ - filters combined scope results by companyId when both scope=ALL and companyId are provided
78
+ - rejects scope=COMPANY when companyId is not provided
79
+ - rejects invalid scope value
80
+ - returns entries filtered by correlationId
81
+ - combines multiple filter criteria
82
+ - returns results in chronological order
83
+ - paginates large result sets
84
+ - returns empty list when no entries match
85
+ - rejects when no filter parameters are provided
86
+ - rejects when caller lacks viewAuditHistory permission
87
+ - rejects when caller lacks permission for requested company scope
88
+ - restricts company-scoped caller to their company even when scope=GLOBAL
89
+ - restricts company-scoped caller to their company even when scope=ALL
90
+ - restricts global-scoped caller to global entries even when scope=COMPANY
91
+ - restricts global-scoped caller to global entries even when scope=ALL
@@ -0,0 +1,92 @@
1
+ import {
2
+ createGetDB,
3
+ type Generated,
4
+ type Timestamp,
5
+ type NamespaceDB,
6
+ type NamespaceInsertable,
7
+ type NamespaceSelectable,
8
+ type NamespaceTable,
9
+ type NamespaceTableName,
10
+ type NamespaceTransaction,
11
+ type NamespaceUpdateable,
12
+ } from "@tailor-platform/sdk/kysely";
13
+
14
+ export interface Namespace {
15
+ "main-db": {
16
+ AuditEntry: {
17
+ id: Generated<string>;
18
+ eventId: string;
19
+ actorType: string;
20
+ actorId: string;
21
+ entityType: string;
22
+ entityId: string;
23
+ operationType: string;
24
+ companyId: string | null;
25
+ correlationId: string | null;
26
+ ipAddress: string | null;
27
+ userAgent: string | null;
28
+ sessionId: string | null;
29
+ requestId: string | null;
30
+ onBehalfOf: string | null;
31
+ timestamp: Timestamp;
32
+ createdAt: Generated<Timestamp>;
33
+ updatedAt: Timestamp | null;
34
+ }
35
+
36
+ AuditPolicy: {
37
+ id: Generated<string>;
38
+ entityName: string;
39
+ companyId: string | null;
40
+ operationType: string;
41
+ status: string;
42
+ createdAt: Generated<Timestamp>;
43
+ updatedAt: Timestamp | null;
44
+ }
45
+
46
+ AuditableEntity: {
47
+ id: Generated<string>;
48
+ entityName: string;
49
+ entityScope: string;
50
+ auditableFields: string;
51
+ createdAt: Generated<Timestamp>;
52
+ updatedAt: Timestamp | null;
53
+ }
54
+
55
+ ChangeDetail: {
56
+ id: Generated<string>;
57
+ auditEntryId: string;
58
+ fieldName: string;
59
+ oldValue: string | null;
60
+ newValue: string | null;
61
+ createdAt: Generated<Timestamp>;
62
+ updatedAt: Timestamp | null;
63
+ }
64
+
65
+ PolicyFieldRule: {
66
+ id: Generated<string>;
67
+ auditPolicyId: string;
68
+ fieldName: string;
69
+ sensitivityMode: string;
70
+ createdAt: Generated<Timestamp>;
71
+ updatedAt: Timestamp | null;
72
+ }
73
+
74
+ Company: {
75
+ id: Generated<string>;
76
+ }
77
+ }
78
+ }
79
+
80
+ export const getDB = createGetDB<Namespace>();
81
+
82
+ export type DB<N extends keyof Namespace = keyof Namespace> = NamespaceDB<Namespace, N>;
83
+
84
+ export type Transaction<K extends keyof Namespace | DB = keyof Namespace> =
85
+ NamespaceTransaction<Namespace, K>;
86
+
87
+ type TableName = NamespaceTableName<Namespace>;
88
+ export type Table<T extends TableName> = NamespaceTable<Namespace, T>;
89
+
90
+ export type Insertable<T extends TableName> = NamespaceInsertable<Namespace, T>;
91
+ export type Selectable<T extends TableName> = NamespaceSelectable<Namespace, T>;
92
+ export type Updateable<T extends TableName> = NamespaceUpdateable<Namespace, T>;
@@ -0,0 +1,2 @@
1
+ export { defineModule, type DefineModuleParams } from "./module";
2
+ export { permissions, own, all, aliases } from "./permissions";
@@ -0,0 +1,13 @@
1
+ // Stub types for cross-module dependencies — used only for codegen.
2
+ // At runtime, actual types are injected via defineModule() params.
3
+ // TODO: Replace with SDK-level externalTypes support when available.
4
+ import {
5
+ db,
6
+ unsafeAllowAllGqlPermission,
7
+ unsafeAllowAllTypePermission,
8
+ } from "@tailor-platform/sdk";
9
+
10
+ export const company = db
11
+ .type("Company", {})
12
+ .permission(unsafeAllowAllTypePermission)
13
+ .gqlPermission(unsafeAllowAllGqlPermission);
@@ -0,0 +1,120 @@
1
+ // @generated — do not edit
2
+ import { createDomainError } from "@tailor-platform/erp-kit/module";
3
+
4
+ // Note: Permission checks use the shared InsufficientPermissionError from defineCommand,
5
+ // not a module-specific variant. See shared/errors.ts and shared/defineCommand.ts.
6
+
7
+ export const UnauthorizedError = createDomainError(
8
+ "UnauthorizedError", "AUDIT_UNAUTHORIZED",
9
+ (identifier: string) => `Caller's permission scope does not cover this policy (e.g., company-scoped caller managing a different company's policy, or global-scoped caller managing a company-scoped policy): ${identifier}`,
10
+ );
11
+
12
+ export const PolicyNotFoundError = createDomainError(
13
+ "PolicyNotFoundError", "AUDIT_POLICY_NOT_FOUND",
14
+ (identifier: string) => `Specified policy ID does not exist: ${identifier}`,
15
+ );
16
+
17
+ export const InvalidStateError = createDomainError(
18
+ "InvalidStateError", "AUDIT_INVALID_STATE",
19
+ (identifier: string) => `Policy is not in the required status for this operation: ${identifier}`,
20
+ );
21
+
22
+ export const IncompletePolicyError = createDomainError(
23
+ "IncompletePolicyError", "AUDIT_INCOMPLETE_POLICY",
24
+ (identifier: string) => `Policy is missing entity name or operation type: ${identifier}`,
25
+ );
26
+
27
+ export const EntityTypeNotRegisteredError = createDomainError(
28
+ "EntityTypeNotRegisteredError", "AUDIT_ENTITY_TYPE_NOT_REGISTERED",
29
+ (identifier: string) => `The target entity name does not reference a currently registered auditable entity: ${identifier}`,
30
+ );
31
+
32
+ export const ConflictingActivePolicyError = createDomainError(
33
+ "ConflictingActivePolicyError", "AUDIT_CONFLICTING_ACTIVE_POLICY",
34
+ (identifier: string) => `An ACTIVE policy already exists for the same (entityName, companyId, operationType); deactivate it first or use replaceAuditPolicy: ${identifier}`,
35
+ );
36
+
37
+ export const ScopeMismatchError = createDomainError(
38
+ "ScopeMismatchError", "AUDIT_SCOPE_MISMATCH",
39
+ (identifier: string) => `companyId provided for a global entity, or companyId null for a company-bound entity: ${identifier}`,
40
+ );
41
+
42
+ export const InvalidFieldNameError = createDomainError(
43
+ "InvalidFieldNameError", "AUDIT_INVALID_FIELD_NAME",
44
+ (identifier: string) => `A field name in field-level rules is empty or not in the entity's auditableFields: ${identifier}`,
45
+ );
46
+
47
+ export const DuplicateFieldNameError = createDomainError(
48
+ "DuplicateFieldNameError", "AUDIT_DUPLICATE_FIELD_NAME",
49
+ (identifier: string) => `The same field name appears more than once in field-level rules: ${identifier}`,
50
+ );
51
+
52
+ export const InvalidOperationTypeError = createDomainError(
53
+ "InvalidOperationTypeError", "AUDIT_INVALID_OPERATION_TYPE",
54
+ (identifier: string) => `operationType is missing or not one of CREATE, UPDATE, DELETE: ${identifier}`,
55
+ );
56
+
57
+ export const InvalidSensitivityModeError = createDomainError(
58
+ "InvalidSensitivityModeError", "AUDIT_INVALID_SENSITIVITY_MODE",
59
+ (identifier: string) => `sensitivityMode is not one of CAPTURE, MASK, HASH, EXCLUDE: ${identifier}`,
60
+ );
61
+
62
+ export const InvalidActorError = createDomainError(
63
+ "InvalidActorError", "AUDIT_INVALID_ACTOR",
64
+ (identifier: string) => `actorType is missing or not one of USER, SYSTEM, SERVICE; or actorId is empty: ${identifier}`,
65
+ );
66
+
67
+ export const MissingEntityIdError = createDomainError(
68
+ "MissingEntityIdError", "AUDIT_MISSING_ENTITY_ID",
69
+ (identifier: string) => `entityId is empty or not provided: ${identifier}`,
70
+ );
71
+
72
+ export const MissingEventIdError = createDomainError(
73
+ "MissingEventIdError", "AUDIT_MISSING_EVENT_ID",
74
+ (identifier: string) => `eventId is empty or not a valid UUID: ${identifier}`,
75
+ );
76
+
77
+ export const ValidationErrorError = createDomainError(
78
+ "ValidationErrorError", "AUDIT_VALIDATION_ERROR",
79
+ (identifier: string) => `CREATE or DELETE operation submitted with an empty changes array or with no auditable changes remaining after policy filtering; or correlationId provided but not a valid UUID: ${identifier}`,
80
+ );
81
+
82
+ export const InvalidEntityNameError = createDomainError(
83
+ "InvalidEntityNameError", "AUDIT_INVALID_ENTITY_NAME",
84
+ (identifier: string) => `entityName is empty or not provided: ${identifier}`,
85
+ );
86
+
87
+ export const DuplicateEntityNameError = createDomainError(
88
+ "DuplicateEntityNameError", "AUDIT_DUPLICATE_ENTITY_NAME",
89
+ (identifier: string) => `An entity with the same name is already registered: ${identifier}`,
90
+ );
91
+
92
+ export const InvalidEntityScopeError = createDomainError(
93
+ "InvalidEntityScopeError", "AUDIT_INVALID_ENTITY_SCOPE",
94
+ (identifier: string) => `entityScope is missing or not one of COMPANY_BOUND, GLOBAL: ${identifier}`,
95
+ );
96
+
97
+ export const InvalidAuditableFieldsError = createDomainError(
98
+ "InvalidAuditableFieldsError", "AUDIT_INVALID_AUDITABLE_FIELDS",
99
+ (identifier: string) => `auditableFields is empty, contains an empty field name, or contains a field with an ineligible fieldType (any type outside scalar, richtext, array, relation, file): ${identifier}`,
100
+ );
101
+
102
+ export const NoActivePolicyToReplaceError = createDomainError(
103
+ "NoActivePolicyToReplaceError", "AUDIT_NO_ACTIVE_POLICY_TO_REPLACE",
104
+ (identifier: string) => `No ACTIVE policy exists for the same entityName; use activateAuditPolicy instead: ${identifier}`,
105
+ );
106
+
107
+ export const TargetMismatchError = createDomainError(
108
+ "TargetMismatchError", "AUDIT_TARGET_MISMATCH",
109
+ (identifier: string) => `The existing ACTIVE policy does not match the replacement's companyId or operationType: ${identifier}`,
110
+ );
111
+
112
+ export const InvalidScopeError = createDomainError(
113
+ "InvalidScopeError", "AUDIT_INVALID_SCOPE",
114
+ (identifier: string) => `scope is not one of COMPANY, GLOBAL, or ALL: ${identifier}`,
115
+ );
116
+
117
+ export const AuditEntryNotFoundError = createDomainError(
118
+ "AuditEntryNotFoundError", "AUDIT_AUDIT_ENTRY_NOT_FOUND",
119
+ (identifier: string) => `Referenced audit entry does not exist: ${identifier}`,
120
+ );