@tailor-platform/erp-kit 0.4.1 → 0.5.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 (929) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +12 -12
  3. package/dist/cli.mjs +467 -20
  4. package/package.json +2 -11
  5. package/skills/erp-kit-app-2-requirements-review/SKILL.md +2 -2
  6. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +1 -1
  7. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +6 -3
  8. package/skills/erp-kit-app-4-plan-review/SKILL.md +5 -3
  9. package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +3 -0
  10. package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +21 -3
  11. package/skills/erp-kit-app-5-impl-backend/SKILL.md +12 -3
  12. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +8 -4
  13. package/skills/erp-kit-app-7-impl-review/SKILL.md +1 -1
  14. package/skills/erp-kit-app-shared/references/resolver-classification.md +3 -0
  15. package/skills/erp-kit-module-2-requirements-review/SKILL.md +3 -30
  16. package/skills/erp-kit-module-3-update-plan/SKILL.md +132 -0
  17. package/skills/erp-kit-module-3-update-plan/references/command-extraction.md +87 -0
  18. package/skills/erp-kit-module-3-update-plan/references/model-extraction.md +72 -0
  19. package/skills/erp-kit-module-3-update-plan/references/naming.md +73 -0
  20. package/skills/erp-kit-module-3-update-plan/references/query-extraction.md +59 -0
  21. package/skills/erp-kit-module-4-plan-review/SKILL.md +3 -69
  22. package/skills/erp-kit-module-5-impl/SKILL.md +1 -0
  23. package/skills/erp-kit-module-6-impl-review/SKILL.md +42 -120
  24. package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +1 -1
  25. package/skills/erp-kit-module-6-impl-review/references/{error-implementation-parity.md → command-error-implementation-parity.md} +3 -3
  26. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +1 -1
  27. package/skills/erp-kit-module-6-impl-review/references/query-doc-code-parity.md +110 -0
  28. package/skills/erp-kit-module-6-impl-review/references/query-doc-test-parity.md +108 -0
  29. package/skills/erp-kit-module-6-impl-review/references/query-error-implementation-parity.md +100 -0
  30. package/src/commands/app/index.ts +18 -3
  31. package/src/commands/check.test.ts +1 -1
  32. package/src/commands/doc/module.ts +2 -3
  33. package/src/commands/doc/modules.test.ts +0 -7
  34. package/src/commands/doc/modules.ts +1 -2
  35. package/src/commands/doc/search.ts +1 -2
  36. package/src/commands/init.ts +4 -0
  37. package/src/commands/lib/distribute.test.ts +32 -1
  38. package/src/commands/lib/distribute.ts +47 -5
  39. package/src/commands/lib/sync-check-source.test.ts +1 -1
  40. package/src/commands/update.test.ts +16 -0
  41. package/src/commands/update.ts +4 -1
  42. package/src/generator/generate-seed.ts +69 -0
  43. package/src/module.ts +56 -0
  44. package/src/modules/business-partner/README.md +2 -2
  45. package/src/modules/inventory/README.md +65 -0
  46. package/src/modules/inventory/command/approveCountLine.generated.ts +6 -0
  47. package/src/modules/inventory/command/approveCountLine.test.ts +89 -0
  48. package/src/modules/inventory/command/approveCountLine.ts +68 -0
  49. package/src/modules/inventory/command/approveInventoryAdjustment.generated.ts +6 -0
  50. package/src/modules/inventory/command/approveInventoryAdjustment.test.ts +56 -0
  51. package/src/modules/inventory/command/approveInventoryAdjustment.ts +50 -0
  52. package/src/modules/inventory/command/assignSerialNumber.generated.ts +6 -0
  53. package/src/modules/inventory/command/assignSerialNumber.test.ts +133 -0
  54. package/src/modules/inventory/command/assignSerialNumber.ts +83 -0
  55. package/src/modules/inventory/command/cancelInventoryCount.generated.ts +6 -0
  56. package/src/modules/inventory/command/cancelInventoryCount.test.ts +114 -0
  57. package/src/modules/inventory/command/cancelInventoryCount.ts +62 -0
  58. package/src/modules/inventory/command/cancelStockMovement.generated.ts +6 -0
  59. package/src/modules/inventory/command/cancelStockMovement.test.ts +102 -0
  60. package/src/modules/inventory/command/cancelStockMovement.ts +56 -0
  61. package/src/modules/inventory/command/completeInventoryCount.generated.ts +6 -0
  62. package/src/modules/inventory/command/completeInventoryCount.test.ts +99 -0
  63. package/src/modules/inventory/command/completeInventoryCount.ts +70 -0
  64. package/src/modules/inventory/command/confirmInventoryAdjustment.generated.ts +6 -0
  65. package/src/modules/inventory/command/confirmInventoryAdjustment.test.ts +324 -0
  66. package/src/modules/inventory/command/confirmInventoryAdjustment.ts +194 -0
  67. package/src/modules/inventory/command/confirmStockMovement.generated.ts +6 -0
  68. package/src/modules/inventory/command/confirmStockMovement.test.ts +126 -0
  69. package/src/modules/inventory/command/confirmStockMovement.ts +131 -0
  70. package/src/modules/inventory/command/createInventoryAdjustment.generated.ts +6 -0
  71. package/src/modules/inventory/command/createInventoryAdjustment.test.ts +298 -0
  72. package/src/modules/inventory/command/createInventoryAdjustment.ts +124 -0
  73. package/src/modules/inventory/command/createInventoryCount.generated.ts +6 -0
  74. package/src/modules/inventory/command/createInventoryCount.test.ts +157 -0
  75. package/src/modules/inventory/command/createInventoryCount.ts +72 -0
  76. package/src/modules/inventory/command/createLot.generated.ts +6 -0
  77. package/src/modules/inventory/command/createLot.test.ts +106 -0
  78. package/src/modules/inventory/command/createLot.ts +72 -0
  79. package/src/modules/inventory/command/createStockMovement.generated.ts +6 -0
  80. package/src/modules/inventory/command/createStockMovement.test.ts +342 -0
  81. package/src/modules/inventory/command/createStockMovement.ts +172 -0
  82. package/src/modules/inventory/command/createStorageLocation.generated.ts +6 -0
  83. package/src/modules/inventory/command/createStorageLocation.test.ts +246 -0
  84. package/src/modules/inventory/command/createStorageLocation.ts +126 -0
  85. package/src/modules/inventory/command/createValuationPolicy.generated.ts +6 -0
  86. package/src/modules/inventory/command/createValuationPolicy.test.ts +75 -0
  87. package/src/modules/inventory/command/createValuationPolicy.ts +52 -0
  88. package/src/modules/inventory/command/createWarehouse.generated.ts +6 -0
  89. package/src/modules/inventory/command/createWarehouse.test.ts +143 -0
  90. package/src/modules/inventory/command/createWarehouse.ts +76 -0
  91. package/src/modules/inventory/command/deactivateStorageLocation.generated.ts +6 -0
  92. package/src/modules/inventory/command/deactivateStorageLocation.test.ts +69 -0
  93. package/src/modules/inventory/command/deactivateStorageLocation.ts +51 -0
  94. package/src/modules/inventory/command/deactivateWarehouse.generated.ts +6 -0
  95. package/src/modules/inventory/command/deactivateWarehouse.test.ts +75 -0
  96. package/src/modules/inventory/command/deactivateWarehouse.ts +45 -0
  97. package/src/modules/inventory/command/executeStockMovement.generated.ts +6 -0
  98. package/src/modules/inventory/command/executeStockMovement.test.ts +502 -0
  99. package/src/modules/inventory/command/executeStockMovement.ts +303 -0
  100. package/src/modules/inventory/command/reactivateStorageLocation.generated.ts +6 -0
  101. package/src/modules/inventory/command/reactivateStorageLocation.test.ts +78 -0
  102. package/src/modules/inventory/command/reactivateStorageLocation.ts +63 -0
  103. package/src/modules/inventory/command/reactivateWarehouse.generated.ts +6 -0
  104. package/src/modules/inventory/command/reactivateWarehouse.test.ts +87 -0
  105. package/src/modules/inventory/command/reactivateWarehouse.ts +65 -0
  106. package/src/modules/inventory/command/recordCountLine.generated.ts +6 -0
  107. package/src/modules/inventory/command/recordCountLine.test.ts +211 -0
  108. package/src/modules/inventory/command/recordCountLine.ts +81 -0
  109. package/src/modules/inventory/command/rejectCountLine.generated.ts +6 -0
  110. package/src/modules/inventory/command/rejectCountLine.test.ts +66 -0
  111. package/src/modules/inventory/command/rejectCountLine.ts +50 -0
  112. package/src/modules/inventory/command/rejectInventoryAdjustment.generated.ts +6 -0
  113. package/src/modules/inventory/command/rejectInventoryAdjustment.test.ts +69 -0
  114. package/src/modules/inventory/command/rejectInventoryAdjustment.ts +50 -0
  115. package/src/modules/inventory/command/releaseReservation.generated.ts +6 -0
  116. package/src/modules/inventory/command/releaseReservation.test.ts +65 -0
  117. package/src/modules/inventory/command/releaseReservation.ts +50 -0
  118. package/src/modules/inventory/command/reserveStock.generated.ts +6 -0
  119. package/src/modules/inventory/command/reserveStock.test.ts +141 -0
  120. package/src/modules/inventory/command/reserveStock.ts +88 -0
  121. package/src/modules/inventory/command/reviseInventoryAdjustment.generated.ts +6 -0
  122. package/src/modules/inventory/command/reviseInventoryAdjustment.test.ts +68 -0
  123. package/src/modules/inventory/command/reviseInventoryAdjustment.ts +48 -0
  124. package/src/modules/inventory/command/startInventoryCount.generated.ts +6 -0
  125. package/src/modules/inventory/command/startInventoryCount.test.ts +100 -0
  126. package/src/modules/inventory/command/startInventoryCount.ts +90 -0
  127. package/src/modules/inventory/command/submitInventoryAdjustment.generated.ts +6 -0
  128. package/src/modules/inventory/command/submitInventoryAdjustment.test.ts +53 -0
  129. package/src/modules/inventory/command/submitInventoryAdjustment.ts +47 -0
  130. package/src/modules/inventory/command/updateLot.generated.ts +6 -0
  131. package/src/modules/inventory/command/updateLot.test.ts +88 -0
  132. package/src/modules/inventory/command/updateLot.ts +52 -0
  133. package/src/modules/inventory/command/updateStockMovement.generated.ts +6 -0
  134. package/src/modules/inventory/command/updateStockMovement.test.ts +250 -0
  135. package/src/modules/inventory/command/updateStockMovement.ts +164 -0
  136. package/src/modules/inventory/command/updateStorageLocation.generated.ts +6 -0
  137. package/src/modules/inventory/command/updateStorageLocation.test.ts +72 -0
  138. package/src/modules/inventory/command/updateStorageLocation.ts +77 -0
  139. package/src/modules/inventory/command/updateValuationPolicy.generated.ts +6 -0
  140. package/src/modules/inventory/command/updateValuationPolicy.test.ts +68 -0
  141. package/src/modules/inventory/command/updateValuationPolicy.ts +74 -0
  142. package/src/modules/inventory/command/updateWarehouse.generated.ts +6 -0
  143. package/src/modules/inventory/command/updateWarehouse.test.ts +88 -0
  144. package/src/modules/inventory/command/updateWarehouse.ts +64 -0
  145. package/src/modules/inventory/db/.gitkeep +0 -0
  146. package/src/modules/inventory/db/costLayer.ts +54 -0
  147. package/src/modules/inventory/db/inventoryAdjustment.ts +88 -0
  148. package/src/modules/inventory/db/inventoryCount.ts +58 -0
  149. package/src/modules/inventory/db/inventoryCountLine.ts +61 -0
  150. package/src/modules/inventory/db/itemValuation.ts +50 -0
  151. package/src/modules/inventory/db/lot.ts +51 -0
  152. package/src/modules/inventory/db/lotStockLevel.ts +48 -0
  153. package/src/modules/inventory/db/serialNumber.ts +53 -0
  154. package/src/modules/inventory/db/stockLevel.ts +51 -0
  155. package/src/modules/inventory/db/stockMoveLine.ts +78 -0
  156. package/src/modules/inventory/db/stockMovement.ts +48 -0
  157. package/src/modules/inventory/db/storageLocation.ts +56 -0
  158. package/src/modules/inventory/db/valuationPolicy.ts +33 -0
  159. package/src/modules/inventory/db/warehouse.ts +45 -0
  160. package/src/modules/inventory/docs/commands/ApproveCountLine.md +44 -0
  161. package/src/modules/inventory/docs/commands/ApproveInventoryAdjustment.md +37 -0
  162. package/src/modules/inventory/docs/commands/AssignSerialNumber.md +46 -0
  163. package/src/modules/inventory/docs/commands/CancelInventoryCount.md +49 -0
  164. package/src/modules/inventory/docs/commands/CancelStockMovement.md +44 -0
  165. package/src/modules/inventory/docs/commands/CompleteInventoryCount.md +47 -0
  166. package/src/modules/inventory/docs/commands/ConfirmInventoryAdjustment.md +72 -0
  167. package/src/modules/inventory/docs/commands/ConfirmStockMovement.md +43 -0
  168. package/src/modules/inventory/docs/commands/CreateInventoryAdjustment.md +75 -0
  169. package/src/modules/inventory/docs/commands/CreateInventoryCount.md +49 -0
  170. package/src/modules/inventory/docs/commands/CreateLot.md +40 -0
  171. package/src/modules/inventory/docs/commands/CreateStockMovement.md +76 -0
  172. package/src/modules/inventory/docs/commands/CreateStorageLocation.md +66 -0
  173. package/src/modules/inventory/docs/commands/CreateValuationPolicy.md +45 -0
  174. package/src/modules/inventory/docs/commands/CreateWarehouse.md +47 -0
  175. package/src/modules/inventory/docs/commands/DeactivateStorageLocation.md +39 -0
  176. package/src/modules/inventory/docs/commands/DeactivateWarehouse.md +38 -0
  177. package/src/modules/inventory/docs/commands/ExecuteStockMovement.md +82 -0
  178. package/src/modules/inventory/docs/commands/ReactivateStorageLocation.md +42 -0
  179. package/src/modules/inventory/docs/commands/ReactivateWarehouse.md +42 -0
  180. package/src/modules/inventory/docs/commands/RecordCountLine.md +52 -0
  181. package/src/modules/inventory/docs/commands/RejectCountLine.md +42 -0
  182. package/src/modules/inventory/docs/commands/RejectInventoryAdjustment.md +38 -0
  183. package/src/modules/inventory/docs/commands/ReleaseReservation.md +37 -0
  184. package/src/modules/inventory/docs/commands/ReserveStock.md +49 -0
  185. package/src/modules/inventory/docs/commands/ReviseInventoryAdjustment.md +38 -0
  186. package/src/modules/inventory/docs/commands/StartInventoryCount.md +47 -0
  187. package/src/modules/inventory/docs/commands/SubmitInventoryAdjustment.md +37 -0
  188. package/src/modules/inventory/docs/commands/UpdateLot.md +41 -0
  189. package/src/modules/inventory/docs/commands/UpdateStockMovement.md +45 -0
  190. package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +41 -0
  191. package/src/modules/inventory/docs/commands/UpdateValuationPolicy.md +44 -0
  192. package/src/modules/inventory/docs/commands/UpdateWarehouse.md +42 -0
  193. package/src/modules/inventory/docs/features/inventory-adjustment.md +64 -0
  194. package/src/modules/inventory/docs/features/inventory-count.md +78 -0
  195. package/src/modules/inventory/docs/features/inventory-valuation.md +77 -0
  196. package/src/modules/inventory/docs/features/lot-and-batch-tracking.md +81 -0
  197. package/src/modules/inventory/docs/features/scrap-management.md +63 -0
  198. package/src/modules/inventory/docs/features/serial-number-tracking.md +68 -0
  199. package/src/modules/inventory/docs/features/stock-movement.md +72 -0
  200. package/src/modules/inventory/docs/features/stock-tracking.md +78 -0
  201. package/src/modules/inventory/docs/features/warehouse-management.md +97 -0
  202. package/src/modules/inventory/docs/models/CostLayer.md +37 -0
  203. package/src/modules/inventory/docs/models/InventoryAdjustment.md +69 -0
  204. package/src/modules/inventory/docs/models/InventoryCount.md +53 -0
  205. package/src/modules/inventory/docs/models/InventoryCountLine.md +53 -0
  206. package/src/modules/inventory/docs/models/ItemValuation.md +38 -0
  207. package/src/modules/inventory/docs/models/Lot.md +45 -0
  208. package/src/modules/inventory/docs/models/LotStockLevel.md +34 -0
  209. package/src/modules/inventory/docs/models/SerialNumber.md +53 -0
  210. package/src/modules/inventory/docs/models/StockLevel.md +41 -0
  211. package/src/modules/inventory/docs/models/StockMoveLine.md +44 -0
  212. package/src/modules/inventory/docs/models/StockMovement.md +52 -0
  213. package/src/modules/inventory/docs/models/StorageLocation.md +55 -0
  214. package/src/modules/inventory/docs/models/ValuationPolicy.md +38 -0
  215. package/src/modules/inventory/docs/models/Warehouse.md +50 -0
  216. package/src/modules/inventory/docs/queries/GetInventoryAdjustment.md +40 -0
  217. package/src/modules/inventory/docs/queries/GetInventoryCount.md +43 -0
  218. package/src/modules/inventory/docs/queries/GetItemValuation.md +42 -0
  219. package/src/modules/inventory/docs/queries/GetLot.md +42 -0
  220. package/src/modules/inventory/docs/queries/GetSerialNumber.md +43 -0
  221. package/src/modules/inventory/docs/queries/GetSerialNumberHistory.md +50 -0
  222. package/src/modules/inventory/docs/queries/GetStockLevel.md +42 -0
  223. package/src/modules/inventory/docs/queries/GetStockMovement.md +41 -0
  224. package/src/modules/inventory/docs/queries/GetStorageLocation.md +40 -0
  225. package/src/modules/inventory/docs/queries/GetValuationPolicy.md +38 -0
  226. package/src/modules/inventory/docs/queries/GetWarehouse.md +40 -0
  227. package/src/modules/inventory/docs/queries/GetWarehouseStockSummary.md +50 -0
  228. package/src/modules/inventory/docs/queries/ListCostLayers.md +49 -0
  229. package/src/modules/inventory/docs/queries/ListExpiringLots.md +51 -0
  230. package/src/modules/inventory/docs/queries/ListInventoryAdjustments.md +47 -0
  231. package/src/modules/inventory/docs/queries/ListInventoryCounts.md +57 -0
  232. package/src/modules/inventory/docs/queries/ListItemValuations.md +44 -0
  233. package/src/modules/inventory/docs/queries/ListLots.md +57 -0
  234. package/src/modules/inventory/docs/queries/ListSerialNumbers.md +44 -0
  235. package/src/modules/inventory/docs/queries/ListStockLevels.md +49 -0
  236. package/src/modules/inventory/docs/queries/ListStockMovements.md +47 -0
  237. package/src/modules/inventory/docs/queries/ListStorageLocations.md +47 -0
  238. package/src/modules/inventory/docs/queries/ListValuationPolicies.md +38 -0
  239. package/src/modules/inventory/docs/queries/ListWarehouses.md +42 -0
  240. package/src/modules/inventory/docs/queries/TraceLotBackward.md +46 -0
  241. package/src/modules/inventory/docs/queries/TraceLotForward.md +46 -0
  242. package/src/modules/inventory/executor/.gitkeep +0 -0
  243. package/src/modules/inventory/generated/.gitkeep +0 -0
  244. package/src/modules/inventory/generated/enums.ts +131 -0
  245. package/src/modules/inventory/generated/kysely-tailordb.ts +201 -0
  246. package/src/modules/inventory/index.ts +2 -0
  247. package/src/modules/inventory/lib/_db_deps.ts +17 -0
  248. package/src/modules/inventory/lib/errors.generated.ts +317 -0
  249. package/src/modules/inventory/lib/permissions.generated.ts +38 -0
  250. package/src/modules/inventory/lib/types.ts +92 -0
  251. package/src/modules/inventory/module.ts +202 -0
  252. package/src/modules/inventory/permissions.ts +3 -0
  253. package/src/modules/inventory/query/.gitkeep +0 -0
  254. package/src/modules/inventory/query/getInventoryAdjustment.generated.ts +5 -0
  255. package/src/modules/inventory/query/getInventoryAdjustment.test.ts +58 -0
  256. package/src/modules/inventory/query/getInventoryAdjustment.ts +16 -0
  257. package/src/modules/inventory/query/getInventoryCount.generated.ts +5 -0
  258. package/src/modules/inventory/query/getInventoryCount.test.ts +65 -0
  259. package/src/modules/inventory/query/getInventoryCount.ts +27 -0
  260. package/src/modules/inventory/query/getItemValuation.generated.ts +5 -0
  261. package/src/modules/inventory/query/getItemValuation.test.ts +72 -0
  262. package/src/modules/inventory/query/getItemValuation.ts +29 -0
  263. package/src/modules/inventory/query/getLot.generated.ts +5 -0
  264. package/src/modules/inventory/query/getLot.test.ts +62 -0
  265. package/src/modules/inventory/query/getLot.ts +28 -0
  266. package/src/modules/inventory/query/getSerialNumber.generated.ts +5 -0
  267. package/src/modules/inventory/query/getSerialNumber.test.ts +59 -0
  268. package/src/modules/inventory/query/getSerialNumber.ts +18 -0
  269. package/src/modules/inventory/query/getSerialNumberHistory.generated.ts +5 -0
  270. package/src/modules/inventory/query/getSerialNumberHistory.test.ts +80 -0
  271. package/src/modules/inventory/query/getSerialNumberHistory.ts +30 -0
  272. package/src/modules/inventory/query/getStockLevel.generated.ts +5 -0
  273. package/src/modules/inventory/query/getStockLevel.test.ts +70 -0
  274. package/src/modules/inventory/query/getStockLevel.ts +24 -0
  275. package/src/modules/inventory/query/getStockMovement.generated.ts +5 -0
  276. package/src/modules/inventory/query/getStockMovement.test.ts +62 -0
  277. package/src/modules/inventory/query/getStockMovement.ts +26 -0
  278. package/src/modules/inventory/query/getStorageLocation.generated.ts +5 -0
  279. package/src/modules/inventory/query/getStorageLocation.test.ts +54 -0
  280. package/src/modules/inventory/query/getStorageLocation.ts +26 -0
  281. package/src/modules/inventory/query/getValuationPolicy.generated.ts +5 -0
  282. package/src/modules/inventory/query/getValuationPolicy.test.ts +42 -0
  283. package/src/modules/inventory/query/getValuationPolicy.ts +16 -0
  284. package/src/modules/inventory/query/getWarehouse.generated.ts +5 -0
  285. package/src/modules/inventory/query/getWarehouse.test.ts +61 -0
  286. package/src/modules/inventory/query/getWarehouse.ts +26 -0
  287. package/src/modules/inventory/query/getWarehouseStockSummary.generated.ts +5 -0
  288. package/src/modules/inventory/query/getWarehouseStockSummary.test.ts +97 -0
  289. package/src/modules/inventory/query/getWarehouseStockSummary.ts +82 -0
  290. package/src/modules/inventory/query/listCostLayers.generated.ts +5 -0
  291. package/src/modules/inventory/query/listCostLayers.test.ts +58 -0
  292. package/src/modules/inventory/query/listCostLayers.ts +45 -0
  293. package/src/modules/inventory/query/listExpiringLots.generated.ts +5 -0
  294. package/src/modules/inventory/query/listExpiringLots.test.ts +70 -0
  295. package/src/modules/inventory/query/listExpiringLots.ts +74 -0
  296. package/src/modules/inventory/query/listInventoryAdjustments.generated.ts +5 -0
  297. package/src/modules/inventory/query/listInventoryAdjustments.test.ts +89 -0
  298. package/src/modules/inventory/query/listInventoryAdjustments.ts +59 -0
  299. package/src/modules/inventory/query/listInventoryCounts.generated.ts +5 -0
  300. package/src/modules/inventory/query/listInventoryCounts.test.ts +78 -0
  301. package/src/modules/inventory/query/listInventoryCounts.ts +55 -0
  302. package/src/modules/inventory/query/listItemValuations.generated.ts +5 -0
  303. package/src/modules/inventory/query/listItemValuations.test.ts +54 -0
  304. package/src/modules/inventory/query/listItemValuations.ts +39 -0
  305. package/src/modules/inventory/query/listLots.generated.ts +5 -0
  306. package/src/modules/inventory/query/listLots.test.ts +120 -0
  307. package/src/modules/inventory/query/listLots.ts +68 -0
  308. package/src/modules/inventory/query/listSerialNumbers.generated.ts +5 -0
  309. package/src/modules/inventory/query/listSerialNumbers.test.ts +58 -0
  310. package/src/modules/inventory/query/listSerialNumbers.ts +53 -0
  311. package/src/modules/inventory/query/listStockLevels.generated.ts +5 -0
  312. package/src/modules/inventory/query/listStockLevels.test.ts +73 -0
  313. package/src/modules/inventory/query/listStockLevels.ts +79 -0
  314. package/src/modules/inventory/query/listStockMovements.generated.ts +5 -0
  315. package/src/modules/inventory/query/listStockMovements.test.ts +98 -0
  316. package/src/modules/inventory/query/listStockMovements.ts +105 -0
  317. package/src/modules/inventory/query/listStorageLocations.generated.ts +5 -0
  318. package/src/modules/inventory/query/listStorageLocations.test.ts +70 -0
  319. package/src/modules/inventory/query/listStorageLocations.ts +53 -0
  320. package/src/modules/inventory/query/listValuationPolicies.generated.ts +5 -0
  321. package/src/modules/inventory/query/listValuationPolicies.test.ts +38 -0
  322. package/src/modules/inventory/query/listValuationPolicies.ts +39 -0
  323. package/src/modules/inventory/query/listWarehouses.generated.ts +5 -0
  324. package/src/modules/inventory/query/listWarehouses.test.ts +60 -0
  325. package/src/modules/inventory/query/listWarehouses.ts +39 -0
  326. package/src/modules/inventory/query/traceLotBackward.generated.ts +5 -0
  327. package/src/modules/inventory/query/traceLotBackward.test.ts +63 -0
  328. package/src/modules/inventory/query/traceLotBackward.ts +36 -0
  329. package/src/modules/inventory/query/traceLotForward.generated.ts +5 -0
  330. package/src/modules/inventory/query/traceLotForward.test.ts +63 -0
  331. package/src/modules/inventory/query/traceLotForward.ts +36 -0
  332. package/src/modules/inventory/tailor.config.ts +13 -0
  333. package/src/modules/inventory/tailor.d.ts +13 -0
  334. package/src/modules/inventory/testing/commandTestUtils.ts +29 -0
  335. package/src/modules/inventory/testing/fixtures.ts +412 -0
  336. package/src/modules/item-management/docs/models/{item.md → Item.md} +1 -1
  337. package/src/modules/primitives/seed/currencies.ts +22 -0
  338. package/src/modules/primitives/seed/exchangeRates.ts +22 -0
  339. package/src/modules/primitives/seed/index.ts +4 -0
  340. package/src/modules/primitives/seed/seed.test.ts +80 -0
  341. package/src/modules/primitives/seed/units.ts +62 -0
  342. package/src/modules/primitives/seed/uomCategories.ts +24 -0
  343. package/src/modules/purchase/README.md +63 -0
  344. package/src/modules/purchase/command/.gitkeep +0 -0
  345. package/src/modules/purchase/command/activatePurchasePaymentTerm.generated.ts +6 -0
  346. package/src/modules/purchase/command/activatePurchasePaymentTerm.test.ts +53 -0
  347. package/src/modules/purchase/command/activatePurchasePaymentTerm.ts +39 -0
  348. package/src/modules/purchase/command/activatePurchasePriceList.generated.ts +6 -0
  349. package/src/modules/purchase/command/activatePurchasePriceList.test.ts +39 -0
  350. package/src/modules/purchase/command/activatePurchasePriceList.ts +32 -0
  351. package/src/modules/purchase/command/activatePurchasePriceRule.generated.ts +6 -0
  352. package/src/modules/purchase/command/activatePurchasePriceRule.test.ts +133 -0
  353. package/src/modules/purchase/command/activatePurchasePriceRule.ts +75 -0
  354. package/src/modules/purchase/command/approvePurchaseOrder.generated.ts +6 -0
  355. package/src/modules/purchase/command/approvePurchaseOrder.test.ts +161 -0
  356. package/src/modules/purchase/command/approvePurchaseOrder.ts +89 -0
  357. package/src/modules/purchase/command/cancelGoodsReceipt.generated.ts +6 -0
  358. package/src/modules/purchase/command/cancelGoodsReceipt.test.ts +37 -0
  359. package/src/modules/purchase/command/cancelGoodsReceipt.ts +29 -0
  360. package/src/modules/purchase/command/cancelPurchaseBill.generated.ts +6 -0
  361. package/src/modules/purchase/command/cancelPurchaseBill.test.ts +101 -0
  362. package/src/modules/purchase/command/cancelPurchaseBill.ts +84 -0
  363. package/src/modules/purchase/command/cancelPurchaseOrder.generated.ts +6 -0
  364. package/src/modules/purchase/command/cancelPurchaseOrder.test.ts +119 -0
  365. package/src/modules/purchase/command/cancelPurchaseOrder.ts +65 -0
  366. package/src/modules/purchase/command/closePurchaseOrder.generated.ts +6 -0
  367. package/src/modules/purchase/command/closePurchaseOrder.test.ts +128 -0
  368. package/src/modules/purchase/command/closePurchaseOrder.ts +58 -0
  369. package/src/modules/purchase/command/createGoodsReceipt.generated.ts +6 -0
  370. package/src/modules/purchase/command/createGoodsReceipt.test.ts +233 -0
  371. package/src/modules/purchase/command/createGoodsReceipt.ts +93 -0
  372. package/src/modules/purchase/command/createPurchaseBill.generated.ts +6 -0
  373. package/src/modules/purchase/command/createPurchaseBill.test.ts +277 -0
  374. package/src/modules/purchase/command/createPurchaseBill.ts +107 -0
  375. package/src/modules/purchase/command/createPurchaseOrder.generated.ts +6 -0
  376. package/src/modules/purchase/command/createPurchaseOrder.test.ts +291 -0
  377. package/src/modules/purchase/command/createPurchaseOrder.ts +131 -0
  378. package/src/modules/purchase/command/createPurchasePaymentTerm.generated.ts +6 -0
  379. package/src/modules/purchase/command/createPurchasePaymentTerm.test.ts +140 -0
  380. package/src/modules/purchase/command/createPurchasePaymentTerm.ts +66 -0
  381. package/src/modules/purchase/command/createPurchasePriceList.generated.ts +6 -0
  382. package/src/modules/purchase/command/createPurchasePriceList.test.ts +108 -0
  383. package/src/modules/purchase/command/createPurchasePriceList.ts +63 -0
  384. package/src/modules/purchase/command/createPurchasePriceRule.generated.ts +6 -0
  385. package/src/modules/purchase/command/createPurchasePriceRule.test.ts +139 -0
  386. package/src/modules/purchase/command/createPurchasePriceRule.ts +95 -0
  387. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.generated.ts +6 -0
  388. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.test.ts +49 -0
  389. package/src/modules/purchase/command/deactivatePurchasePaymentTerm.ts +41 -0
  390. package/src/modules/purchase/command/deactivatePurchasePriceList.generated.ts +6 -0
  391. package/src/modules/purchase/command/deactivatePurchasePriceList.test.ts +50 -0
  392. package/src/modules/purchase/command/deactivatePurchasePriceList.ts +32 -0
  393. package/src/modules/purchase/command/deactivatePurchasePriceRule.generated.ts +6 -0
  394. package/src/modules/purchase/command/deactivatePurchasePriceRule.test.ts +50 -0
  395. package/src/modules/purchase/command/deactivatePurchasePriceRule.ts +32 -0
  396. package/src/modules/purchase/command/matchPurchaseBill.generated.ts +6 -0
  397. package/src/modules/purchase/command/matchPurchaseBill.test.ts +188 -0
  398. package/src/modules/purchase/command/matchPurchaseBill.ts +146 -0
  399. package/src/modules/purchase/command/postGoodsReceipt.generated.ts +6 -0
  400. package/src/modules/purchase/command/postGoodsReceipt.test.ts +210 -0
  401. package/src/modules/purchase/command/postGoodsReceipt.ts +143 -0
  402. package/src/modules/purchase/command/rejectPurchaseOrder.generated.ts +6 -0
  403. package/src/modules/purchase/command/rejectPurchaseOrder.test.ts +79 -0
  404. package/src/modules/purchase/command/rejectPurchaseOrder.ts +41 -0
  405. package/src/modules/purchase/command/releasePurchaseBill.generated.ts +6 -0
  406. package/src/modules/purchase/command/releasePurchaseBill.test.ts +94 -0
  407. package/src/modules/purchase/command/releasePurchaseBill.ts +111 -0
  408. package/src/modules/purchase/command/setSupplierDefaultPurchasePaymentTerm.generated.ts +6 -0
  409. package/src/modules/purchase/command/setSupplierDefaultPurchasePaymentTerm.test.ts +171 -0
  410. package/src/modules/purchase/command/setSupplierDefaultPurchasePaymentTerm.ts +90 -0
  411. package/src/modules/purchase/command/submitPurchaseOrder.generated.ts +6 -0
  412. package/src/modules/purchase/command/submitPurchaseOrder.test.ts +98 -0
  413. package/src/modules/purchase/command/submitPurchaseOrder.ts +73 -0
  414. package/src/modules/purchase/command/updateGoodsReceipt.generated.ts +6 -0
  415. package/src/modules/purchase/command/updateGoodsReceipt.test.ts +115 -0
  416. package/src/modules/purchase/command/updateGoodsReceipt.ts +73 -0
  417. package/src/modules/purchase/command/updatePurchaseBill.generated.ts +6 -0
  418. package/src/modules/purchase/command/updatePurchaseBill.test.ts +137 -0
  419. package/src/modules/purchase/command/updatePurchaseBill.ts +89 -0
  420. package/src/modules/purchase/command/updatePurchaseOrder.generated.ts +6 -0
  421. package/src/modules/purchase/command/updatePurchaseOrder.test.ts +195 -0
  422. package/src/modules/purchase/command/updatePurchaseOrder.ts +121 -0
  423. package/src/modules/purchase/command/updatePurchasePaymentTerm.generated.ts +6 -0
  424. package/src/modules/purchase/command/updatePurchasePaymentTerm.test.ts +154 -0
  425. package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +73 -0
  426. package/src/modules/purchase/command/updatePurchasePriceList.generated.ts +6 -0
  427. package/src/modules/purchase/command/updatePurchasePriceList.test.ts +73 -0
  428. package/src/modules/purchase/command/updatePurchasePriceList.ts +55 -0
  429. package/src/modules/purchase/command/updatePurchasePriceRule.generated.ts +6 -0
  430. package/src/modules/purchase/command/updatePurchasePriceRule.test.ts +191 -0
  431. package/src/modules/purchase/command/updatePurchasePriceRule.ts +104 -0
  432. package/src/modules/purchase/db/.gitkeep +0 -0
  433. package/src/modules/purchase/db/goodsReceipt.ts +62 -0
  434. package/src/modules/purchase/db/purchaseBill.ts +74 -0
  435. package/src/modules/purchase/db/purchaseOrder.ts +100 -0
  436. package/src/modules/purchase/db/purchasePaymentTerm.ts +46 -0
  437. package/src/modules/purchase/db/purchasePriceList.ts +53 -0
  438. package/src/modules/purchase/db/purchasePriceRule.ts +74 -0
  439. package/src/modules/purchase/db/supplierProfile.ts +59 -0
  440. package/src/modules/purchase/docs/commands/ActivatePurchasePaymentTerm.md +39 -0
  441. package/src/modules/purchase/docs/commands/ActivatePurchasePriceList.md +37 -0
  442. package/src/modules/purchase/docs/commands/ActivatePurchasePriceRule.md +47 -0
  443. package/src/modules/purchase/docs/commands/ApprovePurchaseOrder.md +55 -0
  444. package/src/modules/purchase/docs/commands/CancelGoodsReceipt.md +39 -0
  445. package/src/modules/purchase/docs/commands/CancelPurchaseBill.md +49 -0
  446. package/src/modules/purchase/docs/commands/CancelPurchaseOrder.md +47 -0
  447. package/src/modules/purchase/docs/commands/ClosePurchaseOrder.md +49 -0
  448. package/src/modules/purchase/docs/commands/CreateGoodsReceipt.md +54 -0
  449. package/src/modules/purchase/docs/commands/CreatePurchaseBill.md +59 -0
  450. package/src/modules/purchase/docs/commands/CreatePurchaseOrder.md +66 -0
  451. package/src/modules/purchase/docs/commands/CreatePurchasePaymentTerm.md +52 -0
  452. package/src/modules/purchase/docs/commands/CreatePurchasePriceList.md +48 -0
  453. package/src/modules/purchase/docs/commands/CreatePurchasePriceRule.md +62 -0
  454. package/src/modules/purchase/docs/commands/DeactivatePurchasePaymentTerm.md +42 -0
  455. package/src/modules/purchase/docs/commands/DeactivatePurchasePriceList.md +39 -0
  456. package/src/modules/purchase/docs/commands/DeactivatePurchasePriceRule.md +39 -0
  457. package/src/modules/purchase/docs/commands/MatchPurchaseBill.md +63 -0
  458. package/src/modules/purchase/docs/commands/PostGoodsReceipt.md +61 -0
  459. package/src/modules/purchase/docs/commands/RejectPurchaseOrder.md +44 -0
  460. package/src/modules/purchase/docs/commands/ReleasePurchaseBill.md +48 -0
  461. package/src/modules/purchase/docs/commands/SetSupplierDefaultPurchasePaymentTerm.md +50 -0
  462. package/src/modules/purchase/docs/commands/SubmitPurchaseOrder.md +51 -0
  463. package/src/modules/purchase/docs/commands/UpdateGoodsReceipt.md +48 -0
  464. package/src/modules/purchase/docs/commands/UpdatePurchaseBill.md +51 -0
  465. package/src/modules/purchase/docs/commands/UpdatePurchaseOrder.md +59 -0
  466. package/src/modules/purchase/docs/commands/UpdatePurchasePaymentTerm.md +51 -0
  467. package/src/modules/purchase/docs/commands/UpdatePurchasePriceList.md +43 -0
  468. package/src/modules/purchase/docs/commands/UpdatePurchasePriceRule.md +60 -0
  469. package/src/modules/purchase/docs/features/goods-receipt-matching.md +71 -0
  470. package/src/modules/purchase/docs/features/purchase-order-lifecycle.md +87 -0
  471. package/src/modules/purchase/docs/features/purchase-payment-terms.md +67 -0
  472. package/src/modules/purchase/docs/features/supplier-bill-matching.md +79 -0
  473. package/src/modules/purchase/docs/features/supplier-purchase-pricing.md +72 -0
  474. package/src/modules/purchase/docs/models/GoodsReceipt.md +58 -0
  475. package/src/modules/purchase/docs/models/PurchaseBill.md +68 -0
  476. package/src/modules/purchase/docs/models/PurchaseOrder.md +88 -0
  477. package/src/modules/purchase/docs/models/PurchasePaymentTerm.md +59 -0
  478. package/src/modules/purchase/docs/models/PurchasePriceList.md +53 -0
  479. package/src/modules/purchase/docs/models/PurchasePriceRule.md +58 -0
  480. package/src/modules/purchase/docs/models/SupplierProfile.md +37 -0
  481. package/src/modules/purchase/docs/queries/CalculatePurchaseBillDueSchedule.md +47 -0
  482. package/src/modules/purchase/docs/queries/CalculatePurchasePrice.md +53 -0
  483. package/src/modules/purchase/docs/queries/GetGoodsReceipt.md +36 -0
  484. package/src/modules/purchase/docs/queries/GetPurchaseBill.md +41 -0
  485. package/src/modules/purchase/docs/queries/GetPurchaseOrder.md +42 -0
  486. package/src/modules/purchase/docs/queries/GetPurchasePaymentTerm.md +36 -0
  487. package/src/modules/purchase/docs/queries/GetPurchasePriceList.md +36 -0
  488. package/src/modules/purchase/docs/queries/GetSupplierProfile.md +36 -0
  489. package/src/modules/purchase/executor/.gitkeep +0 -0
  490. package/src/modules/purchase/generated/.gitkeep +0 -0
  491. package/src/modules/purchase/generated/enums.ts +63 -0
  492. package/src/modules/purchase/generated/kysely-tailordb.ts +186 -0
  493. package/src/modules/purchase/index.ts +2 -0
  494. package/src/modules/purchase/lib/_db_deps.ts +77 -0
  495. package/src/modules/purchase/lib/domain.ts +467 -0
  496. package/src/modules/purchase/lib/errors.generated.ts +367 -0
  497. package/src/modules/purchase/lib/permissions.generated.ts +34 -0
  498. package/src/modules/purchase/lib/types.ts +65 -0
  499. package/src/modules/purchase/module.ts +218 -0
  500. package/src/modules/purchase/permissions.ts +1 -0
  501. package/src/modules/purchase/query/.gitkeep +0 -0
  502. package/src/modules/purchase/query/calculatePurchaseBillDueSchedule.generated.ts +5 -0
  503. package/src/modules/purchase/query/calculatePurchaseBillDueSchedule.test.ts +183 -0
  504. package/src/modules/purchase/query/calculatePurchaseBillDueSchedule.ts +41 -0
  505. package/src/modules/purchase/query/calculatePurchasePrice.generated.ts +5 -0
  506. package/src/modules/purchase/query/calculatePurchasePrice.test.ts +143 -0
  507. package/src/modules/purchase/query/calculatePurchasePrice.ts +113 -0
  508. package/src/modules/purchase/query/getGoodsReceipt.generated.ts +5 -0
  509. package/src/modules/purchase/query/getGoodsReceipt.test.ts +42 -0
  510. package/src/modules/purchase/query/getGoodsReceipt.ts +27 -0
  511. package/src/modules/purchase/query/getPurchaseBill.generated.ts +5 -0
  512. package/src/modules/purchase/query/getPurchaseBill.test.ts +69 -0
  513. package/src/modules/purchase/query/getPurchaseBill.ts +35 -0
  514. package/src/modules/purchase/query/getPurchaseOrder.generated.ts +5 -0
  515. package/src/modules/purchase/query/getPurchaseOrder.test.ts +65 -0
  516. package/src/modules/purchase/query/getPurchaseOrder.ts +33 -0
  517. package/src/modules/purchase/query/getPurchasePaymentTerm.generated.ts +5 -0
  518. package/src/modules/purchase/query/getPurchasePaymentTerm.test.ts +44 -0
  519. package/src/modules/purchase/query/getPurchasePaymentTerm.ts +30 -0
  520. package/src/modules/purchase/query/getPurchasePriceList.generated.ts +5 -0
  521. package/src/modules/purchase/query/getPurchasePriceList.test.ts +48 -0
  522. package/src/modules/purchase/query/getPurchasePriceList.ts +30 -0
  523. package/src/modules/purchase/query/getSupplierProfile.generated.ts +5 -0
  524. package/src/modules/purchase/query/getSupplierProfile.test.ts +50 -0
  525. package/src/modules/purchase/query/getSupplierProfile.ts +18 -0
  526. package/src/modules/purchase/tailor.config.ts +13 -0
  527. package/src/modules/purchase/tailor.d.ts +13 -0
  528. package/src/modules/purchase/testing/commandTestUtils.ts +35 -0
  529. package/src/modules/purchase/testing/fixtures.ts +317 -0
  530. package/src/modules/sales/README.md +69 -0
  531. package/src/modules/sales/command/.gitkeep +0 -0
  532. package/src/modules/sales/command/activateChannel.generated.ts +6 -0
  533. package/src/modules/sales/command/activateChannel.test.ts +70 -0
  534. package/src/modules/sales/command/activateChannel.ts +48 -0
  535. package/src/modules/sales/command/activateListing.generated.ts +6 -0
  536. package/src/modules/sales/command/activateListing.test.ts +87 -0
  537. package/src/modules/sales/command/activateListing.ts +49 -0
  538. package/src/modules/sales/command/activateSalesPaymentTerm.generated.ts +6 -0
  539. package/src/modules/sales/command/activateSalesPaymentTerm.test.ts +58 -0
  540. package/src/modules/sales/command/activateSalesPaymentTerm.ts +50 -0
  541. package/src/modules/sales/command/activateSalesPriceList.generated.ts +6 -0
  542. package/src/modules/sales/command/activateSalesPriceList.test.ts +55 -0
  543. package/src/modules/sales/command/activateSalesPriceList.ts +46 -0
  544. package/src/modules/sales/command/activateSalesPriceRule.generated.ts +6 -0
  545. package/src/modules/sales/command/activateSalesPriceRule.test.ts +83 -0
  546. package/src/modules/sales/command/activateSalesPriceRule.ts +58 -0
  547. package/src/modules/sales/command/cancelChannelOrder.generated.ts +6 -0
  548. package/src/modules/sales/command/cancelChannelOrder.test.ts +47 -0
  549. package/src/modules/sales/command/cancelChannelOrder.ts +30 -0
  550. package/src/modules/sales/command/cancelSalesInvoice.generated.ts +6 -0
  551. package/src/modules/sales/command/cancelSalesInvoice.test.ts +47 -0
  552. package/src/modules/sales/command/cancelSalesInvoice.ts +37 -0
  553. package/src/modules/sales/command/cancelSalesOrder.generated.ts +6 -0
  554. package/src/modules/sales/command/cancelSalesOrder.test.ts +70 -0
  555. package/src/modules/sales/command/cancelSalesOrder.ts +48 -0
  556. package/src/modules/sales/command/cancelSyncJob.generated.ts +6 -0
  557. package/src/modules/sales/command/cancelSyncJob.test.ts +58 -0
  558. package/src/modules/sales/command/cancelSyncJob.ts +30 -0
  559. package/src/modules/sales/command/closeSalesOrder.generated.ts +6 -0
  560. package/src/modules/sales/command/closeSalesOrder.test.ts +41 -0
  561. package/src/modules/sales/command/closeSalesOrder.ts +51 -0
  562. package/src/modules/sales/command/confirmSalesOrder.generated.ts +6 -0
  563. package/src/modules/sales/command/confirmSalesOrder.test.ts +68 -0
  564. package/src/modules/sales/command/confirmSalesOrder.ts +67 -0
  565. package/src/modules/sales/command/convertChannelOrder.generated.ts +6 -0
  566. package/src/modules/sales/command/convertChannelOrder.test.ts +118 -0
  567. package/src/modules/sales/command/convertChannelOrder.ts +151 -0
  568. package/src/modules/sales/command/createChannel.generated.ts +6 -0
  569. package/src/modules/sales/command/createChannel.test.ts +100 -0
  570. package/src/modules/sales/command/createChannel.ts +58 -0
  571. package/src/modules/sales/command/createListing.generated.ts +6 -0
  572. package/src/modules/sales/command/createListing.test.ts +88 -0
  573. package/src/modules/sales/command/createListing.ts +76 -0
  574. package/src/modules/sales/command/createSalesCreditNote.generated.ts +6 -0
  575. package/src/modules/sales/command/createSalesCreditNote.test.ts +56 -0
  576. package/src/modules/sales/command/createSalesCreditNote.ts +75 -0
  577. package/src/modules/sales/command/createSalesInvoice.generated.ts +6 -0
  578. package/src/modules/sales/command/createSalesInvoice.test.ts +85 -0
  579. package/src/modules/sales/command/createSalesInvoice.ts +94 -0
  580. package/src/modules/sales/command/createSalesOrder.generated.ts +6 -0
  581. package/src/modules/sales/command/createSalesOrder.test.ts +134 -0
  582. package/src/modules/sales/command/createSalesOrder.ts +140 -0
  583. package/src/modules/sales/command/createSalesPaymentTerm.generated.ts +6 -0
  584. package/src/modules/sales/command/createSalesPaymentTerm.test.ts +59 -0
  585. package/src/modules/sales/command/createSalesPaymentTerm.ts +50 -0
  586. package/src/modules/sales/command/createSalesPriceList.generated.ts +6 -0
  587. package/src/modules/sales/command/createSalesPriceList.test.ts +67 -0
  588. package/src/modules/sales/command/createSalesPriceList.ts +45 -0
  589. package/src/modules/sales/command/createSalesPriceRule.generated.ts +6 -0
  590. package/src/modules/sales/command/createSalesPriceRule.test.ts +137 -0
  591. package/src/modules/sales/command/createSalesPriceRule.ts +66 -0
  592. package/src/modules/sales/command/createShipment.generated.ts +6 -0
  593. package/src/modules/sales/command/createShipment.test.ts +75 -0
  594. package/src/modules/sales/command/createShipment.ts +86 -0
  595. package/src/modules/sales/command/deactivateChannel.generated.ts +6 -0
  596. package/src/modules/sales/command/deactivateChannel.test.ts +29 -0
  597. package/src/modules/sales/command/deactivateChannel.ts +30 -0
  598. package/src/modules/sales/command/deactivateSalesPaymentTerm.generated.ts +6 -0
  599. package/src/modules/sales/command/deactivateSalesPaymentTerm.test.ts +29 -0
  600. package/src/modules/sales/command/deactivateSalesPaymentTerm.ts +37 -0
  601. package/src/modules/sales/command/deactivateSalesPriceList.generated.ts +6 -0
  602. package/src/modules/sales/command/deactivateSalesPriceList.test.ts +33 -0
  603. package/src/modules/sales/command/deactivateSalesPriceList.ts +37 -0
  604. package/src/modules/sales/command/deactivateSalesPriceRule.generated.ts +6 -0
  605. package/src/modules/sales/command/deactivateSalesPriceRule.test.ts +33 -0
  606. package/src/modules/sales/command/deactivateSalesPriceRule.ts +37 -0
  607. package/src/modules/sales/command/issueSalesCreditNote.generated.ts +6 -0
  608. package/src/modules/sales/command/issueSalesCreditNote.test.ts +62 -0
  609. package/src/modules/sales/command/issueSalesCreditNote.ts +71 -0
  610. package/src/modules/sales/command/issueSalesInvoice.generated.ts +6 -0
  611. package/src/modules/sales/command/issueSalesInvoice.test.ts +88 -0
  612. package/src/modules/sales/command/issueSalesInvoice.ts +115 -0
  613. package/src/modules/sales/command/markChannelOrderException.generated.ts +6 -0
  614. package/src/modules/sales/command/markChannelOrderException.test.ts +59 -0
  615. package/src/modules/sales/command/markChannelOrderException.ts +49 -0
  616. package/src/modules/sales/command/pauseListing.generated.ts +6 -0
  617. package/src/modules/sales/command/pauseListing.test.ts +40 -0
  618. package/src/modules/sales/command/pauseListing.ts +30 -0
  619. package/src/modules/sales/command/placeSalesOrderOnCreditHold.generated.ts +6 -0
  620. package/src/modules/sales/command/placeSalesOrderOnCreditHold.test.ts +74 -0
  621. package/src/modules/sales/command/placeSalesOrderOnCreditHold.ts +46 -0
  622. package/src/modules/sales/command/postShipment.generated.ts +6 -0
  623. package/src/modules/sales/command/postShipment.test.ts +97 -0
  624. package/src/modules/sales/command/postShipment.ts +89 -0
  625. package/src/modules/sales/command/recordChannelOrder.generated.ts +6 -0
  626. package/src/modules/sales/command/recordChannelOrder.test.ts +124 -0
  627. package/src/modules/sales/command/recordChannelOrder.ts +93 -0
  628. package/src/modules/sales/command/rejectSalesOrder.generated.ts +6 -0
  629. package/src/modules/sales/command/rejectSalesOrder.test.ts +78 -0
  630. package/src/modules/sales/command/rejectSalesOrder.ts +42 -0
  631. package/src/modules/sales/command/releaseSalesOrderCreditHold.generated.ts +6 -0
  632. package/src/modules/sales/command/releaseSalesOrderCreditHold.test.ts +50 -0
  633. package/src/modules/sales/command/releaseSalesOrderCreditHold.ts +51 -0
  634. package/src/modules/sales/command/retireListing.generated.ts +6 -0
  635. package/src/modules/sales/command/retireListing.test.ts +42 -0
  636. package/src/modules/sales/command/retireListing.ts +30 -0
  637. package/src/modules/sales/command/retrySyncJob.generated.ts +6 -0
  638. package/src/modules/sales/command/retrySyncJob.test.ts +54 -0
  639. package/src/modules/sales/command/retrySyncJob.ts +44 -0
  640. package/src/modules/sales/command/sendSalesInvoice.generated.ts +6 -0
  641. package/src/modules/sales/command/sendSalesInvoice.test.ts +50 -0
  642. package/src/modules/sales/command/sendSalesInvoice.ts +43 -0
  643. package/src/modules/sales/command/startSyncJob.generated.ts +6 -0
  644. package/src/modules/sales/command/startSyncJob.test.ts +65 -0
  645. package/src/modules/sales/command/startSyncJob.ts +54 -0
  646. package/src/modules/sales/command/submitSalesOrder.generated.ts +6 -0
  647. package/src/modules/sales/command/submitSalesOrder.test.ts +58 -0
  648. package/src/modules/sales/command/submitSalesOrder.ts +49 -0
  649. package/src/modules/sales/command/updateChannel.generated.ts +6 -0
  650. package/src/modules/sales/command/updateChannel.test.ts +71 -0
  651. package/src/modules/sales/command/updateChannel.ts +68 -0
  652. package/src/modules/sales/command/updateListing.generated.ts +6 -0
  653. package/src/modules/sales/command/updateListing.test.ts +56 -0
  654. package/src/modules/sales/command/updateListing.ts +60 -0
  655. package/src/modules/sales/command/updateSalesCreditNote.generated.ts +6 -0
  656. package/src/modules/sales/command/updateSalesCreditNote.test.ts +68 -0
  657. package/src/modules/sales/command/updateSalesCreditNote.ts +68 -0
  658. package/src/modules/sales/command/updateSalesInvoice.generated.ts +6 -0
  659. package/src/modules/sales/command/updateSalesInvoice.test.ts +73 -0
  660. package/src/modules/sales/command/updateSalesInvoice.ts +80 -0
  661. package/src/modules/sales/command/updateSalesOrder.generated.ts +6 -0
  662. package/src/modules/sales/command/updateSalesOrder.test.ts +93 -0
  663. package/src/modules/sales/command/updateSalesOrder.ts +121 -0
  664. package/src/modules/sales/command/updateSalesPaymentTerm.generated.ts +6 -0
  665. package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +66 -0
  666. package/src/modules/sales/command/updateSalesPaymentTerm.ts +59 -0
  667. package/src/modules/sales/command/updateSalesPriceList.generated.ts +6 -0
  668. package/src/modules/sales/command/updateSalesPriceList.test.ts +71 -0
  669. package/src/modules/sales/command/updateSalesPriceList.ts +52 -0
  670. package/src/modules/sales/command/updateSalesPriceRule.generated.ts +6 -0
  671. package/src/modules/sales/command/updateSalesPriceRule.test.ts +95 -0
  672. package/src/modules/sales/command/updateSalesPriceRule.ts +81 -0
  673. package/src/modules/sales/command/updateShipment.generated.ts +6 -0
  674. package/src/modules/sales/command/updateShipment.test.ts +78 -0
  675. package/src/modules/sales/command/updateShipment.ts +84 -0
  676. package/src/modules/sales/db/.gitkeep +0 -0
  677. package/src/modules/sales/db/channel.ts +43 -0
  678. package/src/modules/sales/db/channelOrder.ts +109 -0
  679. package/src/modules/sales/db/channelOrderLine.ts +84 -0
  680. package/src/modules/sales/db/listing.ts +81 -0
  681. package/src/modules/sales/db/salesCreditNote.ts +63 -0
  682. package/src/modules/sales/db/salesCreditNoteLine.ts +49 -0
  683. package/src/modules/sales/db/salesInvoice.ts +95 -0
  684. package/src/modules/sales/db/salesInvoiceLine.ts +64 -0
  685. package/src/modules/sales/db/salesOrder.ts +103 -0
  686. package/src/modules/sales/db/salesOrderLine.ts +82 -0
  687. package/src/modules/sales/db/salesPaymentTerm.ts +46 -0
  688. package/src/modules/sales/db/salesPriceList.ts +61 -0
  689. package/src/modules/sales/db/salesPriceRule.ts +96 -0
  690. package/src/modules/sales/db/shipment.ts +78 -0
  691. package/src/modules/sales/db/shipmentLine.ts +58 -0
  692. package/src/modules/sales/db/syncJob.ts +70 -0
  693. package/src/modules/sales/docs/commands/ActivateChannel.md +42 -0
  694. package/src/modules/sales/docs/commands/ActivateListing.md +46 -0
  695. package/src/modules/sales/docs/commands/ActivateSalesPaymentTerm.md +41 -0
  696. package/src/modules/sales/docs/commands/ActivateSalesPriceList.md +39 -0
  697. package/src/modules/sales/docs/commands/ActivateSalesPriceRule.md +48 -0
  698. package/src/modules/sales/docs/commands/CancelChannelOrder.md +37 -0
  699. package/src/modules/sales/docs/commands/CancelSalesInvoice.md +39 -0
  700. package/src/modules/sales/docs/commands/CancelSalesOrder.md +40 -0
  701. package/src/modules/sales/docs/commands/CancelSyncJob.md +36 -0
  702. package/src/modules/sales/docs/commands/CloseSalesOrder.md +39 -0
  703. package/src/modules/sales/docs/commands/ConfirmSalesOrder.md +43 -0
  704. package/src/modules/sales/docs/commands/ConvertChannelOrder.md +44 -0
  705. package/src/modules/sales/docs/commands/CreateChannel.md +40 -0
  706. package/src/modules/sales/docs/commands/CreateListing.md +40 -0
  707. package/src/modules/sales/docs/commands/CreateSalesCreditNote.md +37 -0
  708. package/src/modules/sales/docs/commands/CreateSalesInvoice.md +39 -0
  709. package/src/modules/sales/docs/commands/CreateSalesOrder.md +51 -0
  710. package/src/modules/sales/docs/commands/CreateSalesPaymentTerm.md +38 -0
  711. package/src/modules/sales/docs/commands/CreateSalesPriceList.md +37 -0
  712. package/src/modules/sales/docs/commands/CreateSalesPriceRule.md +46 -0
  713. package/src/modules/sales/docs/commands/CreateShipment.md +38 -0
  714. package/src/modules/sales/docs/commands/DeactivateChannel.md +35 -0
  715. package/src/modules/sales/docs/commands/DeactivateSalesPaymentTerm.md +35 -0
  716. package/src/modules/sales/docs/commands/DeactivateSalesPriceList.md +35 -0
  717. package/src/modules/sales/docs/commands/DeactivateSalesPriceRule.md +35 -0
  718. package/src/modules/sales/docs/commands/IssueSalesCreditNote.md +38 -0
  719. package/src/modules/sales/docs/commands/IssueSalesInvoice.md +43 -0
  720. package/src/modules/sales/docs/commands/MarkChannelOrderException.md +37 -0
  721. package/src/modules/sales/docs/commands/PauseListing.md +36 -0
  722. package/src/modules/sales/docs/commands/PlaceSalesOrderOnCreditHold.md +41 -0
  723. package/src/modules/sales/docs/commands/PostShipment.md +41 -0
  724. package/src/modules/sales/docs/commands/RecordChannelOrder.md +45 -0
  725. package/src/modules/sales/docs/commands/RejectSalesOrder.md +41 -0
  726. package/src/modules/sales/docs/commands/ReleaseSalesOrderCreditHold.md +36 -0
  727. package/src/modules/sales/docs/commands/RetireListing.md +36 -0
  728. package/src/modules/sales/docs/commands/RetrySyncJob.md +39 -0
  729. package/src/modules/sales/docs/commands/SendSalesInvoice.md +38 -0
  730. package/src/modules/sales/docs/commands/StartSyncJob.md +39 -0
  731. package/src/modules/sales/docs/commands/SubmitSalesOrder.md +43 -0
  732. package/src/modules/sales/docs/commands/UpdateChannel.md +43 -0
  733. package/src/modules/sales/docs/commands/UpdateListing.md +38 -0
  734. package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +38 -0
  735. package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +38 -0
  736. package/src/modules/sales/docs/commands/UpdateSalesOrder.md +45 -0
  737. package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +41 -0
  738. package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +40 -0
  739. package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +49 -0
  740. package/src/modules/sales/docs/commands/UpdateShipment.md +38 -0
  741. package/src/modules/sales/docs/commands/bin/rm.md +52 -0
  742. package/src/modules/sales/docs/commands/opt/homebrew/bin/codex.md +52 -0
  743. package/src/modules/sales/docs/commands/opt/homebrew/bin/ps2ps2.md +52 -0
  744. package/src/modules/sales/docs/commands/opt/homebrew/bin/rg.md +52 -0
  745. package/src/modules/sales/docs/commands/opt/homebrew/bin/sha384sum.md +52 -0
  746. package/src/modules/sales/docs/commands/opt/homebrew/opt/libpq/bin/pg_combinebackup.md +52 -0
  747. package/src/modules/sales/docs/commands/sbin/mount_msdos.md +52 -0
  748. package/src/modules/sales/docs/commands/sbin/mount_nfs.md +52 -0
  749. package/src/modules/sales/docs/commands/usr/bin/cupstestppd.md +52 -0
  750. package/src/modules/sales/docs/commands/usr/bin/enc2xs.md +52 -0
  751. package/src/modules/sales/docs/commands/usr/bin/hash.md +52 -0
  752. package/src/modules/sales/docs/commands/usr/bin/jarsigner.md +52 -0
  753. package/src/modules/sales/docs/commands/usr/bin/mpsgraphtool.md +52 -0
  754. package/src/modules/sales/docs/commands/usr/bin/nano.md +52 -0
  755. package/src/modules/sales/docs/commands/usr/bin/pod2html5.34.md +52 -0
  756. package/src/modules/sales/docs/commands/usr/bin/ri.md +52 -0
  757. package/src/modules/sales/docs/commands/usr/bin/rs.md +52 -0
  758. package/src/modules/sales/docs/commands/usr/bin/trustcachectl.md +52 -0
  759. package/src/modules/sales/docs/commands/usr/sbin/htpasswd.md +52 -0
  760. package/src/modules/sales/docs/commands/usr/sbin/lpadmin.md +52 -0
  761. package/src/modules/sales/docs/commands/usr/sbin/setkey.md +52 -0
  762. package/src/modules/sales/docs/features/channel-listing-management.md +68 -0
  763. package/src/modules/sales/docs/features/channel-order-sync.md +78 -0
  764. package/src/modules/sales/docs/features/customer-invoicing.md +89 -0
  765. package/src/modules/sales/docs/features/customer-sales-pricing.md +72 -0
  766. package/src/modules/sales/docs/features/sales-order-lifecycle.md +96 -0
  767. package/src/modules/sales/docs/features/sales-payment-terms.md +67 -0
  768. package/src/modules/sales/docs/features/shipment-fulfillment.md +71 -0
  769. package/src/modules/sales/docs/models/Channel.md +48 -0
  770. package/src/modules/sales/docs/models/ChannelOrder.md +56 -0
  771. package/src/modules/sales/docs/models/ChannelOrderLine.md +39 -0
  772. package/src/modules/sales/docs/models/Listing.md +56 -0
  773. package/src/modules/sales/docs/models/SalesCreditNote.md +47 -0
  774. package/src/modules/sales/docs/models/SalesCreditNoteLine.md +37 -0
  775. package/src/modules/sales/docs/models/SalesInvoice.md +55 -0
  776. package/src/modules/sales/docs/models/SalesInvoiceLine.md +39 -0
  777. package/src/modules/sales/docs/models/SalesOrder.md +79 -0
  778. package/src/modules/sales/docs/models/SalesOrderLine.md +42 -0
  779. package/src/modules/sales/docs/models/SalesPaymentTerm.md +53 -0
  780. package/src/modules/sales/docs/models/SalesPriceList.md +50 -0
  781. package/src/modules/sales/docs/models/SalesPriceRule.md +51 -0
  782. package/src/modules/sales/docs/models/Shipment.md +49 -0
  783. package/src/modules/sales/docs/models/ShipmentLine.md +38 -0
  784. package/src/modules/sales/docs/models/SyncJob.md +53 -0
  785. package/src/modules/sales/docs/queries/CalculateInvoiceDueSchedule.md +37 -0
  786. package/src/modules/sales/docs/queries/GetApplicableSalesPrice.md +38 -0
  787. package/src/modules/sales/docs/queries/GetChannel.md +34 -0
  788. package/src/modules/sales/docs/queries/GetChannelOrder.md +34 -0
  789. package/src/modules/sales/docs/queries/GetListing.md +34 -0
  790. package/src/modules/sales/docs/queries/GetListingByExternalIdentifier.md +35 -0
  791. package/src/modules/sales/docs/queries/GetSalesCreditNote.md +34 -0
  792. package/src/modules/sales/docs/queries/GetSalesInvoice.md +34 -0
  793. package/src/modules/sales/docs/queries/GetSalesOrder.md +36 -0
  794. package/src/modules/sales/docs/queries/GetSalesPaymentTerm.md +34 -0
  795. package/src/modules/sales/docs/queries/GetSalesPriceList.md +34 -0
  796. package/src/modules/sales/docs/queries/GetShipment.md +34 -0
  797. package/src/modules/sales/docs/queries/GetSyncJob.md +34 -0
  798. package/src/modules/sales/docs/queries/ListChannelOrdersByStatus.md +34 -0
  799. package/src/modules/sales/docs/queries/ListChannels.md +33 -0
  800. package/src/modules/sales/docs/queries/ListListingsByChannel.md +33 -0
  801. package/src/modules/sales/docs/queries/ListSalesCreditNotesByInvoice.md +33 -0
  802. package/src/modules/sales/docs/queries/ListSalesInvoicesBySalesOrder.md +33 -0
  803. package/src/modules/sales/docs/queries/ListSalesOrders.md +36 -0
  804. package/src/modules/sales/docs/queries/ListSalesPaymentTerms.md +33 -0
  805. package/src/modules/sales/docs/queries/ListSalesPriceLists.md +33 -0
  806. package/src/modules/sales/docs/queries/ListSalesPriceRulesByPriceList.md +33 -0
  807. package/src/modules/sales/docs/queries/ListShipmentsBySalesOrder.md +33 -0
  808. package/src/modules/sales/docs/queries/ListSyncJobs.md +34 -0
  809. package/src/modules/sales/executor/.gitkeep +0 -0
  810. package/src/modules/sales/generated/.gitkeep +0 -0
  811. package/src/modules/sales/generated/enums.ts +119 -0
  812. package/src/modules/sales/generated/kysely-tailordb.ts +332 -0
  813. package/src/modules/sales/index.ts +2 -0
  814. package/src/modules/sales/lib/_db_deps.ts +67 -0
  815. package/src/modules/sales/lib/domain.ts +354 -0
  816. package/src/modules/sales/lib/errors.generated.ts +417 -0
  817. package/src/modules/sales/lib/permissions.generated.ts +53 -0
  818. package/src/modules/sales/lib/repository.ts +137 -0
  819. package/src/modules/sales/lib/types.ts +105 -0
  820. package/src/modules/sales/module.ts +418 -0
  821. package/src/modules/sales/permissions.ts +3 -0
  822. package/src/modules/sales/query/.gitkeep +0 -0
  823. package/src/modules/sales/query/calculateInvoiceDueSchedule.generated.ts +5 -0
  824. package/src/modules/sales/query/calculateInvoiceDueSchedule.test.ts +107 -0
  825. package/src/modules/sales/query/calculateInvoiceDueSchedule.ts +35 -0
  826. package/src/modules/sales/query/getApplicableSalesPrice.generated.ts +5 -0
  827. package/src/modules/sales/query/getApplicableSalesPrice.test.ts +110 -0
  828. package/src/modules/sales/query/getApplicableSalesPrice.ts +81 -0
  829. package/src/modules/sales/query/getChannel.generated.ts +5 -0
  830. package/src/modules/sales/query/getChannel.test.ts +39 -0
  831. package/src/modules/sales/query/getChannel.ts +15 -0
  832. package/src/modules/sales/query/getChannelOrder.generated.ts +5 -0
  833. package/src/modules/sales/query/getChannelOrder.test.ts +50 -0
  834. package/src/modules/sales/query/getChannelOrder.ts +29 -0
  835. package/src/modules/sales/query/getListing.generated.ts +5 -0
  836. package/src/modules/sales/query/getListing.test.ts +39 -0
  837. package/src/modules/sales/query/getListing.ts +15 -0
  838. package/src/modules/sales/query/getListingByExternalIdentifier.generated.ts +5 -0
  839. package/src/modules/sales/query/getListingByExternalIdentifier.test.ts +61 -0
  840. package/src/modules/sales/query/getListingByExternalIdentifier.ts +23 -0
  841. package/src/modules/sales/query/getSalesCreditNote.generated.ts +5 -0
  842. package/src/modules/sales/query/getSalesCreditNote.test.ts +44 -0
  843. package/src/modules/sales/query/getSalesCreditNote.ts +14 -0
  844. package/src/modules/sales/query/getSalesInvoice.generated.ts +5 -0
  845. package/src/modules/sales/query/getSalesInvoice.test.ts +44 -0
  846. package/src/modules/sales/query/getSalesInvoice.ts +14 -0
  847. package/src/modules/sales/query/getSalesOrder.generated.ts +5 -0
  848. package/src/modules/sales/query/getSalesOrder.test.ts +57 -0
  849. package/src/modules/sales/query/getSalesOrder.ts +20 -0
  850. package/src/modules/sales/query/getSalesPaymentTerm.generated.ts +5 -0
  851. package/src/modules/sales/query/getSalesPaymentTerm.test.ts +44 -0
  852. package/src/modules/sales/query/getSalesPaymentTerm.ts +24 -0
  853. package/src/modules/sales/query/getSalesPriceList.generated.ts +5 -0
  854. package/src/modules/sales/query/getSalesPriceList.test.ts +39 -0
  855. package/src/modules/sales/query/getSalesPriceList.ts +15 -0
  856. package/src/modules/sales/query/getShipment.generated.ts +5 -0
  857. package/src/modules/sales/query/getShipment.test.ts +44 -0
  858. package/src/modules/sales/query/getShipment.ts +12 -0
  859. package/src/modules/sales/query/getSyncJob.generated.ts +5 -0
  860. package/src/modules/sales/query/getSyncJob.test.ts +43 -0
  861. package/src/modules/sales/query/getSyncJob.ts +24 -0
  862. package/src/modules/sales/query/listChannelOrdersByStatus.generated.ts +5 -0
  863. package/src/modules/sales/query/listChannelOrdersByStatus.test.ts +58 -0
  864. package/src/modules/sales/query/listChannelOrdersByStatus.ts +53 -0
  865. package/src/modules/sales/query/listChannels.generated.ts +5 -0
  866. package/src/modules/sales/query/listChannels.test.ts +36 -0
  867. package/src/modules/sales/query/listChannels.ts +39 -0
  868. package/src/modules/sales/query/listListingsByChannel.generated.ts +5 -0
  869. package/src/modules/sales/query/listListingsByChannel.test.ts +36 -0
  870. package/src/modules/sales/query/listListingsByChannel.ts +39 -0
  871. package/src/modules/sales/query/listSalesCreditNotesByInvoice.generated.ts +5 -0
  872. package/src/modules/sales/query/listSalesCreditNotesByInvoice.test.ts +36 -0
  873. package/src/modules/sales/query/listSalesCreditNotesByInvoice.ts +42 -0
  874. package/src/modules/sales/query/listSalesInvoicesBySalesOrder.generated.ts +5 -0
  875. package/src/modules/sales/query/listSalesInvoicesBySalesOrder.test.ts +36 -0
  876. package/src/modules/sales/query/listSalesInvoicesBySalesOrder.ts +42 -0
  877. package/src/modules/sales/query/listSalesOrders.generated.ts +5 -0
  878. package/src/modules/sales/query/listSalesOrders.test.ts +79 -0
  879. package/src/modules/sales/query/listSalesOrders.ts +67 -0
  880. package/src/modules/sales/query/listSalesPaymentTerms.generated.ts +5 -0
  881. package/src/modules/sales/query/listSalesPaymentTerms.test.ts +36 -0
  882. package/src/modules/sales/query/listSalesPaymentTerms.ts +42 -0
  883. package/src/modules/sales/query/listSalesPriceLists.generated.ts +5 -0
  884. package/src/modules/sales/query/listSalesPriceLists.test.ts +36 -0
  885. package/src/modules/sales/query/listSalesPriceLists.ts +39 -0
  886. package/src/modules/sales/query/listSalesPriceRulesByPriceList.generated.ts +5 -0
  887. package/src/modules/sales/query/listSalesPriceRulesByPriceList.test.ts +39 -0
  888. package/src/modules/sales/query/listSalesPriceRulesByPriceList.ts +47 -0
  889. package/src/modules/sales/query/listShipmentsBySalesOrder.generated.ts +5 -0
  890. package/src/modules/sales/query/listShipmentsBySalesOrder.test.ts +36 -0
  891. package/src/modules/sales/query/listShipmentsBySalesOrder.ts +36 -0
  892. package/src/modules/sales/query/listSyncJobs.generated.ts +5 -0
  893. package/src/modules/sales/query/listSyncJobs.test.ts +50 -0
  894. package/src/modules/sales/query/listSyncJobs.ts +47 -0
  895. package/src/modules/sales/tailor.config.ts +13 -0
  896. package/src/modules/sales/tailor.d.ts +13 -0
  897. package/src/modules/sales/testing/commandTestUtils.ts +35 -0
  898. package/src/modules/sales/testing/fixtures.ts +520 -0
  899. package/src/modules/user-management/command/.gitkeep +0 -0
  900. package/src/modules/user-management/db/.gitkeep +0 -0
  901. package/src/modules/user-management/executor/.gitkeep +0 -0
  902. package/src/modules/user-management/generated/.gitkeep +0 -0
  903. package/src/modules/user-management/lib/errors.generated.ts +0 -5
  904. package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -2
  905. package/src/modules/user-management/permissions.ts +3 -0
  906. package/src/modules/user-management/query/.gitkeep +0 -0
  907. package/src/modules/user-management/query/listRolePermissionsByRole.generated.ts +5 -0
  908. package/src/modules/user-management/query/listRolePermissionsByRole.test.ts +20 -0
  909. package/src/modules/user-management/query/listRolePermissionsByRole.ts +28 -0
  910. package/src/modules/user-management/query/listUserRolesByUser.generated.ts +5 -0
  911. package/src/modules/user-management/query/listUserRolesByUser.test.ts +20 -0
  912. package/src/modules/user-management/query/listUserRolesByUser.ts +28 -0
  913. package/src/schemas.ts +6 -6
  914. package/src/shared/defineCommand.ts +1 -1
  915. package/src/shared/entityTypes.ts +1 -1
  916. package/src/shared/uuidv5.test.ts +18 -0
  917. package/src/shared/uuidv5.ts +23 -0
  918. package/src/testing/index.ts +1 -1
  919. package/templates/scaffold/app/backend/package.json +1 -3
  920. package/templates/scaffold/app/backend/seed/exec.mjs +7 -5
  921. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +0 -11
  922. package/templates/scaffold/module/seed/index.ts +19 -0
  923. /package/schemas/{app-compose → app}/actors.yml +0 -0
  924. /package/schemas/{app-compose → app}/business-flow.yml +0 -0
  925. /package/schemas/{app-compose → app}/requirements.yml +0 -0
  926. /package/schemas/{app-compose → app}/resolver.yml +0 -0
  927. /package/schemas/{app-compose → app}/screen.yml +0 -0
  928. /package/schemas/{app-compose → app}/story.yml +0 -0
  929. /package/src/modules/{purchase → inventory/command}/.gitkeep +0 -0
