@tailor-platform/erp-kit 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (639) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +193 -69
  3. package/dist/cli.mjs +1038 -398
  4. package/package.json +7 -5
  5. package/skills/erp-kit-app-1-requirements/SKILL.md +27 -17
  6. package/skills/erp-kit-app-2-requirements-review/SKILL.md +5 -4
  7. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +10 -1
  8. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +10 -1
  9. package/skills/erp-kit-app-3-plan/SKILL.md +31 -34
  10. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +22 -36
  11. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +15 -1
  12. package/skills/erp-kit-app-3-plan/references/story-extraction.md +8 -2
  13. package/skills/erp-kit-app-4-plan-review/SKILL.md +1 -10
  14. package/skills/erp-kit-app-5-impl-backend/SKILL.md +10 -19
  15. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -22
  16. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +0 -1
  17. package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +13 -4
  18. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +5 -0
  19. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +16 -46
  20. package/skills/erp-kit-app-7-impl-review/SKILL.md +13 -11
  21. package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +16 -17
  22. package/skills/erp-kit-app-shared/SKILL.md +15 -0
  23. package/skills/erp-kit-app-shared/references/link-format-reference.md +13 -0
  24. package/skills/erp-kit-app-shared/references/naming-conventions.md +21 -0
  25. package/skills/erp-kit-app-shared/references/resolver-classification.md +23 -0
  26. package/skills/erp-kit-app-shared/references/schema-constraints.md +25 -0
  27. package/skills/erp-kit-module-1-requirements/SKILL.md +7 -13
  28. package/skills/erp-kit-module-1-requirements/references/feature-doc.md +1 -1
  29. package/skills/erp-kit-module-2-requirements-review/SKILL.md +21 -5
  30. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +19 -0
  31. package/skills/erp-kit-module-3-plan/SKILL.md +6 -8
  32. package/skills/erp-kit-module-3-plan/references/naming.md +15 -1
  33. package/skills/erp-kit-module-4-plan-review/SKILL.md +21 -5
  34. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +15 -0
  35. package/skills/erp-kit-module-5-impl/SKILL.md +12 -10
  36. package/skills/erp-kit-module-5-impl/references/generated-code.md +2 -2
  37. package/skills/erp-kit-module-6-impl-review/SKILL.md +21 -7
  38. package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +1 -1
  39. package/skills/erp-kit-module-6-impl-review/references/errors.md +1 -1
  40. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +15 -0
  41. package/skills/erp-kit-module-shared/SKILL.md +4 -0
  42. package/skills/erp-kit-module-shared/references/errors.md +1 -1
  43. package/skills/erp-kit-module-shared/references/queries.md +1 -1
  44. package/skills/erp-kit-module-shared/references/structure.md +1 -1
  45. package/skills/erp-kit-update/SKILL.md +2 -2
  46. package/src/commands/app/index.ts +75 -31
  47. package/src/commands/check.test.ts +1 -1
  48. package/src/commands/check.ts +2 -35
  49. package/src/commands/doc/index.ts +83 -0
  50. package/src/commands/doc/module.test.ts +119 -0
  51. package/src/commands/doc/module.ts +114 -0
  52. package/src/commands/doc/modules.test.ts +103 -0
  53. package/src/commands/doc/modules.ts +98 -0
  54. package/src/commands/doc/search.test.ts +94 -0
  55. package/src/commands/doc/search.ts +111 -0
  56. package/src/commands/generate-doc.test.ts +63 -0
  57. package/src/commands/generate-doc.ts +105 -0
  58. package/src/commands/index.ts +20 -8
  59. package/src/commands/init-module.test.ts +43 -0
  60. package/src/commands/init-module.ts +74 -0
  61. package/src/commands/lib/command-result.ts +30 -0
  62. package/src/commands/lib/discovery.test.ts +74 -0
  63. package/src/commands/lib/discovery.ts +106 -0
  64. package/src/commands/lib/paths.ts +22 -0
  65. package/src/commands/lib/sync-check-source.test.ts +197 -0
  66. package/src/commands/lib/sync-check-source.ts +100 -0
  67. package/src/commands/lib/sync-check-tests.test.ts +178 -0
  68. package/src/commands/lib/sync-check-tests.ts +69 -0
  69. package/src/commands/mock/index.ts +11 -6
  70. package/src/commands/module/generate.ts +39 -14
  71. package/src/commands/module/index.ts +31 -45
  72. package/src/commands/parse-doc-test-cases.ts +13 -2
  73. package/src/commands/sync-check.test.ts +6 -364
  74. package/src/commands/sync-check.ts +7 -251
  75. package/src/generator/generate-app-code.test.ts +121 -0
  76. package/src/generator/generate-app-code.ts +51 -0
  77. package/src/{commands/scaffold.test.ts → generator/generate-code-boilerplate.test.ts} +19 -89
  78. package/src/generator/generate-code.test.ts +57 -6
  79. package/src/generator/generate-code.ts +40 -157
  80. package/src/generator/generate-errors.ts +34 -0
  81. package/src/generator/generate-permissions.ts +12 -0
  82. package/src/generator/generate-shells.ts +28 -0
  83. package/src/generator/generate-stubs.ts +31 -0
  84. package/src/generator/parse-resolver-doc.test.ts +89 -0
  85. package/src/generator/parse-resolver-doc.ts +125 -0
  86. package/src/generator/scaffold.ts +57 -0
  87. package/src/generator/stub-templates.test.ts +55 -0
  88. package/src/generator/stub-templates.ts +145 -0
  89. package/src/integration.test.ts +2 -2
  90. package/src/modules/audit/README.md +46 -0
  91. package/src/modules/audit/command/activateAuditPolicy.generated.ts +6 -0
  92. package/src/modules/audit/command/activateAuditPolicy.test.ts +186 -0
  93. package/src/modules/audit/command/activateAuditPolicy.ts +97 -0
  94. package/src/modules/audit/command/createAuditPolicy.generated.ts +6 -0
  95. package/src/modules/audit/command/createAuditPolicy.test.ts +395 -0
  96. package/src/modules/audit/command/createAuditPolicy.ts +131 -0
  97. package/src/modules/audit/command/deactivateAuditPolicy.generated.ts +6 -0
  98. package/src/modules/audit/command/deactivateAuditPolicy.test.ts +138 -0
  99. package/src/modules/audit/command/deactivateAuditPolicy.ts +58 -0
  100. package/src/modules/audit/command/deleteAuditPolicy.generated.ts +6 -0
  101. package/src/modules/audit/command/deleteAuditPolicy.test.ts +121 -0
  102. package/src/modules/audit/command/deleteAuditPolicy.ts +52 -0
  103. package/src/modules/audit/command/logAuditEvent.generated.ts +6 -0
  104. package/src/modules/audit/command/logAuditEvent.test.ts +991 -0
  105. package/src/modules/audit/command/logAuditEvent.ts +357 -0
  106. package/src/modules/audit/command/reactivateAuditPolicy.generated.ts +6 -0
  107. package/src/modules/audit/command/reactivateAuditPolicy.test.ts +143 -0
  108. package/src/modules/audit/command/reactivateAuditPolicy.ts +79 -0
  109. package/src/modules/audit/command/registerAuditableEntity.generated.ts +6 -0
  110. package/src/modules/audit/command/registerAuditableEntity.test.ts +268 -0
  111. package/src/modules/audit/command/registerAuditableEntity.ts +94 -0
  112. package/src/modules/audit/command/replaceAuditPolicy.generated.ts +6 -0
  113. package/src/modules/audit/command/replaceAuditPolicy.test.ts +242 -0
  114. package/src/modules/audit/command/replaceAuditPolicy.ts +91 -0
  115. package/src/modules/audit/command/updateAuditPolicy.generated.ts +6 -0
  116. package/src/modules/audit/command/updateAuditPolicy.test.ts +284 -0
  117. package/src/modules/audit/command/updateAuditPolicy.ts +151 -0
  118. package/src/modules/audit/db/auditEntry.ts +47 -0
  119. package/src/modules/audit/db/auditPolicy.ts +33 -0
  120. package/src/modules/audit/db/auditableEntity.ts +22 -0
  121. package/src/modules/audit/db/changeDetail.ts +28 -0
  122. package/src/modules/audit/db/policyFieldRule.ts +23 -0
  123. package/src/modules/audit/docs/commands/ActivateAuditPolicy.md +69 -0
  124. package/src/modules/audit/docs/commands/CreateAuditPolicy.md +79 -0
  125. package/src/modules/audit/docs/commands/DeactivateAuditPolicy.md +55 -0
  126. package/src/modules/audit/docs/commands/DeleteAuditPolicy.md +55 -0
  127. package/src/modules/audit/docs/commands/LogAuditEvent.md +137 -0
  128. package/src/modules/audit/docs/commands/ReactivateAuditPolicy.md +58 -0
  129. package/src/modules/audit/docs/commands/RegisterAuditableEntity.md +62 -0
  130. package/src/modules/audit/docs/commands/ReplaceAuditPolicy.md +72 -0
  131. package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +77 -0
  132. package/src/modules/audit/docs/features/audit-event-logging.md +126 -0
  133. package/src/modules/audit/docs/features/audit-policy-configuration.md +135 -0
  134. package/src/modules/audit/docs/features/field-level-change-tracking.md +95 -0
  135. package/src/modules/audit/docs/models/AuditEntry.md +55 -0
  136. package/src/modules/audit/docs/models/AuditPolicy.md +79 -0
  137. package/src/modules/audit/docs/models/AuditableEntity.md +38 -0
  138. package/src/modules/audit/docs/models/ChangeDetail.md +55 -0
  139. package/src/modules/audit/docs/models/PolicyFieldRule.md +45 -0
  140. package/src/modules/audit/docs/queries/GetAuditEntry.md +49 -0
  141. package/src/modules/audit/docs/queries/GetAuditPolicy.md +54 -0
  142. package/src/modules/audit/docs/queries/GetAuditSummary.md +84 -0
  143. package/src/modules/audit/docs/queries/GetChangeDetails.md +56 -0
  144. package/src/modules/audit/docs/queries/ListAuditPolicies.md +58 -0
  145. package/src/modules/audit/docs/queries/SearchAuditEntries.md +91 -0
  146. package/src/modules/audit/generated/kysely-tailordb.ts +92 -0
  147. package/src/modules/audit/index.ts +2 -0
  148. package/src/modules/audit/lib/_db_deps.ts +13 -0
  149. package/src/modules/audit/lib/errors.generated.ts +120 -0
  150. package/src/modules/audit/lib/permissions.generated.ts +14 -0
  151. package/src/modules/audit/lib/types.ts +28 -0
  152. package/src/modules/audit/module.ts +57 -0
  153. package/src/modules/audit/permissions.ts +39 -0
  154. package/src/modules/audit/query/getAuditEntry.generated.ts +5 -0
  155. package/src/modules/audit/query/getAuditEntry.test.ts +123 -0
  156. package/src/modules/audit/query/getAuditEntry.ts +36 -0
  157. package/src/modules/audit/query/getAuditPolicy.generated.ts +5 -0
  158. package/src/modules/audit/query/getAuditPolicy.test.ts +169 -0
  159. package/src/modules/audit/query/getAuditPolicy.ts +42 -0
  160. package/src/modules/audit/query/getAuditSummary.generated.ts +5 -0
  161. package/src/modules/audit/query/getAuditSummary.test.ts +632 -0
  162. package/src/modules/audit/query/getAuditSummary.ts +164 -0
  163. package/src/modules/audit/query/getChangeDetails.generated.ts +5 -0
  164. package/src/modules/audit/query/getChangeDetails.test.ts +195 -0
  165. package/src/modules/audit/query/getChangeDetails.ts +42 -0
  166. package/src/modules/audit/query/listAuditPolicies.generated.ts +5 -0
  167. package/src/modules/audit/query/listAuditPolicies.test.ts +239 -0
  168. package/src/modules/audit/query/listAuditPolicies.ts +100 -0
  169. package/src/modules/audit/query/searchAuditEntries.generated.ts +5 -0
  170. package/src/modules/audit/query/searchAuditEntries.test.ts +424 -0
  171. package/src/modules/audit/query/searchAuditEntries.ts +121 -0
  172. package/src/modules/audit/tailor.config.ts +13 -0
  173. package/src/modules/audit/tailor.d.ts +13 -0
  174. package/src/modules/audit/testing/fixtures.ts +215 -0
  175. package/src/modules/business-partner/README.md +60 -0
  176. package/src/modules/business-partner/command/.gitkeep +0 -0
  177. package/src/modules/business-partner/command/activatePartner.generated.ts +6 -0
  178. package/src/modules/business-partner/command/activatePartner.test.ts +59 -0
  179. package/src/modules/business-partner/command/activatePartner.ts +45 -0
  180. package/src/modules/business-partner/command/assignRoleToPartner.generated.ts +6 -0
  181. package/src/modules/business-partner/command/assignRoleToPartner.test.ts +113 -0
  182. package/src/modules/business-partner/command/assignRoleToPartner.ts +72 -0
  183. package/src/modules/business-partner/command/createContactPerson.generated.ts +6 -0
  184. package/src/modules/business-partner/command/createContactPerson.test.ts +193 -0
  185. package/src/modules/business-partner/command/createContactPerson.ts +98 -0
  186. package/src/modules/business-partner/command/createPartner.generated.ts +6 -0
  187. package/src/modules/business-partner/command/createPartner.test.ts +179 -0
  188. package/src/modules/business-partner/command/createPartner.ts +83 -0
  189. package/src/modules/business-partner/command/createPartnerAddress.generated.ts +6 -0
  190. package/src/modules/business-partner/command/createPartnerAddress.test.ts +195 -0
  191. package/src/modules/business-partner/command/createPartnerAddress.ts +119 -0
  192. package/src/modules/business-partner/command/createPartnerBankAccount.generated.ts +6 -0
  193. package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +297 -0
  194. package/src/modules/business-partner/command/createPartnerBankAccount.ts +114 -0
  195. package/src/modules/business-partner/command/createPartnerIdentification.generated.ts +6 -0
  196. package/src/modules/business-partner/command/createPartnerIdentification.test.ts +255 -0
  197. package/src/modules/business-partner/command/createPartnerIdentification.ts +97 -0
  198. package/src/modules/business-partner/command/deactivateContactPerson.generated.ts +6 -0
  199. package/src/modules/business-partner/command/deactivateContactPerson.test.ts +70 -0
  200. package/src/modules/business-partner/command/deactivateContactPerson.ts +54 -0
  201. package/src/modules/business-partner/command/deactivatePartner.generated.ts +6 -0
  202. package/src/modules/business-partner/command/deactivatePartner.test.ts +59 -0
  203. package/src/modules/business-partner/command/deactivatePartner.ts +46 -0
  204. package/src/modules/business-partner/command/deleteContactPerson.generated.ts +6 -0
  205. package/src/modules/business-partner/command/deleteContactPerson.test.ts +61 -0
  206. package/src/modules/business-partner/command/deleteContactPerson.ts +48 -0
  207. package/src/modules/business-partner/command/deletePartner.generated.ts +6 -0
  208. package/src/modules/business-partner/command/deletePartner.test.ts +58 -0
  209. package/src/modules/business-partner/command/deletePartner.ts +46 -0
  210. package/src/modules/business-partner/command/deletePartnerAddress.generated.ts +6 -0
  211. package/src/modules/business-partner/command/deletePartnerAddress.test.ts +74 -0
  212. package/src/modules/business-partner/command/deletePartnerAddress.ts +52 -0
  213. package/src/modules/business-partner/command/deletePartnerBankAccount.generated.ts +6 -0
  214. package/src/modules/business-partner/command/deletePartnerBankAccount.test.ts +55 -0
  215. package/src/modules/business-partner/command/deletePartnerBankAccount.ts +36 -0
  216. package/src/modules/business-partner/command/deletePartnerIdentification.generated.ts +6 -0
  217. package/src/modules/business-partner/command/deletePartnerIdentification.test.ts +47 -0
  218. package/src/modules/business-partner/command/deletePartnerIdentification.ts +37 -0
  219. package/src/modules/business-partner/command/reactivateContactPerson.generated.ts +6 -0
  220. package/src/modules/business-partner/command/reactivateContactPerson.test.ts +48 -0
  221. package/src/modules/business-partner/command/reactivateContactPerson.ts +48 -0
  222. package/src/modules/business-partner/command/reactivatePartner.generated.ts +6 -0
  223. package/src/modules/business-partner/command/reactivatePartner.test.ts +59 -0
  224. package/src/modules/business-partner/command/reactivatePartner.ts +46 -0
  225. package/src/modules/business-partner/command/removeRoleFromPartner.generated.ts +6 -0
  226. package/src/modules/business-partner/command/removeRoleFromPartner.test.ts +82 -0
  227. package/src/modules/business-partner/command/removeRoleFromPartner.ts +73 -0
  228. package/src/modules/business-partner/command/setDefaultPartnerAddress.generated.ts +6 -0
  229. package/src/modules/business-partner/command/setDefaultPartnerAddress.test.ts +60 -0
  230. package/src/modules/business-partner/command/setDefaultPartnerAddress.ts +48 -0
  231. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.generated.ts +6 -0
  232. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.test.ts +56 -0
  233. package/src/modules/business-partner/command/setDefaultPartnerBankAccount.ts +51 -0
  234. package/src/modules/business-partner/command/setPrimaryContactPerson.generated.ts +6 -0
  235. package/src/modules/business-partner/command/setPrimaryContactPerson.test.ts +63 -0
  236. package/src/modules/business-partner/command/setPrimaryContactPerson.ts +55 -0
  237. package/src/modules/business-partner/command/updateContactPerson.generated.ts +6 -0
  238. package/src/modules/business-partner/command/updateContactPerson.test.ts +193 -0
  239. package/src/modules/business-partner/command/updateContactPerson.ts +92 -0
  240. package/src/modules/business-partner/command/updatePartner.generated.ts +6 -0
  241. package/src/modules/business-partner/command/updatePartner.test.ts +101 -0
  242. package/src/modules/business-partner/command/updatePartner.ts +76 -0
  243. package/src/modules/business-partner/command/updatePartnerAddress.generated.ts +6 -0
  244. package/src/modules/business-partner/command/updatePartnerAddress.test.ts +148 -0
  245. package/src/modules/business-partner/command/updatePartnerAddress.ts +64 -0
  246. package/src/modules/business-partner/command/updatePartnerBankAccount.generated.ts +6 -0
  247. package/src/modules/business-partner/command/updatePartnerBankAccount.test.ts +249 -0
  248. package/src/modules/business-partner/command/updatePartnerBankAccount.ts +109 -0
  249. package/src/modules/business-partner/command/updatePartnerIdentification.generated.ts +6 -0
  250. package/src/modules/business-partner/command/updatePartnerIdentification.test.ts +162 -0
  251. package/src/modules/business-partner/command/updatePartnerIdentification.ts +105 -0
  252. package/src/modules/business-partner/db/.gitkeep +0 -0
  253. package/src/modules/business-partner/db/businessPartner.ts +59 -0
  254. package/src/modules/business-partner/db/contactPerson.ts +49 -0
  255. package/src/modules/business-partner/db/partnerAddress.ts +45 -0
  256. package/src/modules/business-partner/db/partnerBankAccount.ts +53 -0
  257. package/src/modules/business-partner/db/partnerIdentification.ts +53 -0
  258. package/src/modules/business-partner/db/partnerRole.ts +43 -0
  259. package/src/modules/business-partner/docs/commands/ActivatePartner.md +39 -0
  260. package/src/modules/business-partner/docs/commands/AssignRoleToPartner.md +49 -0
  261. package/src/modules/business-partner/docs/commands/CreateContactPerson.md +59 -0
  262. package/src/modules/business-partner/docs/commands/CreatePartner.md +54 -0
  263. package/src/modules/business-partner/docs/commands/CreatePartnerAddress.md +60 -0
  264. package/src/modules/business-partner/docs/commands/CreatePartnerBankAccount.md +68 -0
  265. package/src/modules/business-partner/docs/commands/CreatePartnerIdentification.md +59 -0
  266. package/src/modules/business-partner/docs/commands/DeactivateContactPerson.md +42 -0
  267. package/src/modules/business-partner/docs/commands/DeactivatePartner.md +39 -0
  268. package/src/modules/business-partner/docs/commands/DeleteContactPerson.md +43 -0
  269. package/src/modules/business-partner/docs/commands/DeletePartner.md +40 -0
  270. package/src/modules/business-partner/docs/commands/DeletePartnerAddress.md +40 -0
  271. package/src/modules/business-partner/docs/commands/DeletePartnerBankAccount.md +35 -0
  272. package/src/modules/business-partner/docs/commands/DeletePartnerIdentification.md +33 -0
  273. package/src/modules/business-partner/docs/commands/ReactivateContactPerson.md +38 -0
  274. package/src/modules/business-partner/docs/commands/ReactivatePartner.md +39 -0
  275. package/src/modules/business-partner/docs/commands/RemoveRoleFromPartner.md +46 -0
  276. package/src/modules/business-partner/docs/commands/SetDefaultPartnerAddress.md +38 -0
  277. package/src/modules/business-partner/docs/commands/SetDefaultPartnerBankAccount.md +38 -0
  278. package/src/modules/business-partner/docs/commands/SetPrimaryContactPerson.md +43 -0
  279. package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +66 -0
  280. package/src/modules/business-partner/docs/commands/UpdatePartner.md +48 -0
  281. package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +46 -0
  282. package/src/modules/business-partner/docs/commands/UpdatePartnerBankAccount.md +64 -0
  283. package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +52 -0
  284. package/src/modules/business-partner/docs/features/contact-person-management.md +70 -0
  285. package/src/modules/business-partner/docs/features/partner-address-management.md +96 -0
  286. package/src/modules/business-partner/docs/features/partner-bank-account.md +70 -0
  287. package/src/modules/business-partner/docs/features/partner-identification.md +76 -0
  288. package/src/modules/business-partner/docs/features/partner-lifecycle.md +59 -0
  289. package/src/modules/business-partner/docs/features/partner-role-classification.md +73 -0
  290. package/src/modules/business-partner/docs/models/BusinessPartner.md +64 -0
  291. package/src/modules/business-partner/docs/models/ContactPerson.md +62 -0
  292. package/src/modules/business-partner/docs/models/PartnerAddress.md +52 -0
  293. package/src/modules/business-partner/docs/models/PartnerBankAccount.md +50 -0
  294. package/src/modules/business-partner/docs/models/PartnerIdentification.md +46 -0
  295. package/src/modules/business-partner/docs/models/PartnerRole.md +42 -0
  296. package/src/modules/business-partner/docs/queries/GetContactPerson.md +34 -0
  297. package/src/modules/business-partner/docs/queries/GetDefaultPartnerAddress.md +40 -0
  298. package/src/modules/business-partner/docs/queries/GetDefaultPartnerBankAccount.md +36 -0
  299. package/src/modules/business-partner/docs/queries/GetPartner.md +35 -0
  300. package/src/modules/business-partner/docs/queries/GetPartnerAddress.md +34 -0
  301. package/src/modules/business-partner/docs/queries/GetPartnerBankAccount.md +34 -0
  302. package/src/modules/business-partner/docs/queries/GetPartnerIdentification.md +34 -0
  303. package/src/modules/business-partner/docs/queries/GetPartnerRole.md +34 -0
  304. package/src/modules/business-partner/docs/queries/GetPrimaryContactPerson.md +36 -0
  305. package/src/modules/business-partner/docs/queries/ListContactPersonsByPartner.md +39 -0
  306. package/src/modules/business-partner/docs/queries/ListPartnerAddressesByPartner.md +41 -0
  307. package/src/modules/business-partner/docs/queries/ListPartnerBankAccountsByPartner.md +39 -0
  308. package/src/modules/business-partner/docs/queries/ListPartnerIdentificationsByPartner.md +41 -0
  309. package/src/modules/business-partner/docs/queries/ListPartnersByRole.md +47 -0
  310. package/src/modules/business-partner/executor/.gitkeep +0 -0
  311. package/src/modules/business-partner/generated/.gitkeep +0 -0
  312. package/src/modules/business-partner/generated/enums.ts +60 -0
  313. package/src/modules/business-partner/generated/kysely-tailordb.ts +114 -0
  314. package/src/modules/business-partner/index.ts +2 -0
  315. package/src/modules/business-partner/lib/_db_deps.ts +17 -0
  316. package/src/modules/business-partner/lib/errors.generated.ts +172 -0
  317. package/src/modules/business-partner/lib/errors.ts +2 -0
  318. package/src/modules/business-partner/lib/permissions.generated.ts +30 -0
  319. package/src/modules/business-partner/lib/types.ts +53 -0
  320. package/src/modules/business-partner/module.ts +181 -0
  321. package/src/modules/business-partner/permissions.ts +3 -0
  322. package/src/modules/business-partner/query/.gitkeep +0 -0
  323. package/src/modules/business-partner/query/getContactPerson.generated.ts +5 -0
  324. package/src/modules/business-partner/query/getContactPerson.test.ts +31 -0
  325. package/src/modules/business-partner/query/getContactPerson.ts +16 -0
  326. package/src/modules/business-partner/query/getDefaultPartnerAddress.generated.ts +5 -0
  327. package/src/modules/business-partner/query/getDefaultPartnerAddress.test.ts +45 -0
  328. package/src/modules/business-partner/query/getDefaultPartnerAddress.ts +30 -0
  329. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.generated.ts +5 -0
  330. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.test.ts +43 -0
  331. package/src/modules/business-partner/query/getDefaultPartnerBankAccount.ts +17 -0
  332. package/src/modules/business-partner/query/getPartner.generated.ts +5 -0
  333. package/src/modules/business-partner/query/getPartner.test.ts +31 -0
  334. package/src/modules/business-partner/query/getPartner.ts +16 -0
  335. package/src/modules/business-partner/query/getPartnerAddress.generated.ts +5 -0
  336. package/src/modules/business-partner/query/getPartnerAddress.test.ts +31 -0
  337. package/src/modules/business-partner/query/getPartnerAddress.ts +16 -0
  338. package/src/modules/business-partner/query/getPartnerBankAccount.generated.ts +5 -0
  339. package/src/modules/business-partner/query/getPartnerBankAccount.test.ts +31 -0
  340. package/src/modules/business-partner/query/getPartnerBankAccount.ts +16 -0
  341. package/src/modules/business-partner/query/getPartnerIdentification.generated.ts +5 -0
  342. package/src/modules/business-partner/query/getPartnerIdentification.test.ts +31 -0
  343. package/src/modules/business-partner/query/getPartnerIdentification.ts +16 -0
  344. package/src/modules/business-partner/query/getPartnerRole.generated.ts +5 -0
  345. package/src/modules/business-partner/query/getPartnerRole.test.ts +31 -0
  346. package/src/modules/business-partner/query/getPartnerRole.ts +19 -0
  347. package/src/modules/business-partner/query/getPrimaryContactPerson.generated.ts +5 -0
  348. package/src/modules/business-partner/query/getPrimaryContactPerson.test.ts +43 -0
  349. package/src/modules/business-partner/query/getPrimaryContactPerson.ts +17 -0
  350. package/src/modules/business-partner/query/listContactPersonsByPartner.generated.ts +5 -0
  351. package/src/modules/business-partner/query/listContactPersonsByPartner.test.ts +77 -0
  352. package/src/modules/business-partner/query/listContactPersonsByPartner.ts +32 -0
  353. package/src/modules/business-partner/query/listPartnerAddressesByPartner.generated.ts +5 -0
  354. package/src/modules/business-partner/query/listPartnerAddressesByPartner.test.ts +71 -0
  355. package/src/modules/business-partner/query/listPartnerAddressesByPartner.ts +37 -0
  356. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.generated.ts +5 -0
  357. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.test.ts +59 -0
  358. package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.ts +32 -0
  359. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.generated.ts +5 -0
  360. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.test.ts +72 -0
  361. package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.ts +40 -0
  362. package/src/modules/business-partner/query/listPartnersByRole.generated.ts +5 -0
  363. package/src/modules/business-partner/query/listPartnersByRole.test.ts +103 -0
  364. package/src/modules/business-partner/query/listPartnersByRole.ts +47 -0
  365. package/src/modules/business-partner/tailor.config.ts +13 -0
  366. package/src/modules/business-partner/tailor.d.ts +13 -0
  367. package/src/modules/business-partner/testing/fixtures.ts +204 -0
  368. package/src/modules/coa-management/README.md +61 -0
  369. package/src/modules/coa-management/command/.gitkeep +0 -0
  370. package/src/modules/coa-management/command/activateAccount.generated.ts +6 -0
  371. package/src/modules/coa-management/command/activateAccount.test.ts +125 -0
  372. package/src/modules/coa-management/command/activateAccount.ts +105 -0
  373. package/src/modules/coa-management/command/activateChartOfAccounts.generated.ts +6 -0
  374. package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +113 -0
  375. package/src/modules/coa-management/command/activateChartOfAccounts.ts +104 -0
  376. package/src/modules/coa-management/command/createAccount.generated.ts +6 -0
  377. package/src/modules/coa-management/command/createAccount.test.ts +767 -0
  378. package/src/modules/coa-management/command/createAccount.ts +247 -0
  379. package/src/modules/coa-management/command/createAccountGroup.generated.ts +6 -0
  380. package/src/modules/coa-management/command/createAccountGroup.test.ts +494 -0
  381. package/src/modules/coa-management/command/createAccountGroup.ts +207 -0
  382. package/src/modules/coa-management/command/createChartOfAccounts.generated.ts +6 -0
  383. package/src/modules/coa-management/command/createChartOfAccounts.test.ts +502 -0
  384. package/src/modules/coa-management/command/createChartOfAccounts.ts +267 -0
  385. package/src/modules/coa-management/command/deactivateAccount.generated.ts +6 -0
  386. package/src/modules/coa-management/command/deactivateAccount.test.ts +199 -0
  387. package/src/modules/coa-management/command/deactivateAccount.ts +142 -0
  388. package/src/modules/coa-management/command/deactivateChartOfAccounts.generated.ts +6 -0
  389. package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +91 -0
  390. package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +88 -0
  391. package/src/modules/coa-management/command/deleteAccount.generated.ts +6 -0
  392. package/src/modules/coa-management/command/deleteAccount.test.ts +122 -0
  393. package/src/modules/coa-management/command/deleteAccount.ts +103 -0
  394. package/src/modules/coa-management/command/deleteAccountGroup.generated.ts +6 -0
  395. package/src/modules/coa-management/command/deleteAccountGroup.test.ts +120 -0
  396. package/src/modules/coa-management/command/deleteAccountGroup.ts +113 -0
  397. package/src/modules/coa-management/command/deleteChartOfAccounts.generated.ts +6 -0
  398. package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +154 -0
  399. package/src/modules/coa-management/command/deleteChartOfAccounts.ts +133 -0
  400. package/src/modules/coa-management/command/moveAccountGroup.generated.ts +6 -0
  401. package/src/modules/coa-management/command/moveAccountGroup.test.ts +199 -0
  402. package/src/modules/coa-management/command/moveAccountGroup.ts +145 -0
  403. package/src/modules/coa-management/command/reactivateAccount.generated.ts +6 -0
  404. package/src/modules/coa-management/command/reactivateAccount.test.ts +126 -0
  405. package/src/modules/coa-management/command/reactivateAccount.ts +123 -0
  406. package/src/modules/coa-management/command/updateAccount.generated.ts +6 -0
  407. package/src/modules/coa-management/command/updateAccount.test.ts +669 -0
  408. package/src/modules/coa-management/command/updateAccount.ts +370 -0
  409. package/src/modules/coa-management/command/updateAccountGroup.generated.ts +6 -0
  410. package/src/modules/coa-management/command/updateAccountGroup.test.ts +253 -0
  411. package/src/modules/coa-management/command/updateAccountGroup.ts +191 -0
  412. package/src/modules/coa-management/command/updateChartOfAccounts.generated.ts +6 -0
  413. package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +153 -0
  414. package/src/modules/coa-management/command/updateChartOfAccounts.ts +133 -0
  415. package/src/modules/coa-management/db/.gitkeep +0 -0
  416. package/src/modules/coa-management/db/account.ts +119 -0
  417. package/src/modules/coa-management/db/accountGroup.ts +57 -0
  418. package/src/modules/coa-management/db/chartOfAccounts.ts +55 -0
  419. package/src/modules/coa-management/docs/commands/ActivateAccount.md +49 -0
  420. package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +47 -0
  421. package/src/modules/coa-management/docs/commands/CreateAccount.md +94 -0
  422. package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +70 -0
  423. package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +72 -0
  424. package/src/modules/coa-management/docs/commands/DeactivateAccount.md +65 -0
  425. package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +44 -0
  426. package/src/modules/coa-management/docs/commands/DeleteAccount.md +52 -0
  427. package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +50 -0
  428. package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +48 -0
  429. package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +57 -0
  430. package/src/modules/coa-management/docs/commands/ReactivateAccount.md +50 -0
  431. package/src/modules/coa-management/docs/commands/UpdateAccount.md +102 -0
  432. package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +62 -0
  433. package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +49 -0
  434. package/src/modules/coa-management/docs/features/account-group-hierarchy.md +81 -0
  435. package/src/modules/coa-management/docs/features/account-lifecycle.md +80 -0
  436. package/src/modules/coa-management/docs/features/account-management.md +114 -0
  437. package/src/modules/coa-management/docs/features/chart-of-accounts-setup.md +86 -0
  438. package/src/modules/coa-management/docs/models/Account.md +84 -0
  439. package/src/modules/coa-management/docs/models/AccountGroup.md +55 -0
  440. package/src/modules/coa-management/docs/models/ChartOfAccounts.md +65 -0
  441. package/src/modules/coa-management/docs/queries/DetectCircularReference.md +52 -0
  442. package/src/modules/coa-management/docs/queries/GetAccount.md +42 -0
  443. package/src/modules/coa-management/docs/queries/GetAccountGroup.md +42 -0
  444. package/src/modules/coa-management/docs/queries/GetChartOfAccounts.md +48 -0
  445. package/src/modules/coa-management/docs/queries/ListAccountGroups.md +42 -0
  446. package/src/modules/coa-management/docs/queries/ListAccounts.md +54 -0
  447. package/src/modules/coa-management/docs/queries/ListUnassignedAccounts.md +40 -0
  448. package/src/modules/coa-management/executor/.gitkeep +0 -0
  449. package/src/modules/coa-management/generated/.gitkeep +0 -0
  450. package/src/modules/coa-management/generated/enums.ts +45 -0
  451. package/src/modules/coa-management/generated/kysely-tailordb.ts +81 -0
  452. package/src/modules/coa-management/index.ts +2 -0
  453. package/src/modules/coa-management/lib/_db_deps.ts +17 -0
  454. package/src/modules/coa-management/lib/errors.generated.ts +162 -0
  455. package/src/modules/coa-management/lib/errors.ts +0 -0
  456. package/src/modules/coa-management/lib/permissions.generated.ts +20 -0
  457. package/src/modules/coa-management/lib/types.ts +22 -0
  458. package/src/modules/coa-management/module.ts +136 -0
  459. package/src/modules/coa-management/permissions.ts +3 -0
  460. package/src/modules/coa-management/query/.gitkeep +0 -0
  461. package/src/modules/coa-management/query/detectCircularReference.generated.ts +5 -0
  462. package/src/modules/coa-management/query/detectCircularReference.test.ts +88 -0
  463. package/src/modules/coa-management/query/detectCircularReference.ts +46 -0
  464. package/src/modules/coa-management/query/getAccount.generated.ts +5 -0
  465. package/src/modules/coa-management/query/getAccount.test.ts +55 -0
  466. package/src/modules/coa-management/query/getAccount.ts +25 -0
  467. package/src/modules/coa-management/query/getAccountGroup.generated.ts +5 -0
  468. package/src/modules/coa-management/query/getAccountGroup.test.ts +55 -0
  469. package/src/modules/coa-management/query/getAccountGroup.ts +25 -0
  470. package/src/modules/coa-management/query/getChartOfAccounts.generated.ts +5 -0
  471. package/src/modules/coa-management/query/getChartOfAccounts.test.ts +79 -0
  472. package/src/modules/coa-management/query/getChartOfAccounts.ts +28 -0
  473. package/src/modules/coa-management/query/listAccountGroups.generated.ts +5 -0
  474. package/src/modules/coa-management/query/listAccountGroups.test.ts +72 -0
  475. package/src/modules/coa-management/query/listAccountGroups.ts +49 -0
  476. package/src/modules/coa-management/query/listAccounts.generated.ts +5 -0
  477. package/src/modules/coa-management/query/listAccounts.test.ts +136 -0
  478. package/src/modules/coa-management/query/listAccounts.ts +82 -0
  479. package/src/modules/coa-management/query/listUnassignedAccounts.generated.ts +5 -0
  480. package/src/modules/coa-management/query/listUnassignedAccounts.test.ts +96 -0
  481. package/src/modules/coa-management/query/listUnassignedAccounts.ts +39 -0
  482. package/src/modules/coa-management/tailor.config.ts +13 -0
  483. package/src/modules/coa-management/tailor.d.ts +13 -0
  484. package/src/modules/coa-management/testing/fixtures.ts +201 -0
  485. package/src/modules/item-management/README.md +1 -1
  486. package/src/modules/organization/README.md +57 -0
  487. package/src/modules/organization/command/.gitkeep +0 -0
  488. package/src/modules/organization/command/activateCompany.generated.ts +6 -0
  489. package/src/modules/organization/command/activateCompany.test.ts +184 -0
  490. package/src/modules/organization/command/activateCompany.ts +92 -0
  491. package/src/modules/organization/command/createCompany.generated.ts +6 -0
  492. package/src/modules/organization/command/createCompany.test.ts +156 -0
  493. package/src/modules/organization/command/createCompany.ts +80 -0
  494. package/src/modules/organization/command/createDepartment.generated.ts +6 -0
  495. package/src/modules/organization/command/createDepartment.test.ts +239 -0
  496. package/src/modules/organization/command/createDepartment.ts +98 -0
  497. package/src/modules/organization/command/createSite.generated.ts +6 -0
  498. package/src/modules/organization/command/createSite.test.ts +262 -0
  499. package/src/modules/organization/command/createSite.ts +155 -0
  500. package/src/modules/organization/command/deactivateCompany.generated.ts +6 -0
  501. package/src/modules/organization/command/deactivateCompany.test.ts +58 -0
  502. package/src/modules/organization/command/deactivateCompany.ts +47 -0
  503. package/src/modules/organization/command/deactivateDepartment.generated.ts +6 -0
  504. package/src/modules/organization/command/deactivateDepartment.test.ts +115 -0
  505. package/src/modules/organization/command/deactivateDepartment.ts +63 -0
  506. package/src/modules/organization/command/deactivateSite.generated.ts +6 -0
  507. package/src/modules/organization/command/deactivateSite.test.ts +53 -0
  508. package/src/modules/organization/command/deactivateSite.ts +47 -0
  509. package/src/modules/organization/command/deleteCompany.generated.ts +6 -0
  510. package/src/modules/organization/command/deleteCompany.test.ts +99 -0
  511. package/src/modules/organization/command/deleteCompany.ts +66 -0
  512. package/src/modules/organization/command/reactivateCompany.generated.ts +6 -0
  513. package/src/modules/organization/command/reactivateCompany.test.ts +58 -0
  514. package/src/modules/organization/command/reactivateCompany.ts +47 -0
  515. package/src/modules/organization/command/reactivateDepartment.generated.ts +6 -0
  516. package/src/modules/organization/command/reactivateDepartment.test.ts +59 -0
  517. package/src/modules/organization/command/reactivateDepartment.ts +47 -0
  518. package/src/modules/organization/command/reactivateSite.generated.ts +6 -0
  519. package/src/modules/organization/command/reactivateSite.test.ts +53 -0
  520. package/src/modules/organization/command/reactivateSite.ts +47 -0
  521. package/src/modules/organization/command/updateCompany.generated.ts +6 -0
  522. package/src/modules/organization/command/updateCompany.test.ts +239 -0
  523. package/src/modules/organization/command/updateCompany.ts +127 -0
  524. package/src/modules/organization/command/updateDepartment.generated.ts +6 -0
  525. package/src/modules/organization/command/updateDepartment.test.ts +232 -0
  526. package/src/modules/organization/command/updateDepartment.ts +120 -0
  527. package/src/modules/organization/command/updateSite.generated.ts +6 -0
  528. package/src/modules/organization/command/updateSite.test.ts +274 -0
  529. package/src/modules/organization/command/updateSite.ts +176 -0
  530. package/src/modules/organization/db/.gitkeep +0 -0
  531. package/src/modules/organization/db/company.ts +44 -0
  532. package/src/modules/organization/db/department.ts +46 -0
  533. package/src/modules/organization/db/site.ts +44 -0
  534. package/src/modules/organization/docs/commands/ActivateCompany.md +62 -0
  535. package/src/modules/organization/docs/commands/CreateCompany.md +49 -0
  536. package/src/modules/organization/docs/commands/CreateDepartment.md +62 -0
  537. package/src/modules/organization/docs/commands/CreateSite.md +74 -0
  538. package/src/modules/organization/docs/commands/DeactivateCompany.md +40 -0
  539. package/src/modules/organization/docs/commands/DeactivateDepartment.md +44 -0
  540. package/src/modules/organization/docs/commands/DeactivateSite.md +38 -0
  541. package/src/modules/organization/docs/commands/DeleteCompany.md +50 -0
  542. package/src/modules/organization/docs/commands/ReactivateCompany.md +39 -0
  543. package/src/modules/organization/docs/commands/ReactivateDepartment.md +37 -0
  544. package/src/modules/organization/docs/commands/ReactivateSite.md +37 -0
  545. package/src/modules/organization/docs/commands/UpdateCompany.md +58 -0
  546. package/src/modules/organization/docs/commands/UpdateDepartment.md +64 -0
  547. package/src/modules/organization/docs/commands/UpdateSite.md +80 -0
  548. package/src/modules/organization/docs/features/company-lifecycle.md +76 -0
  549. package/src/modules/organization/docs/features/department-management.md +66 -0
  550. package/src/modules/organization/docs/features/site-management.md +86 -0
  551. package/src/modules/organization/docs/models/Company.md +60 -0
  552. package/src/modules/organization/docs/models/Department.md +57 -0
  553. package/src/modules/organization/docs/models/Site.md +57 -0
  554. package/src/modules/organization/docs/queries/DetectDepartmentCircularReference.md +50 -0
  555. package/src/modules/organization/docs/queries/GetCompany.md +40 -0
  556. package/src/modules/organization/docs/queries/GetDepartment.md +44 -0
  557. package/src/modules/organization/docs/queries/GetDepartmentChildren.md +40 -0
  558. package/src/modules/organization/docs/queries/GetSite.md +37 -0
  559. package/src/modules/organization/docs/queries/ListDepartmentsByCompany.md +54 -0
  560. package/src/modules/organization/docs/queries/ListSitesByCompany.md +54 -0
  561. package/src/modules/organization/executor/.gitkeep +0 -0
  562. package/src/modules/organization/generated/.gitkeep +0 -0
  563. package/src/modules/organization/generated/kysely-tailordb.ts +77 -0
  564. package/src/modules/organization/index.ts +2 -0
  565. package/src/modules/organization/lib/_db_deps.ts +10 -0
  566. package/src/modules/organization/lib/errors.generated.ts +117 -0
  567. package/src/modules/organization/lib/errors.ts +1 -0
  568. package/src/modules/organization/lib/permissions.generated.ts +19 -0
  569. package/src/modules/organization/lib/types.ts +16 -0
  570. package/src/modules/organization/module.ts +89 -0
  571. package/src/modules/organization/permissions.ts +3 -0
  572. package/src/modules/organization/query/.gitkeep +0 -0
  573. package/src/modules/organization/query/detectDepartmentCircularReference.generated.ts +5 -0
  574. package/src/modules/organization/query/detectDepartmentCircularReference.test.ts +102 -0
  575. package/src/modules/organization/query/detectDepartmentCircularReference.ts +27 -0
  576. package/src/modules/organization/query/getCompany.generated.ts +5 -0
  577. package/src/modules/organization/query/getCompany.test.ts +70 -0
  578. package/src/modules/organization/query/getCompany.ts +16 -0
  579. package/src/modules/organization/query/getDepartment.generated.ts +5 -0
  580. package/src/modules/organization/query/getDepartment.test.ts +85 -0
  581. package/src/modules/organization/query/getDepartment.ts +17 -0
  582. package/src/modules/organization/query/getDepartmentChildren.generated.ts +5 -0
  583. package/src/modules/organization/query/getDepartmentChildren.test.ts +75 -0
  584. package/src/modules/organization/query/getDepartmentChildren.ts +21 -0
  585. package/src/modules/organization/query/getSite.generated.ts +5 -0
  586. package/src/modules/organization/query/getSite.test.ts +55 -0
  587. package/src/modules/organization/query/getSite.ts +16 -0
  588. package/src/modules/organization/query/listDepartmentsByCompany.generated.ts +5 -0
  589. package/src/modules/organization/query/listDepartmentsByCompany.test.ts +124 -0
  590. package/src/modules/organization/query/listDepartmentsByCompany.ts +43 -0
  591. package/src/modules/organization/query/listSitesByCompany.generated.ts +5 -0
  592. package/src/modules/organization/query/listSitesByCompany.test.ts +126 -0
  593. package/src/modules/organization/query/listSitesByCompany.ts +41 -0
  594. package/src/modules/organization/tailor.config.ts +13 -0
  595. package/src/modules/organization/tailor.d.ts +13 -0
  596. package/src/modules/organization/testing/fixtures.ts +155 -0
  597. package/src/modules/primitives/README.md +1 -1
  598. package/src/modules/primitives/command/setBaseCurrency.test.ts +8 -64
  599. package/src/modules/primitives/command/setBaseCurrency.ts +6 -64
  600. package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -1
  601. package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -1
  602. package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -1
  603. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +2 -2
  604. package/src/modules/primitives/docs/commands/CreateUnit.md +1 -1
  605. package/src/modules/primitives/docs/commands/DeactivateCategory.md +1 -1
  606. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +1 -1
  607. package/src/modules/primitives/docs/commands/DeactivateUnit.md +1 -1
  608. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +13 -23
  609. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +1 -1
  610. package/src/modules/primitives/docs/features/currency-definitions.md +13 -14
  611. package/src/modules/primitives/docs/models/Currency.md +3 -4
  612. package/src/modules/primitives/docs/queries/ConvertAmount.md +2 -2
  613. package/src/modules/primitives/docs/queries/ConvertQuantity.md +2 -2
  614. package/src/modules/primitives/lib/errors.generated.ts +5 -0
  615. package/src/modules/product-management/README.md +1 -1
  616. package/src/modules/user-management/docs/commands/CreatePermission.md +3 -3
  617. package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
  618. package/src/modules/user-management/docs/queries/ListRolePermissionsByRole.md +39 -0
  619. package/src/modules/user-management/docs/queries/ListUserRolesByUser.md +39 -0
  620. package/src/modules/user-management/generated/enums.ts +0 -15
  621. package/src/modules/user-management/generated/kysely-tailordb.ts +0 -11
  622. package/src/shared/createContext.ts +2 -1
  623. package/src/shared/defineQuery.ts +36 -1
  624. package/src/shared/requirePermission.ts +3 -3
  625. package/src/shared/types.ts +3 -0
  626. package/templates/scaffold/app/backend/package.json +8 -7
  627. package/templates/scaffold/app/frontend/eslint.config.js +12 -0
  628. package/templates/scaffold/app/frontend/package.json +19 -16
  629. package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +30 -0
  630. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +3 -2
  631. package/templates/scaffold/app/frontend/vite.config.ts +5 -5
  632. package/templates/workflows/erp-kit-check.yml +2 -2
  633. package/src/commands/module/list.test.ts +0 -57
  634. package/src/commands/module/list.ts +0 -64
  635. package/src/commands/scaffold.ts +0 -176
  636. /package/src/modules/{accounting → audit/db}/.gitkeep +0 -0
  637. /package/src/modules/audit/{.gitkeep → executor/.gitkeep} +0 -0
  638. /package/src/modules/{coa-management/.gitkeep → audit/lib/errors.ts} +0 -0
  639. /package/src/modules/{supplier-management → business-partner}/.gitkeep +0 -0
