@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/billing/lib/pdf/fonts/embeddedFonts.ts"],
4
+ "sourcesContent": ["// GENERATED by scripts/embed-pdf-fonts.mjs \u2014 do not edit.\n// Noto Sans (subset: Latin, Latin-1, Latin Extended-A, punctuation, \u20AC).\n// Copyright 2022 The Noto Project Authors. SIL Open Font License 1.1 (OFL.txt).\n\nexport const NOTO_SANS_REGULAR_BASE64 =\n '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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+ABhAmoAVQMNAD0CXQA3Aw0APQJdADcDDQA9Al0ANwOgAD0DsgA2Am4AYQGdAFUCbgBhAZ0APgJuAGEBnQBH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AAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAA/+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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'\n\nexport const NOTO_SANS_BOLD_BASE64 =\n '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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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'\n"],
5
+ "mappings": "AAIO,MAAM,2BACX;AAEK,MAAM,wBACX;",
6
+ "names": []
7
+ }
@@ -0,0 +1,194 @@
1
+ const LOCALE_BY_LANGUAGE = { en: "en-GB", pl: "pl-PL" };
2
+ function documentLocale(language) {
3
+ return LOCALE_BY_LANGUAGE[language] ?? "en-GB";
4
+ }
5
+ function toDate(value) {
6
+ if (!value) return null;
7
+ const date = typeof value === "string" ? new Date(value.length === 10 ? `${value}T00:00:00Z` : value) : value;
8
+ return Number.isNaN(date.getTime()) ? null : date;
9
+ }
10
+ function formatDocumentDate(value, locale) {
11
+ const date = toDate(value);
12
+ if (!date) return "\u2014";
13
+ return new Intl.DateTimeFormat(locale, { year: "numeric", month: "2-digit", day: "2-digit", timeZone: "UTC" }).format(
14
+ date
15
+ );
16
+ }
17
+ function formatDocumentMoney(value, currency, locale) {
18
+ const n = typeof value === "number" ? value : Number.parseFloat(value);
19
+ const safe = Number.isFinite(n) ? n : 0;
20
+ try {
21
+ return new Intl.NumberFormat(locale, { style: "currency", currency, minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(safe);
22
+ } catch {
23
+ return `${safe.toFixed(2)} ${currency}`;
24
+ }
25
+ }
26
+ function formatNumber(value, locale, maxFraction = 4) {
27
+ const n = typeof value === "number" ? value : Number.parseFloat(value);
28
+ return new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: maxFraction }).format(
29
+ Number.isFinite(n) ? n : 0
30
+ );
31
+ }
32
+ function formatPercent(rate, locale) {
33
+ return `${formatNumber(rate, locale, 2)} %`;
34
+ }
35
+ function plain(text) {
36
+ return text.replace(/[  ]/g, " ");
37
+ }
38
+ function addressLines(address) {
39
+ if (!address) return [];
40
+ const cityLine = [address.postal_code, address.city].filter(Boolean).join(" ");
41
+ return [address.line1, address.line2, cityLine, address.country].filter(
42
+ (part) => typeof part === "string" && part.trim() !== ""
43
+ );
44
+ }
45
+ function titleFor(doc, t) {
46
+ switch (doc.documentType) {
47
+ case "credit_memo":
48
+ return t("billing.pdf.title.credit_memo", "Credit memo");
49
+ case "debit_memo":
50
+ return t("billing.pdf.title.debit_memo", "Debit memo");
51
+ case "receipt":
52
+ return t("billing.pdf.title.receipt", "Receipt");
53
+ default:
54
+ return t("billing.pdf.title.invoice", "VAT invoice");
55
+ }
56
+ }
57
+ function buildInvoiceDocumentModel(params) {
58
+ const { invoice, lines, seller, buyer, translate: t } = params;
59
+ const locale = documentLocale(params.language);
60
+ const money = (value) => plain(formatDocumentMoney(value, invoice.currencyCode, locale));
61
+ const date = (value) => plain(formatDocumentDate(value, locale));
62
+ const isDraft = invoice.status === "draft";
63
+ const meta = [
64
+ [t("billing.pdf.meta.number", "Number"), invoice.number],
65
+ [t("billing.pdf.meta.issue_date", "Issue date"), isDraft ? "\u2014" : date(invoice.issueDate)]
66
+ ];
67
+ if (invoice.documentType !== "receipt") {
68
+ meta.push([t("billing.pdf.meta.due_date", "Due date"), isDraft ? "\u2014" : date(invoice.dueDate)]);
69
+ }
70
+ if (invoice.periodStart && invoice.periodEnd) {
71
+ meta.push([
72
+ t("billing.pdf.meta.service_period", "Service period"),
73
+ `${date(invoice.periodStart)} \u2013 ${date(invoice.periodEnd)}`
74
+ ]);
75
+ }
76
+ if (invoice.correctsNumber) {
77
+ meta.push([
78
+ t("billing.pdf.meta.corrects", "Corrects"),
79
+ invoice.correctsIssueDate ? `${invoice.correctsNumber} ${t("billing.pdf.meta.of", "of")} ${date(invoice.correctsIssueDate)}` : invoice.correctsNumber
80
+ ]);
81
+ }
82
+ if (invoice.correctionReason) {
83
+ meta.push([t("billing.pdf.meta.reason", "Reason"), invoice.correctionReason]);
84
+ }
85
+ const sellerLines = [
86
+ seller.legalName ?? "",
87
+ ...addressLines(seller.address),
88
+ seller.taxId ? `${t("billing.pdf.tax_id", "Tax ID")}: ${seller.taxId}` : ""
89
+ ].filter((line) => line !== "");
90
+ const buyerLines = [
91
+ buyer.name,
92
+ ...addressLines(buyer.address),
93
+ buyer.taxId ? `${t("billing.pdf.tax_id", "Tax ID")}: ${buyer.taxId}` : ""
94
+ ].filter((line) => line !== "");
95
+ const rows = lines.map((line, index) => {
96
+ const start = line.servicePeriodStart;
97
+ const end = line.servicePeriodEnd;
98
+ const description = start && end && !line.description.includes(" \u2013 ") ? `${line.description} (${date(start)} \u2013 ${date(end)})` : line.description;
99
+ return [
100
+ String(index + 1),
101
+ description,
102
+ plain(formatNumber(line.quantity, locale)),
103
+ money(line.unitPriceNet),
104
+ plain(formatPercent(line.taxRate, locale)),
105
+ money(line.netAmount),
106
+ money(line.taxAmount),
107
+ money(line.grossAmount)
108
+ ];
109
+ });
110
+ const byRate = /* @__PURE__ */ new Map();
111
+ for (const line of lines) {
112
+ const rate = Number.parseFloat(line.taxRate) || 0;
113
+ const bucket = byRate.get(rate) ?? { net: 0, tax: 0, gross: 0 };
114
+ bucket.net += Number.parseFloat(line.netAmount) || 0;
115
+ bucket.tax += Number.parseFloat(line.taxAmount) || 0;
116
+ bucket.gross += Number.parseFloat(line.grossAmount) || 0;
117
+ byRate.set(rate, bucket);
118
+ }
119
+ const vatRows = [...byRate.entries()].sort(([a], [b]) => b - a).map(([rate, sums]) => [plain(formatPercent(rate, locale)), money(sums.net), money(sums.tax), money(sums.gross)]);
120
+ const isCredit = invoice.documentType === "credit_memo";
121
+ const totals = [
122
+ [t("billing.pdf.totals.net", "Total net"), money(invoice.subtotalNet)],
123
+ [t("billing.pdf.totals.tax", "Total VAT"), money(invoice.taxTotal)],
124
+ isCredit ? [t("billing.pdf.totals.credited", "Total credited"), money(invoice.totalGross)] : [t("billing.pdf.totals.gross", "Total due"), money(invoice.totalGross)]
125
+ ];
126
+ const payable = invoice.documentType === "invoice" || invoice.documentType === "debit_memo";
127
+ const payment = payable && seller.iban ? {
128
+ heading: t("billing.pdf.payment.heading", "Payment"),
129
+ lines: [
130
+ `${t("billing.pdf.payment.amount", "Amount")}: ${money(invoice.totalGross)}`,
131
+ `${t("billing.pdf.payment.due", "Due by")}: ${isDraft ? "\u2014" : date(invoice.dueDate)}`,
132
+ seller.bankName ? `${t("billing.pdf.payment.bank", "Bank")}: ${seller.bankName}` : "",
133
+ `IBAN: ${seller.iban.replace(/(.{4})/g, "$1 ").trim()}`,
134
+ seller.bic ? `BIC: ${seller.bic}` : "",
135
+ // Spec C's matcher finds the invoice number in the transfer title.
136
+ `${t("billing.pdf.payment.title", "Transfer title")}: ${invoice.number}`
137
+ ].filter((line) => line !== "")
138
+ } : isCredit ? {
139
+ // A credit memo is not paid: it settles the corrected invoice and
140
+ // any remainder stays as credit on the customer's account (D-D10).
141
+ heading: t("billing.pdf.memo.settlement", "Settlement"),
142
+ lines: [
143
+ `${t("billing.pdf.memo.amount_credited", "Amount credited")}: ${money(invoice.totalGross)}`,
144
+ invoice.correctsNumber ? t("billing.pdf.memo.settled_against", "Settled against invoice {number}; any remainder is credited to your account.").replace(
145
+ "{number}",
146
+ invoice.correctsNumber
147
+ ) : t("billing.pdf.memo.credited_to_account", "The amount is credited to your account.")
148
+ ]
149
+ } : null;
150
+ return {
151
+ language: params.language,
152
+ title: titleFor(invoice, t),
153
+ number: invoice.number,
154
+ watermark: invoice.testRun ? t("billing.pdf.watermark.test", "TEST") : isDraft ? t("billing.pdf.watermark.draft", "DRAFT") : null,
155
+ meta,
156
+ seller: { heading: t("billing.pdf.seller", "Seller"), lines: sellerLines },
157
+ buyer: { heading: t("billing.pdf.buyer", "Buyer"), lines: buyerLines },
158
+ table: {
159
+ headers: [
160
+ "#",
161
+ t("billing.pdf.columns.description", "Description"),
162
+ t("billing.pdf.columns.quantity", "Qty"),
163
+ t("billing.pdf.columns.unit_net", "Unit net"),
164
+ t("billing.pdf.columns.tax_rate", "VAT %"),
165
+ t("billing.pdf.columns.net", "Net"),
166
+ t("billing.pdf.columns.tax", "VAT"),
167
+ t("billing.pdf.columns.gross", "Gross")
168
+ ],
169
+ align: ["right", "left", "right", "right", "right", "right", "right", "right"],
170
+ rows
171
+ },
172
+ vatSummary: {
173
+ heading: t("billing.pdf.vat_summary", "VAT summary"),
174
+ headers: [
175
+ t("billing.pdf.columns.tax_rate", "VAT %"),
176
+ t("billing.pdf.columns.net", "Net"),
177
+ t("billing.pdf.columns.tax", "VAT"),
178
+ t("billing.pdf.columns.gross", "Gross")
179
+ ],
180
+ rows: vatRows
181
+ },
182
+ totals,
183
+ payment,
184
+ footer: (seller.footer ?? "").split(/\r?\n/).map((line) => line.trim()).filter(Boolean),
185
+ pageLabel: (page, pages) => t("billing.pdf.page", "Page {page} of {pages}").replace("{page}", String(page)).replace("{pages}", String(pages))
186
+ };
187
+ }
188
+ export {
189
+ buildInvoiceDocumentModel,
190
+ documentLocale,
191
+ formatDocumentDate,
192
+ formatDocumentMoney
193
+ };
194
+ //# sourceMappingURL=invoiceModel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/billing/lib/pdf/invoiceModel.ts"],
4
+ "sourcesContent": ["/**\n * Invoice document model (Spec B) \u2014 pure.\n *\n * Turns a billing document + its lines + the frozen seller / buyer blocks\n * into the exact strings the PDF prints, in the document language. The\n * renderer (`invoiceTemplate.ts`) only lays this model out, so everything a\n * reader can check (labels, formatting, VAT summary, payment title) is\n * asserted here without parsing a PDF. Same shape as core forms'\n * \"build model, then lay out with pdf-lib\" snapshot pipeline.\n *\n * Credit / debit memos (Spec D) reuse it: only the title changes and a\n * \"corrects\" row is added to the header.\n */\n\nexport type DocumentTranslate = (key: string, fallback: string) => string\n\nexport type PdfAddress = {\n line1?: string | null\n line2?: string | null\n city?: string | null\n postal_code?: string | null\n country?: string | null\n}\n\nexport type PdfSeller = {\n legalName: string | null\n address: PdfAddress | null\n taxId: string | null\n bankName: string | null\n iban: string | null\n bic: string | null\n footer: string | null\n}\n\nexport type PdfBuyer = {\n name: string\n address: PdfAddress | null\n taxId: string | null\n}\n\nexport type PdfInvoice = {\n number: string\n documentType: 'invoice' | 'credit_memo' | 'debit_memo' | 'receipt'\n status: string\n testRun: boolean\n issueDate: Date | string | null\n dueDate: Date | string | null\n billDate: Date | string | null\n periodStart: Date | string | null\n periodEnd: Date | string | null\n currencyCode: string\n subtotalNet: string\n taxTotal: string\n totalGross: string\n correctsNumber?: string | null\n /** Spec D: issue date of the corrected document and the correction reason. */\n correctsIssueDate?: Date | string | null\n correctionReason?: string | null\n}\n\nexport type PdfLine = {\n description: string\n quantity: string\n unitPriceNet: string\n taxRate: string\n netAmount: string\n taxAmount: string\n grossAmount: string\n servicePeriodStart: Date | string | null\n servicePeriodEnd: Date | string | null\n}\n\nexport type InvoiceDocumentModel = {\n language: string\n title: string\n number: string\n watermark: string | null\n meta: Array<[string, string]>\n seller: { heading: string; lines: string[] }\n buyer: { heading: string; lines: string[] }\n table: {\n headers: string[]\n /** Column alignment: description left, numbers right. */\n align: Array<'left' | 'right'>\n rows: string[][]\n }\n vatSummary: { heading: string; headers: string[]; rows: string[][] }\n totals: Array<[string, string]>\n payment: { heading: string; lines: string[] } | null\n footer: string[]\n pageLabel: (page: number, pages: number) => string\n}\n\nconst LOCALE_BY_LANGUAGE: Record<string, string> = { en: 'en-GB', pl: 'pl-PL' }\n\nexport function documentLocale(language: string): string {\n return LOCALE_BY_LANGUAGE[language] ?? 'en-GB'\n}\n\nfunction toDate(value: Date | string | null | undefined): Date | null {\n if (!value) return null\n const date = typeof value === 'string' ? new Date(value.length === 10 ? `${value}T00:00:00Z` : value) : value\n return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function formatDocumentDate(value: Date | string | null | undefined, locale: string): string {\n const date = toDate(value)\n if (!date) return '\u2014'\n return new Intl.DateTimeFormat(locale, { year: 'numeric', month: '2-digit', day: '2-digit', timeZone: 'UTC' }).format(\n date,\n )\n}\n\nexport function formatDocumentMoney(value: string | number, currency: string, locale: string): string {\n const n = typeof value === 'number' ? value : Number.parseFloat(value)\n const safe = Number.isFinite(n) ? n : 0\n try {\n return new Intl.NumberFormat(locale, { style: 'currency', currency, minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(safe)\n } catch {\n return `${safe.toFixed(2)} ${currency}`\n }\n}\n\nfunction formatNumber(value: string | number, locale: string, maxFraction = 4): string {\n const n = typeof value === 'number' ? value : Number.parseFloat(value)\n return new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: maxFraction }).format(\n Number.isFinite(n) ? n : 0,\n )\n}\n\nfunction formatPercent(rate: string | number, locale: string): string {\n return `${formatNumber(rate, locale, 2)} %`\n}\n\n/** Normalizes Intl's narrow / regular no-break spaces to plain ones (safe for any embedded font). */\nfunction plain(text: string): string {\n return text.replace(/[\u00A0\u202F]/g, ' ')\n}\n\nfunction addressLines(address: PdfAddress | null | undefined): string[] {\n if (!address) return []\n const cityLine = [address.postal_code, address.city].filter(Boolean).join(' ')\n return [address.line1, address.line2, cityLine, address.country].filter(\n (part): part is string => typeof part === 'string' && part.trim() !== '',\n )\n}\n\nfunction titleFor(doc: PdfInvoice, t: DocumentTranslate): string {\n switch (doc.documentType) {\n case 'credit_memo':\n return t('billing.pdf.title.credit_memo', 'Credit memo')\n case 'debit_memo':\n return t('billing.pdf.title.debit_memo', 'Debit memo')\n case 'receipt':\n return t('billing.pdf.title.receipt', 'Receipt')\n default:\n return t('billing.pdf.title.invoice', 'VAT invoice')\n }\n}\n\nexport function buildInvoiceDocumentModel(params: {\n invoice: PdfInvoice\n lines: PdfLine[]\n seller: PdfSeller\n buyer: PdfBuyer\n language: string\n translate: DocumentTranslate\n}): InvoiceDocumentModel {\n const { invoice, lines, seller, buyer, translate: t } = params\n const locale = documentLocale(params.language)\n const money = (value: string | number) => plain(formatDocumentMoney(value, invoice.currencyCode, locale))\n const date = (value: Date | string | null | undefined) => plain(formatDocumentDate(value, locale))\n const isDraft = invoice.status === 'draft'\n\n const meta: Array<[string, string]> = [\n [t('billing.pdf.meta.number', 'Number'), invoice.number],\n [t('billing.pdf.meta.issue_date', 'Issue date'), isDraft ? '\u2014' : date(invoice.issueDate)],\n ]\n if (invoice.documentType !== 'receipt') {\n meta.push([t('billing.pdf.meta.due_date', 'Due date'), isDraft ? '\u2014' : date(invoice.dueDate)])\n }\n if (invoice.periodStart && invoice.periodEnd) {\n meta.push([\n t('billing.pdf.meta.service_period', 'Service period'),\n `${date(invoice.periodStart)} \u2013 ${date(invoice.periodEnd)}`,\n ])\n }\n if (invoice.correctsNumber) {\n meta.push([\n t('billing.pdf.meta.corrects', 'Corrects'),\n invoice.correctsIssueDate\n ? `${invoice.correctsNumber} ${t('billing.pdf.meta.of', 'of')} ${date(invoice.correctsIssueDate)}`\n : invoice.correctsNumber,\n ])\n }\n if (invoice.correctionReason) {\n meta.push([t('billing.pdf.meta.reason', 'Reason'), invoice.correctionReason])\n }\n\n const sellerLines = [\n seller.legalName ?? '',\n ...addressLines(seller.address),\n seller.taxId ? `${t('billing.pdf.tax_id', 'Tax ID')}: ${seller.taxId}` : '',\n ].filter((line) => line !== '')\n const buyerLines = [\n buyer.name,\n ...addressLines(buyer.address),\n buyer.taxId ? `${t('billing.pdf.tax_id', 'Tax ID')}: ${buyer.taxId}` : '',\n ].filter((line) => line !== '')\n\n const rows = lines.map((line, index) => {\n const start = line.servicePeriodStart\n const end = line.servicePeriodEnd\n const description =\n start && end && !line.description.includes(' \u2013 ')\n ? `${line.description} (${date(start)} \u2013 ${date(end)})`\n : line.description\n return [\n String(index + 1),\n description,\n plain(formatNumber(line.quantity, locale)),\n money(line.unitPriceNet),\n plain(formatPercent(line.taxRate, locale)),\n money(line.netAmount),\n money(line.taxAmount),\n money(line.grossAmount),\n ]\n })\n\n // VAT summary: sums of the (already rounded) line amounts per rate, so the\n // summary always adds up to the document totals (B-D2).\n const byRate = new Map<number, { net: number; tax: number; gross: number }>()\n for (const line of lines) {\n const rate = Number.parseFloat(line.taxRate) || 0\n const bucket = byRate.get(rate) ?? { net: 0, tax: 0, gross: 0 }\n bucket.net += Number.parseFloat(line.netAmount) || 0\n bucket.tax += Number.parseFloat(line.taxAmount) || 0\n bucket.gross += Number.parseFloat(line.grossAmount) || 0\n byRate.set(rate, bucket)\n }\n const vatRows = [...byRate.entries()]\n .sort(([a], [b]) => b - a)\n .map(([rate, sums]) => [plain(formatPercent(rate, locale)), money(sums.net), money(sums.tax), money(sums.gross)])\n\n const isCredit = invoice.documentType === 'credit_memo'\n const totals: Array<[string, string]> = [\n [t('billing.pdf.totals.net', 'Total net'), money(invoice.subtotalNet)],\n [t('billing.pdf.totals.tax', 'Total VAT'), money(invoice.taxTotal)],\n isCredit\n ? [t('billing.pdf.totals.credited', 'Total credited'), money(invoice.totalGross)]\n : [t('billing.pdf.totals.gross', 'Total due'), money(invoice.totalGross)],\n ]\n\n const payable = invoice.documentType === 'invoice' || invoice.documentType === 'debit_memo'\n const payment =\n payable && seller.iban\n ? {\n heading: t('billing.pdf.payment.heading', 'Payment'),\n lines: [\n `${t('billing.pdf.payment.amount', 'Amount')}: ${money(invoice.totalGross)}`,\n `${t('billing.pdf.payment.due', 'Due by')}: ${isDraft ? '\u2014' : date(invoice.dueDate)}`,\n seller.bankName ? `${t('billing.pdf.payment.bank', 'Bank')}: ${seller.bankName}` : '',\n `IBAN: ${seller.iban.replace(/(.{4})/g, '$1 ').trim()}`,\n seller.bic ? `BIC: ${seller.bic}` : '',\n // Spec C's matcher finds the invoice number in the transfer title.\n `${t('billing.pdf.payment.title', 'Transfer title')}: ${invoice.number}`,\n ].filter((line) => line !== ''),\n }\n : isCredit\n ? {\n // A credit memo is not paid: it settles the corrected invoice and\n // any remainder stays as credit on the customer's account (D-D10).\n heading: t('billing.pdf.memo.settlement', 'Settlement'),\n lines: [\n `${t('billing.pdf.memo.amount_credited', 'Amount credited')}: ${money(invoice.totalGross)}`,\n invoice.correctsNumber\n ? t('billing.pdf.memo.settled_against', 'Settled against invoice {number}; any remainder is credited to your account.').replace(\n '{number}',\n invoice.correctsNumber,\n )\n : t('billing.pdf.memo.credited_to_account', 'The amount is credited to your account.'),\n ],\n }\n : null\n\n return {\n language: params.language,\n title: titleFor(invoice, t),\n number: invoice.number,\n watermark: invoice.testRun\n ? t('billing.pdf.watermark.test', 'TEST')\n : isDraft\n ? t('billing.pdf.watermark.draft', 'DRAFT')\n : null,\n meta,\n seller: { heading: t('billing.pdf.seller', 'Seller'), lines: sellerLines },\n buyer: { heading: t('billing.pdf.buyer', 'Buyer'), lines: buyerLines },\n table: {\n headers: [\n '#',\n t('billing.pdf.columns.description', 'Description'),\n t('billing.pdf.columns.quantity', 'Qty'),\n t('billing.pdf.columns.unit_net', 'Unit net'),\n t('billing.pdf.columns.tax_rate', 'VAT %'),\n t('billing.pdf.columns.net', 'Net'),\n t('billing.pdf.columns.tax', 'VAT'),\n t('billing.pdf.columns.gross', 'Gross'),\n ],\n align: ['right', 'left', 'right', 'right', 'right', 'right', 'right', 'right'],\n rows,\n },\n vatSummary: {\n heading: t('billing.pdf.vat_summary', 'VAT summary'),\n headers: [\n t('billing.pdf.columns.tax_rate', 'VAT %'),\n t('billing.pdf.columns.net', 'Net'),\n t('billing.pdf.columns.tax', 'VAT'),\n t('billing.pdf.columns.gross', 'Gross'),\n ],\n rows: vatRows,\n },\n totals,\n payment,\n footer: (seller.footer ?? '').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean),\n pageLabel: (page, pages) =>\n t('billing.pdf.page', 'Page {page} of {pages}').replace('{page}', String(page)).replace('{pages}', String(pages)),\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,165 @@
1
+ import { BillingAccount, BillingInvoice, BillingInvoiceLine } from "../../data/entities.js";
2
+ import { billingEntityIds } from "../../data/entityIds.js";
3
+ import { buildSellerSnapshot, getBillingSettings } from "../billingSettings.js";
4
+ import { buildBuyerSnapshot } from "../documentParties.js";
5
+ import { DEFAULT_INVOICE_LANGUAGE } from "../invoiceLanguages.js";
6
+ import { buildInvoiceDocumentModel } from "./invoiceModel.js";
7
+ import { renderInvoicePdf } from "./invoiceTemplate.js";
8
+ import { attachmentIdFromUrl, readAttachment, storeAttachment } from "./attachmentStore.js";
9
+ const loadDocumentTranslator = async (language) => {
10
+ const { loadDictionary } = await import("@open-mercato/shared/lib/i18n/server");
11
+ const { createFallbackTranslator } = await import("@open-mercato/shared/lib/i18n/translate");
12
+ const locale = language === "pl" ? "pl" : "en";
13
+ const translate = createFallbackTranslator(await loadDictionary(locale));
14
+ return (key, fallback) => translate(key, fallback);
15
+ };
16
+ function str(value) {
17
+ return typeof value === "string" && value.trim() !== "" ? value : null;
18
+ }
19
+ function address(value) {
20
+ return value && typeof value === "object" ? value : null;
21
+ }
22
+ function pdfFileName(invoice) {
23
+ return `${invoice.number.replace(/[^A-Za-z0-9._-]+/g, "-")}.pdf`;
24
+ }
25
+ function isFrozenDocument(invoice) {
26
+ return invoice.status !== "draft" && !invoice.testRun;
27
+ }
28
+ async function resolveParties(em, invoice) {
29
+ const scope = { tenantId: invoice.tenantId, organizationId: invoice.organizationId };
30
+ let seller = isFrozenDocument(invoice) ? invoice.sellerSnapshot ?? null : null;
31
+ let buyer = isFrozenDocument(invoice) ? invoice.buyerSnapshot ?? null : null;
32
+ if (!seller || !("legal_name" in seller)) seller = buildSellerSnapshot(await getBillingSettings(em, scope));
33
+ if (!buyer) {
34
+ const account = await em.findOne(BillingAccount, { id: invoice.billAccountId, ...scope });
35
+ buyer = account ? buildBuyerSnapshot(account) : { name: "" };
36
+ }
37
+ return { seller, buyer };
38
+ }
39
+ async function resolveLogo(em, invoice, seller) {
40
+ const scope = { tenantId: invoice.tenantId, organizationId: invoice.organizationId };
41
+ let attachmentId = str(seller.logo_attachment_id);
42
+ if (!attachmentId) {
43
+ const rows = await em.execute(`SELECT logo_url FROM organizations WHERE id = ? LIMIT 1`, [
44
+ invoice.organizationId
45
+ ]);
46
+ attachmentId = attachmentIdFromUrl(rows?.[0]?.logo_url);
47
+ }
48
+ if (!attachmentId) return null;
49
+ const file = await readAttachment(em, scope, attachmentId);
50
+ return file ? { bytes: file.bytes, mimeType: file.mimeType } : null;
51
+ }
52
+ async function renderBillingDocument(em, invoice, deps = {}) {
53
+ const scope = { tenantId: invoice.tenantId, organizationId: invoice.organizationId };
54
+ const lines = await em.find(
55
+ BillingInvoiceLine,
56
+ { invoiceId: invoice.id, ...scope, deletedAt: null },
57
+ { orderBy: { lineNumber: "asc" } }
58
+ );
59
+ const { seller, buyer } = await resolveParties(em, invoice);
60
+ const language = str(buyer.invoice_language) ?? DEFAULT_INVOICE_LANGUAGE;
61
+ const translate = await (deps.loadTranslator ?? loadDocumentTranslator)(language);
62
+ let correctsNumber = null;
63
+ if (invoice.correctsInvoiceId) {
64
+ const corrected = await em.findOne(BillingInvoice, { id: invoice.correctsInvoiceId, ...scope });
65
+ correctsNumber = corrected?.number ?? null;
66
+ }
67
+ const model = buildInvoiceDocumentModel({
68
+ invoice: {
69
+ number: invoice.number,
70
+ documentType: invoice.documentType,
71
+ status: invoice.status,
72
+ testRun: invoice.testRun,
73
+ issueDate: invoice.issueDate ?? null,
74
+ dueDate: invoice.dueDate ?? null,
75
+ billDate: invoice.billDate ?? null,
76
+ periodStart: invoice.periodStart ?? null,
77
+ periodEnd: invoice.periodEnd ?? null,
78
+ currencyCode: invoice.currencyCode,
79
+ subtotalNet: invoice.subtotalNet,
80
+ taxTotal: invoice.taxTotal,
81
+ totalGross: invoice.totalGross,
82
+ correctsNumber: invoice.correctsInvoiceNumber ?? correctsNumber,
83
+ correctsIssueDate: invoice.correctsIssueDate ?? null,
84
+ correctionReason: invoice.correctionReason ?? null
85
+ },
86
+ lines: lines.map((line) => ({
87
+ description: line.description,
88
+ quantity: line.quantity,
89
+ unitPriceNet: line.unitPriceNet,
90
+ taxRate: line.taxRate,
91
+ netAmount: line.netAmount,
92
+ taxAmount: line.taxAmount,
93
+ grossAmount: line.grossAmount,
94
+ servicePeriodStart: line.servicePeriodStart ?? null,
95
+ servicePeriodEnd: line.servicePeriodEnd ?? null
96
+ })),
97
+ seller: {
98
+ legalName: str(seller.legal_name),
99
+ address: address(seller.address),
100
+ taxId: str(seller.tax_id),
101
+ bankName: str(seller.bank_name),
102
+ iban: str(seller.iban),
103
+ bic: str(seller.bic),
104
+ footer: str(seller.invoice_footer)
105
+ },
106
+ buyer: {
107
+ name: str(buyer.name) ?? "",
108
+ address: address(buyer.invoice_address),
109
+ taxId: str(buyer.tax_id)
110
+ },
111
+ language,
112
+ translate
113
+ });
114
+ return renderInvoicePdf(model, { logo: await resolveLogo(em, invoice, seller) });
115
+ }
116
+ async function freezeInvoicePdf(em, invoice, deps = {}) {
117
+ if (invoice.pdfAttachmentId) return { attachmentId: invoice.pdfAttachmentId, bytes: null };
118
+ if (!isFrozenDocument(invoice)) throw new Error("Only posted, non-test documents are frozen");
119
+ const bytes = await renderBillingDocument(em, invoice, deps);
120
+ const scope = { tenantId: invoice.tenantId, organizationId: invoice.organizationId };
121
+ const attachmentId = await storeAttachment(em, scope, {
122
+ entityId: billingEntityIds.invoice,
123
+ recordId: invoice.id,
124
+ fileName: pdfFileName(invoice),
125
+ mimeType: "application/pdf",
126
+ bytes
127
+ });
128
+ await em.nativeUpdate(
129
+ BillingInvoice,
130
+ { id: invoice.id, ...scope, pdfAttachmentId: null },
131
+ { pdfAttachmentId: attachmentId }
132
+ );
133
+ invoice.pdfAttachmentId = attachmentId;
134
+ return { attachmentId, bytes };
135
+ }
136
+ async function getInvoicePdf(em, invoice, deps = {}) {
137
+ const fileName = pdfFileName(invoice);
138
+ if (!isFrozenDocument(invoice)) {
139
+ return { bytes: await renderBillingDocument(em, invoice, deps), fileName, frozen: false };
140
+ }
141
+ if (invoice.pdfAttachmentId) {
142
+ const stored = await readAttachment(
143
+ em,
144
+ { tenantId: invoice.tenantId, organizationId: invoice.organizationId },
145
+ invoice.pdfAttachmentId
146
+ );
147
+ if (stored) return { bytes: stored.bytes, fileName, frozen: true };
148
+ console.warn("[billing.pdf] frozen PDF unreadable, rendering from snapshots", invoice.id);
149
+ return { bytes: await renderBillingDocument(em, invoice, deps), fileName, frozen: true };
150
+ }
151
+ const frozen = await freezeInvoicePdf(em, invoice, deps);
152
+ return {
153
+ bytes: frozen.bytes ?? await renderBillingDocument(em, invoice, deps),
154
+ fileName,
155
+ frozen: true
156
+ };
157
+ }
158
+ export {
159
+ freezeInvoicePdf,
160
+ getInvoicePdf,
161
+ loadDocumentTranslator,
162
+ pdfFileName,
163
+ renderBillingDocument
164
+ };
165
+ //# sourceMappingURL=invoicePdf.js.map