@endora-commerce/mod-price-lists 0.100.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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/admin/components/ApplicationRuleBuilder.d.ts +24 -0
  4. package/dist/admin/components/ApplicationRuleBuilder.d.ts.map +1 -0
  5. package/dist/admin/components/ApplicationRuleBuilder.js +249 -0
  6. package/dist/admin/components/ApplicationRuleBuilder.js.map +1 -0
  7. package/dist/admin/components/BracketGrid.d.ts +29 -0
  8. package/dist/admin/components/BracketGrid.d.ts.map +1 -0
  9. package/dist/admin/components/BracketGrid.js +252 -0
  10. package/dist/admin/components/BracketGrid.js.map +1 -0
  11. package/dist/admin/components/DisplayModeOverrideRow.d.ts +46 -0
  12. package/dist/admin/components/DisplayModeOverrideRow.d.ts.map +1 -0
  13. package/dist/admin/components/DisplayModeOverrideRow.js +109 -0
  14. package/dist/admin/components/DisplayModeOverrideRow.js.map +1 -0
  15. package/dist/admin/components/LinkedPriceListsPanel.d.ts +55 -0
  16. package/dist/admin/components/LinkedPriceListsPanel.d.ts.map +1 -0
  17. package/dist/admin/components/LinkedPriceListsPanel.js +131 -0
  18. package/dist/admin/components/LinkedPriceListsPanel.js.map +1 -0
  19. package/dist/admin/index.d.ts +34 -0
  20. package/dist/admin/index.d.ts.map +1 -0
  21. package/dist/admin/index.js +119 -0
  22. package/dist/admin/index.js.map +1 -0
  23. package/dist/admin/pages/DisplayModeOverridesPage.d.ts +25 -0
  24. package/dist/admin/pages/DisplayModeOverridesPage.d.ts.map +1 -0
  25. package/dist/admin/pages/DisplayModeOverridesPage.js +266 -0
  26. package/dist/admin/pages/DisplayModeOverridesPage.js.map +1 -0
  27. package/dist/admin/pages/PriceListDetailPage.d.ts +23 -0
  28. package/dist/admin/pages/PriceListDetailPage.d.ts.map +1 -0
  29. package/dist/admin/pages/PriceListDetailPage.js +421 -0
  30. package/dist/admin/pages/PriceListDetailPage.js.map +1 -0
  31. package/dist/admin/pages/PriceListsPage.d.ts +17 -0
  32. package/dist/admin/pages/PriceListsPage.d.ts.map +1 -0
  33. package/dist/admin/pages/PriceListsPage.js +198 -0
  34. package/dist/admin/pages/PriceListsPage.js.map +1 -0
  35. package/dist/admin/zones/CategoryDisplayMode.d.ts +27 -0
  36. package/dist/admin/zones/CategoryDisplayMode.d.ts.map +1 -0
  37. package/dist/admin/zones/CategoryDisplayMode.js +11 -0
  38. package/dist/admin/zones/CategoryDisplayMode.js.map +1 -0
  39. package/dist/admin/zones/OrganizationDisplayMode.d.ts +36 -0
  40. package/dist/admin/zones/OrganizationDisplayMode.d.ts.map +1 -0
  41. package/dist/admin/zones/OrganizationDisplayMode.js +12 -0
  42. package/dist/admin/zones/OrganizationDisplayMode.js.map +1 -0
  43. package/dist/admin/zones/ProductLinkedPriceLists.d.ts +16 -0
  44. package/dist/admin/zones/ProductLinkedPriceLists.d.ts.map +1 -0
  45. package/dist/admin/zones/ProductLinkedPriceLists.js +7 -0
  46. package/dist/admin/zones/ProductLinkedPriceLists.js.map +1 -0
  47. package/dist/backend/entities/price-display-mode-override.entity.d.ts +23 -0
  48. package/dist/backend/entities/price-display-mode-override.entity.d.ts.map +1 -0
  49. package/dist/backend/entities/price-display-mode-override.entity.js +58 -0
  50. package/dist/backend/entities/price-display-mode-override.entity.js.map +1 -0
  51. package/dist/backend/entities/price-list-price-bracket.entity.d.ts +26 -0
  52. package/dist/backend/entities/price-list-price-bracket.entity.d.ts.map +1 -0
  53. package/dist/backend/entities/price-list-price-bracket.entity.js +73 -0
  54. package/dist/backend/entities/price-list-price-bracket.entity.js.map +1 -0
  55. package/dist/backend/entities/price-list-product.entity.d.ts +15 -0
  56. package/dist/backend/entities/price-list-product.entity.d.ts.map +1 -0
  57. package/dist/backend/entities/price-list-product.entity.js +43 -0
  58. package/dist/backend/entities/price-list-product.entity.js.map +1 -0
  59. package/dist/backend/entities/price-list.entity.d.ts +34 -0
  60. package/dist/backend/entities/price-list.entity.d.ts.map +1 -0
  61. package/dist/backend/entities/price-list.entity.js +115 -0
  62. package/dist/backend/entities/price-list.entity.js.map +1 -0
  63. package/dist/backend/index.d.ts +125 -0
  64. package/dist/backend/index.d.ts.map +1 -0
  65. package/dist/backend/index.js +179 -0
  66. package/dist/backend/index.js.map +1 -0
  67. package/dist/backend/plugin.d.ts +68 -0
  68. package/dist/backend/plugin.d.ts.map +1 -0
  69. package/dist/backend/plugin.js +88 -0
  70. package/dist/backend/plugin.js.map +1 -0
  71. package/dist/backend/routes.d.ts +40 -0
  72. package/dist/backend/routes.d.ts.map +1 -0
  73. package/dist/backend/routes.js +447 -0
  74. package/dist/backend/routes.js.map +1 -0
  75. package/dist/backend/routes.storefront.d.ts +47 -0
  76. package/dist/backend/routes.storefront.d.ts.map +1 -0
  77. package/dist/backend/routes.storefront.js +131 -0
  78. package/dist/backend/routes.storefront.js.map +1 -0
  79. package/dist/backend/services/application-rule-evaluator.d.ts +25 -0
  80. package/dist/backend/services/application-rule-evaluator.d.ts.map +1 -0
  81. package/dist/backend/services/application-rule-evaluator.js +2 -0
  82. package/dist/backend/services/application-rule-evaluator.js.map +1 -0
  83. package/dist/backend/services/audit-references.d.ts +11 -0
  84. package/dist/backend/services/audit-references.d.ts.map +1 -0
  85. package/dist/backend/services/audit-references.js +23 -0
  86. package/dist/backend/services/audit-references.js.map +1 -0
  87. package/dist/backend/services/default-price-list-migration.d.ts +70 -0
  88. package/dist/backend/services/default-price-list-migration.d.ts.map +1 -0
  89. package/dist/backend/services/default-price-list-migration.js +177 -0
  90. package/dist/backend/services/default-price-list-migration.js.map +1 -0
  91. package/dist/backend/services/display-mode-resolver.d.ts +78 -0
  92. package/dist/backend/services/display-mode-resolver.d.ts.map +1 -0
  93. package/dist/backend/services/display-mode-resolver.js +71 -0
  94. package/dist/backend/services/display-mode-resolver.js.map +1 -0
  95. package/dist/backend/services/listing-price-chain.d.ts +26 -0
  96. package/dist/backend/services/listing-price-chain.d.ts.map +1 -0
  97. package/dist/backend/services/listing-price-chain.js +55 -0
  98. package/dist/backend/services/listing-price-chain.js.map +1 -0
  99. package/dist/backend/services/price-bracket-resolver.d.ts +24 -0
  100. package/dist/backend/services/price-bracket-resolver.d.ts.map +1 -0
  101. package/dist/backend/services/price-bracket-resolver.js +16 -0
  102. package/dist/backend/services/price-bracket-resolver.js.map +1 -0
  103. package/dist/backend/services/price-list-candidate-vector.d.ts +116 -0
  104. package/dist/backend/services/price-list-candidate-vector.d.ts.map +1 -0
  105. package/dist/backend/services/price-list-candidate-vector.js +133 -0
  106. package/dist/backend/services/price-list-candidate-vector.js.map +1 -0
  107. package/dist/backend/services/price-list-currency-reference.d.ts +12 -0
  108. package/dist/backend/services/price-list-currency-reference.d.ts.map +1 -0
  109. package/dist/backend/services/price-list-currency-reference.js +24 -0
  110. package/dist/backend/services/price-list-currency-reference.js.map +1 -0
  111. package/dist/backend/services/price-list-read-port.d.ts +29 -0
  112. package/dist/backend/services/price-list-read-port.d.ts.map +1 -0
  113. package/dist/backend/services/price-list-read-port.js +64 -0
  114. package/dist/backend/services/price-list-read-port.js.map +1 -0
  115. package/dist/backend/services/price-list-resolver.d.ts +26 -0
  116. package/dist/backend/services/price-list-resolver.d.ts.map +1 -0
  117. package/dist/backend/services/price-list-resolver.js +37 -0
  118. package/dist/backend/services/price-list-resolver.js.map +1 -0
  119. package/dist/backend/services/price-list-service.d.ts +431 -0
  120. package/dist/backend/services/price-list-service.d.ts.map +1 -0
  121. package/dist/backend/services/price-list-service.js +1238 -0
  122. package/dist/backend/services/price-list-service.js.map +1 -0
  123. package/dist/backend/services/price-list-status-worker.d.ts +28 -0
  124. package/dist/backend/services/price-list-status-worker.d.ts.map +1 -0
  125. package/dist/backend/services/price-list-status-worker.js +38 -0
  126. package/dist/backend/services/price-list-status-worker.js.map +1 -0
  127. package/dist/backend/services/pricing-cache.d.ts +53 -0
  128. package/dist/backend/services/pricing-cache.d.ts.map +1 -0
  129. package/dist/backend/services/pricing-cache.js +88 -0
  130. package/dist/backend/services/pricing-cache.js.map +1 -0
  131. package/dist/backend/services/pricing-service.d.ts +304 -0
  132. package/dist/backend/services/pricing-service.d.ts.map +1 -0
  133. package/dist/backend/services/pricing-service.interface.d.ts +151 -0
  134. package/dist/backend/services/pricing-service.interface.d.ts.map +1 -0
  135. package/dist/backend/services/pricing-service.interface.js +10 -0
  136. package/dist/backend/services/pricing-service.interface.js.map +1 -0
  137. package/dist/backend/services/pricing-service.js +803 -0
  138. package/dist/backend/services/pricing-service.js.map +1 -0
  139. package/dist/backend/services/unit-price-ordering.d.ts +121 -0
  140. package/dist/backend/services/unit-price-ordering.d.ts.map +1 -0
  141. package/dist/backend/services/unit-price-ordering.js +164 -0
  142. package/dist/backend/services/unit-price-ordering.js.map +1 -0
  143. package/dist/manifest.d.ts +218 -0
  144. package/dist/manifest.d.ts.map +1 -0
  145. package/dist/manifest.js +228 -0
  146. package/dist/manifest.js.map +1 -0
  147. package/dist/migrations/20260426T075235_price_lists_pricing_init.d.ts +24 -0
  148. package/dist/migrations/20260426T075235_price_lists_pricing_init.d.ts.map +1 -0
  149. package/dist/migrations/20260426T075235_price_lists_pricing_init.js +89 -0
  150. package/dist/migrations/20260426T075235_price_lists_pricing_init.js.map +1 -0
  151. package/dist/migrations/20260504T125655_price_lists_engine.d.ts +6 -0
  152. package/dist/migrations/20260504T125655_price_lists_engine.d.ts.map +1 -0
  153. package/dist/migrations/20260504T125655_price_lists_engine.js +319 -0
  154. package/dist/migrations/20260504T125655_price_lists_engine.js.map +1 -0
  155. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.d.ts +15 -0
  156. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.d.ts.map +1 -0
  157. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.js +58 -0
  158. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.js.map +1 -0
  159. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.d.ts +40 -0
  160. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.d.ts.map +1 -0
  161. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.js +46 -0
  162. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.js.map +1 -0
  163. package/dist/migrations/index.d.ts +30 -0
  164. package/dist/migrations/index.d.ts.map +1 -0
  165. package/dist/migrations/index.js +35 -0
  166. package/dist/migrations/index.js.map +1 -0
  167. package/docs/price_lists.md +278 -0
  168. package/i18n/en.json +14 -0
  169. package/i18n/pl.json +14 -0
  170. package/package.json +99 -0
  171. package/tailwind.css +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-service.js","sourceRoot":"","sources":["../../../src/backend/services/pricing-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * The SQL behind {@link ListingPriceOrderPort} (feature 086, research §R4): the
