@higher.archi/boe 1.0.29 → 1.0.31

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 (241) hide show
  1. package/dist/core/evaluation/decay.d.ts +13 -2
  2. package/dist/core/evaluation/decay.d.ts.map +1 -1
  3. package/dist/core/evaluation/decay.js +24 -0
  4. package/dist/core/evaluation/decay.js.map +1 -1
  5. package/dist/core/types/rule.d.ts +25 -1
  6. package/dist/core/types/rule.d.ts.map +1 -1
  7. package/dist/core/types/rule.js +28 -0
  8. package/dist/core/types/rule.js.map +1 -1
  9. package/dist/engines/bayesian/index.d.ts +1 -1
  10. package/dist/engines/bayesian/index.d.ts.map +1 -1
  11. package/dist/engines/bayesian/index.js +2 -1
  12. package/dist/engines/bayesian/index.js.map +1 -1
  13. package/dist/engines/bayesian/types.d.ts +10 -1
  14. package/dist/engines/bayesian/types.d.ts.map +1 -1
  15. package/dist/engines/bayesian/types.js +16 -1
  16. package/dist/engines/bayesian/types.js.map +1 -1
  17. package/dist/engines/constraint/types.d.ts +36 -5
  18. package/dist/engines/constraint/types.d.ts.map +1 -1
  19. package/dist/engines/constraint/types.js +44 -1
  20. package/dist/engines/constraint/types.js.map +1 -1
  21. package/dist/engines/decay/index.d.ts +1 -1
  22. package/dist/engines/decay/index.d.ts.map +1 -1
  23. package/dist/engines/decay/index.js +5 -1
  24. package/dist/engines/decay/index.js.map +1 -1
  25. package/dist/engines/decay/types.d.ts +26 -4
  26. package/dist/engines/decay/types.d.ts.map +1 -1
  27. package/dist/engines/decay/types.js +30 -1
  28. package/dist/engines/decay/types.js.map +1 -1
  29. package/dist/engines/defeasible/index.d.ts +1 -1
  30. package/dist/engines/defeasible/index.d.ts.map +1 -1
  31. package/dist/engines/defeasible/index.js +8 -1
  32. package/dist/engines/defeasible/index.js.map +1 -1
  33. package/dist/engines/defeasible/types.d.ts +40 -5
  34. package/dist/engines/defeasible/types.d.ts.map +1 -1
  35. package/dist/engines/defeasible/types.js +56 -1
  36. package/dist/engines/defeasible/types.js.map +1 -1
  37. package/dist/engines/ensemble/index.d.ts +1 -0
  38. package/dist/engines/ensemble/index.d.ts.map +1 -1
  39. package/dist/engines/ensemble/index.js +5 -1
  40. package/dist/engines/ensemble/index.js.map +1 -1
  41. package/dist/engines/ensemble/types.d.ts +17 -2
  42. package/dist/engines/ensemble/types.d.ts.map +1 -1
  43. package/dist/engines/ensemble/types.js +23 -0
  44. package/dist/engines/ensemble/types.js.map +1 -1
  45. package/dist/engines/expert/index.d.ts +1 -1
  46. package/dist/engines/expert/index.d.ts.map +1 -1
  47. package/dist/engines/expert/index.js +3 -1
  48. package/dist/engines/expert/index.js.map +1 -1
  49. package/dist/engines/expert/types.d.ts +11 -1
  50. package/dist/engines/expert/types.d.ts.map +1 -1
  51. package/dist/engines/expert/types.js +18 -1
  52. package/dist/engines/expert/types.js.map +1 -1
  53. package/dist/engines/fuzzy/fuzzy.types.d.ts +65 -8
  54. package/dist/engines/fuzzy/fuzzy.types.d.ts.map +1 -1
  55. package/dist/engines/fuzzy/fuzzy.types.js +89 -1
  56. package/dist/engines/fuzzy/fuzzy.types.js.map +1 -1
  57. package/dist/engines/loyalty/compiler.d.ts +11 -0
  58. package/dist/engines/loyalty/compiler.d.ts.map +1 -0
  59. package/dist/engines/loyalty/compiler.js +144 -0
  60. package/dist/engines/loyalty/compiler.js.map +1 -0
  61. package/dist/engines/loyalty/engine.d.ts +76 -0
  62. package/dist/engines/loyalty/engine.d.ts.map +1 -0
  63. package/dist/engines/loyalty/engine.js +132 -0
  64. package/dist/engines/loyalty/engine.js.map +1 -0
  65. package/dist/engines/loyalty/index.d.ts +9 -0
  66. package/dist/engines/loyalty/index.d.ts.map +1 -0
  67. package/dist/engines/loyalty/index.js +24 -0
  68. package/dist/engines/loyalty/index.js.map +1 -0
  69. package/dist/engines/loyalty/strategy.d.ts +35 -0
  70. package/dist/engines/loyalty/strategy.d.ts.map +1 -0
  71. package/dist/engines/loyalty/strategy.js +405 -0
  72. package/dist/engines/loyalty/strategy.js.map +1 -0
  73. package/dist/engines/loyalty/types.d.ts +221 -0
  74. package/dist/engines/loyalty/types.d.ts.map +1 -0
  75. package/dist/engines/loyalty/types.js +51 -0
  76. package/dist/engines/loyalty/types.js.map +1 -0
  77. package/dist/engines/menu-engineering/compiler.d.ts +11 -0
  78. package/dist/engines/menu-engineering/compiler.d.ts.map +1 -0
  79. package/dist/engines/menu-engineering/compiler.js +119 -0
  80. package/dist/engines/menu-engineering/compiler.js.map +1 -0
  81. package/dist/engines/menu-engineering/engine.d.ts +32 -0
  82. package/dist/engines/menu-engineering/engine.d.ts.map +1 -0
  83. package/dist/engines/menu-engineering/engine.js +40 -0
  84. package/dist/engines/menu-engineering/engine.js.map +1 -0
  85. package/dist/engines/menu-engineering/index.d.ts +9 -0
  86. package/dist/engines/menu-engineering/index.d.ts.map +1 -0
  87. package/dist/engines/menu-engineering/index.js +21 -0
  88. package/dist/engines/menu-engineering/index.js.map +1 -0
  89. package/dist/engines/menu-engineering/strategy.d.ts +18 -0
  90. package/dist/engines/menu-engineering/strategy.d.ts.map +1 -0
  91. package/dist/engines/menu-engineering/strategy.js +318 -0
  92. package/dist/engines/menu-engineering/strategy.js.map +1 -0
  93. package/dist/engines/menu-engineering/types.d.ts +187 -0
  94. package/dist/engines/menu-engineering/types.d.ts.map +1 -0
  95. package/dist/engines/menu-engineering/types.js +27 -0
  96. package/dist/engines/menu-engineering/types.js.map +1 -0
  97. package/dist/engines/monte-carlo/index.d.ts +1 -1
  98. package/dist/engines/monte-carlo/index.d.ts.map +1 -1
  99. package/dist/engines/monte-carlo/index.js +5 -1
  100. package/dist/engines/monte-carlo/index.js.map +1 -1
  101. package/dist/engines/monte-carlo/types.d.ts +16 -1
  102. package/dist/engines/monte-carlo/types.d.ts.map +1 -1
  103. package/dist/engines/monte-carlo/types.js +23 -1
  104. package/dist/engines/monte-carlo/types.js.map +1 -1
  105. package/dist/engines/negotiation/index.d.ts +1 -0
  106. package/dist/engines/negotiation/index.d.ts.map +1 -1
  107. package/dist/engines/negotiation/index.js +7 -1
  108. package/dist/engines/negotiation/index.js.map +1 -1
  109. package/dist/engines/negotiation/types.d.ts +23 -4
  110. package/dist/engines/negotiation/types.d.ts.map +1 -1
  111. package/dist/engines/negotiation/types.js +27 -0
  112. package/dist/engines/negotiation/types.js.map +1 -1
  113. package/dist/engines/prediction/index.d.ts +1 -1
  114. package/dist/engines/prediction/index.d.ts.map +1 -1
  115. package/dist/engines/prediction/index.js +6 -1
  116. package/dist/engines/prediction/index.js.map +1 -1
  117. package/dist/engines/prediction/types.d.ts +35 -5
  118. package/dist/engines/prediction/types.d.ts.map +1 -1
  119. package/dist/engines/prediction/types.js +39 -1
  120. package/dist/engines/prediction/types.js.map +1 -1
  121. package/dist/engines/pricing/index.d.ts +2 -2
  122. package/dist/engines/pricing/index.d.ts.map +1 -1
  123. package/dist/engines/pricing/index.js +3 -1
  124. package/dist/engines/pricing/index.js.map +1 -1
  125. package/dist/engines/pricing/types.d.ts +15 -1
  126. package/dist/engines/pricing/types.d.ts.map +1 -1
  127. package/dist/engines/pricing/types.js +16 -1
  128. package/dist/engines/pricing/types.js.map +1 -1
  129. package/dist/engines/ranking/index.d.ts +1 -1
  130. package/dist/engines/ranking/index.d.ts.map +1 -1
  131. package/dist/engines/ranking/index.js +6 -1
  132. package/dist/engines/ranking/index.js.map +1 -1
  133. package/dist/engines/ranking/types.d.ts +32 -5
  134. package/dist/engines/ranking/types.d.ts.map +1 -1
  135. package/dist/engines/ranking/types.js +36 -1
  136. package/dist/engines/ranking/types.js.map +1 -1
  137. package/dist/engines/recipe-costing/compiler.d.ts +11 -0
  138. package/dist/engines/recipe-costing/compiler.d.ts.map +1 -0
  139. package/dist/engines/recipe-costing/compiler.js +177 -0
  140. package/dist/engines/recipe-costing/compiler.js.map +1 -0
  141. package/dist/engines/recipe-costing/engine.d.ts +32 -0
  142. package/dist/engines/recipe-costing/engine.d.ts.map +1 -0
  143. package/dist/engines/recipe-costing/engine.js +40 -0
  144. package/dist/engines/recipe-costing/engine.js.map +1 -0
  145. package/dist/engines/recipe-costing/index.d.ts +9 -0
  146. package/dist/engines/recipe-costing/index.d.ts.map +1 -0
  147. package/dist/engines/recipe-costing/index.js +21 -0
  148. package/dist/engines/recipe-costing/index.js.map +1 -0
  149. package/dist/engines/recipe-costing/strategy.d.ts +20 -0
  150. package/dist/engines/recipe-costing/strategy.d.ts.map +1 -0
  151. package/dist/engines/recipe-costing/strategy.js +265 -0
  152. package/dist/engines/recipe-costing/strategy.js.map +1 -0
  153. package/dist/engines/recipe-costing/types.d.ts +213 -0
  154. package/dist/engines/recipe-costing/types.d.ts.map +1 -0
  155. package/dist/engines/recipe-costing/types.js +36 -0
  156. package/dist/engines/recipe-costing/types.js.map +1 -0
  157. package/dist/engines/scoring/index.d.ts +1 -1
  158. package/dist/engines/scoring/index.d.ts.map +1 -1
  159. package/dist/engines/scoring/index.js +3 -1
  160. package/dist/engines/scoring/index.js.map +1 -1
  161. package/dist/engines/scoring/types.d.ts +8 -1
  162. package/dist/engines/scoring/types.d.ts.map +1 -1
  163. package/dist/engines/scoring/types.js +18 -1
  164. package/dist/engines/scoring/types.js.map +1 -1
  165. package/dist/engines/sentiment/index.d.ts +1 -1
  166. package/dist/engines/sentiment/index.d.ts.map +1 -1
  167. package/dist/engines/sentiment/index.js +3 -1
  168. package/dist/engines/sentiment/index.js.map +1 -1
  169. package/dist/engines/sentiment/types.d.ts +13 -2
  170. package/dist/engines/sentiment/types.d.ts.map +1 -1
  171. package/dist/engines/sentiment/types.js +17 -1
  172. package/dist/engines/sentiment/types.js.map +1 -1
  173. package/dist/engines/state-machine/index.d.ts +1 -1
  174. package/dist/engines/state-machine/index.d.ts.map +1 -1
  175. package/dist/engines/state-machine/index.js +5 -1
  176. package/dist/engines/state-machine/index.js.map +1 -1
  177. package/dist/engines/state-machine/types.d.ts +7 -0
  178. package/dist/engines/state-machine/types.d.ts.map +1 -1
  179. package/dist/engines/state-machine/types.js +14 -0
  180. package/dist/engines/state-machine/types.js.map +1 -1
  181. package/dist/engines/utility/index.d.ts +2 -2
  182. package/dist/engines/utility/index.d.ts.map +1 -1
  183. package/dist/engines/utility/index.js +4 -1
  184. package/dist/engines/utility/index.js.map +1 -1
  185. package/dist/engines/utility/types.d.ts +21 -3
  186. package/dist/engines/utility/types.d.ts.map +1 -1
  187. package/dist/engines/utility/types.js +37 -1
  188. package/dist/engines/utility/types.js.map +1 -1
  189. package/dist/index.d.ts +30 -21
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.js +80 -3
  192. package/dist/index.js.map +1 -1
  193. package/package.json +1 -1
  194. package/src/core/evaluation/decay.ts +13 -2
  195. package/src/core/types/rule.ts +25 -1
  196. package/src/engines/bayesian/index.ts +1 -0
  197. package/src/engines/bayesian/types.ts +10 -8
  198. package/src/engines/constraint/types.ts +40 -11
  199. package/src/engines/decay/index.ts +4 -0
  200. package/src/engines/decay/types.ts +26 -4
  201. package/src/engines/defeasible/index.ts +7 -0
  202. package/src/engines/defeasible/types.ts +42 -18
  203. package/src/engines/ensemble/index.ts +6 -0
  204. package/src/engines/ensemble/types.ts +17 -13
  205. package/src/engines/expert/index.ts +1 -0
  206. package/src/engines/expert/types.ts +11 -9
  207. package/src/engines/fuzzy/fuzzy.types.ts +65 -31
  208. package/src/engines/loyalty/compiler.ts +174 -0
  209. package/src/engines/loyalty/engine.ts +174 -0
  210. package/src/engines/loyalty/index.ts +52 -0
  211. package/src/engines/loyalty/strategy.ts +532 -0
  212. package/src/engines/loyalty/types.ts +283 -0
  213. package/src/engines/menu-engineering/compiler.ts +145 -0
  214. package/src/engines/menu-engineering/engine.ts +48 -0
  215. package/src/engines/menu-engineering/index.ts +47 -0
  216. package/src/engines/menu-engineering/strategy.ts +414 -0
  217. package/src/engines/menu-engineering/types.ts +242 -0
  218. package/src/engines/monte-carlo/index.ts +1 -0
  219. package/src/engines/monte-carlo/types.ts +16 -21
  220. package/src/engines/negotiation/index.ts +8 -0
  221. package/src/engines/negotiation/types.ts +23 -4
  222. package/src/engines/prediction/index.ts +5 -0
  223. package/src/engines/prediction/types.ts +35 -5
  224. package/src/engines/pricing/index.ts +3 -1
  225. package/src/engines/pricing/types.ts +17 -1
  226. package/src/engines/ranking/index.ts +5 -0
  227. package/src/engines/ranking/types.ts +32 -11
  228. package/src/engines/recipe-costing/compiler.ts +219 -0
  229. package/src/engines/recipe-costing/engine.ts +48 -0
  230. package/src/engines/recipe-costing/index.ts +48 -0
  231. package/src/engines/recipe-costing/strategy.ts +357 -0
  232. package/src/engines/recipe-costing/types.ts +269 -0
  233. package/src/engines/scoring/index.ts +2 -0
  234. package/src/engines/scoring/types.ts +8 -6
  235. package/src/engines/sentiment/index.ts +2 -0
  236. package/src/engines/sentiment/types.ts +13 -2
  237. package/src/engines/state-machine/index.ts +3 -0
  238. package/src/engines/state-machine/types.ts +8 -0
  239. package/src/engines/utility/index.ts +5 -0
  240. package/src/engines/utility/types.ts +23 -3
  241. package/src/index.ts +182 -7
