@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
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ /**
3
+ * Recipe Costing Engine Strategy
4
+ *
5
+ * Core execution logic for all recipe costing strategies:
6
+ * - plate-cost: compute plate cost by rolling up ingredient BOM with yield/waste
7
+ * - margin-analysis: analyze margins and flag high food-cost items
8
+ * - cost-impact: model ingredient cost changes and their impact on recipes
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.recipeCostingStrategy = exports.RecipeCostingExecutor = void 0;
12
+ // ========================================
13
+ // Helpers
14
+ // ========================================
15
+ function round(value, decimals) {
16
+ const factor = Math.pow(10, decimals);
17
+ return Math.round(value * factor) / factor;
18
+ }
19
+ function computeIngredientCostPerUnit(ing) {
20
+ const baseCostPerUnit = ing.purchaseCost / ing.purchaseQuantity;
21
+ const yieldFactor = ing.yieldFactor ?? 1;
22
+ const wastePct = ing.wastePct ?? 0;
23
+ return baseCostPerUnit / yieldFactor / (1 - wastePct / 100);
24
+ }
25
+ // ========================================
26
+ // Strategy Executor
27
+ // ========================================
28
+ class RecipeCostingExecutor {
29
+ run(ruleSet, _options = {}) {
30
+ switch (ruleSet.strategy) {
31
+ case 'plate-cost':
32
+ return this.runPlateCost(ruleSet);
33
+ case 'margin-analysis':
34
+ return this.runMarginAnalysis(ruleSet);
35
+ case 'cost-impact':
36
+ return this.runCostImpact(ruleSet);
37
+ default:
38
+ throw new Error(`Unknown recipe costing strategy: '${ruleSet.strategy}'`);
39
+ }
40
+ }
41
+ // ========================================
42
+ // Plate Cost Strategy
43
+ // ========================================
44
+ runPlateCost(ruleSet) {
45
+ const startTime = performance.now();
46
+ const ingredientMap = new Map(ruleSet.ingredients.map(i => [i.id, i]));
47
+ const recipeMap = new Map(ruleSet.recipes.map(r => [r.id, r]));
48
+ const targetFoodCostPct = ruleSet.config.targetFoodCostPct;
49
+ const recipes = ruleSet.recipes.map(recipe => this.computeRecipeCost(recipe, ingredientMap, recipeMap, targetFoodCostPct, new Set()));
50
+ const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
51
+ return { recipes, executionTimeMs };
52
+ }
53
+ // ========================================
54
+ // Margin Analysis Strategy
55
+ // ========================================
56
+ runMarginAnalysis(ruleSet) {
57
+ const startTime = performance.now();
58
+ const ingredientMap = new Map(ruleSet.ingredients.map(i => [i.id, i]));
59
+ const recipeMap = new Map(ruleSet.recipes.map(r => [r.id, r]));
60
+ const { targetFoodCostPct, flagThreshold } = ruleSet.config;
61
+ const allRecipes = ruleSet.recipes.map(recipe => this.computeRecipeCost(recipe, ingredientMap, recipeMap, targetFoodCostPct, new Set()));
62
+ // Filter to recipes with selling price and sort by contribution margin descending
63
+ const recipesWithPrice = allRecipes
64
+ .filter(r => r.sellingPrice !== undefined)
65
+ .sort((a, b) => (b.contributionMargin ?? 0) - (a.contributionMargin ?? 0));
66
+ // Flag items above threshold
67
+ const flaggedItems = recipesWithPrice.filter(r => r.foodCostPct !== undefined && r.foodCostPct > flagThreshold);
68
+ // Compute summary stats
69
+ const validRecipes = recipesWithPrice.filter(r => r.foodCostPct !== undefined);
70
+ const avgFoodCostPct = validRecipes.length > 0
71
+ ? round(validRecipes.reduce((sum, r) => sum + r.foodCostPct, 0) / validRecipes.length, 2)
72
+ : 0;
73
+ const avgContributionMargin = validRecipes.length > 0
74
+ ? round(validRecipes.reduce((sum, r) => sum + r.contributionMargin, 0) / validRecipes.length, 2)
75
+ : 0;
76
+ const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
77
+ return {
78
+ recipes: allRecipes,
79
+ flaggedItems,
80
+ summary: {
81
+ totalRecipes: allRecipes.length,
82
+ recipesWithPrice: recipesWithPrice.length,
83
+ avgFoodCostPct,
84
+ avgContributionMargin,
85
+ flaggedCount: flaggedItems.length
86
+ },
87
+ executionTimeMs
88
+ };
89
+ }
90
+ // ========================================
91
+ // Cost Impact Strategy
92
+ // ========================================
93
+ runCostImpact(ruleSet) {
94
+ const startTime = performance.now();
95
+ const ingredientMap = new Map(ruleSet.ingredients.map(i => [i.id, i]));
96
+ const recipeMap = new Map(ruleSet.recipes.map(r => [r.id, r]));
97
+ const { changes, targetFoodCostPct } = ruleSet.config;
98
+ // Compute baseline costs
99
+ const baselineCosts = new Map();
100
+ for (const recipe of ruleSet.recipes) {
101
+ baselineCosts.set(recipe.id, this.computeRecipeCost(recipe, ingredientMap, recipeMap, targetFoodCostPct, new Set()));
102
+ }
103
+ // Clone and modify ingredient map
104
+ const modifiedIngredientMap = new Map(ruleSet.ingredients.map(i => [i.id, { ...i }]));
105
+ const changedIngredientIds = new Set();
106
+ for (const change of changes) {
107
+ const ing = modifiedIngredientMap.get(change.ingredientId);
108
+ if (change.newCost !== undefined) {
109
+ ing.purchaseCost = change.newCost;
110
+ }
111
+ else if (change.percentChange !== undefined) {
112
+ ing.purchaseCost = ing.purchaseCost * (1 + change.percentChange / 100);
113
+ }
114
+ changedIngredientIds.add(change.ingredientId);
115
+ }
116
+ // Recompute costs with modified ingredients
117
+ const impactItems = [];
118
+ for (const recipe of ruleSet.recipes) {
119
+ const newResult = this.computeRecipeCost(recipe, modifiedIngredientMap, recipeMap, targetFoodCostPct, new Set());
120
+ const baseline = baselineCosts.get(recipe.id);
121
+ // Check if this recipe is affected
122
+ const affectedIngredients = this.findAffectedIngredients(recipe, recipeMap, changedIngredientIds);
123
+ if (affectedIngredients.length === 0)
124
+ continue;
125
+ const plateCostChange = round(newResult.plateCost - baseline.plateCost, 4);
126
+ const plateCostChangePct = baseline.plateCost > 0
127
+ ? round((plateCostChange / baseline.plateCost) * 100, 2)
128
+ : 0;
129
+ impactItems.push({
130
+ recipeId: recipe.id,
131
+ recipeName: recipe.name,
132
+ oldPlateCost: baseline.plateCost,
133
+ newPlateCost: newResult.plateCost,
134
+ plateCostChange,
135
+ plateCostChangePct,
136
+ oldFoodCostPct: baseline.foodCostPct,
137
+ newFoodCostPct: newResult.foodCostPct,
138
+ oldMargin: baseline.contributionMargin,
139
+ newMargin: newResult.contributionMargin,
140
+ affectedIngredients
141
+ });
142
+ }
143
+ // Sort by impact severity (largest absolute change first)
144
+ impactItems.sort((a, b) => Math.abs(b.plateCostChange) - Math.abs(a.plateCostChange));
145
+ // Compute summary
146
+ const avgPlateCostChange = impactItems.length > 0
147
+ ? round(impactItems.reduce((sum, i) => sum + i.plateCostChange, 0) / impactItems.length, 4)
148
+ : 0;
149
+ const avgPlateCostChangePct = impactItems.length > 0
150
+ ? round(impactItems.reduce((sum, i) => sum + i.plateCostChangePct, 0) / impactItems.length, 2)
151
+ : 0;
152
+ const itemsCrossingThreshold = impactItems.filter(i => i.oldFoodCostPct !== undefined &&
153
+ i.newFoodCostPct !== undefined &&
154
+ i.oldFoodCostPct <= targetFoodCostPct &&
155
+ i.newFoodCostPct > targetFoodCostPct).length;
156
+ const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
157
+ return {
158
+ items: impactItems,
159
+ summary: {
160
+ totalRecipesAffected: impactItems.length,
161
+ avgPlateCostChange,
162
+ avgPlateCostChangePct,
163
+ itemsCrossingThreshold
164
+ },
165
+ executionTimeMs
166
+ };
167
+ }
168
+ // ========================================
169
+ // Shared Helpers
170
+ // ========================================
171
+ computeRecipeCost(recipe, ingredientMap, recipeMap, targetFoodCostPct, visited) {
172
+ if (visited.has(recipe.id)) {
173
+ throw new Error(`Circular sub-recipe dependency detected at '${recipe.id}'`);
174
+ }
175
+ visited.add(recipe.id);
176
+ const batchSize = recipe.batchSize ?? 1;
177
+ const ingredients = [];
178
+ const subRecipes = [];
179
+ let totalBatchCost = 0;
180
+ for (const comp of recipe.components) {
181
+ if (comp.ingredientId) {
182
+ const ing = ingredientMap.get(comp.ingredientId);
183
+ const costPerUnit = computeIngredientCostPerUnit(ing);
184
+ const lineCost = round(costPerUnit * comp.quantity, 4);
185
+ totalBatchCost += lineCost;
186
+ ingredients.push({
187
+ ingredientId: ing.id,
188
+ ingredientName: ing.name,
189
+ quantity: comp.quantity,
190
+ unit: comp.unit,
191
+ costPerUnit: round(costPerUnit, 4),
192
+ lineCost,
193
+ pctOfPlateCost: 0 // filled in below
194
+ });
195
+ }
196
+ else if (comp.subRecipeId) {
197
+ const subRecipe = recipeMap.get(comp.subRecipeId);
198
+ const subResult = this.computeRecipeCost(subRecipe, ingredientMap, recipeMap, targetFoodCostPct, new Set(visited));
199
+ const costPerPortion = subResult.plateCost;
200
+ const lineCost = round(costPerPortion * comp.quantity, 4);
201
+ totalBatchCost += lineCost;
202
+ subRecipes.push({
203
+ subRecipeId: subRecipe.id,
204
+ subRecipeName: subRecipe.name,
205
+ quantity: comp.quantity,
206
+ costPerPortion: round(costPerPortion, 4),
207
+ lineCost,
208
+ pctOfPlateCost: 0 // filled in below
209
+ });
210
+ }
211
+ }
212
+ const plateCost = round(totalBatchCost / batchSize, 4);
213
+ // Fill in pctOfPlateCost
214
+ if (totalBatchCost > 0) {
215
+ for (const ing of ingredients) {
216
+ ing.pctOfPlateCost = round((ing.lineCost / totalBatchCost) * 100, 2);
217
+ }
218
+ for (const sub of subRecipes) {
219
+ sub.pctOfPlateCost = round((sub.lineCost / totalBatchCost) * 100, 2);
220
+ }
221
+ }
222
+ const result = {
223
+ recipeId: recipe.id,
224
+ recipeName: recipe.name,
225
+ category: recipe.category,
226
+ batchSize,
227
+ totalBatchCost: round(totalBatchCost, 4),
228
+ plateCost,
229
+ ingredients,
230
+ subRecipes
231
+ };
232
+ if (recipe.sellingPrice !== undefined) {
233
+ result.sellingPrice = recipe.sellingPrice;
234
+ result.contributionMargin = round(recipe.sellingPrice - plateCost, 4);
235
+ result.foodCostPct = recipe.sellingPrice > 0
236
+ ? round((plateCost / recipe.sellingPrice) * 100, 2)
237
+ : 0;
238
+ result.meetsTarget = result.foodCostPct <= targetFoodCostPct;
239
+ }
240
+ visited.delete(recipe.id);
241
+ return result;
242
+ }
243
+ findAffectedIngredients(recipe, recipeMap, changedIds, visited = new Set()) {
244
+ if (visited.has(recipe.id))
245
+ return [];
246
+ visited.add(recipe.id);
247
+ const affected = [];
248
+ for (const comp of recipe.components) {
249
+ if (comp.ingredientId && changedIds.has(comp.ingredientId)) {
250
+ affected.push(comp.ingredientId);
251
+ }
252
+ if (comp.subRecipeId) {
253
+ const subRecipe = recipeMap.get(comp.subRecipeId);
254
+ if (subRecipe) {
255
+ affected.push(...this.findAffectedIngredients(subRecipe, recipeMap, changedIds, visited));
256
+ }
257
+ }
258
+ }
259
+ return [...new Set(affected)];
260
+ }
261
+ }
262
+ exports.RecipeCostingExecutor = RecipeCostingExecutor;
263
+ /** Singleton instance */
264
+ exports.recipeCostingStrategy = new RecipeCostingExecutor();
265
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/engines/recipe-costing/strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Recipe Costing Engine Types
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
+ /** Recipe costing strategy to use */
9
+ export declare const RecipeCostingStrategies: {
10
+ readonly plateCost: "plate-cost";
11
+ readonly marginAnalysis: "margin-analysis";
12
+ readonly costImpact: "cost-impact";
13
+ };
14
+ export type RecipeCostingStrategy = typeof RecipeCostingStrategies[keyof typeof RecipeCostingStrategies];
15
+ /** Measurement unit for ingredients and recipes */
16
+ export declare const MeasurementUnits: {
17
+ readonly oz: "oz";
18
+ readonly lb: "lb";
19
+ readonly g: "g";
20
+ readonly kg: "kg";
21
+ readonly flOz: "fl_oz";
22
+ readonly cup: "cup";
23
+ readonly qt: "qt";
24
+ readonly gal: "gal";
25
+ readonly ml: "ml";
26
+ readonly l: "l";
27
+ readonly each: "each";
28
+ readonly slice: "slice";
29
+ readonly portion: "portion";
30
+ };
31
+ export type MeasurementUnit = typeof MeasurementUnits[keyof typeof MeasurementUnits];
32
+ /** An ingredient with purchase cost and yield data */
33
+ export type Ingredient = {
34
+ id: string;
35
+ name: string;
36
+ category?: string;
37
+ purchaseUnit: MeasurementUnit;
38
+ purchaseQuantity: number;
39
+ purchaseCost: number;
40
+ yieldFactor?: number;
41
+ wastePct?: number;
42
+ unit: MeasurementUnit;
43
+ };
44
+ /** A component in a recipe (ingredient or sub-recipe) */
45
+ export type RecipeComponent = {
46
+ ingredientId?: string;
47
+ subRecipeId?: string;
48
+ quantity: number;
49
+ unit: MeasurementUnit;
50
+ };
51
+ /** A recipe with components and optional selling price */
52
+ export type Recipe = {
53
+ id: string;
54
+ name: string;
55
+ category?: string;
56
+ sellingPrice?: number;
57
+ components: RecipeComponent[];
58
+ batchSize?: number;
59
+ };
60
+ /** A cost change for an ingredient */
61
+ export type CostChange = {
62
+ ingredientId: string;
63
+ newCost?: number;
64
+ percentChange?: number;
65
+ };
66
+ /** Configuration for plate-cost strategy */
67
+ export type PlateCostConfig = {
68
+ targetFoodCostPct?: number;
69
+ };
70
+ /** Configuration for margin-analysis strategy */
71
+ export type MarginAnalysisConfig = {
72
+ targetFoodCostPct?: number;
73
+ flagThreshold?: number;
74
+ };
75
+ /** Configuration for cost-impact strategy */
76
+ export type CostImpactConfig = {
77
+ changes: CostChange[];
78
+ targetFoodCostPct?: number;
79
+ };
80
+ type RecipeCostingRuleSetBase = {
81
+ id: string;
82
+ name?: string;
83
+ mode: 'recipe-costing';
84
+ ingredients: Ingredient[];
85
+ recipes: Recipe[];
86
+ };
87
+ /** Plate-cost strategy: compute cost per portion for each recipe */
88
+ export type PlateCostRuleSet = RecipeCostingRuleSetBase & {
89
+ strategy: 'plate-cost';
90
+ config?: PlateCostConfig;
91
+ };
92
+ /** Margin-analysis strategy: analyze margins and flag high food-cost items */
93
+ export type MarginAnalysisRuleSet = RecipeCostingRuleSetBase & {
94
+ strategy: 'margin-analysis';
95
+ config?: MarginAnalysisConfig;
96
+ };
97
+ /** Cost-impact strategy: model ingredient cost changes */
98
+ export type CostImpactRuleSet = RecipeCostingRuleSetBase & {
99
+ strategy: 'cost-impact';
100
+ config: CostImpactConfig;
101
+ };
102
+ export type RecipeCostingRuleSet = PlateCostRuleSet | MarginAnalysisRuleSet | CostImpactRuleSet;
103
+ type CompiledRecipeCostingRuleSetBase = {
104
+ id: string;
105
+ name?: string;
106
+ mode: 'recipe-costing';
107
+ ingredients: Ingredient[];
108
+ recipes: Recipe[];
109
+ };
110
+ export type CompiledPlateCostRuleSet = CompiledRecipeCostingRuleSetBase & {
111
+ strategy: 'plate-cost';
112
+ config: {
113
+ targetFoodCostPct: number;
114
+ };
115
+ };
116
+ export type CompiledMarginAnalysisRuleSet = CompiledRecipeCostingRuleSetBase & {
117
+ strategy: 'margin-analysis';
118
+ config: {
119
+ targetFoodCostPct: number;
120
+ flagThreshold: number;
121
+ };
122
+ };
123
+ export type CompiledCostImpactRuleSet = CompiledRecipeCostingRuleSetBase & {
124
+ strategy: 'cost-impact';
125
+ config: {
126
+ changes: CostChange[];
127
+ targetFoodCostPct: number;
128
+ };
129
+ };
130
+ export type CompiledRecipeCostingRuleSet = CompiledPlateCostRuleSet | CompiledMarginAnalysisRuleSet | CompiledCostImpactRuleSet;
131
+ /** Cost breakdown for a single ingredient in a recipe */
132
+ export type IngredientCostBreakdown = {
133
+ ingredientId: string;
134
+ ingredientName: string;
135
+ quantity: number;
136
+ unit: MeasurementUnit;
137
+ costPerUnit: number;
138
+ lineCost: number;
139
+ pctOfPlateCost: number;
140
+ };
141
+ /** Cost breakdown for a sub-recipe in a recipe */
142
+ export type SubRecipeCostBreakdown = {
143
+ subRecipeId: string;
144
+ subRecipeName: string;
145
+ quantity: number;
146
+ costPerPortion: number;
147
+ lineCost: number;
148
+ pctOfPlateCost: number;
149
+ };
150
+ /** Cost result for a single recipe */
151
+ export type RecipeCostResult = {
152
+ recipeId: string;
153
+ recipeName: string;
154
+ category?: string;
155
+ batchSize: number;
156
+ totalBatchCost: number;
157
+ plateCost: number;
158
+ sellingPrice?: number;
159
+ contributionMargin?: number;
160
+ foodCostPct?: number;
161
+ meetsTarget?: boolean;
162
+ ingredients: IngredientCostBreakdown[];
163
+ subRecipes: SubRecipeCostBreakdown[];
164
+ };
165
+ /** Cost impact for a single recipe when ingredients change */
166
+ export type CostImpactItem = {
167
+ recipeId: string;
168
+ recipeName: string;
169
+ oldPlateCost: number;
170
+ newPlateCost: number;
171
+ plateCostChange: number;
172
+ plateCostChangePct: number;
173
+ oldFoodCostPct?: number;
174
+ newFoodCostPct?: number;
175
+ oldMargin?: number;
176
+ newMargin?: number;
177
+ affectedIngredients: string[];
178
+ };
179
+ /** Result from plate-cost strategy */
180
+ export type PlateCostResult = {
181
+ recipes: RecipeCostResult[];
182
+ executionTimeMs: number;
183
+ };
184
+ /** Result from margin-analysis strategy */
185
+ export type MarginAnalysisResult = {
186
+ recipes: RecipeCostResult[];
187
+ flaggedItems: RecipeCostResult[];
188
+ summary: {
189
+ totalRecipes: number;
190
+ recipesWithPrice: number;
191
+ avgFoodCostPct: number;
192
+ avgContributionMargin: number;
193
+ flaggedCount: number;
194
+ };
195
+ executionTimeMs: number;
196
+ };
197
+ /** Result from cost-impact strategy */
198
+ export type CostImpactResult = {
199
+ items: CostImpactItem[];
200
+ summary: {
201
+ totalRecipesAffected: number;
202
+ avgPlateCostChange: number;
203
+ avgPlateCostChangePct: number;
204
+ itemsCrossingThreshold: number;
205
+ };
206
+ executionTimeMs: number;
207
+ };
208
+ /** Union of all recipe costing results */
209
+ export type RecipeCostingResult = PlateCostResult | MarginAnalysisResult | CostImpactResult;
210
+ /** Runtime options */
211
+ export type RecipeCostingOptions = Record<string, never>;
212
+ export {};
213
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/recipe-costing/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Recipe Costing Engine Types
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
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MeasurementUnits = exports.RecipeCostingStrategies = void 0;
11
+ // ========================================
12
+ // Semantic Types
13
+ // ========================================
14
+ /** Recipe costing strategy to use */
15
+ exports.RecipeCostingStrategies = {
16
+ plateCost: 'plate-cost',
17
+ marginAnalysis: 'margin-analysis',
18
+ costImpact: 'cost-impact',
19
+ };
20
+ /** Measurement unit for ingredients and recipes */
21
+ exports.MeasurementUnits = {
22
+ oz: 'oz',
23
+ lb: 'lb',
24
+ g: 'g',
25
+ kg: 'kg',
26
+ flOz: 'fl_oz',
27
+ cup: 'cup',
28
+ qt: 'qt',
29
+ gal: 'gal',
30
+ ml: 'ml',
31
+ l: 'l',
32
+ each: 'each',
33
+ slice: 'slice',
34
+ portion: 'portion',
35
+ };
36
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/recipe-costing/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,2CAA2C;AAC3C,iBAAiB;AACjB,2CAA2C;AAE3C,qCAAqC;AACxB,QAAA,uBAAuB,GAAG;IACrC,SAAS,EAAE,YAAY;IACvB,cAAc,EAAE,iBAAiB;IACjC,UAAU,EAAE,aAAa;CACjB,CAAC;AAGX,mDAAmD;AACtC,QAAA,gBAAgB,GAAG;IAC9B,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACV,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Provides scoring-based rule execution where rules contribute
5
5
  * scores that are accumulated into a total score.
