@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
@@ -57,11 +57,25 @@ After ALL agents return:
57
57
  3. Merge all `inconsistencies[]` arrays into a single list
58
58
  4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
59
59
  5. Calculate totals across all summaries
60
- 6. Render the final report below
61
60
 
62
- ## Report Format
61
+ ## Step 4: Severity Validation
63
62
 
64
- Render the aggregated results as markdown:
63
+ Subagents tend to over-classify. Before rendering the report, re-evaluate every non-pass finding:
64
+
65
+ - **"Is this a real gap or a design choice?"** — If the feature intentionally omits a command/query/model (e.g., handled by another module, deferred to a later phase, or covered by a generic mechanism), drop it from the report
66
+ - **"Does the feature doc explicitly require this?"** — Only flag gaps for capabilities the feature doc actually specifies. Do not invent requirements the feature does not mention
67
+ - **"Does this block implementation?"** → `critical`
68
+ - **"Will this cause rework during implementation?"** → `major`
69
+ - All no → `nit`, regardless of subagent label
70
+
71
+ ## Step 5: Determine Verdict
72
+
73
+ - **APPROVED**: zero `critical` and zero `major` findings (nits only, or all pass)
74
+ - **NEEDS CHANGES**: one or more `critical` or `major` findings
75
+
76
+ ## Step 6: Render Report
77
+
78
+ Render the aggregated results as markdown (after severity validation):
65
79
 
66
80
  ### Feature Parity Review Report
67
81
 
@@ -146,11 +160,20 @@ Render the aggregated results as markdown:
146
160
 
147
161
  ### 8. Recommendations
148
162
 
149
- Numbered list of actionable fixes, grouped by priority:
163
+ Numbered list of actionable fixes, grouped by severity:
164
+
165
+ 1. `critical` — missing required docs, fundamental parity gaps (must fix)
166
+ 2. `major` — missing business rules, incomplete error scenarios (should fix)
167
+ 3. `nit` — minor naming inconsistencies, optional improvements (informational only)
168
+
169
+ ### 9. Verdict
170
+
171
+ **Verdict: APPROVED / NEEDS CHANGES**
172
+
173
+ - If APPROVED with nits: "Review passed. The following nits are informational and do not block progress:" followed by the nit list.
174
+ - If NEEDS CHANGES: "Review requires changes. Fix all critical and major issues, then re-run the review."
150
175
 
151
- 1. Create missing docs (highest priority)
152
- 2. Add missing business rules / error scenarios
153
- 3. Resolve inconsistencies
176
+ Severity counts: `critical: N, major: N, nit: N`
154
177
 
155
178
  ## References
156
179
 
@@ -50,3 +50,18 @@ Cross-cutting issues found during the check that don't fit a single gap entry (e
50
50
  ### summary
51
51
 
52
52
  Aggregate counts. `total_checks = passed + failed + skipped`.
53
+
54
+ ## Router-Level Severity and Verdict
55
+
56
+ The router (SKILL.md Step 3) assigns severity to each non-pass finding after collecting all agent results. Agents do NOT assign severity — they only report `status` and `detail`.
57
+
58
+ The router classifies each finding as:
59
+
60
+ - `critical`: blocks progress — missing required doc, fundamental design mismatch
61
+ - `major`: should fix — incomplete coverage, unclear mapping, missing business rules
62
+ - `nit`: nice to have — minor naming inconsistency, optional doc improvement, cosmetic issue
63
+
64
+ Verdict rule:
65
+
66
+ - `APPROVED`: zero `critical` and zero `major` findings (nits only, or all pass)
67
+ - `NEEDS_CHANGES`: one or more `critical` or `major` findings
@@ -59,7 +59,14 @@ After ALL agents return:
59
59
  3. Merge all `inconsistencies[]` arrays into a single list
60
60
  4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
61
61
  5. Calculate totals across all summaries
62
- 6. Render the final report below
62
+ 6. **Classify severity** — for each non-pass gap and inconsistency, the router assigns a severity based on the finding's `check`, `status`, and `detail`:
63
+ - `critical`: missing implementation of documented feature, broken doc-code contract — blocks progress
64
+ - `major`: incomplete implementation, missing test case for documented business rule — should fix
65
+ - `nit`: minor naming difference, optional JSDoc, cosmetic issue — does NOT block the review
66
+ 7. **Determine verdict**:
67
+ - **APPROVED**: zero `critical` and zero `major` findings (nits only, or all pass)
68
+ - **NEEDS CHANGES**: one or more `critical` or `major` findings
69
+ 8. Render the final report below
63
70
 
