@things-factory/accounting 7.0.6 → 7.1.2

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 (390) hide show
  1. package/client/activities/activity-book-edit.ts +1 -1
  2. package/client/activities/activity-book-view.ts +1 -1
  3. package/client/activities/activity-expense-edit.ts +1 -1
  4. package/client/activities/activity-expense-view.ts +1 -1
  5. package/client/bootstrap.ts +10 -1
  6. package/client/components/accounting-category-selector.ts +136 -0
  7. package/client/components/accounting-category-view.ts +75 -0
  8. package/client/grist-editors/grist-editor-accounting-category-object.ts +83 -0
  9. package/client/grist-editors/grist-renderer-accounting-category-object.ts +13 -0
  10. package/client/pages/account/account-importer.ts +19 -8
  11. package/client/pages/account/account-list-page.ts +38 -8
  12. package/client/pages/accounting-category/accounting-category-importer.ts +19 -8
  13. package/client/pages/accounting-category/accounting-category-list-page.ts +36 -6
  14. package/client/pages/accounting-category/accounting-category-tree-page.ts +338 -0
  15. package/client/pages/accounting-document/accounting-document-importer.ts +90 -0
  16. package/client/pages/accounting-document/accounting-document-list-page.ts +398 -0
  17. package/client/pages/financial-statement/financial-statement-importer.ts +19 -8
  18. package/client/pages/financial-statement/financial-statement-list-page.ts +5 -6
  19. package/client/pages/fiscal-month/fiscal-month-importer.ts +90 -0
  20. package/client/pages/fiscal-month/fiscal-month-list-page.ts +398 -0
  21. package/client/pages/fiscal-quarter/fiscal-quarter-importer.ts +90 -0
  22. package/client/pages/fiscal-quarter/fiscal-quarter-list-page.ts +398 -0
  23. package/client/pages/fiscal-year/fiscal-year-importer.ts +90 -0
  24. package/client/pages/fiscal-year/fiscal-year-list-page.ts +398 -0
  25. package/client/pages/income-statement/income-statement-importer.ts +19 -8
  26. package/client/pages/income-statement/income-statement-list-page.ts +5 -6
  27. package/client/pages/{ledger/ledger-importer.ts → payment/payment-importer.ts} +13 -9
  28. package/client/pages/{ledger/ledger-list-page.ts → payment/payment-list-page.ts} +118 -58
  29. package/client/pages/transaction/transaction-importer.ts +19 -8
  30. package/client/pages/transaction/transaction-list-page.ts +5 -6
  31. package/client/route.ts +16 -8
  32. package/client/types/accounting-category.ts +23 -0
  33. package/client/types/index.ts +1 -0
  34. package/dist-client/activities/activity-book-edit.js +1 -1
  35. package/dist-client/activities/activity-book-edit.js.map +1 -1
  36. package/dist-client/activities/activity-book-view.js +1 -1
  37. package/dist-client/activities/activity-book-view.js.map +1 -1
  38. package/dist-client/activities/activity-expense-edit.js +1 -1
  39. package/dist-client/activities/activity-expense-edit.js.map +1 -1
  40. package/dist-client/activities/activity-expense-view.js +1 -1
  41. package/dist-client/activities/activity-expense-view.js.map +1 -1
  42. package/dist-client/bootstrap.js +7 -1
  43. package/dist-client/bootstrap.js.map +1 -1
  44. package/dist-client/components/accounting-category-selector.d.ts +16 -0
  45. package/dist-client/components/accounting-category-selector.js +134 -0
  46. package/dist-client/components/accounting-category-selector.js.map +1 -0
  47. package/dist-client/components/accounting-category-view.d.ts +14 -0
  48. package/dist-client/components/accounting-category-view.js +81 -0
  49. package/dist-client/components/accounting-category-view.js.map +1 -0
  50. package/dist-client/grist-editors/grist-editor-accounting-category-object.d.ts +11 -0
  51. package/dist-client/grist-editors/grist-editor-accounting-category-object.js +71 -0
  52. package/dist-client/grist-editors/grist-editor-accounting-category-object.js.map +1 -0
  53. package/dist-client/grist-editors/grist-renderer-accounting-category-object.d.ts +2 -0
  54. package/dist-client/grist-editors/grist-renderer-accounting-category-object.js +9 -0
  55. package/dist-client/grist-editors/grist-renderer-accounting-category-object.js.map +1 -0
  56. package/dist-client/pages/account/account-importer.d.ts +0 -1
  57. package/dist-client/pages/account/account-importer.js +12 -5
  58. package/dist-client/pages/account/account-importer.js.map +1 -1
  59. package/dist-client/pages/account/account-list-page.js +38 -8
  60. package/dist-client/pages/account/account-list-page.js.map +1 -1
  61. package/dist-client/pages/accounting-category/accounting-category-importer.d.ts +0 -1
  62. package/dist-client/pages/accounting-category/accounting-category-importer.js +12 -5
  63. package/dist-client/pages/accounting-category/accounting-category-importer.js.map +1 -1
  64. package/dist-client/pages/accounting-category/accounting-category-list-page.js +36 -6
  65. package/dist-client/pages/accounting-category/accounting-category-list-page.js.map +1 -1
  66. package/dist-client/pages/accounting-category/accounting-category-tree-page.d.ts +46 -0
  67. package/dist-client/pages/accounting-category/accounting-category-tree-page.js +329 -0
  68. package/dist-client/pages/accounting-category/accounting-category-tree-page.js.map +1 -0
  69. package/dist-client/pages/accounting-document/accounting-document-importer.d.ts +23 -0
  70. package/dist-client/pages/accounting-document/accounting-document-importer.js +93 -0
  71. package/dist-client/pages/accounting-document/accounting-document-importer.js.map +1 -0
  72. package/dist-client/pages/accounting-document/accounting-document-list-page.d.ts +66 -0
  73. package/dist-client/pages/accounting-document/accounting-document-list-page.js +370 -0
  74. package/dist-client/pages/accounting-document/accounting-document-list-page.js.map +1 -0
  75. package/dist-client/pages/financial-statement/financial-statement-importer.d.ts +0 -1
  76. package/dist-client/pages/financial-statement/financial-statement-importer.js +12 -5
  77. package/dist-client/pages/financial-statement/financial-statement-importer.js.map +1 -1
  78. package/dist-client/pages/financial-statement/financial-statement-list-page.js +5 -6
  79. package/dist-client/pages/financial-statement/financial-statement-list-page.js.map +1 -1
  80. package/dist-client/pages/fiscal-month/fiscal-month-importer.d.ts +23 -0
  81. package/dist-client/pages/fiscal-month/fiscal-month-importer.js +93 -0
  82. package/dist-client/pages/fiscal-month/fiscal-month-importer.js.map +1 -0
  83. package/dist-client/pages/fiscal-month/fiscal-month-list-page.d.ts +66 -0
  84. package/dist-client/pages/fiscal-month/fiscal-month-list-page.js +370 -0
  85. package/dist-client/pages/fiscal-month/fiscal-month-list-page.js.map +1 -0
  86. package/dist-client/pages/fiscal-quarter/fiscal-quarter-importer.d.ts +23 -0
  87. package/dist-client/pages/fiscal-quarter/fiscal-quarter-importer.js +93 -0
  88. package/dist-client/pages/fiscal-quarter/fiscal-quarter-importer.js.map +1 -0
  89. package/dist-client/pages/fiscal-quarter/fiscal-quarter-list-page.d.ts +66 -0
  90. package/dist-client/pages/fiscal-quarter/fiscal-quarter-list-page.js +370 -0
  91. package/dist-client/pages/fiscal-quarter/fiscal-quarter-list-page.js.map +1 -0
  92. package/dist-client/pages/fiscal-year/fiscal-year-importer.d.ts +23 -0
  93. package/dist-client/pages/fiscal-year/fiscal-year-importer.js +93 -0
  94. package/dist-client/pages/fiscal-year/fiscal-year-importer.js.map +1 -0
  95. package/dist-client/pages/fiscal-year/fiscal-year-list-page.d.ts +66 -0
  96. package/dist-client/pages/fiscal-year/fiscal-year-list-page.js +370 -0
  97. package/dist-client/pages/fiscal-year/fiscal-year-list-page.js.map +1 -0
  98. package/dist-client/pages/income-statement/income-statement-importer.d.ts +0 -1
  99. package/dist-client/pages/income-statement/income-statement-importer.js +12 -5
  100. package/dist-client/pages/income-statement/income-statement-importer.js.map +1 -1
  101. package/dist-client/pages/income-statement/income-statement-list-page.js +5 -6
  102. package/dist-client/pages/income-statement/income-statement-list-page.js.map +1 -1
  103. package/dist-client/pages/{ledger/ledger-importer.d.ts → payment/payment-importer.d.ts} +2 -2
  104. package/dist-client/pages/{ledger/ledger-importer.js → payment/payment-importer.js} +11 -11
  105. package/dist-client/pages/payment/payment-importer.js.map +1 -0
  106. package/dist-client/pages/{ledger/ledger-list-page.d.ts → payment/payment-list-page.d.ts} +12 -8
  107. package/dist-client/pages/{ledger/ledger-list-page.js → payment/payment-list-page.js} +114 -68
  108. package/dist-client/pages/payment/payment-list-page.js.map +1 -0
  109. package/dist-client/pages/transaction/transaction-importer.d.ts +0 -1
  110. package/dist-client/pages/transaction/transaction-importer.js +12 -5
  111. package/dist-client/pages/transaction/transaction-importer.js.map +1 -1
  112. package/dist-client/pages/transaction/transaction-list-page.js +5 -6
  113. package/dist-client/pages/transaction/transaction-list-page.js.map +1 -1
  114. package/dist-client/route.d.ts +1 -1
  115. package/dist-client/route.js +9 -3
  116. package/dist-client/route.js.map +1 -1
  117. package/dist-client/tsconfig.tsbuildinfo +1 -1
  118. package/dist-client/types/accounting-category.d.ts +16 -0
  119. package/dist-client/types/accounting-category.js +3 -0
  120. package/dist-client/types/accounting-category.js.map +1 -0
  121. package/dist-client/types/index.d.ts +1 -0
  122. package/dist-client/types/index.js +2 -0
  123. package/dist-client/types/index.js.map +1 -0
  124. package/dist-server/activities/activity-book.js +31 -19
  125. package/dist-server/activities/activity-book.js.map +1 -1
  126. package/dist-server/controllers/index.d.ts +1 -0
  127. package/dist-server/controllers/index.js +4 -0
  128. package/dist-server/controllers/index.js.map +1 -1
  129. package/dist-server/controllers/summary-statements.d.ts +4 -0
  130. package/dist-server/controllers/summary-statements.js +149 -0
  131. package/dist-server/controllers/summary-statements.js.map +1 -0
  132. package/dist-server/index.d.ts +2 -0
  133. package/dist-server/index.js +2 -0
  134. package/dist-server/index.js.map +1 -1
  135. package/dist-server/migrations/1725200507196-seed-fiscal-entities.d.ts +5 -0
  136. package/dist-server/migrations/1725200507196-seed-fiscal-entities.js +95 -0
  137. package/dist-server/migrations/1725200507196-seed-fiscal-entities.js.map +1 -0
  138. package/dist-server/migrations/1725201467183-seed-accounts.d.ts +5 -0
  139. package/dist-server/migrations/1725201467183-seed-accounts.js +318 -0
  140. package/dist-server/migrations/1725201467183-seed-accounts.js.map +1 -0
  141. package/dist-server/service/account/account-history.d.ts +4 -1
  142. package/dist-server/service/account/account-history.js +17 -7
  143. package/dist-server/service/account/account-history.js.map +1 -1
  144. package/dist-server/service/account/account-mutation.js +13 -9
  145. package/dist-server/service/account/account-mutation.js.map +1 -1
  146. package/dist-server/service/account/account-query.js +3 -1
  147. package/dist-server/service/account/account-query.js.map +1 -1
  148. package/dist-server/service/account/account.d.ts +1 -1
  149. package/dist-server/service/account/account.js +16 -5
  150. package/dist-server/service/account/account.js.map +1 -1
  151. package/dist-server/service/account/index.d.ts +1 -2
  152. package/dist-server/service/accounting-category/accounting-category-history.d.ts +26 -0
  153. package/dist-server/service/accounting-category/accounting-category-history.js +136 -0
  154. package/dist-server/service/accounting-category/accounting-category-history.js.map +1 -0
  155. package/dist-server/service/accounting-category/accounting-category-mutation.js +12 -8
  156. package/dist-server/service/accounting-category/accounting-category-mutation.js.map +1 -1
  157. package/dist-server/service/accounting-category/accounting-category-query.d.ts +1 -0
  158. package/dist-server/service/accounting-category/accounting-category-query.js +24 -1
  159. package/dist-server/service/accounting-category/accounting-category-query.js.map +1 -1
  160. package/dist-server/service/accounting-category/accounting-category-type.d.ts +2 -0
  161. package/dist-server/service/accounting-category/accounting-category-type.js +8 -0
  162. package/dist-server/service/accounting-category/accounting-category-type.js.map +1 -1
  163. package/dist-server/service/accounting-category/accounting-category.d.ts +2 -0
  164. package/dist-server/service/accounting-category/accounting-category.js +20 -3
  165. package/dist-server/service/accounting-category/accounting-category.js.map +1 -1
  166. package/dist-server/service/accounting-category/event-subscriber.d.ts +7 -0
  167. package/dist-server/service/accounting-category/event-subscriber.js +21 -0
  168. package/dist-server/service/accounting-category/event-subscriber.js.map +1 -0
  169. package/dist-server/service/accounting-category/index.d.ts +2 -1
  170. package/dist-server/service/accounting-category/index.js +4 -2
  171. package/dist-server/service/accounting-category/index.js.map +1 -1
  172. package/dist-server/service/accounting-document/accounting-document-history.d.ts +26 -0
  173. package/dist-server/service/accounting-document/accounting-document-history.js +129 -0
  174. package/dist-server/service/accounting-document/accounting-document-history.js.map +1 -0
  175. package/dist-server/service/accounting-document/accounting-document-mutation.d.ts +10 -0
  176. package/dist-server/service/accounting-document/accounting-document-mutation.js +128 -0
  177. package/dist-server/service/accounting-document/accounting-document-mutation.js.map +1 -0
  178. package/dist-server/service/accounting-document/accounting-document-query.d.ts +11 -0
  179. package/dist-server/service/accounting-document/accounting-document-query.js +79 -0
  180. package/dist-server/service/accounting-document/accounting-document-query.js.map +1 -0
  181. package/dist-server/service/accounting-document/accounting-document-type.d.ts +20 -0
  182. package/dist-server/service/accounting-document/accounting-document-type.js +74 -0
  183. package/dist-server/service/accounting-document/accounting-document-type.js.map +1 -0
  184. package/dist-server/service/accounting-document/accounting-document.d.ts +21 -0
  185. package/dist-server/service/accounting-document/accounting-document.js +104 -0
  186. package/dist-server/service/accounting-document/accounting-document.js.map +1 -0
  187. package/dist-server/service/accounting-document/event-subscriber.d.ts +7 -0
  188. package/dist-server/service/accounting-document/event-subscriber.js +21 -0
  189. package/dist-server/service/accounting-document/event-subscriber.js.map +1 -0
  190. package/dist-server/service/accounting-document/index.d.ts +7 -0
  191. package/dist-server/service/accounting-document/index.js +12 -0
  192. package/dist-server/service/accounting-document/index.js.map +1 -0
  193. package/dist-server/service/common-type.d.ts +5 -0
  194. package/dist-server/service/common-type.js +15 -0
  195. package/dist-server/service/common-type.js.map +1 -0
  196. package/dist-server/service/financial-statement/financial-statement-history.d.ts +9 -6
  197. package/dist-server/service/financial-statement/financial-statement-history.js +33 -23
  198. package/dist-server/service/financial-statement/financial-statement-history.js.map +1 -1
  199. package/dist-server/service/financial-statement/financial-statement-line-item.d.ts +19 -0
  200. package/dist-server/service/financial-statement/financial-statement-line-item.js +94 -0
  201. package/dist-server/service/financial-statement/financial-statement-line-item.js.map +1 -0
  202. package/dist-server/service/financial-statement/financial-statement-mutation.js +12 -8
  203. package/dist-server/service/financial-statement/financial-statement-mutation.js.map +1 -1
  204. package/dist-server/service/financial-statement/financial-statement-query.js +3 -1
  205. package/dist-server/service/financial-statement/financial-statement-query.js.map +1 -1
  206. package/dist-server/service/financial-statement/financial-statement.d.ts +2 -0
  207. package/dist-server/service/financial-statement/financial-statement.js +45 -24
  208. package/dist-server/service/financial-statement/financial-statement.js.map +1 -1
  209. package/dist-server/service/financial-statement/index.d.ts +2 -2
  210. package/dist-server/service/financial-statement/index.js +2 -1
  211. package/dist-server/service/financial-statement/index.js.map +1 -1
  212. package/dist-server/service/fiscal-month/fiscal-month-mutation.d.ts +10 -0
  213. package/dist-server/service/fiscal-month/fiscal-month-mutation.js +134 -0
  214. package/dist-server/service/fiscal-month/fiscal-month-mutation.js.map +1 -0
  215. package/dist-server/service/fiscal-month/fiscal-month-query.d.ts +11 -0
  216. package/dist-server/service/fiscal-month/fiscal-month-query.js +83 -0
  217. package/dist-server/service/fiscal-month/fiscal-month-query.js.map +1 -0
  218. package/dist-server/service/fiscal-month/fiscal-month-type.d.ts +26 -0
  219. package/dist-server/service/fiscal-month/fiscal-month-type.js +98 -0
  220. package/dist-server/service/fiscal-month/fiscal-month-type.js.map +1 -0
  221. package/dist-server/service/fiscal-month/fiscal-month.d.ts +22 -0
  222. package/dist-server/service/fiscal-month/fiscal-month.js +99 -0
  223. package/dist-server/service/fiscal-month/fiscal-month.js.map +1 -0
  224. package/dist-server/service/fiscal-month/index.d.ts +6 -0
  225. package/dist-server/service/fiscal-month/index.js +10 -0
  226. package/dist-server/service/fiscal-month/index.js.map +1 -0
  227. package/dist-server/service/fiscal-quarter/fiscal-quarter-mutation.d.ts +10 -0
  228. package/dist-server/service/fiscal-quarter/fiscal-quarter-mutation.js +134 -0
  229. package/dist-server/service/fiscal-quarter/fiscal-quarter-mutation.js.map +1 -0
  230. package/dist-server/service/fiscal-quarter/fiscal-quarter-query.d.ts +11 -0
  231. package/dist-server/service/fiscal-quarter/fiscal-quarter-query.js +85 -0
  232. package/dist-server/service/fiscal-quarter/fiscal-quarter-query.js.map +1 -0
  233. package/dist-server/service/fiscal-quarter/fiscal-quarter-type.d.ts +24 -0
  234. package/dist-server/service/fiscal-quarter/fiscal-quarter-type.js +90 -0
  235. package/dist-server/service/fiscal-quarter/fiscal-quarter-type.js.map +1 -0
  236. package/dist-server/service/fiscal-quarter/fiscal-quarter.d.ts +21 -0
  237. package/dist-server/service/fiscal-quarter/fiscal-quarter.js +94 -0
  238. package/dist-server/service/fiscal-quarter/fiscal-quarter.js.map +1 -0
  239. package/dist-server/service/fiscal-quarter/index.d.ts +6 -0
  240. package/dist-server/service/fiscal-quarter/index.js +10 -0
  241. package/dist-server/service/fiscal-quarter/index.js.map +1 -0
  242. package/dist-server/service/fiscal-year/fiscal-year-mutation.d.ts +10 -0
  243. package/dist-server/service/fiscal-year/fiscal-year-mutation.js +134 -0
  244. package/dist-server/service/fiscal-year/fiscal-year-mutation.js.map +1 -0
  245. package/dist-server/service/fiscal-year/fiscal-year-query.d.ts +11 -0
  246. package/dist-server/service/fiscal-year/fiscal-year-query.js +81 -0
  247. package/dist-server/service/fiscal-year/fiscal-year-query.js.map +1 -0
  248. package/dist-server/service/fiscal-year/fiscal-year-type.d.ts +22 -0
  249. package/dist-server/service/fiscal-year/fiscal-year-type.js +82 -0
  250. package/dist-server/service/fiscal-year/fiscal-year-type.js.map +1 -0
  251. package/dist-server/service/fiscal-year/fiscal-year.d.ts +20 -0
  252. package/dist-server/service/fiscal-year/fiscal-year.js +89 -0
  253. package/dist-server/service/fiscal-year/fiscal-year.js.map +1 -0
  254. package/dist-server/service/fiscal-year/index.d.ts +6 -0
  255. package/dist-server/service/fiscal-year/index.js +10 -0
  256. package/dist-server/service/fiscal-year/index.js.map +1 -0
  257. package/dist-server/service/income-statement/income-statement-history.d.ts +9 -5
  258. package/dist-server/service/income-statement/income-statement-history.js +38 -23
  259. package/dist-server/service/income-statement/income-statement-history.js.map +1 -1
  260. package/dist-server/service/income-statement/income-statement-line-item.d.ts +19 -0
  261. package/dist-server/service/income-statement/income-statement-line-item.js +96 -0
  262. package/dist-server/service/income-statement/income-statement-line-item.js.map +1 -0
  263. package/dist-server/service/income-statement/income-statement-mutation.js +12 -8
  264. package/dist-server/service/income-statement/income-statement-mutation.js.map +1 -1
  265. package/dist-server/service/income-statement/income-statement-query.js +3 -1
  266. package/dist-server/service/income-statement/income-statement-query.js.map +1 -1
  267. package/dist-server/service/income-statement/income-statement.d.ts +2 -0
  268. package/dist-server/service/income-statement/income-statement.js +46 -26
  269. package/dist-server/service/income-statement/income-statement.js.map +1 -1
  270. package/dist-server/service/income-statement/index.d.ts +2 -2
  271. package/dist-server/service/income-statement/index.js +2 -1
  272. package/dist-server/service/income-statement/index.js.map +1 -1
  273. package/dist-server/service/index.d.ts +7 -2
  274. package/dist-server/service/index.js +29 -3
  275. package/dist-server/service/index.js.map +1 -1
  276. package/dist-server/service/payment/event-subscriber.d.ts +7 -0
  277. package/dist-server/service/payment/event-subscriber.js +21 -0
  278. package/dist-server/service/payment/event-subscriber.js.map +1 -0
  279. package/dist-server/service/payment/index.d.ts +8 -0
  280. package/dist-server/service/payment/index.js +12 -0
  281. package/dist-server/service/payment/index.js.map +1 -0
  282. package/dist-server/service/payment/payment-history.d.ts +30 -0
  283. package/dist-server/service/payment/payment-history.js +143 -0
  284. package/dist-server/service/payment/payment-history.js.map +1 -0
  285. package/dist-server/service/payment/payment-mutation.d.ts +10 -0
  286. package/dist-server/service/payment/payment-mutation.js +134 -0
  287. package/dist-server/service/payment/payment-mutation.js.map +1 -0
  288. package/dist-server/service/payment/payment-query.d.ts +11 -0
  289. package/dist-server/service/payment/payment-query.js +81 -0
  290. package/dist-server/service/payment/payment-query.js.map +1 -0
  291. package/dist-server/service/payment/payment-type.d.ts +24 -0
  292. package/dist-server/service/payment/payment-type.js +90 -0
  293. package/dist-server/service/payment/payment-type.js.map +1 -0
  294. package/dist-server/service/payment/payment.d.ts +30 -0
  295. package/dist-server/service/payment/payment.js +146 -0
  296. package/dist-server/service/payment/payment.js.map +1 -0
  297. package/dist-server/service/transaction/transaction-history.d.ts +15 -3
  298. package/dist-server/service/transaction/transaction-history.js +64 -8
  299. package/dist-server/service/transaction/transaction-history.js.map +1 -1
  300. package/dist-server/service/transaction/transaction-mutation.js +13 -9
  301. package/dist-server/service/transaction/transaction-mutation.js.map +1 -1
  302. package/dist-server/service/transaction/transaction-query.js +3 -1
  303. package/dist-server/service/transaction/transaction-query.js.map +1 -1
  304. package/dist-server/service/transaction/transaction.d.ts +31 -6
  305. package/dist-server/service/transaction/transaction.js +138 -27
  306. package/dist-server/service/transaction/transaction.js.map +1 -1
  307. package/dist-server/tsconfig.tsbuildinfo +1 -1
  308. package/helps/accounting/accounting-document.md +160 -0
  309. package/helps/accounting/contract.md +160 -0
  310. package/helps/accounting/fiscal-month.md +160 -0
  311. package/helps/accounting/fiscal-quarter.md +160 -0
  312. package/helps/accounting/fiscal-year.md +160 -0
  313. package/helps/accounting/payment.md +160 -0
  314. package/package.json +9 -8
  315. package/server/activities/activity-book.ts +31 -19
  316. package/server/controllers/index.ts +1 -0
  317. package/server/controllers/summary-statements.ts +166 -0
  318. package/server/index.ts +2 -0
  319. package/server/migrations/1725200507196-seed-fiscal-entities.ts +106 -0
  320. package/server/migrations/1725201467183-seed-accounts.ts +339 -0
  321. package/server/service/account/account-history.ts +15 -7
  322. package/server/service/account/account-mutation.ts +13 -10
  323. package/server/service/account/account-query.ts +3 -1
  324. package/server/service/account/account.ts +16 -5
  325. package/server/service/accounting-category/accounting-category-history.ts +123 -0
  326. package/server/service/accounting-category/accounting-category-mutation.ts +12 -9
  327. package/server/service/accounting-category/accounting-category-query.ts +24 -1
  328. package/server/service/accounting-category/accounting-category-type.ts +6 -0
  329. package/server/service/accounting-category/accounting-category.ts +23 -3
  330. package/server/service/accounting-category/event-subscriber.ts +20 -0
  331. package/server/service/accounting-category/index.ts +4 -2
  332. package/server/service/accounting-document/accounting-document-history.ts +117 -0
  333. package/server/service/accounting-document/accounting-document-mutation.ts +137 -0
  334. package/server/service/accounting-document/accounting-document-query.ts +48 -0
  335. package/server/service/accounting-document/accounting-document-type.ts +52 -0
  336. package/server/service/accounting-document/accounting-document.ts +93 -0
  337. package/server/service/accounting-document/event-subscriber.ts +17 -0
  338. package/server/service/accounting-document/index.ts +9 -0
  339. package/server/service/common-type.ts +12 -0
  340. package/server/service/financial-statement/financial-statement-history.ts +28 -19
  341. package/server/service/financial-statement/financial-statement-line-item.ts +82 -0
  342. package/server/service/financial-statement/financial-statement-mutation.ts +12 -9
  343. package/server/service/financial-statement/financial-statement-query.ts +3 -1
  344. package/server/service/financial-statement/financial-statement.ts +52 -36
  345. package/server/service/financial-statement/index.ts +2 -1
  346. package/server/service/fiscal-month/fiscal-month-mutation.ts +145 -0
  347. package/server/service/fiscal-month/fiscal-month-query.ts +58 -0
  348. package/server/service/fiscal-month/fiscal-month-type.ts +66 -0
  349. package/server/service/fiscal-month/fiscal-month.ts +84 -0
  350. package/server/service/fiscal-month/index.ts +7 -0
  351. package/server/service/fiscal-quarter/fiscal-quarter-mutation.ts +148 -0
  352. package/server/service/fiscal-quarter/fiscal-quarter-query.ts +60 -0
  353. package/server/service/fiscal-quarter/fiscal-quarter-type.ts +60 -0
  354. package/server/service/fiscal-quarter/fiscal-quarter.ts +80 -0
  355. package/server/service/fiscal-quarter/index.ts +7 -0
  356. package/server/service/fiscal-year/fiscal-year-mutation.ts +145 -0
  357. package/server/service/fiscal-year/fiscal-year-query.ts +53 -0
  358. package/server/service/fiscal-year/fiscal-year-type.ts +54 -0
  359. package/server/service/fiscal-year/fiscal-year.ts +76 -0
  360. package/server/service/fiscal-year/index.ts +7 -0
  361. package/server/service/income-statement/income-statement-history.ts +31 -18
  362. package/server/service/income-statement/income-statement-line-item.ts +84 -0
  363. package/server/service/income-statement/income-statement-mutation.ts +12 -10
  364. package/server/service/income-statement/income-statement-query.ts +3 -4
  365. package/server/service/income-statement/income-statement.ts +54 -39
  366. package/server/service/income-statement/index.ts +2 -1
  367. package/server/service/index.ts +49 -3
  368. package/server/service/payment/event-subscriber.ts +17 -0
  369. package/server/service/payment/index.ts +9 -0
  370. package/server/service/payment/payment-history.ts +126 -0
  371. package/server/service/payment/payment-mutation.ts +139 -0
  372. package/server/service/payment/payment-query.ts +50 -0
  373. package/server/service/payment/payment-type.ts +64 -0
  374. package/server/service/payment/payment.ts +123 -0
  375. package/server/service/transaction/transaction-history.ts +54 -10
  376. package/server/service/transaction/transaction-mutation.ts +13 -10
  377. package/server/service/transaction/transaction-query.ts +3 -4
  378. package/server/service/transaction/transaction.ts +144 -29
  379. package/things-factory.config.js +3 -2
  380. package/translations/en.json +9 -1
  381. package/translations/ja.json +9 -1
  382. package/translations/ko.json +9 -1
  383. package/translations/ms.json +9 -1
  384. package/translations/zh.json +9 -1
  385. package/client/pages/main.ts +0 -24
  386. package/dist-client/pages/ledger/ledger-importer.js.map +0 -1
  387. package/dist-client/pages/ledger/ledger-list-page.js.map +0 -1
  388. package/dist-client/pages/main.d.ts +0 -1
  389. package/dist-client/pages/main.js +0 -27
  390. package/dist-client/pages/main.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
+ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
+ import { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'
4
+
5
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
6
+
7
+ import { AccountingDocument } from './accounting-document'
8
+
9
+ @InputType()
10
+ export class NewAccountingDocument {
11
+ @Field(type => ObjectRef)
12
+ transaction: ObjectRef
13
+
14
+ @Field({ nullable: false })
15
+ documentType: string // 문서의 유형 (예: 계약서, 인보이스 등)
16
+
17
+ @Field({ nullable: false })
18
+ documentUrl: string // 문서의 URL 또는 파일 경로
19
+
20
+ @Field({ nullable: true })
21
+ description?: string // 문서에 대한 설명
22
+ }
23
+
24
+ @InputType()
25
+ export class AccountingDocumentPatch {
26
+ @Field(type => ID, { nullable: true })
27
+ id?: string
28
+
29
+ @Field(type => ObjectRef)
30
+ transaction: ObjectRef
31
+
32
+ @Field({ nullable: false })
33
+ documentType: string // 문서의 유형 (예: 계약서, 인보이스 등)
34
+
35
+ @Field({ nullable: false })
36
+ documentUrl: string // 문서의 URL 또는 파일 경로
37
+
38
+ @Field({ nullable: true })
39
+ description?: string // 문서에 대한 설명
40
+
41
+ @Field({ nullable: true })
42
+ cuFlag?: string
43
+ }
44
+
45
+ @ObjectType()
46
+ export class AccountingDocumentList {
47
+ @Field(type => [AccountingDocument])
48
+ items: AccountingDocument[]
49
+
50
+ @Field(type => Int)
51
+ total: number
52
+ }
@@ -0,0 +1,93 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ DeleteDateColumn,
5
+ Entity,
6
+ Index,
7
+ Column,
8
+ ManyToOne,
9
+ PrimaryGeneratedColumn,
10
+ RelationId,
11
+ VersionColumn
12
+ } from 'typeorm'
13
+ import { ObjectType, Field, ID } from 'type-graphql'
14
+
15
+ import { Domain } from '@things-factory/shell'
16
+ import { User } from '@things-factory/auth-base'
17
+ import { Transaction } from '../transaction/transaction'
18
+
19
+ @ObjectType({ description: 'Entity for AccountingDocument' })
20
+ @Entity()
21
+ @Index(
22
+ 'ix_accounting_document_0',
23
+ (accountingDocument: AccountingDocument) => [
24
+ accountingDocument.domain,
25
+ accountingDocument.transaction,
26
+ accountingDocument.createdAt
27
+ ],
28
+ {
29
+ unique: false,
30
+ where: '"deleted_at" IS NULL'
31
+ }
32
+ )
33
+ export class AccountingDocument {
34
+ @PrimaryGeneratedColumn('uuid')
35
+ @Field(type => ID)
36
+ readonly id: string
37
+
38
+ @VersionColumn()
39
+ @Field({ nullable: true })
40
+ version?: number = 1
41
+
42
+ @ManyToOne(type => Domain)
43
+ @Field({ nullable: true })
44
+ domain?: Domain
45
+
46
+ @RelationId((accountingDocument: AccountingDocument) => accountingDocument.domain)
47
+ domainId?: string
48
+
49
+ @ManyToOne(type => Transaction, transaction => transaction.documents)
50
+ @Field(type => Transaction)
51
+ transaction: Transaction
52
+
53
+ @RelationId((accountingDocument: AccountingDocument) => accountingDocument.transaction)
54
+ transactionId: string
55
+
56
+ @Column()
57
+ @Field({ nullable: false })
58
+ documentType: string // 문서의 유형 (예: 계약서, 인보이스 등)
59
+
60
+ @Column()
61
+ @Field({ nullable: false })
62
+ documentUrl: string // 문서의 URL 또는 파일 경로
63
+
64
+ @Column({ nullable: true })
65
+ @Field({ nullable: true })
66
+ description?: string // 문서에 대한 설명
67
+
68
+ @CreateDateColumn()
69
+ @Field({ nullable: true })
70
+ createdAt?: Date
71
+
72
+ @UpdateDateColumn()
73
+ @Field({ nullable: true })
74
+ updatedAt?: Date
75
+
76
+ @DeleteDateColumn()
77
+ @Field({ nullable: true })
78
+ deletedAt?: Date
79
+
80
+ @ManyToOne(type => User, { nullable: true })
81
+ @Field(type => User, { nullable: true })
82
+ creator?: User
83
+
84
+ @RelationId((accountingDocument: AccountingDocument) => accountingDocument.creator)
85
+ creatorId?: string
86
+
87
+ @ManyToOne(type => User, { nullable: true })
88
+ @Field(type => User, { nullable: true })
89
+ updater?: User
90
+
91
+ @RelationId((accountingDocument: AccountingDocument) => accountingDocument.updater)
92
+ updaterId?: string
93
+ }
@@ -0,0 +1,17 @@
1
+ import { EventSubscriber } from 'typeorm'
2
+
3
+ import { HistoryEntitySubscriber } from '@operato/typeorm-history'
4
+
5
+ import { AccountingDocument } from './accounting-document'
6
+ import { AccountingDocumentHistory } from './accounting-document-history'
7
+
8
+ @EventSubscriber()
9
+ export class AccountingDocumentHistoryEntitySubscriber extends HistoryEntitySubscriber<AccountingDocument, AccountingDocumentHistory> {
10
+ public get entity() {
11
+ return AccountingDocument
12
+ }
13
+
14
+ public get historyEntity() {
15
+ return AccountingDocumentHistory
16
+ }
17
+ }
@@ -0,0 +1,9 @@
1
+ import { AccountingDocument } from './accounting-document'
2
+ import { AccountingDocumentHistory } from './accounting-document-history'
3
+ import { AccountingDocumentHistoryEntitySubscriber } from './event-subscriber'
4
+ import { AccountingDocumentQuery } from './accounting-document-query'
5
+ import { AccountingDocumentMutation } from './accounting-document-mutation'
6
+
7
+ export const entities = [AccountingDocument, AccountingDocumentHistory]
8
+ export const resolvers = [AccountingDocumentQuery, AccountingDocumentMutation]
9
+ export const subscribers = [AccountingDocumentHistoryEntitySubscriber]
@@ -0,0 +1,12 @@
1
+ import { registerEnumType } from 'type-graphql'
2
+
3
+ export enum FiscalStatus {
4
+ OPEN = 'OPEN',
5
+ CLOSED = 'CLOSED',
6
+ FINALIZED = 'FINALIZED'
7
+ }
8
+
9
+ registerEnumType(FiscalStatus, {
10
+ name: 'FiscalStatus',
11
+ description: 'The status of a fiscal period (OPEN, CLOSED, FINALIZED)'
12
+ })
@@ -1,5 +1,5 @@
1
1
  import { Field, ID, ObjectType } from 'type-graphql'
