@tailor-platform/erp-kit 0.6.0 → 0.7.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 (290) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +10 -10
  3. package/dist/cli.mjs +407 -69
  4. package/package.json +1 -1
  5. package/skills/erp-kit-app-1-requirements/SKILL.md +33 -17
  6. package/skills/erp-kit-app-2-requirements-review/SKILL.md +12 -0
  7. package/skills/erp-kit-app-3-plan/SKILL.md +18 -4
  8. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +1 -1
  9. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +1 -1
  10. package/skills/erp-kit-app-4-plan-review/SKILL.md +12 -0
  11. package/skills/erp-kit-app-5-impl-backend/SKILL.md +12 -0
  12. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +12 -0
  13. package/skills/erp-kit-app-7-impl-review/SKILL.md +13 -1
  14. package/skills/erp-kit-app-shared/references/progress-protocol.md +77 -0
  15. package/skills/erp-kit-mock-scenario/SKILL.md +1 -1
  16. package/skills/erp-kit-module-1-requirements/SKILL.md +1 -1
  17. package/skills/erp-kit-module-3-plan/SKILL.md +3 -3
  18. package/skills/erp-kit-module-3-update-plan/SKILL.md +3 -3
  19. package/skills/erp-kit-module-5-impl/SKILL.md +1 -1
  20. package/src/commands/app/index.ts +2 -0
  21. package/src/commands/app/progress/git-context.ts +16 -0
  22. package/src/commands/app/progress/index.ts +45 -0
  23. package/src/commands/app/progress/log.ts +49 -0
  24. package/src/commands/app/progress/progress.test.ts +128 -0
  25. package/src/commands/app/progress/schema-cmd.ts +10 -0
  26. package/src/commands/check.test.ts +4 -4
  27. package/src/commands/lib/discovery.test.ts +5 -7
  28. package/src/commands/lib/discovery.ts +8 -8
  29. package/src/commands/lib/sync-check-source.test.ts +1 -1
  30. package/src/commands/lib/sync-check-source.ts +6 -1
  31. package/src/commands/lib/sync-check-tests.test.ts +43 -0
  32. package/src/commands/lib/sync-check-tests.ts +20 -2
  33. package/src/commands/sync-check.ts +3 -0
  34. package/src/generator/generate-app-code.test.ts +0 -6
  35. package/src/generator/generate-app-code.ts +3 -13
  36. package/src/generator/generate-code.test.ts +10 -40
  37. package/src/generator/generate-code.ts +6 -12
  38. package/src/generator/stub-templates.test.ts +0 -7
  39. package/src/generator/stub-templates.ts +0 -14
  40. package/src/modules/finance-ledger/README.md +50 -0
  41. package/src/modules/finance-ledger/command/.gitkeep +0 -0
  42. package/src/modules/finance-ledger/command/addJournalLine.generated.ts +6 -0
  43. package/src/modules/finance-ledger/command/addJournalLine.test.ts +438 -0
  44. package/src/modules/finance-ledger/command/addJournalLine.ts +122 -0
  45. package/src/modules/finance-ledger/command/approveAndLockPeriod.generated.ts +6 -0
  46. package/src/modules/finance-ledger/command/approveAndLockPeriod.test.ts +107 -0
  47. package/src/modules/finance-ledger/command/approveAndLockPeriod.ts +72 -0
  48. package/src/modules/finance-ledger/command/beginClose.generated.ts +6 -0
  49. package/src/modules/finance-ledger/command/beginClose.test.ts +106 -0
  50. package/src/modules/finance-ledger/command/beginClose.ts +58 -0
  51. package/src/modules/finance-ledger/command/closePeriod.generated.ts +6 -0
  52. package/src/modules/finance-ledger/command/closePeriod.test.ts +87 -0
  53. package/src/modules/finance-ledger/command/closePeriod.ts +44 -0
  54. package/src/modules/finance-ledger/command/createAccountingPeriod.generated.ts +6 -0
  55. package/src/modules/finance-ledger/command/createAccountingPeriod.test.ts +425 -0
  56. package/src/modules/finance-ledger/command/createAccountingPeriod.ts +133 -0
  57. package/src/modules/finance-ledger/command/createFiscalYear.generated.ts +6 -0
  58. package/src/modules/finance-ledger/command/createFiscalYear.test.ts +197 -0
  59. package/src/modules/finance-ledger/command/createFiscalYear.ts +70 -0
  60. package/src/modules/finance-ledger/command/createJournalEntry.generated.ts +6 -0
  61. package/src/modules/finance-ledger/command/createJournalEntry.test.ts +261 -0
  62. package/src/modules/finance-ledger/command/createJournalEntry.ts +121 -0
  63. package/src/modules/finance-ledger/command/deleteAccountingPeriod.generated.ts +6 -0
  64. package/src/modules/finance-ledger/command/deleteAccountingPeriod.test.ts +71 -0
  65. package/src/modules/finance-ledger/command/deleteAccountingPeriod.ts +55 -0
  66. package/src/modules/finance-ledger/command/deleteFiscalYear.generated.ts +6 -0
  67. package/src/modules/finance-ledger/command/deleteFiscalYear.test.ts +38 -0
  68. package/src/modules/finance-ledger/command/deleteFiscalYear.ts +34 -0
  69. package/src/modules/finance-ledger/command/deleteJournalEntry.generated.ts +6 -0
  70. package/src/modules/finance-ledger/command/deleteJournalEntry.test.ts +58 -0
  71. package/src/modules/finance-ledger/command/deleteJournalEntry.ts +43 -0
  72. package/src/modules/finance-ledger/command/executeYearEndClose.generated.ts +6 -0
  73. package/src/modules/finance-ledger/command/executeYearEndClose.test.ts +239 -0
  74. package/src/modules/finance-ledger/command/executeYearEndClose.ts +415 -0
  75. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.generated.ts +6 -0
  76. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.test.ts +102 -0
  77. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.ts +76 -0
  78. package/src/modules/finance-ledger/command/finalizeFinancialStatement.generated.ts +6 -0
  79. package/src/modules/finance-ledger/command/finalizeFinancialStatement.test.ts +73 -0
  80. package/src/modules/finance-ledger/command/finalizeFinancialStatement.ts +73 -0
  81. package/src/modules/finance-ledger/command/generateFinancialStatement.generated.ts +6 -0
  82. package/src/modules/finance-ledger/command/generateFinancialStatement.test.ts +311 -0
  83. package/src/modules/finance-ledger/command/generateFinancialStatement.ts +275 -0
  84. package/src/modules/finance-ledger/command/generatePreliminaryStatements.generated.ts +6 -0
  85. package/src/modules/finance-ledger/command/generatePreliminaryStatements.test.ts +152 -0
  86. package/src/modules/finance-ledger/command/generatePreliminaryStatements.ts +140 -0
  87. package/src/modules/finance-ledger/command/generateTrialBalance.generated.ts +6 -0
  88. package/src/modules/finance-ledger/command/generateTrialBalance.test.ts +439 -0
  89. package/src/modules/finance-ledger/command/generateTrialBalance.ts +268 -0
  90. package/src/modules/finance-ledger/command/initiatePeriodClose.generated.ts +6 -0
  91. package/src/modules/finance-ledger/command/initiatePeriodClose.test.ts +153 -0
  92. package/src/modules/finance-ledger/command/initiatePeriodClose.ts +84 -0
  93. package/src/modules/finance-ledger/command/openForAdvanceEntry.generated.ts +6 -0
  94. package/src/modules/finance-ledger/command/openForAdvanceEntry.test.ts +87 -0
  95. package/src/modules/finance-ledger/command/openForAdvanceEntry.ts +44 -0
  96. package/src/modules/finance-ledger/command/openPeriod.generated.ts +6 -0
  97. package/src/modules/finance-ledger/command/openPeriod.test.ts +90 -0
  98. package/src/modules/finance-ledger/command/openPeriod.ts +44 -0
  99. package/src/modules/finance-ledger/command/permanentlyClosePeriod.generated.ts +6 -0
  100. package/src/modules/finance-ledger/command/permanentlyClosePeriod.test.ts +87 -0
  101. package/src/modules/finance-ledger/command/permanentlyClosePeriod.ts +48 -0
  102. package/src/modules/finance-ledger/command/postAdjustingEntries.generated.ts +6 -0
  103. package/src/modules/finance-ledger/command/postAdjustingEntries.test.ts +392 -0
  104. package/src/modules/finance-ledger/command/postAdjustingEntries.ts +156 -0
  105. package/src/modules/finance-ledger/command/postJournalEntry.generated.ts +6 -0
  106. package/src/modules/finance-ledger/command/postJournalEntry.test.ts +346 -0
  107. package/src/modules/finance-ledger/command/postJournalEntry.ts +160 -0
  108. package/src/modules/finance-ledger/command/processInventoryHandoff.generated.ts +6 -0
  109. package/src/modules/finance-ledger/command/processInventoryHandoff.test.ts +211 -0
  110. package/src/modules/finance-ledger/command/processInventoryHandoff.ts +133 -0
  111. package/src/modules/finance-ledger/command/processManufacturingHandoff.generated.ts +6 -0
  112. package/src/modules/finance-ledger/command/processManufacturingHandoff.test.ts +221 -0
  113. package/src/modules/finance-ledger/command/processManufacturingHandoff.ts +133 -0
  114. package/src/modules/finance-ledger/command/processPurchaseHandoff.generated.ts +6 -0
  115. package/src/modules/finance-ledger/command/processPurchaseHandoff.test.ts +222 -0
  116. package/src/modules/finance-ledger/command/processPurchaseHandoff.ts +133 -0
  117. package/src/modules/finance-ledger/command/processSalesHandoff.generated.ts +6 -0
  118. package/src/modules/finance-ledger/command/processSalesHandoff.test.ts +257 -0
  119. package/src/modules/finance-ledger/command/processSalesHandoff.ts +135 -0
  120. package/src/modules/finance-ledger/command/regenerateFinancialStatement.generated.ts +6 -0
  121. package/src/modules/finance-ledger/command/regenerateFinancialStatement.test.ts +129 -0
  122. package/src/modules/finance-ledger/command/regenerateFinancialStatement.ts +186 -0
  123. package/src/modules/finance-ledger/command/removeJournalLine.generated.ts +6 -0
  124. package/src/modules/finance-ledger/command/removeJournalLine.test.ts +65 -0
  125. package/src/modules/finance-ledger/command/removeJournalLine.ts +39 -0
  126. package/src/modules/finance-ledger/command/reopenPeriod.generated.ts +6 -0
  127. package/src/modules/finance-ledger/command/reopenPeriod.test.ts +87 -0
  128. package/src/modules/finance-ledger/command/reopenPeriod.ts +44 -0
  129. package/src/modules/finance-ledger/command/reverseJournalEntry.generated.ts +6 -0
  130. package/src/modules/finance-ledger/command/reverseJournalEntry.test.ts +337 -0
  131. package/src/modules/finance-ledger/command/reverseJournalEntry.ts +140 -0
  132. package/src/modules/finance-ledger/command/revertSoftLock.generated.ts +6 -0
  133. package/src/modules/finance-ledger/command/revertSoftLock.test.ts +96 -0
  134. package/src/modules/finance-ledger/command/revertSoftLock.ts +67 -0
  135. package/src/modules/finance-ledger/command/updateFiscalYear.generated.ts +6 -0
  136. package/src/modules/finance-ledger/command/updateFiscalYear.test.ts +138 -0
  137. package/src/modules/finance-ledger/command/updateFiscalYear.ts +85 -0
  138. package/src/modules/finance-ledger/command/updateJournalEntry.generated.ts +6 -0
  139. package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +195 -0
  140. package/src/modules/finance-ledger/command/updateJournalEntry.ts +86 -0
  141. package/src/modules/finance-ledger/command/updateJournalLine.generated.ts +6 -0
  142. package/src/modules/finance-ledger/command/updateJournalLine.test.ts +385 -0
  143. package/src/modules/finance-ledger/command/updateJournalLine.ts +155 -0
  144. package/src/modules/finance-ledger/command/verifySubledgerTransfers.generated.ts +6 -0
  145. package/src/modules/finance-ledger/command/verifySubledgerTransfers.test.ts +201 -0
  146. package/src/modules/finance-ledger/command/verifySubledgerTransfers.ts +113 -0
  147. package/src/modules/finance-ledger/command/verifyTrialBalance.generated.ts +6 -0
  148. package/src/modules/finance-ledger/command/verifyTrialBalance.test.ts +136 -0
  149. package/src/modules/finance-ledger/command/verifyTrialBalance.ts +97 -0
  150. package/src/modules/finance-ledger/db/.gitkeep +0 -0
  151. package/src/modules/finance-ledger/db/accountingPeriod.ts +58 -0
  152. package/src/modules/finance-ledger/db/financialStatement.ts +92 -0
  153. package/src/modules/finance-ledger/db/financialStatementLineItem.ts +76 -0
  154. package/src/modules/finance-ledger/db/fiscalYear.ts +41 -0
  155. package/src/modules/finance-ledger/db/journalEntry.ts +101 -0
  156. package/src/modules/finance-ledger/db/journalLine.ts +64 -0
  157. package/src/modules/finance-ledger/db/periodClose.ts +97 -0
  158. package/src/modules/finance-ledger/db/trialBalance.ts +63 -0
  159. package/src/modules/finance-ledger/db/trialBalanceLine.ts +63 -0
  160. package/src/modules/finance-ledger/docs/commands/AddJournalLine.md +74 -0
  161. package/src/modules/finance-ledger/docs/commands/ApproveAndLockPeriod.md +53 -0
  162. package/src/modules/finance-ledger/docs/commands/BeginClose.md +47 -0
  163. package/src/modules/finance-ledger/docs/commands/ClosePeriod.md +45 -0
  164. package/src/modules/finance-ledger/docs/commands/CreateAccountingPeriod.md +69 -0
  165. package/src/modules/finance-ledger/docs/commands/CreateFiscalYear.md +56 -0
  166. package/src/modules/finance-ledger/docs/commands/CreateJournalEntry.md +63 -0
  167. package/src/modules/finance-ledger/docs/commands/DeleteAccountingPeriod.md +46 -0
  168. package/src/modules/finance-ledger/docs/commands/DeleteFiscalYear.md +40 -0
  169. package/src/modules/finance-ledger/docs/commands/DeleteJournalEntry.md +44 -0
  170. package/src/modules/finance-ledger/docs/commands/ExecuteYearEndClose.md +81 -0
  171. package/src/modules/finance-ledger/docs/commands/FinalCloseAndLockPeriod.md +49 -0
  172. package/src/modules/finance-ledger/docs/commands/FinalizeFinancialStatement.md +43 -0
  173. package/src/modules/finance-ledger/docs/commands/GenerateFinancialStatement.md +86 -0
  174. package/src/modules/finance-ledger/docs/commands/GeneratePreliminaryStatements.md +53 -0
  175. package/src/modules/finance-ledger/docs/commands/GenerateTrialBalance.md +75 -0
  176. package/src/modules/finance-ledger/docs/commands/InitiatePeriodClose.md +58 -0
  177. package/src/modules/finance-ledger/docs/commands/OpenForAdvanceEntry.md +44 -0
  178. package/src/modules/finance-ledger/docs/commands/OpenPeriod.md +45 -0
  179. package/src/modules/finance-ledger/docs/commands/PermanentlyClosePeriod.md +45 -0
  180. package/src/modules/finance-ledger/docs/commands/PostAdjustingEntries.md +61 -0
  181. package/src/modules/finance-ledger/docs/commands/PostJournalEntry.md +81 -0
  182. package/src/modules/finance-ledger/docs/commands/ProcessInventoryHandoff.md +72 -0
  183. package/src/modules/finance-ledger/docs/commands/ProcessManufacturingHandoff.md +68 -0
  184. package/src/modules/finance-ledger/docs/commands/ProcessPurchaseHandoff.md +68 -0
  185. package/src/modules/finance-ledger/docs/commands/ProcessSalesHandoff.md +71 -0
  186. package/src/modules/finance-ledger/docs/commands/RegenerateFinancialStatement.md +60 -0
  187. package/src/modules/finance-ledger/docs/commands/RemoveJournalLine.md +42 -0
  188. package/src/modules/finance-ledger/docs/commands/ReopenPeriod.md +45 -0
  189. package/src/modules/finance-ledger/docs/commands/ReverseJournalEntry.md +62 -0
  190. package/src/modules/finance-ledger/docs/commands/RevertSoftLock.md +49 -0
  191. package/src/modules/finance-ledger/docs/commands/UpdateFiscalYear.md +60 -0
  192. package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +50 -0
  193. package/src/modules/finance-ledger/docs/commands/UpdateJournalLine.md +61 -0
  194. package/src/modules/finance-ledger/docs/commands/VerifySubledgerTransfers.md +59 -0
  195. package/src/modules/finance-ledger/docs/commands/VerifyTrialBalance.md +53 -0
  196. package/src/modules/finance-ledger/docs/features/accounting-period-management.md +110 -0
  197. package/src/modules/finance-ledger/docs/features/financial-statement-generation.md +115 -0
  198. package/src/modules/finance-ledger/docs/features/journal-entry-management.md +138 -0
  199. package/src/modules/finance-ledger/docs/features/period-end-close.md +102 -0
  200. package/src/modules/finance-ledger/docs/features/subledger-integration.md +141 -0
  201. package/src/modules/finance-ledger/docs/features/trial-balance.md +99 -0
  202. package/src/modules/finance-ledger/docs/features/year-end-close.md +84 -0
  203. package/src/modules/finance-ledger/docs/models/AccountingPeriod.md +71 -0
  204. package/src/modules/finance-ledger/docs/models/FinancialStatement.md +76 -0
  205. package/src/modules/finance-ledger/docs/models/FinancialStatementLineItem.md +41 -0
  206. package/src/modules/finance-ledger/docs/models/FiscalYear.md +41 -0
  207. package/src/modules/finance-ledger/docs/models/JournalEntry.md +80 -0
  208. package/src/modules/finance-ledger/docs/models/JournalLine.md +47 -0
  209. package/src/modules/finance-ledger/docs/models/PeriodClose.md +83 -0
  210. package/src/modules/finance-ledger/docs/models/TrialBalance.md +56 -0
  211. package/src/modules/finance-ledger/docs/models/TrialBalanceLine.md +37 -0
  212. package/src/modules/finance-ledger/docs/queries/GetAccountingPeriod.md +35 -0
  213. package/src/modules/finance-ledger/docs/queries/GetFinancialStatement.md +38 -0
  214. package/src/modules/finance-ledger/docs/queries/GetFiscalYear.md +35 -0
  215. package/src/modules/finance-ledger/docs/queries/GetJournalEntry.md +37 -0
  216. package/src/modules/finance-ledger/docs/queries/GetPeriodByDate.md +38 -0
  217. package/src/modules/finance-ledger/docs/queries/GetPeriodClose.md +36 -0
  218. package/src/modules/finance-ledger/docs/queries/GetSubledgerTransferStatus.md +45 -0
  219. package/src/modules/finance-ledger/docs/queries/GetTrialBalance.md +38 -0
  220. package/src/modules/finance-ledger/docs/queries/ListAccountingPeriods.md +46 -0
  221. package/src/modules/finance-ledger/docs/queries/ListFinancialStatements.md +46 -0
  222. package/src/modules/finance-ledger/docs/queries/ListFiscalYears.md +42 -0
  223. package/src/modules/finance-ledger/docs/queries/ListJournalEntries.md +48 -0
  224. package/src/modules/finance-ledger/docs/queries/ListPeriodCloses.md +46 -0
  225. package/src/modules/finance-ledger/docs/queries/ListTrialBalances.md +51 -0
  226. package/src/modules/finance-ledger/executor/.gitkeep +0 -0
  227. package/src/modules/finance-ledger/generated/enums.ts +109 -0
  228. package/src/modules/finance-ledger/generated/kysely-tailordb.ts +202 -0
  229. package/src/modules/finance-ledger/index.ts +2 -0
  230. package/src/modules/finance-ledger/lib/_db_deps.ts +56 -0
  231. package/src/modules/finance-ledger/lib/errors.generated.ts +332 -0
  232. package/src/modules/finance-ledger/lib/permissions.generated.ts +41 -0
  233. package/src/modules/finance-ledger/lib/types.ts +66 -0
  234. package/src/modules/finance-ledger/module.ts +262 -0
  235. package/src/modules/finance-ledger/package.json +26 -0
  236. package/src/modules/finance-ledger/permissions.ts +3 -0
  237. package/src/modules/finance-ledger/query/.gitkeep +0 -0
  238. package/src/modules/finance-ledger/query/getAccountingPeriod.generated.ts +5 -0
  239. package/src/modules/finance-ledger/query/getAccountingPeriod.test.ts +31 -0
  240. package/src/modules/finance-ledger/query/getAccountingPeriod.ts +21 -0
  241. package/src/modules/finance-ledger/query/getFinancialStatement.generated.ts +5 -0
  242. package/src/modules/finance-ledger/query/getFinancialStatement.test.ts +35 -0
  243. package/src/modules/finance-ledger/query/getFinancialStatement.ts +29 -0
  244. package/src/modules/finance-ledger/query/getFiscalYear.generated.ts +5 -0
  245. package/src/modules/finance-ledger/query/getFiscalYear.test.ts +31 -0
  246. package/src/modules/finance-ledger/query/getFiscalYear.ts +21 -0
  247. package/src/modules/finance-ledger/query/getJournalEntry.generated.ts +5 -0
  248. package/src/modules/finance-ledger/query/getJournalEntry.test.ts +35 -0
  249. package/src/modules/finance-ledger/query/getJournalEntry.ts +29 -0
  250. package/src/modules/finance-ledger/query/getPeriodByDate.generated.ts +5 -0
  251. package/src/modules/finance-ledger/query/getPeriodByDate.test.ts +53 -0
  252. package/src/modules/finance-ledger/query/getPeriodByDate.ts +27 -0
  253. package/src/modules/finance-ledger/query/getPeriodClose.generated.ts +5 -0
  254. package/src/modules/finance-ledger/query/getPeriodClose.test.ts +31 -0
  255. package/src/modules/finance-ledger/query/getPeriodClose.ts +21 -0
  256. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.generated.ts +5 -0
  257. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.test.ts +101 -0
  258. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.ts +68 -0
  259. package/src/modules/finance-ledger/query/getTrialBalance.generated.ts +5 -0
  260. package/src/modules/finance-ledger/query/getTrialBalance.test.ts +33 -0
  261. package/src/modules/finance-ledger/query/getTrialBalance.ts +30 -0
  262. package/src/modules/finance-ledger/query/listAccountingPeriods.generated.ts +5 -0
  263. package/src/modules/finance-ledger/query/listAccountingPeriods.test.ts +81 -0
  264. package/src/modules/finance-ledger/query/listAccountingPeriods.ts +61 -0
  265. package/src/modules/finance-ledger/query/listFinancialStatements.generated.ts +5 -0
  266. package/src/modules/finance-ledger/query/listFinancialStatements.test.ts +76 -0
  267. package/src/modules/finance-ledger/query/listFinancialStatements.ts +62 -0
  268. package/src/modules/finance-ledger/query/listFiscalYears.generated.ts +5 -0
  269. package/src/modules/finance-ledger/query/listFiscalYears.test.ts +63 -0
  270. package/src/modules/finance-ledger/query/listFiscalYears.ts +45 -0
  271. package/src/modules/finance-ledger/query/listJournalEntries.generated.ts +5 -0
  272. package/src/modules/finance-ledger/query/listJournalEntries.test.ts +91 -0
  273. package/src/modules/finance-ledger/query/listJournalEntries.ts +64 -0
  274. package/src/modules/finance-ledger/query/listPeriodCloses.generated.ts +5 -0
  275. package/src/modules/finance-ledger/query/listPeriodCloses.test.ts +63 -0
  276. package/src/modules/finance-ledger/query/listPeriodCloses.ts +64 -0
  277. package/src/modules/finance-ledger/query/listTrialBalances.generated.ts +5 -0
  278. package/src/modules/finance-ledger/query/listTrialBalances.test.ts +78 -0
  279. package/src/modules/finance-ledger/query/listTrialBalances.ts +56 -0
  280. package/src/modules/finance-ledger/seed/index.ts +19 -0
  281. package/src/modules/finance-ledger/tailor.config.ts +13 -0
  282. package/src/modules/finance-ledger/tailor.d.ts +13 -0
  283. package/src/modules/finance-ledger/testing/commandTestUtils.ts +35 -0
  284. package/src/modules/finance-ledger/testing/fixtures.ts +382 -0
  285. package/src/modules/finance-ledger/tsconfig.json +16 -0
  286. package/src/progress/schema.test.ts +161 -0
  287. package/src/progress/schema.ts +316 -0
  288. package/templates/scaffold/app/backend/package.json +1 -3
  289. package/templates/scaffold/app/backend/vitest.config.ts +4 -21
  290. package/src/generator/generate-stubs.ts +0 -35