@@ -2,44 +2,34 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- SetBaseCurrency changes the organization's base currency to a different active currency. The base currency serves as the default for financial reporting, consolidation, and serves as the reference point for exchange rate conversions. This command supports scenarios such as corporate restructuring or relocating headquarters to a different country.
5
+ **Deprecated.** Base currency assignment is per company and owned by the organization module's company lifecycle. The primitives module owns the currency catalog but does not manage base currency designation. New implementations should use the organization module's company-level base currency assignment instead of this command.
6
+
7
+ Previously, SetBaseCurrency changed a single organization-wide base currency. This model has been replaced by per-company base currency assignment in the organization module, which correctly supports multi-company deployments where each legal entity may have a different functional currency.
6
8
 
7
9
  ## Business Rules
8
10
 
9
- - Target currency must exist in the system
10
- - Target currency must be in Active status
11
- - Only one currency can be base currency at a time
12
- - Setting the current base currency as base returns success with no change
13
- - Previous base currency remains active but loses base currency designation
14
- - Exchange rates may need to be recalculated or new rates added after changing base currency
11
+ - This command is deprecated and must not be used in new implementations
12
+ - Base currency assignment is per company, owned by the organization module
13
+ - The primitives module provides the currency catalog; it does not designate a global base currency
14
+ - Deactivation of a currency is blocked if any company references it as base currency (cross-module invariant with organization)
15
15
 