@@ -3,9 +3,14 @@
3
3
  * Ranking Engine — Comparative Entity Ranking
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RankingEngine = exports.rankingStrategy = exports.RankingExecutor = exports.compileRankingRuleSet = exports.resolveMovement = exports.resolvePercentileLabel = exports.isKFactorPreset = exports.K_FACTOR_VALUES = void 0;
6
+ exports.RankingEngine = exports.rankingStrategy = exports.RankingExecutor = exports.compileRankingRuleSet = exports.resolveMovement = exports.resolvePercentileLabel = exports.isKFactorPreset = exports.K_FACTOR_VALUES = exports.KFactorPresets = exports.Movements = exports.PercentileLabels = exports.RankingDirections = exports.RankingStrategies = void 0;
7
7
  // Constants & utilities
8
8
  var types_1 = require("./types");
9
+ Object.defineProperty(exports, "RankingStrategies", { enumerable: true, get: function () { return types_1.RankingStrategies; } });
10
+ Object.defineProperty(exports, "RankingDirections", { enumerable: true, get: function () { return types_1.RankingDirections; } });
11
+ Object.defineProperty(exports, "PercentileLabels", { enumerable: true, get: function () { return types_1.PercentileLabels; } });
12
+ Object.defineProperty(exports, "Movements", { enumerable: true, get: function () { return types_1.Movements; } });
13
+ Object.defineProperty(exports, "KFactorPresets", { enumerable: true, get: function () { return types_1.KFactorPresets; } });
9
14
  Object.defineProperty(exports, "K_FACTOR_VALUES", { enumerable: true, get: function () { return types_1.K_FACTOR_VALUES; } });
