@dainamite/billing 0.20.0 → 0.22.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 (604) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/dist/modules/billing/acl.js +13 -1
  3. package/dist/modules/billing/acl.js.map +2 -2
  4. package/dist/modules/billing/api/accounts/[id]/summary/route.js +52 -0
  5. package/dist/modules/billing/api/accounts/[id]/summary/route.js.map +7 -0
  6. package/dist/modules/billing/api/accounts/route.js +47 -4
  7. package/dist/modules/billing/api/accounts/route.js.map +2 -2
  8. package/dist/modules/billing/api/export/account/[id]/route.js +11 -7
  9. package/dist/modules/billing/api/export/account/[id]/route.js.map +2 -2
  10. package/dist/modules/billing/api/invoices/[id]/memos/route.js +54 -0
  11. package/dist/modules/billing/api/invoices/[id]/memos/route.js.map +7 -0
  12. package/dist/modules/billing/api/invoices/[id]/pdf/route.js +70 -0
  13. package/dist/modules/billing/api/invoices/[id]/pdf/route.js.map +7 -0
  14. package/dist/modules/billing/api/invoices/[id]/route.js +44 -24
  15. package/dist/modules/billing/api/invoices/[id]/route.js.map +2 -2
  16. package/dist/modules/billing/api/invoices/[id]/send/route.js +107 -0
  17. package/dist/modules/billing/api/invoices/[id]/send/route.js.map +7 -0
  18. package/dist/modules/billing/api/invoices/add-line/route.js +2 -2
  19. package/dist/modules/billing/api/invoices/add-line/route.js.map +2 -2
  20. package/dist/modules/billing/api/invoices/delete-draft/route.js +33 -0
  21. package/dist/modules/billing/api/invoices/delete-draft/route.js.map +7 -0
  22. package/dist/modules/billing/api/invoices/edit-line/route.js +2 -2
  23. package/dist/modules/billing/api/invoices/edit-line/route.js.map +2 -2
  24. package/dist/modules/billing/api/invoices/post/route.js +2 -2
  25. package/dist/modules/billing/api/invoices/post/route.js.map +2 -2
  26. package/dist/modules/billing/api/invoices/remove-line/route.js +2 -2
  27. package/dist/modules/billing/api/invoices/remove-line/route.js.map +2 -2
  28. package/dist/modules/billing/api/invoices/route.js +45 -46
  29. package/dist/modules/billing/api/invoices/route.js.map +2 -2
  30. package/dist/modules/billing/api/items/bulk/route.js +1 -1
  31. package/dist/modules/billing/api/items/bulk/route.js.map +2 -2
  32. package/dist/modules/billing/api/items/change-price/route.js +44 -0
  33. package/dist/modules/billing/api/items/change-price/route.js.map +7 -0
  34. package/dist/modules/billing/api/items/route.js +19 -7
  35. package/dist/modules/billing/api/items/route.js.map +2 -2
  36. package/dist/modules/billing/api/payment-imports/[id]/route.js +49 -0
  37. package/dist/modules/billing/api/payment-imports/[id]/route.js.map +7 -0
  38. package/dist/modules/billing/api/payment-imports/route.js +57 -0
  39. package/dist/modules/billing/api/payment-imports/route.js.map +7 -0
  40. package/dist/modules/billing/api/payments/[id]/route.js +60 -0
  41. package/dist/modules/billing/api/payments/[id]/route.js.map +7 -0
  42. package/dist/modules/billing/api/payments/allocate/route.js +35 -0
  43. package/dist/modules/billing/api/payments/allocate/route.js.map +7 -0
  44. package/dist/modules/billing/api/payments/assign/route.js +36 -0
  45. package/dist/modules/billing/api/payments/assign/route.js.map +7 -0
  46. package/dist/modules/billing/api/payments/convert-to-topup/route.js +35 -0
  47. package/dist/modules/billing/api/payments/convert-to-topup/route.js.map +7 -0
  48. package/dist/modules/billing/api/payments/ignore/route.js +35 -0
  49. package/dist/modules/billing/api/payments/ignore/route.js.map +7 -0
  50. package/dist/modules/billing/api/payments/import/route.js +63 -0
  51. package/dist/modules/billing/api/payments/import/route.js.map +7 -0
  52. package/dist/modules/billing/api/payments/restore/route.js +35 -0
  53. package/dist/modules/billing/api/payments/restore/route.js.map +7 -0
  54. package/dist/modules/billing/api/payments/route.js +114 -0
  55. package/dist/modules/billing/api/payments/route.js.map +7 -0
  56. package/dist/modules/billing/api/payments/unallocate/route.js +35 -0
  57. package/dist/modules/billing/api/payments/unallocate/route.js.map +7 -0
  58. package/dist/modules/billing/api/payments/unassign/route.js +35 -0
  59. package/dist/modules/billing/api/payments/unassign/route.js.map +7 -0
  60. package/dist/modules/billing/api/run-outcomes/route.js +43 -6
  61. package/dist/modules/billing/api/run-outcomes/route.js.map +2 -2
  62. package/dist/modules/billing/api/runs/[id]/post-drafts/route.js +61 -0
  63. package/dist/modules/billing/api/runs/[id]/post-drafts/route.js.map +7 -0
  64. package/dist/modules/billing/api/runs/[id]/route.js +53 -0
  65. package/dist/modules/billing/api/runs/[id]/route.js.map +7 -0
  66. package/dist/modules/billing/api/runs/retry-failed/route.js +1 -1
  67. package/dist/modules/billing/api/runs/retry-failed/route.js.map +2 -2
  68. package/dist/modules/billing/api/runs/route.js +9 -3
  69. package/dist/modules/billing/api/runs/route.js.map +2 -2
  70. package/dist/modules/billing/api/settings/number-preview/route.js +42 -0
  71. package/dist/modules/billing/api/settings/number-preview/route.js.map +7 -0
  72. package/dist/modules/billing/api/settings/route.js +92 -0
  73. package/dist/modules/billing/api/settings/route.js.map +7 -0
  74. package/dist/modules/billing/api/statements/route.js +3 -0
  75. package/dist/modules/billing/api/statements/route.js.map +2 -2
  76. package/dist/modules/billing/api/test-invoices/wipe/route.js +2 -2
  77. package/dist/modules/billing/api/test-invoices/wipe/route.js.map +2 -2
  78. package/dist/modules/billing/backend/billing/accounts/[id]/page.js +121 -232
  79. package/dist/modules/billing/backend/billing/accounts/[id]/page.js.map +2 -2
  80. package/dist/modules/billing/backend/billing/accounts/create/page.js +6 -0
  81. package/dist/modules/billing/backend/billing/accounts/create/page.js.map +2 -2
  82. package/dist/modules/billing/backend/billing/accounts/page.js +63 -4
  83. package/dist/modules/billing/backend/billing/accounts/page.js.map +2 -2
  84. package/dist/modules/billing/backend/billing/invoices/[id]/page.js +297 -65
  85. package/dist/modules/billing/backend/billing/invoices/[id]/page.js.map +3 -3
  86. package/dist/modules/billing/backend/billing/invoices/page.js +6 -172
  87. package/dist/modules/billing/backend/billing/invoices/page.js.map +2 -2
  88. package/dist/modules/billing/backend/billing/items/[id]/page.js +51 -7
  89. package/dist/modules/billing/backend/billing/items/[id]/page.js.map +2 -2
  90. package/dist/modules/billing/backend/billing/items/create/page.js +9 -6
  91. package/dist/modules/billing/backend/billing/items/create/page.js.map +2 -2
  92. package/dist/modules/billing/backend/billing/items/page.js +8 -2
  93. package/dist/modules/billing/backend/billing/items/page.js.map +2 -2
  94. package/dist/modules/billing/backend/billing/payments/[id]/page.js +297 -0
  95. package/dist/modules/billing/backend/billing/payments/[id]/page.js.map +7 -0
  96. package/dist/modules/billing/backend/billing/payments/[id]/page.meta.js +21 -0
  97. package/dist/modules/billing/backend/billing/payments/[id]/page.meta.js.map +7 -0
  98. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.js +74 -0
  99. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.js.map +7 -0
  100. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.meta.js +21 -0
  101. package/dist/modules/billing/backend/billing/payments/imports/[id]/page.meta.js.map +7 -0
  102. package/dist/modules/billing/backend/billing/payments/page.js +58 -0
  103. package/dist/modules/billing/backend/billing/payments/page.js.map +7 -0
  104. package/dist/modules/billing/backend/billing/payments/page.meta.js +18 -0
  105. package/dist/modules/billing/backend/billing/payments/page.meta.js.map +7 -0
  106. package/dist/modules/billing/backend/billing/runs/[id]/page.js +49 -14
  107. package/dist/modules/billing/backend/billing/runs/[id]/page.js.map +2 -2
  108. package/dist/modules/billing/backend/billing/runs/page.js +58 -7
  109. package/dist/modules/billing/backend/billing/runs/page.js.map +2 -2
  110. package/dist/modules/billing/backend/billing/statements/[id]/page.js +61 -6
  111. package/dist/modules/billing/backend/billing/statements/[id]/page.js.map +2 -2
  112. package/dist/modules/billing/backend/billing/statements/page.js +1 -1
  113. package/dist/modules/billing/backend/billing/statements/page.js.map +2 -2
  114. package/dist/modules/billing/backend/billing/topups/page.js +1 -1
  115. package/dist/modules/billing/backend/billing/topups/page.js.map +2 -2
  116. package/dist/modules/billing/backend/billing/transactions/page.js +1 -1
  117. package/dist/modules/billing/backend/billing/transactions/page.js.map +2 -2
  118. package/dist/modules/billing/backend/billing/usage/create/page.js +3 -2
  119. package/dist/modules/billing/backend/billing/usage/create/page.js.map +2 -2
  120. package/dist/modules/billing/backend/config/billing/page.js +472 -0
  121. package/dist/modules/billing/backend/config/billing/page.js.map +7 -0
  122. package/dist/modules/billing/backend/config/billing/page.meta.js +19 -0
  123. package/dist/modules/billing/backend/config/billing/page.meta.js.map +7 -0
  124. package/dist/modules/billing/cli.js +22 -1
  125. package/dist/modules/billing/cli.js.map +2 -2
  126. package/dist/modules/billing/commands/accounts.js +6 -0
  127. package/dist/modules/billing/commands/accounts.js.map +2 -2
  128. package/dist/modules/billing/commands/index.js +3 -0
  129. package/dist/modules/billing/commands/index.js.map +2 -2
  130. package/dist/modules/billing/commands/invoices.js +269 -167
  131. package/dist/modules/billing/commands/invoices.js.map +2 -2
  132. package/dist/modules/billing/commands/items.js +108 -0
  133. package/dist/modules/billing/commands/items.js.map +2 -2
  134. package/dist/modules/billing/commands/memos.js +179 -0
  135. package/dist/modules/billing/commands/memos.js.map +7 -0
  136. package/dist/modules/billing/commands/payments.js +379 -0
  137. package/dist/modules/billing/commands/payments.js.map +7 -0
  138. package/dist/modules/billing/commands/runs.js +151 -4
  139. package/dist/modules/billing/commands/runs.js.map +2 -2
  140. package/dist/modules/billing/commands/settings.js +59 -0
  141. package/dist/modules/billing/commands/settings.js.map +7 -0
  142. package/dist/modules/billing/commands/topups.js +9 -2
  143. package/dist/modules/billing/commands/topups.js.map +2 -2
  144. package/dist/modules/billing/commands/transactions.js +2 -2
  145. package/dist/modules/billing/commands/transactions.js.map +2 -2
  146. package/dist/modules/billing/components/AccountForm.js +149 -42
  147. package/dist/modules/billing/components/AccountForm.js.map +2 -2
  148. package/dist/modules/billing/components/AccountInvoicesSection.js +64 -0
  149. package/dist/modules/billing/components/AccountInvoicesSection.js.map +7 -0
  150. package/dist/modules/billing/components/AccountPaymentsSection.js +43 -0
  151. package/dist/modules/billing/components/AccountPaymentsSection.js.map +7 -0
  152. package/dist/modules/billing/components/AccountPicker.js +56 -0
  153. package/dist/modules/billing/components/AccountPicker.js.map +7 -0
  154. package/dist/modules/billing/components/AllocatePaymentDialog.js +134 -0
  155. package/dist/modules/billing/components/AllocatePaymentDialog.js.map +7 -0
  156. package/dist/modules/billing/components/BillingDataTable.js +21 -0
  157. package/dist/modules/billing/components/BillingDataTable.js.map +7 -0
  158. package/dist/modules/billing/components/BillingSettingsLink.js +19 -0
  159. package/dist/modules/billing/components/BillingSettingsLink.js.map +7 -0
  160. package/dist/modules/billing/components/ChangeItemPriceDialog.js +158 -0
  161. package/dist/modules/billing/components/ChangeItemPriceDialog.js.map +7 -0
  162. package/dist/modules/billing/components/CreateMemoDialog.js +200 -0
  163. package/dist/modules/billing/components/CreateMemoDialog.js.map +7 -0
  164. package/dist/modules/billing/components/CustomerLabel.js +33 -0
  165. package/dist/modules/billing/components/CustomerLabel.js.map +7 -0
  166. package/dist/modules/billing/components/InvoicesTable.js +270 -0
  167. package/dist/modules/billing/components/InvoicesTable.js.map +7 -0
  168. package/dist/modules/billing/components/ItemForm.js +176 -44
  169. package/dist/modules/billing/components/ItemForm.js.map +2 -2
  170. package/dist/modules/billing/components/ItemPriceField.js +46 -0
  171. package/dist/modules/billing/components/ItemPriceField.js.map +7 -0
  172. package/dist/modules/billing/components/LineFormDialog.js +25 -2
  173. package/dist/modules/billing/components/LineFormDialog.js.map +2 -2
  174. package/dist/modules/billing/components/ManualPaymentDialog.js +122 -0
  175. package/dist/modules/billing/components/ManualPaymentDialog.js.map +7 -0
  176. package/dist/modules/billing/components/MoneyInput.js +14 -0
  177. package/dist/modules/billing/components/MoneyInput.js.map +7 -0
  178. package/dist/modules/billing/components/PaymentUploadDialog.js +115 -0
  179. package/dist/modules/billing/components/PaymentUploadDialog.js.map +7 -0
  180. package/dist/modules/billing/components/PaymentsTable.js +171 -0
  181. package/dist/modules/billing/components/PaymentsTable.js.map +7 -0
  182. package/dist/modules/billing/components/PostRunDraftsButton.js +105 -0
  183. package/dist/modules/billing/components/PostRunDraftsButton.js.map +7 -0
  184. package/dist/modules/billing/components/PrepaidPanel.js +14 -4
  185. package/dist/modules/billing/components/PrepaidPanel.js.map +2 -2
  186. package/dist/modules/billing/components/RunCyclesSection.js +209 -0
  187. package/dist/modules/billing/components/RunCyclesSection.js.map +7 -0
  188. package/dist/modules/billing/components/TestRunActions.js +127 -0
  189. package/dist/modules/billing/components/TestRunActions.js.map +7 -0
  190. package/dist/modules/billing/components/account/AccountItemsTab.js +157 -0
  191. package/dist/modules/billing/components/account/AccountItemsTab.js.map +7 -0
  192. package/dist/modules/billing/components/account/AccountRunBillingDialog.js +122 -0
  193. package/dist/modules/billing/components/account/AccountRunBillingDialog.js.map +7 -0
  194. package/dist/modules/billing/components/account/AccountRunsTab.js +152 -0
  195. package/dist/modules/billing/components/account/AccountRunsTab.js.map +7 -0
  196. package/dist/modules/billing/components/account/AccountStatementsTab.js +98 -0
  197. package/dist/modules/billing/components/account/AccountStatementsTab.js.map +7 -0
  198. package/dist/modules/billing/components/account/AccountSummaryCards.js +125 -0
  199. package/dist/modules/billing/components/account/AccountSummaryCards.js.map +7 -0
  200. package/dist/modules/billing/components/account/AccountUsageTab.js +91 -0
  201. package/dist/modules/billing/components/account/AccountUsageTab.js.map +7 -0
  202. package/dist/modules/billing/components/account/AccountView.js +73 -0
  203. package/dist/modules/billing/components/account/AccountView.js.map +7 -0
  204. package/dist/modules/billing/components/account/accountRow.js +39 -0
  205. package/dist/modules/billing/components/account/accountRow.js.map +7 -0
  206. package/dist/modules/billing/components/customerNames.js +42 -0
  207. package/dist/modules/billing/components/customerNames.js.map +7 -0
  208. package/dist/modules/billing/data/entities.js +560 -4
  209. package/dist/modules/billing/data/entities.js.map +2 -2
  210. package/dist/modules/billing/data/entityIds.js +10 -1
  211. package/dist/modules/billing/data/entityIds.js.map +2 -2
  212. package/dist/modules/billing/data/validators.js +269 -15
  213. package/dist/modules/billing/data/validators.js.map +2 -2
  214. package/dist/modules/billing/events.js +50 -0
  215. package/dist/modules/billing/events.js.map +2 -2
  216. package/dist/modules/billing/i18n/de.json +880 -0
  217. package/dist/modules/billing/i18n/en.json +457 -21
  218. package/dist/modules/billing/i18n/es.json +880 -0
  219. package/dist/modules/billing/i18n/pl.json +458 -22
  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 +237 -102
  237. package/dist/modules/billing/lib/billRunEngine.js.map +2 -2
  238. package/dist/modules/billing/lib/billingSettings.js +116 -0
  239. package/dist/modules/billing/lib/billingSettings.js.map +7 -0
  240. package/dist/modules/billing/lib/commandRoute.js +81 -0
  241. package/dist/modules/billing/lib/commandRoute.js.map +7 -0
  242. package/dist/modules/billing/lib/customerLookup.js +97 -0
  243. package/dist/modules/billing/lib/customerLookup.js.map +7 -0
  244. package/dist/modules/billing/lib/dateOnly.js +13 -0
  245. package/dist/modules/billing/lib/dateOnly.js.map +7 -0
  246. package/dist/modules/billing/lib/documentParties.js +16 -0
  247. package/dist/modules/billing/lib/documentParties.js.map +7 -0
  248. package/dist/modules/billing/lib/documentTypes.js +27 -0
  249. package/dist/modules/billing/lib/documentTypes.js.map +7 -0
  250. package/dist/modules/billing/lib/dueDate.js +18 -0
  251. package/dist/modules/billing/lib/dueDate.js.map +7 -0
  252. package/dist/modules/billing/lib/iban.js +29 -0
  253. package/dist/modules/billing/lib/iban.js.map +7 -0
  254. package/dist/modules/billing/lib/invoiceDelivery.js +133 -0
  255. package/dist/modules/billing/lib/invoiceDelivery.js.map +7 -0
  256. package/dist/modules/billing/lib/invoiceLanguages.js +28 -0
  257. package/dist/modules/billing/lib/invoiceLanguages.js.map +7 -0
  258. package/dist/modules/billing/lib/invoiceWriter.js +107 -99
  259. package/dist/modules/billing/lib/invoiceWriter.js.map +2 -2
  260. package/dist/modules/billing/lib/itemBillingState.js +27 -0
  261. package/dist/modules/billing/lib/itemBillingState.js.map +7 -0
  262. package/dist/modules/billing/lib/itemPriceChange.js +18 -0
  263. package/dist/modules/billing/lib/itemPriceChange.js.map +7 -0
  264. package/dist/modules/billing/lib/itemSelector.js.map +2 -2
  265. package/dist/modules/billing/lib/lineAmounts.js +32 -0
  266. package/dist/modules/billing/lib/lineAmounts.js.map +7 -0
  267. package/dist/modules/billing/lib/memoGuards.js +25 -0
  268. package/dist/modules/billing/lib/memoGuards.js.map +7 -0
  269. package/dist/modules/billing/lib/navigation.js +48 -0
  270. package/dist/modules/billing/lib/navigation.js.map +7 -0
  271. package/dist/modules/billing/lib/numbering.js +120 -0
  272. package/dist/modules/billing/lib/numbering.js.map +7 -0
  273. package/dist/modules/billing/lib/overdue.js +36 -0
  274. package/dist/modules/billing/lib/overdue.js.map +7 -0
  275. package/dist/modules/billing/lib/paymentCsv.js +125 -0
  276. package/dist/modules/billing/lib/paymentCsv.js.map +7 -0
  277. package/dist/modules/billing/lib/paymentGateway.js +15 -0
  278. package/dist/modules/billing/lib/paymentGateway.js.map +7 -0
  279. package/dist/modules/billing/lib/paymentImport.js +164 -0
  280. package/dist/modules/billing/lib/paymentImport.js.map +7 -0
  281. package/dist/modules/billing/lib/paymentMatcher.js +36 -0
  282. package/dist/modules/billing/lib/paymentMatcher.js.map +7 -0
  283. package/dist/modules/billing/lib/pdf/attachmentStore.js +46 -0
  284. package/dist/modules/billing/lib/pdf/attachmentStore.js.map +7 -0
  285. package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js +7 -0
  286. package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js.map +7 -0
  287. package/dist/modules/billing/lib/pdf/invoiceModel.js +194 -0
  288. package/dist/modules/billing/lib/pdf/invoiceModel.js.map +7 -0
  289. package/dist/modules/billing/lib/pdf/invoicePdf.js +165 -0
  290. package/dist/modules/billing/lib/pdf/invoicePdf.js.map +7 -0
  291. package/dist/modules/billing/lib/pdf/invoiceTemplate.js +276 -0
  292. package/dist/modules/billing/lib/pdf/invoiceTemplate.js.map +7 -0
  293. package/dist/modules/billing/lib/prepaidConfig.js +17 -25
  294. package/dist/modules/billing/lib/prepaidConfig.js.map +2 -2
  295. package/dist/modules/billing/lib/prepaidConsume.js +26 -7
  296. package/dist/modules/billing/lib/prepaidConsume.js.map +2 -2
  297. package/dist/modules/billing/lib/prepaidPeriodClose.js +277 -158
  298. package/dist/modules/billing/lib/prepaidPeriodClose.js.map +2 -2
  299. package/dist/modules/billing/lib/prepaidTaxPoint.js +37 -0
  300. package/dist/modules/billing/lib/prepaidTaxPoint.js.map +7 -0
  301. package/dist/modules/billing/lib/seeds/demo.js +51 -3
  302. package/dist/modules/billing/lib/seeds/demo.js.map +2 -2
  303. package/dist/modules/billing/lib/seeds/paymentsSample.js +93 -0
  304. package/dist/modules/billing/lib/seeds/paymentsSample.js.map +7 -0
  305. package/dist/modules/billing/lib/seeds/sellerSettings.js +41 -0
  306. package/dist/modules/billing/lib/seeds/sellerSettings.js.map +7 -0
  307. package/dist/modules/billing/lib/servicePeriods.js +121 -0
  308. package/dist/modules/billing/lib/servicePeriods.js.map +7 -0
  309. package/dist/modules/billing/lib/testRunCleanup.js +24 -0
  310. package/dist/modules/billing/lib/testRunCleanup.js.map +7 -0
  311. package/dist/modules/billing/lib/topupCapture.js +2 -2
  312. package/dist/modules/billing/lib/topupCapture.js.map +2 -2
  313. package/dist/modules/billing/lib/topupReceipt.js +58 -79
  314. package/dist/modules/billing/lib/topupReceipt.js.map +2 -2
  315. package/dist/modules/billing/lib/usageRater.js.map +1 -1
  316. package/dist/modules/billing/lib/usageRunner.js +14 -6
  317. package/dist/modules/billing/lib/usageRunner.js.map +2 -2
  318. package/dist/modules/billing/lib/vat.js +39 -0
  319. package/dist/modules/billing/lib/vat.js.map +7 -0
  320. package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js +15 -0
  321. package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js.map +7 -0
  322. package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js +25 -0
  323. package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js.map +7 -0
  324. package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js +115 -0
  325. package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js.map +7 -0
  326. package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js +47 -0
  327. package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js.map +7 -0
  328. package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js +89 -0
  329. package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js.map +7 -0
  330. package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js +17 -0
  331. package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js.map +7 -0
  332. package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js +27 -0
  333. package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js.map +7 -0
  334. package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js +29 -0
  335. package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js.map +7 -0
  336. package/dist/modules/billing/setup.js +7 -184
  337. package/dist/modules/billing/setup.js.map +2 -2
  338. package/dist/modules/billing/subscribers/credit-memo-auto-send.js +16 -0
  339. package/dist/modules/billing/subscribers/credit-memo-auto-send.js.map +7 -0
  340. package/dist/modules/billing/subscribers/debit-memo-apply-credit.js +16 -0
  341. package/dist/modules/billing/subscribers/debit-memo-apply-credit.js.map +7 -0
  342. package/dist/modules/billing/subscribers/debit-memo-auto-send.js +16 -0
  343. package/dist/modules/billing/subscribers/debit-memo-auto-send.js.map +7 -0
  344. package/dist/modules/billing/subscribers/invoice-apply-credit.js +34 -0
  345. package/dist/modules/billing/subscribers/invoice-apply-credit.js.map +7 -0
  346. package/dist/modules/billing/subscribers/invoice-auto-send.js +30 -0
  347. package/dist/modules/billing/subscribers/invoice-auto-send.js.map +7 -0
  348. package/dist/modules/billing/subscribers/payment-captured-to-paid.js +69 -33
  349. package/dist/modules/billing/subscribers/payment-captured-to-paid.js.map +2 -2
  350. package/dist/modules/billing/subscribers/prepaid-topup-captured.js +4 -6
  351. package/dist/modules/billing/subscribers/prepaid-topup-captured.js.map +2 -2
  352. package/generated/entities/billing_account/index.ts +3 -0
  353. package/generated/entities/billing_allocation/index.ts +18 -0
  354. package/generated/entities/billing_document_sequence/index.ts +11 -0
  355. package/generated/entities/billing_invoice/index.ts +38 -0
  356. package/generated/entities/billing_invoice_line/index.ts +24 -0
  357. package/generated/entities/billing_item/index.ts +4 -0
  358. package/generated/entities/billing_payment/index.ts +25 -0
  359. package/generated/entities/billing_payment_import/index.ts +14 -0
  360. package/generated/entities/billing_run/index.ts +0 -1
  361. package/generated/entities/billing_run_outcome/index.ts +1 -0
  362. package/generated/entities/billing_settings/index.ts +26 -0
  363. package/generated/entities/billing_statement/index.ts +1 -0
  364. package/generated/entities.ids.generated.ts +7 -0
  365. package/package.json +5 -1
  366. package/src/modules/billing/__integration__/TC-BILL-004.spec.ts +171 -0
  367. package/src/modules/billing/__integration__/TC-BILL-005.spec.ts +134 -0
  368. package/src/modules/billing/__integration__/TC-BILL-006.spec.ts +101 -0
  369. package/src/modules/billing/__integration__/TC-BILL-007.spec.ts +140 -0
  370. package/src/modules/billing/__integration__/TC-BILL-008.spec.ts +108 -0
  371. package/src/modules/billing/__integration__/TC-BILL-009.spec.ts +113 -0
  372. package/src/modules/billing/__integration__/TC-BILL-010.spec.ts +118 -0
  373. package/src/modules/billing/__integration__/TC-BILL-011.spec.ts +142 -0
  374. package/src/modules/billing/__integration__/TC-BILL-012.spec.ts +115 -0
  375. package/src/modules/billing/__integration__/TC-BILL-013.spec.ts +118 -0
  376. package/src/modules/billing/__integration__/sellerSettings.ts +24 -0
  377. package/src/modules/billing/__tests__/commands/invoices.test.ts +436 -354
  378. package/src/modules/billing/__tests__/commands/itemsBulk.test.ts +33 -0
  379. package/src/modules/billing/__tests__/commands/memos.test.ts +205 -0
  380. package/src/modules/billing/__tests__/commands/payments.test.ts +241 -0
  381. package/src/modules/billing/__tests__/commands/runsDelete.test.ts +146 -0
  382. package/src/modules/billing/__tests__/commands/runsPostDrafts.test.ts +106 -0
  383. package/src/modules/billing/__tests__/commands/topups.test.ts +11 -0
  384. package/src/modules/billing/__tests__/entityRegistry.test.ts +8 -1
  385. package/src/modules/billing/__tests__/helpers/prepaidMockEm.ts +28 -11
  386. package/src/modules/billing/__tests__/i18n/dictionaries.test.ts +64 -0
  387. package/src/modules/billing/__tests__/lib/accountFinancials.test.ts +53 -0
  388. package/src/modules/billing/__tests__/lib/accountSummary.test.ts +97 -0
  389. package/src/modules/billing/__tests__/lib/allocation.test.ts +319 -0
  390. package/src/modules/billing/__tests__/lib/billRunEngine.test.ts +228 -17
  391. package/src/modules/billing/__tests__/lib/billingSettings.test.ts +109 -0
  392. package/src/modules/billing/__tests__/lib/customerLookup.test.ts +156 -0
  393. package/src/modules/billing/__tests__/lib/dueDate.test.ts +35 -0
  394. package/src/modules/billing/__tests__/lib/iban.test.ts +38 -0
  395. package/src/modules/billing/__tests__/lib/invoiceDelivery.test.ts +206 -0
  396. package/src/modules/billing/__tests__/lib/invoiceLanguages.test.ts +49 -0
  397. package/src/modules/billing/__tests__/lib/invoiceWriter.test.ts +212 -10
  398. package/src/modules/billing/__tests__/lib/itemBillingState.test.ts +42 -0
  399. package/src/modules/billing/__tests__/lib/itemPriceChange.test.ts +165 -0
  400. package/src/modules/billing/__tests__/lib/lineAmounts.test.ts +86 -0
  401. package/src/modules/billing/__tests__/lib/navigation.test.ts +71 -0
  402. package/src/modules/billing/__tests__/lib/numbering.test.ts +91 -0
  403. package/src/modules/billing/__tests__/lib/overdue.test.ts +36 -0
  404. package/src/modules/billing/__tests__/lib/paymentCsv.test.ts +148 -0
  405. package/src/modules/billing/__tests__/lib/paymentImport.test.ts +113 -0
  406. package/src/modules/billing/__tests__/lib/paymentsSample.test.ts +73 -0
  407. package/src/modules/billing/__tests__/lib/pdf/invoicePdf.test.ts +269 -0
  408. package/src/modules/billing/__tests__/lib/pdf/invoicePdfService.test.ts +147 -0
  409. package/src/modules/billing/__tests__/lib/prepaidPeriodClose.test.ts +374 -98
  410. package/src/modules/billing/__tests__/lib/prepaidTaxPoint.test.ts +118 -0
  411. package/src/modules/billing/__tests__/lib/seedsDemo.test.ts +53 -2
  412. package/src/modules/billing/__tests__/lib/sellerSettings.test.ts +28 -0
  413. package/src/modules/billing/__tests__/lib/servicePeriods.test.ts +190 -0
  414. package/src/modules/billing/__tests__/lib/topupCapture.test.ts +6 -28
  415. package/src/modules/billing/__tests__/lib/topupReceipt.test.ts +21 -52
  416. package/src/modules/billing/__tests__/lib/vat.test.ts +51 -0
  417. package/src/modules/billing/__tests__/package-isolation.test.ts +22 -8
  418. package/src/modules/billing/__tests__/setup.test.ts +13 -4
  419. package/src/modules/billing/__tests__/validators.test.ts +197 -3
  420. package/src/modules/billing/acl.ts +12 -0
  421. package/src/modules/billing/api/accounts/[id]/summary/route.ts +62 -0
  422. package/src/modules/billing/api/accounts/route.ts +59 -4
  423. package/src/modules/billing/api/export/account/[id]/route.ts +13 -11
  424. package/src/modules/billing/api/invoices/[id]/memos/route.ts +63 -0
  425. package/src/modules/billing/api/invoices/[id]/pdf/route.ts +80 -0
  426. package/src/modules/billing/api/invoices/[id]/route.ts +57 -70
  427. package/src/modules/billing/api/invoices/[id]/send/route.ts +127 -0
  428. package/src/modules/billing/api/invoices/add-line/route.ts +2 -2
  429. package/src/modules/billing/api/invoices/delete-draft/route.ts +33 -0
  430. package/src/modules/billing/api/invoices/edit-line/route.ts +2 -2
  431. package/src/modules/billing/api/invoices/post/route.ts +7 -6
  432. package/src/modules/billing/api/invoices/remove-line/route.ts +2 -2
  433. package/src/modules/billing/api/invoices/route.ts +81 -86
  434. package/src/modules/billing/api/items/bulk/route.ts +2 -1
  435. package/src/modules/billing/api/items/change-price/route.ts +54 -0
  436. package/src/modules/billing/api/items/route.ts +23 -7
  437. package/src/modules/billing/api/payment-imports/[id]/route.ts +49 -0
  438. package/src/modules/billing/api/payment-imports/route.ts +57 -0
  439. package/src/modules/billing/api/payments/[id]/route.ts +63 -0
  440. package/src/modules/billing/api/payments/allocate/route.ts +35 -0
  441. package/src/modules/billing/api/payments/assign/route.ts +36 -0
  442. package/src/modules/billing/api/payments/convert-to-topup/route.ts +35 -0
  443. package/src/modules/billing/api/payments/ignore/route.ts +35 -0
  444. package/src/modules/billing/api/payments/import/route.ts +72 -0
  445. package/src/modules/billing/api/payments/restore/route.ts +35 -0
  446. package/src/modules/billing/api/payments/route.ts +147 -0
  447. package/src/modules/billing/api/payments/unallocate/route.ts +35 -0
  448. package/src/modules/billing/api/payments/unassign/route.ts +35 -0
  449. package/src/modules/billing/api/run-outcomes/route.ts +49 -6
  450. package/src/modules/billing/api/runs/[id]/post-drafts/route.ts +71 -0
  451. package/src/modules/billing/api/runs/[id]/route.ts +59 -0
  452. package/src/modules/billing/api/runs/retry-failed/route.ts +2 -1
  453. package/src/modules/billing/api/runs/route.ts +15 -7
  454. package/src/modules/billing/api/settings/number-preview/route.ts +46 -0
  455. package/src/modules/billing/api/settings/route.ts +116 -0
  456. package/src/modules/billing/api/statements/route.ts +5 -0
  457. package/src/modules/billing/api/test-invoices/wipe/route.ts +2 -2
  458. package/src/modules/billing/backend/billing/accounts/[id]/page.tsx +151 -372
  459. package/src/modules/billing/backend/billing/accounts/create/page.tsx +6 -0
  460. package/src/modules/billing/backend/billing/accounts/page.tsx +70 -4
  461. package/src/modules/billing/backend/billing/invoices/[id]/page.tsx +444 -95
  462. package/src/modules/billing/backend/billing/invoices/page.tsx +8 -227
  463. package/src/modules/billing/backend/billing/items/[id]/page.tsx +75 -6
  464. package/src/modules/billing/backend/billing/items/create/page.tsx +13 -8
  465. package/src/modules/billing/backend/billing/items/page.tsx +18 -2
  466. package/src/modules/billing/backend/billing/payments/[id]/page.meta.ts +19 -0
  467. package/src/modules/billing/backend/billing/payments/[id]/page.tsx +415 -0
  468. package/src/modules/billing/backend/billing/payments/imports/[id]/page.meta.ts +19 -0
  469. package/src/modules/billing/backend/billing/payments/imports/[id]/page.tsx +106 -0
  470. package/src/modules/billing/backend/billing/payments/page.meta.ts +16 -0
  471. package/src/modules/billing/backend/billing/payments/page.tsx +56 -0
  472. package/src/modules/billing/backend/billing/runs/[id]/page.tsx +49 -18
  473. package/src/modules/billing/backend/billing/runs/page.tsx +59 -8
  474. package/src/modules/billing/backend/billing/statements/[id]/page.tsx +86 -5
  475. package/src/modules/billing/backend/billing/statements/page.tsx +1 -1
  476. package/src/modules/billing/backend/billing/topups/page.tsx +1 -1
  477. package/src/modules/billing/backend/billing/transactions/page.tsx +1 -1
  478. package/src/modules/billing/backend/billing/usage/create/page.tsx +3 -2
  479. package/src/modules/billing/backend/config/billing/page.meta.ts +21 -0
  480. package/src/modules/billing/backend/config/billing/page.tsx +549 -0
  481. package/src/modules/billing/cli.ts +31 -1
  482. package/src/modules/billing/commands/accounts.ts +6 -0
  483. package/src/modules/billing/commands/index.ts +3 -0
  484. package/src/modules/billing/commands/invoices.ts +364 -231
  485. package/src/modules/billing/commands/items.ts +143 -0
  486. package/src/modules/billing/commands/memos.ts +218 -0
  487. package/src/modules/billing/commands/payments.ts +428 -0
  488. package/src/modules/billing/commands/runs.ts +205 -3
  489. package/src/modules/billing/commands/settings.ts +77 -0
  490. package/src/modules/billing/commands/topups.ts +12 -3
  491. package/src/modules/billing/commands/transactions.ts +2 -2
  492. package/src/modules/billing/components/AccountForm.tsx +199 -53
  493. package/src/modules/billing/components/AccountInvoicesSection.tsx +75 -0
  494. package/src/modules/billing/components/AccountPaymentsSection.tsx +42 -0
  495. package/src/modules/billing/components/AccountPicker.tsx +70 -0
  496. package/src/modules/billing/components/AllocatePaymentDialog.tsx +167 -0
  497. package/src/modules/billing/components/BillingDataTable.tsx +34 -0
  498. package/src/modules/billing/components/BillingSettingsLink.tsx +25 -0
  499. package/src/modules/billing/components/ChangeItemPriceDialog.tsx +180 -0
  500. package/src/modules/billing/components/CreateMemoDialog.tsx +232 -0
  501. package/src/modules/billing/components/CustomerLabel.tsx +53 -0
  502. package/src/modules/billing/components/InvoicesTable.tsx +344 -0
  503. package/src/modules/billing/components/ItemForm.tsx +233 -44
  504. package/src/modules/billing/components/ItemPriceField.tsx +81 -0
  505. package/src/modules/billing/components/LineFormDialog.tsx +25 -1
  506. package/src/modules/billing/components/ManualPaymentDialog.tsx +140 -0
  507. package/src/modules/billing/components/MoneyInput.tsx +26 -0
  508. package/src/modules/billing/components/PaymentUploadDialog.tsx +148 -0
  509. package/src/modules/billing/components/PaymentsTable.tsx +213 -0
  510. package/src/modules/billing/components/PostRunDraftsButton.tsx +129 -0
  511. package/src/modules/billing/components/PrepaidPanel.tsx +19 -6
  512. package/src/modules/billing/components/RunCyclesSection.tsx +298 -0
  513. package/src/modules/billing/components/TestRunActions.tsx +152 -0
  514. package/src/modules/billing/components/account/AccountItemsTab.tsx +192 -0
  515. package/src/modules/billing/components/account/AccountRunBillingDialog.tsx +147 -0
  516. package/src/modules/billing/components/account/AccountRunsTab.tsx +201 -0
  517. package/src/modules/billing/components/account/AccountStatementsTab.tsx +120 -0
  518. package/src/modules/billing/components/account/AccountSummaryCards.tsx +153 -0
  519. package/src/modules/billing/components/account/AccountUsageTab.tsx +122 -0
  520. package/src/modules/billing/components/account/AccountView.tsx +101 -0
  521. package/src/modules/billing/components/account/accountRow.ts +70 -0
  522. package/src/modules/billing/components/customerNames.ts +62 -0
  523. package/src/modules/billing/data/entities.ts +656 -6
  524. package/src/modules/billing/data/entityIds.ts +9 -0
  525. package/src/modules/billing/data/validators.ts +388 -8
  526. package/src/modules/billing/events.ts +56 -3
  527. package/src/modules/billing/i18n/de.json +880 -0
  528. package/src/modules/billing/i18n/en.json +457 -21
  529. package/src/modules/billing/i18n/es.json +880 -0
  530. package/src/modules/billing/i18n/pl.json +458 -22
  531. package/src/modules/billing/index.ts +6 -2
  532. package/src/modules/billing/lib/accountFinancials.ts +84 -0
  533. package/src/modules/billing/lib/accountLock.ts +32 -0
  534. package/src/modules/billing/lib/accountStatus.ts +11 -9
  535. package/src/modules/billing/lib/accountSummary.ts +172 -0
  536. package/src/modules/billing/lib/allocation.ts +515 -0
  537. package/src/modules/billing/lib/allocationEvents.ts +26 -0
  538. package/src/modules/billing/lib/billPeriod.ts +19 -0
  539. package/src/modules/billing/lib/billRunEngine.ts +350 -150
  540. package/src/modules/billing/lib/billingSettings.ts +145 -0
  541. package/src/modules/billing/lib/commandRoute.ts +112 -0
  542. package/src/modules/billing/lib/customerLookup.ts +157 -0
  543. package/src/modules/billing/lib/dateOnly.ts +22 -0
  544. package/src/modules/billing/lib/documentParties.ts +23 -0
  545. package/src/modules/billing/lib/documentTypes.ts +37 -0
  546. package/src/modules/billing/lib/dueDate.ts +26 -0
  547. package/src/modules/billing/lib/iban.ts +36 -0
  548. package/src/modules/billing/lib/invoiceDelivery.ts +196 -0
  549. package/src/modules/billing/lib/invoiceLanguages.ts +57 -0
  550. package/src/modules/billing/lib/invoiceWriter.ts +162 -148
  551. package/src/modules/billing/lib/itemBillingState.ts +67 -0
  552. package/src/modules/billing/lib/itemPriceChange.ts +56 -0
  553. package/src/modules/billing/lib/itemSelector.ts +4 -1
  554. package/src/modules/billing/lib/lineAmounts.ts +61 -0
  555. package/src/modules/billing/lib/memoGuards.ts +41 -0
  556. package/src/modules/billing/lib/navigation.ts +64 -0
  557. package/src/modules/billing/lib/numbering.ts +174 -0
  558. package/src/modules/billing/lib/overdue.ts +60 -0
  559. package/src/modules/billing/lib/paymentCsv.ts +171 -0
  560. package/src/modules/billing/lib/paymentGateway.ts +52 -0
  561. package/src/modules/billing/lib/paymentImport.ts +228 -0
  562. package/src/modules/billing/lib/paymentMatcher.ts +88 -0
  563. package/src/modules/billing/lib/pdf/attachmentStore.ts +60 -0
  564. package/src/modules/billing/lib/pdf/fonts/NotoSans-Bold.ttf +0 -0
  565. package/src/modules/billing/lib/pdf/fonts/NotoSans-Regular.ttf +0 -0
  566. package/src/modules/billing/lib/pdf/fonts/OFL.txt +93 -0
  567. package/src/modules/billing/lib/pdf/fonts/embeddedFonts.ts +9 -0
  568. package/src/modules/billing/lib/pdf/invoiceModel.ts +329 -0
  569. package/src/modules/billing/lib/pdf/invoicePdf.ts +220 -0
  570. package/src/modules/billing/lib/pdf/invoiceTemplate.ts +338 -0
  571. package/src/modules/billing/lib/prepaidConfig.ts +27 -36
  572. package/src/modules/billing/lib/prepaidConsume.ts +29 -6
  573. package/src/modules/billing/lib/prepaidPeriodClose.ts +407 -239
  574. package/src/modules/billing/lib/prepaidTaxPoint.ts +76 -0
  575. package/src/modules/billing/lib/seeds/demo.ts +79 -6
  576. package/src/modules/billing/lib/seeds/paymentsSample.ts +136 -0
  577. package/src/modules/billing/lib/seeds/sellerSettings.ts +78 -0
  578. package/src/modules/billing/lib/servicePeriods.ts +226 -0
  579. package/src/modules/billing/lib/testRunCleanup.ts +42 -0
  580. package/src/modules/billing/lib/topupCapture.ts +3 -4
  581. package/src/modules/billing/lib/topupReceipt.ts +70 -103
  582. package/src/modules/billing/lib/usageRater.ts +1 -1
  583. package/src/modules/billing/lib/usageRunner.ts +17 -5
  584. package/src/modules/billing/lib/vat.ts +56 -0
  585. package/src/modules/billing/migrations/Migration20261114000000_billing_customer_kind.ts +25 -0
  586. package/src/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.ts +37 -0
  587. package/src/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.ts +132 -0
  588. package/src/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.ts +58 -0
  589. package/src/modules/billing/migrations/Migration20261117000000_billing_payments.ts +97 -0
  590. package/src/modules/billing/migrations/Migration20261118000000_billing_memos.ts +21 -0
  591. package/src/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.ts +39 -0
  592. package/src/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.ts +35 -0
  593. package/src/modules/billing/setup.ts +11 -237
  594. package/src/modules/billing/subscribers/credit-memo-auto-send.ts +15 -0
  595. package/src/modules/billing/subscribers/debit-memo-apply-credit.ts +15 -0
  596. package/src/modules/billing/subscribers/debit-memo-auto-send.ts +15 -0
  597. package/src/modules/billing/subscribers/invoice-apply-credit.ts +39 -0
  598. package/src/modules/billing/subscribers/invoice-auto-send.ts +46 -0
  599. package/src/modules/billing/subscribers/payment-captured-to-paid.ts +84 -62
  600. package/src/modules/billing/subscribers/prepaid-topup-captured.ts +4 -8
  601. package/dist/modules/billing/lib/invoiceStatus.js +0 -38
  602. package/dist/modules/billing/lib/invoiceStatus.js.map +0 -7
  603. package/src/modules/billing/__tests__/lib/invoiceStatus.test.ts +0 -97
  604. package/src/modules/billing/lib/invoiceStatus.ts +0 -61