16
16
  ## Process Flow
17
17
 
18
18
  ```mermaid
19
19
  flowchart TD
20
- A[Receive set base request] --> B{Currency exists?}
21
- B -->|No| C[Return error: not found]
22
- B -->|Yes| D{Currency active?}
23
- D -->|No| E[Return error: cannot set inactive currency as base]
24
- D -->|Yes| F{Already base currency?}
25
- F -->|Yes| G[Return success: no change needed]
26
- F -->|No| H[Remove base flag from current base]
27
- H --> I[Set base flag on target currency]
28
- I --> J[Return updated currency]
20
+ A[SetBaseCurrency called] --> B[Return deprecation error]
21
+ B --> C[Caller should use organization module company-level base currency assignment]
29
22
  ```
30
23
 
31
24
  ## External Dependencies
32
25
 
33
- - None
26
+ - [organization](../../../organization/README.md) — Owns per-company base currency assignment
34
27
 
35
28
  ## Error Scenarios
36
29
 
37
- - **CURRENCY_NOT_FOUND**: Specified currency ID does not exist
38
- - **CANNOT_SET_INACTIVE_AS_BASE_CURRENCY**: Target currency is not in Active status, must be activated first
30
+ - **SET_BASE_CURRENCY_DEPRECATED**: This command is deprecated; use the organization module's company-level base currency assignment
39
31
 