2
- import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
2
+ import { Column, Entity, Index, ManyToOne, OneToMany, PrimaryGeneratedColumn, RelationId } from 'typeorm'
3
3
 
4
4
  import {
5
5
  HistoryActionColumn,
@@ -11,7 +11,8 @@ import { Role, User } from '@things-factory/auth-base'
11
11
  import { config } from '@things-factory/env'
12
12
  import { Domain } from '@things-factory/shell'
13
13
 
14
- import { FinancialStatement, FinancialStatementStatus } from './financial-statement'
14
+ import { FinancialStatement } from './financial-statement'
15
+ import { FinancialStatementLineItem } from './financial-statement-line-item'
15
16
 
16
17
  const ORMCONFIG = config.get('ormconfig', {})
17
18
  const DATABASE_TYPE = ORMCONFIG.type
@@ -45,31 +46,39 @@ export class FinancialStatementHistory implements HistoryEntityInterface<Financi
45
46
  version?: number = 1
46
47
 
47
48
  @ManyToOne(type => Domain)
48
- @Field(type => Domain)
49
+ @Field({ nullable: true })
49
50
  domain?: Domain
50
51
 
51
- @RelationId((financialStatement: FinancialStatement) => financialStatement.domain)
52
+ @RelationId((financialStatementHistory: FinancialStatementHistory) => financialStatementHistory.domain)
52
53
  domainId?: string
53
54
 
54
- @Column()
55
- @Field()
56
- name: string
55
+ @Column({ nullable: true })
56
+ @Field({ nullable: true, description: 'Fiscal year of the financial statement' })
57
+ year?: number // 회계 연도
57
58
 
58
59
  @Column({ nullable: true })
59
- @Field({ nullable: true })
60
- description?: string
60
+ @Field({ nullable: true, description: 'Fiscal quarter of the financial statement' })
61
+ quarter?: number // 회계 분기
61
62
 
62
63
  @Column({ nullable: true })
63
- @Field({ nullable: true })
64
- active?: boolean
64
+ @Field({ nullable: true, description: 'Fiscal month of the financial statement' })
65
+ month?: number // 회계 월
65
66
 
66
67
  @Column({ nullable: true })
67
- @Field({ nullable: true })
68
- state?: FinancialStatementStatus
68
+ @Field({ nullable: true, description: 'Total assets recorded in the financial statement' })
69
+ asset?: number // 재무제표에 기록된 총자산
69
70
 
70
71
  @Column({ nullable: true })
71
- @Field({ nullable: true })
72
- params?: string
72
+ @Field({ nullable: true, description: 'Total liabilities recorded in the financial statement' })
73
+ liability?: number // 재무제표에 기록된 총부채
74
+
75
+ @Column({ nullable: true })
76
+ @Field({ nullable: true, description: 'Total equity recorded in the financial statement' })
77
+ equity?: number // 재무제표에 기록된 총자본
78
+
79
+ @OneToMany(type => FinancialStatementLineItem, lineItem => lineItem.statement)
80
+ @Field(type => [FinancialStatementLineItem], { nullable: true })
81
+ lineItems?: FinancialStatementLineItem[] // 계정별 브레이크다운
73
82
 
74
83
  @Column({ nullable: true })
75
84
  @Field({ nullable: true })
@@ -84,17 +93,17 @@ export class FinancialStatementHistory implements HistoryEntityInterface<Financi
84
93
  deletedAt?: Date
85
94
 
86
95
  @ManyToOne(type => User, { nullable: true })
87
- @Field(type => User, { nullable: true })
96
+ @Field({ nullable: true })
88
97
  creator?: User
89
98
 
90
- @RelationId((financialStatement: FinancialStatement) => financialStatement.creator)
99
+ @RelationId((financialStatementHistory: FinancialStatementHistory) => financialStatementHistory.creator)
91
100
  creatorId?: string
92
101
 
93
102
  @ManyToOne(type => User, { nullable: true })
94
- @Field(type => User, { nullable: true })
103
+ @Field({ nullable: true })
95
104
  updater?: User
96
105
 
97
- @RelationId((financialStatement: FinancialStatement) => financialStatement.updater)
106
+ @RelationId((financialStatementHistory: FinancialStatementHistory) => financialStatementHistory.updater)
98
107
  updaterId?: string
99
108
 
100
109
  @HistoryOriginalIdColumn()
@@ -0,0 +1,82 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ DeleteDateColumn,
5
+ Entity,
6
+ Index,
7
+ Column,
8
+ RelationId,
9
+ ManyToOne,
10
+ PrimaryGeneratedColumn,
11
+ VersionColumn
12
+ } from 'typeorm'
13
+ import { ObjectType, Field, ID } from 'type-graphql'
14
+
15
+ import { Domain } from '@things-factory/shell'
16
+ import { User } from '@things-factory/auth-base'
17
+ import { Account } from '../account/account'
18
+ import { FinancialStatement } from './financial-statement'
19
+
20
+ @ObjectType({ description: 'Line item for a financial statement, representing the breakdown of financial accounts' })
21
+ @Entity()
22
+ @Index(
23
+ 'ix_financial_statement_line_item_0',
24
+ (lineItem: FinancialStatementLineItem) => [lineItem.statement, lineItem.account],
25
+ {
26
+ unique: false,
27
+ where: '"deleted_at" IS NULL'
28
+ }
29
+ )
30
+ export class FinancialStatementLineItem {
31
+ @PrimaryGeneratedColumn('uuid')
32
+ @Field(type => ID)
33
+ readonly id: string // 고유 식별자 (UUID)
34
+
35
+ @ManyToOne(type => FinancialStatement, statement => statement.lineItems)
36
+ @Field(type => FinancialStatement, { description: 'The financial statement this line item is associated with' })
37
+ statement: FinancialStatement // 연결된 재무제표
38
+
39
+ @RelationId((lineItem: FinancialStatementLineItem) => lineItem.statement)
40
+ statementId: string // 재무제표의 ID
41
+
42
+ @ManyToOne(type => Account)
43
+ @Field(type => Account, { description: 'The financial account associated with this line item' })
44
+ account: Account // 라인 아이템과 연결된 계정
45
+
46
+ @RelationId((lineItem: FinancialStatementLineItem) => lineItem.account)
47
+ accountId: string // 계정의 ID
48
+
49
+ @Column({ nullable: false })
50
+ @Field({ nullable: false, description: 'The monetary amount related to the financial account for this line item' })
51
+ amount: number // 계정에 대한 금액
52
+
53
+ @Column({ nullable: true })
54
+ @Field({ nullable: true, description: 'Optional description or notes for this line item' })
55
+ description?: string // 라인 아이템에 대한 선택적 설명 또는 메모
56
+
57
+ @CreateDateColumn()
58
+ @Field({ nullable: true, description: 'The date and time when this line item was created' })
59
+ createdAt?: Date // 라인 아이템이 생성된 날짜 및 시간
60
+
61
+ @UpdateDateColumn()
62
+ @Field({ nullable: true, description: 'The date and time when this line item was last updated' })
63
+ updatedAt?: Date // 라인 아이템이 마지막으로 업데이트된 날짜 및 시간
64
+
65
+ @DeleteDateColumn()
66
+ @Field({ nullable: true, description: 'The date and time when this line item was deleted' })
67
+ deletedAt?: Date // 라인 아이템이 삭제된 날짜 및 시간
68
+
69
+ @ManyToOne(type => User, { nullable: true })
70
+ @Field(type => User, { nullable: true, description: 'The user who created this line item' })
71
+ creator?: User // 라인 아이템을 생성한 사용자
72
+
73
+ @RelationId((lineItem: FinancialStatementLineItem) => lineItem.creator)
74
+ creatorId?: string // 생성자의 ID
75
+
76
+ @ManyToOne(type => User, { nullable: true })
77
+ @Field(type => User, { nullable: true, description: 'The user who last updated this line item' })
78
+ updater?: User // 라인 아이템을 마지막으로 업데이트한 사용자
79
+
80
+ @RelationId((lineItem: FinancialStatementLineItem) => lineItem.updater)
81
+ updaterId?: string // 업데이트한 사용자의 ID
82
+ }
@@ -1,7 +1,7 @@
1
1
  import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
