@dainamite/billing 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/CHANGELOG.md +90 -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 +46 -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 +69 -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/en.json +457 -21
  217. package/dist/modules/billing/i18n/pl.json +457 -21
  218. package/dist/modules/billing/index.js +6 -2
  219. package/dist/modules/billing/index.js.map +2 -2
  220. package/dist/modules/billing/lib/accountFinancials.js +58 -0
  221. package/dist/modules/billing/lib/accountFinancials.js.map +7 -0
  222. package/dist/modules/billing/lib/accountLock.js +14 -0
  223. package/dist/modules/billing/lib/accountLock.js.map +7 -0
  224. package/dist/modules/billing/lib/accountStatus.js +9 -7
  225. package/dist/modules/billing/lib/accountStatus.js.map +2 -2
  226. package/dist/modules/billing/lib/accountSummary.js +106 -0
  227. package/dist/modules/billing/lib/accountSummary.js.map +7 -0
  228. package/dist/modules/billing/lib/allocation.js +356 -0
  229. package/dist/modules/billing/lib/allocation.js.map +7 -0
  230. package/dist/modules/billing/lib/allocationEvents.js +22 -0
  231. package/dist/modules/billing/lib/allocationEvents.js.map +7 -0
  232. package/dist/modules/billing/lib/billPeriod.js +15 -1
  233. package/dist/modules/billing/lib/billPeriod.js.map +2 -2
  234. package/dist/modules/billing/lib/billRunEngine.js +237 -102
  235. package/dist/modules/billing/lib/billRunEngine.js.map +2 -2
  236. package/dist/modules/billing/lib/billingSettings.js +116 -0
  237. package/dist/modules/billing/lib/billingSettings.js.map +7 -0
  238. package/dist/modules/billing/lib/commandRoute.js +81 -0
  239. package/dist/modules/billing/lib/commandRoute.js.map +7 -0
  240. package/dist/modules/billing/lib/customerLookup.js +97 -0
  241. package/dist/modules/billing/lib/customerLookup.js.map +7 -0
  242. package/dist/modules/billing/lib/dateOnly.js +13 -0
  243. package/dist/modules/billing/lib/dateOnly.js.map +7 -0
  244. package/dist/modules/billing/lib/documentParties.js +16 -0
  245. package/dist/modules/billing/lib/documentParties.js.map +7 -0
  246. package/dist/modules/billing/lib/documentTypes.js +27 -0
  247. package/dist/modules/billing/lib/documentTypes.js.map +7 -0
  248. package/dist/modules/billing/lib/dueDate.js +18 -0
  249. package/dist/modules/billing/lib/dueDate.js.map +7 -0
  250. package/dist/modules/billing/lib/iban.js +29 -0
  251. package/dist/modules/billing/lib/iban.js.map +7 -0
  252. package/dist/modules/billing/lib/invoiceDelivery.js +131 -0
  253. package/dist/modules/billing/lib/invoiceDelivery.js.map +7 -0
  254. package/dist/modules/billing/lib/invoiceLanguages.js +16 -0
  255. package/dist/modules/billing/lib/invoiceLanguages.js.map +7 -0
  256. package/dist/modules/billing/lib/invoiceWriter.js +107 -99
  257. package/dist/modules/billing/lib/invoiceWriter.js.map +2 -2
  258. package/dist/modules/billing/lib/itemBillingState.js +27 -0
  259. package/dist/modules/billing/lib/itemBillingState.js.map +7 -0
  260. package/dist/modules/billing/lib/itemPriceChange.js +18 -0
  261. package/dist/modules/billing/lib/itemPriceChange.js.map +7 -0
  262. package/dist/modules/billing/lib/itemSelector.js.map +2 -2
  263. package/dist/modules/billing/lib/lineAmounts.js +32 -0
  264. package/dist/modules/billing/lib/lineAmounts.js.map +7 -0
  265. package/dist/modules/billing/lib/memoGuards.js +25 -0
  266. package/dist/modules/billing/lib/memoGuards.js.map +7 -0
  267. package/dist/modules/billing/lib/navigation.js +48 -0
  268. package/dist/modules/billing/lib/navigation.js.map +7 -0
  269. package/dist/modules/billing/lib/numbering.js +120 -0
  270. package/dist/modules/billing/lib/numbering.js.map +7 -0
  271. package/dist/modules/billing/lib/overdue.js +36 -0
  272. package/dist/modules/billing/lib/overdue.js.map +7 -0
  273. package/dist/modules/billing/lib/paymentCsv.js +125 -0
  274. package/dist/modules/billing/lib/paymentCsv.js.map +7 -0
  275. package/dist/modules/billing/lib/paymentGateway.js +15 -0
  276. package/dist/modules/billing/lib/paymentGateway.js.map +7 -0
  277. package/dist/modules/billing/lib/paymentImport.js +164 -0
  278. package/dist/modules/billing/lib/paymentImport.js.map +7 -0
  279. package/dist/modules/billing/lib/paymentMatcher.js +36 -0
  280. package/dist/modules/billing/lib/paymentMatcher.js.map +7 -0
  281. package/dist/modules/billing/lib/pdf/attachmentStore.js +46 -0
  282. package/dist/modules/billing/lib/pdf/attachmentStore.js.map +7 -0
  283. package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js +7 -0
  284. package/dist/modules/billing/lib/pdf/fonts/embeddedFonts.js.map +7 -0
  285. package/dist/modules/billing/lib/pdf/invoiceModel.js +194 -0
  286. package/dist/modules/billing/lib/pdf/invoiceModel.js.map +7 -0
  287. package/dist/modules/billing/lib/pdf/invoicePdf.js +165 -0
  288. package/dist/modules/billing/lib/pdf/invoicePdf.js.map +7 -0
  289. package/dist/modules/billing/lib/pdf/invoiceTemplate.js +274 -0
  290. package/dist/modules/billing/lib/pdf/invoiceTemplate.js.map +7 -0
  291. package/dist/modules/billing/lib/prepaidConfig.js +17 -25
  292. package/dist/modules/billing/lib/prepaidConfig.js.map +2 -2
  293. package/dist/modules/billing/lib/prepaidConsume.js +26 -7
  294. package/dist/modules/billing/lib/prepaidConsume.js.map +2 -2
  295. package/dist/modules/billing/lib/prepaidPeriodClose.js +277 -158
  296. package/dist/modules/billing/lib/prepaidPeriodClose.js.map +2 -2
  297. package/dist/modules/billing/lib/prepaidTaxPoint.js +37 -0
  298. package/dist/modules/billing/lib/prepaidTaxPoint.js.map +7 -0
  299. package/dist/modules/billing/lib/seeds/demo.js +51 -3
  300. package/dist/modules/billing/lib/seeds/demo.js.map +2 -2
  301. package/dist/modules/billing/lib/seeds/paymentsSample.js +93 -0
  302. package/dist/modules/billing/lib/seeds/paymentsSample.js.map +7 -0
  303. package/dist/modules/billing/lib/seeds/sellerSettings.js +41 -0
  304. package/dist/modules/billing/lib/seeds/sellerSettings.js.map +7 -0
  305. package/dist/modules/billing/lib/servicePeriods.js +121 -0
  306. package/dist/modules/billing/lib/servicePeriods.js.map +7 -0
  307. package/dist/modules/billing/lib/testRunCleanup.js +24 -0
  308. package/dist/modules/billing/lib/testRunCleanup.js.map +7 -0
  309. package/dist/modules/billing/lib/topupCapture.js +2 -2
  310. package/dist/modules/billing/lib/topupCapture.js.map +2 -2
  311. package/dist/modules/billing/lib/topupReceipt.js +58 -79
  312. package/dist/modules/billing/lib/topupReceipt.js.map +2 -2
  313. package/dist/modules/billing/lib/usageRater.js.map +1 -1
  314. package/dist/modules/billing/lib/usageRunner.js +14 -6
  315. package/dist/modules/billing/lib/usageRunner.js.map +2 -2
  316. package/dist/modules/billing/lib/vat.js +39 -0
  317. package/dist/modules/billing/lib/vat.js.map +7 -0
  318. package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js +15 -0
  319. package/dist/modules/billing/migrations/Migration20261114000000_billing_customer_kind.js.map +7 -0
  320. package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js +25 -0
  321. package/dist/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.js.map +7 -0
  322. package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js +115 -0
  323. package/dist/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.js.map +7 -0
  324. package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js +47 -0
  325. package/dist/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.js.map +7 -0
  326. package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js +89 -0
  327. package/dist/modules/billing/migrations/Migration20261117000000_billing_payments.js.map +7 -0
  328. package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js +17 -0
  329. package/dist/modules/billing/migrations/Migration20261118000000_billing_memos.js.map +7 -0
  330. package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js +27 -0
  331. package/dist/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.js.map +7 -0
  332. package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js +29 -0
  333. package/dist/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.js.map +7 -0
  334. package/dist/modules/billing/setup.js +7 -184
  335. package/dist/modules/billing/setup.js.map +2 -2
  336. package/dist/modules/billing/subscribers/credit-memo-auto-send.js +16 -0
  337. package/dist/modules/billing/subscribers/credit-memo-auto-send.js.map +7 -0
  338. package/dist/modules/billing/subscribers/debit-memo-apply-credit.js +16 -0
  339. package/dist/modules/billing/subscribers/debit-memo-apply-credit.js.map +7 -0
  340. package/dist/modules/billing/subscribers/debit-memo-auto-send.js +16 -0
  341. package/dist/modules/billing/subscribers/debit-memo-auto-send.js.map +7 -0
  342. package/dist/modules/billing/subscribers/invoice-apply-credit.js +34 -0
  343. package/dist/modules/billing/subscribers/invoice-apply-credit.js.map +7 -0
  344. package/dist/modules/billing/subscribers/invoice-auto-send.js +30 -0
  345. package/dist/modules/billing/subscribers/invoice-auto-send.js.map +7 -0
  346. package/dist/modules/billing/subscribers/payment-captured-to-paid.js +69 -33
  347. package/dist/modules/billing/subscribers/payment-captured-to-paid.js.map +2 -2
  348. package/dist/modules/billing/subscribers/prepaid-topup-captured.js +4 -6
  349. package/dist/modules/billing/subscribers/prepaid-topup-captured.js.map +2 -2
  350. package/generated/entities/billing_account/index.ts +3 -0
  351. package/generated/entities/billing_allocation/index.ts +18 -0
  352. package/generated/entities/billing_document_sequence/index.ts +11 -0
  353. package/generated/entities/billing_invoice/index.ts +38 -0
  354. package/generated/entities/billing_invoice_line/index.ts +24 -0
  355. package/generated/entities/billing_item/index.ts +4 -0
  356. package/generated/entities/billing_payment/index.ts +25 -0
  357. package/generated/entities/billing_payment_import/index.ts +14 -0
  358. package/generated/entities/billing_run/index.ts +0 -1
  359. package/generated/entities/billing_run_outcome/index.ts +1 -0
  360. package/generated/entities/billing_settings/index.ts +26 -0
  361. package/generated/entities/billing_statement/index.ts +1 -0
  362. package/generated/entities.ids.generated.ts +7 -0
  363. package/package.json +5 -1
  364. package/src/modules/billing/__integration__/TC-BILL-004.spec.ts +170 -0
  365. package/src/modules/billing/__integration__/TC-BILL-005.spec.ts +134 -0
  366. package/src/modules/billing/__integration__/TC-BILL-006.spec.ts +101 -0
  367. package/src/modules/billing/__integration__/TC-BILL-007.spec.ts +140 -0
  368. package/src/modules/billing/__integration__/TC-BILL-008.spec.ts +108 -0
  369. package/src/modules/billing/__integration__/TC-BILL-009.spec.ts +113 -0
  370. package/src/modules/billing/__integration__/TC-BILL-010.spec.ts +118 -0
  371. package/src/modules/billing/__integration__/TC-BILL-011.spec.ts +142 -0
  372. package/src/modules/billing/__integration__/TC-BILL-012.spec.ts +115 -0
  373. package/src/modules/billing/__integration__/TC-BILL-013.spec.ts +118 -0
  374. package/src/modules/billing/__integration__/sellerSettings.ts +24 -0
  375. package/src/modules/billing/__tests__/commands/invoices.test.ts +436 -354
  376. package/src/modules/billing/__tests__/commands/itemsBulk.test.ts +33 -0
  377. package/src/modules/billing/__tests__/commands/memos.test.ts +205 -0
  378. package/src/modules/billing/__tests__/commands/payments.test.ts +241 -0
  379. package/src/modules/billing/__tests__/commands/runsDelete.test.ts +146 -0
  380. package/src/modules/billing/__tests__/commands/runsPostDrafts.test.ts +106 -0
  381. package/src/modules/billing/__tests__/commands/topups.test.ts +11 -0
  382. package/src/modules/billing/__tests__/entityRegistry.test.ts +8 -1
  383. package/src/modules/billing/__tests__/helpers/prepaidMockEm.ts +28 -11
  384. package/src/modules/billing/__tests__/lib/accountFinancials.test.ts +53 -0
  385. package/src/modules/billing/__tests__/lib/accountSummary.test.ts +97 -0
  386. package/src/modules/billing/__tests__/lib/allocation.test.ts +319 -0
  387. package/src/modules/billing/__tests__/lib/billRunEngine.test.ts +228 -17
  388. package/src/modules/billing/__tests__/lib/billingSettings.test.ts +109 -0
  389. package/src/modules/billing/__tests__/lib/customerLookup.test.ts +156 -0
  390. package/src/modules/billing/__tests__/lib/dueDate.test.ts +35 -0
  391. package/src/modules/billing/__tests__/lib/iban.test.ts +38 -0
  392. package/src/modules/billing/__tests__/lib/invoiceDelivery.test.ts +189 -0
  393. package/src/modules/billing/__tests__/lib/invoiceWriter.test.ts +212 -10
  394. package/src/modules/billing/__tests__/lib/itemBillingState.test.ts +42 -0
  395. package/src/modules/billing/__tests__/lib/itemPriceChange.test.ts +165 -0
  396. package/src/modules/billing/__tests__/lib/lineAmounts.test.ts +86 -0
  397. package/src/modules/billing/__tests__/lib/navigation.test.ts +71 -0
  398. package/src/modules/billing/__tests__/lib/numbering.test.ts +91 -0
  399. package/src/modules/billing/__tests__/lib/overdue.test.ts +36 -0
  400. package/src/modules/billing/__tests__/lib/paymentCsv.test.ts +148 -0
  401. package/src/modules/billing/__tests__/lib/paymentImport.test.ts +113 -0
  402. package/src/modules/billing/__tests__/lib/paymentsSample.test.ts +73 -0
  403. package/src/modules/billing/__tests__/lib/pdf/invoicePdf.test.ts +199 -0
  404. package/src/modules/billing/__tests__/lib/pdf/invoicePdfService.test.ts +147 -0
  405. package/src/modules/billing/__tests__/lib/prepaidPeriodClose.test.ts +374 -98
  406. package/src/modules/billing/__tests__/lib/prepaidTaxPoint.test.ts +118 -0
  407. package/src/modules/billing/__tests__/lib/seedsDemo.test.ts +53 -2
  408. package/src/modules/billing/__tests__/lib/sellerSettings.test.ts +28 -0
  409. package/src/modules/billing/__tests__/lib/servicePeriods.test.ts +190 -0
  410. package/src/modules/billing/__tests__/lib/topupCapture.test.ts +6 -28
  411. package/src/modules/billing/__tests__/lib/topupReceipt.test.ts +21 -52
  412. package/src/modules/billing/__tests__/lib/vat.test.ts +51 -0
  413. package/src/modules/billing/__tests__/package-isolation.test.ts +22 -8
  414. package/src/modules/billing/__tests__/setup.test.ts +13 -4
  415. package/src/modules/billing/__tests__/validators.test.ts +193 -3
  416. package/src/modules/billing/acl.ts +12 -0
  417. package/src/modules/billing/api/accounts/[id]/summary/route.ts +62 -0
  418. package/src/modules/billing/api/accounts/route.ts +58 -4
  419. package/src/modules/billing/api/export/account/[id]/route.ts +13 -11
  420. package/src/modules/billing/api/invoices/[id]/memos/route.ts +63 -0
  421. package/src/modules/billing/api/invoices/[id]/pdf/route.ts +79 -0
  422. package/src/modules/billing/api/invoices/[id]/route.ts +57 -70
  423. package/src/modules/billing/api/invoices/[id]/send/route.ts +127 -0
  424. package/src/modules/billing/api/invoices/add-line/route.ts +2 -2
  425. package/src/modules/billing/api/invoices/delete-draft/route.ts +33 -0
  426. package/src/modules/billing/api/invoices/edit-line/route.ts +2 -2
  427. package/src/modules/billing/api/invoices/post/route.ts +7 -6
  428. package/src/modules/billing/api/invoices/remove-line/route.ts +2 -2
  429. package/src/modules/billing/api/invoices/route.ts +81 -86
  430. package/src/modules/billing/api/items/bulk/route.ts +2 -1
  431. package/src/modules/billing/api/items/change-price/route.ts +54 -0
  432. package/src/modules/billing/api/items/route.ts +23 -7
  433. package/src/modules/billing/api/payment-imports/[id]/route.ts +49 -0
  434. package/src/modules/billing/api/payment-imports/route.ts +57 -0
  435. package/src/modules/billing/api/payments/[id]/route.ts +63 -0
  436. package/src/modules/billing/api/payments/allocate/route.ts +35 -0
  437. package/src/modules/billing/api/payments/assign/route.ts +36 -0
  438. package/src/modules/billing/api/payments/convert-to-topup/route.ts +35 -0
  439. package/src/modules/billing/api/payments/ignore/route.ts +35 -0
  440. package/src/modules/billing/api/payments/import/route.ts +72 -0
  441. package/src/modules/billing/api/payments/restore/route.ts +35 -0
  442. package/src/modules/billing/api/payments/route.ts +147 -0
  443. package/src/modules/billing/api/payments/unallocate/route.ts +35 -0
  444. package/src/modules/billing/api/payments/unassign/route.ts +35 -0
  445. package/src/modules/billing/api/run-outcomes/route.ts +49 -6
  446. package/src/modules/billing/api/runs/[id]/post-drafts/route.ts +71 -0
  447. package/src/modules/billing/api/runs/[id]/route.ts +59 -0
  448. package/src/modules/billing/api/runs/retry-failed/route.ts +2 -1
  449. package/src/modules/billing/api/runs/route.ts +15 -7
  450. package/src/modules/billing/api/settings/number-preview/route.ts +46 -0
  451. package/src/modules/billing/api/settings/route.ts +116 -0
  452. package/src/modules/billing/api/statements/route.ts +5 -0
  453. package/src/modules/billing/api/test-invoices/wipe/route.ts +2 -2
  454. package/src/modules/billing/backend/billing/accounts/[id]/page.tsx +151 -372
  455. package/src/modules/billing/backend/billing/accounts/create/page.tsx +6 -0
  456. package/src/modules/billing/backend/billing/accounts/page.tsx +70 -4
  457. package/src/modules/billing/backend/billing/invoices/[id]/page.tsx +444 -95
  458. package/src/modules/billing/backend/billing/invoices/page.tsx +8 -227
  459. package/src/modules/billing/backend/billing/items/[id]/page.tsx +75 -6
  460. package/src/modules/billing/backend/billing/items/create/page.tsx +13 -8
  461. package/src/modules/billing/backend/billing/items/page.tsx +18 -2
  462. package/src/modules/billing/backend/billing/payments/[id]/page.meta.ts +19 -0
  463. package/src/modules/billing/backend/billing/payments/[id]/page.tsx +415 -0
  464. package/src/modules/billing/backend/billing/payments/imports/[id]/page.meta.ts +19 -0
  465. package/src/modules/billing/backend/billing/payments/imports/[id]/page.tsx +106 -0
  466. package/src/modules/billing/backend/billing/payments/page.meta.ts +16 -0
  467. package/src/modules/billing/backend/billing/payments/page.tsx +56 -0
  468. package/src/modules/billing/backend/billing/runs/[id]/page.tsx +49 -18
  469. package/src/modules/billing/backend/billing/runs/page.tsx +59 -8
  470. package/src/modules/billing/backend/billing/statements/[id]/page.tsx +86 -5
  471. package/src/modules/billing/backend/billing/statements/page.tsx +1 -1
  472. package/src/modules/billing/backend/billing/topups/page.tsx +1 -1
  473. package/src/modules/billing/backend/billing/transactions/page.tsx +1 -1
  474. package/src/modules/billing/backend/billing/usage/create/page.tsx +3 -2
  475. package/src/modules/billing/backend/config/billing/page.meta.ts +21 -0
  476. package/src/modules/billing/backend/config/billing/page.tsx +549 -0
  477. package/src/modules/billing/cli.ts +31 -1
  478. package/src/modules/billing/commands/accounts.ts +6 -0
  479. package/src/modules/billing/commands/index.ts +3 -0
  480. package/src/modules/billing/commands/invoices.ts +364 -231
  481. package/src/modules/billing/commands/items.ts +143 -0
  482. package/src/modules/billing/commands/memos.ts +218 -0
  483. package/src/modules/billing/commands/payments.ts +428 -0
  484. package/src/modules/billing/commands/runs.ts +205 -3
  485. package/src/modules/billing/commands/settings.ts +77 -0
  486. package/src/modules/billing/commands/topups.ts +12 -3
  487. package/src/modules/billing/commands/transactions.ts +2 -2
  488. package/src/modules/billing/components/AccountForm.tsx +199 -53
  489. package/src/modules/billing/components/AccountInvoicesSection.tsx +75 -0
  490. package/src/modules/billing/components/AccountPaymentsSection.tsx +42 -0
  491. package/src/modules/billing/components/AccountPicker.tsx +70 -0
  492. package/src/modules/billing/components/AllocatePaymentDialog.tsx +167 -0
  493. package/src/modules/billing/components/BillingDataTable.tsx +34 -0
  494. package/src/modules/billing/components/BillingSettingsLink.tsx +25 -0
  495. package/src/modules/billing/components/ChangeItemPriceDialog.tsx +180 -0
  496. package/src/modules/billing/components/CreateMemoDialog.tsx +232 -0
  497. package/src/modules/billing/components/CustomerLabel.tsx +53 -0
  498. package/src/modules/billing/components/InvoicesTable.tsx +344 -0
  499. package/src/modules/billing/components/ItemForm.tsx +233 -44
  500. package/src/modules/billing/components/ItemPriceField.tsx +81 -0
  501. package/src/modules/billing/components/LineFormDialog.tsx +25 -1
  502. package/src/modules/billing/components/ManualPaymentDialog.tsx +140 -0
  503. package/src/modules/billing/components/MoneyInput.tsx +26 -0
  504. package/src/modules/billing/components/PaymentUploadDialog.tsx +148 -0
  505. package/src/modules/billing/components/PaymentsTable.tsx +213 -0
  506. package/src/modules/billing/components/PostRunDraftsButton.tsx +129 -0
  507. package/src/modules/billing/components/PrepaidPanel.tsx +19 -6
  508. package/src/modules/billing/components/RunCyclesSection.tsx +298 -0
  509. package/src/modules/billing/components/TestRunActions.tsx +152 -0
  510. package/src/modules/billing/components/account/AccountItemsTab.tsx +192 -0
  511. package/src/modules/billing/components/account/AccountRunBillingDialog.tsx +147 -0
  512. package/src/modules/billing/components/account/AccountRunsTab.tsx +201 -0
  513. package/src/modules/billing/components/account/AccountStatementsTab.tsx +120 -0
  514. package/src/modules/billing/components/account/AccountSummaryCards.tsx +153 -0
  515. package/src/modules/billing/components/account/AccountUsageTab.tsx +122 -0
  516. package/src/modules/billing/components/account/AccountView.tsx +101 -0
  517. package/src/modules/billing/components/account/accountRow.ts +70 -0
  518. package/src/modules/billing/components/customerNames.ts +62 -0
  519. package/src/modules/billing/data/entities.ts +654 -5
  520. package/src/modules/billing/data/entityIds.ts +9 -0
  521. package/src/modules/billing/data/validators.ts +388 -8
  522. package/src/modules/billing/events.ts +56 -3
  523. package/src/modules/billing/i18n/en.json +457 -21
  524. package/src/modules/billing/i18n/pl.json +457 -21
  525. package/src/modules/billing/index.ts +6 -2
  526. package/src/modules/billing/lib/accountFinancials.ts +84 -0
  527. package/src/modules/billing/lib/accountLock.ts +32 -0
  528. package/src/modules/billing/lib/accountStatus.ts +11 -9
  529. package/src/modules/billing/lib/accountSummary.ts +172 -0
  530. package/src/modules/billing/lib/allocation.ts +515 -0
  531. package/src/modules/billing/lib/allocationEvents.ts +26 -0
  532. package/src/modules/billing/lib/billPeriod.ts +19 -0
  533. package/src/modules/billing/lib/billRunEngine.ts +350 -150
  534. package/src/modules/billing/lib/billingSettings.ts +145 -0
  535. package/src/modules/billing/lib/commandRoute.ts +112 -0
  536. package/src/modules/billing/lib/customerLookup.ts +157 -0
  537. package/src/modules/billing/lib/dateOnly.ts +22 -0
  538. package/src/modules/billing/lib/documentParties.ts +23 -0
  539. package/src/modules/billing/lib/documentTypes.ts +37 -0
  540. package/src/modules/billing/lib/dueDate.ts +26 -0
  541. package/src/modules/billing/lib/iban.ts +36 -0
  542. package/src/modules/billing/lib/invoiceDelivery.ts +197 -0
  543. package/src/modules/billing/lib/invoiceLanguages.ts +34 -0
  544. package/src/modules/billing/lib/invoiceWriter.ts +162 -148
  545. package/src/modules/billing/lib/itemBillingState.ts +67 -0
  546. package/src/modules/billing/lib/itemPriceChange.ts +56 -0
  547. package/src/modules/billing/lib/itemSelector.ts +4 -1
  548. package/src/modules/billing/lib/lineAmounts.ts +61 -0
  549. package/src/modules/billing/lib/memoGuards.ts +41 -0
  550. package/src/modules/billing/lib/navigation.ts +64 -0
  551. package/src/modules/billing/lib/numbering.ts +174 -0
  552. package/src/modules/billing/lib/overdue.ts +60 -0
  553. package/src/modules/billing/lib/paymentCsv.ts +171 -0
  554. package/src/modules/billing/lib/paymentGateway.ts +52 -0
  555. package/src/modules/billing/lib/paymentImport.ts +228 -0
  556. package/src/modules/billing/lib/paymentMatcher.ts +88 -0
  557. package/src/modules/billing/lib/pdf/attachmentStore.ts +60 -0
  558. package/src/modules/billing/lib/pdf/fonts/NotoSans-Bold.ttf +0 -0
  559. package/src/modules/billing/lib/pdf/fonts/NotoSans-Regular.ttf +0 -0
  560. package/src/modules/billing/lib/pdf/fonts/OFL.txt +93 -0
  561. package/src/modules/billing/lib/pdf/fonts/embeddedFonts.ts +9 -0
  562. package/src/modules/billing/lib/pdf/invoiceModel.ts +328 -0
  563. package/src/modules/billing/lib/pdf/invoicePdf.ts +216 -0
  564. package/src/modules/billing/lib/pdf/invoiceTemplate.ts +338 -0
  565. package/src/modules/billing/lib/prepaidConfig.ts +27 -36
  566. package/src/modules/billing/lib/prepaidConsume.ts +29 -6
  567. package/src/modules/billing/lib/prepaidPeriodClose.ts +407 -239
  568. package/src/modules/billing/lib/prepaidTaxPoint.ts +76 -0
  569. package/src/modules/billing/lib/seeds/demo.ts +79 -6
  570. package/src/modules/billing/lib/seeds/paymentsSample.ts +136 -0
  571. package/src/modules/billing/lib/seeds/sellerSettings.ts +78 -0
  572. package/src/modules/billing/lib/servicePeriods.ts +226 -0
  573. package/src/modules/billing/lib/testRunCleanup.ts +42 -0
  574. package/src/modules/billing/lib/topupCapture.ts +3 -4
  575. package/src/modules/billing/lib/topupReceipt.ts +70 -103
  576. package/src/modules/billing/lib/usageRater.ts +1 -1
  577. package/src/modules/billing/lib/usageRunner.ts +17 -5
  578. package/src/modules/billing/lib/vat.ts +56 -0
  579. package/src/modules/billing/migrations/Migration20261114000000_billing_customer_kind.ts +25 -0
  580. package/src/modules/billing/migrations/Migration20261114100000_billing_cycle_semantics.ts +37 -0
  581. package/src/modules/billing/migrations/Migration20261115000000_billing_invoice_ledger.ts +132 -0
  582. package/src/modules/billing/migrations/Migration20261116000000_billing_invoice_documents.ts +58 -0
  583. package/src/modules/billing/migrations/Migration20261117000000_billing_payments.ts +97 -0
  584. package/src/modules/billing/migrations/Migration20261118000000_billing_memos.ts +21 -0
  585. package/src/modules/billing/migrations/Migration20261119000000_billing_operator_feedback.ts +39 -0
  586. package/src/modules/billing/migrations/Migration20261120000000_billing_allocation_scope_indexes.ts +35 -0
  587. package/src/modules/billing/setup.ts +11 -237
  588. package/src/modules/billing/subscribers/credit-memo-auto-send.ts +15 -0
  589. package/src/modules/billing/subscribers/debit-memo-apply-credit.ts +15 -0
  590. package/src/modules/billing/subscribers/debit-memo-auto-send.ts +15 -0
  591. package/src/modules/billing/subscribers/invoice-apply-credit.ts +39 -0
  592. package/src/modules/billing/subscribers/invoice-auto-send.ts +46 -0
  593. package/src/modules/billing/subscribers/payment-captured-to-paid.ts +84 -62
  594. package/src/modules/billing/subscribers/prepaid-topup-captured.ts +4 -8
  595. package/dist/modules/billing/lib/invoiceStatus.js +0 -38
  596. package/dist/modules/billing/lib/invoiceStatus.js.map +0 -7
  597. package/src/modules/billing/__tests__/lib/invoiceStatus.test.ts +0 -97
  598. package/src/modules/billing/lib/invoiceStatus.ts +0 -61