6
6
  */
7
- export { ScoringMethod, ScoringCaps, OutputBounds, TierDefinition, TierStyle, StyledTierDefinition, TIER_STYLE_KNOWN_KEYS, ScoringTierMatch, ScoringCategory, CategoryResult, OverrideEffect, OverrideDefinition, ForceTierOverride, FloorTierOverride, CapTierOverride, ExcludeOverride, AdjustScoreOverride, ClampScoreOverride, ForceScoreOverride, OverrideResult, CompiledOverrideDefinition, NullHandling, ScoringAction, ScoringRule, ScoringRuleSet, ScoringConfig, CompiledScoringAction, CompiledScoringRule, CompiledScoringRuleSet, ConfidenceConfig, ConfidenceBreakdown, ScoreFunction, ScoreFunctionRegistry, ScoringOptions, ScoringResult, createScoreFunction } from './types';
7
+ export { ScoringMethods, ScoringMethod, ScoringCaps, OutputBounds, TierDefinition, TierStyle, StyledTierDefinition, TIER_STYLE_KNOWN_KEYS, ScoringTierMatch, ScoringCategory, CategoryResult, OverrideEffect, OverrideDefinition, ForceTierOverride, FloorTierOverride, CapTierOverride, ExcludeOverride, AdjustScoreOverride, ClampScoreOverride, ForceScoreOverride, OverrideResult, CompiledOverrideDefinition, NullHandling, ScoringAction, ScoringRule, ScoringRuleSet, ScoringConfig, CompiledScoringAction, CompiledScoringRule, CompiledScoringRuleSet, ConfidenceConfig, ConfidenceBreakdown, ScoreFunction, ScoreFunctionRegistry, ScoringOptions, ScoringResult, createScoreFunction } from './types';
8
8
  export { compileScoringRule, compileScoringRuleSet } from './compiler';
