@dainamite/billing 0.19.0 → 0.21.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 (614) hide show
  1. package/CHANGELOG.md +172 -0
  2. package/README.md +14 -0
  3. package/dist/modules/billing/acl.js +13 -1
  4. package/dist/modules/billing/acl.js.map +2 -2
  5. package/dist/modules/billing/api/accounts/[id]/summary/route.js +52 -0
  6. package/dist/modules/billing/api/accounts/[id]/summary/route.js.map +7 -0
  7. package/dist/modules/billing/api/accounts/route.js +46 -4
  8. package/dist/modules/billing/api/accounts/route.js.map +2 -2
  9. package/dist/modules/billing/api/export/account/[id]/route.js +16 -12
  10. package/dist/modules/billing/api/export/account/[id]/route.js.map +2 -2
  11. package/dist/modules/billing/api/invoices/[id]/memos/route.js +54 -0
  12. package/dist/modules/billing/api/invoices/[id]/memos/route.js.map +7 -0
  13. package/dist/modules/billing/api/invoices/[id]/pdf/route.js +69 -0
  14. package/dist/modules/billing/api/invoices/[id]/pdf/route.js.map +7 -0
  15. package/dist/modules/billing/api/invoices/[id]/route.js +44 -24
  16. package/dist/modules/billing/api/invoices/[id]/route.js.map +2 -2
  17. package/dist/modules/billing/api/invoices/[id]/send/route.js +107 -0
  18. package/dist/modules/billing/api/invoices/[id]/send/route.js.map +7 -0
  19. package/dist/modules/billing/api/invoices/add-line/route.js +3 -3
  20. package/dist/modules/billing/api/invoices/add-line/route.js.map +2 -2
  21. package/dist/modules/billing/api/invoices/delete-draft/route.js +33 -0
  22. package/dist/modules/billing/api/invoices/delete-draft/route.js.map +7 -0
  23. package/dist/modules/billing/api/invoices/edit-line/route.js +3 -3
  24. package/dist/modules/billing/api/invoices/edit-line/route.js.map +2 -2
  25. package/dist/modules/billing/api/invoices/post/route.js +2 -2
  26. package/dist/modules/billing/api/invoices/post/route.js.map +2 -2
  27. package/dist/modules/billing/api/invoices/remove-line/route.js +3 -3
  28. package/dist/modules/billing/api/invoices/remove-line/route.js.map +2 -2
  29. package/dist/modules/billing/api/invoices/route.js +45 -46
  30. package/dist/modules/billing/api/invoices/route.js.map +2 -2
  31. package/dist/modules/billing/api/items/bulk/route.js +1 -1
  32. package/dist/modules/billing/api/items/bulk/route.js.map +2 -2
  33. package/dist/modules/billing/api/items/change-price/route.js +44 -0
  34. package/dist/modules/billing/api/items/change-price/route.js.map +7 -0
  35. package/dist/modules/billing/api/items/route.js +19 -7
  36. package/dist/modules/billing/api/items/route.js.map +2 -2
  37. package/dist/modules/billing/api/payment-imports/[id]/route.js +49 -0
  38. package/dist/modules/billing/api/payment-imports/[id]/route.js.map +7 -0
  39. package/dist/modules/billing/api/payment-imports/route.js +57 -0
  40. package/dist/modules/billing/api/payment-imports/route.js.map +7 -0
  41. package/dist/modules/billing/api/payments/[id]/route.js +60 -0
  42. package/dist/modules/billing/api/payments/[id]/route.js.map +7 -0
  43. package/dist/modules/billing/api/payments/allocate/route.js +35 -0
  44. package/dist/modules/billing/api/payments/allocate/route.js.map +7 -0
  45. package/dist/modules/billing/api/payments/assign/route.js +36 -0
  46. package/dist/modules/billing/api/payments/assign/route.js.map +7 -0
  47. package/dist/modules/billing/api/payments/convert-to-topup/route.js +35 -0
  48. package/dist/modules/billing/api/payments/convert-to-topup/route.js.map +7 -0
  49. package/dist/modules/billing/api/payments/ignore/route.js +35 -0
  50. package/dist/modules/billing/api/payments/ignore/route.js.map +7 -0
  51. package/dist/modules/billing/api/payments/import/route.js +63 -0
  52. package/dist/modules/billing/api/payments/import/route.js.map +7 -0
  53. package/dist/modules/billing/api/payments/restore/route.js +35 -0
  54. package/dist/modules/billing/api/payments/restore/route.js.map +7 -0
  55. package/dist/modules/billing/api/payments/route.js +114 -0
  56. package/dist/modules/billing/api/payments/route.js.map +7 -0
  57. package/dist/modules/billing/api/payments/unallocate/route.js +35 -0
  58. package/dist/modules/billing/api/payments/unallocate/route.js.map +7 -0
  59. package/dist/modules/billing/api/payments/unassign/route.js +35 -0
  60. package/dist/modules/billing/api/payments/unassign/route.js.map +7 -0
  61. package/dist/modules/billing/api/run-outcomes/route.js +44 -7
  62. package/dist/modules/billing/api/run-outcomes/route.js.map +2 -2
  63. package/dist/modules/billing/api/runs/[id]/post-drafts/route.js +61 -0
  64. package/dist/modules/billing/api/runs/[id]/post-drafts/route.js.map +7 -0
  65. package/dist/modules/billing/api/runs/[id]/route.js +53 -0
  66. package/dist/modules/billing/api/runs/[id]/route.js.map +7 -0
  67. package/dist/modules/billing/api/runs/retry-failed/route.js +3 -3
  68. package/dist/modules/billing/api/runs/retry-failed/route.js.map +2 -2
  69. package/dist/modules/billing/api/runs/route.js +11 -5
  70. package/dist/modules/billing/api/runs/route.js.map +2 -2
  71. package/dist/modules/billing/api/settings/number-preview/route.js +42 -0
  72. package/dist/modules/billing/api/settings/number-preview/route.js.map +7 -0
  73. package/dist/modules/billing/api/settings/route.js +92 -0
  74. package/dist/modules/billing/api/settings/route.js.map +7 -0
  75. package/dist/modules/billing/api/statements/route.js +3 -0
  76. package/dist/modules/billing/api/statements/route.js.map +2 -2
  77. package/dist/modules/billing/api/test-invoices/wipe/route.js +2 -2
  78. package/dist/modules/billing/api/test-invoices/wipe/route.js.map +2 -2
  79. package/dist/modules/billing/backend/billing/accounts/[id]/page.js +121 -232
  80. package/dist/modules/billing/backend/billing/accounts/[id]/page.js.map +2 -2
  81. package/dist/modules/billing/backend/billing/accounts/create/page.js +6 -0
  82. package/dist/modules/billing/backend/billing/accounts/create/page.js.map +2 -2
  83. package/dist/modules/billing/backend/billing/accounts/page.js +63 -4
  84. package/dist/modules/billing/backend/billing/accounts/page.js.map +2 -2
  85. package/dist/modules/billing/backend/billing/invoices/[id]/page.js +297 -65
  86. package/dist/modules/billing/backend/billing/invoices/[id]/page.js.map +3 -3
  87. package/dist/modules/billing/backend/billing/invoices/page.js +6 -172
  88. package/dist/modules/billing/backend/billing/invoices/page.js.map +2 -2
  89. package/dist/modules/billing/backend/billing/items/[id]/page.js +51 -7
  90. package/dist/modules/billing/backend/billing/items/[id]/page.js.map +2 -2
  91. package/dist/modules/billing/backend/billing/items/create/page.js +9 -6
  92. package/dist/modules/billing/backend/billing/items/create/page.js.map +2 -2
  93. package/dist/modules/billing/backend/billing/items/page.js +8 -2
  94. package/dist/modules/billing/backend/billing/items/page.js.map +2 -2
  95. package/dist/modules/billing/backend/billing/payments/[id]/page.js +297 -0
  96. package/dist/modules/billing/backend/billing/payments/[id]/page.js.map +7 -0
  97. package/dist/modules/billing/backend/billing/payments/[id]/page.meta.js +21 -0
  98. package/dist/modules/billing/backend/billing/payments/[id]/page.meta.js.map +7 -0
  99. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.js +74 -0
  100. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.js.map +7 -0
  101. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.meta.js +21 -0
  102. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.meta.js.map +7 -0
  103. package/dist/modules/billing/backend/billing/payments/page.js +58 -0
  104. package/dist/modules/billing/backend/billing/payments/page.js.map +7 -0
  105. package/dist/modules/billing/backend/billing/payments/page.meta.js +18 -0
  106. package/dist/modules/billing/backend/billing/payments/page.meta.js.map +7 -0
  107. package/dist/modules/billing/backend/billing/runs/[id]/page.js +49 -14
  108. package/dist/modules/billing/backend/billing/runs/[id]/page.js.map +2 -2
  109. package/dist/modules/billing/backend/billing/runs/page.js +58 -7
  110. package/dist/modules/billing/backend/billing/runs/page.js.map +2 -2
  111. package/dist/modules/billing/backend/billing/statements/[id]/page.js +61 -6
  112. package/dist/modules/billing/backend/billing/statements/[id]/page.js.map +2 -2
  113. package/dist/modules/billing/backend/billing/statements/page.js +1 -1
  114. package/dist/modules/billing/backend/billing/statements/page.js.map +2 -2
  115. package/dist/modules/billing/backend/billing/topups/page.js +1 -1
  116. package/dist/modules/billing/backend/billing/topups/page.js.map +2 -2
  117. package/dist/modules/billing/backend/billing/transactions/page.js +1 -1
  118. package/dist/modules/billing/backend/billing/transactions/page.js.map +2 -2
  119. package/dist/modules/billing/backend/billing/usage/create/page.js +3 -2
  120. package/dist/modules/billing/backend/billing/usage/create/page.js.map +2 -2
  121. package/dist/modules/billing/backend/config/billing/page.js +472 -0
  122. package/dist/modules/billing/backend/config/billing/page.js.map +7 -0
  123. package/dist/modules/billing/backend/config/billing/page.meta.js +19 -0
  124. package/dist/modules/billing/backend/config/billing/page.meta.js.map +7 -0
  125. package/dist/modules/billing/ce.js.map +2 -2
  126. package/dist/modules/billing/cli.js +22 -1
  127. package/dist/modules/billing/cli.js.map +2 -2
  128. package/dist/modules/billing/commands/accounts.js +6 -0
  129. package/dist/modules/billing/commands/accounts.js.map +2 -2
  130. package/dist/modules/billing/commands/index.js +3 -0
  131. package/dist/modules/billing/commands/index.js.map +2 -2
  132. package/dist/modules/billing/commands/invoices.js +272 -170
  133. package/dist/modules/billing/commands/invoices.js.map +2 -2
  134. package/dist/modules/billing/commands/items.js +108 -0
  135. package/dist/modules/billing/commands/items.js.map +2 -2
  136. package/dist/modules/billing/commands/memos.js +179 -0
  137. package/dist/modules/billing/commands/memos.js.map +7 -0
  138. package/dist/modules/billing/commands/payments.js +379 -0
  139. package/dist/modules/billing/commands/payments.js.map +7 -0
  140. package/dist/modules/billing/commands/runs.js +154 -7
  141. package/dist/modules/billing/commands/runs.js.map +2 -2
  142. package/dist/modules/billing/commands/settings.js +59 -0
  143. package/dist/modules/billing/commands/settings.js.map +7 -0
  144. package/dist/modules/billing/commands/topups.js +9 -2
  145. package/dist/modules/billing/commands/topups.js.map +2 -2
  146. package/dist/modules/billing/commands/transactions.js +2 -2
  147. package/dist/modules/billing/commands/transactions.js.map +2 -2
  148. package/dist/modules/billing/components/AccountForm.js +149 -42
  149. package/dist/modules/billing/components/AccountForm.js.map +2 -2
  150. package/dist/modules/billing/components/AccountInvoicesSection.js +64 -0
  151. package/dist/modules/billing/components/AccountInvoicesSection.js.map +7 -0
  152. package/dist/modules/billing/components/AccountPaymentsSection.js +43 -0
  153. package/dist/modules/billing/components/AccountPaymentsSection.js.map +7 -0
  154. package/dist/modules/billing/components/AccountPicker.js +56 -0
  155. package/dist/modules/billing/components/AccountPicker.js.map +7 -0
  156. package/dist/modules/billing/components/AllocatePaymentDialog.js +134 -0
  157. package/dist/modules/billing/components/AllocatePaymentDialog.js.map +7 -0
  158. package/dist/modules/billing/components/BillingDataTable.js +21 -0
  159. package/dist/modules/billing/components/BillingDataTable.js.map +7 -0
  160. package/dist/modules/billing/components/BillingSettingsLink.js +19 -0
  161. package/dist/modules/billing/components/BillingSettingsLink.js.map +7 -0
  162. package/dist/modules/billing/components/ChangeItemPriceDialog.js +158 -0
  163. package/dist/modules/billing/components/ChangeItemPriceDialog.js.map +7 -0
  164. package/dist/modules/billing/components/CreateMemoDialog.js +200 -0
  165. package/dist/modules/billing/components/CreateMemoDialog.js.map +7 -0
  166. package/dist/modules/billing/components/CustomerLabel.js +33 -0
  167. package/dist/modules/billing/components/CustomerLabel.js.map +7 -0
  168. package/dist/modules/billing/components/InvoicesTable.js +270 -0
  169. package/dist/modules/billing/components/InvoicesTable.js.map +7 -0
  170. package/dist/modules/billing/components/ItemForm.js +176 -44
  171. package/dist/modules/billing/components/ItemForm.js.map +2 -2
  172. package/dist/modules/billing/components/ItemPriceField.js +46 -0
  173. package/dist/modules/billing/components/ItemPriceField.js.map +7 -0
  174. package/dist/modules/billing/components/LineFormDialog.js +25 -2
  175. package/dist/modules/billing/components/LineFormDialog.js.map +2 -2
  176. package/dist/modules/billing/components/ManualPaymentDialog.js +122 -0
  177. package/dist/modules/billing/components/ManualPaymentDialog.js.map +7 -0
  178. package/dist/modules/billing/components/MoneyInput.js +14 -0
  179. package/dist/modules/billing/components/MoneyInput.js.map +7 -0
  180. package/dist/modules/billing/components/PaymentUploadDialog.js +115 -0
  181. package/dist/modules/billing/components/PaymentUploadDialog.js.map +7 -0
  182. package/dist/modules/billing/components/PaymentsTable.js +171 -0
  183. package/dist/modules/billing/components/PaymentsTable.js.map +7 -0
  184. package/dist/modules/billing/components/PostRunDraftsButton.js +105 -0
  185. package/dist/modules/billing/components/PostRunDraftsButton.js.map +7 -0
  186. package/dist/modules/billing/components/PrepaidPanel.js +14 -4
  187. package/dist/modules/billing/components/PrepaidPanel.js.map +2 -2
  188. package/dist/modules/billing/components/RunCyclesSection.js +209 -0
  189. package/dist/modules/billing/components/RunCyclesSection.js.map +7 -0
  190. package/dist/modules/billing/components/TestRunActions.js +127 -0
  191. package/dist/modules/billing/components/TestRunActions.js.map +7 -0
  192. package/dist/modules/billing/components/account/AccountItemsTab.js +157 -0
  193. package/dist/modules/billing/components/account/AccountItemsTab.js.map +7 -0
  194. package/dist/modules/billing/components/account/AccountRunBillingDialog.js +122 -0
  195. package/dist/modules/billing/components/account/AccountRunBillingDialog.js.map +7 -0
  196. package/dist/modules/billing/components/account/AccountRunsTab.js +152 -0
  197. package/dist/modules/billing/components/account/AccountRunsTab.js.map +7 -0
  198. package/dist/modules/billing/components/account/AccountStatementsTab.js +98 -0
  199. package/dist/modules/billing/components/account/AccountStatementsTab.js.map +7 -0
  200. package/dist/modules/billing/components/account/AccountSummaryCards.js +125 -0
  201. package/dist/modules/billing/components/account/AccountSummaryCards.js.map +7 -0
  202. package/dist/modules/billing/components/account/AccountUsageTab.js +91 -0
  203. package/dist/modules/billing/components/account/AccountUsageTab.js.map +7 -0
  204. package/dist/modules/billing/components/account/AccountView.js +73 -0
  205. package/dist/modules/billing/components/account/AccountView.js.map +7 -0
  206. package/dist/modules/billing/components/account/accountRow.js +39 -0
  207. package/dist/modules/billing/components/account/accountRow.js.map +7 -0
  208. package/dist/modules/billing/components/customerNames.js +42 -0
  209. package/dist/modules/billing/components/customerNames.js.map +7 -0
  210. package/dist/modules/billing/data/entities.js +615 -59
  211. package/dist/modules/billing/data/entities.js.map +2 -2
  212. package/dist/modules/billing/data/entityIds.js +10 -1
  213. package/dist/modules/billing/data/entityIds.js.map +2 -2
  214. package/dist/modules/billing/data/validators.js +269 -15
  215. package/dist/modules/billing/data/validators.js.map +2 -2
  216. package/dist/modules/billing/events.js +70 -0
  217. package/dist/modules/billing/events.js.map +2 -2
  218. package/dist/modules/billing/i18n/en.json +457 -21
  219. package/dist/modules/billing/i18n/pl.json +457 -21
  220. package/dist/modules/billing/index.js +6 -2
  221. package/dist/modules/billing/index.js.map +2 -2
  222. package/dist/modules/billing/lib/accountFinancials.js +58 -0
  223. package/dist/modules/billing/lib/accountFinancials.js.map +7 -0
  224. package/dist/modules/billing/lib/accountLock.js +14 -0
  225. package/dist/modules/billing/lib/accountLock.js.map +7 -0
  226. package/dist/modules/billing/lib/accountStatus.js +9 -7
  227. package/dist/modules/billing/lib/accountStatus.js.map +2 -2
  228. package/dist/modules/billing/lib/accountSummary.js +106 -0
  229. package/dist/modules/billing/lib/accountSummary.js.map +7 -0
  230. package/dist/modules/billing/lib/allocation.js +356 -0
  231. package/dist/modules/billing/lib/allocation.js.map +7 -0
  232. package/dist/modules/billing/lib/allocationEvents.js +22 -0
  233. package/dist/modules/billing/lib/allocationEvents.js.map +7 -0
  234. package/dist/modules/billing/lib/billPeriod.js +15 -1
  235. package/dist/modules/billing/lib/billPeriod.js.map +2 -2
  236. package/dist/modules/billing/lib/billRunEngine.js +241 -106
  237. package/dist/modules/billing/lib/billRunEngine.js.map +2 -2
  238. package/dist/modules/billing/lib/billRunLabel.js.map +1 -1
  239. package/dist/modules/billing/lib/billingSettings.js +116 -0
  240. package/dist/modules/billing/lib/billingSettings.js.map +7 -0
  241. package/dist/modules/billing/lib/commandRoute.js +81 -0
  242. package/dist/modules/billing/lib/commandRoute.js.map +7 -0
  243. package/dist/modules/billing/lib/customerLookup.js +97 -0
  244. package/dist/modules/billing/lib/customerLookup.js.map +7 -0
  245. package/dist/modules/billing/lib/dateOnly.js +13 -0
  246. package/dist/modules/billing/lib/dateOnly.js.map +7 -0
  247. package/dist/modules/billing/lib/documentParties.js +16 -0
  248. package/dist/modules/billing/lib/documentParties.js.map +7 -0
  249. package/dist/modules/billing/lib/documentTypes.js +27 -0
  250. package/dist/modules/billing/lib/documentTypes.js.map +7 -0
  251. package/dist/modules/billing/lib/dueDate.js +18 -0
  252. package/dist/modules/billing/lib/dueDate.js.map +7 -0
  253. package/dist/modules/billing/lib/iban.js +29 -0
  254. package/dist/modules/billing/lib/iban.js.map +7 -0
  255. package/dist/modules/billing/lib/invoiceDelivery.js +131 -0
  256. package/dist/modules/billing/lib/invoiceDelivery.js.map +7 -0
  257. package/dist/modules/billing/lib/invoiceLanguages.js +16 -0
  258. package/dist/modules/billing/lib/invoiceLanguages.js.map +7 -0
  259. package/dist/modules/billing/lib/invoiceWriter.js +107 -99
  260. package/dist/modules/billing/lib/invoiceWriter.js.map +2 -2
  261. package/dist/modules/billing/lib/itemBillingState.js +27 -0
  262. package/dist/modules/billing/lib/itemBillingState.js.map +7 -0
  263. package/dist/modules/billing/lib/itemPriceChange.js +18 -0
  264. package/dist/modules/billing/lib/itemPriceChange.js.map +7 -0
  265. package/dist/modules/billing/lib/itemSelector.js.map +2 -2
  266. package/dist/modules/billing/lib/lineAmounts.js +32 -0
  267. package/dist/modules/billing/lib/lineAmounts.js.map +7 -0
  268. package/dist/modules/billing/lib/memoGuards.js +25 -0
  269. package/dist/modules/billing/lib/memoGuards.js.map +7 -0
  270. package/dist/modules/billing/lib/navigation.js +48 -0
  271. package/dist/modules/billing/lib/navigation.js.map +7 -0
  272. package/dist/modules/billing/lib/numbering.js +120 -0
  273. package/dist/modules/billing/lib/numbering.js.map +7 -0
  274. package/dist/modules/billing/lib/overdue.js +36 -0
  275. package/dist/modules/billing/lib/overdue.js.map +7 -0
  276. package/dist/modules/billing/lib/paymentCsv.js +125 -0
  277. package/dist/modules/billing/lib/paymentCsv.js.map +7 -0
  278. package/dist/modules/billing/lib/paymentGateway.js +15 -0
  279. package/dist/modules/billing/lib/paymentGateway.js.map +7 -0
  280. package/dist/modules/billing/lib/paymentImport.js +164 -0
  281. package/dist/modules/billing/lib/paymentImport.js.map +7 -0
  282. package/dist/modules/billing/lib/paymentMatcher.js +36 -0
  283. package/dist/modules/billing/lib/paymentMatcher.js.map +7 -0
  284. package/dist/modules/billing/lib/pdf/attachmentStore.js +46 -0
  285. package/dist/modules/billing/lib/pdf/attachmentStore.js.map +7 -0
  286. package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js +7 -0
  287. package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js.map +7 -0
  288. package/dist/modules/billing/lib/pdf/invoiceModel.js +194 -0
  289. package/dist/modules/billing/lib/pdf/invoiceModel.js.map +7 -0
  290. package/dist/modules/billing/lib/pdf/invoicePdf.js +165 -0
  291. package/dist/modules/billing/lib/pdf/invoicePdf.js.map +7 -0
  292. package/dist/modules/billing/lib/pdf/invoiceTemplate.js +274 -0
  293. package/dist/modules/billing/lib/pdf/invoiceTemplate.js.map +7 -0
  294. package/dist/modules/billing/lib/prepaidConfig.js +17 -25
  295. package/dist/modules/billing/lib/prepaidConfig.js.map +2 -2
  296. package/dist/modules/billing/lib/prepaidConsume.js +26 -7
  297. package/dist/modules/billing/lib/prepaidConsume.js.map +2 -2
  298. package/dist/modules/billing/lib/prepaidPeriodClose.js +277 -158
  299. package/dist/modules/billing/lib/prepaidPeriodClose.js.map +2 -2
  300. package/dist/modules/billing/lib/prepaidTaxPoint.js +37 -0
  301. package/dist/modules/billing/lib/prepaidTaxPoint.js.map +7 -0
  302. package/dist/modules/billing/lib/seeds/demo.js +51 -3
  303. package/dist/modules/billing/lib/seeds/demo.js.map +2 -2
  304. package/dist/modules/billing/lib/seeds/paymentsSample.js +93 -0
  305. package/dist/modules/billing/lib/seeds/paymentsSample.js.map +7 -0
  306. package/dist/modules/billing/lib/seeds/sellerSettings.js +41 -0
  307. package/dist/modules/billing/lib/seeds/sellerSettings.js.map +7 -0
  308. package/dist/modules/billing/lib/servicePeriods.js +121 -0
  309. package/dist/modules/billing/lib/servicePeriods.js.map +7 -0
  310. package/dist/modules/billing/lib/tenantLock.js.map +1 -1
  311. package/dist/modules/billing/lib/testRunCleanup.js +24 -0
  312. package/dist/modules/billing/lib/testRunCleanup.js.map +7 -0
  313. package/dist/modules/billing/lib/topupCapture.js +2 -2
  314. package/dist/modules/billing/lib/topupCapture.js.map +2 -2
  315. package/dist/modules/billing/lib/topupReceipt.js +58 -79
  316. package/dist/modules/billing/lib/topupReceipt.js.map +2 -2
  317. package/dist/modules/billing/lib/usageRater.js.map +1 -1
  318. package/dist/modules/billing/lib/usageRunner.js +14 -6
  319. package/dist/modules/billing/lib/usageRunner.js.map +2 -2
  320. package/dist/modules/billing/lib/vat.js +39 -0
  321. package/dist/modules/billing/lib/vat.js.map +7 -0
  322. package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js +15 -0
  323. package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js.map +7 -0
  324. package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js +25 -0
  325. package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js.map +7 -0
  326. package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js +115 -0
  327. package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js.map +7 -0
  328. package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js +47 -0
  329. package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js.map +7 -0
  330. package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js +89 -0
  331. package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js.map +7 -0
  332. package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js +17 -0
  333. package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js.map +7 -0
  334. package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js +27 -0
  335. package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js.map +7 -0
  336. package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js +29 -0
  337. package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js.map +7 -0
  338. package/dist/modules/billing/setup.js +7 -184
  339. package/dist/modules/billing/setup.js.map +2 -2
  340. package/dist/modules/billing/subscribers/credit-memo-auto-send.js +16 -0
  341. package/dist/modules/billing/subscribers/credit-memo-auto-send.js.map +7 -0
  342. package/dist/modules/billing/subscribers/debit-memo-apply-credit.js +16 -0
  343. package/dist/modules/billing/subscribers/debit-memo-apply-credit.js.map +7 -0
  344. package/dist/modules/billing/subscribers/debit-memo-auto-send.js +16 -0
  345. package/dist/modules/billing/subscribers/debit-memo-auto-send.js.map +7 -0
  346. package/dist/modules/billing/subscribers/invoice-apply-credit.js +34 -0
  347. package/dist/modules/billing/subscribers/invoice-apply-credit.js.map +7 -0
  348. package/dist/modules/billing/subscribers/invoice-auto-send.js +30 -0
  349. package/dist/modules/billing/subscribers/invoice-auto-send.js.map +7 -0
  350. package/dist/modules/billing/subscribers/payment-captured-to-paid.js +69 -33
  351. package/dist/modules/billing/subscribers/payment-captured-to-paid.js.map +2 -2
  352. package/dist/modules/billing/subscribers/prepaid-topup-captured.js +4 -6
  353. package/dist/modules/billing/subscribers/prepaid-topup-captured.js.map +2 -2
  354. package/dist/modules/billing/workers/reap-stale-bill-runs.js +2 -2
  355. package/dist/modules/billing/workers/reap-stale-bill-runs.js.map +2 -2
  356. package/generated/entities/billing_account/index.ts +26 -0
  357. package/generated/entities/billing_account_balance/index.ts +13 -0
  358. package/generated/entities/billing_account_transaction/index.ts +21 -0
  359. package/generated/entities/billing_account_usage/index.ts +18 -0
  360. package/generated/entities/billing_allocation/index.ts +18 -0
  361. package/generated/entities/billing_document_sequence/index.ts +11 -0
  362. package/generated/entities/billing_draft_invoice_edit/index.ts +14 -0
  363. package/generated/entities/billing_invoice/index.ts +38 -0
  364. package/generated/entities/billing_invoice_line/index.ts +24 -0
  365. package/generated/entities/billing_item/index.ts +26 -0
  366. package/generated/entities/billing_payment/index.ts +25 -0
  367. package/generated/entities/billing_payment_import/index.ts +14 -0
  368. package/generated/entities/billing_run/index.ts +20 -0
  369. package/generated/entities/billing_run_outcome/index.ts +18 -0
  370. package/generated/entities/billing_settings/index.ts +26 -0
  371. package/generated/entities/billing_statement/index.ts +22 -0
  372. package/generated/entities/billing_topup/index.ts +20 -0
  373. package/generated/entities.ids.generated.ts +35 -0
  374. package/package.json +15 -10
  375. package/src/modules/billing/__integration__/TC-BILL-004.spec.ts +170 -0
  376. package/src/modules/billing/__integration__/TC-BILL-005.spec.ts +134 -0
  377. package/src/modules/billing/__integration__/TC-BILL-006.spec.ts +101 -0
  378. package/src/modules/billing/__integration__/TC-BILL-007.spec.ts +140 -0
  379. package/src/modules/billing/__integration__/TC-BILL-008.spec.ts +108 -0
  380. package/src/modules/billing/__integration__/TC-BILL-009.spec.ts +113 -0
  381. package/src/modules/billing/__integration__/TC-BILL-010.spec.ts +118 -0
  382. package/src/modules/billing/__integration__/TC-BILL-011.spec.ts +142 -0
  383. package/src/modules/billing/__integration__/TC-BILL-012.spec.ts +115 -0
  384. package/src/modules/billing/__integration__/TC-BILL-013.spec.ts +118 -0
  385. package/src/modules/billing/__integration__/sellerSettings.ts +24 -0
  386. package/src/modules/billing/__tests__/commands/invoices.test.ts +437 -355
  387. package/src/modules/billing/__tests__/commands/itemsBulk.test.ts +33 -0
  388. package/src/modules/billing/__tests__/commands/memos.test.ts +205 -0
  389. package/src/modules/billing/__tests__/commands/payments.test.ts +241 -0
  390. package/src/modules/billing/__tests__/commands/runsDelete.test.ts +146 -0
  391. package/src/modules/billing/__tests__/commands/runsPostDrafts.test.ts +106 -0
  392. package/src/modules/billing/__tests__/commands/topups.test.ts +11 -0
  393. package/src/modules/billing/__tests__/entityRegistry.test.ts +326 -0
  394. package/src/modules/billing/__tests__/events.test.ts +142 -0
  395. package/src/modules/billing/__tests__/helpers/prepaidMockEm.ts +28 -11
  396. package/src/modules/billing/__tests__/lib/accountFinancials.test.ts +53 -0
  397. package/src/modules/billing/__tests__/lib/accountSummary.test.ts +97 -0
  398. package/src/modules/billing/__tests__/lib/allocation.test.ts +319 -0
  399. package/src/modules/billing/__tests__/lib/billRunEngine.test.ts +231 -20
  400. package/src/modules/billing/__tests__/lib/billingSettings.test.ts +109 -0
  401. package/src/modules/billing/__tests__/lib/customerLookup.test.ts +156 -0
  402. package/src/modules/billing/__tests__/lib/dueDate.test.ts +35 -0
  403. package/src/modules/billing/__tests__/lib/iban.test.ts +38 -0
  404. package/src/modules/billing/__tests__/lib/invoiceDelivery.test.ts +189 -0
  405. package/src/modules/billing/__tests__/lib/invoiceWriter.test.ts +212 -10
  406. package/src/modules/billing/__tests__/lib/itemBillingState.test.ts +42 -0
  407. package/src/modules/billing/__tests__/lib/itemPriceChange.test.ts +165 -0
  408. package/src/modules/billing/__tests__/lib/lineAmounts.test.ts +86 -0
  409. package/src/modules/billing/__tests__/lib/navigation.test.ts +71 -0
  410. package/src/modules/billing/__tests__/lib/numbering.test.ts +91 -0
  411. package/src/modules/billing/__tests__/lib/overdue.test.ts +36 -0
  412. package/src/modules/billing/__tests__/lib/paymentCsv.test.ts +148 -0
  413. package/src/modules/billing/__tests__/lib/paymentImport.test.ts +113 -0
  414. package/src/modules/billing/__tests__/lib/paymentsSample.test.ts +73 -0
  415. package/src/modules/billing/__tests__/lib/pdf/invoicePdf.test.ts +199 -0
  416. package/src/modules/billing/__tests__/lib/pdf/invoicePdfService.test.ts +147 -0
  417. package/src/modules/billing/__tests__/lib/prepaidPeriodClose.test.ts +374 -98
  418. package/src/modules/billing/__tests__/lib/prepaidTaxPoint.test.ts +118 -0
  419. package/src/modules/billing/__tests__/lib/seedsDemo.test.ts +53 -2
  420. package/src/modules/billing/__tests__/lib/sellerSettings.test.ts +28 -0
  421. package/src/modules/billing/__tests__/lib/servicePeriods.test.ts +190 -0
  422. package/src/modules/billing/__tests__/lib/topupCapture.test.ts +6 -28
  423. package/src/modules/billing/__tests__/lib/topupReceipt.test.ts +21 -52
  424. package/src/modules/billing/__tests__/lib/vat.test.ts +51 -0
  425. package/src/modules/billing/__tests__/package-isolation.test.ts +22 -8
  426. package/src/modules/billing/__tests__/setup.test.ts +13 -4
  427. package/src/modules/billing/__tests__/validators.test.ts +193 -3
  428. package/src/modules/billing/acl.ts +12 -0
  429. package/src/modules/billing/api/accounts/[id]/summary/route.ts +62 -0
  430. package/src/modules/billing/api/accounts/route.ts +58 -4
  431. package/src/modules/billing/api/export/account/[id]/route.ts +20 -18
  432. package/src/modules/billing/api/invoices/[id]/memos/route.ts +63 -0
  433. package/src/modules/billing/api/invoices/[id]/pdf/route.ts +79 -0
  434. package/src/modules/billing/api/invoices/[id]/route.ts +57 -70
  435. package/src/modules/billing/api/invoices/[id]/send/route.ts +127 -0
  436. package/src/modules/billing/api/invoices/add-line/route.ts +3 -3
  437. package/src/modules/billing/api/invoices/delete-draft/route.ts +33 -0
  438. package/src/modules/billing/api/invoices/edit-line/route.ts +4 -4
  439. package/src/modules/billing/api/invoices/post/route.ts +7 -6
  440. package/src/modules/billing/api/invoices/remove-line/route.ts +3 -3
  441. package/src/modules/billing/api/invoices/route.ts +81 -86
  442. package/src/modules/billing/api/items/bulk/route.ts +2 -1
  443. package/src/modules/billing/api/items/change-price/route.ts +54 -0
  444. package/src/modules/billing/api/items/route.ts +23 -7
  445. package/src/modules/billing/api/payment-imports/[id]/route.ts +49 -0
  446. package/src/modules/billing/api/payment-imports/route.ts +57 -0
  447. package/src/modules/billing/api/payments/[id]/route.ts +63 -0
  448. package/src/modules/billing/api/payments/allocate/route.ts +35 -0
  449. package/src/modules/billing/api/payments/assign/route.ts +36 -0
  450. package/src/modules/billing/api/payments/convert-to-topup/route.ts +35 -0
  451. package/src/modules/billing/api/payments/ignore/route.ts +35 -0
  452. package/src/modules/billing/api/payments/import/route.ts +72 -0
  453. package/src/modules/billing/api/payments/restore/route.ts +35 -0
  454. package/src/modules/billing/api/payments/route.ts +147 -0
  455. package/src/modules/billing/api/payments/unallocate/route.ts +35 -0
  456. package/src/modules/billing/api/payments/unassign/route.ts +35 -0
  457. package/src/modules/billing/api/run-outcomes/route.ts +50 -7
  458. package/src/modules/billing/api/runs/[id]/post-drafts/route.ts +71 -0
  459. package/src/modules/billing/api/runs/[id]/route.ts +59 -0
  460. package/src/modules/billing/api/runs/retry-failed/route.ts +4 -3
  461. package/src/modules/billing/api/runs/route.ts +17 -9
  462. package/src/modules/billing/api/settings/number-preview/route.ts +46 -0
  463. package/src/modules/billing/api/settings/route.ts +116 -0
  464. package/src/modules/billing/api/statements/route.ts +5 -0
  465. package/src/modules/billing/api/test-invoices/wipe/route.ts +2 -2
  466. package/src/modules/billing/backend/billing/accounts/[id]/page.tsx +151 -372
  467. package/src/modules/billing/backend/billing/accounts/create/page.tsx +6 -0
  468. package/src/modules/billing/backend/billing/accounts/page.tsx +71 -5
  469. package/src/modules/billing/backend/billing/invoices/[id]/page.tsx +445 -96
  470. package/src/modules/billing/backend/billing/invoices/page.tsx +8 -227
  471. package/src/modules/billing/backend/billing/items/[id]/page.tsx +75 -6
  472. package/src/modules/billing/backend/billing/items/create/page.tsx +13 -8
  473. package/src/modules/billing/backend/billing/items/page.tsx +19 -3
  474. package/src/modules/billing/backend/billing/payments/[id]/page.meta.ts +19 -0
  475. package/src/modules/billing/backend/billing/payments/[id]/page.tsx +415 -0
  476. package/src/modules/billing/backend/billing/payments/imports/[id]/page.meta.ts +19 -0
  477. package/src/modules/billing/backend/billing/payments/imports/[id]/page.tsx +106 -0
  478. package/src/modules/billing/backend/billing/payments/page.meta.ts +16 -0
  479. package/src/modules/billing/backend/billing/payments/page.tsx +56 -0
  480. package/src/modules/billing/backend/billing/runs/[id]/page.tsx +50 -19
  481. package/src/modules/billing/backend/billing/runs/page.tsx +60 -9
  482. package/src/modules/billing/backend/billing/statements/[id]/page.tsx +87 -6
  483. package/src/modules/billing/backend/billing/statements/page.tsx +2 -2
  484. package/src/modules/billing/backend/billing/topups/page.tsx +2 -2
  485. package/src/modules/billing/backend/billing/transactions/page.tsx +2 -2
  486. package/src/modules/billing/backend/billing/usage/create/page.tsx +3 -2
  487. package/src/modules/billing/backend/config/billing/page.meta.ts +21 -0
  488. package/src/modules/billing/backend/config/billing/page.tsx +549 -0
  489. package/src/modules/billing/ce.ts +8 -7
  490. package/src/modules/billing/cli.ts +31 -1
  491. package/src/modules/billing/commands/accounts.ts +6 -0
  492. package/src/modules/billing/commands/index.ts +3 -0
  493. package/src/modules/billing/commands/invoices.ts +371 -238
  494. package/src/modules/billing/commands/items.ts +143 -0
  495. package/src/modules/billing/commands/memos.ts +218 -0
  496. package/src/modules/billing/commands/payments.ts +428 -0
  497. package/src/modules/billing/commands/runs.ts +208 -6
  498. package/src/modules/billing/commands/settings.ts +77 -0
  499. package/src/modules/billing/commands/topups.ts +12 -3
  500. package/src/modules/billing/commands/transactions.ts +2 -2
  501. package/src/modules/billing/components/AccountForm.tsx +199 -53
  502. package/src/modules/billing/components/AccountInvoicesSection.tsx +75 -0
  503. package/src/modules/billing/components/AccountPaymentsSection.tsx +42 -0
  504. package/src/modules/billing/components/AccountPicker.tsx +70 -0
  505. package/src/modules/billing/components/AllocatePaymentDialog.tsx +167 -0
  506. package/src/modules/billing/components/BillingDataTable.tsx +34 -0
  507. package/src/modules/billing/components/BillingSettingsLink.tsx +25 -0
  508. package/src/modules/billing/components/ChangeItemPriceDialog.tsx +180 -0
  509. package/src/modules/billing/components/CreateMemoDialog.tsx +232 -0
  510. package/src/modules/billing/components/CustomerLabel.tsx +53 -0
  511. package/src/modules/billing/components/InvoicesTable.tsx +344 -0
  512. package/src/modules/billing/components/ItemForm.tsx +233 -44
  513. package/src/modules/billing/components/ItemPriceField.tsx +81 -0
  514. package/src/modules/billing/components/LineFormDialog.tsx +25 -1
  515. package/src/modules/billing/components/ManualPaymentDialog.tsx +140 -0
  516. package/src/modules/billing/components/MoneyInput.tsx +26 -0
  517. package/src/modules/billing/components/PaymentUploadDialog.tsx +148 -0
  518. package/src/modules/billing/components/PaymentsTable.tsx +213 -0
  519. package/src/modules/billing/components/PostRunDraftsButton.tsx +129 -0
  520. package/src/modules/billing/components/PrepaidPanel.tsx +20 -7
  521. package/src/modules/billing/components/RunCyclesSection.tsx +298 -0
  522. package/src/modules/billing/components/TestRunActions.tsx +152 -0
  523. package/src/modules/billing/components/account/AccountItemsTab.tsx +192 -0
  524. package/src/modules/billing/components/account/AccountRunBillingDialog.tsx +147 -0
  525. package/src/modules/billing/components/account/AccountRunsTab.tsx +201 -0
  526. package/src/modules/billing/components/account/AccountStatementsTab.tsx +120 -0
  527. package/src/modules/billing/components/account/AccountSummaryCards.tsx +153 -0
  528. package/src/modules/billing/components/account/AccountUsageTab.tsx +122 -0
  529. package/src/modules/billing/components/account/AccountView.tsx +101 -0
  530. package/src/modules/billing/components/account/accountRow.ts +70 -0
  531. package/src/modules/billing/components/customerNames.ts +62 -0
  532. package/src/modules/billing/data/entities.ts +685 -15
  533. package/src/modules/billing/data/entityIds.ts +25 -11
  534. package/src/modules/billing/data/validators.ts +388 -8
  535. package/src/modules/billing/events.ts +82 -3
  536. package/src/modules/billing/i18n/en.json +457 -21
  537. package/src/modules/billing/i18n/pl.json +457 -21
  538. package/src/modules/billing/index.ts +6 -2
  539. package/src/modules/billing/lib/accountFinancials.ts +84 -0
  540. package/src/modules/billing/lib/accountLock.ts +32 -0
  541. package/src/modules/billing/lib/accountStatus.ts +11 -9
  542. package/src/modules/billing/lib/accountSummary.ts +172 -0
  543. package/src/modules/billing/lib/allocation.ts +515 -0
  544. package/src/modules/billing/lib/allocationEvents.ts +26 -0
  545. package/src/modules/billing/lib/billPeriod.ts +19 -0
  546. package/src/modules/billing/lib/billRunEngine.ts +362 -162
  547. package/src/modules/billing/lib/billRunLabel.ts +1 -1
  548. package/src/modules/billing/lib/billingSettings.ts +145 -0
  549. package/src/modules/billing/lib/commandRoute.ts +112 -0
  550. package/src/modules/billing/lib/customerLookup.ts +157 -0
  551. package/src/modules/billing/lib/dateOnly.ts +22 -0
  552. package/src/modules/billing/lib/documentParties.ts +23 -0
  553. package/src/modules/billing/lib/documentTypes.ts +37 -0
  554. package/src/modules/billing/lib/dueDate.ts +26 -0
  555. package/src/modules/billing/lib/iban.ts +36 -0
  556. package/src/modules/billing/lib/invoiceDelivery.ts +197 -0
  557. package/src/modules/billing/lib/invoiceLanguages.ts +34 -0
  558. package/src/modules/billing/lib/invoiceWriter.ts +162 -148
  559. package/src/modules/billing/lib/itemBillingState.ts +67 -0
  560. package/src/modules/billing/lib/itemPriceChange.ts +56 -0
  561. package/src/modules/billing/lib/itemSelector.ts +4 -1
  562. package/src/modules/billing/lib/lineAmounts.ts +61 -0
  563. package/src/modules/billing/lib/memoGuards.ts +41 -0
  564. package/src/modules/billing/lib/navigation.ts +64 -0
  565. package/src/modules/billing/lib/numbering.ts +174 -0
  566. package/src/modules/billing/lib/overdue.ts +60 -0
  567. package/src/modules/billing/lib/paymentCsv.ts +171 -0
  568. package/src/modules/billing/lib/paymentGateway.ts +52 -0
  569. package/src/modules/billing/lib/paymentImport.ts +228 -0
  570. package/src/modules/billing/lib/paymentMatcher.ts +88 -0
  571. package/src/modules/billing/lib/pdf/attachmentStore.ts +60 -0
  572. package/src/modules/billing/lib/pdf/fonts/NotoSans-Bold.ttf +0 -0
  573. package/src/modules/billing/lib/pdf/fonts/NotoSans-Regular.ttf +0 -0
  574. package/src/modules/billing/lib/pdf/fonts/OFL.txt +93 -0
  575. package/src/modules/billing/lib/pdf/fonts/embeddedFonts.ts +9 -0
  576. package/src/modules/billing/lib/pdf/invoiceModel.ts +328 -0
  577. package/src/modules/billing/lib/pdf/invoicePdf.ts +216 -0
  578. package/src/modules/billing/lib/pdf/invoiceTemplate.ts +338 -0
  579. package/src/modules/billing/lib/prepaidConfig.ts +27 -36
  580. package/src/modules/billing/lib/prepaidConsume.ts +29 -6
  581. package/src/modules/billing/lib/prepaidPeriodClose.ts +410 -242
  582. package/src/modules/billing/lib/prepaidTaxPoint.ts +76 -0
  583. package/src/modules/billing/lib/seeds/demo.ts +79 -6
  584. package/src/modules/billing/lib/seeds/paymentsSample.ts +136 -0
  585. package/src/modules/billing/lib/seeds/sellerSettings.ts +78 -0
  586. package/src/modules/billing/lib/servicePeriods.ts +226 -0
  587. package/src/modules/billing/lib/tenantLock.ts +1 -1
  588. package/src/modules/billing/lib/testRunCleanup.ts +42 -0
  589. package/src/modules/billing/lib/topupCapture.ts +3 -4
  590. package/src/modules/billing/lib/topupReceipt.ts +70 -103
  591. package/src/modules/billing/lib/usageRater.ts +1 -1
  592. package/src/modules/billing/lib/usageRunner.ts +17 -5
  593. package/src/modules/billing/lib/vat.ts +56 -0
  594. package/src/modules/billing/migrations/Migration20261114000000_billing_customer_kind.ts +25 -0
  595. package/src/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.ts +37 -0
  596. package/src/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.ts +132 -0
  597. package/src/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.ts +58 -0
  598. package/src/modules/billing/migrations/Migration20261117000000_billing_payments.ts +97 -0
  599. package/src/modules/billing/migrations/Migration20261118000000_billing_memos.ts +21 -0
  600. package/src/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.ts +39 -0
  601. package/src/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.ts +35 -0
  602. package/src/modules/billing/setup.ts +11 -237
  603. package/src/modules/billing/subscribers/credit-memo-auto-send.ts +15 -0
  604. package/src/modules/billing/subscribers/debit-memo-apply-credit.ts +15 -0
  605. package/src/modules/billing/subscribers/debit-memo-auto-send.ts +15 -0
  606. package/src/modules/billing/subscribers/invoice-apply-credit.ts +39 -0
  607. package/src/modules/billing/subscribers/invoice-auto-send.ts +46 -0
  608. package/src/modules/billing/subscribers/payment-captured-to-paid.ts +84 -62
  609. package/src/modules/billing/subscribers/prepaid-topup-captured.ts +4 -8
  610. package/src/modules/billing/workers/reap-stale-bill-runs.ts +4 -4
  611. package/dist/modules/billing/lib/invoiceStatus.js +0 -38
  612. package/dist/modules/billing/lib/invoiceStatus.js.map +0 -7
  613. package/src/modules/billing/__tests__/lib/invoiceStatus.test.ts +0 -97
  614. package/src/modules/billing/lib/invoiceStatus.ts +0 -61
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/billing/subscribers/prepaid-topup-captured.ts"],
4
- "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport type { SalesDocumentNumberGenerator } from '@open-mercato/core/modules/sales/services/salesDocumentNumberGenerator'\nimport type { TaxCalculationService } from '@open-mercato/core/modules/sales/services/taxCalculationService'\nimport { BillingAccount, BillingTopup } from '../data/entities'\nimport { emitBillingEvent } from '../events'\nimport { captureTopup } from '../lib/topupCapture'\nimport { getTopupTaxRate } from '../lib/prepaidConfig'\n\n/**\n * Subscriber: `payment_gateways.payment.captured` \u2192 prepaid top-up captured.\n *\n * Coexists with `payment-captured-to-paid.ts`: that subscriber matches\n * `paymentId == invoiceId` (postpaid), while a top-up's `paymentId` is a\n * minted UUID that only ever matches a `BillingTopup`. Finding the\n * BillingTopup IS the guard \u2014 for any non-top-up payment this is a silent\n * no-op.\n *\n * Idempotent: a re-fired capture on an already-captured top-up is a no-op\n * (the gateway delivers webhooks at-least-once).\n */\n\nexport const metadata = {\n event: 'payment_gateways.payment.captured',\n persistent: true,\n id: 'billing-prepaid-topup-captured',\n}\n\ntype CapturedPayload = {\n paymentId?: string\n transactionId?: string\n organizationId?: string\n tenantId?: string\n providerKey?: string\n}\n\nexport default async function handle(payload: CapturedPayload): Promise<void> {\n if (!payload?.paymentId || !payload.tenantId || !payload.organizationId) {\n return\n }\n\n const container = await createRequestContainer()\n const em = (container.resolve('em') as EntityManager).fork()\n\n const topup = await em.findOne(BillingTopup, {\n paymentId: payload.paymentId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n deletedAt: null,\n })\n if (!topup) {\n // Not a prepaid top-up \u2014 other subscribers own this captured payment.\n return\n }\n if (topup.status === 'captured') {\n return // idempotent re-fire\n }\n\n const account = await em.findOne(BillingAccount, {\n id: topup.billAccountId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n deletedAt: null,\n })\n if (!account) {\n return\n }\n\n const taxRate = await getTopupTaxRate(em)\n const numberGenerator = container.resolve(\n 'salesDocumentNumberGenerator',\n ) as SalesDocumentNumberGenerator\n const taxService = container.resolve('taxCalculationService') as TaxCalculationService\n\n const result = await captureTopup(\n em,\n { numberGenerator, taxService },\n {\n topup,\n account: {\n id: account.id,\n organizationId: account.organizationId,\n tenantId: account.tenantId,\n currencyCode: account.currencyCode,\n },\n taxRate,\n gatewayTransactionId: payload.transactionId ?? null,\n },\n )\n\n if (result.status !== 'captured') return\n\n // Side effects fire AFTER the capture transaction commits.\n await emitBillingEvent('billing.balance.topped_up', {\n billAccountId: account.id,\n tenantId: account.tenantId,\n organizationId: account.organizationId,\n topupId: topup.id,\n amount: topup.amount,\n currencyCode: account.currencyCode,\n balance: result.balanceAfter ?? null,\n transactionId: result.transactionId ?? null,\n receiptInvoiceId: result.receiptInvoiceId ?? null,\n })\n\n // Reuse the postpaid receipt path so the existing mailer / accounting bridge\n // sends the top-up VAT receipt.\n if (result.receiptInvoiceId) {\n await emitBillingEvent('billing.invoice.posted', {\n invoiceId: result.receiptInvoiceId,\n invoiceNumber: result.invoiceNumber ?? null,\n tenantId: account.tenantId,\n organizationId: account.organizationId,\n grandTotalGross: result.grossAmount ?? null,\n currencyCode: account.currencyCode,\n billAccountId: account.id,\n kind: 'prepaid_topup',\n })\n }\n}\n"],
5
- "mappings": "AACA,SAAS,8BAA8B;AAGvC,SAAS,gBAAgB,oBAAoB;AAC7C,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAezB,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAUA,eAAO,OAA8B,SAAyC;AAC5E,MAAI,CAAC,SAAS,aAAa,CAAC,QAAQ,YAAY,CAAC,QAAQ,gBAAgB;AACvE;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,KAAM,UAAU,QAAQ,IAAI,EAAoB,KAAK;AAE3D,QAAM,QAAQ,MAAM,GAAG,QAAQ,cAAc;AAAA,IAC3C,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,WAAW;AAAA,EACb,CAAC;AACD,MAAI,CAAC,OAAO;AAEV;AAAA,EACF;AACA,MAAI,MAAM,WAAW,YAAY;AAC/B;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,GAAG,QAAQ,gBAAgB;AAAA,IAC/C,IAAI,MAAM;AAAA,IACV,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,WAAW;AAAA,EACb,CAAC;AACD,MAAI,CAAC,SAAS;AACZ;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,gBAAgB,EAAE;AACxC,QAAM,kBAAkB,UAAU;AAAA,IAChC;AAAA,EACF;AACA,QAAM,aAAa,UAAU,QAAQ,uBAAuB;AAE5D,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,EAAE,iBAAiB,WAAW;AAAA,IAC9B;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,IAAI,QAAQ;AAAA,QACZ,gBAAgB,QAAQ;AAAA,QACxB,UAAU,QAAQ;AAAA,QAClB,cAAc,QAAQ;AAAA,MACxB;AAAA,MACA;AAAA,MACA,sBAAsB,QAAQ,iBAAiB;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,WAAY;AAGlC,QAAM,iBAAiB,6BAA6B;AAAA,IAClD,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,cAAc,QAAQ;AAAA,IACtB,SAAS,OAAO,gBAAgB;AAAA,IAChC,eAAe,OAAO,iBAAiB;AAAA,IACvC,kBAAkB,OAAO,oBAAoB;AAAA,EAC/C,CAAC;AAID,MAAI,OAAO,kBAAkB;AAC3B,UAAM,iBAAiB,0BAA0B;AAAA,MAC/C,WAAW,OAAO;AAAA,MAClB,eAAe,OAAO,iBAAiB;AAAA,MACvC,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,MACxB,iBAAiB,OAAO,eAAe;AAAA,MACvC,cAAc,QAAQ;AAAA,MACtB,eAAe,QAAQ;AAAA,MACvB,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACF;",
4
+ "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { BillingAccount, BillingTopup } from '../data/entities'\nimport { emitBillingEvent } from '../events'\nimport { captureTopup } from '../lib/topupCapture'\nimport { getTopupTaxRate } from '../lib/prepaidConfig'\n\n/**\n * Subscriber: `payment_gateways.payment.captured` \u2192 prepaid top-up captured.\n *\n * Coexists with `payment-captured-to-paid.ts`: that subscriber matches\n * `paymentId == invoiceId` (postpaid), while a top-up's `paymentId` is a\n * minted UUID that only ever matches a `BillingTopup`. Finding the\n * BillingTopup IS the guard \u2014 for any non-top-up payment this is a silent\n * no-op.\n *\n * Idempotent: a re-fired capture on an already-captured top-up is a no-op\n * (the gateway delivers webhooks at-least-once).\n */\n\nexport const metadata = {\n event: 'payment_gateways.payment.captured',\n persistent: true,\n id: 'billing-prepaid-topup-captured',\n}\n\ntype CapturedPayload = {\n paymentId?: string\n transactionId?: string\n organizationId?: string\n tenantId?: string\n providerKey?: string\n}\n\nexport default async function handle(payload: CapturedPayload): Promise<void> {\n if (!payload?.paymentId || !payload.tenantId || !payload.organizationId) {\n return\n }\n\n const container = await createRequestContainer()\n const em = (container.resolve('em') as EntityManager).fork()\n\n const topup = await em.findOne(BillingTopup, {\n paymentId: payload.paymentId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n deletedAt: null,\n })\n if (!topup) {\n // Not a prepaid top-up \u2014 other subscribers own this captured payment.\n return\n }\n if (topup.status === 'captured') {\n return // idempotent re-fire\n }\n\n const account = await em.findOne(BillingAccount, {\n id: topup.billAccountId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n deletedAt: null,\n })\n if (!account) {\n return\n }\n\n const taxRate = await getTopupTaxRate(em, {\n tenantId: account.tenantId,\n organizationId: account.organizationId,\n })\n\n const result = await captureTopup(\n em,\n {\n topup,\n account: {\n id: account.id,\n organizationId: account.organizationId,\n tenantId: account.tenantId,\n currencyCode: account.currencyCode,\n },\n taxRate,\n gatewayTransactionId: payload.transactionId ?? null,\n },\n )\n\n if (result.status !== 'captured') return\n\n // Side effects fire AFTER the capture transaction commits.\n await emitBillingEvent('billing.balance.topped_up', {\n billAccountId: account.id,\n tenantId: account.tenantId,\n organizationId: account.organizationId,\n topupId: topup.id,\n amount: topup.amount,\n currencyCode: account.currencyCode,\n balance: result.balanceAfter ?? null,\n transactionId: result.transactionId ?? null,\n receiptInvoiceId: result.receiptInvoiceId ?? null,\n })\n\n // Reuse the postpaid receipt path so the existing mailer / accounting bridge\n // sends the top-up VAT receipt.\n if (result.receiptInvoiceId) {\n await emitBillingEvent('billing.invoice.posted', {\n invoiceId: result.receiptInvoiceId,\n invoiceNumber: result.invoiceNumber ?? null,\n tenantId: account.tenantId,\n organizationId: account.organizationId,\n grandTotalGross: result.grossAmount ?? null,\n currencyCode: account.currencyCode,\n billAccountId: account.id,\n kind: 'prepaid_topup',\n })\n }\n}\n"],
5
+ "mappings": "AACA,SAAS,8BAA8B;AACvC,SAAS,gBAAgB,oBAAoB;AAC7C,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAezB,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAUA,eAAO,OAA8B,SAAyC;AAC5E,MAAI,CAAC,SAAS,aAAa,CAAC,QAAQ,YAAY,CAAC,QAAQ,gBAAgB;AACvE;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,KAAM,UAAU,QAAQ,IAAI,EAAoB,KAAK;AAE3D,QAAM,QAAQ,MAAM,GAAG,QAAQ,cAAc;AAAA,IAC3C,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,WAAW;AAAA,EACb,CAAC;AACD,MAAI,CAAC,OAAO;AAEV;AAAA,EACF;AACA,MAAI,MAAM,WAAW,YAAY;AAC/B;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,GAAG,QAAQ,gBAAgB;AAAA,IAC/C,IAAI,MAAM;AAAA,IACV,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,WAAW;AAAA,EACb,CAAC;AACD,MAAI,CAAC,SAAS;AACZ;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,gBAAgB,IAAI;AAAA,IACxC,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,EAC1B,CAAC;AAED,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,IAAI,QAAQ;AAAA,QACZ,gBAAgB,QAAQ;AAAA,QACxB,UAAU,QAAQ;AAAA,QAClB,cAAc,QAAQ;AAAA,MACxB;AAAA,MACA;AAAA,MACA,sBAAsB,QAAQ,iBAAiB;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,WAAY;AAGlC,QAAM,iBAAiB,6BAA6B;AAAA,IAClD,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,cAAc,QAAQ;AAAA,IACtB,SAAS,OAAO,gBAAgB;AAAA,IAChC,eAAe,OAAO,iBAAiB;AAAA,IACvC,kBAAkB,OAAO,oBAAoB;AAAA,EAC/C,CAAC;AAID,MAAI,OAAO,kBAAkB;AAC3B,UAAM,iBAAiB,0BAA0B;AAAA,MAC/C,WAAW,OAAO;AAAA,MAClB,eAAe,OAAO,iBAAiB;AAAA,MACvC,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,MACxB,iBAAiB,OAAO,eAAe;AAAA,MACvC,cAAc,QAAQ;AAAA,MACtB,eAAe,QAAQ;AAAA,MACvB,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import { BillRun } from "../data/entities.js";
1
+ import { BillingRun } from "../data/entities.js";
2
2
  const metadata = {
3
3
  queue: "billing-reap-stale-runs",
4
4
  id: "billing:reap-stale-bill-runs",
@@ -8,7 +8,7 @@ const STALE_THRESHOLD_MS = 60 * 60 * 1e3;
8
8
  async function handle(_job, ctx) {
9
9
  const em = ctx.resolve("em");
10
10
  const threshold = new Date(Date.now() - STALE_THRESHOLD_MS);
11
- const stale = await em.find(BillRun, {
11
+ const stale = await em.find(BillingRun, {
12
12
  status: "running",
13
13
  startedAt: { $lt: threshold }
14
14
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/billing/workers/reap-stale-bill-runs.ts"],
4
- "sourcesContent": ["import type { JobContext, QueuedJob, WorkerMeta } from '@open-mercato/queue'\nimport type { FilterQuery } from '@mikro-orm/core'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { BillRun } from '../data/entities'\n\nexport const metadata: WorkerMeta = {\n queue: 'billing-reap-stale-runs',\n id: 'billing:reap-stale-bill-runs',\n concurrency: 1,\n}\n\ntype HandlerContext = JobContext & {\n resolve: <T = unknown>(name: string) => T\n}\n\n/**\n * Reaper for \"zombie\" Bill Runs left in `status='running'` after a crash.\n *\n * Background \u2014 the Bill Run engine acquires a per-tenant Postgres\n * transaction-scoped advisory lock (`pg_try_advisory_xact_lock`). When the\n * holding transaction ends (commit / rollback / process death) the lock is\n * released automatically \u2014 so there is no lock leak \u2014 but the `BillRun`\n * row's `status='running'` stays set forever, blocking restarts and\n * confusing the dashboard.\n *\n * Phase 0 ships this as the **registered worker shell** so the module's\n * worker auto-discovery includes it from day one. The active-advisory-lock\n * check (which is what distinguishes a real zombie from a healthy\n * long-running run) lands with the Bill Run engine itself in Phase 2.\n *\n * For now the heuristic is time-only: any `running` row older than 1 hour\n * is marked failed with an explanatory message. That is conservative \u2014\n * real runs almost never take an hour even for 500k-account tenants\n * (see spec Performance Considerations).\n */\nconst STALE_THRESHOLD_MS = 60 * 60 * 1000 // 1 hour\n\nexport default async function handle(_job: QueuedJob, ctx: HandlerContext): Promise<void> {\n const em = ctx.resolve<EntityManager>('em')\n const threshold = new Date(Date.now() - STALE_THRESHOLD_MS)\n const stale = await em.find(BillRun, {\n status: 'running',\n startedAt: { $lt: threshold },\n } satisfies FilterQuery<BillRun>)\n if (stale.length === 0) return\n const now = new Date()\n for (const run of stale) {\n run.status = 'failed'\n run.finishedAt = now\n const summary = (run.summary ?? {}) as Record<string, unknown>\n summary.reaper_message =\n 'Stale running run reaped after crash; advisory lock released'\n summary.reaped_at = now.toISOString()\n run.summary = summary\n }\n await em.flush()\n}\n"],
5
- "mappings": "AAGA,SAAS,eAAe;AAEjB,MAAM,WAAuB;AAAA,EAClC,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,aAAa;AACf;AA0BA,MAAM,qBAAqB,KAAK,KAAK;AAErC,eAAO,OAA8B,MAAiB,KAAoC;AACxF,QAAM,KAAK,IAAI,QAAuB,IAAI;AAC1C,QAAM,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,kBAAkB;AAC1D,QAAM,QAAQ,MAAM,GAAG,KAAK,SAAS;AAAA,IACnC,QAAQ;AAAA,IACR,WAAW,EAAE,KAAK,UAAU;AAAA,EAC9B,CAAgC;AAChC,MAAI,MAAM,WAAW,EAAG;AACxB,QAAM,MAAM,oBAAI,KAAK;AACrB,aAAW,OAAO,OAAO;AACvB,QAAI,SAAS;AACb,QAAI,aAAa;AACjB,UAAM,UAAW,IAAI,WAAW,CAAC;AACjC,YAAQ,iBACN;AACF,YAAQ,YAAY,IAAI,YAAY;AACpC,QAAI,UAAU;AAAA,EAChB;AACA,QAAM,GAAG,MAAM;AACjB;",
4
+ "sourcesContent": ["import type { JobContext, QueuedJob, WorkerMeta } from '@open-mercato/queue'\nimport type { FilterQuery } from '@mikro-orm/core'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { BillingRun } from '../data/entities'\n\nexport const metadata: WorkerMeta = {\n queue: 'billing-reap-stale-runs',\n id: 'billing:reap-stale-bill-runs',\n concurrency: 1,\n}\n\ntype HandlerContext = JobContext & {\n resolve: <T = unknown>(name: string) => T\n}\n\n/**\n * Reaper for \"zombie\" Bill Runs left in `status='running'` after a crash.\n *\n * Background \u2014 the Bill Run engine acquires a per-tenant Postgres\n * transaction-scoped advisory lock (`pg_try_advisory_xact_lock`). When the\n * holding transaction ends (commit / rollback / process death) the lock is\n * released automatically \u2014 so there is no lock leak \u2014 but the `BillingRun`\n * row's `status='running'` stays set forever, blocking restarts and\n * confusing the dashboard.\n *\n * Phase 0 ships this as the **registered worker shell** so the module's\n * worker auto-discovery includes it from day one. The active-advisory-lock\n * check (which is what distinguishes a real zombie from a healthy\n * long-running run) lands with the Bill Run engine itself in Phase 2.\n *\n * For now the heuristic is time-only: any `running` row older than 1 hour\n * is marked failed with an explanatory message. That is conservative \u2014\n * real runs almost never take an hour even for 500k-account tenants\n * (see spec Performance Considerations).\n */\nconst STALE_THRESHOLD_MS = 60 * 60 * 1000 // 1 hour\n\nexport default async function handle(_job: QueuedJob, ctx: HandlerContext): Promise<void> {\n const em = ctx.resolve<EntityManager>('em')\n const threshold = new Date(Date.now() - STALE_THRESHOLD_MS)\n const stale = await em.find(BillingRun, {\n status: 'running',\n startedAt: { $lt: threshold },\n } satisfies FilterQuery<BillingRun>)\n if (stale.length === 0) return\n const now = new Date()\n for (const run of stale) {\n run.status = 'failed'\n run.finishedAt = now\n const summary = (run.summary ?? {}) as Record<string, unknown>\n summary.reaper_message =\n 'Stale running run reaped after crash; advisory lock released'\n summary.reaped_at = now.toISOString()\n run.summary = summary\n }\n await em.flush()\n}\n"],
5
+ "mappings": "AAGA,SAAS,kBAAkB;AAEpB,MAAM,WAAuB;AAAA,EAClC,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,aAAa;AACf;AA0BA,MAAM,qBAAqB,KAAK,KAAK;AAErC,eAAO,OAA8B,MAAiB,KAAoC;AACxF,QAAM,KAAK,IAAI,QAAuB,IAAI;AAC1C,QAAM,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,kBAAkB;AAC1D,QAAM,QAAQ,MAAM,GAAG,KAAK,YAAY;AAAA,IACtC,QAAQ;AAAA,IACR,WAAW,EAAE,KAAK,UAAU;AAAA,EAC9B,CAAmC;AACnC,MAAI,MAAM,WAAW,EAAG;AACxB,QAAM,MAAM,oBAAI,KAAK;AACrB,aAAW,OAAO,OAAO;AACvB,QAAI,SAAS;AACb,QAAI,aAAa;AACjB,UAAM,UAAW,IAAI,WAAW,CAAC;AACjC,YAAQ,iBACN;AACF,YAAQ,YAAY,IAAI,YAAY;AACpC,QAAI,UAAU;AAAA,EAChB;AACA,QAAM,GAAG,MAAM;AACjB;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,26 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_account (BillingAccount, table billing_accounts).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const customer_id = "customer_id"
8
+ export const customer_kind = "customer_kind"
9
+ export const name = "name"
10
+ export const currency_code = "currency_code"
11
+ export const bill_cycle = "bill_cycle"
12
+ export const bill_cycle_anchor = "bill_cycle_anchor"
13
+ export const invoice_email = "invoice_email"
14
+ export const invoice_language = "invoice_language"
15
+ export const tax_id = "tax_id"
16
+ export const invoice_address = "invoice_address"
17
+ export const next_bill_date = "next_bill_date"
18
+ export const last_bill_date = "last_bill_date"
19
+ export const billing_mode = "billing_mode"
20
+ export const credit_limit = "credit_limit"
21
+ export const payment_terms_days = "payment_terms_days"
22
+ export const auto_send_invoice = "auto_send_invoice"
23
+ export const is_active = "is_active"
24
+ export const created_at = "created_at"
25
+ export const updated_at = "updated_at"
26
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,13 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_account_balance (BillingAccountBalance, table billing_account_balances).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const currency_code = "currency_code"
9
+ export const balance = "balance"
10
+ export const low_balance_threshold = "low_balance_threshold"
11
+ export const last_movement_at = "last_movement_at"
12
+ export const created_at = "created_at"
13
+ export const updated_at = "updated_at"
@@ -0,0 +1,21 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_account_transaction (BillingAccountTransaction, table billing_account_transactions).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const type = "type"
9
+ export const amount = "amount"
10
+ export const currency_code = "currency_code"
11
+ export const balance_after = "balance_after"
12
+ export const usage_id = "usage_id"
13
+ export const billing_item_id = "billing_item_id"
14
+ export const topup_id = "topup_id"
15
+ export const statement_id = "statement_id"
16
+ export const description = "description"
17
+ export const source_ref = "source_ref"
18
+ export const metadata = "metadata"
19
+ export const user_id = "user_id"
20
+ export const created_at = "created_at"
21
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,18 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_account_usage (BillingAccountUsage, table billing_account_usage).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const uom_code = "uom_code"
9
+ export const quantity = "quantity"
10
+ export const period_start = "period_start"
11
+ export const period_end = "period_end"
12
+ export const line_description = "line_description"
13
+ export const source_ref = "source_ref"
14
+ export const rated_in_bill_run_id = "rated_in_bill_run_id"
15
+ export const is_active = "is_active"
16
+ export const created_at = "created_at"
17
+ export const updated_at = "updated_at"
18
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,18 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_allocation (BillingAllocation, table billing_allocations).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const source_type = "source_type"
8
+ export const source_id = "source_id"
9
+ export const invoice_id = "invoice_id"
10
+ export const bill_account_id = "bill_account_id"
11
+ export const amount = "amount"
12
+ export const currency_code = "currency_code"
13
+ export const allocated_by = "allocated_by"
14
+ export const user_id = "user_id"
15
+ export const deallocated_by_user_id = "deallocated_by_user_id"
16
+ export const created_at = "created_at"
17
+ export const updated_at = "updated_at"
18
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,11 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_document_sequence (BillingDocumentSequence, table billing_document_sequences).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const series = "series"
8
+ export const scope_key = "scope_key"
9
+ export const next_value = "next_value"
10
+ export const created_at = "created_at"
11
+ export const updated_at = "updated_at"
@@ -0,0 +1,14 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_draft_invoice_edit (BillingDraftInvoiceEdit, table billing_draft_invoice_edits).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const invoice_id = "invoice_id"
8
+ export const invoice_line_id = "invoice_line_id"
9
+ export const user_id = "user_id"
10
+ export const action = "action"
11
+ export const before_json = "before_json"
12
+ export const after_json = "after_json"
13
+ export const created_at = "created_at"
14
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,38 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_invoice (BillingInvoice, table billing_invoices).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const document_type = "document_type"
9
+ export const number = "number"
10
+ export const series = "series"
11
+ export const status = "status"
12
+ export const test_run = "test_run"
13
+ export const bill_run_id = "bill_run_id"
14
+ export const bill_date = "bill_date"
15
+ export const period_start = "period_start"
16
+ export const period_end = "period_end"
17
+ export const issue_date = "issue_date"
18
+ export const due_date = "due_date"
19
+ export const currency_code = "currency_code"
20
+ export const subtotal_net = "subtotal_net"
21
+ export const tax_total = "tax_total"
22
+ export const total_gross = "total_gross"
23
+ export const paid_total = "paid_total"
24
+ export const credited_total = "credited_total"
25
+ export const outstanding = "outstanding"
26
+ export const corrects_invoice_id = "corrects_invoice_id"
27
+ export const correction_reason = "correction_reason"
28
+ export const corrects_invoice_number = "corrects_invoice_number"
29
+ export const corrects_issue_date = "corrects_issue_date"
30
+ export const buyer_snapshot = "buyer_snapshot"
31
+ export const seller_snapshot = "seller_snapshot"
32
+ export const pdf_attachment_id = "pdf_attachment_id"
33
+ export const topup_id = "topup_id"
34
+ export const posted_at = "posted_at"
35
+ export const metadata = "metadata"
36
+ export const created_at = "created_at"
37
+ export const updated_at = "updated_at"
38
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,24 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_invoice_line (BillingInvoiceLine, table billing_invoice_lines).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const invoice_id = "invoice_id"
8
+ export const line_number = "line_number"
9
+ export const billing_item_id = "billing_item_id"
10
+ export const billing_type = "billing_type"
11
+ export const description = "description"
12
+ export const quantity = "quantity"
13
+ export const unit_price_net = "unit_price_net"
14
+ export const tax_rate = "tax_rate"
15
+ export const net_amount = "net_amount"
16
+ export const tax_amount = "tax_amount"
17
+ export const gross_amount = "gross_amount"
18
+ export const service_period_start = "service_period_start"
19
+ export const service_period_end = "service_period_end"
20
+ export const corrects_line_id = "corrects_line_id"
21
+ export const metadata = "metadata"
22
+ export const created_at = "created_at"
23
+ export const updated_at = "updated_at"
24
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,26 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_item (BillingItem, table billing_items).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const type = "type"
9
+ export const bill_start_date = "bill_start_date"
10
+ export const bill_end_date = "bill_end_date"
11
+ export const description = "description"
12
+ export const rate_json = "rate_json"
13
+ export const uom_code = "uom_code"
14
+ export const subscription_id = "subscription_id"
15
+ export const subscription_item_id = "subscription_item_id"
16
+ export const source_ref = "source_ref"
17
+ export const currency_mismatch = "currency_mismatch"
18
+ export const billed_to_date = "billed_to_date"
19
+ export const charge_timing = "charge_timing"
20
+ export const prorate = "prorate"
21
+ export const tax_rate = "tax_rate"
22
+ export const price_basis = "price_basis"
23
+ export const is_active = "is_active"
24
+ export const created_at = "created_at"
25
+ export const updated_at = "updated_at"
26
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,25 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_payment (BillingPayment, table billing_payments).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const received_at = "received_at"
8
+ export const amount = "amount"
9
+ export const currency_code = "currency_code"
10
+ export const reference = "reference"
11
+ export const payer_name = "payer_name"
12
+ export const payer_account = "payer_account"
13
+ export const source = "source"
14
+ export const import_id = "import_id"
15
+ export const bill_account_id = "bill_account_id"
16
+ export const status = "status"
17
+ export const unallocated_amount = "unallocated_amount"
18
+ export const match_reason = "match_reason"
19
+ export const source_ref = "source_ref"
20
+ export const external_ref = "external_ref"
21
+ export const topup_id = "topup_id"
22
+ export const metadata = "metadata"
23
+ export const created_at = "created_at"
24
+ export const updated_at = "updated_at"
25
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,14 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_payment_import (BillingPaymentImport, table billing_payment_imports).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const file_name = "file_name"
8
+ export const row_count = "row_count"
9
+ export const counts = "counts"
10
+ export const errors = "errors"
11
+ export const user_id = "user_id"
12
+ export const created_at = "created_at"
13
+ export const updated_at = "updated_at"
14
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,20 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_run (BillingRun, table billing_runs).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const triggered_by = "triggered_by"
8
+ export const parent_run_id = "parent_run_id"
9
+ export const dry_run = "dry_run"
10
+ export const test_mode = "test_mode"
11
+ export const scoped_account_ids = "scoped_account_ids"
12
+ export const as_of_date = "as_of_date"
13
+ export const started_at = "started_at"
14
+ export const finished_at = "finished_at"
15
+ export const status = "status"
16
+ export const summary = "summary"
17
+ export const is_active = "is_active"
18
+ export const created_at = "created_at"
19
+ export const updated_at = "updated_at"
20
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,18 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_run_outcome (BillingRunOutcome, table billing_run_outcomes).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_run_id = "bill_run_id"
8
+ export const bill_account_id = "bill_account_id"
9
+ export const status = "status"
10
+ export const error_message = "error_message"
11
+ export const warnings = "warnings"
12
+ export const draft_invoice_id = "draft_invoice_id"
13
+ export const statement_id = "statement_id"
14
+ export const cycles = "cycles"
15
+ export const is_active = "is_active"
16
+ export const created_at = "created_at"
17
+ export const updated_at = "updated_at"
18
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,26 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_settings (BillingSettings, table billing_settings).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const low_balance_threshold_default = "low_balance_threshold_default"
8
+ export const near_limit_buffer_default = "near_limit_buffer_default"
9
+ export const statement_enabled = "statement_enabled"
10
+ export const topup_tax_rate = "topup_tax_rate"
11
+ export const prepaid_tax_point = "prepaid_tax_point"
12
+ export const topup_provider = "topup_provider"
13
+ export const number_masks = "number_masks"
14
+ export const legal_name = "legal_name"
15
+ export const seller_address = "seller_address"
16
+ export const tax_id = "tax_id"
17
+ export const bank_name = "bank_name"
18
+ export const iban = "iban"
19
+ export const bic = "bic"
20
+ export const invoice_footer = "invoice_footer"
21
+ export const logo_attachment_id = "logo_attachment_id"
22
+ export const default_payment_terms_days = "default_payment_terms_days"
23
+ export const default_tax_rate = "default_tax_rate"
24
+ export const created_at = "created_at"
25
+ export const updated_at = "updated_at"
26
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,22 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_statement (BillingStatement, table billing_statements).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const bill_run_id = "bill_run_id"
9
+ export const period_start = "period_start"
10
+ export const period_end = "period_end"
11
+ export const currency_code = "currency_code"
12
+ export const opening_balance = "opening_balance"
13
+ export const total_topups = "total_topups"
14
+ export const total_usage = "total_usage"
15
+ export const total_recurring = "total_recurring"
16
+ export const total_adjustments = "total_adjustments"
17
+ export const closing_balance = "closing_balance"
18
+ export const debit_breakdown = "debit_breakdown"
19
+ export const vat_summary = "vat_summary"
20
+ export const status = "status"
21
+ export const created_at = "created_at"
22
+ export const updated_at = "updated_at"
@@ -0,0 +1,20 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Columns of billing:billing_topup (BillingTopup, table billing_topups).
3
+
4
+ export const id = "id"
5
+ export const organization_id = "organization_id"
6
+ export const tenant_id = "tenant_id"
7
+ export const bill_account_id = "bill_account_id"
8
+ export const status = "status"
9
+ export const amount = "amount"
10
+ export const currency_code = "currency_code"
11
+ export const provider_key = "provider_key"
12
+ export const payment_id = "payment_id"
13
+ export const gateway_transaction_id = "gateway_transaction_id"
14
+ export const transaction_id = "transaction_id"
15
+ export const receipt_invoice_id = "receipt_invoice_id"
16
+ export const source_ref = "source_ref"
17
+ export const metadata = "metadata"
18
+ export const created_at = "created_at"
19
+ export const updated_at = "updated_at"
20
+ export const deleted_at = "deleted_at"
@@ -0,0 +1,35 @@
1
+ // AUTO-GENERATED by @dainamite/billing scripts/generate-entity-registry.mjs — do not edit.
2
+ // Regenerate with `yarn workspace @dainamite/billing build`.
3
+ //
4
+ // Read by a consuming app's `mercato generate` (@open-mercato/cli entity-ids
5
+ // generator), which takes the KEYS of `E.billing` and registers each id as
6
+ // `billing:<key>`. Source of truth: src/modules/billing/data/entityIds.ts.
7
+
8
+ export const M = {
9
+ billing: 'billing',
10
+ } as const
11
+
12
+ export const E = {
13
+ billing: {
14
+ billing_account: 'billing:billing_account',
15
+ billing_item: 'billing:billing_item',
16
+ billing_account_usage: 'billing:billing_account_usage',
17
+ billing_run: 'billing:billing_run',
18
+ billing_run_outcome: 'billing:billing_run_outcome',
19
+ billing_draft_invoice_edit: 'billing:billing_draft_invoice_edit',
20
+ billing_account_balance: 'billing:billing_account_balance',
21
+ billing_account_transaction: 'billing:billing_account_transaction',
22
+ billing_topup: 'billing:billing_topup',
23
+ billing_statement: 'billing:billing_statement',
24
+ billing_invoice: 'billing:billing_invoice',
25
+ billing_invoice_line: 'billing:billing_invoice_line',
26
+ billing_document_sequence: 'billing:billing_document_sequence',
27
+ billing_settings: 'billing:billing_settings',
28
+ billing_payment: 'billing:billing_payment',
29
+ billing_allocation: 'billing:billing_allocation',
30
+ billing_payment_import: 'billing:billing_payment_import',
31
+ },
32
+ } as const
33
+
34
+ export type KnownModuleId = keyof typeof M
35
+ export type KnownEntities = typeof E
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@dainamite/billing",
3
- "version": "0.19.0",
3
+ "version": "0.21.0",
4
4
  "description": "Dainamite Billing — lightweight recurring-billing engine for Open Mercato (Bill Runs, one-time / recurring / usage items, draft invoices in core/sales with human approval).",
5
5
  "type": "module",
6
6
  "main": "./dist/modules/billing/index.js",
7
7
  "files": [
8
8
  "dist",
9
+ "generated",
9
10
  "src",
10
11
  "README.md",
11
12
  "CHANGELOG.md"
@@ -117,15 +118,15 @@
117
118
  }
118
119
  },
119
120
  "peerDependencies": {
120
- "@mikro-orm/core": "^7.1.5",
121
- "@mikro-orm/decorators": "^7.1.5",
122
- "@mikro-orm/postgresql": "^7.1.5",
123
- "@open-mercato/core": "^0.6.7",
124
- "@open-mercato/events": "^0.6.7",
125
- "@open-mercato/queue": "^0.6.7",
126
- "@open-mercato/shared": "^0.6.7",
127
- "@open-mercato/ui": "^0.6.7",
128
- "@tanstack/react-table": "^8.0.0 || ^9.0.0",
121
+ "@mikro-orm/core": "^7.1.14",
122
+ "@mikro-orm/decorators": "^7.1.14",
123
+ "@mikro-orm/postgresql": "^7.1.14",
124
+ "@open-mercato/core": "^0.9.0",
125
+ "@open-mercato/events": "^0.9.0",
126
+ "@open-mercato/queue": "^0.9.0",
127
+ "@open-mercato/shared": "^0.9.0",
128
+ "@open-mercato/ui": "^0.9.0",
129
+ "@tanstack/react-table": "^9.0.0",
129
130
  "awilix": "^12.0.0",
130
131
  "lucide-react": "^0.400.0",
131
132
  "next": "^16.0.0",
@@ -144,5 +145,9 @@
144
145
  "license": "MIT",
145
146
  "engines": {
146
147
  "node": ">=24.0.0"
148
+ },
149
+ "dependencies": {
150
+ "@pdf-lib/fontkit": "^1.1.1",
151
+ "pdf-lib": "^1.17.1"
147
152
  }
148
153
  }