@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,151 @@
1
+ import type { DisplayMode, ListingPrice, ListingPriceOrderChunk, ListingPriceOrderQuery, ListingPriceViewerContext } from '@endora-commerce/contracts';
2
+ import type { PriceBracketRow } from './price-bracket-resolver.js';
3
+ /**
4
+ * The product a price is resolved for, as this engine reads it (feature 075
5
+ * Phase C).
6
+ *
7
+ * It used to be `catalog`'s `Product` **entity**, and that was two problems in
8
+ * one specifier: this module could not compile without `catalog`, and the
9
+ * contract an overlay decoration is written against named a class the overlay
10
+ * had no business seeing. The engine reads exactly two fields — the id it keys
11
+ * every bracket lookup on, and the legacy price attribute the listing chain
12
+ * falls back to — so those two are what it asks for.
13
+ *
14
+ * Narrowing is what makes this a cut rather than a rename: a `Product` entity
15
+ * and a `CatalogProductRecord` are both assignable here, and nothing wider is
16
+ * reachable from inside the engine.
17
+ */
18
+ export interface PricedProductRef {
19
+ id: string;
20
+ /** JSONB `{ attributeKey: value }` — the legacy `defaultPrice` / `price`. */
21
+ attributeValues: Record<string, unknown>;
22
+ }
23
+ /**
24
+ * The buying organisation, as this engine reads it. Two fields: the id (a rule
25
+ * dimension and part of the cache key) and the group it belongs to, which a
26
+ * customer's own group overrides when set.
27
+ */
28
+ export interface PricingOrganizationRef {
29
+ id: string;
30
+ /**
31
+ * Optional, and it has to be: `organizations` declares the column
32
+ * `customerGroupId?: string | null` and the published `OrganizationRecord`
33
+ * declares it `string | null`, so the narrow shape has to admit both. Every
34
+ * read of it here is `?? null`.
35
+ */
36
+ customerGroupId?: string | null;
37
+ }
38
+ /** The resolution context shared by both pricing entry points. */
39
+ export interface PricingResolutionInput {
40
+ product: PricedProductRef;
41
+ variantId?: string | null;
42
+ context: {
43
+ quantity: number;
44
+ organization?: PricingOrganizationRef | null;
45
+ /** Feature 040 — customer's direct group overrides the org's (R6). */
46
+ customerGroupId?: string | null;
47
+ /** The request's resolved sales channel (only `id` + `defaultCurrency` read). */
48
+ salesChannel: {
49
+ id: string;
50
+ defaultCurrency: string;
51
+ };
52
+ currencyCode?: string;
53
+ };
54
+ }
55
+ export interface PricingEngineResult {
56
+ base: {
57
+ listId: string;
58
+ listName: string;
59
+ bracket: PriceBracketRow | null;
60
+ };
61
+ sale: {
62
+ listId: string;
63
+ listName: string;
64
+ bracket: PriceBracketRow;
65
+ } | null;
66
+ displayMode: DisplayMode;
67
+ currencyCode: string;
68
+ }
69
+ export interface PricingLineResult {
70
+ amount: string;
71
+ currency: string;
72
+ priceListId: string;
73
+ isSale: boolean;
74
+ bracketStartQuantity: number;
75
+ displayMode: DisplayMode;
76
+ }
77
+ /**
78
+ * The context a catalogue listing prices in. Quantity is fixed at 1 — a listing
79
+ * card, a search hit, a comparison column and a related-product tile all quote
80
+ * the unit price — so it is not part of the input.
81
+ */
82
+ export interface ListingPricesInput {
83
+ products: readonly PricedProductRef[];
84
+ context: {
85
+ organization?: PricingOrganizationRef | null;
86
+ /** Feature 040 — customer's direct group overrides the org's (R6). */
87
+ customerGroupId?: string | null;
88
+ salesChannel: {
89
+ id: string;
90
+ defaultCurrency: string;
91
+ };
92
+ currencyCode?: string;
93
+ };
94
+ }
95
+ export interface PricingServiceContract {
96
+ resolveEngine(input: PricingResolutionInput): Promise<PricingEngineResult>;
97
+ resolveLinePrice(input: PricingResolutionInput): Promise<PricingLineResult | null>;
98
+ /**
99
+ * Issue #132 — the price a catalogue listing may render, per product, keyed
100
+ * by product id. Every requested product gets an entry; a product nothing
101
+ * priced gets the `none` arm rather than being missing from the map, so a
102
+ * caller cannot mistake "not asked about" for "no price".
103
+ *
104
+ * This is the whole chain (applicable list → the product's own price →
105
+ * nothing) behind one call, so a listing path cannot implement a step of it
106
+ * differently. Four of them did, which is what the issue reports.
107
+ */
108
+ resolveListingPrices(input: ListingPricesInput): Promise<Map<string, ListingPrice>>;
109
+ /**
110
+ * The lowest-quantity bracket amount on one **named** price list, per
111
+ * product, for callers that use a list verbatim rather than resolving it
112
+ * (a product feed pinned to a list — feature 067, FR-020). Products with no
113
+ * bracket on that list are absent from the map.
114
+ *
115
+ * It exists so that reading a named list is a port call rather than a raw
116
+ * `select` against `price_list_price_brackets` from another module: the
117
+ * table is this module's, and the port is what makes an absent owner refuse
118
+ * instead of a feed publishing prices the platform is not serving.
119
+ */
120
+ namedListPrices(input: {
121
+ priceListId: string;
122
+ currencyCode: string;
123
+ productIds: readonly string[];
124
+ }): Promise<Map<string, string>>;
125
+ /**
126
+ * Feature 062 — distinct bracket start quantities (ascending) across every
127
+ * ACTIVE price list for a (product, currency). The external catalog detail
128
+ * probes `resolveLinePrice` at each returned quantity to build the caller
129
+ * org's effective tier ladder without re-implementing resolution.
130
+ */
131
+ listBracketMinQuantities(productId: string, currencyCode: string): Promise<number[]>;
132
+ /**
133
+ * Feature 086 — the catalogue in resolved-unit-price order, for one viewer,
134
+ * one chunk at a time. Published as the `ListingPriceOrderPort` slice of the
135
+ * `pricingService` container, so an overlay decoration has to satisfy it in
136
+ * order to stay assignable here.
137
+ *
138
+ * The three methods below are the whole of the listing-ordering surface. They
139
+ * read this module's own tables and know nothing about visibility, channels
140
+ * or the buyer's category filter; the caller intersects.
141
+ */
142
+ orderByUnitPrice(input: ListingPriceOrderQuery): Promise<ListingPriceOrderChunk>;
143
+ pricedProductIds(input: {
144
+ context: ListingPriceViewerContext;
145
+ productIds: readonly string[];
146
+ }): Promise<ReadonlySet<string>>;
147
+ pageDisplayMode(input: {
148
+ context: ListingPriceViewerContext;
149
+ }): Promise<DisplayMode>;
150
+ }
151
+ //# sourceMappingURL=pricing-service.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-service.interface.d.ts","sourceRoot":"","sources":["../../../src/backend/services/pricing-service.interface.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;QAC7C,sEAAsE;QACtE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,iFAAiF;QACjF,YAAY,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,CAAC;QACtD,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5E,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5E,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,OAAO,EAAE;QACP,YAAY,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;QAC7C,sEAAsE;QACtE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,YAAY,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,CAAC;QACtD,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3E,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACnF;;;;;;;;;OASG;IACH,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACpF;;;;;;;;;;OAUG;IACH,eAAe,CAAC,KAAK,EAAE;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;KAC/B,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjC;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF;;;;;;;;;OASG;IACH,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjF,gBAAgB,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,yBAAyB,CAAC;QACnC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;KAC/B,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,eAAe,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,yBAAyB,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtF"}
@@ -0,0 +1,10 @@
1
+ // Formalized contract for the price-list pricing engine (feature 057, R4).
2
+ //
3
+ // This is the documented interface an overlay MUST satisfy to override the core
4
+ // `PricingService` for a deployment. It captures exactly the surface consumers
5
+ // depend on — `resolveEngine` and `resolveLinePrice` — so an overlay can replace
6
+ // the implementation and every consumer keeps type-checking. The core class
7
+ // `implements` this interface, so if the interface changes, a stale overlay
8
+ // stops being assignable and the build fails (contract drift = build error).
9
+ export {};
10
+ //# sourceMappingURL=pricing-service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-service.interface.js","sourceRoot":"","sources":["../../../src/backend/services/pricing-service.interface.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AACjF,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E"}