9
9
  export { ScoringStrategy, scoringStrategy } from './strategy';
10
10
  export { ScoringEngine } from './engine';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,aAAa,EACb,WAAW,EACX,YAAY,EAEZ,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAEhB,eAAe,EACf,cAAc,EAEd,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAE1B,YAAY,EAEZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EAEb,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EAEtB,gBAAgB,EAChB,mBAAmB,EAEnB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,cAAc,EAEd,aAAa,EACb,WAAW,EACX,YAAY,EAEZ,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAEhB,eAAe,EACf,cAAc,EAEd,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAE1B,YAAY,EAEZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EAEb,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EAEtB,gBAAgB,EAChB,mBAAmB,EAEnB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -6,9 +6,11 @@
6
6
  * scores that are accumulated into a total score.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ScoringEngine = exports.scoringStrategy = exports.ScoringStrategy = exports.compileScoringRuleSet = exports.compileScoringRule = exports.createScoreFunction = exports.TIER_STYLE_KNOWN_KEYS = void 0;
9
+ exports.ScoringEngine = exports.scoringStrategy = exports.ScoringStrategy = exports.compileScoringRuleSet = exports.compileScoringRule = exports.createScoreFunction = exports.TIER_STYLE_KNOWN_KEYS = exports.ScoringMethods = void 0;
10
10
  // Types