@@ -0,0 +1,108 @@
1
+ # Query Doc → Test Coverage Parity Check
2
+
3
+ ## Context
4
+
5
+ Module: {{MODULE_NAME}}
6
+ Query docs: {{QUERY_DOCS}}
7
+ Test code: {{QUERY_TEST_CODE}}
8
+
9
+ ## Instructions
10
+
11
+ 1. Read ALL query docs at the paths above
12
+ 2. Read ALL test code files at the paths above
13
+ 3. For each query doc, extract process flow branches, error scenarios, and edge cases
14
+ 4. For each test file, extract test case descriptions and assertions
15
+ 5. Run every parity check below against each query
16
+ 6. Return results as JSON per the Output Format section
17
+
18
+ ## Extraction: Query Docs
19
+
20
+ From each query doc, extract:
21
+
22
+ ### Process Flow Branches
23
+
24
+ From the mermaid flowchart, identify each decision node and its outcomes:
25
+
26
+ - Decision: "Permission check?" → Authorized path, Unauthorized path
27
+ - Decision: "Entity exists?" → Found path, Not found path
28
+ - Decision: "Scope valid?" → Valid scope path, Invalid scope path
29
+ - Each terminal node = one expected test case
30
+
31
+ ### Error Scenarios
32
+
33
+ From the Error Scenarios section:
34
+
35
+ - Error code + condition = one expected error test case
36
+
37
+ ### Null/Empty Return Paths
38
+
39
+ From the process flow, identify "not found → return null" or "no results → return empty array" patterns:
40
+
41
+ - These need explicit test cases
42
+
43
+ ### Pagination Scenarios
44
+
45
+ For paginated queries:
46
+
47
+ - Has more results → `hasNextPage: true`
48
+ - Last page → `hasNextPage: false`
49
+ - Empty results → empty items array
50
+
51
+ ## Extraction: Test Code
52
+
53
+ From each test file (`query/*.test.ts`), extract:
54
+
55
+ - **Test descriptions**: `it("...")` or `test("...")` strings
56
+ - **Error assertions**: checks for specific error types/codes
57
+ - **Happy path tests**: tests that verify successful outcomes
58
+ - **Null/empty result tests**: tests that verify not-found or empty list handling
59
+ - **Authorization tests**: tests that verify permission and scope checks
60
+ - **Fixture usage**: which fixtures are used
61
+
62
+ See [testing.md](testing.md) for canonical testing patterns.
63
+
64
+ ## Parity Checks
65
+
66
+ For each query:
67
+
68
+ | Check ID | Question |
69
+ | ----------------------- | ------------------------------------------------------------ |
70
+ | process_flow_coverage | Does each branch in process flow have a test case? |
71
+ | error_scenario_tests | Does each documented error scenario have a test assertion? |
72
+ | happy_path_tests | Are success paths tested? |
73
+ | null_empty_result_tests | If doc shows "not found → null" or "empty → []", is tested? |
74
+ | authorization_tests | Are permission and scope check paths tested? |
75
+ | pagination_tests | If doc describes pagination, are boundary cases tested? |
76
+
77
+ ### How to Check
78
+
79
+ 1. Count process flow branches from query doc flowchart
80
+ 2. Count test cases in corresponding test file
81
+ 3. Map each branch to a test case by description/assertion
82
+ 4. Identify any branches without corresponding tests
83
+
84
+ ## Common Gap Patterns
85
+
86
+ - **Uncovered process branches**: Flowchart branch has no test
87
+ - **Missing error tests**: Error scenario has no assertion
88
+ - **Missing null/empty tests**: "Not found → null" path untested
89
+ - **Missing authorization tests**: Permission or scope check untested
90
+ - **Missing pagination edge cases**: hasNextPage boundary untested
91
+ - **Missing filter combination tests**: Search queries with multiple filters untested
92
+ - **Test without doc branch**: Test exists but doesn't map to documented flow (potential doc gap)
93
+
94
+ ## Output Format
95
+
96
+ Return a JSON object:
97
+
98
+ ```json
99
+ {
100
+ "check_type": "query-doc-test-parity",
101
+ "module": "{{MODULE_NAME}}",
102
+ "gaps": [...],
103
+ "inconsistencies": [...],
104
+ "summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
105
+ }
106
+ ```
107
+
108
+ See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
@@ -0,0 +1,100 @@
1
+ # Query Error Implementation Parity Check
2
+
3
+ ## Context
4
+
5
+ Module: {{MODULE_NAME}}
6
+ Query docs: {{QUERY_DOCS}}
7
+ Error definitions: {{ERROR_DEFS}}
8
+ Query code: {{QUERY_CODE}}
9
+ Test code: {{QUERY_TEST_CODE}}
10
+
11
+ ## Instructions
12
+
13
+ 1. Read ALL query docs at the paths above
14
+ 2. Read the error definitions file at the path above
15
+ 3. Read ALL query code files at the paths above
16
+ 4. Read ALL test code files at the paths above
17
+ 5. For each documented error scenario, trace through generated class → query return → test assertion
18
+ 6. Run every parity check below
19
+ 7. Return results as JSON per the Output Format section
20
+
21
+ ## Extraction: Query Docs
22
+
23
+ From each query doc's Error Scenarios section, extract:
24
+
25
+ - **Error code**: e.g. `INSUFFICIENT_PERMISSION`, `INVALID_SCOPE`
26
+ - **Condition**: when this error is returned
27
+ - **Expected class name**: derived from error code (PascalCase + `Error` suffix)
28
+
29
+ ## Extraction: Error Definitions
30
+
31
+ From `lib/errors.generated.ts`, extract:
32
+
33
+ - **Error class names**: exported error classes
34
+ - **Error codes**: the code constant in each class
35
+ - **Error message patterns**: message templates
36
+
37
+ See [errors.md](errors.md) for error generation patterns.
38
+
39
+ ## Extraction: Query Code
40
+
41
+ From each query file (`query/*.ts`, excluding `*.test.ts` and `*.generated.ts`), extract:
42
+
43
+ - **Error imports**: which error classes are imported from `../lib/errors.generated`
44
+ - **Error returns**: `return err(new XError(...))` statements
45
+ - **Error codes used**: which error codes appear in the code
46
+ - **Permission checks**: `requirePermission(ctx, ...)` calls that return errors
47
+ - **Scope checks**: scope authorization checks that return errors
48
+
49
+ ## Extraction: Test Code
50
+
51
+ From each test file (`query/*.test.ts`), extract:
52
+
53
+ - **Error assertions**: tests that check for specific error types or codes
54
+ - **Error test descriptions**: test names that reference error scenarios
55
+ - **Authorization test cases**: tests verifying permission/scope rejections
56
+
57
+ ## Parity Checks
58
+
59
+ For each error scenario documented in query docs:
60
+
61
+ | Check ID | Question |
62
+ | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
63
+ | error_class_generated | Does the error class exist in `errors.generated.ts`? |
64
+ | error_code_accuracy | Does the generated error code equal `{MODULE_PREFIX}_{DOC_CODE}`? The generator prefixes doc codes with the module name in UPPER_SNAKE_CASE. |
65
+ | error_returned | Does the query code return this error via `err(new XError(...))`? |
66
+ | error_import | Does the query code import the error class from `errors.generated`? |
67
+ | error_test_exists | Does a test case assert this error scenario? |
68
+
69
+ ### How to Check
70
+
71
+ 1. List all error codes from query docs
72
+ 2. Verify each has a generated class in `errors.generated.ts`
73
+ 3. Check query code imports and returns the error
74
+ 4. Check test file has an assertion for this error
75
+
76
+ ## Common Gap Patterns
77
+
78
+ - **Missing error class**: Error code in doc but no generated class (re-run `erp-kit module generate code -p <path>`)
79
+ - **Error not returned**: Generated class exists but query code doesn't return it
80
+ - **Error not imported**: Query uses inline error instead of generated class
81
+ - **Missing error test**: Error is returned in code but no test asserts it
82
+ - **Error code mismatch**: Doc code differs from generated/code code
83
+ - **Missing permission error**: Doc requires permission but no `requirePermission` call in code
84
+ - **Missing scope error**: Doc describes scope restriction but no scope check in code
85
+
86
+ ## Output Format
87
+
88
+ Return a JSON object:
89
+
90
+ ```json
91
+ {
92
+ "check_type": "query-error-implementation-parity",
93
+ "module": "{{MODULE_NAME}}",
94
+ "gaps": [...],
95
+ "inconsistencies": [...],
96
+ "summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
97
+ }
98
+ ```
99
+
100
+ See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
@@ -5,6 +5,7 @@ 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
7
  import { runGenerateAppCode } from "../../generator/generate-app-code";