40
32
  ## Test Cases
41
33
 
42
- - throws when currency doesn
43
- - throws when currency is inactive
44
- - returns currency unchanged when already base
45
- - changes base currency
34
+ - Calling SetBaseCurrency returns a deprecation error directing the caller to the organization module
35
+ - No currency is modified when SetBaseCurrency is invoked
@@ -43,7 +43,7 @@ flowchart TD
43
43
 
44
44
  ## Test Cases
45
45
 
46
- - throws when unit doesn
46
+ - throws when unit doesn't exist
47
47
  - throws when unit is not in specified category
48
48
  - returns category unchanged when unit is already reference
49
49
  - changes reference unit and recalculates conversion factors
@@ -2,7 +2,9 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- Currency Definitions establish the monetary units available for use across the ERP system. Each currency record contains the ISO 4217 code, display symbol, name, and decimal precision. One currency is designated as the base currency for the organization, serving as the default for reporting and consolidation.
5
+ Currency Definitions establish the monetary units available for use across the ERP system. Each currency record contains the ISO 4217 code, display symbol, name, and decimal precision. The primitives module owns the **currency master data** — the catalog of available currencies, their metadata, and exchange rates.
6
+
7
+ In a multi-company setup, each company assigns one of these currencies as its **base/functional currency** via the organization module's company record. The primitives module does not own the company→currency mapping; it provides the currency catalog that organization references. There is no global "base currency" concept at the primitives level — base currency assignment is always per company, owned by the organization module.
6
8
 
