@baruk/core 0.1.0 → 0.3.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 (429) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/dist/auth/password-reset.d.ts.map +1 -1
  3. package/dist/auth/password-reset.js +2 -4
  4. package/dist/auth/password-reset.js.map +1 -1
  5. package/dist/auth/password.d.ts +2 -18
  6. package/dist/auth/password.d.ts.map +1 -1
  7. package/dist/auth/password.js +12 -51
  8. package/dist/auth/password.js.map +1 -1
  9. package/dist/auth/service.d.ts +0 -12
  10. package/dist/auth/service.d.ts.map +1 -1
  11. package/dist/auth/service.js +3 -36
  12. package/dist/auth/service.js.map +1 -1
  13. package/dist/auth/session-token.d.ts +5 -2
  14. package/dist/auth/session-token.d.ts.map +1 -1
  15. package/dist/auth/session-token.js +7 -12
  16. package/dist/auth/session-token.js.map +1 -1
  17. package/dist/billing/dunning.d.ts +33 -0
  18. package/dist/billing/dunning.d.ts.map +1 -0
  19. package/dist/billing/dunning.js +49 -0
  20. package/dist/billing/dunning.js.map +1 -0
  21. package/dist/billing/provider/asaas.d.ts +15 -0
  22. package/dist/billing/provider/asaas.d.ts.map +1 -0
  23. package/dist/billing/provider/asaas.js +121 -0
  24. package/dist/billing/provider/asaas.js.map +1 -0
  25. package/dist/billing/provider/manual.d.ts +14 -0
  26. package/dist/billing/provider/manual.d.ts.map +1 -0
  27. package/dist/billing/provider/manual.js +24 -0
  28. package/dist/billing/provider/manual.js.map +1 -0
  29. package/dist/billing/provider/registry.d.ts +12 -0
  30. package/dist/billing/provider/registry.d.ts.map +1 -0
  31. package/dist/billing/provider/registry.js +22 -0
  32. package/dist/billing/provider/registry.js.map +1 -0
  33. package/dist/billing/provider/types.d.ts +76 -0
  34. package/dist/billing/provider/types.d.ts.map +1 -0
  35. package/dist/billing/provider/types.js +9 -0
  36. package/dist/billing/provider/types.js.map +1 -0
  37. package/dist/billing/receivable.d.ts +108 -0
  38. package/dist/billing/receivable.d.ts.map +1 -0
  39. package/dist/billing/receivable.js +2 -0
  40. package/dist/billing/receivable.js.map +1 -0
  41. package/dist/billing/repository.d.ts +97 -0
  42. package/dist/billing/repository.d.ts.map +1 -0
  43. package/dist/billing/repository.js +167 -0
  44. package/dist/billing/repository.js.map +1 -0
  45. package/dist/cjs/audit/audit.js +31 -0
  46. package/dist/cjs/audit/audit.js.map +1 -0
  47. package/dist/cjs/audit/repository.js +32 -0
  48. package/dist/cjs/audit/repository.js.map +1 -0
  49. package/dist/cjs/auth/password-reset.js +58 -0
  50. package/dist/cjs/auth/password-reset.js.map +1 -0
  51. package/dist/cjs/auth/password.js +32 -0
  52. package/dist/cjs/auth/password.js.map +1 -0
  53. package/dist/cjs/auth/service.js +191 -0
  54. package/dist/cjs/auth/service.js.map +1 -0
  55. package/dist/cjs/auth/session-token.js +18 -0
  56. package/dist/cjs/auth/session-token.js.map +1 -0
  57. package/dist/cjs/billing/dunning.js +54 -0
  58. package/dist/cjs/billing/dunning.js.map +1 -0
  59. package/dist/cjs/billing/provider/asaas.js +125 -0
  60. package/dist/cjs/billing/provider/asaas.js.map +1 -0
  61. package/dist/cjs/billing/provider/manual.js +28 -0
  62. package/dist/cjs/billing/provider/manual.js.map +1 -0
  63. package/dist/cjs/billing/provider/registry.js +27 -0
  64. package/dist/cjs/billing/provider/registry.js.map +1 -0
  65. package/dist/cjs/billing/provider/types.js +10 -0
  66. package/dist/cjs/billing/provider/types.js.map +1 -0
  67. package/dist/cjs/billing/receivable.js +3 -0
  68. package/dist/cjs/billing/receivable.js.map +1 -0
  69. package/dist/cjs/billing/repository.js +180 -0
  70. package/dist/cjs/billing/repository.js.map +1 -0
  71. package/dist/cjs/clients/repository.js +123 -0
  72. package/dist/cjs/clients/repository.js.map +1 -0
  73. package/dist/cjs/commercial-catalog/catalog.js +108 -0
  74. package/dist/cjs/commercial-catalog/catalog.js.map +1 -0
  75. package/dist/cjs/commercial-catalog/consumption-contracts.js +10 -0
  76. package/dist/cjs/commercial-catalog/consumption-contracts.js.map +1 -0
  77. package/dist/cjs/commercial-catalog/coupon.js +63 -0
  78. package/dist/cjs/commercial-catalog/coupon.js.map +1 -0
  79. package/dist/cjs/commercial-catalog/index.js +16 -0
  80. package/dist/cjs/commercial-catalog/index.js.map +1 -0
  81. package/dist/cjs/commercial-catalog/offer-application.js +53 -0
  82. package/dist/cjs/commercial-catalog/offer-application.js.map +1 -0
  83. package/dist/cjs/commercial-catalog/types.js +26 -0
  84. package/dist/cjs/commercial-catalog/types.js.map +1 -0
  85. package/dist/cjs/crm/repository.js +195 -0
  86. package/dist/cjs/crm/repository.js.map +1 -0
  87. package/dist/cjs/dashboard/repository.js +39 -0
  88. package/dist/cjs/dashboard/repository.js.map +1 -0
  89. package/dist/cjs/db/client.js +27 -0
  90. package/dist/cjs/db/client.js.map +1 -0
  91. package/dist/cjs/db/context.js +43 -0
  92. package/dist/cjs/db/context.js.map +1 -0
  93. package/dist/cjs/db/load-env.js +47 -0
  94. package/dist/cjs/db/load-env.js.map +1 -0
  95. package/dist/cjs/db/seed.js +69 -0
  96. package/dist/cjs/db/seed.js.map +1 -0
  97. package/dist/cjs/entitlements/decision.js +203 -0
  98. package/dist/cjs/entitlements/decision.js.map +1 -0
  99. package/dist/cjs/entitlements/derive.js +46 -0
  100. package/dist/cjs/entitlements/derive.js.map +1 -0
  101. package/dist/cjs/entitlements/index.js +23 -0
  102. package/dist/cjs/entitlements/index.js.map +1 -0
  103. package/dist/cjs/entitlements/sources.js +60 -0
  104. package/dist/cjs/entitlements/sources.js.map +1 -0
  105. package/dist/cjs/entitlements/standing.js +42 -0
  106. package/dist/cjs/entitlements/standing.js.map +1 -0
  107. package/dist/cjs/entitlements/types.js +16 -0
  108. package/dist/cjs/entitlements/types.js.map +1 -0
  109. package/dist/cjs/import/clients-import.js +147 -0
  110. package/dist/cjs/import/clients-import.js.map +1 -0
  111. package/dist/cjs/index.js +335 -0
  112. package/dist/cjs/index.js.map +1 -0
  113. package/dist/cjs/mail/dedup-store.js +56 -0
  114. package/dist/cjs/mail/dedup-store.js.map +1 -0
  115. package/dist/cjs/mail/index.js +24 -0
  116. package/dist/cjs/mail/index.js.map +1 -0
  117. package/dist/cjs/mail/provider.js +251 -0
  118. package/dist/cjs/mail/provider.js.map +1 -0
  119. package/dist/cjs/mail/resend-client.js +103 -0
  120. package/dist/cjs/mail/resend-client.js.map +1 -0
  121. package/dist/cjs/mail/resend.js +21 -0
  122. package/dist/cjs/mail/resend.js.map +1 -0
  123. package/dist/cjs/mail/sanitize.js +56 -0
  124. package/dist/cjs/mail/sanitize.js.map +1 -0
  125. package/dist/cjs/mail/sender-resolver.js +15 -0
  126. package/dist/cjs/mail/sender-resolver.js.map +1 -0
  127. package/dist/cjs/mail/template-renderer.js +21 -0
  128. package/dist/cjs/mail/template-renderer.js.map +1 -0
  129. package/dist/cjs/mail/types.js +38 -0
  130. package/dist/cjs/mail/types.js.map +1 -0
  131. package/dist/cjs/notifications/repository.js +49 -0
  132. package/dist/cjs/notifications/repository.js.map +1 -0
  133. package/dist/cjs/onboarding/domain.js +370 -0
  134. package/dist/cjs/onboarding/domain.js.map +1 -0
  135. package/dist/cjs/onboarding/interaction-review.js +425 -0
  136. package/dist/cjs/onboarding/interaction-review.js.map +1 -0
  137. package/dist/cjs/onboarding/persistence.js +444 -0
  138. package/dist/cjs/onboarding/persistence.js.map +1 -0
  139. package/dist/cjs/onboarding/portal-actions.js +157 -0
  140. package/dist/cjs/onboarding/portal-actions.js.map +1 -0
  141. package/dist/cjs/onboarding/portal.js +177 -0
  142. package/dist/cjs/onboarding/portal.js.map +1 -0
  143. package/dist/cjs/package.json +3 -0
  144. package/dist/cjs/portal/repository.js +37 -0
  145. package/dist/cjs/portal/repository.js.map +1 -0
  146. package/dist/cjs/pricing-engine/bundle.js +49 -0
  147. package/dist/cjs/pricing-engine/bundle.js.map +1 -0
  148. package/dist/cjs/pricing-engine/errors.js +48 -0
  149. package/dist/cjs/pricing-engine/errors.js.map +1 -0
  150. package/dist/cjs/pricing-engine/index.js +30 -0
  151. package/dist/cjs/pricing-engine/index.js.map +1 -0
  152. package/dist/cjs/pricing-engine/money.js +69 -0
  153. package/dist/cjs/pricing-engine/money.js.map +1 -0
  154. package/dist/cjs/pricing-engine/pipeline.js +330 -0
  155. package/dist/cjs/pricing-engine/pipeline.js.map +1 -0
  156. package/dist/cjs/pricing-engine/proration.js +53 -0
  157. package/dist/cjs/pricing-engine/proration.js.map +1 -0
  158. package/dist/cjs/pricing-engine/shadow.js +58 -0
  159. package/dist/cjs/pricing-engine/shadow.js.map +1 -0
  160. package/dist/cjs/pricing-engine/types.js +34 -0
  161. package/dist/cjs/pricing-engine/types.js.map +1 -0
  162. package/dist/cjs/products/catalog.js +10 -0
  163. package/dist/cjs/products/catalog.js.map +1 -0
  164. package/dist/cjs/products/repository.js +61 -0
  165. package/dist/cjs/products/repository.js.map +1 -0
  166. package/dist/cjs/rbac/authorize.js +36 -0
  167. package/dist/cjs/rbac/authorize.js.map +1 -0
  168. package/dist/cjs/rbac/catalog.js +455 -0
  169. package/dist/cjs/rbac/catalog.js.map +1 -0
  170. package/dist/cjs/requests/repository.js +114 -0
  171. package/dist/cjs/requests/repository.js.map +1 -0
  172. package/dist/cjs/subscription-billing/dunning.js +26 -0
  173. package/dist/cjs/subscription-billing/dunning.js.map +1 -0
  174. package/dist/cjs/subscription-billing/events.js +45 -0
  175. package/dist/cjs/subscription-billing/events.js.map +1 -0
  176. package/dist/cjs/subscription-billing/index.js +62 -0
  177. package/dist/cjs/subscription-billing/index.js.map +1 -0
  178. package/dist/cjs/subscription-billing/plans.js +88 -0
  179. package/dist/cjs/subscription-billing/plans.js.map +1 -0
  180. package/dist/cjs/subscription-billing/product-config.js +54 -0
  181. package/dist/cjs/subscription-billing/product-config.js.map +1 -0
  182. package/dist/cjs/subscription-billing/provider/asaas.js +233 -0
  183. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -0
  184. package/dist/cjs/subscription-billing/provider/disabled.js +46 -0
  185. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -0
  186. package/dist/cjs/subscription-billing/provider/registry.js +29 -0
  187. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -0
  188. package/dist/cjs/subscription-billing/reconcile.js +198 -0
  189. package/dist/cjs/subscription-billing/reconcile.js.map +1 -0
  190. package/dist/cjs/subscription-billing/repository.js +359 -0
  191. package/dist/cjs/subscription-billing/repository.js.map +1 -0
  192. package/dist/cjs/subscription-billing/service.js +838 -0
  193. package/dist/cjs/subscription-billing/service.js.map +1 -0
  194. package/dist/cjs/subscription-billing/types.js +28 -0
  195. package/dist/cjs/subscription-billing/types.js.map +1 -0
  196. package/dist/cjs/tenancy/provisioning.js +126 -0
  197. package/dist/cjs/tenancy/provisioning.js.map +1 -0
  198. package/dist/cjs/users/repository.js +83 -0
  199. package/dist/cjs/users/repository.js.map +1 -0
  200. package/dist/cjs/vault/crypto.js +94 -0
  201. package/dist/cjs/vault/crypto.js.map +1 -0
  202. package/dist/cjs/vault/repository.js +120 -0
  203. package/dist/cjs/vault/repository.js.map +1 -0
  204. package/dist/commercial-catalog/catalog.d.ts +27 -0
  205. package/dist/commercial-catalog/catalog.d.ts.map +1 -0
  206. package/dist/commercial-catalog/catalog.js +104 -0
  207. package/dist/commercial-catalog/catalog.js.map +1 -0
  208. package/dist/commercial-catalog/consumption-contracts.d.ts +33 -0
  209. package/dist/commercial-catalog/consumption-contracts.d.ts.map +1 -0
  210. package/dist/commercial-catalog/consumption-contracts.js +9 -0
  211. package/dist/commercial-catalog/consumption-contracts.js.map +1 -0
  212. package/dist/commercial-catalog/coupon.d.ts +43 -0
  213. package/dist/commercial-catalog/coupon.d.ts.map +1 -0
  214. package/dist/commercial-catalog/coupon.js +57 -0
  215. package/dist/commercial-catalog/coupon.js.map +1 -0
  216. package/dist/commercial-catalog/index.d.ts +10 -0
  217. package/dist/commercial-catalog/index.d.ts.map +1 -0
  218. package/dist/commercial-catalog/index.js +5 -0
  219. package/dist/commercial-catalog/index.js.map +1 -0
  220. package/dist/commercial-catalog/offer-application.d.ts +39 -0
  221. package/dist/commercial-catalog/offer-application.d.ts.map +1 -0
  222. package/dist/commercial-catalog/offer-application.js +50 -0
  223. package/dist/commercial-catalog/offer-application.js.map +1 -0
  224. package/dist/commercial-catalog/types.d.ts +175 -0
  225. package/dist/commercial-catalog/types.d.ts.map +1 -0
  226. package/dist/commercial-catalog/types.js +23 -0
  227. package/dist/commercial-catalog/types.js.map +1 -0
  228. package/dist/crm/repository.d.ts +109 -0
  229. package/dist/crm/repository.d.ts.map +1 -0
  230. package/dist/crm/repository.js +181 -0
  231. package/dist/crm/repository.js.map +1 -0
  232. package/dist/db/context.d.ts +2 -0
  233. package/dist/db/context.d.ts.map +1 -1
  234. package/dist/db/context.js +3 -0
  235. package/dist/db/context.js.map +1 -1
  236. package/dist/db/migrate.js +7 -2
  237. package/dist/db/migrate.js.map +1 -1
  238. package/dist/db/seed.js +4 -1
  239. package/dist/db/seed.js.map +1 -1
  240. package/dist/entitlements/decision.d.ts +86 -0
  241. package/dist/entitlements/decision.d.ts.map +1 -0
  242. package/dist/entitlements/decision.js +196 -0
  243. package/dist/entitlements/decision.js.map +1 -0
  244. package/dist/entitlements/derive.d.ts +30 -0
  245. package/dist/entitlements/derive.d.ts.map +1 -0
  246. package/dist/entitlements/derive.js +42 -0
  247. package/dist/entitlements/derive.js.map +1 -0
  248. package/dist/entitlements/index.d.ts +10 -0
  249. package/dist/entitlements/index.d.ts.map +1 -0
  250. package/dist/entitlements/index.js +7 -0
  251. package/dist/entitlements/index.js.map +1 -0
  252. package/dist/entitlements/sources.d.ts +30 -0
  253. package/dist/entitlements/sources.d.ts.map +1 -0
  254. package/dist/entitlements/sources.js +55 -0
  255. package/dist/entitlements/sources.js.map +1 -0
  256. package/dist/entitlements/standing.d.ts +22 -0
  257. package/dist/entitlements/standing.d.ts.map +1 -0
  258. package/dist/entitlements/standing.js +38 -0
  259. package/dist/entitlements/standing.js.map +1 -0
  260. package/dist/entitlements/types.d.ts +26 -0
  261. package/dist/entitlements/types.d.ts.map +1 -0
  262. package/dist/entitlements/types.js +15 -0
  263. package/dist/entitlements/types.js.map +1 -0
  264. package/dist/index.d.ts +74 -3
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +51 -4
  267. package/dist/index.js.map +1 -1
  268. package/dist/mail/dedup-store.d.ts +25 -0
  269. package/dist/mail/dedup-store.d.ts.map +1 -0
  270. package/dist/mail/dedup-store.js +51 -0
  271. package/dist/mail/dedup-store.js.map +1 -0
  272. package/dist/mail/index.d.ts +10 -0
  273. package/dist/mail/index.d.ts.map +1 -0
  274. package/dist/mail/index.js +9 -0
  275. package/dist/mail/index.js.map +1 -0
  276. package/dist/mail/provider.d.ts +31 -0
  277. package/dist/mail/provider.d.ts.map +1 -0
  278. package/dist/mail/provider.js +248 -0
  279. package/dist/mail/provider.js.map +1 -0
  280. package/dist/mail/resend-client.d.ts +16 -0
  281. package/dist/mail/resend-client.d.ts.map +1 -0
  282. package/dist/mail/resend-client.js +100 -0
  283. package/dist/mail/resend-client.js.map +1 -0
  284. package/dist/mail/resend.d.ts.map +1 -1
  285. package/dist/mail/resend.js +2 -0
  286. package/dist/mail/resend.js.map +1 -1
  287. package/dist/mail/sanitize.d.ts +17 -0
  288. package/dist/mail/sanitize.d.ts.map +1 -0
  289. package/dist/mail/sanitize.js +51 -0
  290. package/dist/mail/sanitize.js.map +1 -0
  291. package/dist/mail/sender-resolver.d.ts +8 -0
  292. package/dist/mail/sender-resolver.d.ts.map +1 -0
  293. package/dist/mail/sender-resolver.js +11 -0
  294. package/dist/mail/sender-resolver.js.map +1 -0
  295. package/dist/mail/template-renderer.d.ts +10 -0
  296. package/dist/mail/template-renderer.d.ts.map +1 -0
  297. package/dist/mail/template-renderer.js +17 -0
  298. package/dist/mail/template-renderer.js.map +1 -0
  299. package/dist/mail/types.d.ts +143 -0
  300. package/dist/mail/types.d.ts.map +1 -0
  301. package/dist/mail/types.js +34 -0
  302. package/dist/mail/types.js.map +1 -0
  303. package/dist/onboarding/domain.d.ts +146 -0
  304. package/dist/onboarding/domain.d.ts.map +1 -0
  305. package/dist/onboarding/domain.js +348 -0
  306. package/dist/onboarding/domain.js.map +1 -0
  307. package/dist/onboarding/interaction-review.d.ts +123 -0
  308. package/dist/onboarding/interaction-review.d.ts.map +1 -0
  309. package/dist/onboarding/interaction-review.js +413 -0
  310. package/dist/onboarding/interaction-review.js.map +1 -0
  311. package/dist/onboarding/persistence.d.ts +106 -0
  312. package/dist/onboarding/persistence.d.ts.map +1 -0
  313. package/dist/onboarding/persistence.js +430 -0
  314. package/dist/onboarding/persistence.js.map +1 -0
  315. package/dist/onboarding/portal-actions.d.ts +48 -0
  316. package/dist/onboarding/portal-actions.d.ts.map +1 -0
  317. package/dist/onboarding/portal-actions.js +153 -0
  318. package/dist/onboarding/portal-actions.js.map +1 -0
  319. package/dist/onboarding/portal.d.ts +58 -0
  320. package/dist/onboarding/portal.d.ts.map +1 -0
  321. package/dist/onboarding/portal.js +170 -0
  322. package/dist/onboarding/portal.js.map +1 -0
  323. package/dist/pricing-engine/bundle.d.ts +22 -0
  324. package/dist/pricing-engine/bundle.d.ts.map +1 -0
  325. package/dist/pricing-engine/bundle.js +44 -0
  326. package/dist/pricing-engine/bundle.js.map +1 -0
  327. package/dist/pricing-engine/errors.d.ts +32 -0
  328. package/dist/pricing-engine/errors.d.ts.map +1 -0
  329. package/dist/pricing-engine/errors.js +44 -0
  330. package/dist/pricing-engine/errors.js.map +1 -0
  331. package/dist/pricing-engine/index.d.ts +12 -0
  332. package/dist/pricing-engine/index.d.ts.map +1 -0
  333. package/dist/pricing-engine/index.js +8 -0
  334. package/dist/pricing-engine/index.js.map +1 -0
  335. package/dist/pricing-engine/money.d.ts +32 -0
  336. package/dist/pricing-engine/money.d.ts.map +1 -0
  337. package/dist/pricing-engine/money.js +58 -0
  338. package/dist/pricing-engine/money.js.map +1 -0
  339. package/dist/pricing-engine/pipeline.d.ts +3 -0
  340. package/dist/pricing-engine/pipeline.d.ts.map +1 -0
  341. package/dist/pricing-engine/pipeline.js +327 -0
  342. package/dist/pricing-engine/pipeline.js.map +1 -0
  343. package/dist/pricing-engine/proration.d.ts +3 -0
  344. package/dist/pricing-engine/proration.d.ts.map +1 -0
  345. package/dist/pricing-engine/proration.js +50 -0
  346. package/dist/pricing-engine/proration.js.map +1 -0
  347. package/dist/pricing-engine/shadow.d.ts +51 -0
  348. package/dist/pricing-engine/shadow.d.ts.map +1 -0
  349. package/dist/pricing-engine/shadow.js +54 -0
  350. package/dist/pricing-engine/shadow.js.map +1 -0
  351. package/dist/pricing-engine/types.d.ts +184 -0
  352. package/dist/pricing-engine/types.d.ts.map +1 -0
  353. package/dist/pricing-engine/types.js +31 -0
  354. package/dist/pricing-engine/types.js.map +1 -0
  355. package/dist/rbac/authorize.d.ts +3 -6
  356. package/dist/rbac/authorize.d.ts.map +1 -1
  357. package/dist/rbac/authorize.js +4 -8
  358. package/dist/rbac/authorize.js.map +1 -1
  359. package/dist/rbac/catalog.d.ts.map +1 -1
  360. package/dist/rbac/catalog.js +414 -21
  361. package/dist/rbac/catalog.js.map +1 -1
  362. package/dist/subscription-billing/dunning.d.ts +18 -0
  363. package/dist/subscription-billing/dunning.d.ts.map +1 -0
  364. package/dist/subscription-billing/dunning.js +28 -0
  365. package/dist/subscription-billing/dunning.js.map +1 -0
  366. package/dist/subscription-billing/events.d.ts +58 -0
  367. package/dist/subscription-billing/events.d.ts.map +1 -0
  368. package/dist/subscription-billing/events.js +38 -0
  369. package/dist/subscription-billing/events.js.map +1 -0
  370. package/dist/subscription-billing/index.d.ts +18 -0
  371. package/dist/subscription-billing/index.d.ts.map +1 -0
  372. package/dist/subscription-billing/index.js +16 -0
  373. package/dist/subscription-billing/index.js.map +1 -0
  374. package/dist/subscription-billing/plans.d.ts +34 -0
  375. package/dist/subscription-billing/plans.d.ts.map +1 -0
  376. package/dist/subscription-billing/plans.js +85 -0
  377. package/dist/subscription-billing/plans.js.map +1 -0
  378. package/dist/subscription-billing/product-config.d.ts +61 -0
  379. package/dist/subscription-billing/product-config.d.ts.map +1 -0
  380. package/dist/subscription-billing/product-config.js +50 -0
  381. package/dist/subscription-billing/product-config.js.map +1 -0
  382. package/dist/subscription-billing/provider/asaas.d.ts +26 -0
  383. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -0
  384. package/dist/subscription-billing/provider/asaas.js +229 -0
  385. package/dist/subscription-billing/provider/asaas.js.map +1 -0
  386. package/dist/subscription-billing/provider/disabled.d.ts +30 -0
  387. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -0
  388. package/dist/subscription-billing/provider/disabled.js +42 -0
  389. package/dist/subscription-billing/provider/disabled.js.map +1 -0
  390. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  391. package/dist/subscription-billing/provider/registry.d.ts.map +1 -0
  392. package/dist/subscription-billing/provider/registry.js +26 -0
  393. package/dist/subscription-billing/provider/registry.js.map +1 -0
  394. package/dist/subscription-billing/reconcile.d.ts +45 -0
  395. package/dist/subscription-billing/reconcile.d.ts.map +1 -0
  396. package/dist/subscription-billing/reconcile.js +192 -0
  397. package/dist/subscription-billing/reconcile.js.map +1 -0
  398. package/dist/subscription-billing/repository.d.ts +168 -0
  399. package/dist/subscription-billing/repository.d.ts.map +1 -0
  400. package/dist/subscription-billing/repository.js +336 -0
  401. package/dist/subscription-billing/repository.js.map +1 -0
  402. package/dist/subscription-billing/service.d.ts +175 -0
  403. package/dist/subscription-billing/service.d.ts.map +1 -0
  404. package/dist/subscription-billing/service.js +818 -0
  405. package/dist/subscription-billing/service.js.map +1 -0
  406. package/dist/subscription-billing/types.d.ts +161 -0
  407. package/dist/subscription-billing/types.d.ts.map +1 -0
  408. package/dist/subscription-billing/types.js +24 -0
  409. package/dist/subscription-billing/types.js.map +1 -0
  410. package/dist/vault/crypto.d.ts +22 -0
  411. package/dist/vault/crypto.d.ts.map +1 -0
  412. package/dist/vault/crypto.js +88 -0
  413. package/dist/vault/crypto.js.map +1 -0
  414. package/dist/vault/repository.d.ts +45 -0
  415. package/dist/vault/repository.d.ts.map +1 -0
  416. package/dist/vault/repository.js +111 -0
  417. package/dist/vault/repository.js.map +1 -0
  418. package/package.json +23 -13
  419. package/src/db/migrations/0012_vault.sql +51 -0
  420. package/src/db/migrations/0013_crm.sql +67 -0
  421. package/src/db/migrations/0014_billing.sql +146 -0
  422. package/src/db/migrations/0015_merchant_billing_ar.sql +201 -0
  423. package/src/db/migrations/0016_office_onboarding.sql +162 -0
  424. package/src/db/migrations/0017_office_onboarding_api.sql +21 -0
  425. package/src/db/migrations/0018_office_onboarding_portal_actions.sql +60 -0
  426. package/src/db/migrations/0019_office_onboarding_interaction_review.sql +134 -0
  427. package/src/db/migrations/0020_saas_billing.sql +157 -0
  428. package/src/db/migrations/0021_saas_billing_indexes.sql +23 -0
  429. package/src/db/migrations/0022_saas_billing_multi_product.sql +75 -0
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PortalOnboardingFeatureDisabledError = void 0;
4
+ exports.listPortalOnboardings = listPortalOnboardings;
5
+ exports.getPortalOnboarding = getPortalOnboarding;
6
+ exports.listPortalTimeline = listPortalTimeline;
7
+ const shared_1 = require("@baruk/shared");
8
+ class PortalOnboardingFeatureDisabledError extends shared_1.AppError {
9
+ constructor() {
10
+ super('O onboarding do Portal está indisponível', {
11
+ status: 404,
12
+ code: 'PORTAL_ONBOARDING_FEATURE_DISABLED',
13
+ });
14
+ }
15
+ }
16
+ exports.PortalOnboardingFeatureDisabledError = PortalOnboardingFeatureDisabledError;
17
+ const PUBLIC_EVENT_SUMMARY = {
18
+ 'onboarding.created': 'Seu onboarding foi criado',
19
+ 'onboarding.active': 'O onboarding foi iniciado',
20
+ 'onboarding.blocked': 'O onboarding aguarda informações',
21
+ 'onboarding.cancelled': 'O onboarding foi encerrado',
22
+ 'onboarding.item.created': 'Uma pendência foi adicionada',
23
+ 'onboarding.item.started': 'Uma pendência foi iniciada',
24
+ 'onboarding.item.completed': 'Uma pendência foi concluída',
25
+ 'onboarding.item.not_applicable': 'Uma pendência não se aplica',
26
+ 'onboarding.document.requested': 'Um documento foi solicitado',
27
+ 'onboarding.document.received': 'Um documento foi recebido',
28
+ 'onboarding.document.validated': 'Um documento foi validado',
29
+ 'onboarding.document.rejected': 'Um documento precisa de atenção',
30
+ 'onboarding.completed': 'O onboarding foi concluído',
31
+ 'onboarding.portal_response_submitted': 'Sua resposta foi enviada e aguarda análise do escritório',
32
+ 'onboarding.portal_response_supplemented': 'Sua informação complementar foi enviada e aguarda análise',
33
+ 'onboarding.portal_comment_created': 'Sua mensagem foi enviada ao escritório',
34
+ 'onboarding.external_delivery_confirmed': 'Você informou que enviou um documento por outro canal',
35
+ };
36
+ const PUBLIC_EVENT_TYPES = new Set(Object.keys(PUBLIC_EVENT_SUMMARY));
37
+ function publicStatus(status) {
38
+ if (status === 'draft')
39
+ return 'preparing';
40
+ if (status === 'active')
41
+ return 'in_progress';
42
+ if (status === 'blocked')
43
+ return 'waiting_for_information';
44
+ if (status === 'completed')
45
+ return 'completed';
46
+ return 'closed';
47
+ }
48
+ function iso(value) {
49
+ return value ? new Date(String(value)).toISOString() : null;
50
+ }
51
+ function percentage(completed, total) {
52
+ return total === 0 ? 0 : Math.round((completed / total) * 100);
53
+ }
54
+ async function baseRow(tx, id) {
55
+ const rows = await tx `
56
+ SELECT oi.id, oi.status, oi.due_at, oi.updated_at, oi.created_at,
57
+ c.display_name,
58
+ count(DISTINCT item.id) FILTER (WHERE item.visibility = 'portal') AS item_total,
59
+ count(DISTINCT item.id) FILTER (WHERE item.visibility = 'portal' AND item.status IN ('completed', 'not_applicable')) AS item_completed,
60
+ count(DISTINCT item.id) FILTER (WHERE item.visibility = 'portal' AND item.status NOT IN ('completed', 'not_applicable')) AS item_pending,
61
+ count(DISTINCT dr.id) AS document_total,
62
+ count(DISTINCT dr.id) FILTER (WHERE dr.status NOT IN ('validated')) AS document_pending
63
+ FROM onboarding_instance oi
64
+ JOIN client c ON c.id = oi.client_id AND c.deleted_at IS NULL
65
+ LEFT JOIN onboarding_item item ON item.onboarding_id = oi.id AND item.visibility = 'portal'
66
+ LEFT JOIN onboarding_document_requirement dr ON dr.onboarding_id = oi.id
67
+ WHERE oi.id = ${id ?? null}::uuid
68
+ GROUP BY oi.id, c.display_name
69
+ `;
70
+ return rows[0] ?? null;
71
+ }
72
+ function mapBase(row) {
73
+ const total = Number(row.item_total ?? 0);
74
+ const completed = Number(row.item_completed ?? 0);
75
+ const dueAt = iso(row.due_at);
76
+ const status = publicStatus(String(row.status));
77
+ return {
78
+ id: String(row.id),
79
+ clientDisplayName: String(row.display_name),
80
+ status,
81
+ progress: { completed, total, percentage: percentage(completed, total) },
82
+ dueAt,
83
+ overdue: !!dueAt &&
84
+ new Date(dueAt).getTime() < Date.now() &&
85
+ !['completed', 'closed'].includes(status),
86
+ pendingItemsCount: Number(row.item_pending ?? 0),
87
+ pendingDocumentRequirementsCount: Number(row.document_pending ?? 0),
88
+ lastPublicUpdateAt: iso(row.updated_at) ?? iso(row.created_at),
89
+ };
90
+ }
91
+ async function listPortalOnboardings(tx, limit = 20, offset = 0) {
92
+ const rows = await tx `
93
+ SELECT oi.id, oi.status, oi.due_at, oi.updated_at, oi.created_at,
94
+ c.display_name,
95
+ count(DISTINCT item.id) FILTER (WHERE item.visibility = 'portal') AS item_total,
96
+ count(DISTINCT item.id) FILTER (WHERE item.visibility = 'portal' AND item.status IN ('completed', 'not_applicable')) AS item_completed,
97
+ count(DISTINCT item.id) FILTER (WHERE item.visibility = 'portal' AND item.status NOT IN ('completed', 'not_applicable')) AS item_pending,
98
+ count(DISTINCT dr.id) AS document_total,
99
+ count(DISTINCT dr.id) FILTER (WHERE dr.status NOT IN ('validated')) AS document_pending,
100
+ count(*) OVER() AS total
101
+ FROM onboarding_instance oi
102
+ JOIN client c ON c.id = oi.client_id AND c.deleted_at IS NULL
103
+ LEFT JOIN onboarding_item item ON item.onboarding_id = oi.id AND item.visibility = 'portal'
104
+ LEFT JOIN onboarding_document_requirement dr ON dr.onboarding_id = oi.id
105
+ GROUP BY oi.id, c.display_name
106
+ ORDER BY oi.updated_at DESC, oi.id
107
+ LIMIT ${Math.min(Math.max(limit, 1), 50)} OFFSET ${Math.max(offset, 0)}
108
+ `;
109
+ return { items: rows.map(mapBase), total: rows[0] ? Number(rows[0].total) : 0 };
110
+ }
111
+ async function getPortalOnboarding(tx, id) {
112
+ const row = await baseRow(tx, id);
113
+ if (!row)
114
+ return null;
115
+ const items = await tx `
116
+ SELECT id, title, description, status, required, due_at, completed_at
117
+ FROM onboarding_item
118
+ WHERE onboarding_id = ${id} AND visibility = 'portal'
119
+ ORDER BY item_order, created_at
120
+ `;
121
+ const documents = await tx `
122
+ SELECT id, label, status, requested_at, received_at, validated_at, expires_at
123
+ FROM onboarding_document_requirement
124
+ WHERE onboarding_id = ${id}
125
+ ORDER BY requested_at
126
+ `;
127
+ const events = await tx `
128
+ SELECT event_type, occurred_at
129
+ FROM onboarding_event
130
+ WHERE onboarding_id = ${id} AND event_type = ANY(${Array.from(PUBLIC_EVENT_TYPES)})
131
+ ORDER BY occurred_at ASC, event_id ASC
132
+ `;
133
+ return {
134
+ ...mapBase(row),
135
+ items: items.map((item) => ({
136
+ id: String(item.id),
137
+ title: String(item.title),
138
+ description: item.description ? String(item.description) : null,
139
+ status: item.status,
140
+ required: Boolean(item.required),
141
+ dueAt: iso(item.due_at),
142
+ completedAt: iso(item.completed_at),
143
+ })),
144
+ documentRequirements: documents.map((document) => ({
145
+ id: String(document.id),
146
+ label: String(document.label),
147
+ status: document.status,
148
+ requestedAt: iso(document.requested_at),
149
+ receivedAt: iso(document.received_at),
150
+ validatedAt: iso(document.validated_at),
151
+ expiresAt: iso(document.expires_at),
152
+ })),
153
+ timeline: events.map((event) => ({
154
+ eventType: String(event.event_type),
155
+ summary: PUBLIC_EVENT_SUMMARY[String(event.event_type)],
156
+ occurredAt: iso(event.occurred_at),
157
+ })),
158
+ };
159
+ }
160
+ async function listPortalTimeline(tx, id, limit = 20, offset = 0) {
161
+ const rows = await tx `
162
+ SELECT event_type, occurred_at, count(*) OVER() AS total
163
+ FROM onboarding_event
164
+ WHERE onboarding_id = ${id} AND event_type = ANY(${Array.from(PUBLIC_EVENT_TYPES)})
165
+ ORDER BY occurred_at ASC, event_id ASC
166
+ LIMIT ${Math.min(Math.max(limit, 1), 50)} OFFSET ${Math.max(offset, 0)}
167
+ `;
168
+ return {
169
+ items: rows.map((event) => ({
170
+ eventType: String(event.event_type),
171
+ summary: PUBLIC_EVENT_SUMMARY[String(event.event_type)],
172
+ occurredAt: iso(event.occurred_at),
173
+ })),
174
+ total: rows[0] ? Number(rows[0].total) : 0,
175
+ };
176
+ }
177
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../../src/onboarding/portal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPortalClientId = getPortalClientId;
4
+ exports.listPortalUserIds = listPortalUserIds;
5
+ exports.ensurePortalAccess = ensurePortalAccess;
6
+ const shared_1 = require("@baruk/shared");
7
+ /**
8
+ * Acesso de portal: liga um usuário `client_portal` a um `client` específico.
9
+ * O portal restringe TODA leitura ao `clientId` resolvido aqui — um cliente
10
+ * nunca vê outro cliente do mesmo tenant.
11
+ */
12
+ async function getPortalClientId(tx, userId) {
13
+ const rows = await tx `
14
+ SELECT client_id FROM client_portal_access
15
+ WHERE user_id = ${userId} AND status = 'active'
16
+ ORDER BY created_at ASC LIMIT 1
17
+ `;
18
+ if (!rows[0])
19
+ throw new shared_1.ForbiddenError('Usuário de portal sem cliente vinculado');
20
+ return rows[0].client_id;
21
+ }
22
+ /** IDs dos usuários de portal ativos vinculados a um client (fan-out de notificações). */
23
+ async function listPortalUserIds(tx, clientId) {
24
+ const rows = await tx `
25
+ SELECT user_id FROM client_portal_access
26
+ WHERE client_id = ${clientId} AND status = 'active'
27
+ `;
28
+ return rows.map((r) => r.user_id);
29
+ }
30
+ async function ensurePortalAccess(tx, userId, clientId) {
31
+ await tx `
32
+ INSERT INTO client_portal_access (id, tenant_id, user_id, client_id)
33
+ VALUES (${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid, ${userId}, ${clientId})
34
+ ON CONFLICT (tenant_id, user_id, client_id) DO NOTHING
35
+ `;
36
+ }
37
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/portal/repository.ts"],"names":[],"mappings":";;AAQA,8CAQC;AAGD,8CAMC;AAED,gDAMC;AAjCD,0CAAuD;AAGvD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,EAAM,EAAE,MAAc;IAC5D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAyB;;sBAE1B,MAAM;;GAEzB,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,uBAAc,CAAC,yCAAyC,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3B,CAAC;AAED,0FAA0F;AACnF,KAAK,UAAU,iBAAiB,CAAC,EAAM,EAAE,QAAgB;IAC9D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAuB;;wBAEtB,QAAQ;GAC7B,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,EAAM,EAAE,MAAc,EAAE,QAAgB;IAC/E,MAAM,EAAE,CAAA;;cAEI,IAAA,eAAM,GAAE,kDAAkD,MAAM,KAAK,QAAQ;;GAExF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertBundleModulesCovered = assertBundleModulesCovered;
4
+ exports.freeModuleCodesForBundle = freeModuleCodesForBundle;
5
+ exports.resolveBundleDiscount = resolveBundleDiscount;
6
+ const money_js_1 = require("./money.js");
7
+ const errors_js_1 = require("./errors.js");
8
+ /**
9
+ * Bundle (RFC §8 passo 5 / ETAPA 6) — NUNCA dupla cobrança: os módulos já
10
+ * foram precificados 1× cada em `MODULE_PRICE`; o bundle só declara a
11
+ * combinação (`BundleRecord`, em `commercial-catalog/`) e aplica um desconto
12
+ * ou zera o preço de um módulo incluído gratuitamente — nunca soma um novo
13
+ * item cobrável. `BundleRecord.discountRuleRef` é apenas uma referência
14
+ * (Catalog não resolve a regra); `BundlePricingRule` é a regra RESOLVIDA que
15
+ * o consumidor injeta para este cálculo (Catalog permanece intocado).
16
+ */
17
+ function assertBundleModulesCovered(bundle, chargedModuleCodes) {
18
+ const missing = bundle.moduleCodes.filter((m) => !chargedModuleCodes.has(m));
19
+ if (missing.length > 0) {
20
+ throw new errors_js_1.PricingEngineError('invalid-bundle', `Bundle "${bundle.code}" exige módulos ausentes na oferta: ${missing.join(', ')}.`);
21
+ }
22
+ }
23
+ /** Módulos do bundle marcados `free_module` — usado por `pipeline.ts` para zerar o preço ANTES de somar o subtotal. */
24
+ function freeModuleCodesForBundle(bundle, rule) {
25
+ if (!rule || rule.kind !== 'free_module' || !rule.freeModuleCode)
26
+ return new Set();
27
+ if (!bundle.moduleCodes.includes(rule.freeModuleCode)) {
28
+ throw new errors_js_1.PricingEngineError('invalid-bundle', `Bundle "${bundle.code}": free_module "${rule.freeModuleCode}" não pertence ao bundle.`);
29
+ }
30
+ return new Set([rule.freeModuleCode]);
31
+ }
32
+ /**
33
+ * Desconto (percent/fixed) do bundle sobre o subtotal JÁ precificado dos seus
34
+ * módulos (excluindo os já zerados por `free_module`, que não têm o que
35
+ * descontar de novo). Retorna `null` quando não há regra percent/fixed.
36
+ */
37
+ function resolveBundleDiscount(bundle, rule, items) {
38
+ if (!rule || rule.kind === 'free_module')
39
+ return null;
40
+ if (rule.value == null)
41
+ return null;
42
+ const coveredSubtotal = (0, money_js_1.addCents)(...items.filter((i) => i.origin === 'module' && bundle.moduleCodes.includes(i.targetCode)).map((i) => i.subtotalCents));
43
+ if (coveredSubtotal <= 0)
44
+ return null;
45
+ if (rule.kind === 'percent')
46
+ return (0, money_js_1.applyPercent)(coveredSubtotal, rule.value);
47
+ return Math.min(coveredSubtotal, (0, money_js_1.reaisToCents)(rule.value));
48
+ }
49
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/pricing-engine/bundle.ts"],"names":[],"mappings":";;AAeA,gEAQC;AAGD,4DASC;AAOD,sDAeC;AAxDD,yCAA8E;AAC9E,2CAAiD;AAGjD;;;;;;;;GAQG;AAEH,SAAgB,0BAA0B,CAAC,MAAoB,EAAE,kBAA+B;IAC9F,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,8BAAkB,CAC1B,gBAAgB,EAChB,WAAW,MAAM,CAAC,IAAI,uCAAuC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,uHAAuH;AACvH,SAAgB,wBAAwB,CAAC,MAAoB,EAAE,IAAmC;IAChG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACnF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,8BAAkB,CAC1B,gBAAgB,EAChB,WAAW,MAAM,CAAC,IAAI,mBAAmB,IAAI,CAAC,cAAc,2BAA2B,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CACnC,MAAoB,EACpB,IAAmC,EACnC,KAAyB;IAEzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,eAAe,GAAG,IAAA,mBAAQ,EAC9B,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CACvH,CAAC;IACF,IAAI,eAAe,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAA,uBAAY,EAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAA,uBAAY,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Taxonomia de erros do Pricing Engine (RFC-CAPABILITY-PRICING-ENGINE-001 §2/
4
+ * §8, ETAPA 15). Invariante herdada das Capabilities certificadas: um erro de
5
+ * contrato é RETORNADO como dado (`EngineResult`, ver types.ts), nunca
6
+ * lançado silenciosamente para o consumidor — o motor puro não deve expor
7
+ * `throw` na sua fronteira pública. Internamente, helpers podem lançar
8
+ * `PricingEngineError` — `pipeline.ts` captura na borda e converte em
9
+ * `{ ok: false, error }`.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PricingEngineError = void 0;
13
+ const ERROR_CLASS = {
14
+ 'catalog-version-not-found': 'configuration',
15
+ 'offer-not-found': 'validation',
16
+ 'offer-ineligible': 'validation',
17
+ 'currency-mismatch': 'permanent',
18
+ 'conflicting-rules': 'conflict',
19
+ 'invalid-bundle': 'configuration',
20
+ 'duplicate-charge-item': 'permanent',
21
+ 'coupon-invalid': 'validation',
22
+ 'coupon-expired': 'operator-correctable',
23
+ 'coupon-not-eligible': 'validation',
24
+ 'campaign-conflict': 'conflict',
25
+ 'proration-invalid': 'validation',
26
+ 'negotiated-contract-invalid': 'configuration',
27
+ 'price-rule-missing': 'configuration',
28
+ 'arithmetic-overflow': 'permanent',
29
+ 'invalid-effective-date': 'validation',
30
+ };
31
+ class PricingEngineError extends Error {
32
+ code;
33
+ errorClass;
34
+ /** `ruleId`s envolvidos num conflito (§8) — vazio quando não aplicável. */
35
+ ruleIds;
36
+ constructor(code, message, ruleIds = []) {
37
+ super(message);
38
+ this.name = 'PricingEngineError';
39
+ this.code = code;
40
+ this.errorClass = ERROR_CLASS[code];
41
+ this.ruleIds = ruleIds;
42
+ }
43
+ toJSON() {
44
+ return { code: this.code, errorClass: this.errorClass, message: this.message, ruleIds: this.ruleIds };
45
+ }
46
+ }
47
+ exports.PricingEngineError = PricingEngineError;
48
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pricing-engine/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA6BH,MAAM,WAAW,GAAgD;IAC/D,2BAA2B,EAAE,eAAe;IAC5C,iBAAiB,EAAE,YAAY;IAC/B,kBAAkB,EAAE,YAAY;IAChC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,UAAU;IAC/B,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,WAAW;IACpC,gBAAgB,EAAE,YAAY;IAC9B,gBAAgB,EAAE,sBAAsB;IACxC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,YAAY;IACjC,6BAA6B,EAAE,eAAe;IAC9C,oBAAoB,EAAE,eAAe;IACrC,qBAAqB,EAAE,WAAW;IAClC,wBAAwB,EAAE,YAAY;CACvC,CAAC;AAEF,MAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAmB;IACvB,UAAU,CAAoB;IACvC,2EAA2E;IAClE,OAAO,CAAW;IAE3B,YAAY,IAAsB,EAAE,OAAe,EAAE,UAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACxG,CAAC;CACF;AAjBD,gDAiBC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compareQuotes = exports.normalizeCanonicalQuote = exports.computePricingQuote = exports.computeProration = exports.resolveBundleDiscount = exports.freeModuleCodesForBundle = exports.assertBundleModulesCovered = exports.PRICING_RULE_STEPS_IN_ORDER = exports.PRICING_ENGINE_VERSION = exports.PricingEngineError = exports.clampNonNegative = exports.prorateByDays = exports.applyPercent = exports.multiplyByQuantity = exports.subtractCents = exports.addCents = exports.centsToReais = exports.reaisToCents = exports.roundHalfEven = void 0;
4
+ var money_js_1 = require("./money.js");
5
+ Object.defineProperty(exports, "roundHalfEven", { enumerable: true, get: function () { return money_js_1.roundHalfEven; } });
6
+ Object.defineProperty(exports, "reaisToCents", { enumerable: true, get: function () { return money_js_1.reaisToCents; } });
7
+ Object.defineProperty(exports, "centsToReais", { enumerable: true, get: function () { return money_js_1.centsToReais; } });
8
+ Object.defineProperty(exports, "addCents", { enumerable: true, get: function () { return money_js_1.addCents; } });
9
+ Object.defineProperty(exports, "subtractCents", { enumerable: true, get: function () { return money_js_1.subtractCents; } });
10
+ Object.defineProperty(exports, "multiplyByQuantity", { enumerable: true, get: function () { return money_js_1.multiplyByQuantity; } });
11
+ Object.defineProperty(exports, "applyPercent", { enumerable: true, get: function () { return money_js_1.applyPercent; } });
12
+ Object.defineProperty(exports, "prorateByDays", { enumerable: true, get: function () { return money_js_1.prorateByDays; } });
13
+ Object.defineProperty(exports, "clampNonNegative", { enumerable: true, get: function () { return money_js_1.clampNonNegative; } });
14
+ var errors_js_1 = require("./errors.js");
15
+ Object.defineProperty(exports, "PricingEngineError", { enumerable: true, get: function () { return errors_js_1.PricingEngineError; } });
16
+ var types_js_1 = require("./types.js");
17
+ Object.defineProperty(exports, "PRICING_ENGINE_VERSION", { enumerable: true, get: function () { return types_js_1.PRICING_ENGINE_VERSION; } });
18
+ Object.defineProperty(exports, "PRICING_RULE_STEPS_IN_ORDER", { enumerable: true, get: function () { return types_js_1.PRICING_RULE_STEPS_IN_ORDER; } });
19
+ var bundle_js_1 = require("./bundle.js");
20
+ Object.defineProperty(exports, "assertBundleModulesCovered", { enumerable: true, get: function () { return bundle_js_1.assertBundleModulesCovered; } });
21
+ Object.defineProperty(exports, "freeModuleCodesForBundle", { enumerable: true, get: function () { return bundle_js_1.freeModuleCodesForBundle; } });
22
+ Object.defineProperty(exports, "resolveBundleDiscount", { enumerable: true, get: function () { return bundle_js_1.resolveBundleDiscount; } });
23
+ var proration_js_1 = require("./proration.js");
24
+ Object.defineProperty(exports, "computeProration", { enumerable: true, get: function () { return proration_js_1.computeProration; } });
25
+ var pipeline_js_1 = require("./pipeline.js");
26
+ Object.defineProperty(exports, "computePricingQuote", { enumerable: true, get: function () { return pipeline_js_1.computePricingQuote; } });
27
+ var shadow_js_1 = require("./shadow.js");
28
+ Object.defineProperty(exports, "normalizeCanonicalQuote", { enumerable: true, get: function () { return shadow_js_1.normalizeCanonicalQuote; } });
29
+ Object.defineProperty(exports, "compareQuotes", { enumerable: true, get: function () { return shadow_js_1.compareQuotes; } });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pricing-engine/index.ts"],"names":[],"mappings":";;;AACA,uCAUoB;AATlB,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,oGAAA,QAAQ,OAAA;AACR,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAIlB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAsB3B,uCAAiF;AAAxE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AAE5D,yCAA0G;AAAjG,uHAAA,0BAA0B,OAAA;AAAE,qHAAA,wBAAwB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AACpF,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA;AAG5B,yCAAqE;AAA5D,oHAAA,uBAAuB,OAAA;AAAE,0GAAA,aAAa,OAAA"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Money — contrato monetário seguro do Pricing Engine (RFC-CAPABILITY-PRICING-
4
+ * ENGINE-001 §4, herdado de RFC-CAPABILITY-MERCHANT-BILLING-CORE-001 §5).
5
+ *
6
+ * Unidade mínima: CENTAVOS, sempre inteiro. Nenhuma fração é acumulada sem
7
+ * arredondar — cada operação que introduz fração (percentual, prorata por
8
+ * dias) arredonda IMEDIATAMENTE por half-even (bankers') no ponto de uso.
9
+ * Isto é o que garante "arredondamento uma vez, no fim" nas somas finais: as
10
+ * frações já foram eliminadas antes de somar.
11
+ *
12
+ * Reutilizado por bundle.ts, coupon.ts, proration.ts e pipeline.ts — nenhum
13
+ * outro Money é criado em `@baruk/core` (nem o `ChargeRecord.amount`/
14
+ * `CommercialPriceItem.amount` existentes, que guardam REAIS como
15
+ * conveniência de schema, nem um terceiro tipo). Este módulo é o único que
16
+ * precisa de aritmética encadeada (percentual → prorata → soma), por isso é
17
+ * o único ponto onde a disciplina de centavos inteiros se paga.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.roundHalfEven = roundHalfEven;
21
+ exports.reaisToCents = reaisToCents;
22
+ exports.centsToReais = centsToReais;
23
+ exports.addCents = addCents;
24
+ exports.subtractCents = subtractCents;
25
+ exports.multiplyByQuantity = multiplyByQuantity;
26
+ exports.applyPercent = applyPercent;
27
+ exports.prorateByDays = prorateByDays;
28
+ exports.clampNonNegative = clampNonNegative;
29
+ /** Arredondamento half-even (bankers') — determinístico, não depende de ordem de chamadas. */
30
+ function roundHalfEven(value) {
31
+ const floor = Math.floor(value);
32
+ const diff = value - floor;
33
+ if (diff < 0.5)
34
+ return floor;
35
+ if (diff > 0.5)
36
+ return floor + 1;
37
+ return floor % 2 === 0 ? floor : floor + 1;
38
+ }
39
+ function reaisToCents(reais) {
40
+ return roundHalfEven(reais * 100);
41
+ }
42
+ function centsToReais(cents) {
43
+ return cents / 100;
44
+ }
45
+ function addCents(...values) {
46
+ return values.reduce((sum, v) => sum + v, 0);
47
+ }
48
+ function subtractCents(a, b) {
49
+ return a - b;
50
+ }
51
+ /** Multiplica por uma quantidade inteira (assentos, unidades) — sem fração, nada a arredondar. */
52
+ function multiplyByQuantity(cents, quantity) {
53
+ return cents * quantity;
54
+ }
55
+ /** Aplica um percentual (0-100) com arredondamento half-even no ponto de aplicação. */
56
+ function applyPercent(cents, percent) {
57
+ return roundHalfEven((cents * percent) / 100);
58
+ }
59
+ /** Prorata por fração de dias — arredondamento half-even no ponto de aplicação. */
60
+ function prorateByDays(cents, daysNumerator, daysDenominator) {
61
+ if (daysDenominator <= 0) {
62
+ throw new Error('prorateByDays: daysDenominator deve ser positivo.');
63
+ }
64
+ return roundHalfEven((cents * daysNumerator) / daysDenominator);
65
+ }
66
+ function clampNonNegative(cents) {
67
+ return Math.max(0, cents);
68
+ }
69
+ //# sourceMappingURL=money.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money.js","sourceRoot":"","sources":["../../../src/pricing-engine/money.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAKH,sCAMC;AAED,oCAEC;AAED,oCAEC;AAED,4BAEC;AAED,sCAEC;AAGD,gDAEC;AAGD,oCAEC;AAGD,sCAKC;AAED,4CAEC;AA7CD,8FAA8F;AAC9F,SAAgB,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3B,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IACjC,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,OAAO,aAAa,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,GAAG,GAAG,CAAC;AACrB,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAG,MAAe;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,aAAa,CAAC,CAAQ,EAAE,CAAQ;IAC9C,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,kGAAkG;AAClG,SAAgB,kBAAkB,CAAC,KAAY,EAAE,QAAgB;IAC/D,OAAO,KAAK,GAAG,QAAQ,CAAC;AAC1B,CAAC;AAED,uFAAuF;AACvF,SAAgB,YAAY,CAAC,KAAY,EAAE,OAAe;IACxD,OAAO,aAAa,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,mFAAmF;AACnF,SAAgB,aAAa,CAAC,KAAY,EAAE,aAAqB,EAAE,eAAuB;IACxF,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,aAAa,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,eAAe,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAY;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC"}