2
  import { In } from 'typeorm'
3
3
 
4
- import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
4
+ import { getRepository } from '@things-factory/shell'
5
5
 
6
6
  import { FinancialStatement } from './financial-statement'
7
7
  import { NewFinancialStatement, FinancialStatementPatch } from './financial-statement-type'
@@ -9,6 +9,7 @@ import { NewFinancialStatement, FinancialStatementPatch } from './financial-stat
9
9
  @Resolver(FinancialStatement)
10
10
  export class FinancialStatementMutation {
11
11
  @Directive('@transaction')
12
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
12
13
  @Mutation(returns => FinancialStatement, { description: 'To create new FinancialStatement' })
13
14
  async createFinancialStatement(
14
15
  @Arg('financialStatement') financialStatement: NewFinancialStatement,
@@ -16,7 +17,7 @@ export class FinancialStatementMutation {
16
17
  ): Promise<FinancialStatement> {
17
18
  const { domain, user, tx } = context.state
18
19
 
19
- const result = await tx.getRepository(FinancialStatement).save({
20
+ const result = await getRepository(FinancialStatement, tx).save({
20
21
  ...financialStatement,
21
22
  domain,
22
23
  creator: user,
@@ -27,6 +28,7 @@ export class FinancialStatementMutation {
27
28
  }
28
29
 
29
30
  @Directive('@transaction')
31
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
30
32
  @Mutation(returns => FinancialStatement, { description: 'To modify FinancialStatement information' })
31
33
  async updateFinancialStatement(
32
34
  @Arg('id') id: string,
@@ -35,7 +37,7 @@ export class FinancialStatementMutation {
35
37
  ): Promise<FinancialStatement> {
36
38
  const { domain, user, tx } = context.state
37
39
 
38
- const repository = tx.getRepository(FinancialStatement)
40
+ const repository = getRepository(FinancialStatement, tx)
39
41
  const financialStatement = await repository.findOne({
40
42
  where: { domain: { id: domain.id }, id }
41
43
  })
@@ -50,6 +52,7 @@ export class FinancialStatementMutation {
50
52
  }
51
53
 
52
54
  @Directive('@transaction')
55
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
53
56
  @Mutation(returns => [FinancialStatement], { description: "To modify multiple FinancialStatements' information" })
54
57
  async updateMultipleFinancialStatement(
55
58
  @Arg('patches', type => [FinancialStatementPatch]) patches: FinancialStatementPatch[],
@@ -60,7 +63,7 @@ export class FinancialStatementMutation {
60
63
  let results = []
61
64
  const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
62
65
  const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
63
- const financialStatementRepo = tx.getRepository(FinancialStatement)
66
+ const financialStatementRepo = getRepository(FinancialStatement, tx)
64
67
 
65
68
  if (_createRecords.length > 0) {
66
69
  for (let i = 0; i < _createRecords.length; i++) {
@@ -96,17 +99,18 @@ export class FinancialStatementMutation {
96
99
  }
97
100
 
98
101
  @Directive('@transaction')
102
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
99
103
  @Mutation(returns => Boolean, { description: 'To delete FinancialStatement' })
100
104
  async deleteFinancialStatement(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
101
105
  const { domain, tx } = context.state
102
106
 
103
- await tx.getRepository(FinancialStatement).delete({ domain: { id: domain.id }, id })
104
- await deleteAttachmentsByRef(null, { refBys: [id] }, context)
107
+ await getRepository(FinancialStatement, tx).delete({ domain: { id: domain.id }, id })
105
108
 
106
109
  return true
107
110
  }
108
111
 
109
112
  @Directive('@transaction')
113
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
110
114
  @Mutation(returns => Boolean, { description: 'To delete multiple FinancialStatements' })
111
115
  async deleteFinancialStatements(
112
116
  @Arg('ids', type => [String]) ids: string[],
@@ -114,17 +118,16 @@ export class FinancialStatementMutation {
114
118
  ): Promise<boolean> {
115
119
  const { domain, tx } = context.state
116
120
 
117
- await tx.getRepository(FinancialStatement).delete({
121
+ await getRepository(FinancialStatement, tx).delete({
118
122
  domain: { id: domain.id },
119
123
  id: In(ids)
120
124
  })
121
125
 
122
- await deleteAttachmentsByRef(null, { refBys: ids }, context)
123
-
124
126
  return true
125
127
  }
126
128
 
127
129
  @Directive('@transaction')
130
+ @Directive('@privilege(category: "accounting", privilege: "mutation")')
128
131
  @Mutation(returns => Boolean, { description: 'To import multiple FinancialStatements' })
129
132
  async importFinancialStatements(
130
133
  @Arg('financialStatements', type => [FinancialStatementPatch]) financialStatements: FinancialStatementPatch[],
@@ -6,6 +6,7 @@ import { FinancialStatementList } from './financial-statement-type'
6
6
 
7
7
  @Resolver(FinancialStatement)
8
8
  export class FinancialStatementQuery {
9
+ @Directive('@privilege(category: "accounting", privilege: "query")')
9
10
  @Query(returns => FinancialStatement!, { nullable: true, description: 'To fetch a FinancialStatement' })
10
11
  async financialStatement(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<FinancialStatement> {
11
12
  const { domain } = context.state
@@ -15,9 +16,10 @@ export class FinancialStatementQuery {
15
16
  })
16
17
  }
17
18
 
19
+ @Directive('@privilege(category: "accounting", privilege: "query")')
18
20
  @Query(returns => FinancialStatementList, { description: 'To fetch multiple FinancialStatements' })
19
21
  async financialStatements(
20
- @Args(type => ListParam) params: ListParam,
22
+ @Args() params: ListParam,
21
23
  @Ctx() context: ResolverContext
22
24
  ): Promise<FinancialStatementList> {
23
25
  const { domain } = context.state
@@ -7,14 +7,17 @@ import {
7
7
  Column,
8
8
  RelationId,
9
9
  ManyToOne,
10
+ OneToMany,
10
11
  PrimaryGeneratedColumn,
11
12
  VersionColumn
12
13
  } from 'typeorm'
13
- import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
14
+ import { ObjectType, Field, ID, registerEnumType } from 'type-graphql'
14
15
 
15
16
  import { Domain } from '@things-factory/shell'
16
17
  import { User } from '@things-factory/auth-base'
17
18
 
19
+ import { FinancialStatementLineItem } from './financial-statement-line-item'
20
+
18
21
  export enum FinancialStatementStatus {
19
22
  STATUS_A = 'STATUS_A',
20
23
  STATUS_B = 'STATUS_B'
@@ -22,79 +25,92 @@ export enum FinancialStatementStatus {
22
25
 
23
26
  registerEnumType(FinancialStatementStatus, {
24
27
  name: 'FinancialStatementStatus',
25
- description: 'state enumeration of a financialStatement'
28
+ description: 'State enumeration of a financial statement' // 재무제표 상태 열거형
26
29
  })
27
30
 
31
+ // 재무제표 (Financial Statement)
28
32
  @Entity()
29
33
  @Index(
30
34
  'ix_financial_statement_0',
31
- (financialStatement: FinancialStatement) => [financialStatement.domain, financialStatement.deletedAt],
32
- { unique: true }
35
+ (financialStatement: FinancialStatement) => [
36
+ financialStatement.domain,
37
+ financialStatement.year,
38
+ financialStatement.quarter,
39
+ financialStatement.month
40
+ ],
41
+ {
42
+ unique: true,
43
+ where: '"deleted_at" IS NULL' // 삭제되지 않은 경우에만 유니크
44
+ }
33
45
  )
34
- @ObjectType({ description: 'Entity for FinancialStatement' })
46
+ @ObjectType({ description: 'Entity for FinancialStatement, representing the financial position of an entity' }) // 엔티티 설명 추가
35
47
  export class FinancialStatement {
36
48
  @PrimaryGeneratedColumn('uuid')
37
- @Field(type => ID)
38
- readonly id: string
49
+ @Field(type => ID, { description: 'Unique identifier for the financial statement' })
50
+ readonly id: string // 고유 식별자 (UUID)
39
51
 
40
52
  @VersionColumn()
41
- @Field({ nullable: true })
42
- version?: number = 1
53
+ @Field({ nullable: true, description: 'Version number for optimistic locking' })
54
+ version?: number = 1 // 낙관적 잠금을 위한 버전 관리 필드
43
55
 
44
56
  @ManyToOne(type => Domain)
45
- @Field(type => Domain)
46
- domain?: Domain
57
+ @Field({ nullable: true, description: 'The domain to which this financial statement belongs' })
58
+ domain?: Domain // 이 재무제표가 속한 도메인
47
59
 
48
60
  @RelationId((financialStatement: FinancialStatement) => financialStatement.domain)
49
- domainId?: string
61
+ domainId?: string // 도메인의 ID
50
62
 
51
63
  @Column({ nullable: true })
52
- @Field({ nullable: true, description: 'fiscal year' })
53
- year?: number
64
+ @Field({ nullable: true, description: 'Fiscal year of the financial statement' })
65
+ year?: number // 회계 연도
54
66
 
55
67
  @Column({ nullable: true })
56
- @Field({ nullable: true, description: 'fiscal quarter' })
57
- quarter?: number
68
+ @Field({ nullable: true, description: 'Fiscal quarter of the financial statement' })
69
+ quarter?: number // 회계 분기
58
70
 
59
71
  @Column({ nullable: true })
60
- @Field({ nullable: true })
61
- month?: number
72
+ @Field({ nullable: true, description: 'Fiscal month of the financial statement' })
73
+ month?: number // 회계 월
62
74
 
63
75
  @Column({ nullable: true })
64
- @Field({ nullable: true })
65
- asset?: number
76
+ @Field({ nullable: true, description: 'Total assets recorded in the financial statement' })
77
+ asset?: number // 재무제표에 기록된 총자산
66
78
 
67
79
  @Column({ nullable: true })
68
- @Field({ nullable: true })
69
- liability?: number
80
+ @Field({ nullable: true, description: 'Total liabilities recorded in the financial statement' })
81
+ liability?: number // 재무제표에 기록된 총부채
70
82
 
71
83
  @Column({ nullable: true })
72
- @Field({ nullable: true })
73
- equity?: number
84
+ @Field({ nullable: true, description: 'Total equity recorded in the financial statement' })
85
+ equity?: number // 재무제표에 기록된 총자본
86
+
87
+ @OneToMany(type => FinancialStatementLineItem, lineItem => lineItem.statement)
88
+ @Field(type => [FinancialStatementLineItem], { nullable: true })
89
+ lineItems?: FinancialStatementLineItem[] // 계정별 브레이크다운
74
90
 
75
91
  @CreateDateColumn()
76
- @Field({ nullable: true })
77
- createdAt?: Date
92
+ @Field({ nullable: true, description: 'The date and time when the financial statement was created' })
93
+ createdAt?: Date // 재무제표가 생성된 날짜 및 시간
78
94
 
79
95
  @UpdateDateColumn()
80
- @Field({ nullable: true })
81
- updatedAt?: Date
96
+ @Field({ nullable: true, description: 'The date and time when the financial statement was last updated' })
97
+ updatedAt?: Date // 재무제표가 마지막으로 업데이트된 날짜 및 시간
82
98
 
83
99
  @DeleteDateColumn()
84
- @Field({ nullable: true })
85
- deletedAt?: Date
100
+ @Field({ nullable: true, description: 'The date and time when the financial statement was deleted' })
101
+ deletedAt?: Date // 재무제표가 삭제된 날짜 및 시간
86
102
 
87
103
  @ManyToOne(type => User, { nullable: true })
88
- @Field(type => User, { nullable: true })
89
- creator?: User
104
+ @Field(type => User, { nullable: true, description: 'The user who created the financial statement' })
105
+ creator?: User // 재무제표를 생성한 사용자
90
106
 
91
107
  @RelationId((financialStatement: FinancialStatement) => financialStatement.creator)
92
- creatorId?: string
108
+ creatorId?: string // 재무제표를 생성한 사용자의 ID
93
109
 
94
110
  @ManyToOne(type => User, { nullable: true })
95
- @Field(type => User, { nullable: true })
96
- updater?: User
111
+ @Field(type => User, { nullable: true, description: 'The user who last updated the financial statement' })
112
+ updater?: User // 재무제표를 마지막으로 업데이트한 사용자
97
113
 
98
114
  @RelationId((financialStatement: FinancialStatement) => financialStatement.updater)
99
- updaterId?: string
115
+ updaterId?: string // 재무제표를 업데이트한 사용자의 ID
100
116
  }
@@ -1,9 +1,10 @@
1
1
  import { FinancialStatement } from './financial-statement'
2
+ import { FinancialStatementLineItem } from './financial-statement-line-item'
2
3
  import { FinancialStatementHistory } from './financial-statement-history'
3
4
  import { FinancialStatementQuery } from './financial-statement-query'
4
5
  import { FinancialStatementMutation } from './financial-statement-mutation'
5
6
  import { FinancialStatementHistoryEntitySubscriber } from './event-subscriber'
6
7
 
7
- export const entities = [FinancialStatement, FinancialStatementHistory]
8
+ export const entities = [FinancialStatement, FinancialStatementLineItem, FinancialStatementHistory]
8
9
  export const resolvers = [FinancialStatementQuery, FinancialStatementMutation]
9
10
  export const subscribers = [FinancialStatementHistoryEntitySubscriber]