8
+ import { runGenerateSeed } from "../../generator/generate-seed";
8
9
  import { runInitAppWithReadme } from "../init-module";
9
10
  import { executeCommand, success, silentFailure } from "../lib/command-result";
10
11
 
@@ -13,7 +14,7 @@ const cwd = process.cwd();
13
14
  const pathArgs = z.object({
14
15
  path: arg(z.string(), {
15
16
  alias: "p",
16
- description: "Path to app-compose directory",
17
+ description: "Path to app directory",
17
18
  }),
18
19
  });
19
20
 
@@ -97,18 +98,32 @@ const codeCommand = defineCommand({
97
98
  },
98
99
  });
99
100
 
101
+ const seedCommand = defineCommand({
102
+ name: "seed",
103
+ description: "Generate seed data from module defaults",
104
+ args: pathArgs,
105
+ run: (args) => {
106
+ return executeCommand(() => {
107
+ const appPath = path.resolve(cwd, args.path);
108
+ const exitCode = runGenerateSeed(appPath);
109
+ return exitCode === 0 ? success() : silentFailure(exitCode);
110
+ });
111
+ },
112
+ });
113
+
100
114
  const generateCommand = defineCommand({
101
115
  name: "generate",
102
- description: "Generate docs and code for an app",
116
+ description: "Generate docs, code, and seed data for an app",
103
117
  subCommands: {
104
118
  doc: docCommand,
105
119
  code: codeCommand,
120
+ seed: seedCommand,
106
121
  },
107
122
  });