@@ -0,0 +1,39 @@
1
+ function round2(value) {
2
+ const sign = value < 0 ? -1 : 1;
3
+ return sign * Math.round((Math.abs(value) + Number.EPSILON) * 100) / 100;
4
+ }
5
+ function fraction(ratePercent) {
6
+ return Number.isFinite(ratePercent) && ratePercent > 0 ? ratePercent / 100 : 0;
7
+ }
8
+ function lineAmountsFromNet(net, ratePercent) {
9
+ const netRounded = round2(net);
10
+ const tax = round2(netRounded * fraction(ratePercent));
11
+ return { net: netRounded, tax, gross: round2(netRounded + tax) };
12
+ }
13
+ function lineAmountsFromGross(gross, ratePercent) {
14
+ const grossRounded = round2(gross);
15
+ const net = round2(grossRounded / (1 + fraction(ratePercent)));
16
+ return { net, tax: round2(grossRounded - net), gross: grossRounded };
17
+ }
18
+ function money4(value) {
19
+ return (Number.isFinite(value) ? round2(value) : 0).toFixed(4);
20
+ }
21
+ function sumTotals(lines) {
22
+ let net = 0;
23
+ let tax = 0;
24
+ let gross = 0;
25
+ for (const line of lines) {
26
+ net += line.net;
27
+ tax += line.tax;
28
+ gross += line.gross;
29
+ }
30
+ return { subtotalNet: money4(net), taxTotal: money4(tax), totalGross: money4(gross) };
31
+ }
32
+ export {
33
+ lineAmountsFromGross,
34
+ lineAmountsFromNet,
35
+ money4,
36
+ round2,
37
+ sumTotals
38
+ };
39
+ //# sourceMappingURL=vat.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/lib/vat.ts"],
4
+ "sourcesContent": ["/**\n * VAT arithmetic for billing documents (Spec 0 \u2014 replaces core\n * `taxCalculationService`; billing no longer depends on core `sales`).\n *\n * Pure. Money is rounded half-up to 2 dp (fiscal documents) and the\n * identity `net + tax = gross` always holds exactly:\n * - from net: tax = round2(net \u00D7 rate), gross = net + tax\n * - from gross: net = round2(gross / (1 + rate)), tax = gross \u2212 net\n * Per-line rounding; document totals are sums of rounded lines (both\n * methods are permitted in PL/EU and this keeps documents internally\n * consistent).\n */\n\nexport type VatAmounts = { net: number; tax: number; gross: number }\n\nexport function round2(value: number): number {\n const sign = value < 0 ? -1 : 1\n return (sign * Math.round((Math.abs(value) + Number.EPSILON) * 100)) / 100\n}\n\nfunction fraction(ratePercent: number): number {\n return Number.isFinite(ratePercent) && ratePercent > 0 ? ratePercent / 100 : 0\n}\n\n/** Amounts for a net line value (sign preserved for credits). */\nexport function lineAmountsFromNet(net: number, ratePercent: number): VatAmounts {\n const netRounded = round2(net)\n const tax = round2(netRounded * fraction(ratePercent))\n return { net: netRounded, tax, gross: round2(netRounded + tax) }\n}\n\n/** Split a gross amount (e.g. a top-up payment) into net + tax. */\nexport function lineAmountsFromGross(gross: number, ratePercent: number): VatAmounts {\n const grossRounded = round2(gross)\n const net = round2(grossRounded / (1 + fraction(ratePercent)))\n return { net, tax: round2(grossRounded - net), gross: grossRounded }\n}\n\n/** Column format used by billing numeric(18,4) money columns. */\nexport function money4(value: number): string {\n return (Number.isFinite(value) ? round2(value) : 0).toFixed(4)\n}\n\nexport type DocumentTotals = { subtotalNet: string; taxTotal: string; totalGross: string }\n\nexport function sumTotals(lines: ReadonlyArray<VatAmounts>): DocumentTotals {\n let net = 0\n let tax = 0\n let gross = 0\n for (const line of lines) {\n net += line.net\n tax += line.tax\n gross += line.gross\n }\n return { subtotalNet: money4(net), taxTotal: money4(tax), totalGross: money4(gross) }\n}\n"],
5
+ "mappings": "AAeO,SAAS,OAAO,OAAuB;AAC5C,QAAM,OAAO,QAAQ,IAAI,KAAK;AAC9B,SAAQ,OAAO,KAAK,OAAO,KAAK,IAAI,KAAK,IAAI,OAAO,WAAW,GAAG,IAAK;AACzE;AAEA,SAAS,SAAS,aAA6B;AAC7C,SAAO,OAAO,SAAS,WAAW,KAAK,cAAc,IAAI,cAAc,MAAM;AAC/E;AAGO,SAAS,mBAAmB,KAAa,aAAiC;AAC/E,QAAM,aAAa,OAAO,GAAG;AAC7B,QAAM,MAAM,OAAO,aAAa,SAAS,WAAW,CAAC;AACrD,SAAO,EAAE,KAAK,YAAY,KAAK,OAAO,OAAO,aAAa,GAAG,EAAE;AACjE;AAGO,SAAS,qBAAqB,OAAe,aAAiC;AACnF,QAAM,eAAe,OAAO,KAAK;AACjC,QAAM,MAAM,OAAO,gBAAgB,IAAI,SAAS,WAAW,EAAE;AAC7D,SAAO,EAAE,KAAK,KAAK,OAAO,eAAe,GAAG,GAAG,OAAO,aAAa;AACrE;AAGO,SAAS,OAAO,OAAuB;AAC5C,UAAQ,OAAO,SAAS,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,QAAQ,CAAC;AAC/D;AAIO,SAAS,UAAU,OAAkD;AAC1E,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,aAAW,QAAQ,OAAO;AACxB,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,aAAS,KAAK;AAAA,EAChB;AACA,SAAO,EAAE,aAAa,OAAO,GAAG,GAAG,UAAU,OAAO,GAAG,GAAG,YAAY,OAAO,KAAK,EAAE;AACtF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261114000000_billing_customer_kind extends Migration {
3
+ async up() {
4
+ this.addSql(
5
+ `alter table "billing_accounts" add column if not exists "customer_kind" text not null default 'company';`
6
+ );
7
+ }
8
+ async down() {
9
+ this.addSql(`alter table "billing_accounts" drop column if exists "customer_kind";`);
10
+ }
11
+ }
12
+ export {
13
+ Migration20261114000000_billing_customer_kind
14
+ };
15
+ //# sourceMappingURL=Migration20261114000000_billing_customer_kind.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261114000000_billing_customer_kind.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * B2C billing accounts (Spec E, Phase 1).\n *\n * Adds `billing_accounts.customer_kind` ('company' | 'person'). Additive\n * only: existing accounts default to 'company', which is what they were\n * (the account form could only pick companies until now).\n *\n * Hand-written, like the package's earlier migrations: `yarn mercato db\n * generate` only diffs `@app` modules, so it never reaches this package\n * module. The column mirrors `data/entities.ts` 1:1 so a future generator\n * run diffs clean.\n */\nexport class Migration20261114000000_billing_customer_kind extends Migration {\n async up(): Promise<void> {\n this.addSql(\n `alter table \"billing_accounts\" add column if not exists \"customer_kind\" text not null default 'company';`,\n )\n }\n\n async down(): Promise<void> {\n this.addSql(`alter table \"billing_accounts\" drop column if exists \"customer_kind\";`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAcnB,MAAM,sDAAsD,UAAU;AAAA,EAC3E,MAAM,KAAoB;AACxB,SAAK;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK,OAAO,uEAAuE;AAAA,EACrF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261114100000_billing_cycle_semantics extends Migration {
3
+ async up() {
4
+ this.addSql(
5
+ `alter table "billing_items" add column if not exists "charge_timing" text not null default 'in_advance';`
6
+ );
7
+ this.addSql(
8
+ `alter table "billing_items" add column if not exists "prorate" boolean not null default true;`
9
+ );
10
+ this.addSql(`alter table "billing_run_outcomes" add column if not exists "cycles" jsonb null;`);
11
+ this.addSql(`alter table "billing_runs" drop column if exists "catch_up";`);
12
+ }
13
+ async down() {
14
+ this.addSql(
15
+ `alter table "billing_runs" add column if not exists "catch_up" boolean not null default false;`
16
+ );
17
+ this.addSql(`alter table "billing_run_outcomes" drop column if exists "cycles";`);
18
+ this.addSql(`alter table "billing_items" drop column if exists "prorate";`);
19
+ this.addSql(`alter table "billing_items" drop column if exists "charge_timing";`);
20
+ }
21
+ }
22
+ export {
23
+ Migration20261114100000_billing_cycle_semantics
24
+ };
25
+ //# sourceMappingURL=Migration20261114100000_billing_cycle_semantics.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * Billing cycle semantics (Spec A).\n *\n * - `billing_items.charge_timing` ('in_advance' | 'in_arrears', default\n * 'in_advance') and `billing_items.prorate` (default true) \u2014 recurring\n * items are billed in advance and partial periods are prorated.\n * - `billing_run_outcomes.cycles` \u2014 per-bill-date breakdown of a run.\n * - Drops `billing_runs.catch_up`: every run now catches up on all due\n * cycles, so the flag has no meaning. Per the billing improvements\n * decision D14 all instances are reseeded; no data is migrated.\n *\n * Hand-written like the package's earlier migrations: `yarn mercato db\n * generate` only diffs `@app` modules. Columns mirror `data/entities.ts` 1:1.\n */\nexport class Migration20261114100000_billing_cycle_semantics extends Migration {\n async up(): Promise<void> {\n this.addSql(\n `alter table \"billing_items\" add column if not exists \"charge_timing\" text not null default 'in_advance';`,\n )\n this.addSql(\n `alter table \"billing_items\" add column if not exists \"prorate\" boolean not null default true;`,\n )\n this.addSql(`alter table \"billing_run_outcomes\" add column if not exists \"cycles\" jsonb null;`)\n this.addSql(`alter table \"billing_runs\" drop column if exists \"catch_up\";`)\n }\n\n async down(): Promise<void> {\n this.addSql(\n `alter table \"billing_runs\" add column if not exists \"catch_up\" boolean not null default false;`,\n )\n this.addSql(`alter table \"billing_run_outcomes\" drop column if exists \"cycles\";`)\n this.addSql(`alter table \"billing_items\" drop column if exists \"prorate\";`)\n this.addSql(`alter table \"billing_items\" drop column if exists \"charge_timing\";`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAgBnB,MAAM,wDAAwD,UAAU;AAAA,EAC7E,MAAM,KAAoB;AACxB,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK,OAAO,kFAAkF;AAC9F,SAAK,OAAO,8DAA8D;AAAA,EAC5E;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK,OAAO,oEAAoE;AAChF,SAAK,OAAO,8DAA8D;AAC1E,SAAK,OAAO,oEAAoE;AAAA,EAClF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,115 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261115000000_billing_invoice_ledger extends Migration {
3
+ async up() {
4
+ this.addSql(`create table if not exists "billing_invoices" (
5
+ "id" uuid not null default gen_random_uuid(),
6
+ "organization_id" uuid not null,
7
+ "tenant_id" uuid not null,
8
+ "bill_account_id" uuid not null,
9
+ "document_type" text not null default 'invoice',
10
+ "number" text not null,
11
+ "series" text null,
12
+ "status" text not null default 'draft',
13
+ "test_run" boolean not null default false,
14
+ "bill_run_id" uuid null,
15
+ "bill_date" date null,
16
+ "period_start" date null,
17
+ "period_end" date null,
18
+ "issue_date" date null,
19
+ "due_date" date null,
20
+ "currency_code" text not null,
21
+ "subtotal_net" numeric(18, 4) not null default 0,
22
+ "tax_total" numeric(18, 4) not null default 0,
23
+ "total_gross" numeric(18, 4) not null default 0,
24
+ "paid_total" numeric(18, 4) not null default 0,
25
+ "credited_total" numeric(18, 4) not null default 0,
26
+ "outstanding" numeric(18, 4) not null default 0,
27
+ "corrects_invoice_id" uuid null,
28
+ "correction_reason" text null,
29
+ "buyer_snapshot" jsonb null,
30
+ "seller_snapshot" jsonb null,
31
+ "pdf_attachment_id" uuid null,
32
+ "topup_id" uuid null,
33
+ "posted_at" timestamptz null,
34
+ "metadata" jsonb null,
35
+ "created_at" timestamptz not null,
36
+ "updated_at" timestamptz not null,
37
+ "deleted_at" timestamptz null,
38
+ constraint "billing_invoices_pkey" primary key ("id")
39
+ );`);
40
+ this.addSql(`create index if not exists "billing_invoices_status_idx" on "billing_invoices" ("tenant_id", "organization_id", "status");`);
41
+ this.addSql(`create index if not exists "billing_invoices_account_idx" on "billing_invoices" ("bill_account_id", "status", "due_date");`);
42
+ this.addSql(`create index if not exists "billing_invoices_run_idx" on "billing_invoices" ("bill_run_id");`);
43
+ this.addSql(`create index if not exists "billing_invoices_corrects_idx" on "billing_invoices" ("corrects_invoice_id");`);
44
+ this.addSql(`create index if not exists "billing_invoices_topup_idx" on "billing_invoices" ("topup_id");`);
45
+ this.addSql(`create unique index if not exists "billing_invoices_bill_date_uq" on "billing_invoices"
46
+ ("tenant_id", "organization_id", "bill_account_id", "bill_date", "test_run")
47
+ where "document_type" = 'invoice' and "deleted_at" is null and "bill_date" is not null;`);
48
+ this.addSql(`create unique index if not exists "billing_invoices_number_uq" on "billing_invoices"
49
+ ("tenant_id", "organization_id", "number") where "series" is not null;`);
50
+ this.addSql(`create table if not exists "billing_invoice_lines" (
51
+ "id" uuid not null default gen_random_uuid(),
52
+ "organization_id" uuid not null,
53
+ "tenant_id" uuid not null,
54
+ "invoice_id" uuid not null,
55
+ "line_number" int not null,
56
+ "billing_item_id" uuid null,
57
+ "billing_type" text not null,
58
+ "description" text not null,
59
+ "quantity" numeric(18, 4) not null,
60
+ "unit_price_net" numeric(18, 4) not null,
61
+ "tax_rate" numeric(7, 4) not null default 0,
62
+ "net_amount" numeric(18, 4) not null,
63
+ "tax_amount" numeric(18, 4) not null default 0,
64
+ "gross_amount" numeric(18, 4) not null,
65
+ "service_period_start" date null,
66
+ "service_period_end" date null,
67
+ "corrects_line_id" uuid null,
68
+ "metadata" jsonb null,
69
+ "created_at" timestamptz not null,
70
+ "updated_at" timestamptz not null,
71
+ "deleted_at" timestamptz null,
72
+ constraint "billing_invoice_lines_pkey" primary key ("id")
73
+ );`);
74
+ this.addSql(`create index if not exists "billing_invoice_lines_invoice_idx" on "billing_invoice_lines" ("invoice_id", "line_number");`);
75
+ this.addSql(`create table if not exists "billing_document_sequences" (
76
+ "id" uuid not null default gen_random_uuid(),
77
+ "organization_id" uuid not null,
78
+ "tenant_id" uuid not null,
79
+ "series" text not null,
80
+ "scope_key" text not null default '',
81
+ "next_value" bigint not null default 1,
82
+ "created_at" timestamptz not null,
83
+ "updated_at" timestamptz not null,
84
+ constraint "billing_document_sequences_pkey" primary key ("id"),
85
+ constraint "billing_document_sequences_scope_uq" unique ("tenant_id", "organization_id", "series", "scope_key")
86
+ );`);
87
+ this.addSql(`create table if not exists "billing_settings" (
88
+ "id" uuid not null default gen_random_uuid(),
89
+ "organization_id" uuid not null,
90
+ "tenant_id" uuid not null,
91
+ "low_balance_threshold_default" numeric(18, 4) not null default 0,
92
+ "near_limit_buffer_default" numeric(18, 4) not null default 0,
93
+ "statement_enabled" boolean not null default true,
94
+ "topup_tax_rate" numeric(7, 4) not null default 0,
95
+ "topup_provider" text not null default 'stripe',
96
+ "number_masks" jsonb null,
97
+ "created_at" timestamptz not null,
98
+ "updated_at" timestamptz not null,
99
+ "deleted_at" timestamptz null,
100
+ constraint "billing_settings_pkey" primary key ("id")
101
+ );`);
102
+ this.addSql(`create unique index if not exists "billing_settings_org_uq" on "billing_settings"
103
+ ("tenant_id", "organization_id") where "deleted_at" is null;`);
104
+ }
105
+ async down() {
106
+ this.addSql(`drop table if exists "billing_settings" cascade;`);
107
+ this.addSql(`drop table if exists "billing_document_sequences" cascade;`);
108
+ this.addSql(`drop table if exists "billing_invoice_lines" cascade;`);
109
+ this.addSql(`drop table if exists "billing_invoices" cascade;`);
110
+ }
111
+ }
112
+ export {
113
+ Migration20261115000000_billing_invoice_ledger
114
+ };
115
+ //# sourceMappingURL=Migration20261115000000_billing_invoice_ledger.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * Standalone invoice ledger (Spec 0).\n *\n * Billing stops writing core `sales_invoices`: invoices, memos and top-up\n * receipts move to `billing_invoices` / `billing_invoice_lines`, numbered by\n * `billing_document_sequences`; prepaid settings move from core `configs`\n * into per-organization `billing_settings`.\n *\n * No data migration (billing improvements decision D14 \u2014 instances are\n * reseeded). Billing rows already in `sales_invoices` are left untouched.\n *\n * Hand-written: the partial unique indexes can't be expressed in entity\n * decorators, and `yarn mercato db generate` only diffs `@app` modules.\n */\nexport class Migration20261115000000_billing_invoice_ledger extends Migration {\n async up(): Promise<void> {\n this.addSql(`create table if not exists \"billing_invoices\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"bill_account_id\" uuid not null,\n \"document_type\" text not null default 'invoice',\n \"number\" text not null,\n \"series\" text null,\n \"status\" text not null default 'draft',\n \"test_run\" boolean not null default false,\n \"bill_run_id\" uuid null,\n \"bill_date\" date null,\n \"period_start\" date null,\n \"period_end\" date null,\n \"issue_date\" date null,\n \"due_date\" date null,\n \"currency_code\" text not null,\n \"subtotal_net\" numeric(18, 4) not null default 0,\n \"tax_total\" numeric(18, 4) not null default 0,\n \"total_gross\" numeric(18, 4) not null default 0,\n \"paid_total\" numeric(18, 4) not null default 0,\n \"credited_total\" numeric(18, 4) not null default 0,\n \"outstanding\" numeric(18, 4) not null default 0,\n \"corrects_invoice_id\" uuid null,\n \"correction_reason\" text null,\n \"buyer_snapshot\" jsonb null,\n \"seller_snapshot\" jsonb null,\n \"pdf_attachment_id\" uuid null,\n \"topup_id\" uuid null,\n \"posted_at\" timestamptz null,\n \"metadata\" jsonb null,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n \"deleted_at\" timestamptz null,\n constraint \"billing_invoices_pkey\" primary key (\"id\")\n );`)\n this.addSql(`create index if not exists \"billing_invoices_status_idx\" on \"billing_invoices\" (\"tenant_id\", \"organization_id\", \"status\");`)\n this.addSql(`create index if not exists \"billing_invoices_account_idx\" on \"billing_invoices\" (\"bill_account_id\", \"status\", \"due_date\");`)\n this.addSql(`create index if not exists \"billing_invoices_run_idx\" on \"billing_invoices\" (\"bill_run_id\");`)\n this.addSql(`create index if not exists \"billing_invoices_corrects_idx\" on \"billing_invoices\" (\"corrects_invoice_id\");`)\n this.addSql(`create index if not exists \"billing_invoices_topup_idx\" on \"billing_invoices\" (\"topup_id\");`)\n // Spec A dedupe backstop: one invoice per (account, bill date, test flag).\n this.addSql(`create unique index if not exists \"billing_invoices_bill_date_uq\" on \"billing_invoices\"\n (\"tenant_id\", \"organization_id\", \"bill_account_id\", \"bill_date\", \"test_run\")\n where \"document_type\" = 'invoice' and \"deleted_at\" is null and \"bill_date\" is not null;`)\n // A posted number is unique within the organization.\n this.addSql(`create unique index if not exists \"billing_invoices_number_uq\" on \"billing_invoices\"\n (\"tenant_id\", \"organization_id\", \"number\") where \"series\" is not null;`)\n\n this.addSql(`create table if not exists \"billing_invoice_lines\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"invoice_id\" uuid not null,\n \"line_number\" int not null,\n \"billing_item_id\" uuid null,\n \"billing_type\" text not null,\n \"description\" text not null,\n \"quantity\" numeric(18, 4) not null,\n \"unit_price_net\" numeric(18, 4) not null,\n \"tax_rate\" numeric(7, 4) not null default 0,\n \"net_amount\" numeric(18, 4) not null,\n \"tax_amount\" numeric(18, 4) not null default 0,\n \"gross_amount\" numeric(18, 4) not null,\n \"service_period_start\" date null,\n \"service_period_end\" date null,\n \"corrects_line_id\" uuid null,\n \"metadata\" jsonb null,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n \"deleted_at\" timestamptz null,\n constraint \"billing_invoice_lines_pkey\" primary key (\"id\")\n );`)\n this.addSql(`create index if not exists \"billing_invoice_lines_invoice_idx\" on \"billing_invoice_lines\" (\"invoice_id\", \"line_number\");`)\n\n this.addSql(`create table if not exists \"billing_document_sequences\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"series\" text not null,\n \"scope_key\" text not null default '',\n \"next_value\" bigint not null default 1,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n constraint \"billing_document_sequences_pkey\" primary key (\"id\"),\n constraint \"billing_document_sequences_scope_uq\" unique (\"tenant_id\", \"organization_id\", \"series\", \"scope_key\")\n );`)\n\n this.addSql(`create table if not exists \"billing_settings\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"low_balance_threshold_default\" numeric(18, 4) not null default 0,\n \"near_limit_buffer_default\" numeric(18, 4) not null default 0,\n \"statement_enabled\" boolean not null default true,\n \"topup_tax_rate\" numeric(7, 4) not null default 0,\n \"topup_provider\" text not null default 'stripe',\n \"number_masks\" jsonb null,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n \"deleted_at\" timestamptz null,\n constraint \"billing_settings_pkey\" primary key (\"id\")\n );`)\n this.addSql(`create unique index if not exists \"billing_settings_org_uq\" on \"billing_settings\"\n (\"tenant_id\", \"organization_id\") where \"deleted_at\" is null;`)\n }\n\n async down(): Promise<void> {\n this.addSql(`drop table if exists \"billing_settings\" cascade;`)\n this.addSql(`drop table if exists \"billing_document_sequences\" cascade;`)\n this.addSql(`drop table if exists \"billing_invoice_lines\" cascade;`)\n this.addSql(`drop table if exists \"billing_invoices\" cascade;`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAgBnB,MAAM,uDAAuD,UAAU;AAAA,EAC5E,MAAM,KAAoB;AACxB,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAmCT;AACH,SAAK,OAAO,4HAA4H;AACxI,SAAK,OAAO,4HAA4H;AACxI,SAAK,OAAO,8FAA8F;AAC1G,SAAK,OAAO,2GAA2G;AACvH,SAAK,OAAO,6FAA6F;AAEzG,SAAK,OAAO;AAAA;AAAA,8FAE8E;AAE1F,SAAK,OAAO;AAAA,6EAC6D;AAEzE,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAuBT;AACH,SAAK,OAAO,0HAA0H;AAEtI,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWT;AAEH,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAcT;AACH,SAAK,OAAO;AAAA,mEACmD;AAAA,EACjE;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK,OAAO,kDAAkD;AAC9D,SAAK,OAAO,4DAA4D;AACxE,SAAK,OAAO,uDAAuD;AACnE,SAAK,OAAO,kDAAkD;AAAA,EAChE;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,47 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261116000000_billing_invoice_documents extends Migration {
3
+ async up() {
4
+ this.addSql(
5
+ `alter table "billing_items" add column if not exists "tax_rate" numeric(7, 4) not null default '0';`
6
+ );
7
+ this.addSql(
8
+ `alter table "billing_accounts" add column if not exists "payment_terms_days" int null, add column if not exists "auto_send_invoice" boolean not null default false;`
9
+ );
10
+ this.addSql(
11
+ `alter table "billing_settings"
12
+ add column if not exists "legal_name" text null,
13
+ add column if not exists "seller_address" jsonb null,
14
+ add column if not exists "tax_id" text null,
15
+ add column if not exists "bank_name" text null,
16
+ add column if not exists "iban" text null,
17
+ add column if not exists "bic" text null,
18
+ add column if not exists "invoice_footer" text null,
19
+ add column if not exists "logo_attachment_id" uuid null,
20
+ add column if not exists "default_payment_terms_days" int not null default 14,
21
+ add column if not exists "default_tax_rate" numeric(7, 4) not null default '23';`
22
+ );
23
+ }
24
+ async down() {
25
+ this.addSql(
26
+ `alter table "billing_settings"
27
+ drop column if exists "legal_name",
28
+ drop column if exists "seller_address",
29
+ drop column if exists "tax_id",
30
+ drop column if exists "bank_name",
31
+ drop column if exists "iban",
32
+ drop column if exists "bic",
33
+ drop column if exists "invoice_footer",
34
+ drop column if exists "logo_attachment_id",
35
+ drop column if exists "default_payment_terms_days",
36
+ drop column if exists "default_tax_rate";`
37
+ );
38
+ this.addSql(
39
+ `alter table "billing_accounts" drop column if exists "payment_terms_days", drop column if exists "auto_send_invoice";`
40
+ );
41
+ this.addSql(`alter table "billing_items" drop column if exists "tax_rate";`);
42
+ }
43
+ }
44
+ export {
45
+ Migration20261116000000_billing_invoice_documents
46
+ };
47
+ //# sourceMappingURL=Migration20261116000000_billing_invoice_documents.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * Invoice documents (Spec B): VAT per item, payment terms, seller settings.\n *\n * - `billing_items.tax_rate` \u2014 existing items get 0 (P-D5: no back-fill, a\n * default would silently re-price live subscriptions; demo data reseeds);\n * - `billing_accounts.payment_terms_days` / `auto_send_invoice`;\n * - `billing_settings` seller block, bank, footer, logo, default terms and\n * default tax rate.\n *\n * Additive only. Hand-written like the package's earlier migrations (`yarn\n * mercato db generate` only diffs `@app` modules); columns mirror\n * `data/entities.ts` 1:1.\n */\nexport class Migration20261116000000_billing_invoice_documents extends Migration {\n async up(): Promise<void> {\n this.addSql(\n `alter table \"billing_items\" add column if not exists \"tax_rate\" numeric(7, 4) not null default '0';`,\n )\n this.addSql(\n `alter table \"billing_accounts\" add column if not exists \"payment_terms_days\" int null, add column if not exists \"auto_send_invoice\" boolean not null default false;`,\n )\n this.addSql(\n `alter table \"billing_settings\"\n add column if not exists \"legal_name\" text null,\n add column if not exists \"seller_address\" jsonb null,\n add column if not exists \"tax_id\" text null,\n add column if not exists \"bank_name\" text null,\n add column if not exists \"iban\" text null,\n add column if not exists \"bic\" text null,\n add column if not exists \"invoice_footer\" text null,\n add column if not exists \"logo_attachment_id\" uuid null,\n add column if not exists \"default_payment_terms_days\" int not null default 14,\n add column if not exists \"default_tax_rate\" numeric(7, 4) not null default '23';`,\n )\n }\n\n async down(): Promise<void> {\n this.addSql(\n `alter table \"billing_settings\"\n drop column if exists \"legal_name\",\n drop column if exists \"seller_address\",\n drop column if exists \"tax_id\",\n drop column if exists \"bank_name\",\n drop column if exists \"iban\",\n drop column if exists \"bic\",\n drop column if exists \"invoice_footer\",\n drop column if exists \"logo_attachment_id\",\n drop column if exists \"default_payment_terms_days\",\n drop column if exists \"default_tax_rate\";`,\n )\n this.addSql(\n `alter table \"billing_accounts\" drop column if exists \"payment_terms_days\", drop column if exists \"auto_send_invoice\";`,\n )\n this.addSql(`alter table \"billing_items\" drop column if exists \"tax_rate\";`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAenB,MAAM,0DAA0D,UAAU;AAAA,EAC/E,MAAM,KAAoB;AACxB,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWF;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK,OAAO,+DAA+D;AAAA,EAC7E;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,89 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261117000000_billing_payments extends Migration {
3
+ async up() {
4
+ this.addSql(`create table if not exists "billing_payments" (
5
+ "id" uuid not null default gen_random_uuid(),
6
+ "organization_id" uuid not null,
7
+ "tenant_id" uuid not null,
8
+ "received_at" date not null,
9
+ "amount" numeric(18, 4) not null,
10
+ "currency_code" text not null,
11
+ "reference" text null,
12
+ "payer_name" text null,
13
+ "payer_account" text null,
14
+ "source" text not null,
15
+ "import_id" uuid null,
16
+ "bill_account_id" uuid null,
17
+ "status" text not null,
18
+ "unallocated_amount" numeric(18, 4) not null,
19
+ "match_reason" text null,
20
+ "source_ref" text not null,
21
+ "external_ref" text null,
22
+ "topup_id" uuid null,
23
+ "metadata" jsonb null,
24
+ "created_at" timestamptz not null,
25
+ "updated_at" timestamptz not null,
26
+ "deleted_at" timestamptz null,
27
+ constraint "billing_payments_pkey" primary key ("id"),
28
+ constraint "billing_payments_amount_positive" check ("amount" > 0),
29
+ constraint "billing_payments_unallocated_range" check ("unallocated_amount" >= 0 and "unallocated_amount" <= "amount")
30
+ );`);
31
+ this.addSql(`create index if not exists "billing_payments_status_idx" on "billing_payments" ("tenant_id", "organization_id", "status");`);
32
+ this.addSql(`create index if not exists "billing_payments_account_idx" on "billing_payments" ("bill_account_id", "status");`);
33
+ this.addSql(`create index if not exists "billing_payments_import_idx" on "billing_payments" ("import_id");`);
34
+ this.addSql(
35
+ `create unique index if not exists "billing_payments_source_ref_uq" on "billing_payments" ("tenant_id", "organization_id", "source_ref") where "deleted_at" is null;`
36
+ );
37
+ this.addSql(
38
+ `create unique index if not exists "billing_payments_external_ref_uq" on "billing_payments" ("tenant_id", "organization_id", "external_ref") where "external_ref" is not null;`
39
+ );
40
+ this.addSql(`create table if not exists "billing_allocations" (
41
+ "id" uuid not null default gen_random_uuid(),
42
+ "organization_id" uuid not null,
43
+ "tenant_id" uuid not null,
44
+ "source_type" text not null,
45
+ "source_id" uuid not null,
46
+ "invoice_id" uuid not null,
47
+ "bill_account_id" uuid not null,
48
+ "amount" numeric(18, 4) not null,
49
+ "currency_code" text not null,
50
+ "allocated_by" text not null,
51
+ "user_id" uuid null,
52
+ "deallocated_by_user_id" uuid null,
53
+ "created_at" timestamptz not null,
54
+ "updated_at" timestamptz not null,
55
+ "deleted_at" timestamptz null,
56
+ constraint "billing_allocations_pkey" primary key ("id"),
57
+ constraint "billing_allocations_amount_positive" check ("amount" > 0)
58
+ );`);
59
+ this.addSql(`create index if not exists "billing_allocations_source_idx" on "billing_allocations" ("source_type", "source_id") where "deleted_at" is null;`);
60
+ this.addSql(`create index if not exists "billing_allocations_invoice_idx" on "billing_allocations" ("invoice_id") where "deleted_at" is null;`);
61
+ this.addSql(`create index if not exists "billing_allocations_account_idx" on "billing_allocations" ("bill_account_id") where "deleted_at" is null;`);
62
+ this.addSql(`create table if not exists "billing_payment_imports" (
63
+ "id" uuid not null default gen_random_uuid(),
64
+ "organization_id" uuid not null,
65
+ "tenant_id" uuid not null,
66
+ "file_name" text not null,
67
+ "row_count" int not null,
68
+ "counts" jsonb null,
69
+ "errors" jsonb null,
70
+ "user_id" uuid null,
71
+ "created_at" timestamptz not null,
72
+ "updated_at" timestamptz not null,
73
+ "deleted_at" timestamptz null,
74
+ constraint "billing_payment_imports_pkey" primary key ("id")
75
+ );`);
76
+ this.addSql(
77
+ `create index if not exists "billing_payment_imports_scope_idx" on "billing_payment_imports" ("tenant_id", "organization_id", "created_at");`
78
+ );
79
+ }
80
+ async down() {
81
+ this.addSql(`drop table if exists "billing_payment_imports";`);
82
+ this.addSql(`drop table if exists "billing_allocations";`);
83
+ this.addSql(`drop table if exists "billing_payments";`);
84
+ }
85
+ }
86
+ export {
87
+ Migration20261117000000_billing_payments
88
+ };
89
+ //# sourceMappingURL=Migration20261117000000_billing_payments.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261117000000_billing_payments.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * Payments (Spec C): billing-owned payment register, source-typed\n * allocations (payments now, credit memos in Spec D) and CSV import batches.\n *\n * Hand-written like the package's earlier migrations (`yarn mercato db\n * generate` only diffs `@app` modules). Partial unique indexes cannot be\n * expressed with decorators, so they live here only.\n */\nexport class Migration20261117000000_billing_payments extends Migration {\n async up(): Promise<void> {\n this.addSql(`create table if not exists \"billing_payments\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"received_at\" date not null,\n \"amount\" numeric(18, 4) not null,\n \"currency_code\" text not null,\n \"reference\" text null,\n \"payer_name\" text null,\n \"payer_account\" text null,\n \"source\" text not null,\n \"import_id\" uuid null,\n \"bill_account_id\" uuid null,\n \"status\" text not null,\n \"unallocated_amount\" numeric(18, 4) not null,\n \"match_reason\" text null,\n \"source_ref\" text not null,\n \"external_ref\" text null,\n \"topup_id\" uuid null,\n \"metadata\" jsonb null,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n \"deleted_at\" timestamptz null,\n constraint \"billing_payments_pkey\" primary key (\"id\"),\n constraint \"billing_payments_amount_positive\" check (\"amount\" > 0),\n constraint \"billing_payments_unallocated_range\" check (\"unallocated_amount\" >= 0 and \"unallocated_amount\" <= \"amount\")\n );`)\n this.addSql(`create index if not exists \"billing_payments_status_idx\" on \"billing_payments\" (\"tenant_id\", \"organization_id\", \"status\");`)\n this.addSql(`create index if not exists \"billing_payments_account_idx\" on \"billing_payments\" (\"bill_account_id\", \"status\");`)\n this.addSql(`create index if not exists \"billing_payments_import_idx\" on \"billing_payments\" (\"import_id\");`)\n this.addSql(\n `create unique index if not exists \"billing_payments_source_ref_uq\" on \"billing_payments\" (\"tenant_id\", \"organization_id\", \"source_ref\") where \"deleted_at\" is null;`,\n )\n this.addSql(\n `create unique index if not exists \"billing_payments_external_ref_uq\" on \"billing_payments\" (\"tenant_id\", \"organization_id\", \"external_ref\") where \"external_ref\" is not null;`,\n )\n\n this.addSql(`create table if not exists \"billing_allocations\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"source_type\" text not null,\n \"source_id\" uuid not null,\n \"invoice_id\" uuid not null,\n \"bill_account_id\" uuid not null,\n \"amount\" numeric(18, 4) not null,\n \"currency_code\" text not null,\n \"allocated_by\" text not null,\n \"user_id\" uuid null,\n \"deallocated_by_user_id\" uuid null,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n \"deleted_at\" timestamptz null,\n constraint \"billing_allocations_pkey\" primary key (\"id\"),\n constraint \"billing_allocations_amount_positive\" check (\"amount\" > 0)\n );`)\n this.addSql(`create index if not exists \"billing_allocations_source_idx\" on \"billing_allocations\" (\"source_type\", \"source_id\") where \"deleted_at\" is null;`)\n this.addSql(`create index if not exists \"billing_allocations_invoice_idx\" on \"billing_allocations\" (\"invoice_id\") where \"deleted_at\" is null;`)\n this.addSql(`create index if not exists \"billing_allocations_account_idx\" on \"billing_allocations\" (\"bill_account_id\") where \"deleted_at\" is null;`)\n\n this.addSql(`create table if not exists \"billing_payment_imports\" (\n \"id\" uuid not null default gen_random_uuid(),\n \"organization_id\" uuid not null,\n \"tenant_id\" uuid not null,\n \"file_name\" text not null,\n \"row_count\" int not null,\n \"counts\" jsonb null,\n \"errors\" jsonb null,\n \"user_id\" uuid null,\n \"created_at\" timestamptz not null,\n \"updated_at\" timestamptz not null,\n \"deleted_at\" timestamptz null,\n constraint \"billing_payment_imports_pkey\" primary key (\"id\")\n );`)\n this.addSql(\n `create index if not exists \"billing_payment_imports_scope_idx\" on \"billing_payment_imports\" (\"tenant_id\", \"organization_id\", \"created_at\");`,\n )\n }\n\n async down(): Promise<void> {\n this.addSql(`drop table if exists \"billing_payment_imports\";`)\n this.addSql(`drop table if exists \"billing_allocations\";`)\n this.addSql(`drop table if exists \"billing_payments\";`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAUnB,MAAM,iDAAiD,UAAU;AAAA,EACtE,MAAM,KAAoB;AACxB,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA0BT;AACH,SAAK,OAAO,4HAA4H;AACxI,SAAK,OAAO,gHAAgH;AAC5H,SAAK,OAAO,+FAA+F;AAC3G,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AAEA,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAkBT;AACH,SAAK,OAAO,+IAA+I;AAC3J,SAAK,OAAO,kIAAkI;AAC9I,SAAK,OAAO,uIAAuI;AAEnJ,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAaT;AACH,SAAK;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK,OAAO,iDAAiD;AAC7D,SAAK,OAAO,6CAA6C;AACzD,SAAK,OAAO,0CAA0C;AAAA,EACxD;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261118000000_billing_memos extends Migration {
3
+ async up() {
4
+ this.addSql(
5
+ `alter table "billing_invoices" add column if not exists "corrects_invoice_number" text null, add column if not exists "corrects_issue_date" date null;`
6
+ );
7
+ }
8
+ async down() {
9
+ this.addSql(
10
+ `alter table "billing_invoices" drop column if exists "corrects_invoice_number", drop column if exists "corrects_issue_date";`
11
+ );
12
+ }
13
+ }
14
+ export {
15
+ Migration20261118000000_billing_memos
16
+ };
17
+ //# sourceMappingURL=Migration20261118000000_billing_memos.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261118000000_billing_memos.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * Credit / debit memos (Spec D). Memo columns `document_type`,\n * `corrects_invoice_id`, `correction_reason` and `credited_total` exist since\n * Spec 0; this adds the snapshot of the corrected document printed on the\n * memo. Additive, hand-written like the package's earlier migrations.\n */\nexport class Migration20261118000000_billing_memos extends Migration {\n async up(): Promise<void> {\n this.addSql(\n `alter table \"billing_invoices\" add column if not exists \"corrects_invoice_number\" text null, add column if not exists \"corrects_issue_date\" date null;`,\n )\n }\n\n async down(): Promise<void> {\n this.addSql(\n `alter table \"billing_invoices\" drop column if exists \"corrects_invoice_number\", drop column if exists \"corrects_issue_date\";`,\n )\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAQnB,MAAM,8CAA8C,UAAU;AAAA,EACnE,MAAM,KAAoB;AACxB,SAAK;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261119000000_billing_operator_feedback extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "billing_items" add column if not exists "price_basis" text not null default 'net';`);
5
+ this.addSql(
6
+ `alter table "billing_items" add constraint "billing_items_price_basis_check" check ("price_basis" in ('net', 'gross'));`
7
+ );
8
+ this.addSql(
9
+ `alter table "billing_settings" add column if not exists "prepaid_tax_point" text not null default 'topup';`
10
+ );
11
+ this.addSql(
12
+ `alter table "billing_settings" add constraint "billing_settings_prepaid_tax_point_check" check ("prepaid_tax_point" in ('topup', 'consumption'));`
13
+ );
14
+ this.addSql(`alter table "billing_statements" add column if not exists "vat_summary" jsonb null;`);
15
+ }
16
+ async down() {
17
+ this.addSql(`alter table "billing_statements" drop column if exists "vat_summary";`);
18
+ this.addSql(`alter table "billing_settings" drop constraint if exists "billing_settings_prepaid_tax_point_check";`);
19
+ this.addSql(`alter table "billing_settings" drop column if exists "prepaid_tax_point";`);
20
+ this.addSql(`alter table "billing_items" drop constraint if exists "billing_items_price_basis_check";`);
21
+ this.addSql(`alter table "billing_items" drop column if exists "price_basis";`);
22
+ }
23
+ }
24
+ export {
25
+ Migration20261119000000_billing_operator_feedback
26
+ };
27
+ //# sourceMappingURL=Migration20261119000000_billing_operator_feedback.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * Operator feedback round 1 (Spec F).\n *\n * - `billing_items.price_basis` ('net' | 'gross', default 'net'): the item\n * price is stored as typed; invoice lines and prepaid debits are computed\n * from that basis (F-D2).\n * - `billing_settings.prepaid_tax_point` ('topup' | 'consumption', default\n * 'topup'): where prepaid VAT is charged (F-D3).\n * - `billing_statements.vat_summary` jsonb: per-rate net / tax / gross of the\n * period's prepaid debits (empty in `topup` mode).\n *\n * Hand-written like the package's earlier migrations: `yarn mercato db\n * generate` only diffs `@app` modules. Columns mirror `data/entities.ts` 1:1.\n */\nexport class Migration20261119000000_billing_operator_feedback extends Migration {\n async up(): Promise<void> {\n this.addSql(`alter table \"billing_items\" add column if not exists \"price_basis\" text not null default 'net';`)\n this.addSql(\n `alter table \"billing_items\" add constraint \"billing_items_price_basis_check\" check (\"price_basis\" in ('net', 'gross'));`,\n )\n this.addSql(\n `alter table \"billing_settings\" add column if not exists \"prepaid_tax_point\" text not null default 'topup';`,\n )\n this.addSql(\n `alter table \"billing_settings\" add constraint \"billing_settings_prepaid_tax_point_check\" check (\"prepaid_tax_point\" in ('topup', 'consumption'));`,\n )\n this.addSql(`alter table \"billing_statements\" add column if not exists \"vat_summary\" jsonb null;`)\n }\n\n async down(): Promise<void> {\n this.addSql(`alter table \"billing_statements\" drop column if exists \"vat_summary\";`)\n this.addSql(`alter table \"billing_settings\" drop constraint if exists \"billing_settings_prepaid_tax_point_check\";`)\n this.addSql(`alter table \"billing_settings\" drop column if exists \"prepaid_tax_point\";`)\n this.addSql(`alter table \"billing_items\" drop constraint if exists \"billing_items_price_basis_check\";`)\n this.addSql(`alter table \"billing_items\" drop column if exists \"price_basis\";`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAgBnB,MAAM,0DAA0D,UAAU;AAAA,EAC/E,MAAM,KAAoB;AACxB,SAAK,OAAO,iGAAiG;AAC7G,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK,OAAO,qFAAqF;AAAA,EACnG;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK,OAAO,uEAAuE;AACnF,SAAK,OAAO,sGAAsG;AAClH,SAAK,OAAO,2EAA2E;AACvF,SAAK,OAAO,0FAA0F;AACtG,SAAK,OAAO,kEAAkE;AAAA,EAChF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20261120000000_billing_allocation_scope_indexes extends Migration {
3
+ async up() {
4
+ this.addSql(`drop index if exists "billing_allocations_source_idx";`);
5
+ this.addSql(`drop index if exists "billing_allocations_invoice_idx";`);
6
+ this.addSql(`drop index if exists "billing_allocations_account_idx";`);
7
+ this.addSql(
8
+ `create index if not exists "billing_allocations_source_idx" on "billing_allocations" ("tenant_id", "organization_id", "source_type", "source_id") where "deleted_at" is null;`
9
+ );
10
+ this.addSql(
11
+ `create index if not exists "billing_allocations_invoice_idx" on "billing_allocations" ("tenant_id", "organization_id", "invoice_id") where "deleted_at" is null;`
12
+ );
13
+ this.addSql(
14
+ `create index if not exists "billing_allocations_account_idx" on "billing_allocations" ("tenant_id", "organization_id", "bill_account_id") where "deleted_at" is null;`
15
+ );
16
+ }
17
+ async down() {
18
+ this.addSql(`drop index if exists "billing_allocations_source_idx";`);
19
+ this.addSql(`drop index if exists "billing_allocations_invoice_idx";`);
20
+ this.addSql(`drop index if exists "billing_allocations_account_idx";`);
21
+ this.addSql(`create index if not exists "billing_allocations_source_idx" on "billing_allocations" ("source_type", "source_id") where "deleted_at" is null;`);
22
+ this.addSql(`create index if not exists "billing_allocations_invoice_idx" on "billing_allocations" ("invoice_id") where "deleted_at" is null;`);
23
+ this.addSql(`create index if not exists "billing_allocations_account_idx" on "billing_allocations" ("bill_account_id") where "deleted_at" is null;`);
24
+ }
25
+ }
26
+ export {
27
+ Migration20261120000000_billing_allocation_scope_indexes
28
+ };
29
+ //# sourceMappingURL=Migration20261120000000_billing_allocation_scope_indexes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * `billing_allocations` lookup indexes lead with the tenant scope, like every\n * other billing table. Each allocation read filters by tenant + organization\n * plus the invoice, the source (payment / credit memo) or the account.\n *\n * Hand-written like the package's earlier migrations: `yarn mercato db\n * generate` only diffs `@app` modules. Indexes mirror `data/entities.ts` 1:1.\n */\nexport class Migration20261120000000_billing_allocation_scope_indexes extends Migration {\n async up(): Promise<void> {\n this.addSql(`drop index if exists \"billing_allocations_source_idx\";`)\n this.addSql(`drop index if exists \"billing_allocations_invoice_idx\";`)\n this.addSql(`drop index if exists \"billing_allocations_account_idx\";`)\n this.addSql(\n `create index if not exists \"billing_allocations_source_idx\" on \"billing_allocations\" (\"tenant_id\", \"organization_id\", \"source_type\", \"source_id\") where \"deleted_at\" is null;`,\n )\n this.addSql(\n `create index if not exists \"billing_allocations_invoice_idx\" on \"billing_allocations\" (\"tenant_id\", \"organization_id\", \"invoice_id\") where \"deleted_at\" is null;`,\n )\n this.addSql(\n `create index if not exists \"billing_allocations_account_idx\" on \"billing_allocations\" (\"tenant_id\", \"organization_id\", \"bill_account_id\") where \"deleted_at\" is null;`,\n )\n }\n\n async down(): Promise<void> {\n this.addSql(`drop index if exists \"billing_allocations_source_idx\";`)\n this.addSql(`drop index if exists \"billing_allocations_invoice_idx\";`)\n this.addSql(`drop index if exists \"billing_allocations_account_idx\";`)\n this.addSql(`create index if not exists \"billing_allocations_source_idx\" on \"billing_allocations\" (\"source_type\", \"source_id\") where \"deleted_at\" is null;`)\n this.addSql(`create index if not exists \"billing_allocations_invoice_idx\" on \"billing_allocations\" (\"invoice_id\") where \"deleted_at\" is null;`)\n this.addSql(`create index if not exists \"billing_allocations_account_idx\" on \"billing_allocations\" (\"bill_account_id\") where \"deleted_at\" is null;`)\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAUnB,MAAM,iEAAiE,UAAU;AAAA,EACtF,MAAM,KAAoB;AACxB,SAAK,OAAO,wDAAwD;AACpE,SAAK,OAAO,yDAAyD;AACrE,SAAK,OAAO,yDAAyD;AACrE,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK,OAAO,wDAAwD;AACpE,SAAK,OAAO,yDAAyD;AACrE,SAAK,OAAO,yDAAyD;AACrE,SAAK,OAAO,+IAA+I;AAC3J,SAAK,OAAO,kIAAkI;AAC9I,SAAK,OAAO,uIAAuI;AAAA,EACrJ;AACF;",
6
+ "names": []
7
+ }