@@ -0,0 +1,382 @@
1
+ import type {
2
+ FiscalYear,
3
+ AccountingPeriod,
4
+ JournalEntry,
5
+ JournalLine,
6
+ PeriodClose,
7
+ TrialBalance,
8
+ TrialBalanceLine,
9
+ FinancialStatement,
10
+ FinancialStatementLineItem,
11
+ Schema,
12
+ } from "../lib/types";
13
+
14
+ const createdAt = new Date("2024-01-01T00:00:00.000Z");
15
+
16
+ export const baseCompany = {
17
+ id: "company-1",
18
+ status: "ACTIVE",
19
+ };
20
+
21
+ export const baseAccount = {
22
+ id: "account-1",
23
+ code: "1000",
24
+ name: "Cash",
25
+ classification: "ASSET",
26
+ status: "ACTIVE",
27
+ successorAccountId: null,
28
+ };
29
+
30
+ export const baseAccount2 = {
31
+ id: "account-2",
32
+ code: "2000",
33
+ name: "Accounts Payable",
34
+ classification: "LIABILITY",
35
+ status: "ACTIVE",
36
+ successorAccountId: null,
37
+ };
38
+
39
+ export const receivableAccount = {
40
+ id: "account-receivable",
41
+ code: "1100",
42
+ name: "Accounts Receivable",
43
+ classification: "RECEIVABLE",
44
+ status: "ACTIVE",
45
+ successorAccountId: null,
46
+ };
47
+
48
+ export const payableAccount = {
49
+ id: "account-payable",
50
+ code: "2100",
51
+ name: "Accounts Payable Control",
52
+ classification: "PAYABLE",
53
+ status: "ACTIVE",
54
+ successorAccountId: null,
55
+ };
56
+
57
+ export const inactiveAccount = {
58
+ ...baseAccount,
59
+ id: "account-inactive",
60
+ status: "INACTIVE",
61
+ successorAccountId: null,
62
+ };
63
+
64
+ export const deprecatedAccount = {
65
+ ...baseAccount,
66
+ id: "account-deprecated",
67
+ status: "DEPRECATED",
68
+ successorAccountId: baseAccount.id,
69
+ };
70
+
71
+ export const retainedEarningsAccount = {
72
+ id: "account-retained-earnings",
73
+ code: "3100",
74
+ name: "Retained Earnings",
75
+ classification: "RETAINED_EARNINGS",
76
+ status: "ACTIVE",
77
+ successorAccountId: null,
78
+ };
79
+
80
+ export const revenueAccount = {
81
+ id: "account-revenue",
82
+ code: "4000",
83
+ name: "Sales Revenue",
84
+ classification: "REVENUE",
85
+ status: "ACTIVE",
86
+ successorAccountId: null,
87
+ };
88
+
89
+ export const expenseAccount = {
90
+ id: "account-expense",
91
+ code: "5000",
92
+ name: "Cost of Goods Sold",
93
+ classification: "EXPENSE",
94
+ status: "ACTIVE",
95
+ successorAccountId: null,
96
+ };
97
+
98
+ export const baseAccountGroup = {
99
+ id: "account-group-1",
100
+ name: "Current Assets",
101
+ code: "CA",
102
+ };
103
+
104
+ export const baseChartOfAccounts = {
105
+ id: "coa-1",
106
+ companyId: baseCompany.id,
107
+ status: "ACTIVE",
108
+ };
109
+
110
+ export const baseCurrency = {
111
+ id: "currency-1",
112
+ code: "USD",
113
+ isActive: true,
114
+ };
115
+
116
+ export const baseUser = {
117
+ id: "user-1",
118
+ status: "ACTIVE",
119
+ };
120
+
121
+ export const baseFiscalYear = {
122
+ id: "fiscal-year-1",
123
+ companyId: baseCompany.id,
124
+ name: "FY 2024",
125
+ startDate: new Date("2024-01-01"),
126
+ endDate: new Date("2024-12-31"),
127
+ yearEndCloseExecuted: false,
128
+ createdAt,
129
+ updatedAt: null,
130
+ } as const satisfies FiscalYear<Schema>;
131
+
132
+ export const baseFiscalYear2 = {
133
+ ...baseFiscalYear,
134
+ id: "fiscal-year-2",
135
+ name: "FY 2025",
136
+ startDate: new Date("2025-01-01"),
137
+ endDate: new Date("2025-12-31"),
138
+ } as const satisfies FiscalYear<Schema>;
139
+
140
+ export const baseAccountingPeriod = {
141
+ id: "period-1",
142
+ companyId: baseCompany.id,
143
+ fiscalYearId: baseFiscalYear.id,
144
+ name: "January 2024",
145
+ startDate: new Date("2024-01-01"),
146
+ endDate: new Date("2024-01-31"),
147
+ periodType: "OPERATING",
148
+ status: "OPEN",
149
+ createdAt,
150
+ updatedAt: null,
151
+ } as const satisfies AccountingPeriod<Schema>;
152
+
153
+ export const neverOpenedPeriod = {
154
+ ...baseAccountingPeriod,
155
+ id: "period-never-opened",
156
+ status: "NEVER_OPENED",
157
+ } as const satisfies AccountingPeriod<Schema>;
158
+
159
+ export const futureEnterablePeriod = {
160
+ ...baseAccountingPeriod,
161
+ id: "period-future-enterable",
162
+ status: "FUTURE_ENTERABLE",
163
+ } as const satisfies AccountingPeriod<Schema>;
164
+
165
+ export const closedPeriod = {
166
+ ...baseAccountingPeriod,
167
+ id: "period-closed",
168
+ status: "CLOSED",
169
+ } as const satisfies AccountingPeriod<Schema>;
170
+
171
+ export const permanentlyClosedPeriod = {
172
+ ...baseAccountingPeriod,
173
+ id: "period-permanently-closed",
174
+ status: "PERMANENTLY_CLOSED",
175
+ } as const satisfies AccountingPeriod<Schema>;
176
+
177
+ export const lastPeriodOfYear = {
178
+ ...baseAccountingPeriod,
179
+ id: "period-last",
180
+ name: "December 2024",
181
+ startDate: new Date("2024-12-01"),
182
+ endDate: new Date("2024-12-31"),
183
+ } as const satisfies AccountingPeriod<Schema>;
184
+
185
+ export const baseJournalEntry = {
186
+ id: "journal-entry-1",
187
+ companyId: baseCompany.id,
188
+ accountingPeriodId: baseAccountingPeriod.id,
189
+ entryDate: new Date("2024-01-15"),
190
+ journalType: "MISCELLANEOUS",
191
+ referenceNumber: "JE-001",
192
+ status: "DRAFT",
193
+ description: "Test journal entry",
194
+ sourceDocumentReference: null,
195
+ adjustingEntryType: null,
196
+ reversalOfId: null,
197
+ postedAt: null,
198
+ createdAt,
199
+ updatedAt: null,
200
+ } as const satisfies JournalEntry<Schema>;
201
+
202
+ export const postedJournalEntry = {
203
+ ...baseJournalEntry,
204
+ id: "journal-entry-2",
205
+ referenceNumber: "JE-002",
206
+ status: "POSTED",
207
+ postedAt: createdAt,
208
+ } as const satisfies JournalEntry<Schema>;
209
+
210
+ export const reversedJournalEntry = {
211
+ ...baseJournalEntry,
212
+ id: "journal-entry-3",
213
+ referenceNumber: "JE-003",
214
+ status: "REVERSED",
215
+ postedAt: createdAt,
216
+ } as const satisfies JournalEntry<Schema>;
217
+
218
+ export const baseJournalLine = {
219
+ id: "journal-line-1",
220
+ journalEntryId: baseJournalEntry.id,
221
+ accountId: baseAccount.id,
222
+ debitAmount: 1000,
223
+ creditAmount: null,
224
+ description: "Debit line",
225
+ currencyCode: null,
226
+ exchangeRate: null,
227
+ functionalDebitAmount: 1000,
228
+ functionalCreditAmount: null,
229
+ createdAt,
230
+ updatedAt: null,
231
+ } as const satisfies JournalLine<Schema>;
232
+
233
+ export const baseJournalLine2 = {
234
+ id: "journal-line-2",
235
+ journalEntryId: baseJournalEntry.id,
236
+ accountId: baseAccount2.id,
237
+ debitAmount: null,
238
+ creditAmount: 1000,
239
+ description: "Credit line",
240
+ currencyCode: null,
241
+ exchangeRate: null,
242
+ functionalDebitAmount: null,
243
+ functionalCreditAmount: 1000,
244
+ createdAt,
245
+ updatedAt: null,
246
+ } as const satisfies JournalLine<Schema>;
247
+
248
+ export const basePeriodClose = {
249
+ id: "period-close-1",
250
+ accountingPeriodId: baseAccountingPeriod.id,
251
+ status: "NOT_STARTED",
252
+ initiatedByUserId: baseUser.id,
253
+ completionPercentage: 0,
254
+ subledgerVerificationDetails: null,
255
+ trialBalanceId: null,
256
+ preliminaryStatementIds: null,
257
+ approvedByUserId: null,
258
+ finalizedByUserId: null,
259
+ yearEndCloseExecuted: false,
260
+ createdAt,
261
+ updatedAt: null,
262
+ } as const satisfies PeriodClose<Schema>;
263
+
264
+ export const inProgressPeriodClose = {
265
+ ...basePeriodClose,
266
+ id: "period-close-in-progress",
267
+ status: "IN_PROGRESS",
268
+ completionPercentage: 12,
269
+ } as const satisfies PeriodClose<Schema>;
270
+
271
+ export const subledgersVerifiedPeriodClose = {
272
+ ...basePeriodClose,
273
+ id: "period-close-subledgers-verified",
274
+ status: "SUBLEDGERS_VERIFIED",
275
+ completionPercentage: 25,
276
+ } as const satisfies PeriodClose<Schema>;
277
+
278
+ export const adjustmentsPostedPeriodClose = {
279
+ ...basePeriodClose,
280
+ id: "period-close-adjustments-posted",
281
+ status: "ADJUSTMENTS_POSTED",
282
+ completionPercentage: 50,
283
+ } as const satisfies PeriodClose<Schema>;
284
+
285
+ export const trialBalanceVerifiedPeriodClose = {
286
+ ...basePeriodClose,
287
+ id: "period-close-tb-verified",
288
+ status: "TRIAL_BALANCE_VERIFIED",
289
+ completionPercentage: 62,
290
+ } as const satisfies PeriodClose<Schema>;
291
+
292
+ export const underReviewPeriodClose = {
293
+ ...basePeriodClose,
294
+ id: "period-close-under-review",
295
+ status: "UNDER_REVIEW",
296
+ completionPercentage: 75,
297
+ } as const satisfies PeriodClose<Schema>;
298
+
299
+ export const softLockedPeriodClose = {
300
+ ...basePeriodClose,
301
+ id: "period-close-soft-locked",
302
+ status: "SOFT_LOCKED",
303
+ completionPercentage: 87,
304
+ approvedByUserId: baseUser.id,
305
+ } as const satisfies PeriodClose<Schema>;
306
+
307
+ export const permanentlyClosedPeriodClose = {
308
+ ...basePeriodClose,
309
+ id: "period-close-permanently-closed",
310
+ status: "PERMANENTLY_CLOSED",
311
+ completionPercentage: 100,
312
+ } as const satisfies PeriodClose<Schema>;
313
+
314
+ export const baseTrialBalance = {
315
+ id: "trial-balance-1",
316
+ companyId: baseCompany.id,
317
+ accountingPeriodId: baseAccountingPeriod.id,
318
+ chartOfAccountsId: baseChartOfAccounts.id,
319
+ variant: "PRE_CLOSE",
320
+ generatedAt: createdAt,
321
+ totalDebits: 10000,
322
+ totalCredits: 10000,
323
+ isBalanced: true,
324
+ createdAt,
325
+ updatedAt: null,
326
+ } as const satisfies TrialBalance<Schema>;
327
+
328
+ export const baseTrialBalanceLine = {
329
+ id: "trial-balance-line-1",
330
+ trialBalanceId: baseTrialBalance.id,
331
+ accountId: baseAccount.id,
332
+ accountGroupId: baseAccountGroup.id,
333
+ accountCode: "1000",
334
+ accountName: "Cash",
335
+ openingBalance: 0,
336
+ periodDebits: 5000,
337
+ periodCredits: 2000,
338
+ closingBalance: 3000,
339
+ sortOrder: 1,
340
+ createdAt,
341
+ updatedAt: null,
342
+ } as const satisfies TrialBalanceLine<Schema>;
343
+
344
+ export const baseFinancialStatement = {
345
+ id: "financial-statement-1",
346
+ companyId: baseCompany.id,
347
+ chartOfAccountsId: baseChartOfAccounts.id,
348
+ trialBalanceId: baseTrialBalance.id,
349
+ comparativePeriodTrialBalanceId: null,
350
+ statementType: "BALANCE_SHEET",
351
+ status: "DRAFT",
352
+ reportingDate: new Date("2024-01-31"),
353
+ startDate: null,
354
+ endDate: null,
355
+ cashFlowMethod: null,
356
+ generatedAt: createdAt,
357
+ finalizedAt: null,
358
+ createdAt,
359
+ updatedAt: null,
360
+ } as const satisfies FinancialStatement<Schema>;
361
+
362
+ export const finalizedFinancialStatement = {
363
+ ...baseFinancialStatement,
364
+ id: "financial-statement-2",
365
+ status: "FINALIZED",
366
+ finalizedAt: createdAt,
367
+ } as const satisfies FinancialStatement<Schema>;
368
+
369
+ export const baseFinancialStatementLineItem = {
370
+ id: "fs-line-item-1",
371
+ financialStatementId: baseFinancialStatement.id,
372
+ accountId: baseAccount.id,
373
+ accountGroupId: baseAccountGroup.id,
374
+ label: "Cash",
375
+ amount: 3000,
376
+ comparativeAmount: null,
377
+ lineType: "DETAIL",
378
+ sectionType: "Current Assets",
379
+ sortOrder: 1,
380
+ createdAt,
381
+ updatedAt: null,
382
+ } as const satisfies FinancialStatementLineItem<Schema>;
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "allowSyntheticDefaultImports": true,
7
+ "esModuleInterop": true,
8
+ "allowJs": true,
9
+ "strict": true,
10
+ "noEmit": true,
11
+ "skipLibCheck": true,
12
+ "resolveJsonModule": true,
13
+ "types": ["node", "@tailor-platform/function-types"]
14
+ },
15
+ "include": ["**/*.ts"]
16
+ }
@@ -0,0 +1,161 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { ProgressInput, ProgressEntry } from "./schema";
3
+
4
+ describe("ProgressInput", () => {
5
+ it("accepts a valid step.start input", () => {
6
+ const input = {
7
+ v: 1,
8
+ sessionId: "s1",
9
+ prompt: "Create requirements for manufacturing",
10
+ event: "step.start" as const,
11
+ data: {
12
+ skill: "erp-kit-app-1-requirements",
13
+ context: { industry: "manufacturing" },
14
+ },
15
+ };
16
+ const result = ProgressInput.safeParse(input);
17
+ expect(result.success).toBe(true);
18
+ });
19
+
20
+ it("defaults conversation to empty array when omitted", () => {
21
+ const input = {
22
+ v: 1,
23
+ sessionId: "s1",
24
+ prompt: "Create screens for manufacturing",
25
+ event: "decision" as const,
26
+ data: {
27
+ question: "Flat or tree?",
28
+ choice: "tree",
29
+ alternatives: ["flat"],
30
+ rationale: "better UX",
31
+ },
32
+ };
33
+ const result = ProgressInput.safeParse(input);
34
+ expect(result.success).toBe(true);
35
+ if (result.success) {
36
+ expect(result.data.conversation).toEqual([]);
37
+ }
38
+ });
39
+
40
+ it("rejects missing prompt", () => {
41
+ const input = {
42
+ v: 1,
43
+ sessionId: "s1",
44
+ event: "note" as const,
45
+ data: { message: "test", tags: [] },
46
+ };
47
+ const result = ProgressInput.safeParse(input);
48
+ expect(result.success).toBe(false);
49
+ });
50
+
51
+ it("rejects invalid event type", () => {
52
+ const input = {
53
+ v: 1,
54
+ sessionId: "s1",
55
+ prompt: "some prompt",
56
+ event: "invalid.event",
57
+ data: {},
58
+ };
59
+ const result = ProgressInput.safeParse(input);
60
+ expect(result.success).toBe(false);
61
+ });
62
+
63
+ it("rejects mismatched event/data", () => {
64
+ const input = {
65
+ v: 1,
66
+ sessionId: "s1",
67
+ prompt: "some prompt",
68
+ event: "step.start" as const,
69
+ data: {
70
+ question: "something",
71
+ choice: "something",
72
+ alternatives: [],
73
+ rationale: "",
74
+ },
75
+ };
76
+ const result = ProgressInput.safeParse(input);
77
+ expect(result.success).toBe(false);
78
+ });
79
+
80
+ it("accepts all event types with correct data", () => {
81
+ const events = [
82
+ { event: "step.start", data: { skill: "s", context: {} } },
83
+ { event: "step.complete", data: { status: "pass", summary: "done", artifacts: [] } },
84
+ { event: "decision", data: { question: "q", choice: "c", alternatives: [], rationale: "r" } },
85
+ { event: "agent.dispatch", data: { agentName: "a", task: "t", inputs: {} } },
86
+ {
87
+ event: "agent.result",
88
+ data: { agentName: "a", status: "pass", outputs: {}, duration_ms: 100 },
89
+ },
90
+ { event: "artifact.create", data: { path: "f.md", type: "doc", operation: "create" } },
91
+ { event: "validation", data: { command: "check", status: "pass", issues: [] } },
92
+ { event: "error", data: { message: "err", recoverable: true } },
93
+ { event: "note", data: { message: "note", tags: ["tag"] } },
94
+ ];
95
+ for (const { event, data } of events) {
96
+ const result = ProgressInput.safeParse({
97
+ v: 1,
98
+ sessionId: "s1",
99
+ prompt: "test prompt",
100
+ event,
101
+ data,
102
+ });
103
+ expect(result.success, `event "${event}" should be valid`).toBe(true);
104
+ }
105
+ });
106
+
107
+ it("accepts conversation messages", () => {
108
+ const input = {
109
+ v: 1,
110
+ sessionId: "s1",
111
+ prompt: "test prompt",
112
+ event: "decision" as const,
113
+ conversation: [
114
+ { role: "user" as const, message: "flat or tree?" },
115
+ { role: "agent" as const, message: "I recommend tree" },
116
+ ],
117
+ data: {
118
+ question: "layout",
119
+ choice: "tree",
120
+ alternatives: ["flat"],
121
+ rationale: "better UX",
122
+ },
123
+ };
124
+ const result = ProgressInput.safeParse(input);
125
+ expect(result.success).toBe(true);
126
+ if (result.success) {
127
+ expect(result.data.conversation).toHaveLength(2);
128
+ }
129
+ });
130
+ });
131
+
132
+ describe("ProgressEntry", () => {
133
+ it("accepts a full entry with timestamp and git", () => {
134
+ const entry = {
135
+ v: 1,
136
+ timestamp: "2026-03-21T10:00:00.000Z",
137
+ sessionId: "s1",
138
+ prompt: "test prompt",
139
+ event: "note" as const,
140
+ git: { branch: "main", commit: "abc123" },
141
+ conversation: [],
142
+ data: { message: "test", tags: [] },
143
+ };
144
+ const result = ProgressEntry.safeParse(entry);
145
+ expect(result.success).toBe(true);
146
+ });
147
+
148
+ it("rejects entry without timestamp", () => {
149
+ const entry = {
150
+ v: 1,
151
+ sessionId: "s1",
152
+ prompt: "test prompt",
153
+ event: "note" as const,
154
+ git: { branch: "main", commit: "abc123" },
155
+ conversation: [],
156
+ data: { message: "test", tags: [] },
157
+ };
158
+ const result = ProgressEntry.safeParse(entry);
159
+ expect(result.success).toBe(false);
160
+ });
161
+ });