7
9
  This feature provides the foundation for all multi-currency operations in sales, purchasing, and accounting.
8
10
 
@@ -21,20 +23,18 @@ Currency definitions ensure consistent monetary handling across all business ope
21
23
 
22
24
  ```mermaid
23
25
  flowchart TD
24
- A[Define Currency] --> B{Is First Currency?}
25
- B -->|Yes| C[Set as Base Currency]
26
- B -->|No| D[Add to Available Currencies]
27
- C --> E[Currency Active]
28
- D --> E
29
- E --> F[Available for Transactions]
30
- F --> G[Products Can Set Prices]
31
- F --> H[Orders Can Use Currency]
32
- F --> I[Exchange Rates Can Reference]
26
+ A[Define Currency] --> B[Add to Currency Catalog]
27
+ B --> C[Currency Active]
28
+ C --> D[Available for Transactions]
29
+ D --> E[Products Can Set Prices]
30
+ D --> F[Orders Can Use Currency]
31
+ D --> G[Exchange Rates Can Reference]
32
+ D --> H[Companies Can Assign as Base Currency]
33
33
  ```
34
34
 
35
35
  ## Scenario Patterns
36
36
 
37
- - **Initial Setup**: Administrator defines base currency (e.g., USD) and common trading currencies (EUR, GBP, JPY) during system initialization
37
+ - **Initial Setup**: Administrator defines common currencies (e.g., USD, EUR, GBP, JPY) in the currency catalog during system initialization. Base currency assignment is performed per company via the organization module
38
38
  - **Market Expansion**: Business enters new market and adds local currency (e.g., BRL for Brazil expansion)