64
71
  ## Report Format
65
72
 
@@ -171,13 +178,20 @@ Render the aggregated results as markdown:
171
178
 
172
179
  ### 10. Recommendations
173
180
 
174
- Numbered list of actionable fixes, grouped by priority:
181
+ Numbered list of actionable fixes, grouped by severity:
175
182
 
176
- 1. Add missing model fields/states (highest priority)
177
- 2. Implement missing business rules
178
- 3. Define missing error classes (re-run `erp-kit module generate code -p <path>`)
179
- 4. Add missing test cases
180
- 5. Fix inconsistencies
183
+ 1. `critical` missing model fields/states, broken doc-code contract (must fix)
184
+ 2. `major` missing business rules, incomplete test coverage (should fix)
185
+ 3. `nit` minor naming differences, optional JSDoc, cosmetic issues (informational only)
186
+
187
+ ### 11. Verdict
188
+
189
+ **Verdict: APPROVED / NEEDS CHANGES**
190
+
191
+ - If APPROVED with nits: "Review passed. The following nits are informational and do not block progress:" followed by the nit list.
192
+ - If NEEDS CHANGES: "Review requires changes. Fix all critical and major issues, then re-run the review."
193
+
194
+ Severity counts: `critical: N, major: N, nit: N`
181
195
 
182
196
  ## References
183
197
 
@@ -50,3 +50,18 @@ Cross-cutting issues found during the check that don't fit a single gap entry (e
50
50
  ### summary
51
51
 
52
52
  Aggregate counts. `total_checks = passed + failed + skipped`.
53
+
54
+ ## Router-Level Severity and Verdict
55
+
56
+ The router (SKILL.md Step 3) assigns severity to each non-pass finding after collecting all agent results. Agents do NOT assign severity — they only report `status` and `detail`.
57
+
58
+ The router classifies each finding as:
59
+
60
+ - `critical`: blocks progress — missing implementation of documented feature, broken contract between doc and code
61
+ - `major`: should fix — incomplete implementation, missing test case for documented business rule
62
+ - `nit`: nice to have — minor naming difference, optional JSDoc improvement, cosmetic code style issue
63
+
64
+ Verdict rule:
65
+
66
+ - `APPROVED`: zero `critical` and zero `major` findings (nits only, or all pass)
67
+ - `NEEDS_CHANGES`: one or more `critical` or `major` findings
@@ -7,6 +7,10 @@ description: Shared references for erp-kit module skills. Not invoked directly
7
7
 
8
8
  Canonical reference files shared across module skills. Individual skills reference these instead of maintaining their own copies.
9
9
 
10
+ ## Design Philosophy
11
+
12
+ Modules are intentionally simple. Each module is a thin layer of domain logic over the database — avoid introducing unnecessary abstractions, deep inheritance hierarchies, or complex patterns. Over-engineering is actively harmful: it makes modules harder to understand, test, and maintain. When in doubt, choose the straightforward approach. A few lines of duplicated code is better than a premature abstraction.
13
+
10
14
  ## References
11
15
 
12
16
  - [Module structure](references/structure.md)
@@ -177,7 +177,7 @@ const units = await db
177
177
 
178
178
  ## Implementation Considerations
179
179
 
180
- - **Error handling**: Use `ok()` / `err()` from `shared` — do not throw
180
+ - **Error handling**: Use `ok()` / `err()` from `@tailor-platform/erp-kit/module` — do not throw
181
181
  - **Validation**: Check referenced entities exist before operating, return `err()` if not found
182
182
 
183
183
  ## Conventions
@@ -8,8 +8,8 @@ Run `erp-kit module generate code -p <path>` to generate query shells from `docs
8
8
 
9
9
  ```typescript
10
10
  // @generated — do not edit
11
- import { defineQuery } from "../../../shared";
12
11
  import { run } from "./getItem";
12
+ import { defineQuery } from "@tailor-platform/erp-kit/module";
13
13
 
14
14
  export const getItem = defineQuery(run);