108
123
 
109
124
  export const appCommand = defineCommand({
110
125
  name: "app",
111
- description: "App-compose management",
126
+ description: "App management",
112
127
  subCommands: {
113
128
  check: checkCommand,
114
129
  "sync-check": syncCheckCommand,
@@ -13,7 +13,7 @@ describe("buildCheckTargets", () => {
13
13
  ]);
14
14
  });
15
15
 
16
- it("generates app-compose targets when appRoot is set", () => {
16
+ it("generates app targets when appRoot is set", () => {
17
17
  const targets = buildCheckTargets({ modulesRoot: undefined, appRoot: "apps" });
18
18
  expect(targets[0].glob).toBe("apps/[a-zA-Z]*/README.md");
19
19
  expect(targets).toHaveLength(6);
@@ -4,7 +4,6 @@ import { PACKAGE_ROOT } from "../../util";
4
4
  import { MODULE_PATHS } from "../lib/paths";
5
5
 
6
6
  const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
7
- const EXCLUDED_DIRS = new Set(["shared", "testing"]);
8
7
 
9
8
  const DOC_TYPE_MAP: Record<string, string> = {
10
9
  command: MODULE_PATHS.docs.commands,
@@ -32,7 +31,7 @@ export function runDocModule(
32
31
  docName?: string,
33
32
  format = "text",
34
33
  ): number {
35
- if (!existsSync(MODULES_DIR) || EXCLUDED_DIRS.has(moduleName)) {
34
+ if (!existsSync(MODULES_DIR)) {
36
35
  console.error(`Module not found: ${moduleName}`);
37
36
  return 1;
38
37
  }
@@ -41,7 +40,7 @@ export function runDocModule(
41
40
  if (!existsSync(modDir)) {
42
41
  console.error(`Module not found: ${moduleName}`);
43
42
  const available = readdirSync(MODULES_DIR, { withFileTypes: true })
44
- .filter((d) => d.isDirectory() && !EXCLUDED_DIRS.has(d.name))
43
+ .filter((d) => d.isDirectory())
45
44
  .map((d) => d.name)
46
45
  .sort();
47
46
  console.error(`Available modules: ${available.join(", ")}`);
@@ -22,13 +22,6 @@ describe("getModuleOverviews", () => {
22
22
  expect(primitives!.dependencies).toEqual([]);
23
23
  });
24
24
 
25
- it("excludes shared and testing directories", () => {
26
- const modules = getModuleOverviews();
27
- const names = modules.map((m) => m.name);
28
- expect(names).not.toContain("shared");
29
- expect(names).not.toContain("testing");
30
- });
31
-
32
25
  it("returns modules in alphabetical order", () => {
33
26
  const modules = getModuleOverviews();
34
27
  const names = modules.map((m) => m.name);
@@ -4,7 +4,6 @@ import { PACKAGE_ROOT } from "../../util";
4
4
  import { MODULE_PATHS } from "../lib/paths";
5
5
 
6
6
  const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
7
- const EXCLUDED_DIRS = new Set(["shared", "testing"]);
8
7
 
9
8
  interface ModuleOverview {
10
9
  name: string;
@@ -46,7 +45,7 @@ function extractDependencies(readmePath: string): string[] {
46
45
  export function getModuleOverviews(): ModuleOverview[] {
47
46
  if (!existsSync(MODULES_DIR)) return [];
48
47
  return readdirSync(MODULES_DIR, { withFileTypes: true })
49
- .filter((d) => d.isDirectory() && !EXCLUDED_DIRS.has(d.name))
48
+ .filter((d) => d.isDirectory())
50
49
  .map((d) => {
51
50
  const modDir = join(MODULES_DIR, d.name);
52
51
  const readmePath = join(modDir, "README.md");
@@ -4,7 +4,6 @@ import { PACKAGE_ROOT } from "../../util";
4
4
  import { MODULE_PATHS } from "../lib/paths";
5
5
 
6
6
  const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
7
- const EXCLUDED_DIRS = new Set(["shared", "testing"]);
8
7
 
9
8
  const DOC_TYPE_MAP: Record<string, string> = {
10
9
  command: MODULE_PATHS.docs.commands,
@@ -53,7 +52,7 @@ export function searchModuleDocs(query: string, typeFilter?: string): SearchResu
53
52
 
54
53
  const results: SearchResult[] = [];
55
54
  const modules = readdirSync(MODULES_DIR, { withFileTypes: true })
56
- .filter((d) => d.isDirectory() && !EXCLUDED_DIRS.has(d.name))
55
+ .filter((d) => d.isDirectory())
57
56
  .sort((a, b) => a.name.localeCompare(b.name));
58
57
 
59
58
  for (const mod of modules) {
@@ -23,6 +23,10 @@ export function runInit(cwd: string): number {
23
23
  const symlink = setupSymlink(cwd);
24
24
  if (symlink === "linked") {
25
25
  console.log(chalk.green(" .claude/skills -> .agents/skills/ (linked)"));
26
+ } else if (symlink === "copied") {
27
+ console.log(
28
+ chalk.yellow(" .claude/skills (copied — re-run `erp-kit update skills` after changes)"),
29
+ );
26
30
  } else if (symlink === "skipped_directory") {
27
31
  console.log(chalk.yellow(" Skipped .claude/skills (directory exists, not a symlink)"));
28
32
  }
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
4
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
5
5
  import { copySkills, copyWorkflows, copyConfigs, setupSymlink } from "./distribute";
6
6
 
7
7
  describe("copySkills", () => {
@@ -123,4 +123,35 @@ describe("setupSymlink", () => {
123
123
  const result = setupSymlink(tmpDir);
124
124
  expect(result).toBe("skipped_directory");
125
125
  });
126
+
127
+ it("falls back to copy when symlink creation fails", () => {
128
+ // Populate .agents/skills with a test file so copy has something to work with
129
+ const agentsSkills = path.join(tmpDir, ".agents", "skills", "test-skill");
130
+ fs.mkdirSync(agentsSkills, { recursive: true });
131
+ fs.writeFileSync(path.join(agentsSkills, "SKILL.md"), "# Test");
132
+
133
+ // Simulate Windows EPERM — symlink creation fails
134
+ vi.spyOn(fs, "symlinkSync").mockImplementation(() => {
135
+ const err = new Error("EPERM: operation not permitted") as NodeJS.ErrnoException;
136
+ err.code = "EPERM";
137
+ throw err;
138
+ });
139
+
140
+ try {
141
+ const result = setupSymlink(tmpDir);
142
+ expect(result).toBe("copied");
143
+
144
+ const claudeSkills = path.join(tmpDir, ".claude", "skills");
145
+ expect(fs.existsSync(claudeSkills)).toBe(true);
146
+ expect(fs.statSync(claudeSkills).isDirectory()).toBe(true);
147
+ // Not a symlink — it's a real directory copy
148
+ expect(fs.lstatSync(claudeSkills).isSymbolicLink()).toBe(false);
149
+ // Content was copied
150
+ expect(fs.readFileSync(path.join(claudeSkills, "test-skill", "SKILL.md"), "utf-8")).toBe(
151
+ "# Test",
152
+ );
153
+ } finally {
154
+ vi.restoreAllMocks();
155
+ }
156
+ });
126
157
  });
@@ -90,7 +90,20 @@ export function copyConfigs(cwd: string): CopyResult {
90
90
  return { copied, removed: 0 };
91
91
  }
92
92
 
93
- export type SymlinkResult = "linked" | "already_linked" | "skipped_directory";
93
+ export type SymlinkResult = "linked" | "already_linked" | "skipped_directory" | "copied";
94
+
95
+ function createSymlink(target: string, linkPath: string): void {
96
+ const type = process.platform === "win32" ? "junction" : undefined;
97
+ // Junctions on Windows require absolute targets
98
+ const resolvedTarget =
99
+ type === "junction" ? path.resolve(path.dirname(linkPath), target) : target;
100
+ fs.symlinkSync(resolvedTarget, linkPath, type);
101
+ }
102
+
103
+ function copySkillsDirectory(src: string, dest: string): void {
104
+ if (!fs.existsSync(src)) return;
105
+ fs.cpSync(src, dest, { recursive: true });
106
+ }
94
107
 
95
108
  export function setupSymlink(cwd: string): SymlinkResult {
96
109
  const skillsDest = path.join(cwd, ".agents", "skills");
@@ -111,15 +124,44 @@ export function setupSymlink(cwd: string): SymlinkResult {
111
124
  const current = fs.readlinkSync(claudeSkills);
112
125
  if (current === relTarget) return "already_linked";
113
126
  fs.unlinkSync(claudeSkills);
114
- fs.symlinkSync(relTarget, claudeSkills);
115
- return "linked";
127
+ try {
128
+ createSymlink(relTarget, claudeSkills);
129
+ return "linked";
130
+ } catch {
131
+ copySkillsDirectory(skillsDest, claudeSkills);
132
+ return "copied";
133
+ }
116
134
  }
117
135
  return "skipped_directory";
118
136
  }
119
137
 
120
138
  fs.mkdirSync(path.dirname(claudeSkills), { recursive: true });
121
- fs.symlinkSync(relTarget, claudeSkills);
122
- return "linked";
139
+ try {
140
+ createSymlink(relTarget, claudeSkills);
141
+ return "linked";
142
+ } catch {
143
+ copySkillsDirectory(skillsDest, claudeSkills);
144
+ return "copied";
145
+ }
146
+ }
147
+
148
+ /**
149
+ * When .claude/skills is a real directory (copy fallback on Windows),
150
+ * re-sync it with .agents/skills after an update.
151
+ */
152
+ export function refreshCopiedSkills(cwd: string): boolean {
153
+ const claudeSkills = path.join(cwd, ".claude", "skills");
154
+ try {
155
+ const stat = fs.lstatSync(claudeSkills);
156
+ if (stat.isSymbolicLink() || !stat.isDirectory()) return false;
157
+ } catch {
158
+ return false;
159
+ }
160
+ // It's a real directory — delete and re-copy from .agents/skills
161
+ const skillsDest = path.join(cwd, ".agents", "skills");
162
+ fs.rmSync(claudeSkills, { recursive: true, force: true });
163
+ copySkillsDirectory(skillsDest, claudeSkills);
164
+ return true;
123
165
  }
124
166
 
125
167
  export function isAlreadyInitialized(cwd: string): boolean {
@@ -190,7 +190,7 @@ describe("runSourceSyncCheck", () => {
190
190
  fs.writeFileSync(path.join(resolverSrcDir, "myResolver.ts"), "export {}");
191
191
 
192
192
  const result = await runSourceSyncCheck({ modulesRoot: "modules", appRoot: undefined }, tmpDir);
193
- // Without appRoot, app-compose patterns are not checked
193
+ // Without appRoot, app patterns are not checked
194
194
  expect(result.exitCode).toBe(0);
195
195
  expect(result.errors).toHaveLength(0);
196
196
  });
@@ -77,6 +77,22 @@ describe("runUpdate", () => {
77
77
  expect(content).toContain("@tailor-platform/erp-kit");
78
78
  });
79
79
 
80
+ it("refreshes .claude/skills when it is a copied directory (not a symlink)", () => {
81
+ // Simulate a prior "copied" fallback: .claude/skills is a real directory with stale content
82
+ const claudeSkills = path.join(tmpDir, ".claude", "skills");
83
+ fs.mkdirSync(path.join(claudeSkills, "erp-kit-old"), { recursive: true });
84
+ fs.writeFileSync(path.join(claudeSkills, "erp-kit-old", "SKILL.md"), "# Old");
85
+
86
+ runUpdate(tmpDir, ["skills"]);
87
+
88
+ // Stale skill should be gone from .claude/skills
89
+ expect(fs.existsSync(path.join(claudeSkills, "erp-kit-old"))).toBe(false);
90
+ // Current skills should be present
91
+ expect(
92
+ fs.existsSync(path.join(claudeSkills, "erp-kit-module-1-requirements", "SKILL.md")),
93
+ ).toBe(true);
94
+ });
95
+
80
96
  it("never touches config files", () => {
81
97
  const configPath = path.join(tmpDir, "license.config.json");
82
98
  fs.writeFileSync(configPath, '{"groups": ["notice"]}');
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import { copySkills, copyWorkflows } from "./lib/distribute";
2
+ import { copySkills, copyWorkflows, refreshCopiedSkills } from "./lib/distribute";
3
3
 
4
4
  export const VALID_RESOURCES = ["skills", "workflows"] as const;
5
5
  export type Resource = (typeof VALID_RESOURCES)[number];
@@ -27,6 +27,9 @@ export function runUpdate(cwd: string, resources: string[]): number {
27
27
  console.log(chalk.green(` Removed ${result.removed} stale erp-kit-* skills`));
28
28
  }
29
29
  console.log(chalk.green(` Copied ${result.copied} skill files to .agents/skills/`));
30
+ if (refreshCopiedSkills(cwd)) {
31
+ console.log(chalk.green(` Refreshed .claude/skills/ (copy)`));
32
+ }
30
33
  }
31
34
 
32
35
  if (selected.has("workflows")) {
@@ -0,0 +1,69 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+
4
+ // Static imports of internal module seed data (bundled into CLI)
5
+ import * as primitivesSeed from "../modules/primitives/seed";
6
+
7
+ type SeedMap = Record<string, Record<string, unknown>>;
8
+
9
+ // Module name → seed exports. Add new modules here as they gain seed data.
10
+ const INTERNAL_SEED: Record<string, Record<string, unknown>> = {
11
+ primitives: primitivesSeed,
12
+ };
13
+
14
+ function mapToJsonl(data: SeedMap): string {
15
+ return (
16
+ Object.entries(data)
17
+ .map(([id, row]) => JSON.stringify({ id, ...row }))
18
+ .join("\n") + "\n"
19
+ );
20
+ }
21
+
22
+ function capitalize(s: string): string {
23
+ return s.charAt(0).toUpperCase() + s.slice(1);
24
+ }
25
+
26
+ /**
27
+ * Checks if a value is a seed data map: Record<string, Record<string, unknown>>.
28
+ * Distinguishes from ID maps (Record<string, string>) by checking nested values.
29
+ */
30
+ function isSeedMap(value: unknown): value is SeedMap {
31
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
32
+ const entries = Object.entries(value as Record<string, unknown>);
33
+ if (entries.length === 0) return false;
34
+ return entries.every(([, v]) => typeof v === "object" && v !== null && !Array.isArray(v));
35
+ }
36
+
37
+ export function runGenerateSeed(appPath: string): number {
38
+ const seedDir = path.join(appPath, "backend", "seed", "data");
39
+ fs.mkdirSync(seedDir, { recursive: true });
40
+
41
+ let written = 0;
42
+ let skipped = 0;
43
+ const modulesWithSeed: string[] = [];
44
+
45
+ for (const [moduleName, mod] of Object.entries(INTERNAL_SEED)) {
46
+ const entries = Object.entries(mod).filter(([, v]) => isSeedMap(v)) as [string, SeedMap][];
47
+ if (entries.length === 0) continue;
48
+
49
+ modulesWithSeed.push(moduleName);
50
+
51
+ for (const [exportName, data] of entries) {
52
+ const fileName = capitalize(exportName);
53
+ const filePath = path.join(seedDir, `${fileName}.jsonl`);
54
+ if (fs.existsSync(filePath)) {
55
+ console.log(` skipped ${fileName}.jsonl (already exists)`);
56
+ skipped++;
57
+ continue;
58
+ }
59
+ const rowCount = Object.keys(data).length;
60
+ fs.writeFileSync(filePath, mapToJsonl(data));
61
+ console.log(` wrote ${fileName}.jsonl (${rowCount} rows)`);
62
+ written++;
63
+ }
64
+ }
65
+
66
+ console.log(`\nModules with seed data: ${modulesWithSeed.join(", ") || "none"}`);
67
+ console.log(`Generated ${written} file(s), skipped ${skipped} existing`);
68
+ return 0;
69
+ }
package/src/module.ts CHANGED
@@ -43,3 +43,59 @@ export {
43
43
  own as itemManagementOwn,
44
44
  all as itemManagementAll,
45
45
  } from "./modules/item-management/lib/permissions.generated";
46
+ // audit
47
+ export { defineModule as defineAuditModule } from "./modules/audit/module";
48
+ export {
49
+ permissions as auditPermissions,
50
+ own as auditOwn,
51
+ all as auditAll,
52
+ } from "./modules/audit/lib/permissions.generated";
53
+ // business-partner
54
+ export { defineModule as defineBusinessPartnerModule } from "./modules/business-partner/module";
55
+ export {
56
+ permissions as businessPartnerPermissions,
57
+ own as businessPartnerOwn,
58
+ all as businessPartnerAll,
59
+ } from "./modules/business-partner/lib/permissions.generated";
60
+ // coa-management
61
+ export { defineModule as defineCoaManagementModule } from "./modules/coa-management/module";
62
+ export {
63
+ permissions as coaManagementPermissions,
64
+ own as coaManagementOwn,
65
+ all as coaManagementAll,
66
+ } from "./modules/coa-management/lib/permissions.generated";
67
+ // inventory
68
+ export { defineModule as defineInventoryModule } from "./modules/inventory/module";
69
+ export {
70
+ permissions as inventoryPermissions,
71
+ own as inventoryOwn,
72
+ all as inventoryAll,
73
+ } from "./modules/inventory/lib/permissions.generated";
74
+ // organization
75
+ export { defineModule as defineOrganizationModule } from "./modules/organization/module";
76
+ export {
77
+ permissions as organizationPermissions,
78
+ own as organizationOwn,
79
+ all as organizationAll,
80
+ } from "./modules/organization/lib/permissions.generated";
81
+ // product-management
82
+ export { defineModule as defineProductManagementModule } from "./modules/product-management/module";
83
+ export {
84
+ permissions as productManagementPermissions,
85
+ own as productManagementOwn,
86
+ all as productManagementAll,
87
+ } from "./modules/product-management/lib/permissions.generated";
88
+ // purchase
89
+ export { defineModule as definePurchaseModule } from "./modules/purchase/module";
90
+ export {
91
+ permissions as purchasePermissions,
92
+ own as purchaseOwn,
93
+ all as purchaseAll,
94
+ } from "./modules/purchase/lib/permissions.generated";
95
+ // sales
96
+ export { defineModule as defineSalesModule } from "./modules/sales/module";
97
+ export {
98
+ permissions as salesPermissions,
99
+ own as salesOwn,
100
+ all as salesAll,
101
+ } from "./modules/sales/lib/permissions.generated";