39
39
  - **Currency Deactivation**: Obsolete currency (e.g., legacy national currency replaced by EUR) is deactivated to prevent new transactions while preserving historical data
40
40
  - **Precision Configuration**: Cryptocurrency or precious metal tracking requires higher decimal precision than standard currencies
@@ -43,9 +43,8 @@ flowchart TD
43
43
 
44
44
  - Creating a currency with valid ISO 4217 code should succeed
45
45
  - Currency codes must be unique (no duplicate USD)
46
- - First currency created should automatically become base currency
47
- - Changing base currency should be allowed only with proper authorization
48
- - Deactivating the base currency should be prevented
46
+ - The primitives module does not designate a global base currency; base currency assignment is per company and owned by the organization module
47
+ - A currency that is assigned as base currency by any company cannot be deactivated (enforced via cross-module check with the organization module)
49
48
  - Currency with active transactions should not be deletable (only deactivatable)
50
49
  - Decimal places must be non-negative integer (0-4 typical range)
51
50
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Description
4
4
 
5
- Currency defines a monetary unit available for use across the ERP system. Each currency contains the ISO 4217 code, display symbol, name, and decimal precision. One currency is designated as the base currency for the organization, serving as the default for reporting and consolidation.
5
+ Currency defines a monetary unit available for use across the ERP system. Each currency contains the ISO 4217 code, display symbol, name, and decimal precision. The primitives module owns the currency catalog; base/functional currency assignment is per company and owned by the organization module.
6
6
 
7
7
  Examples: USD (US Dollar), EUR (Euro), JPY (Japanese Yen).
8
8
 
@@ -19,7 +19,7 @@ stateDiagram-v2
19
19
  [*] --> Active: create
20
20
  Active --> Inactive: deactivate
21
21
  Inactive --> Active: activate
22
- note right of Active: Base currency cannot be deactivated
22
+ note right of Active: Currency assigned as base currency by any company cannot be deactivated
23
23
  ```
24
24
 
25
25
  ### Command Definitions
@@ -40,8 +40,7 @@ stateDiagram-v2
40
40
  ### Invariants
41
41
 
42
42
  - ISO 4217 code must be unique across all currencies
43
- - Only one currency can be designated as base currency
44
- - Base currency cannot be deactivated
43
+ - A currency assigned as base currency by any company (via the organization module) cannot be deactivated
45
44
 
46
45
  ### Relationships
47
46
 
@@ -49,8 +49,8 @@ flowchart TD
49
49
 
50
50
  ## Test Cases
51
51
 
52
- - returns error when source currency doesn
53
- - returns error when target currency doesn
52
+ - returns error when source currency doesn't exist
53
+ - returns error when target currency doesn't exist
54
54
  - returns error when source currency is inactive
55
55
  - returns error when target currency is inactive
56
56
  - returns error when no exchange rate exists for the currency pair
@@ -42,8 +42,8 @@ flowchart TD
42
42
 
43
43
  ## Test Cases
44
44
 
45
- - returns error when source unit doesn
46
- - returns error when target unit doesn
45
+ - returns error when source unit doesn't exist
46
+ - returns error when target unit doesn't exist
47
47
  - returns error when source unit is inactive
48
48
  - returns error when target unit is inactive
49
49
  - returns error when units belong to different categories
@@ -110,3 +110,8 @@ export const InactiveUnitError = createDomainError(
110
110
  "InactiveUnitError", "PRIMITIVES_INACTIVE_UNIT",
111
111
  (identifier: string) => `Either source or target unit is inactive: ${identifier}`,
112
112
  );
113
+
114
+ export const SetBaseCurrencyDeprecatedError = createDomainError(
115
+ "SetBaseCurrencyDeprecatedError", "PRIMITIVES_SET_BASE_CURRENCY_DEPRECATED",
116
+ (_identifier: string) => `SetBaseCurrency is deprecated; use the organization module's company-level base currency assignment`,
117
+ );
@@ -31,7 +31,7 @@ The Product Management module serves as the Product Information Management (PIM)
31
31
  - Channel/marketplace definitions and listing management (sales-channel module)