10
15
  Object.defineProperty(exports, "isKFactorPreset", { enumerable: true, get: function () { return types_1.isKFactorPreset; } });
11
16
  Object.defineProperty(exports, "resolvePercentileLabel", { enumerable: true, get: function () { return types_1.resolvePercentileLabel; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/ranking/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4BH,wBAAwB;AACxB,iCAKiB;AAJf,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,wGAAA,eAAe,OAAA;AAGjB,WAAW;AACX,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAE9B,WAAW;AACX,uCAA8D;AAArD,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEzC,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/ranking/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4BH,wBAAwB;AACxB,iCAUiB;AATf,0GAAA,iBAAiB,OAAA;AACjB,0GAAA,iBAAiB,OAAA;AACjB,yGAAA,gBAAgB,OAAA;AAChB,kGAAA,SAAS,OAAA;AACT,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,wGAAA,eAAe,OAAA;AAGjB,WAAW;AACX,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAE9B,WAAW;AACX,uCAA8D;AAArD,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEzC,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
@@ -7,15 +7,42 @@
7
7
  import type { CompiledScoringRuleSet, ScoringOptions, ScoringTierMatch, TierDefinition } from '../scoring/types';
8
8
  import type { SemanticPriority } from '../utility/types';
9
9
  /** Ranking algorithm to use */
10
- export type RankingStrategy = 'score' | 'elo' | 'head-to-head';
10
+ export declare const RankingStrategies: {
11
+ readonly score: "score";
12
+ readonly elo: "elo";
13
+ readonly headToHead: "head-to-head";
14
+ };
15
+ export type RankingStrategy = typeof RankingStrategies[keyof typeof RankingStrategies];
11
16
  /** Sort direction for rankings */
12
- export type RankingDirection = 'highest-first' | 'lowest-first';
17
+ export declare const RankingDirections: {
18
+ readonly highestFirst: "highest-first";
19
+ readonly lowestFirst: "lowest-first";
20
+ };
21
+ export type RankingDirection = typeof RankingDirections[keyof typeof RankingDirections];
13
22
  /** Human-readable percentile bracket */
14
- export type PercentileLabel = 'top-1%' | 'top-5%' | 'top-10%' | 'top-25%' | 'top-50%' | 'bottom-half';
23
+ export declare const PercentileLabels: {
24
+ readonly top1: "top-1%";
25
+ readonly top5: "top-5%";
26
+ readonly top10: "top-10%";
27
+ readonly top25: "top-25%";
28
+ readonly top50: "top-50%";
29
+ readonly bottomHalf: "bottom-half";
30
+ };
31
+ export type PercentileLabel = typeof PercentileLabels[keyof typeof PercentileLabels];
15
32
  /** Rank movement since previous ranking */
16
- export type Movement = 'climbed' | 'steady' | 'dropped';
33
+ export declare const Movements: {
34
+ readonly climbed: "climbed";
35
+ readonly steady: "steady";
36
+ readonly dropped: "dropped";
37
+ };
38
+ export type Movement = typeof Movements[keyof typeof Movements];
17
39
  /** Elo K-factor presets controlling rating volatility */
18
- export type KFactorPreset = 'volatile' | 'standard' | 'stable';
40
+ export declare const KFactorPresets: {
41
+ readonly volatile: "volatile";
42
+ readonly standard: "standard";
43
+ readonly stable: "stable";
44
+ };
45
+ export type KFactorPreset = typeof KFactorPresets[keyof typeof KFactorPresets];
19
46
  export declare const K_FACTOR_VALUES: Record<KFactorPreset, number>;
20
47
  export declare function isKFactorPreset(value: unknown): value is KFactorPreset;
21
48
  /** Map a percentile (0-100) to a semantic label */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/ranking/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/ranking/types.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,45 @@
6
6
  * Supports score-based ranking, Elo ratings, and head-to-head pairwise comparison.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.K_FACTOR_VALUES = void 0;
9
+ exports.K_FACTOR_VALUES = exports.KFactorPresets = exports.Movements = exports.PercentileLabels = exports.RankingDirections = exports.RankingStrategies = void 0;
10
10
  exports.isKFactorPreset = isKFactorPreset;
11
11
  exports.resolvePercentileLabel = resolvePercentileLabel;
12
12
  exports.resolveMovement = resolveMovement;
13
+ // ========================================
14
+ // Semantic Types
15
+ // ========================================
16
+ /** Ranking algorithm to use */
17
+ exports.RankingStrategies = {
18
+ score: 'score',
19
+ elo: 'elo',
20
+ headToHead: 'head-to-head',
21
+ };
22
+ /** Sort direction for rankings */
23
+ exports.RankingDirections = {
24
+ highestFirst: 'highest-first',
25
+ lowestFirst: 'lowest-first',
26
+ };
27
+ /** Human-readable percentile bracket */
28
+ exports.PercentileLabels = {
29
+ top1: 'top-1%',
30
+ top5: 'top-5%',
31
+ top10: 'top-10%',
32
+ top25: 'top-25%',
33
+ top50: 'top-50%',
34
+ bottomHalf: 'bottom-half',
35
+ };
36
+ /** Rank movement since previous ranking */
37
+ exports.Movements = {
38
+ climbed: 'climbed',
39
+ steady: 'steady',
40
+ dropped: 'dropped',
41
+ };
42
+ /** Elo K-factor presets controlling rating volatility */
43
+ exports.KFactorPresets = {
44
+ volatile: 'volatile',
45
+ standard: 'standard',
46
+ stable: 'stable',
47
+ };
13
48
  exports.K_FACTOR_VALUES = {
14
49
  'volatile': 32, // New entities, fast adjustment
15
50
  'standard': 16, // Default
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/ranking/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAyCH,0CAEC;AAOD,wDAOC;AAGD,0CAIC;AA7BY,QAAA,eAAe,GAAkC;IAC5D,UAAU,EAAE,EAAE,EAAK,gCAAgC;IACnD,UAAU,EAAE,EAAE,EAAK,UAAU;IAC7B,QAAQ,EAAE,CAAC,CAAQ,mCAAmC;CACvD,CAAC;AAEF,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,uBAAe,CAAC;AAC/D,CAAC;AAED,2CAA2C;AAC3C,qBAAqB;AACrB,2CAA2C;AAE3C,mDAAmD;AACnD,SAAgB,sBAAsB,CAAC,UAAkB;IACvD,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,mDAAmD;AACnD,SAAgB,eAAe,CAAC,YAAoB,EAAE,WAAmB;IACvE,IAAI,WAAW,GAAG,YAAY;QAAE,OAAO,SAAS,CAAC,CAAG,6BAA6B;IACjF,IAAI,WAAW,GAAG,YAAY;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/ranking/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA8DH,0CAEC;AAOD,wDAOC;AAGD,0CAIC;AA3ED,2CAA2C;AAC3C,iBAAiB;AACjB,2CAA2C;AAE3C,+BAA+B;AAClB,QAAA,iBAAiB,GAAG;IAC/B,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,UAAU,EAAE,cAAc;CAClB,CAAC;AAGX,kCAAkC;AACrB,QAAA,iBAAiB,GAAG;IAC/B,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,cAAc;CACnB,CAAC;AAGX,wCAAwC;AAC3B,QAAA,gBAAgB,GAAG;IAC9B,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,aAAa;CACjB,CAAC;AAGX,2CAA2C;AAC9B,QAAA,SAAS,GAAG;IACvB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC;AAGX,yDAAyD;AAC5C,QAAA,cAAc,GAAG;IAC5B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACR,CAAC;AAGE,QAAA,eAAe,GAAkC;IAC5D,UAAU,EAAE,EAAE,EAAK,gCAAgC;IACnD,UAAU,EAAE,EAAE,EAAK,UAAU;IAC7B,QAAQ,EAAE,CAAC,CAAQ,mCAAmC;CACvD,CAAC;AAEF,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,uBAAe,CAAC;AAC/D,CAAC;AAED,2CAA2C;AAC3C,qBAAqB;AACrB,2CAA2C;AAE3C,mDAAmD;AACnD,SAAgB,sBAAsB,CAAC,UAAkB;IACvD,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,mDAAmD;AACnD,SAAgB,eAAe,CAAC,YAAoB,EAAE,WAAmB;IACvE,IAAI,WAAW,GAAG,YAAY;QAAE,OAAO,SAAS,CAAC,CAAG,6BAA6B;IACjF,IAAI,WAAW,GAAG,YAAY;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Recipe Costing Engine Compiler
3
+ *
4
+ * Validates recipe costing rulesets and resolves defaults.
5
+ */
6
+ import type { RecipeCostingRuleSet, CompiledRecipeCostingRuleSet } from './types';
7
+ /**
8
+ * Compile and validate a recipe costing ruleset.
9
+ */
10
+ export declare function compileRecipeCostingRuleSet(ruleSet: RecipeCostingRuleSet): CompiledRecipeCostingRuleSet;
11
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/engines/recipe-costing/compiler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,oBAAoB,EACpB,4BAA4B,EAI7B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,oBAAoB,GAC5B,4BAA4B,CA4F9B"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /**
3
+ * Recipe Costing Engine Compiler
4
+ *
5
+ * Validates recipe costing rulesets and resolves defaults.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.compileRecipeCostingRuleSet = compileRecipeCostingRuleSet;
9
+ const errors_1 = require("../../core/errors");
10
+ /**
11
+ * Compile and validate a recipe costing ruleset.
12
+ */
13
+ function compileRecipeCostingRuleSet(ruleSet) {
14
+ if (!ruleSet.id) {
15
+ throw new errors_1.CompilationError('Recipe costing ruleset requires an id');
16
+ }
17
+ if (ruleSet.mode !== 'recipe-costing') {
18
+ throw new errors_1.CompilationError(`Expected mode 'recipe-costing', got '${ruleSet.mode}'`);
19
+ }
20
+ if (!ruleSet.ingredients || ruleSet.ingredients.length === 0) {
21
+ throw new errors_1.CompilationError('Recipe costing ruleset requires at least one ingredient');
22
+ }
23
+ if (!ruleSet.recipes || ruleSet.recipes.length === 0) {
24
+ throw new errors_1.CompilationError('Recipe costing ruleset requires at least one recipe');
25
+ }
26
+ // Validate unique ingredient IDs
27
+ const ingredientIds = new Set();
28
+ for (const ing of ruleSet.ingredients) {
29
+ if (!ing.id) {
30
+ throw new errors_1.CompilationError('Each ingredient requires an id');
31
+ }
32
+ if (ingredientIds.has(ing.id)) {
33
+ throw new errors_1.CompilationError(`Duplicate ingredient id: '${ing.id}'`);
34
+ }
35
+ if (ing.purchaseQuantity <= 0) {
36
+ throw new errors_1.CompilationError(`Ingredient '${ing.id}' purchaseQuantity must be positive`);
37
+ }
38
+ if (ing.purchaseCost <= 0) {
39
+ throw new errors_1.CompilationError(`Ingredient '${ing.id}' purchaseCost must be positive`);
40
+ }
41
+ if (ing.yieldFactor !== undefined && (ing.yieldFactor <= 0 || ing.yieldFactor > 1)) {
42
+ throw new errors_1.CompilationError(`Ingredient '${ing.id}' yieldFactor must be in (0, 1]`);
43
+ }
44
+ if (ing.wastePct !== undefined && (ing.wastePct < 0 || ing.wastePct >= 100)) {
45
+ throw new errors_1.CompilationError(`Ingredient '${ing.id}' wastePct must be in [0, 100)`);
46
+ }
47
+ ingredientIds.add(ing.id);
48
+ }
49
+ // Validate unique recipe IDs
50
+ const recipeIds = new Set();
51
+ for (const recipe of ruleSet.recipes) {
52
+ if (!recipe.id) {
53
+ throw new errors_1.CompilationError('Each recipe requires an id');
54
+ }
55
+ if (recipeIds.has(recipe.id)) {
56
+ throw new errors_1.CompilationError(`Duplicate recipe id: '${recipe.id}'`);
57
+ }
58
+ recipeIds.add(recipe.id);
59
+ }
60
+ // Validate recipe components reference valid ingredients or recipes
61
+ for (const recipe of ruleSet.recipes) {
62
+ for (const comp of recipe.components) {
63
+ if (comp.ingredientId && comp.subRecipeId) {
64
+ throw new errors_1.CompilationError(`Recipe '${recipe.id}' component references both ingredientId and subRecipeId. Must be one or the other.`);
65
+ }
66
+ if (!comp.ingredientId && !comp.subRecipeId) {
67
+ throw new errors_1.CompilationError(`Recipe '${recipe.id}' component must reference an ingredientId or subRecipeId`);
68
+ }
69
+ if (comp.ingredientId && !ingredientIds.has(comp.ingredientId)) {
70
+ throw new errors_1.CompilationError(`Recipe '${recipe.id}' references unknown ingredient: '${comp.ingredientId}'`);
71
+ }
72
+ if (comp.subRecipeId && !recipeIds.has(comp.subRecipeId)) {
73
+ throw new errors_1.CompilationError(`Recipe '${recipe.id}' references unknown sub-recipe: '${comp.subRecipeId}'`);
74
+ }
75
+ }
76
+ }
77
+ // Detect circular sub-recipe references
78
+ detectCircularRecipes(ruleSet.recipes);
79
+ switch (ruleSet.strategy) {
80
+ case 'plate-cost':
81
+ return compilePlateCost(ruleSet);
82
+ case 'margin-analysis':
83
+ return compileMarginAnalysis(ruleSet);
84
+ case 'cost-impact':
85
+ return compileCostImpact(ruleSet);
86
+ default:
87
+ throw new errors_1.CompilationError(`Unknown recipe costing strategy: '${ruleSet.strategy}'`);
88
+ }
89
+ }
90
+ function compilePlateCost(ruleSet) {
91
+ return {
92
+ id: ruleSet.id,
93
+ name: ruleSet.name,
94
+ mode: 'recipe-costing',
95
+ strategy: 'plate-cost',
96
+ ingredients: ruleSet.ingredients,
97
+ recipes: ruleSet.recipes,
98
+ config: {
99
+ targetFoodCostPct: ruleSet.config?.targetFoodCostPct ?? 30
100
+ }
101
+ };
102
+ }
103
+ function compileMarginAnalysis(ruleSet) {
104
+ return {
105
+ id: ruleSet.id,
106
+ name: ruleSet.name,
107
+ mode: 'recipe-costing',
108
+ strategy: 'margin-analysis',
109
+ ingredients: ruleSet.ingredients,
110
+ recipes: ruleSet.recipes,
111
+ config: {
112
+ targetFoodCostPct: ruleSet.config?.targetFoodCostPct ?? 30,
113
+ flagThreshold: ruleSet.config?.flagThreshold ?? 35
114
+ }
115
+ };
116
+ }
117
+ function compileCostImpact(ruleSet) {
118
+ if (!ruleSet.config || !ruleSet.config.changes || ruleSet.config.changes.length === 0) {
119
+ throw new errors_1.CompilationError('Cost-impact strategy requires at least one cost change');
120
+ }
121
+ const ingredientIds = new Set(ruleSet.ingredients.map(i => i.id));
122
+ for (const change of ruleSet.config.changes) {
123
+ if (!ingredientIds.has(change.ingredientId)) {
124
+ throw new errors_1.CompilationError(`Cost change references unknown ingredient: '${change.ingredientId}'`);
125
+ }
126
+ if (change.newCost !== undefined && change.percentChange !== undefined) {
127
+ throw new errors_1.CompilationError(`Cost change for '${change.ingredientId}' must have newCost or percentChange, not both`);
128
+ }
129
+ if (change.newCost === undefined && change.percentChange === undefined) {
130
+ throw new errors_1.CompilationError(`Cost change for '${change.ingredientId}' must have newCost or percentChange`);
131
+ }
132
+ }
133
+ return {
134
+ id: ruleSet.id,
135
+ name: ruleSet.name,
136
+ mode: 'recipe-costing',
137
+ strategy: 'cost-impact',
138
+ ingredients: ruleSet.ingredients,
139
+ recipes: ruleSet.recipes,
140
+ config: {
141
+ changes: ruleSet.config.changes,
142
+ targetFoodCostPct: ruleSet.config.targetFoodCostPct ?? 30
143
+ }
144
+ };
145
+ }
146
+ function detectCircularRecipes(recipes) {
147
+ const adjacency = new Map();
148
+ for (const recipe of recipes) {
149
+ const deps = [];
150
+ for (const comp of recipe.components) {
151
+ if (comp.subRecipeId) {
152
+ deps.push(comp.subRecipeId);
153
+ }
154
+ }
155
+ adjacency.set(recipe.id, deps);
156
+ }
157
+ const visited = new Set();
158
+ const inStack = new Set();
159
+ function dfs(id) {
160
+ if (inStack.has(id)) {
161
+ throw new errors_1.CompilationError(`Circular sub-recipe dependency detected involving '${id}'`);
162
+ }
163
+ if (visited.has(id))
164
+ return;
165
+ visited.add(id);
166
+ inStack.add(id);
167
+ const deps = adjacency.get(id) ?? [];
168
+ for (const dep of deps) {
169
+ dfs(dep);
170
+ }
171
+ inStack.delete(id);
172
+ }
173
+ for (const recipe of recipes) {
174
+ dfs(recipe.id);
175
+ }
176
+ }
177
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/engines/recipe-costing/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Recipe Costing Engine
3
+ *
4
+ * Computes plate cost by rolling up ingredient costs through a bill of
5
+ * materials with yield factors and waste percentages. Supports margin
6
+ * analysis and cost-impact modeling when ingredient prices change.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const engine = new RecipeCostingEngine();
11
+ *
12
+ * const result = engine.execute(compiledRecipeCosting);
13
+ * // result.recipes -> per-recipe cost breakdowns
14
+ * ```
15
+ */
16
+ import type { CompiledRecipeCostingRuleSet, RecipeCostingOptions, RecipeCostingResult } from './types';
17
+ export declare class RecipeCostingEngine {
18
+ private strategy;
19
+ constructor();
20
+ /**
21
+ * Execute a recipe costing ruleset.
22
+ *
23
+ * Computes plate costs, analyzes margins, or models cost impacts
24
+ * depending on the strategy.
25
+ *
26
+ * @param ruleSet - Compiled recipe costing ruleset
27
+ * @param options - Runtime options
28
+ * @returns Recipe costing result
29
+ */
30
+ execute(ruleSet: CompiledRecipeCostingRuleSet, options?: RecipeCostingOptions): RecipeCostingResult;
31
+ }
32
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/engines/recipe-costing/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAIjB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAwB;;IAMxC;;;;;;;;;OASG;IACH,OAAO,CACL,OAAO,EAAE,4BAA4B,EACrC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB;CAGvB"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Recipe Costing Engine
4
+ *
5
+ * Computes plate cost by rolling up ingredient costs through a bill of
6
+ * materials with yield factors and waste percentages. Supports margin
7
+ * analysis and cost-impact modeling when ingredient prices change.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const engine = new RecipeCostingEngine();
12
+ *
13
+ * const result = engine.execute(compiledRecipeCosting);
14
+ * // result.recipes -> per-recipe cost breakdowns
15
+ * ```
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.RecipeCostingEngine = void 0;
19
+ const strategy_1 = require("./strategy");
20
+ class RecipeCostingEngine {
21
+ strategy;
22
+ constructor() {
23
+ this.strategy = new strategy_1.RecipeCostingExecutor();
24
+ }
25
+ /**
26
+ * Execute a recipe costing ruleset.
27
+ *
28
+ * Computes plate costs, analyzes margins, or models cost impacts
29
+ * depending on the strategy.
30
+ *
31
+ * @param ruleSet - Compiled recipe costing ruleset
32
+ * @param options - Runtime options
33
+ * @returns Recipe costing result
34
+ */
35
+ execute(ruleSet, options = {}) {
36
+ return this.strategy.run(ruleSet, options);
37
+ }
38
+ }
39
+ exports.RecipeCostingEngine = RecipeCostingEngine;
40
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/engines/recipe-costing/engine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAQH,yCAAmD;AAEnD,MAAa,mBAAmB;IACtB,QAAQ,CAAwB;IAExC;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,gCAAqB,EAAE,CAAC;IAC9C,CAAC;IAED;;;;;;;;;OASG;IACH,OAAO,CACL,OAAqC,EACrC,UAAgC,EAAE;QAElC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AAvBD,kDAuBC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Recipe Costing Engine -- Plate Cost & Margin Analysis
3
+ */
4
+ export type { RecipeCostingStrategy, MeasurementUnit, Ingredient, RecipeComponent, Recipe, CostChange, PlateCostConfig, MarginAnalysisConfig, CostImpactConfig, PlateCostRuleSet, MarginAnalysisRuleSet, CostImpactRuleSet, RecipeCostingRuleSet, CompiledPlateCostRuleSet, CompiledMarginAnalysisRuleSet, CompiledCostImpactRuleSet, CompiledRecipeCostingRuleSet, IngredientCostBreakdown, SubRecipeCostBreakdown, RecipeCostResult, CostImpactItem, PlateCostResult, MarginAnalysisResult, CostImpactResult, RecipeCostingResult, RecipeCostingOptions } from './types';
5
+ export { RecipeCostingStrategies, MeasurementUnits } from './types';
6
+ export { compileRecipeCostingRuleSet } from './compiler';
7
+ export { RecipeCostingExecutor, recipeCostingStrategy } from './strategy';
8
+ export { RecipeCostingEngine } from './engine';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/recipe-costing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,eAAe,EACf,MAAM,EACN,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Recipe Costing Engine -- Plate Cost & Margin Analysis
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RecipeCostingEngine = exports.recipeCostingStrategy = exports.RecipeCostingExecutor = exports.compileRecipeCostingRuleSet = exports.MeasurementUnits = exports.RecipeCostingStrategies = void 0;
7
+ // Constants
8
+ var types_1 = require("./types");
9
+ Object.defineProperty(exports, "RecipeCostingStrategies", { enumerable: true, get: function () { return types_1.RecipeCostingStrategies; } });
10
+ Object.defineProperty(exports, "MeasurementUnits", { enumerable: true, get: function () { return types_1.MeasurementUnits; } });
11
+ // Compiler
12
+ var compiler_1 = require("./compiler");
13
+ Object.defineProperty(exports, "compileRecipeCostingRuleSet", { enumerable: true, get: function () { return compiler_1.compileRecipeCostingRuleSet; } });
14
+ // Strategy
15
+ var strategy_1 = require("./strategy");
16
+ Object.defineProperty(exports, "RecipeCostingExecutor", { enumerable: true, get: function () { return strategy_1.RecipeCostingExecutor; } });
17
+ Object.defineProperty(exports, "recipeCostingStrategy", { enumerable: true, get: function () { return strategy_1.recipeCostingStrategy; } });
18
+ // Engine
19
+ var engine_1 = require("./engine");
20
+ Object.defineProperty(exports, "RecipeCostingEngine", { enumerable: true, get: function () { return engine_1.RecipeCostingEngine; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/recipe-costing/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgCH,YAAY;AACZ,iCAGiB;AAFf,gHAAA,uBAAuB,OAAA;AACvB,yGAAA,gBAAgB,OAAA;AAGlB,WAAW;AACX,uCAAyD;AAAhD,uHAAA,2BAA2B,OAAA;AAEpC,WAAW;AACX,uCAA0E;AAAjE,iHAAA,qBAAqB,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAErD,SAAS;AACT,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Recipe Costing Engine Strategy
3
+ *
4
+ * Core execution logic for all recipe costing strategies:
5
+ * - plate-cost: compute plate cost by rolling up ingredient BOM with yield/waste
6
+ * - margin-analysis: analyze margins and flag high food-cost items
7
+ * - cost-impact: model ingredient cost changes and their impact on recipes
8
+ */
9
+ import type { CompiledRecipeCostingRuleSet, RecipeCostingResult, RecipeCostingOptions } from './types';
10
+ export declare class RecipeCostingExecutor {
11
+ run(ruleSet: CompiledRecipeCostingRuleSet, _options?: RecipeCostingOptions): RecipeCostingResult;
12
+ private runPlateCost;
13
+ private runMarginAnalysis;
14
+ private runCostImpact;
15
+ private computeRecipeCost;
16
+ private findAffectedIngredients;
17
+ }
18
+ /** Singleton instance */
19
+ export declare const recipeCostingStrategy: RecipeCostingExecutor;
20
+ //# sourceMappingURL=strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/engines/recipe-costing/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,4BAA4B,EAa5B,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAsBjB,qBAAa,qBAAqB;IAChC,GAAG,CACD,OAAO,EAAE,4BAA4B,EACrC,QAAQ,GAAE,oBAAyB,GAClC,mBAAmB;IAiBtB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,iBAAiB;IAkDzB,OAAO,CAAC,aAAa;IAqGrB,OAAO,CAAC,iBAAiB;IAyFzB,OAAO,CAAC,uBAAuB;CAyBhC;AAED,yBAAyB;AACzB,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}