11
11
  var types_1 = require("./types");
12
+ // Scoring method const
13
+ Object.defineProperty(exports, "ScoringMethods", { enumerable: true, get: function () { return types_1.ScoringMethods; } });
12
14
  Object.defineProperty(exports, "TIER_STYLE_KNOWN_KEYS", { enumerable: true, get: function () { return types_1.TIER_STYLE_KNOWN_KEYS; } });
13
15
  Object.defineProperty(exports, "createScoreFunction", { enumerable: true, get: function () { return types_1.createScoreFunction; } });
14
16
  // Compiler
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,QAAQ;AACR,iCA8CiB;AArCf,8GAAA,qBAAqB,OAAA;AAoCrB,4GAAA,mBAAmB,OAAA;AAGrB,WAAW;AACX,uCAGoB;AAFlB,8GAAA,kBAAkB,OAAA;AAClB,iHAAA,qBAAqB,OAAA;AAGvB,WAAW;AACX,uCAGoB;AAFlB,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AAGjB,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,QAAQ;AACR,iCAgDiB;AA/Cf,uBAAuB;AACvB,uGAAA,cAAc,OAAA;AASd,8GAAA,qBAAqB,OAAA;AAoCrB,4GAAA,mBAAmB,OAAA;AAGrB,WAAW;AACX,uCAGoB;AAFlB,8GAAA,kBAAkB,OAAA;AAClB,iHAAA,qBAAqB,OAAA;AAGvB,WAAW;AACX,uCAGoB;AAFlB,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AAGjB,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
@@ -10,7 +10,14 @@ import { DecayConfig, DecayInfo } from '../../core/evaluation/decay';
10
10
  * - Per-rule methods (normalized, capped, adaptive): Applied to each rule's score
11
11
  * - Global methods (weighted-percent): Applied across all rules
12
12
  */
13
- export type ScoringMethod = 'raw' | 'normalized' | 'adaptive' | 'weighted-percent' | 'capped';
13
+ export declare const ScoringMethods: {
14
+ readonly raw: "raw";
15
+ readonly normalized: "normalized";
16
+ readonly adaptive: "adaptive";
17
+ readonly weightedPercent: "weighted-percent";
18
+ readonly capped: "capped";
19
+ };
20
+ export type ScoringMethod = typeof ScoringMethods[keyof typeof ScoringMethods];
14
21
  /**
15
22
  * Max contribution caps for each rule
16
23
  * Maps ruleId -> max score to prevent any single rule from dominating
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/types.ts"],"names":[],"mappings":"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"}