32
32
  - Inventory tracking and stock levels (inventory module)
33
33
  - Product images and digital asset management
34
- - Supplier-specific product information (supplier-management module)
34
+ - Supplier-specific product information (business-partner module)
35
35
  - Bill of Materials (manufacturing module)
36
36
 
37
37
  ### Scope Decision Rationale
@@ -11,16 +11,16 @@ Permissions are assigned to roles, which are then assigned to users. This indire
11
11
  - Permission key must follow `resource:action` format (lowercase letters, colon separator)
12
12
  - Permission key must be unique across all permissions
13
13
  - Description is optional but recommended for clarity
14
- - Generates PERMISSION_ASSIGNED audit event when assigned to a role (via assignPermissionToRole)
14
+ - Permission assignment to roles is handled by AssignPermissionToRole command
15
15
 
16
16
  ## Process Flow
17
17
 
18
18
  ```mermaid
19
19
  flowchart TD
20
20
  A[Receive create request] --> B{Validate key format}
21
- B -->|Invalid| C[Return error: INVALID_KEY_FORMAT]
21
+ B -->|Invalid| C[Return error: INVALID_PERMISSION_KEY_FORMAT]
22
22
  B -->|Valid| D{Key unique?}
23
- D -->|No| E[Return error: PERMISSION_ALREADY_EXISTS]
23
+ D -->|No| E[Return error: DUPLICATE_PERMISSION_KEY]
24
24
  D -->|Yes| F[Create permission record]
25
25
  F --> G[Return created permission]
26
26
  ```
@@ -20,7 +20,7 @@ flowchart TD
20
20
  A[Receive create request] --> B{Name provided?}
21
21
  B -->|No| C[Return error: MISSING_REQUIRED_FIELD]
22
22
  B -->|Yes| D{Name unique?}
23
- D -->|No| E[Return error: ROLE_ALREADY_EXISTS]
23
+ D -->|No| E[Return error: DUPLICATE_ROLE_NAME]
24
24
  D -->|Yes| F[Create role record]
25
25
  F --> G[Return created role]