@@ -0,0 +1,164 @@
1
+ import { CrudHttpError } from "@open-mercato/shared/lib/crud/errors";
2
+ import { BillingPayment, BillingPaymentImport } from "../data/entities.js";
3
+ import { withAccountLock } from "./accountLock.js";
4
+ import {
5
+ allocate,
6
+ applyAccountCredit,
7
+ emptyEffects,
8
+ loadOpenReceivables,
9
+ mergeEffects,
10
+ toCents
11
+ } from "./allocation.js";
12
+ import { parsePaymentCsv, sourceRefsForRows } from "./paymentCsv.js";
13
+ import { extractInvoiceTokens, matchPayment } from "./paymentMatcher.js";
14
+ const MAX_STORED_ERRORS = 200;
15
+ async function existingSourceRefs(em, scope, refs) {
16
+ if (refs.length === 0) return /* @__PURE__ */ new Set();
17
+ const rows = await em.execute(
18
+ `SELECT source_ref FROM billing_payments
19
+ WHERE tenant_id = ? AND organization_id = ? AND deleted_at IS NULL AND source_ref = ANY(?::text[])`,
20
+ [scope.tenantId, scope.organizationId, `{${refs.map((r) => `"${r}"`).join(",")}}`]
21
+ );
22
+ return new Set((rows ?? []).map((row) => row.source_ref));
23
+ }
24
+ async function lookupDocumentsByNumber(em, scope, references) {
25
+ const tokens = [...new Set(references.flatMap((ref) => extractInvoiceTokens(ref)))];
26
+ if (tokens.length === 0) return /* @__PURE__ */ new Map();
27
+ const rows = await em.execute(
28
+ `SELECT i.id, i.number, i.bill_account_id, a.billing_mode, i.currency_code, i.document_type, i.status, i.outstanding
29
+ FROM billing_invoices i
30
+ JOIN billing_accounts a ON a.id = i.bill_account_id AND a.tenant_id = i.tenant_id
31
+ WHERE i.tenant_id = ? AND i.organization_id = ? AND i.deleted_at IS NULL AND i.test_run = false
32
+ AND i.series IS NOT NULL
33
+ AND upper(i.number) = ANY(?::text[])`,
34
+ [scope.tenantId, scope.organizationId, `{${tokens.map((t) => `"${t.replace(/"/g, "")}"`).join(",")}}`]
35
+ );
36
+ const map = /* @__PURE__ */ new Map();
37
+ for (const row of rows ?? []) {
38
+ map.set(row.number.toUpperCase(), {
39
+ invoiceId: row.id,
40
+ number: row.number,
41
+ billAccountId: row.bill_account_id,
42
+ billingMode: row.billing_mode,
43
+ currencyCode: row.currency_code,
44
+ documentType: row.document_type,
45
+ status: row.status,
46
+ outstanding: row.outstanding
47
+ });
48
+ }
49
+ return map;
50
+ }
51
+ async function settlePayment(tem, scope, planned) {
52
+ const effects = emptyEffects();
53
+ const { payment, decision } = planned;
54
+ if (decision.outcome === "unmatched") return effects;
55
+ const account = { id: decision.billAccountId, currencyCode: payment.currencyCode };
56
+ const source = { type: "payment", id: payment.id };
57
+ if (decision.outcome === "allocate") {
58
+ let available = toCents(payment.amount);
59
+ const receivables = await loadOpenReceivables(tem, scope, account, decision.invoiceIds);
60
+ for (const receivable of receivables) {
61
+ if (available <= 0) break;
62
+ const take = Math.min(available, receivable.outstandingCents);
63
+ if (take <= 0) continue;
64
+ mergeEffects(effects, await allocate(tem, scope, { source, invoiceId: receivable.id, amountCents: take, by: "auto" }));
65
+ available -= take;
66
+ }
67
+ }
68
+ mergeEffects(effects, await applyAccountCredit(tem, scope, account, { onlySources: [source] }));
69
+ return effects;
70
+ }
71
+ async function importPayments(em, params) {
72
+ const { scope } = params;
73
+ const parsed = parsePaymentCsv(params.content);
74
+ if (parsed.fatal) {
75
+ throw new CrudHttpError(400, { error: parsed.fatal, code: "billing.payment_import.invalid_file" });
76
+ }
77
+ const refs = sourceRefsForRows(scope, parsed.rows);
78
+ const existing = await existingSourceRefs(em, scope, refs);
79
+ const fresh = [];
80
+ let duplicates = 0;
81
+ parsed.rows.forEach((row, i) => {
82
+ if (existing.has(refs[i])) duplicates += 1;
83
+ else fresh.push({ row, sourceRef: refs[i] });
84
+ });
85
+ const documents = await lookupDocumentsByNumber(em, scope, fresh.map((f) => f.row.reference));
86
+ const now = /* @__PURE__ */ new Date();
87
+ const batch = em.create(BillingPaymentImport, {
88
+ organizationId: scope.organizationId,
89
+ tenantId: scope.tenantId,
90
+ fileName: params.fileName,
91
+ rowCount: parsed.rows.length + parsed.errors.length,
92
+ userId: params.userId ?? null,
93
+ createdAt: now,
94
+ updatedAt: now
95
+ });
96
+ em.persist(batch);
97
+ await em.flush();
98
+ const planned = fresh.map(({ row, sourceRef }) => {
99
+ const decision = matchPayment({ reference: row.reference, currency: row.currency }, documents);
100
+ const payment = em.create(BillingPayment, {
101
+ organizationId: scope.organizationId,
102
+ tenantId: scope.tenantId,
103
+ receivedAt: /* @__PURE__ */ new Date(`${row.receivedAt}T00:00:00Z`),
104
+ amount: row.amount,
105
+ currencyCode: row.currency,
106
+ reference: row.reference,
107
+ payerName: row.payerName,
108
+ payerAccount: row.payerAccount,
109
+ source: "csv",
110
+ importId: batch.id,
111
+ billAccountId: decision.billAccountId,
112
+ status: decision.outcome === "unmatched" ? "unmatched" : "matched",
113
+ unallocatedAmount: row.amount,
114
+ matchReason: decision.outcome === "allocate" ? null : decision.reason,
115
+ sourceRef,
116
+ metadata: { csv_line: row.line },
117
+ createdAt: now,
118
+ updatedAt: now
119
+ });
120
+ em.persist(payment);
121
+ return { payment, decision };
122
+ });
123
+ await em.flush();
124
+ const effects = emptyEffects();
125
+ const byAccount = /* @__PURE__ */ new Map();
126
+ for (const item of planned) {
127
+ if (item.decision.outcome === "unmatched") continue;
128
+ const list = byAccount.get(item.decision.billAccountId) ?? [];
129
+ list.push(item);
130
+ byAccount.set(item.decision.billAccountId, list);
131
+ }
132
+ for (const [billAccountId, items] of byAccount) {
133
+ await withAccountLock(em, { tenantId: scope.tenantId, billAccountId }, async (tem) => {
134
+ for (const item of items) mergeEffects(effects, await settlePayment(tem, scope, item));
135
+ });
136
+ }
137
+ const paymentIds = planned.map((p) => p.payment.id);
138
+ const statuses = paymentIds.length ? await em.execute(
139
+ `SELECT status, COUNT(*)::int AS n FROM billing_payments
140
+ WHERE tenant_id = ? AND organization_id = ? AND import_id = ? GROUP BY status`,
141
+ [scope.tenantId, scope.organizationId, batch.id]
142
+ ) : [];
143
+ const count = (status) => Number(statuses.find((s) => s.status === status)?.n ?? 0);
144
+ const counts = {
145
+ allocated: count("allocated"),
146
+ partially_allocated: count("partially_allocated"),
147
+ matched: count("matched"),
148
+ unmatched: count("unmatched"),
149
+ duplicate: duplicates,
150
+ rejected: parsed.errors.length
151
+ };
152
+ const errors = parsed.errors.slice(0, MAX_STORED_ERRORS);
153
+ await em.nativeUpdate(BillingPaymentImport, { id: batch.id }, { counts, errors, updatedAt: /* @__PURE__ */ new Date() });
154
+ return {
155
+ summary: { importId: batch.id, fileName: params.fileName, rowCount: batch.rowCount, counts, errors },
156
+ effects,
157
+ paymentIds
158
+ };
159
+ }
160
+ export {
161
+ importPayments,
162
+ lookupDocumentsByNumber
163
+ };
164
+ //# sourceMappingURL=paymentImport.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/lib/paymentImport.ts"],
4
+ "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { BillingPayment, BillingPaymentImport } from '../data/entities'\nimport { withAccountLock } from './accountLock'\nimport {\n allocate,\n applyAccountCredit,\n emptyEffects,\n loadOpenReceivables,\n mergeEffects,\n toCents,\n type AllocationEffects,\n type ArScope,\n} from './allocation'\nimport { parsePaymentCsv, sourceRefsForRows, type PaymentCsvRow } from './paymentCsv'\nimport { extractInvoiceTokens, matchPayment, type MatchDecision, type MatchableDocument } from './paymentMatcher'\n\n/**\n * CSV payment import (Spec C, C-D4):\n *\n * 1. parse (row errors are reported, never fatal);\n * 2. duplicate guard \u2014 one query for the file's source refs (P-D7);\n * 3. one batched invoice-number lookup for every token of the file (P-D6);\n * 4. create the import batch + one `BillingPayment` per new row;\n * 5. per account, inside `withAccountLock`: allocate to the referenced\n * invoices (oldest due first), then spend any remainder as credit on the\n * account's other open receivables (D12);\n * 6. finalise the batch counts from the payments' final statuses.\n *\n * Returns the summary plus the allocation effects; the caller emits events\n * after everything committed.\n */\n\nexport type ImportCounts = {\n allocated: number\n partially_allocated: number\n matched: number\n unmatched: number\n duplicate: number\n rejected: number\n}\n\nexport type ImportSummary = {\n importId: string\n fileName: string\n rowCount: number\n counts: ImportCounts\n errors: Array<{ row: number; message: string }>\n}\n\nconst MAX_STORED_ERRORS = 200\n\nasync function existingSourceRefs(em: EntityManager, scope: ArScope, refs: string[]): Promise<Set<string>> {\n if (refs.length === 0) return new Set()\n const rows = (await em.execute(\n `SELECT source_ref FROM billing_payments\n WHERE tenant_id = ? AND organization_id = ? AND deleted_at IS NULL AND source_ref = ANY(?::text[])`,\n [scope.tenantId, scope.organizationId, `{${refs.map((r) => `\"${r}\"`).join(',')}}`],\n )) as unknown as Array<{ source_ref: string }>\n return new Set((rows ?? []).map((row) => row.source_ref))\n}\n\n/** Batched lookup of every number-like token of the file (one query). */\nexport async function lookupDocumentsByNumber(\n em: EntityManager,\n scope: ArScope,\n references: Array<string | null>,\n): Promise<Map<string, MatchableDocument>> {\n const tokens = [...new Set(references.flatMap((ref) => extractInvoiceTokens(ref)))]\n if (tokens.length === 0) return new Map()\n const rows = (await em.execute(\n `SELECT i.id, i.number, i.bill_account_id, a.billing_mode, i.currency_code, i.document_type, i.status, i.outstanding\n FROM billing_invoices i\n JOIN billing_accounts a ON a.id = i.bill_account_id AND a.tenant_id = i.tenant_id\n WHERE i.tenant_id = ? AND i.organization_id = ? AND i.deleted_at IS NULL AND i.test_run = false\n AND i.series IS NOT NULL\n AND upper(i.number) = ANY(?::text[])`,\n [scope.tenantId, scope.organizationId, `{${tokens.map((t) => `\"${t.replace(/\"/g, '')}\"`).join(',')}}`],\n )) as unknown as Array<{\n id: string\n number: string\n bill_account_id: string\n billing_mode: string\n currency_code: string\n document_type: string\n status: string\n outstanding: string\n }>\n const map = new Map<string, MatchableDocument>()\n for (const row of rows ?? []) {\n map.set(row.number.toUpperCase(), {\n invoiceId: row.id,\n number: row.number,\n billAccountId: row.bill_account_id,\n billingMode: row.billing_mode,\n currencyCode: row.currency_code,\n documentType: row.document_type,\n status: row.status,\n outstanding: row.outstanding,\n })\n }\n return map\n}\n\ntype Planned = { payment: BillingPayment; decision: MatchDecision }\n\n/** Allocates one matched payment inside the account lock (referenced invoices first, then credit). */\nasync function settlePayment(tem: EntityManager, scope: ArScope, planned: Planned): Promise<AllocationEffects> {\n const effects = emptyEffects()\n const { payment, decision } = planned\n if (decision.outcome === 'unmatched') return effects\n const account = { id: decision.billAccountId, currencyCode: payment.currencyCode }\n const source = { type: 'payment' as const, id: payment.id }\n if (decision.outcome === 'allocate') {\n let available = toCents(payment.amount)\n const receivables = await loadOpenReceivables(tem, scope, account, decision.invoiceIds)\n for (const receivable of receivables) {\n if (available <= 0) break\n const take = Math.min(available, receivable.outstandingCents)\n if (take <= 0) continue\n mergeEffects(effects, await allocate(tem, scope, { source, invoiceId: receivable.id, amountCents: take, by: 'auto' }))\n available -= take\n }\n }\n mergeEffects(effects, await applyAccountCredit(tem, scope, account, { onlySources: [source] }))\n return effects\n}\n\nexport async function importPayments(\n em: EntityManager,\n params: { scope: ArScope; fileName: string; content: string; userId?: string | null },\n): Promise<{ summary: ImportSummary; effects: AllocationEffects; paymentIds: string[] }> {\n const { scope } = params\n const parsed = parsePaymentCsv(params.content)\n if (parsed.fatal) {\n throw new CrudHttpError(400, { error: parsed.fatal, code: 'billing.payment_import.invalid_file' })\n }\n const refs = sourceRefsForRows(scope, parsed.rows)\n const existing = await existingSourceRefs(em, scope, refs)\n const fresh: Array<{ row: PaymentCsvRow; sourceRef: string }> = []\n let duplicates = 0\n parsed.rows.forEach((row, i) => {\n if (existing.has(refs[i])) duplicates += 1\n else fresh.push({ row, sourceRef: refs[i] })\n })\n\n const documents = await lookupDocumentsByNumber(em, scope, fresh.map((f) => f.row.reference))\n const now = new Date()\n const batch = em.create(BillingPaymentImport, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n fileName: params.fileName,\n rowCount: parsed.rows.length + parsed.errors.length,\n userId: params.userId ?? null,\n createdAt: now,\n updatedAt: now,\n })\n em.persist(batch)\n await em.flush()\n\n const planned: Planned[] = fresh.map(({ row, sourceRef }) => {\n const decision = matchPayment({ reference: row.reference, currency: row.currency }, documents)\n const payment = em.create(BillingPayment, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n receivedAt: new Date(`${row.receivedAt}T00:00:00Z`),\n amount: row.amount,\n currencyCode: row.currency,\n reference: row.reference,\n payerName: row.payerName,\n payerAccount: row.payerAccount,\n source: 'csv',\n importId: batch.id,\n billAccountId: decision.billAccountId,\n status: decision.outcome === 'unmatched' ? 'unmatched' : 'matched',\n unallocatedAmount: row.amount,\n matchReason: decision.outcome === 'allocate' ? null : decision.reason,\n sourceRef,\n metadata: { csv_line: row.line },\n createdAt: now,\n updatedAt: now,\n })\n em.persist(payment)\n return { payment, decision }\n })\n await em.flush()\n\n // Settle per account, one lock per account (operations queue per account).\n const effects = emptyEffects()\n const byAccount = new Map<string, Planned[]>()\n for (const item of planned) {\n if (item.decision.outcome === 'unmatched') continue\n const list = byAccount.get(item.decision.billAccountId) ?? []\n list.push(item)\n byAccount.set(item.decision.billAccountId, list)\n }\n for (const [billAccountId, items] of byAccount) {\n await withAccountLock(em, { tenantId: scope.tenantId, billAccountId }, async (tem) => {\n for (const item of items) mergeEffects(effects, await settlePayment(tem, scope, item))\n })\n }\n\n const paymentIds = planned.map((p) => p.payment.id)\n const statuses = paymentIds.length\n ? ((await em.execute(\n `SELECT status, COUNT(*)::int AS n FROM billing_payments\n WHERE tenant_id = ? AND organization_id = ? AND import_id = ? GROUP BY status`,\n [scope.tenantId, scope.organizationId, batch.id],\n )) as unknown as Array<{ status: string; n: number }>)\n : []\n const count = (status: string) => Number(statuses.find((s) => s.status === status)?.n ?? 0)\n const counts: ImportCounts = {\n allocated: count('allocated'),\n partially_allocated: count('partially_allocated'),\n matched: count('matched'),\n unmatched: count('unmatched'),\n duplicate: duplicates,\n rejected: parsed.errors.length,\n }\n const errors = parsed.errors.slice(0, MAX_STORED_ERRORS)\n await em.nativeUpdate(BillingPaymentImport, { id: batch.id } as never, { counts, errors, updatedAt: new Date() } as never)\n\n return {\n summary: { importId: batch.id, fileName: params.fileName, rowCount: batch.rowCount, counts, errors },\n effects,\n paymentIds,\n }\n}\n"],
5
+ "mappings": "AACA,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,4BAA4B;AACrD,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,iBAAiB,yBAA6C;AACvE,SAAS,sBAAsB,oBAAgE;AAmC/F,MAAM,oBAAoB;AAE1B,eAAe,mBAAmB,IAAmB,OAAgB,MAAsC;AACzG,MAAI,KAAK,WAAW,EAAG,QAAO,oBAAI,IAAI;AACtC,QAAM,OAAQ,MAAM,GAAG;AAAA,IACrB;AAAA;AAAA,IAEA,CAAC,MAAM,UAAU,MAAM,gBAAgB,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG;AAAA,EACnF;AACA,SAAO,IAAI,KAAK,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;AAC1D;AAGA,eAAsB,wBACpB,IACA,OACA,YACyC;AACzC,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,WAAW,QAAQ,CAAC,QAAQ,qBAAqB,GAAG,CAAC,CAAC,CAAC;AAClF,MAAI,OAAO,WAAW,EAAG,QAAO,oBAAI,IAAI;AACxC,QAAM,OAAQ,MAAM,GAAG;AAAA,IACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,CAAC,MAAM,UAAU,MAAM,gBAAgB,IAAI,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,QAAQ,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG;AAAA,EACvG;AAUA,QAAM,MAAM,oBAAI,IAA+B;AAC/C,aAAW,OAAO,QAAQ,CAAC,GAAG;AAC5B,QAAI,IAAI,IAAI,OAAO,YAAY,GAAG;AAAA,MAChC,WAAW,IAAI;AAAA,MACf,QAAQ,IAAI;AAAA,MACZ,eAAe,IAAI;AAAA,MACnB,aAAa,IAAI;AAAA,MACjB,cAAc,IAAI;AAAA,MAClB,cAAc,IAAI;AAAA,MAClB,QAAQ,IAAI;AAAA,MACZ,aAAa,IAAI;AAAA,IACnB,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAKA,eAAe,cAAc,KAAoB,OAAgB,SAA8C;AAC7G,QAAM,UAAU,aAAa;AAC7B,QAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,MAAI,SAAS,YAAY,YAAa,QAAO;AAC7C,QAAM,UAAU,EAAE,IAAI,SAAS,eAAe,cAAc,QAAQ,aAAa;AACjF,QAAM,SAAS,EAAE,MAAM,WAAoB,IAAI,QAAQ,GAAG;AAC1D,MAAI,SAAS,YAAY,YAAY;AACnC,QAAI,YAAY,QAAQ,QAAQ,MAAM;AACtC,UAAM,cAAc,MAAM,oBAAoB,KAAK,OAAO,SAAS,SAAS,UAAU;AACtF,eAAW,cAAc,aAAa;AACpC,UAAI,aAAa,EAAG;AACpB,YAAM,OAAO,KAAK,IAAI,WAAW,WAAW,gBAAgB;AAC5D,UAAI,QAAQ,EAAG;AACf,mBAAa,SAAS,MAAM,SAAS,KAAK,OAAO,EAAE,QAAQ,WAAW,WAAW,IAAI,aAAa,MAAM,IAAI,OAAO,CAAC,CAAC;AACrH,mBAAa;AAAA,IACf;AAAA,EACF;AACA,eAAa,SAAS,MAAM,mBAAmB,KAAK,OAAO,SAAS,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9F,SAAO;AACT;AAEA,eAAsB,eACpB,IACA,QACuF;AACvF,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,SAAS,gBAAgB,OAAO,OAAO;AAC7C,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI,cAAc,KAAK,EAAE,OAAO,OAAO,OAAO,MAAM,sCAAsC,CAAC;AAAA,EACnG;AACA,QAAM,OAAO,kBAAkB,OAAO,OAAO,IAAI;AACjD,QAAM,WAAW,MAAM,mBAAmB,IAAI,OAAO,IAAI;AACzD,QAAM,QAA0D,CAAC;AACjE,MAAI,aAAa;AACjB,SAAO,KAAK,QAAQ,CAAC,KAAK,MAAM;AAC9B,QAAI,SAAS,IAAI,KAAK,CAAC,CAAC,EAAG,eAAc;AAAA,QACpC,OAAM,KAAK,EAAE,KAAK,WAAW,KAAK,CAAC,EAAE,CAAC;AAAA,EAC7C,CAAC;AAED,QAAM,YAAY,MAAM,wBAAwB,IAAI,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC;AAC5F,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,QAAQ,GAAG,OAAO,sBAAsB;AAAA,IAC5C,gBAAgB,MAAM;AAAA,IACtB,UAAU,MAAM;AAAA,IAChB,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO,KAAK,SAAS,OAAO,OAAO;AAAA,IAC7C,QAAQ,OAAO,UAAU;AAAA,IACzB,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC;AACD,KAAG,QAAQ,KAAK;AAChB,QAAM,GAAG,MAAM;AAEf,QAAM,UAAqB,MAAM,IAAI,CAAC,EAAE,KAAK,UAAU,MAAM;AAC3D,UAAM,WAAW,aAAa,EAAE,WAAW,IAAI,WAAW,UAAU,IAAI,SAAS,GAAG,SAAS;AAC7F,UAAM,UAAU,GAAG,OAAO,gBAAgB;AAAA,MACxC,gBAAgB,MAAM;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,YAAY,oBAAI,KAAK,GAAG,IAAI,UAAU,YAAY;AAAA,MAClD,QAAQ,IAAI;AAAA,MACZ,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,cAAc,IAAI;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,MAChB,eAAe,SAAS;AAAA,MACxB,QAAQ,SAAS,YAAY,cAAc,cAAc;AAAA,MACzD,mBAAmB,IAAI;AAAA,MACvB,aAAa,SAAS,YAAY,aAAa,OAAO,SAAS;AAAA,MAC/D;AAAA,MACA,UAAU,EAAE,UAAU,IAAI,KAAK;AAAA,MAC/B,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC;AACD,OAAG,QAAQ,OAAO;AAClB,WAAO,EAAE,SAAS,SAAS;AAAA,EAC7B,CAAC;AACD,QAAM,GAAG,MAAM;AAGf,QAAM,UAAU,aAAa;AAC7B,QAAM,YAAY,oBAAI,IAAuB;AAC7C,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,SAAS,YAAY,YAAa;AAC3C,UAAM,OAAO,UAAU,IAAI,KAAK,SAAS,aAAa,KAAK,CAAC;AAC5D,SAAK,KAAK,IAAI;AACd,cAAU,IAAI,KAAK,SAAS,eAAe,IAAI;AAAA,EACjD;AACA,aAAW,CAAC,eAAe,KAAK,KAAK,WAAW;AAC9C,UAAM,gBAAgB,IAAI,EAAE,UAAU,MAAM,UAAU,cAAc,GAAG,OAAO,QAAQ;AACpF,iBAAW,QAAQ,MAAO,cAAa,SAAS,MAAM,cAAc,KAAK,OAAO,IAAI,CAAC;AAAA,IACvF,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;AAClD,QAAM,WAAW,WAAW,SACtB,MAAM,GAAG;AAAA,IACT;AAAA;AAAA,IAEA,CAAC,MAAM,UAAU,MAAM,gBAAgB,MAAM,EAAE;AAAA,EACjD,IACA,CAAC;AACL,QAAM,QAAQ,CAAC,WAAmB,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM,GAAG,KAAK,CAAC;AAC1F,QAAM,SAAuB;AAAA,IAC3B,WAAW,MAAM,WAAW;AAAA,IAC5B,qBAAqB,MAAM,qBAAqB;AAAA,IAChD,SAAS,MAAM,SAAS;AAAA,IACxB,WAAW,MAAM,WAAW;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,OAAO,OAAO;AAAA,EAC1B;AACA,QAAM,SAAS,OAAO,OAAO,MAAM,GAAG,iBAAiB;AACvD,QAAM,GAAG,aAAa,sBAAsB,EAAE,IAAI,MAAM,GAAG,GAAY,EAAE,QAAQ,QAAQ,WAAW,oBAAI,KAAK,EAAE,CAAU;AAEzH,SAAO;AAAA,IACL,SAAS,EAAE,UAAU,MAAM,IAAI,UAAU,OAAO,UAAU,UAAU,MAAM,UAAU,QAAQ,OAAO;AAAA,IACnG;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,36 @@
1
+ const TOKEN_RE = /[A-Za-z0-9][A-Za-z0-9/_.\-]{1,62}[A-Za-z0-9]/g;
2
+ function extractInvoiceTokens(reference) {
3
+ if (!reference) return [];
4
+ const tokens = [];
5
+ for (const match of reference.matchAll(TOKEN_RE)) {
6
+ const token = match[0].toUpperCase();
7
+ if (!/\d/.test(token)) continue;
8
+ if (!tokens.includes(token)) tokens.push(token);
9
+ }
10
+ return tokens;
11
+ }
12
+ const OPEN = ["posted", "partially_paid"];
13
+ const RECEIVABLE = ["invoice", "debit_memo"];
14
+ function matchPayment(payment, documentsByNumber) {
15
+ const hits = extractInvoiceTokens(payment.reference).map((token) => documentsByNumber.get(token)).filter((doc) => Boolean(doc));
16
+ if (hits.length === 0) return { outcome: "unmatched", billAccountId: null, reason: "no_reference" };
17
+ const accounts = new Set(hits.map((doc) => doc.billAccountId));
18
+ if (accounts.size > 1) return { outcome: "unmatched", billAccountId: null, reason: "no_reference" };
19
+ const billAccountId = hits[0].billAccountId;
20
+ if (hits.some((doc) => doc.billingMode === "prepaid" || doc.documentType === "receipt")) {
21
+ return { outcome: "unmatched", billAccountId, reason: "prepaid_account" };
22
+ }
23
+ if (hits.some((doc) => doc.currencyCode !== payment.currency.toUpperCase())) {
24
+ return { outcome: "unmatched", billAccountId, reason: "currency_mismatch" };
25
+ }
26
+ const open = hits.filter(
27
+ (doc) => RECEIVABLE.includes(doc.documentType) && OPEN.includes(doc.status) && Number.parseFloat(doc.outstanding) > 0
28
+ );
29
+ if (open.length === 0) return { outcome: "credit", billAccountId, reason: "invoice_already_paid" };
30
+ return { outcome: "allocate", billAccountId, invoiceIds: open.map((doc) => doc.invoiceId) };
31
+ }
32
+ export {
33
+ extractInvoiceTokens,
34
+ matchPayment
35
+ };
36
+ //# sourceMappingURL=paymentMatcher.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/billing/lib/paymentMatcher.ts"],
4
+ "sourcesContent": ["/**\n * Payment auto-matcher (Spec C, C-D1) \u2014 pure.\n *\n * Matching uses ONLY invoice numbers found in the payment reference:\n * 1. `extractInvoiceTokens` pulls number-like tokens out of the title;\n * 2. the import looks up all tokens of the whole file in one query and\n * passes the hits as a map (upper-cased number \u2192 document);\n * 3. `matchPayment` decides per row.\n *\n * Exact, full-number, case-insensitive matches only (false positives are\n * worse than misses; every auto allocation is un-allocatable anyway).\n */\n\nexport type MatchableDocument = {\n invoiceId: string\n number: string\n billAccountId: string\n billingMode: string\n currencyCode: string\n documentType: string\n status: string\n outstanding: string\n}\n\nexport type MatchDecision =\n | {\n outcome: 'allocate'\n billAccountId: string\n /** Referenced open receivables, in the order they appear in the title. */\n invoiceIds: string[]\n }\n | {\n /** Account known but nothing referenced is open \u2192 the amount becomes credit. */\n outcome: 'credit'\n billAccountId: string\n reason: 'invoice_already_paid'\n }\n | {\n outcome: 'unmatched'\n billAccountId: string | null\n reason: 'no_reference' | 'currency_mismatch' | 'prepaid_account'\n }\n\nconst TOKEN_RE = /[A-Za-z0-9][A-Za-z0-9/_.\\-]{1,62}[A-Za-z0-9]/g\n\n/** Number-like tokens of a payment title, upper-cased, de-duplicated, in order. */\nexport function extractInvoiceTokens(reference: string | null | undefined): string[] {\n if (!reference) return []\n const tokens: string[] = []\n for (const match of reference.matchAll(TOKEN_RE)) {\n const token = match[0].toUpperCase()\n // A number needs at least one digit; plain words are never invoice numbers.\n if (!/\\d/.test(token)) continue\n if (!tokens.includes(token)) tokens.push(token)\n }\n return tokens\n}\n\nconst OPEN = ['posted', 'partially_paid']\nconst RECEIVABLE = ['invoice', 'debit_memo']\n\nexport function matchPayment(\n payment: { reference: string | null; currency: string },\n documentsByNumber: ReadonlyMap<string, MatchableDocument>,\n): MatchDecision {\n const hits = extractInvoiceTokens(payment.reference)\n .map((token) => documentsByNumber.get(token))\n .filter((doc): doc is MatchableDocument => Boolean(doc))\n if (hits.length === 0) return { outcome: 'unmatched', billAccountId: null, reason: 'no_reference' }\n\n const accounts = new Set(hits.map((doc) => doc.billAccountId))\n // References to several customers are ambiguous \u2014 the operator decides.\n if (accounts.size > 1) return { outcome: 'unmatched', billAccountId: null, reason: 'no_reference' }\n const billAccountId = hits[0].billAccountId\n\n // Prepaid accounts (or their top-up receipts): never allocated (C-D3).\n if (hits.some((doc) => doc.billingMode === 'prepaid' || doc.documentType === 'receipt')) {\n return { outcome: 'unmatched', billAccountId, reason: 'prepaid_account' }\n }\n if (hits.some((doc) => doc.currencyCode !== payment.currency.toUpperCase())) {\n return { outcome: 'unmatched', billAccountId, reason: 'currency_mismatch' }\n }\n const open = hits.filter(\n (doc) => RECEIVABLE.includes(doc.documentType) && OPEN.includes(doc.status) && Number.parseFloat(doc.outstanding) > 0,\n )\n if (open.length === 0) return { outcome: 'credit', billAccountId, reason: 'invoice_already_paid' }\n return { outcome: 'allocate', billAccountId, invoiceIds: open.map((doc) => doc.invoiceId) }\n}\n"],
5
+ "mappings": "AA2CA,MAAM,WAAW;AAGV,SAAS,qBAAqB,WAAgD;AACnF,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,QAAM,SAAmB,CAAC;AAC1B,aAAW,SAAS,UAAU,SAAS,QAAQ,GAAG;AAChD,UAAM,QAAQ,MAAM,CAAC,EAAE,YAAY;AAEnC,QAAI,CAAC,KAAK,KAAK,KAAK,EAAG;AACvB,QAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO,KAAK,KAAK;AAAA,EAChD;AACA,SAAO;AACT;AAEA,MAAM,OAAO,CAAC,UAAU,gBAAgB;AACxC,MAAM,aAAa,CAAC,WAAW,YAAY;AAEpC,SAAS,aACd,SACA,mBACe;AACf,QAAM,OAAO,qBAAqB,QAAQ,SAAS,EAChD,IAAI,CAAC,UAAU,kBAAkB,IAAI,KAAK,CAAC,EAC3C,OAAO,CAAC,QAAkC,QAAQ,GAAG,CAAC;AACzD,MAAI,KAAK,WAAW,EAAG,QAAO,EAAE,SAAS,aAAa,eAAe,MAAM,QAAQ,eAAe;AAElG,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC;AAE7D,MAAI,SAAS,OAAO,EAAG,QAAO,EAAE,SAAS,aAAa,eAAe,MAAM,QAAQ,eAAe;AAClG,QAAM,gBAAgB,KAAK,CAAC,EAAE;AAG9B,MAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,gBAAgB,aAAa,IAAI,iBAAiB,SAAS,GAAG;AACvF,WAAO,EAAE,SAAS,aAAa,eAAe,QAAQ,kBAAkB;AAAA,EAC1E;AACA,MAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,iBAAiB,QAAQ,SAAS,YAAY,CAAC,GAAG;AAC3E,WAAO,EAAE,SAAS,aAAa,eAAe,QAAQ,oBAAoB;AAAA,EAC5E;AACA,QAAM,OAAO,KAAK;AAAA,IAChB,CAAC,QAAQ,WAAW,SAAS,IAAI,YAAY,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,WAAW,IAAI,WAAW,IAAI;AAAA,EACtH;AACA,MAAI,KAAK,WAAW,EAAG,QAAO,EAAE,SAAS,UAAU,eAAe,QAAQ,uBAAuB;AACjG,SAAO,EAAE,SAAS,YAAY,eAAe,YAAY,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;AAC5F;",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ import { Attachment } from "@open-mercato/core/modules/attachments/data/entities";
2
+ import { StorageDriverFactory } from "@open-mercato/core/modules/attachments/lib/drivers";
3
+ import { createAttachmentFromBuffer } from "@open-mercato/core/modules/attachments/lib/createFromBuffer";
4
+ async function storeAttachment(em, scope, params) {
5
+ const created = await createAttachmentFromBuffer({
6
+ em,
7
+ tenantId: scope.tenantId,
8
+ organizationId: scope.organizationId,
9
+ entityId: params.entityId,
10
+ recordId: params.recordId,
11
+ fileName: params.fileName,
12
+ mimeType: params.mimeType,
13
+ buffer: Buffer.from(params.bytes)
14
+ });
15
+ return created.id;
16
+ }
17
+ async function readAttachment(em, scope, attachmentId) {
18
+ const attachment = await em.findOne(Attachment, {
19
+ id: attachmentId,
20
+ tenantId: scope.tenantId,
21
+ organizationId: scope.organizationId
22
+ });
23
+ if (!attachment) return null;
24
+ try {
25
+ const driver = await new StorageDriverFactory(em).resolveForPartition(attachment.partitionCode, scope);
26
+ const { buffer } = await driver.read(attachment.partitionCode, attachment.storagePath);
27
+ return {
28
+ bytes: new Uint8Array(buffer),
29
+ mimeType: attachment.mimeType ?? "application/octet-stream",
30
+ fileName: attachment.fileName
31
+ };
32
+ } catch (err) {
33
+ console.warn("[billing.pdf] attachment could not be read", attachmentId, err);
34
+ return null;
35
+ }
36
+ }
37
+ function attachmentIdFromUrl(url) {
38
+ const match = /\/api\/attachments\/(?:file|image)\/([0-9a-f-]{36})/i.exec(url ?? "");
39
+ return match ? match[1] : null;
40
+ }
41
+ export {
42
+ attachmentIdFromUrl,
43
+ readAttachment,
44
+ storeAttachment
45
+ };
46
+ //# sourceMappingURL=attachmentStore.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/billing/lib/pdf/attachmentStore.ts"],
4
+ "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { Attachment } from '@open-mercato/core/modules/attachments/data/entities'\nimport { StorageDriverFactory } from '@open-mercato/core/modules/attachments/lib/drivers'\nimport { createAttachmentFromBuffer } from '@open-mercato/core/modules/attachments/lib/createFromBuffer'\n\n/**\n * Thin adapter over core `attachments` (a platform module billing requires,\n * P-D1): stores frozen invoice PDFs and reads stored files (PDFs, the\n * settings logo). The only place billing touches the attachments module, so\n * tests mock this file instead of storage drivers.\n */\n\nexport type StoredFile = { bytes: Uint8Array; mimeType: string; fileName: string }\nexport type FileScope = { tenantId: string; organizationId: string }\n\nexport async function storeAttachment(\n em: EntityManager,\n scope: FileScope,\n params: { entityId: string; recordId: string; fileName: string; mimeType: string; bytes: Uint8Array },\n): Promise<string> {\n const created = await createAttachmentFromBuffer({\n em,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n entityId: params.entityId,\n recordId: params.recordId,\n fileName: params.fileName,\n mimeType: params.mimeType,\n buffer: Buffer.from(params.bytes),\n })\n return created.id\n}\n\n/** Reads a stored attachment of this scope; null when missing or unreadable. */\nexport async function readAttachment(em: EntityManager, scope: FileScope, attachmentId: string): Promise<StoredFile | null> {\n const attachment = await em.findOne(Attachment, {\n id: attachmentId,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n } as never)\n if (!attachment) return null\n try {\n const driver = await new StorageDriverFactory(em).resolveForPartition(attachment.partitionCode, scope)\n const { buffer } = await driver.read(attachment.partitionCode, attachment.storagePath)\n return {\n bytes: new Uint8Array(buffer),\n mimeType: attachment.mimeType ?? 'application/octet-stream',\n fileName: attachment.fileName,\n }\n } catch (err) {\n console.warn('[billing.pdf] attachment could not be read', attachmentId, err)\n return null\n }\n}\n\n/** Attachment id from an `/api/attachments/file/<id>` (or image) URL \u2014 e.g. `Organization.logo_url`. */\nexport function attachmentIdFromUrl(url: string | null | undefined): string | null {\n const match = /\\/api\\/attachments\\/(?:file|image)\\/([0-9a-f-]{36})/i.exec(url ?? '')\n return match ? match[1] : null\n}\n"],
5
+ "mappings": "AACA,SAAS,kBAAkB;AAC3B,SAAS,4BAA4B;AACrC,SAAS,kCAAkC;AAY3C,eAAsB,gBACpB,IACA,OACA,QACiB;AACjB,QAAM,UAAU,MAAM,2BAA2B;AAAA,IAC/C;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM;AAAA,IACtB,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB,QAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,EAClC,CAAC;AACD,SAAO,QAAQ;AACjB;AAGA,eAAsB,eAAe,IAAmB,OAAkB,cAAkD;AAC1H,QAAM,aAAa,MAAM,GAAG,QAAQ,YAAY;AAAA,IAC9C,IAAI;AAAA,IACJ,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM;AAAA,EACxB,CAAU;AACV,MAAI,CAAC,WAAY,QAAO;AACxB,MAAI;AACF,UAAM,SAAS,MAAM,IAAI,qBAAqB,EAAE,EAAE,oBAAoB,WAAW,eAAe,KAAK;AACrG,UAAM,EAAE,OAAO,IAAI,MAAM,OAAO,KAAK,WAAW,eAAe,WAAW,WAAW;AACrF,WAAO;AAAA,MACL,OAAO,IAAI,WAAW,MAAM;AAAA,MAC5B,UAAU,WAAW,YAAY;AAAA,MACjC,UAAU,WAAW;AAAA,IACvB;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,KAAK,8CAA8C,cAAc,GAAG;AAC5E,WAAO;AAAA,EACT;AACF;AAGO,SAAS,oBAAoB,KAA+C;AACjF,QAAM,QAAQ,uDAAuD,KAAK,OAAO,EAAE;AACnF,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ const NOTO_SANS_REGULAR_BASE64 = "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A6IADAJKAAQCNgAAAjwAJgFJAFABdAAKAUkAGQI8ACYBvP/+ARkAKAIxAC4CZwBVAeAANwJnADcCNAA3AVgADwJnADcCagBVAQIATgEC/8kCFgBVAQIAVQOnAFUCagBVAl0ANwJnAFUCZwA3AZ0AVQHfADMBaQAQAmoATwH8AAADEgALAhEAEgH+AAEB1gAnAXwAHAInAO8BfAAgAjwAMgEEAAABDQBIAjwAWwI8ACACPAA7AjwADgInAO8CAQA7AkQAlQNAADEBZQAgAf0AKAI8ADIBQgAoA0AAMQH0//0BrAA3AjwAMgFeABgBXgARARkAKAJvAFUCjwA3AQwASADhAA4BXgAlAXgAIAH9ACcC6QAiAwMAFgMNAA8BsgAYAn8AAAJ/AAACfwAAAn8AAAJ/AAACfwAAA3H//wJ4AD0CLABhAiwAYQIsAGECLABhAVMAKAFTACgBUwABAVMAHgLaAB4C+ABhAw0APQMNAD0DDQA9Aw0APQMNAD0CPABAAw0APQLbAFoC2wBaAtsAWgLbAFoCNgAAAl0AYQJ3AFUCMQAuAjEALgIxAC4CMQAuAjEALgIxAC4DYAAuAeAANwI0ADcCNAA3AjQANwI0ADcBAv//AQIATAEC/9gBAv/1Al0ANwJqAFUCXQA3Al0ANwJdADcCXQA3Al0ANwI8ADICXQA3AmoATwJqAE8CagBPAmoATwH+AAECZwBVAf4AAQJ/AAACMQAuAn8AAAIxAC4CfwAAAjEALgJ4AD0B4AA3AngAPQHgADcCeAA9AeAANwJ4AD0B4AA3AtoAYQJnADcC2gAeAmkANwIsAGECNAA3AiwAYQI0ADcCLABhAjQANwIsAGECNAA3AiwAYQI0ADcC2AA9AmcANwLYAD0CZwA3AtgAPQJnADcC2AA9AmcANwLlAGECav/ZAuUAAAJqAAkBU//zAQL/ygFTABUBAv/sAVMADgEC/+UBUwAoAQIAGwFTACgCZAAoAgQATgER/7IBAv/JAmsAYQIWAFUCFgBVAgwAVwECAEwCDABhAQIAQQIMAGEBAgBVAgwAYQEMAFUCDAANAQL/9wL4AGECagBVAvgAYQJqAFUC+ABhAmoAVQKwAAEC+ABhAmoAVQMNAD0CXQA3Aw0APQJdADcDDQA9Al0ANwOgAD0DsgA2Am4AYQGdAFUCbgBhAZ0APgJuAGEBnQBHAiUAMwHfADMCJQAzAd8AMwIlADMB3wAzAiUAMwHfADMCLAAKAWkAEAIsAAoBaQAQAtsAWgJqAE8C2wBaAmoATwLbAFoCagBPAtsAWgJqAE8C2wBaAmoATwLbAFoCagBPA6IADAMSAAsCNgAAAf4AAQI2AAACPAAmAdYAJwI8ACYB1gAnAjwAJgHWACcBRgBVAaIAKAGiACgBeQAoAYcAKAC3ACgBLAAoAPUAKAG/ACgBtwAoAfQAKAPoACgD6AAoAZv//gCvAAwArwAMAPoAHwCvAAwBZwAMAWcADAGgAB8CAABBAgAAPAF4AE0DFwBIBJkAMQDoACcBmAAnATYAKAE2ACcCPAAXAwUAEQAA/8ACLAAKAWkAEAI8ACgCJwCBAWcADAJIACcCsAAPAloADwJaAA8DsgAPA7IADwECAFUBAv/JAY8AFAEMAEgB9AC8AhgASAFwAEQBQgAoAUIAKAG4/+YA6P/mAlr/5gYIAC0CPAAyAAEAAAQt/tsAAAsY/ZP9lArwA+gAAAAAAAAAAAAAAAAAAAF2AAQCQQGQAAUAAAKKAlgAAABLAooCWAAAAV4AMgFCAAACCwUCBAUEAgIEgAAABwAAAAoAAAAAAAAAAEdPT0cAwAAgIhIELf7bAAAEZAGLAAAAkwAAAAACGALKAAAAIAAEAAAAAgAAAAMAAAAUAAMAAQAAABQABAC2AAAAGAAQAAMACAB+ATABMQFhAWMBfyAnIDogrCEiIhL//wAAACAAoAExATIBYgFkIBAgMCCsISIiEv///+H/wAA3/7//+/+9AAAAAOCu4DnfYwABAAAAAAAAAAAAAAAAAAwAOgAAAAAAAAAAAW8BcAFfAUYBRwFIAWABSQFKAUsBTAFNAU4BTwFQAWEBUQFSAVMBbgFsAW0BVAFrAVUBdAFWAVcBYgFyAXEBcwFqAVgBWQAAAAAABwBaAAMAAQQJAAAAtgAAAAMAAQQJAAEAEgC2AAMAAQQJAAIADgDIAAMAAQQJAAMANgDWAAMAAQQJAAQAIgEMAAMAAQQJAAUAVAEuAAMAAQQJAAYAIAGCAEMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADIAMgAgAFQAaABlACAATgBvAHQAbwAgAFAAcgBvAGoAZQBjAHQAIABBAHUAdABoAG8AcgBzACAAKABoAHQAdABwAHMAOgAvAC8AZwBpAHQAaAB1AGIALgBjAG8AbQAvAG4AbwB0AG8AZgBvAG4AdABzAC8AbABhAHQAaQBuAC0AZwByAGUAZQBrAC0AYwB5AHIAaQBsAGwAaQBjACkATgBvAHQAbwAgAFMAYQBuAHMAUgBlAGcAdQBsAGEAcgAyAC4AMAAxADUAOwBHAE8ATwBHADsATgBvAHQAbwBTAGEAbgBzAC0AUgBlAGcAdQBsAGEAcgBOAG8AdABvACAAUwBhAG4AcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADIALgAwADEANQA7ACAAdAB0AGYAYQB1AHQAbwBoAGkAbgB0ACAAKAB2ADEALgA4AC4ANAAuADcALQA1AGQANQBiACkATgBvAHQAbwBTAGEAbgBzAC0AUgBlAGcAdQBsAGEAcgADAAAAAAAA/5wAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAwAAABSAAAAAgALAB0AHwABACIAOwABAEIAWwABAGoAagABAHoAegABAIAAlgABAJgAtgABALgBPAABAV0BXgABAWMBZwACAWgBaAABAA4ABQAYABgAGAAgACAAAgABAWMBZwAAAAEABAABAS0AAgAGAAoAAQE7AAECdwABAAAACgAwAEAABERGTFQAGmN5cmwAGmdyZWsAGmxhdG4AGgAEAAAAAP//AAEAAAABa2VybgAIAAAAAgABAAAAAgAGD64AAgAIAAIACgMCAAEArAAEAAAAUQLiAVIC4gIGAooBgALoAp4BlgLoAnQC6AHkAu4C0gLSAtgCBgHuAfQC0gLSAtICBgIQAugCQgKKAooCigKKAooCigKeAp4CngKeAp4C6ALoAugC6ALoAugC6ALYAnQC0gLSAooCigJ+AugCkALoAp4CngKeAp4CngKEAooCkALoAugC6AKeAu4CpALuAtIC0gLYAtIC2ALiAuIC4gLiAugC7gABAFEAAwAHAAgACQAiACMAJQAmACcAMAAxADIAMwA1ADcAOAA6ADwAQABEAFcAWABaAFwAYQB7AH8AgACBAIIAgwCEAIUAhgCIAIkAigCLAJAAkgCTAJQAlQCWAJgAnQCeAL0AvwDAAMIAxADOAM8A0ADSANQA1gDYANoA6QDuAP0BCwENAQ8BEQEhASIBIwExATIBMwE0ATUBSgFLAU4BTwFZAV0ACwA1/8QAN//sADj/7AA6/+IAnf/iASH/xAEj/8QBMf/sATP/4gE1/+IBXf/EAAUADf/2AA//9gFM//YBUP/2AVT/9gATAAoAFAAN/8QAD//EACAAFAAi/+wAPgAUAF4AFACA/+wAgf/sAIL/7ACD/+wAhP/sAIX/7ADA/+wAwv/sAMT/7AFM/8QBUP/EAVT/xAACAGv/9gFY//YAAQArAF8ABAADABQACAAUAUsAFAFPABQAAgArAFoASwAoAAwAKwAyADX/7AA3//YAOP/2ADr/4gCd/+IBIf/sASP/7AEx//YBM//iATX/4gFd/+wADAArAGQANf/YADf/4gA4/+IAOv/YAJ3/2AEh/9gBI//YATH/4gEz/9gBNf/YAV3/2AACAAf/9gA5/+wAAQArAG4AAQDpAIIAAQArADIAAwACADIAIABaAOcARgABACsAPAALAAIARgADAFoACABaAAoAeAAgAG4APgB4AF4AeAFKAEYBSwBaAU4ARgFPAFoAAQAgABQAAgAH/+IAIAAUAAEA6QBGAAEAOf/sAAIAB//sACAAFAACBcIABAAABxoJ1gAbABsAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/2//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/2AAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAD/xP/YAAD/ugAAAAAAAAAAAAAAAP+6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAD/9v/2AAD/4v/YAAAAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/YAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//YAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/O/+z/4v/O/8QAAAAAAAAAAAAAAAAAAP/E/87/2AAAAAAAAAAA/+wAAAAAAAD/sP/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAA/+wAAAAAAAD/9gAAAAD/4v/sAAD/7AAAAAAAAAAAAAAAAP+wAAAAAAAAAAAAAAAAAAAAAP/s//b/9v/s/9gAAAAAAAAAAAAAAAAAAP/O//b/9gAAAAAAAAAAAAAAAAAAAAD/4v/2AAAAAP/EAAD/4v/Y/7oAAAAAAAAACgAUAAAAFAAA/+L/4gAAAAAAAAAAAAAAAP+wAAAAAAAAAAAAAP+6/+z/zv+w/7oAAP/sAAAAAAAAAAAAFP/E/7r/xAAAAAD/2AAA/9gAAAAAAAD/xP/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAA/84AAAAAAAD/7AAAAAD/xP/EAAD/ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAP/sAAAAAAAAAAAAAAAAAAAAAP9g//YAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/84AAAAAAAAAAAAAAAAAAP9+AAAAAAAA//YAAAAAAAAAAP/iAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAWgAAAAAAAAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAA8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4v/2AAD/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
2
+ const NOTO_SANS_BOLD_BASE64 = "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AnIAAAJDABgBSwBGAZ8ABgFLABkCPAAXAZv//gFtACgCVwAoAngASQIEAC8CeAAvAlUALwGDABQCeAAvAooASQErAEQBKv/LAmwATgEqAEkDzwBJAooASQJxAC8CeABJAngALwG/AEkB9gAuAbIAFwKKAEYCOwAAA1gACgJCAAUCOwAAAe0AHgGKAA8CJwDeAYoAKAI8ACsBBAAAAR4AOQI8AEYCPAAoAjgANAI8AAMCJwDeAeYANAJRAH0DQAAxAX0AGwJmACYCPAArAUAAHANAADEB9P/9AagAKAI8ACsBewAXAXwAGgFtACgCjQBJAogANAEZADYBBwATAXwAIAGCABsCZgAmAz4AFgNqABYDTQAsAd0AFAK0AAACtAAAArQAAAK0AAACtAAAArQAAAO4AAACggA3AjAAWgIwAFoCMABaAjAAWgGFAAsBhQAgAYX/9gGFABAC3AAVAyUAWgMXADcDFwA3AxcANwMXADcDFwA3AjwAPwMXADcC9ABVAvQAVQL0AFUC9ABVAnIAAAJ0AFoCwABJAlcAKAJXACgCVwAoAlcAKAJXACgCVwAoA5UAKgIEAC8CVQAvAlUALwJVAC8CVQAvASv//AErAEUBK//NASv/5QJzADACigBJAnEALwJxAC8CcQAvAnEALwJxAC8CPAArAmsALQKKAEYCigBGAooARgKKAEYCOwAAAngASQI7AAACtAAAAlcAKAK0AAACVwAoArQAAAJXACgCggA3AgQALwKCADcCBAAvAoIANwIEAC8CggA3AgQALwLcAFUCeAAvAtwAFQKFAC8CMABaAlUALwIwAFoCVQAvAjAAWgJVAC8CMABaAk8ALwIwAFoCVQAvAtQAOgJ4AC8C1AA6AngALwLUADoCeAAvAtQAOgJ4AC8C/QBaAor/zgL+AAACkQACAYX/3gEr/9EBhQAcASv/8AGFAAsBK//gAYUAIAErACkBhQAgAtIAIAJiAEQBS/+2ASr/ywKUAFoCbABOAmwATgIvAE0BKgBEAi8AVQEqAEECLwBVASoASQIvAFUBcQBJAjUAAQEx//QDJQBaAooASQMlAFoCigBJAyUAWgKKAEkDB//9Ay0AWgKKAEkDFwA3AnEALwMXADcCcQAvAxcANwJxAC8DzQA6A9IALQKQAFUBvwBJApAAVQG/AEECkABVAb8ALgInAC4B9gAu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AAAAAAAAADIAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAP/sAAAAAAAA//YAAAAA/+L/7AAA/+wAAAAAAAAAAAAAAAD/sAAAAAAAAAAAAAAAAAAAAAD/7P/2//b/7P/YAAAAAAAAAAAAAAAAAAD/zv/2//YAAAAAAAAAAAAAAAAAAAAA/+L/9gAAAAD/xAAA/+L/2P+6AAAAAAAAAAoAFAAAABQAAP/i/+IAAAAAAAAAAAAAAAD/sAAAAAAAAAAAAAD/uv/s/87/sP+6AAD/7AAAAAAAAAAAABT/xP+6/8QAAAAA/9gAAP/YAAAAAAAA/8T/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAP/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAP/OAAAAAAAA/+wAAAAA/8T/xAAA/7oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAD/7AAAAAAAAAAAAAAAAAAAAAD/YP/2AAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/OAAAAAAAAAAAAAAAAAAD/fgAAAAAAAP/2AAAAAAAAAAD/4gAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAJEAAAAAAAAAAABdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAPAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+L/9gAA/+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
3
+ export {
4
+ NOTO_SANS_BOLD_BASE64,
5
+ NOTO_SANS_REGULAR_BASE64
6
+ };
7
+ //# sourceMappingURL=embeddedFonts.js.map