3
+ * resolved unit price as a **merge of index-ordered streams**, one per
4
+ * candidate price list, each stream after the leading one carrying an exclusion
5
+ * and an amount watermark.
6
+ *
7
+ * Everything here is a pure builder, so the three shapes the measurements
8
+ * forced can be asserted by a unit test on the text and demonstrated by an
9
+ * `explain` in the perf bench, instead of being re-derived by the next reader.
10
+ *
11
+ * ## The three shapes, and what each costs when it is written the other way
12
+ *
13
+ * **1. The exclusion is a scalar subquery carrying its own `LIMIT 1` — never
14
+ * `not exists`.** `not exists` is a sublink the planner may pull up into a hash
15
+ * anti-join, which materialises the whole branch before one row can leave it:
16
+ * measured at 208 ms and 150 385 buffers, against **0.69 ms** for the scalar
17
+ * form at the same scale. A scalar subquery with a `LIMIT` cannot be pulled up,
18
+ * so the branch stays a filtered index-only scan in amount order and the merge
19
+ * streams. Same semantics; the difference is structural, not a planner hint.
20
+ *
21
+ * **2. Every stream after the leading one is bounded by the leading stream's
22
+ * amount watermark.** A branch whose every product is priced by a
23
+ * higher-priority branch yields nothing and discovers that by scanning its whole
24
+ * list — 50 000 exclusion probes, 179 ms. That is not an exotic configuration:
25
+ * the ordinary anonymous `[channel list, default list]` vector hits it whenever
26
+ * the channel list prices the assortment, and the "one negotiated list per
27
+ * customer, covering everything" shape hits it hardest. With the bound the same
28
+ * case is **213 probes and 2.88 ms**.
29
+ *
30
+ * The bound is exact rather than approximate, and the argument is one line: the
31
+ * leading stream has no exclusion, so if it returned a full window of `limit`
32
+ * rows all at or below the watermark, then any row above the watermark sorts
33
+ * after all of them and cannot be among the first `limit` rows of the merge.
34
+ * When the leading stream came back short there is no watermark and no bound.
35
+ *
36
+ * **3. Nothing here asks the planner for a plan.** The identical query planned
37
+ * as a streaming merge at 202 000 bracket rows and as bitmap scans plus a sort
38
+ * at 1 687 000, costing 390 ms and 961 ms. The watermark is what makes the
39
+ * streaming plan the planner's own choice again, because `amount <= ?` on the
40
+ * ordering column of a partial covering index is something it can cost. A design
41
+ * that needs `enable_hashjoin = off` to be fast is not a design.
42
+ */
43
+ /** One candidate price list, as a stream of the merge. */
44
+ export interface UnitPriceStream {
45
+ priceListId: string;
46
+ isSale: boolean;
47
+ /**
48
+ * Product ids this stream is restricted to, or `null` for no restriction.
49
+ *
50
+ * Two things narrow it: the caller's opaque `restrictToProductIds`, and the
51
+ * category memberships a candidate's rule requires. Both are already resolved
52
+ * to ids by the time they reach here — this file knows nothing about
53
+ * categories.
54
+ */
55
+ productIds: readonly string[] | null;
56
+ }
57
+ export interface UnitPriceQueryInput {
58
+ streams: readonly UnitPriceStream[];
59
+ currencyCode: string;
60
+ direction: 'asc' | 'desc';
61
+ /** Keyset resume point over `(amount, productId)`, or `null` to start. */
62
+ after: {
63
+ amount: string;
64
+ productId: string;
65
+ } | null;
66
+ amountRange?: {
67
+ min?: string;
68
+ max?: string;
69
+ } | undefined;
70
+ /** How many rows each individual stream may return. */
71
+ perStreamLimit: number;
72
+ /**
73
+ * The leading stream's watermark. Applied to every stream **except** index 0,
74
+ * which is the stream that produced it. `null` means the leading stream came
75
+ * back short, so there is nothing to bound against.
76
+ */
77
+ watermark: string | null;
78
+ /**
79
+ * Emit no branch for the first `skipStreams` streams, while still excluding
80
+ * against them.
81
+ *
82
+ * The caller already has the leading stream's rows — the probe that fixed the
83
+ * watermark returned them — so re-reading them would be a second scan of the
84
+ * one stream the design most wants read once.
85
+ */
86
+ skipStreams?: number | undefined;
87
+ }
88
+ export interface BuiltQuery {
89
+ sql: string;
90
+ params: unknown[];
91
+ }
92
+ /** A Postgres array literal — `= any('{a,b}'::uuid[])` rather than an `in (?,…)`. */
93
+ export declare function uuidArrayLiteral(ids: readonly string[]): string;
94
+ /**
95
+ * The merge over `input.streams`, as one statement.
96
+ *
97
+ * Stream `i` excludes every product priced by streams `0..i-1`, which is FR-031's
98
+ * fall-through: the first candidate in priority order that prices a product is
99
+ * the one that answers for it.
100
+ */
101
+ export declare function buildUnitPriceMergeQuery(input: UnitPriceQueryInput): BuiltQuery;
102
+ /**
103
+ * Compares two `numeric(14,4)` amounts **as decimals**, without going through a
104
+ * float.
105
+ *
106
+ * The merge is finished in memory — the leading stream's window is already in
107
+ * hand from the watermark probe — so the two halves have to be ordered by the
108
+ * same relation Postgres used. `Number()` is not it: `numeric(14,4)` carries
109
+ * eighteen significant digits and a double carries fifteen, so two amounts a
110
+ * shop can actually charge can compare equal after the conversion.
111
+ */
112
+ export declare function compareDecimalStrings(a: string, b: string): number;
113
+ /** The merge's total order: amount, then product id, in the requested direction. */
114
+ export declare function compareOrderRows(a: {
115
+ amount: string;
116
+ productId: string;
117
+ }, b: {
118
+ amount: string;
119
+ productId: string;
120
+ }, direction: 'asc' | 'desc'): number;
121
+ //# sourceMappingURL=unit-price-ordering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-price-ordering.d.ts","sourceRoot":"","sources":["../../../src/backend/services/unit-price-ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;OAOG;IACH,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzD,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,UAAU,CAa/E;AAgFD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBlE;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACxC,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACxC,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,MAAM,CAIR"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * The SQL behind {@link ListingPriceOrderPort} (feature 086, research §R4): the
3
+ * resolved unit price as a **merge of index-ordered streams**, one per
4
+ * candidate price list, each stream after the leading one carrying an exclusion
5
+ * and an amount watermark.
6
+ *
7
+ * Everything here is a pure builder, so the three shapes the measurements
8
+ * forced can be asserted by a unit test on the text and demonstrated by an
9
+ * `explain` in the perf bench, instead of being re-derived by the next reader.
10
+ *
11
+ * ## The three shapes, and what each costs when it is written the other way
12
+ *
13
+ * **1. The exclusion is a scalar subquery carrying its own `LIMIT 1` — never
14
+ * `not exists`.** `not exists` is a sublink the planner may pull up into a hash
15
+ * anti-join, which materialises the whole branch before one row can leave it:
16
+ * measured at 208 ms and 150 385 buffers, against **0.69 ms** for the scalar
17
+ * form at the same scale. A scalar subquery with a `LIMIT` cannot be pulled up,
18
+ * so the branch stays a filtered index-only scan in amount order and the merge
19
+ * streams. Same semantics; the difference is structural, not a planner hint.
20
+ *
21
+ * **2. Every stream after the leading one is bounded by the leading stream's
22
+ * amount watermark.** A branch whose every product is priced by a
23
+ * higher-priority branch yields nothing and discovers that by scanning its whole
24
+ * list — 50 000 exclusion probes, 179 ms. That is not an exotic configuration:
25
+ * the ordinary anonymous `[channel list, default list]` vector hits it whenever
26
+ * the channel list prices the assortment, and the "one negotiated list per
27
+ * customer, covering everything" shape hits it hardest. With the bound the same
28
+ * case is **213 probes and 2.88 ms**.
29
+ *
30
+ * The bound is exact rather than approximate, and the argument is one line: the
31
+ * leading stream has no exclusion, so if it returned a full window of `limit`
32
+ * rows all at or below the watermark, then any row above the watermark sorts
33
+ * after all of them and cannot be among the first `limit` rows of the merge.
34
+ * When the leading stream came back short there is no watermark and no bound.
35
+ *
36
+ * **3. Nothing here asks the planner for a plan.** The identical query planned
37
+ * as a streaming merge at 202 000 bracket rows and as bitmap scans plus a sort
38
+ * at 1 687 000, costing 390 ms and 961 ms. The watermark is what makes the
39
+ * streaming plan the planner's own choice again, because `amount <= ?` on the
40
+ * ordering column of a partial covering index is something it can cost. A design
41
+ * that needs `enable_hashjoin = off` to be fast is not a design.
42
+ */
43
+ /** A Postgres array literal — `= any('{a,b}'::uuid[])` rather than an `in (?,…)`. */
44
+ export function uuidArrayLiteral(ids) {
45
+ return `{${ids.join(',')}}`;
46
+ }
47
+ /**
48
+ * The merge over `input.streams`, as one statement.
49
+ *
50
+ * Stream `i` excludes every product priced by streams `0..i-1`, which is FR-031's
51
+ * fall-through: the first candidate in priority order that prices a product is
52
+ * the one that answers for it.
53
+ */
54
+ export function buildUnitPriceMergeQuery(input) {
55
+ const params = [];
56
+ const skip = input.skipStreams ?? 0;
57
+ const branches = input.streams
58
+ .map((stream, index) => ({ stream, index }))
59
+ .filter(({ index }) => index >= skip)
60
+ .map(({ stream, index }) => buildStreamSelect(input, stream, index, params));
61
+ const dir = input.direction === 'asc' ? 'asc' : 'desc';
62
+ const sql = `select t."product_id"::text as product_id, t."amount"::text as amount, t."stream_index"\n` +
63
+ ` from (\n${branches.join('\n union all\n')}\n ) t\n` +
64
+ ` order by t."amount" ${dir}, t."product_id" ${dir}`;
65
+ return { sql, params };
66
+ }
67
+ function buildStreamSelect(input, stream, index, params) {
68
+ const dir = input.direction === 'asc' ? 'asc' : 'desc';
69
+ const clauses = [
70
+ `b."price_list_id" = ?`,
71
+ `b."currency_code" = ?`,
72
+ // The quantity-1 equality, not a `distinct on` and not a window function:
73
+ // `check (min_quantity >= 1)` makes `min_quantity <= 1` mean exactly this,
74
+ // which is what a partial index can be built on.
75
+ `b."min_quantity" = 1`,
76
+ ];
77
+ params.push(stream.priceListId, input.currencyCode);
78
+ if (stream.productIds !== null) {
79
+ clauses.push(`b."product_id" = any(?::uuid[])`);
80
+ params.push(uuidArrayLiteral(stream.productIds));
81
+ }
82
+ if (input.after) {
83
+ clauses.push(`(b."amount", b."product_id") ${input.direction === 'asc' ? '>' : '<'} (?::numeric, ?::uuid)`);
84
+ params.push(input.after.amount, input.after.productId);
85
+ }
86
+ if (input.amountRange?.min !== undefined) {
87
+ clauses.push(`b."amount" >= ?::numeric`);
88
+ params.push(input.amountRange.min);
89
+ }
90
+ if (input.amountRange?.max !== undefined) {
91
+ clauses.push(`b."amount" <= ?::numeric`);
92
+ params.push(input.amountRange.max);
93
+ }
94
+ // Shape 2 — the watermark. Never on the stream that produced it.
95
+ if (index > 0 && input.watermark !== null) {
96
+ clauses.push(`b."amount" ${input.direction === 'asc' ? '<=' : '>='} ?::numeric`);
97
+ params.push(input.watermark);
98
+ }
99
+ // Shape 1 — one scalar subquery per higher-priority stream, each with its own
100
+ // `limit 1`. Written as `not exists` this is the 208 ms row of the table in
101
+ // the header.
102
+ for (let j = 0; j < index; j += 1) {
103
+ const earlier = input.streams[j];
104
+ const alias = `x${j}`;
105
+ const earlierClauses = [
106
+ `${alias}."price_list_id" = ?`,
107
+ `${alias}."currency_code" = ?`,
108
+ `${alias}."min_quantity" = 1`,
109
+ `${alias}."product_id" = b."product_id"`,
110
+ ];
111
+ params.push(earlier.priceListId, input.currencyCode);
112
+ if (earlier.productIds !== null) {
113
+ earlierClauses.push(`${alias}."product_id" = any(?::uuid[])`);
114
+ params.push(uuidArrayLiteral(earlier.productIds));
115
+ }
116
+ clauses.push(`(select 1 from "price_list_price_brackets" ${alias}\n` +
117
+ ` where ${earlierClauses.join('\n and ')}\n` +
118
+ ` limit 1) is null`);
119
+ }
120
+ params.push(input.perStreamLimit);
121
+ return (` (select b."product_id", b."amount", ${index} as stream_index\n` +
122
+ ` from "price_list_price_brackets" b\n` +
123
+ ` where ${clauses.join('\n and ')}\n` +
124
+ ` order by b."amount" ${dir}, b."product_id" ${dir}\n` +
125
+ ` limit ?)`);
126
+ }
127
+ /**
128
+ * Compares two `numeric(14,4)` amounts **as decimals**, without going through a
129
+ * float.
130
+ *
131
+ * The merge is finished in memory — the leading stream's window is already in
132
+ * hand from the watermark probe — so the two halves have to be ordered by the
133
+ * same relation Postgres used. `Number()` is not it: `numeric(14,4)` carries
134
+ * eighteen significant digits and a double carries fifteen, so two amounts a
135
+ * shop can actually charge can compare equal after the conversion.
136
+ */
137
+ export function compareDecimalStrings(a, b) {
138
+ const [aInt = '0', aFrac = ''] = a.split('.');
139
+ const [bInt = '0', bFrac = ''] = b.split('.');
140
+ const aNeg = aInt.startsWith('-');
141
+ const bNeg = bInt.startsWith('-');
142
+ if (aNeg !== bNeg)
143
+ return aNeg ? -1 : 1;
144
+ const sign = aNeg ? -1 : 1;
145
+ const ai = aInt.replace('-', '').replace(/^0+(?=\d)/, '');
146
+ const bi = bInt.replace('-', '').replace(/^0+(?=\d)/, '');
147
+ if (ai.length !== bi.length)
148
+ return sign * (ai.length < bi.length ? -1 : 1);
149
+ if (ai !== bi)
150
+ return sign * (ai < bi ? -1 : 1);
151
+ const width = Math.max(aFrac.length, bFrac.length);
152
+ const af = aFrac.padEnd(width, '0');
153
+ const bf = bFrac.padEnd(width, '0');
154
+ if (af === bf)
155
+ return 0;
156
+ return sign * (af < bf ? -1 : 1);
157
+ }
158
+ /** The merge's total order: amount, then product id, in the requested direction. */
159
+ export function compareOrderRows(a, b, direction) {
160
+ const byAmount = compareDecimalStrings(a.amount, b.amount);
161
+ const raw = byAmount !== 0 ? byAmount : a.productId < b.productId ? -1 : a.productId > b.productId ? 1 : 0;
162
+ return direction === 'asc' ? raw : -raw;
163
+ }
164
+ //# sourceMappingURL=unit-price-ordering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-price-ordering.js","sourceRoot":"","sources":["../../../src/backend/services/unit-price-ordering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Admin permission codes owned by this module (issue #219).
3
+ *
4
+ * Before these existed every admin route here was gated by `catalog:write`, so
5
+ * a role granted catalogue content work could change what customers pay. That
6
+ * boundary was never chosen — it was the side effect of the module declaring no
7
+ * codes of its own. Pricing is not catalogue content.
8
+ *
9
+ * The split is read/write rather than one code because the two authorities are
10
+ * genuinely different: reading a price list, its brackets and the rule-target
11
+ * pickers is what an operator needs to understand a quoted price, while editing
12
+ * a bracket changes what a customer is charged.
13
+ */
14
+ export declare const PRICE_LIST_PERMISSIONS: {
15
+ readonly READ: "price_lists:read";
16
+ readonly WRITE: "price_lists:write";
17
+ };
18
+ /** Module-lifecycle manifest (feature 018). */
19
+ export declare const manifest: {
20
+ id: string;
21
+ name: string;
22
+ version: string;
23
+ dependencies: string[];
24
+ description?: string | undefined;
25
+ acknowledgedDependencies?: {
26
+ moduleId: string;
27
+ port: string;
28
+ reason: string;
29
+ }[] | undefined;
30
+ nonBindingDependencies?: {
31
+ moduleId: string;
32
+ name: string;
33
+ kind: "contributes-to" | "degrades-without" | "refuses-without";
34
+ reason: string;
35
+ whenAbsent?: string | undefined;
36
+ }[] | undefined;
37
+ activation?: {
38
+ settingCode: string;
39
+ default: boolean;
40
+ } | {
41
+ nonDeactivatable: true;
42
+ reason: string;
43
+ } | undefined;
44
+ settings?: {
45
+ moduleCode: string;
46
+ groups: {
47
+ code: string;
48
+ name: string;
49
+ salesChannelCodes?: string[] | undefined;
50
+ isSystemProtected?: boolean | undefined;
51
+ }[];
52
+ settings: {
53
+ code: string;
54
+ name: string;
55
+ valueType: "string" | "number" | "boolean" | "json" | "string_list" | "secret" | "credential_ref";
56
+ defaultValue: unknown;
57
+ description?: string | undefined;
58
+ groupCode?: string | undefined;
59
+ previousDefaultValues?: unknown[] | undefined;
60
+ salesChannelCodes?: string[] | undefined;
61
+ enumOptions?: string[] | undefined;
62
+ configurationType?: string | undefined;
63
+ hidden?: boolean | undefined;
64
+ }[];
65
+ } | undefined;
66
+ i18n?: {
67
+ bundlesDir: string;
68
+ } | undefined;
69
+ docs?: false | {
70
+ dir: string;
71
+ } | undefined;
72
+ demo?: false | {
73
+ summary: string;
74
+ seed: (context: import("@endora-commerce/contracts").ModuleDemoContext<never>) => Promise<import("@endora-commerce/contracts").DemoSeedResult>;
75
+ reset: (context: import("@endora-commerce/contracts").ModuleDemoContext<never>) => Promise<import("@endora-commerce/contracts").DemoResetResult>;
76
+ after?: readonly string[] | undefined;
77
+ package?: string | undefined;
78
+ } | undefined;
79
+ actions?: {
80
+ id: string;
81
+ labelKey: string;
82
+ icon: "Plus" | "Sparkles" | "Settings" | "Search" | "Boxes" | "Layers" | "Menu" | "PlusCircle" | "PlusSquare" | "FilePlus" | "FolderPlus" | "Upload" | "FileUp" | "CloudUpload" | "Download" | "FileDown" | "FileText" | "BookOpen" | "Rss" | "Package" | "Tag" | "ShoppingCart" | "Receipt" | "CreditCard" | "Users" | "UserPlus" | "Inbox" | "ListChecks" | "ClipboardList" | "Image" | "Video" | "LayoutDashboard" | "PanelLeft" | "KeyRound" | "ShieldCheck" | "Edit" | "Archive" | "Box" | "Truck" | "CircleDollarSign" | "Activity" | "LineChart" | "Smartphone" | "Webhook" | "Scale" | "PlugZap" | "PercentDiamond" | "Newspaper" | "Languages" | "Eraser" | "Warehouse" | "TrendingDown" | "Bell" | "PackageOpen" | "Building2" | "Store" | "ClipboardCheck";
83
+ targetRoute: string;
84
+ keywords: string[];
85
+ weight: number;
86
+ descriptionKey?: string | undefined;
87
+ requiredPermission?: string | undefined;
88
+ }[] | undefined;
89
+ permissions?: {
90
+ code: string;
91
+ label: string;
92
+ module?: string | undefined;
93
+ description?: string | undefined;
94
+ requires?: string[] | undefined;
95
+ }[] | undefined;
96
+ transactionalEmails?: {
97
+ code: string;
98
+ name: string;
99
+ variables: {
100
+ key: string;
101
+ label: string;
102
+ sampleValue?: string | undefined;
103
+ description?: string | undefined;
104
+ }[];
105
+ description?: string | undefined;
106
+ group?: string | undefined;
107
+ }[] | undefined;
108
+ capabilities?: string[] | undefined;
109
+ exclusiveCapabilities?: {
110
+ key: string;
111
+ errorCode: string;
112
+ }[] | undefined;
113
+ errorCodes?: {
114
+ code: string;
115
+ tokens?: string[] | undefined;
116
+ }[] | undefined;
117
+ blocks?: {
118
+ name: string;
119
+ labelKey: string;
120
+ category: string;
121
+ contexts: ("invoice" | "email" | "cms" | "newsletter")[];
122
+ fields: Record<string, {
123
+ type: "number" | "object" | "array" | "text" | "textarea" | "select" | "radio" | "external" | "uuid" | "richtext";
124
+ label?: string | undefined;
125
+ required?: boolean | undefined;
126
+ options?: {
127
+ label: string;
128
+ value: string | number;
129
+ }[] | undefined;
130
+ refKind?: string | undefined;
131
+ }>;
132
+ descriptionKey?: string | undefined;
133
+ defaultProps?: Record<string, unknown> | undefined;
134
+ responsiveFields?: string[] | undefined;
135
+ previewIcon?: string | undefined;
136
+ weight?: number | undefined;
137
+ }[] | undefined;
138
+ blockCategories?: {
139
+ key: string;
140
+ titleKey: string;
141
+ contexts: ("invoice" | "email" | "cms" | "newsletter")[];
142
+ weight?: number | undefined;
143
+ visible?: boolean | undefined;
144
+ }[] | undefined;
145
+ env?: {
146
+ name: string;
147
+ describes: {
148
+ en: string;
149
+ pl: string;
150
+ };
151
+ requirement: {
152
+ kind: "required";
153
+ } | {
154
+ kind: "requiredWhen";
155
+ input: string;
156
+ equals: string;
157
+ } | {
158
+ kind: "optional";
159
+ without: {
160
+ en: string;
161
+ pl: string;
162
+ };
163
+ };
164
+ secret: boolean;
165
+ generable: boolean;
166
+ owner: {
167
+ kind: "platform";
168
+ } | {
169
+ kind: "application";
170
+ application: "admin" | "backend" | "storefront";
171
+ } | {
172
+ kind: "module";
173
+ moduleId: string;
174
+ };
175
+ consumers: ("admin" | "backend" | "storefront")[];
176
+ addressOf: "admin" | "backend" | "storefront" | null;
177
+ }[] | undefined;
178
+ };
179
+ /** Legacy export retained for backward compatibility. */
180
+ export declare const priceListsManifest: {
181
+ moduleCode: string;
182
+ groups: {
183
+ code: string;
184
+ name: string;
185
+ salesChannelCodes?: string[] | undefined;
186
+ isSystemProtected?: boolean | undefined;
187
+ }[];
188
+ settings: {
189
+ code: string;
190
+ name: string;
191
+ valueType: "string" | "number" | "boolean" | "json" | "string_list" | "secret" | "credential_ref";
192
+ defaultValue: unknown;
193
+ description?: string | undefined;
194
+ groupCode?: string | undefined;
195
+ previousDefaultValues?: unknown[] | undefined;
196
+ salesChannelCodes?: string[] | undefined;
197
+ enumOptions?: string[] | undefined;
198
+ configurationType?: string | undefined;
199
+ hidden?: boolean | undefined;
200
+ }[];
201
+ };
202
+ /**
203
+ * What this module offers the admin home dashboard's Recent Activity card —
204
+ * feature 080, T042j / D-163.1.
205
+ *
206
+ * The **declaration** axis: eligibility, never a decision. Whether these rows
207
+ * appear is the operator's, held in `price_lists.recent_activity_visible` and
208
+ * defaulting to visible, flipped beside this module's activation control on the
209
+ * platform modules screen.
210
+ */
211
+ export declare const recentActivity: {
212
+ entries: {
213
+ action: string;
214
+ icon: "Plus" | "Sparkles" | "Settings" | "Search" | "Boxes" | "Layers" | "Menu" | "PlusCircle" | "PlusSquare" | "FilePlus" | "FolderPlus" | "Upload" | "FileUp" | "CloudUpload" | "Download" | "FileDown" | "FileText" | "BookOpen" | "Rss" | "Package" | "Tag" | "ShoppingCart" | "Receipt" | "CreditCard" | "Users" | "UserPlus" | "Inbox" | "ListChecks" | "ClipboardList" | "Image" | "Video" | "LayoutDashboard" | "PanelLeft" | "KeyRound" | "ShieldCheck" | "Edit" | "Archive" | "Box" | "Truck" | "CircleDollarSign" | "Activity" | "LineChart" | "Smartphone" | "Webhook" | "Scale" | "PlugZap" | "PercentDiamond" | "Newspaper" | "Languages" | "Eraser" | "Warehouse" | "TrendingDown" | "Bell" | "PackageOpen" | "Building2" | "Store" | "ClipboardCheck";
215
+ labelKey: string;
216
+ }[];
217
+ };
218
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAmCX,+CAA+C;AAC/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwInB,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;CAAW,CAAC;AAE3C;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;CA+BzB,CAAC"}