26
26
  ```
@@ -0,0 +1,39 @@
1
+ # ListRolePermissionsByRole
2
+
3
+ ## Overview
4
+
5
+ ListRolePermissionsByRole retrieves all permissions assigned to a specific role. This query supports the permission check flow in RBAC, where after resolving a user's roles, the system resolves each role's permissions to determine whether the user has the required permission for an action.
6
+
7
+ ## Business Rules
8
+
9
+ - Accepts a roleId as input
10
+ - Returns all Permission records associated with the role via RolePermission join records
11
+ - Returns an empty array when the role has no permission assignments — not an error
12
+ - The role must exist; a non-existent roleId returns an error
13
+
14
+ ## Process Flow
15
+
16
+ ```mermaid
17
+ flowchart TD
18
+ A[Receive roleId] --> B{Role exists?}
19
+ B -->|No| C[Return error: ROLE_NOT_FOUND]
20
+ B -->|Yes| D[SELECT permissions via RolePermission where roleId = input]
21
+ D --> E{Any permissions found?}
22
+ E -->|Yes| F[Return permission records]
23
+ E -->|No| G[Return empty array]
24
+ ```
25
+
26
+ ## External Dependencies
27
+
28
+ - None
29
+
30
+ ## Error Scenarios
31
+
32
+ - **ROLE_NOT_FOUND**: Specified roleId does not exist
33
+
34
+ ## Test Cases
35
+
36
+ - returns all permissions assigned to role
37
+ - returns empty array when role has no permissions
38
+ - returns error when roleId does not exist
39
+ - returns multiple permissions when role has multiple permission assignments
@@ -0,0 +1,39 @@
1
+ # ListUserRolesByUser
2
+
3
+ ## Overview
4
+
5
+ ListUserRolesByUser retrieves all roles assigned to a specific user. This query supports the permission check flow in RBAC, where the system first resolves a user's roles, then resolves the permissions attached to those roles to determine whether the user has a required permission.
6
+
7
+ ## Business Rules
8
+
9
+ - Accepts a userId as input
10
+ - Returns all Role records associated with the user via UserRole join records
11
+ - Returns an empty array when the user has no role assignments — not an error
12
+ - The user must exist; a non-existent userId returns an error
13
+
14
+ ## Process Flow
15
+
16
+ ```mermaid
17
+ flowchart TD
18
+ A[Receive userId] --> B{User exists?}
19
+ B -->|No| C[Return error: USER_NOT_FOUND]
20
+ B -->|Yes| D[SELECT roles via UserRole where userId = input]
21
+ D --> E{Any roles found?}
22
+ E -->|Yes| F[Return role records]
23
+ E -->|No| G[Return empty array]
24
+ ```
25
+
26
+ ## External Dependencies
27
+
28
+ - None
29
+
30
+ ## Error Scenarios
31
+
32
+ - **USER_NOT_FOUND**: Specified userId does not exist
33
+
34
+ ## Test Cases
35
+
36
+ - returns all roles assigned to user
37
+ - returns empty array when user has no roles
38
+ - returns error when userId does not exist
39
+ - returns multiple roles when user has multiple role assignments
@@ -1,18 +1,3 @@
1
- /**
2
- * Type of audit event
3
- */
4
- export const AuditEventEventType = {
5
- "USER_CREATED": "USER_CREATED",
6
- "USER_ACTIVATED": "USER_ACTIVATED",
7
- "USER_DEACTIVATED": "USER_DEACTIVATED",
8
- "USER_REACTIVATED": "USER_REACTIVATED",
9
- "ROLE_ASSIGNED": "ROLE_ASSIGNED",
10
- "ROLE_REVOKED": "ROLE_REVOKED",
11
- "PERMISSION_ASSIGNED": "PERMISSION_ASSIGNED",
12
- "PERMISSION_REVOKED": "PERMISSION_REVOKED"
13
- } as const;
14
- export type AuditEventEventType = (typeof AuditEventEventType)[keyof typeof AuditEventEventType];
15
-
16
1
  /**
17
2
  * User status
18
3
  */
@@ -13,17 +13,6 @@ import {
13
13
 
14
14
  export interface Namespace {
15
15
  "main-db": {
16
- AuditEvent: {
17
- id: Generated<string>;
18
- eventType: "USER_CREATED" | "USER_ACTIVATED" | "USER_DEACTIVATED" | "USER_REACTIVATED" | "ROLE_ASSIGNED" | "ROLE_REVOKED" | "PERMISSION_ASSIGNED" | "PERMISSION_REVOKED";
19
- actorId: string;
20
- targetId: string | null;
21
- targetType: string | null;
22
- payload: string | null;
23
- createdAt: Generated<Timestamp>;
24
- updatedAt: Timestamp | null;
25
- }
26
-
27
16
  Permission: {
28
17
  id: Generated<string>;
29
18
  key: string;
@@ -3,7 +3,7 @@ import type { CommandContext } from "./types";
3
3
  interface ResolverContext {
4
4
  user: {
5
5
  id: string;
6
- attributes: { permissions?: string[] } | null;
6
+ attributes: { permissions?: string[]; companyId?: string | null } | null;
7
7
  };
8
8
  }
9
9
 
@@ -11,5 +11,6 @@ export function createContext(context: ResolverContext): CommandContext {
11
11
  return {
12
12
  actorId: context.user.id,
13
13
  permissions: [...new Set(context.user.attributes?.permissions ?? [])],
14
+ companyId: context.user.attributes?.companyId,
14
15
  };
15
16
  }
@@ -1,4 +1,7 @@
1
1
  import type { QueryContext } from "./types";
2
+ import type { Result } from "./result";
3
+ import { requirePermission } from "./requirePermission";
4
+ import type { InsufficientPermissionError } from "./errors";
2
5
 
3
6
  export type Query<TInput, TResult> = (
4
7
  db: unknown,
@@ -6,10 +9,42 @@ export type Query<TInput, TResult> = (
6
9
  ctx: QueryContext,
7
10
  ) => Promise<TResult>;
8
11
 
12
+ type QueryResult<TReturn> =
13
+ TReturn extends Result<infer _V, infer _E>
14
+ ? TReturn | Result<never, InstanceType<typeof InsufficientPermissionError>>
15
+ : TReturn;
16
+
17
+ // Overload: no permission
18
+ export function defineQuery<TInput, TResult>(
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ impl: (db: any, input: TInput, ctx: QueryContext) => Promise<TResult>,
21
+ ): Query<TInput, TResult>;
22
+
23
+ // Overload: with permission
9
24
  export function defineQuery<TInput, TResult>(
25
+ permission: string,
10
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
27
  impl: (db: any, input: TInput, ctx: QueryContext) => Promise<TResult>,
12
- ): Query<TInput, TResult> {
28
+ ): Query<TInput, QueryResult<TResult>>;
29
+
30
+ // Implementation
31
+ export function defineQuery<TInput, TResult>(
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ permissionOrImpl: string | ((db: any, input: TInput, ctx: QueryContext) => Promise<TResult>),
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ maybeImpl?: (db: any, input: TInput, ctx: QueryContext) => Promise<TResult>,
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ ): Query<TInput, any> {
38
+ if (typeof permissionOrImpl === "string") {
39
+ const permission = permissionOrImpl;
40
+ const impl = maybeImpl!;
41
+ return async (db, input, ctx) => {
42
+ const check = requirePermission(ctx, permission);
43
+ if (!check.ok) return check;
44
+ return impl(db, input, ctx);
45
+ };
46
+ }
47
+ const impl = permissionOrImpl;
13
48
  return async (db, input, ctx) => {
14
49
  return impl(db, input, ctx);
15
50
  };
@@ -1,13 +1,13 @@
1
- import type { CommandContext } from "./types";
1
+ import type { CommandContext, QueryContext } from "./types";
2
2
  import type { Result } from "./result";
3
3
  import { InsufficientPermissionError } from "./errors";
4
4
  import { ok, err } from "./result";
5
5
 
6
6
  export function requirePermission(
7
- ctx: CommandContext,
7
+ ctx: CommandContext | QueryContext,
8
8
  key: string,
9
9
  ): Result<void, InstanceType<typeof InsufficientPermissionError>> {
10
- if (!ctx.permissions.includes(key)) {
10
+ if (!ctx.permissions?.includes(key)) {
11
11
  return err(new InsufficientPermissionError(ctx.actorId, key));
12
12
  }
13
13
  return ok(undefined);
@@ -1,10 +1,13 @@
1
1
  export interface QueryContext {
2
2
  actorId: string;
3
+ permissions?: readonly string[];
4
+ companyId?: string | null;
3
5
  }
4
6
 
5
7
  export interface CommandContext {
6
8
  actorId: string;
7
9
  permissions: readonly string[];
10
+ companyId?: string | null;
8
11
  }
9
12
 
10
13
  // Strips write methods (updateTable, insertInto, deleteFrom) from a Kysely DB instance.
@@ -15,16 +15,17 @@
15
15
  "dependencies": {
16
16
  "@tailor-platform/erp-kit": "workspace:*",
17
17
  "@tailor-platform/function-kysely-tailordb": "0.1.3",
18
- "@tailor-platform/sdk": "1.25.1",
19
- "kysely": "0.28.10"
18
+ "@tailor-platform/sdk": "1.25.2",
19
+ "kysely": "0.28.11"
20
20
  },
21
21
  "devDependencies": {
22
- "@eslint/js": "9.39.4",
23
- "@tailor-platform/function-types": "0.8.1",
24
- "@types/node": "24.10.9",
25
- "eslint": "9.39.4",
22
+ "@eslint/js": "10.0.1",
23
+ "@tailor-platform/function-types": "0.8.2",
24
+ "@types/node": "24.12.0",
25
+ "@typescript-eslint/parser": "^8.57.0",
26
+ "eslint": "10.0.3",
26
27
  "eslint-import-resolver-typescript": "4.4.4",
27
- "eslint-plugin-import-x": "4.16.1",
28
+ "eslint-plugin-import-x": "4.16.2",
28
29
  "typescript": "5.9.3",
29
30
  "typescript-eslint": "8.57.0"
30
31
  }
@@ -31,6 +31,18 @@ export default defineConfig([
31
31
  rules: {
32
32
  "import-x/order": "error",
33
33
  "import-x/no-unresolved": ["error", { ignore: ["^@tailor-platform/"] }],
34
+ "no-restricted-imports": [
35
+ "error",
36
+ {
37
+ paths: [
38
+ {
39
+ name: "@tailor-platform/app-shell",
40
+ importNames: ["useToast"],
41
+ message: "Import useToast from '@/hooks/use-toast' instead.",
42
+ },
43
+ ],
44
+ },
45
+ ],
34
46
  },
35
47
  },
36
48
  {
@@ -7,6 +7,7 @@
7
7
  "dev": "vite",
8
8
  "preview": "vite preview",
9
9
  "generate": "node --env-file=.env ./scripts/generate-graphql.mjs",
10
+ "gql-tada:check": "gql-tada check -c tsconfig.app.json",
10
11
  "lint": "eslint .",
11
12
  "lint:fix": "eslint --fix .",
12
13
  "typecheck": "tsc --noEmit"
@@ -19,35 +20,37 @@
19
20
  "class-variance-authority": "0.7.1",
20
21
  "clsx": "2.1.1",
21
22
  "gql.tada": "1.9.0",
22
- "lucide-react": "0.563.0",
23
+ "lucide-react": "0.577.0",
23
24
  "react": "19.2.4",
24
25
  "react-dom": "19.2.4",
25
- "react-hook-form": "7.71.1",
26
- "tailwind-merge": "3.4.0",
26
+ "react-hook-form": "7.71.2",
27
+ "tailwind-merge": "3.5.0",
27
28
  "urql": "5.0.1",
28
29
  "zod": "4.3.6"
29
30
  },
30
31
  "devDependencies": {
31
- "@eslint/js": "9.39.4",
32
+ "@eslint/js": "10.0.1",
33
+ "@rolldown/plugin-babel": "0.2.1",
32
34
  "@tailor-platform/app-shell-vite-plugin": "0.1.0",
33
- "@tailwindcss/vite": "4.1.18",
34
- "@types/node": "25.1.0",
35
- "@types/react": "19.2.10",
35
+ "@tailwindcss/vite": "4.2.1",
36
+ "@types/node": "25.5.0",
37
+ "@types/react": "19.2.14",
36
38
  "@types/react-dom": "19.2.3",
37
- "@vitejs/plugin-react": "5.1.2",
39
+ "@typescript-eslint/parser": "^8.57.0",
40
+ "@vitejs/plugin-react": "6.0.1",
38
41
  "babel-plugin-react-compiler": "1.0.0",
39
- "eslint": "9.39.4",
42
+ "eslint": "10.0.3",
40
43
  "eslint-import-resolver-typescript": "4.4.4",
41
- "eslint-plugin-import-x": "4.16.1",
42
- "eslint-plugin-react-dom": "2.13.0",
44
+ "eslint-plugin-import-x": "4.16.2",
45
+ "eslint-plugin-react-dom": "3.0.0",
43
46
  "eslint-plugin-react-hooks": "7.0.1",
44
- "eslint-plugin-react-x": "2.13.0",
45
- "globals": "17.2.0",
46
- "shadcn": "^3.8.4",
47
- "tailwindcss": "4.1.18",
47
+ "eslint-plugin-react-x": "3.0.0",
48
+ "globals": "17.4.0",
49
+ "shadcn": "^4.0.0",
50
+ "tailwindcss": "4.2.1",
48
51
  "tw-animate-css": "1.4.0",
49
52
  "typescript": "5.9.3",
50
53
  "typescript-eslint": "8.57.0",
51
- "vite": "7.3.1"
54
+ "vite": "8.0.0"
52
55
  }
53
56
  }
@@ -0,0 +1,30 @@
1
+ // eslint-disable-next-line no-restricted-imports -- this is the wrapper itself
2
+ import { useToast as useBaseToast } from "@tailor-platform/app-shell";
3
+ import type { CombinedError } from "urql";
4
+
5
+ // Extract a human-readable error message from a urql CombinedError.
6
+ // Backend resolver errors are wrapped as "rpc error: code = ... desc = Error: <message>"
7
+ // inside extensions.attr.error. This function extracts <message> when available.
8
+ function getErrorMessage(error: CombinedError): string {
9
+ const gqlError = error.graphQLErrors[0];
10
+ const attrError = (gqlError?.extensions as Record<string, Record<string, string>> | undefined)
11
+ ?.attr?.error;
12
+ if (attrError) {
13
+ const match = /desc = Error: (.+?)(?:\n|$)/.exec(attrError);
14
+ if (match) return match[1];
15
+ }
16
+ return error.message;
17
+ }
18
+
19
+ // Wraps useToast so that toast.error() accepts a CombinedError directly
20
+ // and automatically extracts the human-readable message.
21
+ export function useToast() {
22
+ const toast = useBaseToast();
23
+ return {
24
+ ...toast,
25
+ error: (error: string | CombinedError) => {
26
+ const message = typeof error === "string" ? error : getErrorMessage(error);
27
+ toast.error(message);
28
+ },
29
+ };
30
+ }
@@ -1,9 +1,10 @@
1
- import { useNavigate, useToast } from "@tailor-platform/app-shell";
1
+ import { useNavigate } from "@tailor-platform/app-shell";
2
2
  import { useMutation } from "urql";
3
3
  import { useForm } from "react-hook-form";
4
4
  import { zodResolver } from "@hookform/resolvers/zod";
5
5
  import { z } from "zod";
6
6
  import { graphql } from "@/graphql";
7
+ import { useToast } from "@/hooks/use-toast";
7
8
  import { Button } from "@/components/ui/button";
8
9
  import { Input } from "@/components/ui/input";
9
10
  import {
@@ -46,7 +47,7 @@ export const CreateUserForm = () => {
46
47
  const onSubmit = (values: FormValues) => {
47
48
  void createUser(values, { additionalTypenames: ["User"] }).then((result) => {
48
49
  if (result.error) {
49
- toast.error(result.error.message);
50
+ toast.error(result.error);
50
51
  return;
51
52
  }
52
53
  toast.success("User created successfully");
@@ -1,16 +1,16 @@
1
1
  import path from "node:path";
2
2
  import tailwindcss from "@tailwindcss/vite";
3
- import react from "@vitejs/plugin-react";
3
+ import react, { reactCompilerPreset } from "@vitejs/plugin-react";
4
+ import babel from "@rolldown/plugin-babel";
4
5
  import { appShellRoutes } from "@tailor-platform/app-shell-vite-plugin";
5
6
  import { defineConfig } from "vite";
6
7
 
7
8
  // https://vite.dev/config/
8
9
  export default defineConfig({
9
10
  plugins: [
10
- react({
11
- babel: {
12
- plugins: [["babel-plugin-react-compiler"]],
13
- },
11
+ react(),
12
+ babel({
13
+ presets: [reactCompilerPreset()],
14
14
  }),
15
15
  tailwindcss(),
16
16
  appShellRoutes(),