15
15
  ```
@@ -17,9 +17,8 @@ export const getItem = defineQuery(run);
17
17
  ### Hand-written implementation
18
18
 
19
19
  ```typescript
20
- import type { ReadonlyDB } from "../../../shared";
21
- import { ok } from "../../../shared";
22
20
  import type { DB } from "../generated/kysely-tailordb";
21
+ import { ok, type ReadonlyDB } from "@tailor-platform/erp-kit/module";
23
22
 
24
23
  export type GetItemInput = { id: string } | { sku: string };
25
24
 
@@ -45,7 +44,7 @@ For queries beyond simple lookups (joins, aggregations, complex filters), write
45
44
 
46
45
  - `defineQuery` wraps all queries via generated shells
47
46
  - `ReadonlyDB<DB>` ensures read-only access
48
- - All queries return Result types using `ok()` / `err()` from `shared` — consistent with commands
47
+ - All queries return Result types using `ok()` / `err()` from `@tailor-platform/erp-kit/module` — consistent with commands
49
48
  - Get queries return `ok({ entity: T | null })` using `executeTakeFirst()`
50
49
  - List queries return `ok(PaginatedResult<T>)` using pagination utilities — see [Paginated List Queries](#paginated-list-queries)
51
50
  - Input types: `type` for union inputs (get), `interface` for single-shape inputs (list)
@@ -81,14 +80,14 @@ interface PaginatedResult<T> {
81
80
  3. Use `buildPaginatedResult(rows, limit)` to build the response — the limit+1 strategy determines `hasNextPage` without a separate count query
82
81
 
83
82
  ```typescript
83
+ import type { DB } from "../generated/kysely-tailordb";
84
84
  import {
85
85
  ok,
86
86
  type ReadonlyDB,
87
87
  type PaginationInput,
88
88
  buildPaginatedResult,
89
89
  DEFAULT_PAGE_SIZE,
90
- } from "../../../shared";
91
- import type { DB } from "../generated/kysely-tailordb";
90
+ } from "@tailor-platform/erp-kit/module";
92
91
 
93
92
  // Define sortable fields for this query
94
93
  type UnitOrderByField = "name" | "symbol" | "createdAt";
@@ -4,8 +4,9 @@ import { defineCommand, arg } from "politty";
4
4
  import { runCheck } from "../check";
5
5
  import { runSyncCheck, formatSyncCheckReport } from "../sync-check";
6
6
  import { runGenerateDoc, APP_DOC_TYPES, type DocType } from "../generate-doc";
7
- import { runGenerateAppCode } from "../../generator/generate-code";
7
+ import { runGenerateAppCode } from "../../generator/generate-app-code";
8
8
  import { runInitAppWithReadme } from "../init-module";
9
+ import { executeCommand, success, silentFailure } from "../lib/command-result";
9
10
 
10
11
  const cwd = process.cwd();
11
12
 
@@ -20,9 +21,11 @@ const checkCommand = defineCommand({
20
21
  name: "check",
21
22
  description: "Validate app docs against schemas",
22
23
  args: pathArgs,
23
- run: async (args) => {
24
- const exitCode = await runCheck({ appRoot: args.path }, cwd);
25
- process.exit(exitCode);
24
+ run: (args) => {
25
+ return executeCommand(async () => {
26
+ const exitCode = await runCheck({ appRoot: args.path }, cwd);
27
+ return exitCode === 0 ? success() : silentFailure(exitCode);
28
+ });
26
29
  },
27
30
  });
28
31
 
@@ -30,10 +33,12 @@ const syncCheckCommand = defineCommand({
30
33
  name: "sync-check",
31
34
  description: "Validate source <-> doc correspondence",
32
35
  args: pathArgs,
33
- run: async (args) => {
34
- const result = await runSyncCheck({ appRoot: args.path }, cwd);
35
- console.log(formatSyncCheckReport(result));
36
- process.exit(result.exitCode);
36
+ run: (args) => {
37
+ return executeCommand(async () => {
38
+ const result = await runSyncCheck({ appRoot: args.path }, cwd);
39
+ console.log(formatSyncCheckReport(result));
40
+ return result.exitCode === 0 ? success() : silentFailure(result.exitCode);
41
+ });
37
42
  },
38
43
  });
39
44
 
@@ -50,9 +55,11 @@ const initCommand = defineCommand({
50
55
  description: "Parent directory where the app will be created",
51
56
  }),
52
57
  }),
53
- run: async (args) => {
54
- const exitCode = await runInitAppWithReadme(args.name, args.dir, cwd);
55
- process.exit(exitCode);
58
+ run: (args) => {
59
+ return executeCommand(async () => {
60
+ const exitCode = await runInitAppWithReadme(args.name, args.dir, cwd);
61
+ return exitCode === 0 ? success() : silentFailure(exitCode);
62
+ });
56
63
  },
57
64
  });
58
65
 
@@ -69,9 +76,11 @@ const docCommand = defineCommand({
69
76
  description: "Item name (required for most types)",
70
77
  }),
71
78
  }),
72
- run: async (args) => {
73
- const exitCode = await runGenerateDoc(args.type as DocType, args.name, args.path, cwd);
74
- process.exit(exitCode);
79
+ run: (args) => {
80
+ return executeCommand(async () => {
81
+ const exitCode = await runGenerateDoc(args.type as DocType, args.name, args.path, cwd);
82
+ return exitCode === 0 ? success() : silentFailure(exitCode);
83
+ });
75
84
  },
76
85
  });
77
86
 
@@ -80,9 +89,11 @@ const codeCommand = defineCommand({
80
89
  description: "Generate boilerplate source files from docs",
81
90
  args: pathArgs,
82
91
  run: (args) => {
83
- const appPath = path.resolve(cwd, args.path);
84
- const exitCode = runGenerateAppCode(appPath);
85
- process.exit(exitCode);
92
+ return executeCommand(() => {
93
+ const appPath = path.resolve(cwd, args.path);
94
+ const exitCode = runGenerateAppCode(appPath);
95
+ return exitCode === 0 ? success() : silentFailure(exitCode);
96
+ });
86
97
  },
87
98
  });
88
99
 
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from "vitest";
2
- import { buildCheckTargets } from "./check";
2
+ import { buildCheckTargets } from "./lib/discovery";
3
3
 
4
4
  describe("buildCheckTargets", () => {
5
5
  it("generates module targets when modulesRoot is set", () => {
@@ -1,41 +1,8 @@
1
1
  import { runMdschema } from "../mdschema";
2
2
  import { ALL_SCHEMAS } from "../schemas";
3
- export interface CheckTarget {
4
- glob: string;
5
- schemaKey: string;
6
- }
7
-
8
- export function buildCheckTargets(config: {
9
- modulesRoot?: string;
10
- appRoot?: string;
11
- }): CheckTarget[] {
12
- const targets: CheckTarget[] = [];
13
-
14
- if (config.modulesRoot) {
15
- const m = config.modulesRoot;
16
- targets.push(
17
- { glob: `${m}/[a-zA-Z]*/docs/features/*.md`, schemaKey: "feature" },
18
- { glob: `${m}/[a-zA-Z]*/docs/commands/*.md`, schemaKey: "command" },
19
- { glob: `${m}/[a-zA-Z]*/docs/models/*.md`, schemaKey: "model" },
20
- { glob: `${m}/[a-zA-Z]*/docs/queries/*.md`, schemaKey: "query" },
21
- { glob: `${m}/[a-zA-Z]*/README.md`, schemaKey: "module" },
22
- );
23
- }
3
+ import { buildCheckTargets } from "./lib/discovery";
24
4
 
25
- if (config.appRoot) {
26
- const a = config.appRoot;
27
- targets.push(
28
- { glob: `${a}/[a-zA-Z]*/README.md`, schemaKey: "app" },
29
- { glob: `${a}/[a-zA-Z]*/docs/actors/*.md`, schemaKey: "actors" },
30
- { glob: `${a}/[a-zA-Z]*/docs/business-flow/*/README.md`, schemaKey: "business-flow" },
31
- { glob: `${a}/[a-zA-Z]*/docs/business-flow/*/story/*.md`, schemaKey: "story" },
32
- { glob: `${a}/[a-zA-Z]*/docs/screen/*.md`, schemaKey: "screen" },
33
- { glob: `${a}/[a-zA-Z]*/docs/resolver/*.md`, schemaKey: "resolver" },
34
- );
35
- }
36
-
37
- return targets;
38
- }
5
+ export type { CheckTarget } from "./lib/discovery";
39
6
 
40
7
  export async function runCheck(
41
8
  config: { modulesRoot?: string; appRoot?: string },
@@ -0,0 +1,83 @@
1
+ import { z } from "zod";
2
+ import { defineCommand, arg } from "politty";
3
+ import { executeCommand, success, silentFailure } from "../lib/command-result";
4
+ import { runDocModules } from "./modules";
5
+ import { runDocModule } from "./module";
6
+ import { runDocSearch } from "./search";
7
+
8
+ const formatArg = arg(z.enum(["text", "json"]).default("text"), {
9
+ alias: "f",
10
+ description: "Output format (text or json)",
11
+ });
12
+
13
+ const modulesCommand = defineCommand({
14
+ name: "modules",
15
+ description: "List all modules with capabilities overview",
16
+ args: z.object({
17
+ format: formatArg,
18
+ }),
19
+ run: (args) => {
20
+ return executeCommand(() => {
21
+ const exitCode = runDocModules(args.format);
22
+ return exitCode === 0 ? success() : silentFailure(exitCode);
23
+ });
24
+ },
25
+ });
26
+
27
+ const moduleCommand = defineCommand({
28
+ name: "module",
29
+ description: "Show documentation for a specific module",
30
+ args: z.object({
31
+ name: arg(z.string(), {
32
+ positional: true,
33
+ description: "Module name",
34
+ }),
35
+ type: arg(z.string().optional(), {
36
+ positional: true,
37
+ description: "Doc type (command, query, model, feature)",
38
+ }),
39
+ docName: arg(z.string().optional(), {
40
+ positional: true,
41
+ description: "Doc name",
42
+ }),
43
+ format: formatArg,
44
+ }),
45
+ run: (args) => {
46
+ return executeCommand(() => {
47
+ const exitCode = runDocModule(args.name, args.type, args.docName, args.format);
48
+ return exitCode === 0 ? success() : silentFailure(exitCode);
49
+ });
50
+ },
51
+ });
52
+
53
+ const searchCommand = defineCommand({
54
+ name: "search",
55
+ description: "Search across all module documentation",
56
+ args: z.object({
57
+ query: arg(z.string(), {
58
+ positional: true,
59
+ description: "Search query",
60
+ }),
61
+ type: arg(z.string().optional(), {
62
+ alias: "t",
63
+ description: "Filter by doc type (command, query, model, feature, readme)",
64
+ }),
65
+ format: formatArg,
66
+ }),
67
+ run: (args) => {
68
+ return executeCommand(() => {
69
+ const exitCode = runDocSearch(args.query, args.type, args.format);
70
+ return exitCode === 0 ? success() : silentFailure(exitCode);
71
+ });
72
+ },
73
+ });
74
+
75
+ export const docCommand = defineCommand({
76
+ name: "doc",
77
+ description: "Browse module documentation",
78
+ subCommands: {
79
+ modules: modulesCommand,
80
+ module: moduleCommand,
81
+ search: searchCommand,
82
+ },
83
+ });
@@ -0,0 +1,119 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { runDocModule } from "./module";
3
+
4
+ describe("runDocModule", () => {
5
+ beforeEach(() => {
6
+ vi.restoreAllMocks();
7
+ });
8
+
9
+ it("outputs README and available docs for a known module", () => {
10
+ const logs: string[] = [];
11
+ vi.spyOn(console, "log").mockImplementation((...args: unknown[]) => {
12
+ logs.push(args.map(String).join(" "));
13
+ });
14
+
15
+ const exitCode = runDocModule("organization");
16
+ expect(exitCode).toBe(0);
17
+
18
+ const output = logs.join("\n");
19
+ expect(output).toContain("## Overview");
20
+ expect(output).toContain("## Available Documentation");
21
+ expect(output).toContain("CreateCompany");
22
+ expect(output).toContain("GetCompany");
23
+ expect(output).toContain("Company");
24
+ });
25
+
26
+ it("outputs raw doc content for a specific command", () => {
27
+ const logs: string[] = [];
28
+ vi.spyOn(console, "log").mockImplementation((...args: unknown[]) => {
29
+ logs.push(args.map(String).join(" "));
30
+ });
31
+
32
+ const exitCode = runDocModule("organization", "command", "CreateCompany");
33
+ expect(exitCode).toBe(0);
34
+
35
+ const output = logs.join("\n");
36
+ expect(output).toContain("# CreateCompany");
37
+ expect(output).toContain("## Overview");
38
+ expect(output).toContain("## Business Rules");
39
+ expect(output).toContain("## Error Scenarios");
40
+ });
41
+
42
+ it("returns error for unknown module", () => {
43
+ const errors: string[] = [];
44
+ vi.spyOn(console, "error").mockImplementation((...args: unknown[]) => {
45
+ errors.push(args.map(String).join(" "));
46
+ });
47
+
48
+ const exitCode = runDocModule("nonexistent");
49
+ expect(exitCode).toBe(1);
50
+
51
+ const output = errors.join("\n");
52
+ expect(output).toContain("Module not found: nonexistent");
53
+ expect(output).toContain("Available modules:");
54
+ });
55
+
56
+ it("returns error for unknown doc type", () => {
57
+ const errors: string[] = [];
58
+ vi.spyOn(console, "error").mockImplementation((...args: unknown[]) => {
59
+ errors.push(args.map(String).join(" "));
60
+ });
61
+
62
+ const exitCode = runDocModule("organization", "invalid", "Foo");
63
+ expect(exitCode).toBe(1);
64
+
65
+ const output = errors.join("\n");
66
+ expect(output).toContain("Unknown doc type: invalid");
67
+ expect(output).toContain("Available types:");
68
+ });
69
+
70
+ it("outputs valid JSON for module detail with --format json", () => {
71
+ const logs: string[] = [];
72
+ vi.spyOn(console, "log").mockImplementation((...args: unknown[]) => {
73
+ logs.push(args.map(String).join(" "));
74
+ });
75
+
76
+ const exitCode = runDocModule("organization", undefined, undefined, "json");
77
+ expect(exitCode).toBe(0);
78
+
79
+ const parsed = JSON.parse(logs.join("\n")) as Record<string, unknown>;
80
+ expect(parsed).toHaveProperty("module", "organization");
81
+ expect(parsed).toHaveProperty("readme");
82
+ expect(parsed).toHaveProperty("docs");
83
+ expect(typeof parsed.readme).toBe("string");
84
+ const docs = parsed.docs as Record<string, string[]>;
85
+ expect(docs.command.length).toBeGreaterThan(0);
86
+ });
87
+
88
+ it("outputs valid JSON for specific command with --format json", () => {
89
+ const logs: string[] = [];
90
+ vi.spyOn(console, "log").mockImplementation((...args: unknown[]) => {
91
+ logs.push(args.map(String).join(" "));
92
+ });
93
+
94
+ const exitCode = runDocModule("organization", "command", "CreateCompany", "json");
95
+ expect(exitCode).toBe(0);
96
+
97
+ const parsed = JSON.parse(logs.join("\n")) as Record<string, unknown>;
98
+ expect(parsed).toHaveProperty("module", "organization");
99
+ expect(parsed).toHaveProperty("type", "command");
100
+ expect(parsed).toHaveProperty("name", "CreateCompany");
101
+ expect(parsed).toHaveProperty("content");
102
+ expect(typeof parsed.content).toBe("string");
103
+ expect(parsed.content as string).toContain("# CreateCompany");
104
+ });
105
+
106
+ it("returns error for unknown doc name", () => {
107
+ const errors: string[] = [];
108
+ vi.spyOn(console, "error").mockImplementation((...args: unknown[]) => {
109
+ errors.push(args.map(String).join(" "));
110
+ });
111
+
112
+ const exitCode = runDocModule("organization", "command", "Nonexistent");
113
+ expect(exitCode).toBe(1);
114
+
115
+ const output = errors.join("\n");
116
+ expect(output).toContain("Doc not found: organization/command/Nonexistent");
117
+ expect(output).toContain("Available commands:");
118
+ });
119
+ });
@@ -0,0 +1,114 @@
1
+ import { readdirSync, readFileSync, existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { PACKAGE_ROOT } from "../../util";
4
+ import { MODULE_PATHS } from "../lib/paths";
5
+
6
+ const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
7
+ const EXCLUDED_DIRS = new Set(["shared", "testing"]);
8
+
9
+ const DOC_TYPE_MAP: Record<string, string> = {
10
+ command: MODULE_PATHS.docs.commands,
11
+ query: MODULE_PATHS.docs.queries,
12
+ model: MODULE_PATHS.docs.models,
13
+ feature: MODULE_PATHS.docs.features,
14
+ };
15
+
16
+ function listDocNames(dir: string): string[] {
17
+ if (!existsSync(dir)) return [];
18
+ return readdirSync(dir)
19
+ .filter((f) => f.endsWith(".md"))
20
+ .map((f) => f.replace(/\.md$/, ""))
21
+ .sort();
22
+ }
23
+
24
+ function formatDocList(type: string, names: string[]): string {
25
+ if (names.length === 0) return "";
26
+ return `${type}: ${names.join(", ")}`;
27
+ }
28
+
29
+ export function runDocModule(
30
+ moduleName: string,
31
+ docType?: string,
32
+ docName?: string,
33
+ format = "text",
34
+ ): number {
35
+ if (!existsSync(MODULES_DIR) || EXCLUDED_DIRS.has(moduleName)) {
36
+ console.error(`Module not found: ${moduleName}`);
37
+ return 1;
38
+ }
39
+
40
+ const modDir = join(MODULES_DIR, moduleName);
41
+ if (!existsSync(modDir)) {
42
+ console.error(`Module not found: ${moduleName}`);
43
+ const available = readdirSync(MODULES_DIR, { withFileTypes: true })
44
+ .filter((d) => d.isDirectory() && !EXCLUDED_DIRS.has(d.name))
45
+ .map((d) => d.name)
46
+ .sort();
47
+ console.error(`Available modules: ${available.join(", ")}`);
48
+ return 1;
49
+ }
50
+
51
+ // Level 3: specific doc
52
+ if (docType && docName) {
53
+ const docSubdir = DOC_TYPE_MAP[docType];
54
+ if (!docSubdir) {
55
+ console.error(`Unknown doc type: ${docType}`);
56
+ console.error(`Available types: ${Object.keys(DOC_TYPE_MAP).join(", ")}`);
57
+ return 1;
58
+ }
59
+
60
+ const docPath = join(modDir, docSubdir, `${docName}.md`);
61
+ if (!existsSync(docPath)) {
62
+ console.error(`Doc not found: ${moduleName}/${docType}/${docName}`);
63
+ const available = listDocNames(join(modDir, docSubdir));
64
+ if (available.length > 0) {
65
+ console.error(`Available ${docType}s: ${available.join(", ")}`);
66
+ } else {
67
+ console.error(`No ${docType} docs found for ${moduleName}`);
68
+ }
69
+ return 1;
70
+ }
71
+
72
+ const content = readFileSync(docPath, "utf-8");
73
+ if (format === "json") {
74
+ console.log(
75
+ JSON.stringify({ module: moduleName, type: docType, name: docName, content }, null, 2),
76
+ );
77
+ } else {
78
+ console.log(content);
79
+ }
80
+ return 0;
81
+ }
82
+
83
+ // Level 2: full module detail
84
+ const readmePath = join(modDir, "README.md");
85
+ const readme = existsSync(readmePath) ? readFileSync(readmePath, "utf-8") : "";
86
+
87
+ const docs: Record<string, string[]> = {};
88
+ for (const [type, subdir] of Object.entries(DOC_TYPE_MAP)) {
89
+ const names = listDocNames(join(modDir, subdir));
90
+ if (names.length > 0) docs[type] = names;
91
+ }
92
+
93
+ if (format === "json") {
94
+ console.log(JSON.stringify({ module: moduleName, readme, docs }, null, 2));
95
+ } else {
96
+ if (readme) {
97
+ console.log(readme);
98
+ } else {
99
+ console.log(`# ${moduleName}\n\nNo README found.\n`);
100
+ }
101
+
102
+ const sections: string[] = [];
103
+ for (const [type, names] of Object.entries(docs)) {
104
+ sections.push(formatDocList(type, names));
105
+ }
106
+
107
+ if (sections.length > 0) {
108
+ console.log("\n## Available Documentation\n");
109
+ console.log(sections.join("\n"));
110
+ }
111
+ }
112
+
113
+ return 0;
114
+ }