@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.
- package/dist/core/evaluation/decay.d.ts +13 -2
- package/dist/core/evaluation/decay.d.ts.map +1 -1
- package/dist/core/evaluation/decay.js +24 -0
- package/dist/core/evaluation/decay.js.map +1 -1
- package/dist/core/types/rule.d.ts +25 -1
- package/dist/core/types/rule.d.ts.map +1 -1
- package/dist/core/types/rule.js +28 -0
- package/dist/core/types/rule.js.map +1 -1
- package/dist/engines/bayesian/index.d.ts +1 -1
- package/dist/engines/bayesian/index.d.ts.map +1 -1
- package/dist/engines/bayesian/index.js +2 -1
- package/dist/engines/bayesian/index.js.map +1 -1
- package/dist/engines/bayesian/types.d.ts +10 -1
- package/dist/engines/bayesian/types.d.ts.map +1 -1
- package/dist/engines/bayesian/types.js +16 -1
- package/dist/engines/bayesian/types.js.map +1 -1
- package/dist/engines/constraint/types.d.ts +36 -5
- package/dist/engines/constraint/types.d.ts.map +1 -1
- package/dist/engines/constraint/types.js +44 -1
- package/dist/engines/constraint/types.js.map +1 -1
- package/dist/engines/decay/index.d.ts +1 -1
- package/dist/engines/decay/index.d.ts.map +1 -1
- package/dist/engines/decay/index.js +5 -1
- package/dist/engines/decay/index.js.map +1 -1
- package/dist/engines/decay/types.d.ts +26 -4
- package/dist/engines/decay/types.d.ts.map +1 -1
- package/dist/engines/decay/types.js +30 -1
- package/dist/engines/decay/types.js.map +1 -1
- package/dist/engines/defeasible/index.d.ts +1 -1
- package/dist/engines/defeasible/index.d.ts.map +1 -1
- package/dist/engines/defeasible/index.js +8 -1
- package/dist/engines/defeasible/index.js.map +1 -1
- package/dist/engines/defeasible/types.d.ts +40 -5
- package/dist/engines/defeasible/types.d.ts.map +1 -1
- package/dist/engines/defeasible/types.js +56 -1
- package/dist/engines/defeasible/types.js.map +1 -1
- package/dist/engines/ensemble/index.d.ts +1 -0
- package/dist/engines/ensemble/index.d.ts.map +1 -1
- package/dist/engines/ensemble/index.js +5 -1
- package/dist/engines/ensemble/index.js.map +1 -1
- package/dist/engines/ensemble/types.d.ts +17 -2
- package/dist/engines/ensemble/types.d.ts.map +1 -1
- package/dist/engines/ensemble/types.js +23 -0
- package/dist/engines/ensemble/types.js.map +1 -1
- package/dist/engines/expert/index.d.ts +1 -1
- package/dist/engines/expert/index.d.ts.map +1 -1
- package/dist/engines/expert/index.js +3 -1
- package/dist/engines/expert/index.js.map +1 -1
- package/dist/engines/expert/types.d.ts +11 -1
- package/dist/engines/expert/types.d.ts.map +1 -1
- package/dist/engines/expert/types.js +18 -1
- package/dist/engines/expert/types.js.map +1 -1
- package/dist/engines/fuzzy/fuzzy.types.d.ts +65 -8
- package/dist/engines/fuzzy/fuzzy.types.d.ts.map +1 -1
- package/dist/engines/fuzzy/fuzzy.types.js +89 -1
- package/dist/engines/fuzzy/fuzzy.types.js.map +1 -1
- package/dist/engines/loyalty/compiler.d.ts +11 -0
- package/dist/engines/loyalty/compiler.d.ts.map +1 -0
- package/dist/engines/loyalty/compiler.js +144 -0
- package/dist/engines/loyalty/compiler.js.map +1 -0
- package/dist/engines/loyalty/engine.d.ts +76 -0
- package/dist/engines/loyalty/engine.d.ts.map +1 -0
- package/dist/engines/loyalty/engine.js +132 -0
- package/dist/engines/loyalty/engine.js.map +1 -0
- package/dist/engines/loyalty/index.d.ts +9 -0
- package/dist/engines/loyalty/index.d.ts.map +1 -0
- package/dist/engines/loyalty/index.js +24 -0
- package/dist/engines/loyalty/index.js.map +1 -0
- package/dist/engines/loyalty/strategy.d.ts +35 -0
- package/dist/engines/loyalty/strategy.d.ts.map +1 -0
- package/dist/engines/loyalty/strategy.js +405 -0
- package/dist/engines/loyalty/strategy.js.map +1 -0
- package/dist/engines/loyalty/types.d.ts +221 -0
- package/dist/engines/loyalty/types.d.ts.map +1 -0
- package/dist/engines/loyalty/types.js +51 -0
- package/dist/engines/loyalty/types.js.map +1 -0
- package/dist/engines/menu-engineering/compiler.d.ts +11 -0
- package/dist/engines/menu-engineering/compiler.d.ts.map +1 -0
- package/dist/engines/menu-engineering/compiler.js +119 -0
- package/dist/engines/menu-engineering/compiler.js.map +1 -0
- package/dist/engines/menu-engineering/engine.d.ts +32 -0
- package/dist/engines/menu-engineering/engine.d.ts.map +1 -0
- package/dist/engines/menu-engineering/engine.js +40 -0
- package/dist/engines/menu-engineering/engine.js.map +1 -0
- package/dist/engines/menu-engineering/index.d.ts +9 -0
- package/dist/engines/menu-engineering/index.d.ts.map +1 -0
- package/dist/engines/menu-engineering/index.js +21 -0
- package/dist/engines/menu-engineering/index.js.map +1 -0
- package/dist/engines/menu-engineering/strategy.d.ts +18 -0
- package/dist/engines/menu-engineering/strategy.d.ts.map +1 -0
- package/dist/engines/menu-engineering/strategy.js +318 -0
- package/dist/engines/menu-engineering/strategy.js.map +1 -0
- package/dist/engines/menu-engineering/types.d.ts +187 -0
- package/dist/engines/menu-engineering/types.d.ts.map +1 -0
- package/dist/engines/menu-engineering/types.js +27 -0
- package/dist/engines/menu-engineering/types.js.map +1 -0
- package/dist/engines/monte-carlo/index.d.ts +1 -1
- package/dist/engines/monte-carlo/index.d.ts.map +1 -1
- package/dist/engines/monte-carlo/index.js +5 -1
- package/dist/engines/monte-carlo/index.js.map +1 -1
- package/dist/engines/monte-carlo/types.d.ts +16 -1
- package/dist/engines/monte-carlo/types.d.ts.map +1 -1
- package/dist/engines/monte-carlo/types.js +23 -1
- package/dist/engines/monte-carlo/types.js.map +1 -1
- package/dist/engines/negotiation/index.d.ts +1 -0
- package/dist/engines/negotiation/index.d.ts.map +1 -1
- package/dist/engines/negotiation/index.js +7 -1
- package/dist/engines/negotiation/index.js.map +1 -1
- package/dist/engines/negotiation/types.d.ts +23 -4
- package/dist/engines/negotiation/types.d.ts.map +1 -1
- package/dist/engines/negotiation/types.js +27 -0
- package/dist/engines/negotiation/types.js.map +1 -1
- package/dist/engines/prediction/index.d.ts +1 -1
- package/dist/engines/prediction/index.d.ts.map +1 -1
- package/dist/engines/prediction/index.js +6 -1
- package/dist/engines/prediction/index.js.map +1 -1
- package/dist/engines/prediction/types.d.ts +35 -5
- package/dist/engines/prediction/types.d.ts.map +1 -1
- package/dist/engines/prediction/types.js +39 -1
- package/dist/engines/prediction/types.js.map +1 -1
- package/dist/engines/pricing/index.d.ts +2 -2
- package/dist/engines/pricing/index.d.ts.map +1 -1
- package/dist/engines/pricing/index.js +3 -1
- package/dist/engines/pricing/index.js.map +1 -1
- package/dist/engines/pricing/types.d.ts +15 -1
- package/dist/engines/pricing/types.d.ts.map +1 -1
- package/dist/engines/pricing/types.js +16 -1
- package/dist/engines/pricing/types.js.map +1 -1
- package/dist/engines/ranking/index.d.ts +1 -1
- package/dist/engines/ranking/index.d.ts.map +1 -1
- package/dist/engines/ranking/index.js +6 -1
- package/dist/engines/ranking/index.js.map +1 -1
- package/dist/engines/ranking/types.d.ts +32 -5
- package/dist/engines/ranking/types.d.ts.map +1 -1
- package/dist/engines/ranking/types.js +36 -1
- package/dist/engines/ranking/types.js.map +1 -1
- package/dist/engines/recipe-costing/compiler.d.ts +11 -0
- package/dist/engines/recipe-costing/compiler.d.ts.map +1 -0
- package/dist/engines/recipe-costing/compiler.js +177 -0
- package/dist/engines/recipe-costing/compiler.js.map +1 -0
- package/dist/engines/recipe-costing/engine.d.ts +32 -0
- package/dist/engines/recipe-costing/engine.d.ts.map +1 -0
- package/dist/engines/recipe-costing/engine.js +40 -0
- package/dist/engines/recipe-costing/engine.js.map +1 -0
- package/dist/engines/recipe-costing/index.d.ts +9 -0
- package/dist/engines/recipe-costing/index.d.ts.map +1 -0
- package/dist/engines/recipe-costing/index.js +21 -0
- package/dist/engines/recipe-costing/index.js.map +1 -0
- package/dist/engines/recipe-costing/strategy.d.ts +20 -0
- package/dist/engines/recipe-costing/strategy.d.ts.map +1 -0
- package/dist/engines/recipe-costing/strategy.js +265 -0
- package/dist/engines/recipe-costing/strategy.js.map +1 -0
- package/dist/engines/recipe-costing/types.d.ts +213 -0
- package/dist/engines/recipe-costing/types.d.ts.map +1 -0
- package/dist/engines/recipe-costing/types.js +36 -0
- package/dist/engines/recipe-costing/types.js.map +1 -0
- package/dist/engines/scoring/index.d.ts +1 -1
- package/dist/engines/scoring/index.d.ts.map +1 -1
- package/dist/engines/scoring/index.js +3 -1
- package/dist/engines/scoring/index.js.map +1 -1
- package/dist/engines/scoring/types.d.ts +8 -1
- package/dist/engines/scoring/types.d.ts.map +1 -1
- package/dist/engines/scoring/types.js +18 -1
- package/dist/engines/scoring/types.js.map +1 -1
- package/dist/engines/sentiment/index.d.ts +1 -1
- package/dist/engines/sentiment/index.d.ts.map +1 -1
- package/dist/engines/sentiment/index.js +3 -1
- package/dist/engines/sentiment/index.js.map +1 -1
- package/dist/engines/sentiment/types.d.ts +13 -2
- package/dist/engines/sentiment/types.d.ts.map +1 -1
- package/dist/engines/sentiment/types.js +17 -1
- package/dist/engines/sentiment/types.js.map +1 -1
- package/dist/engines/state-machine/index.d.ts +1 -1
- package/dist/engines/state-machine/index.d.ts.map +1 -1
- package/dist/engines/state-machine/index.js +5 -1
- package/dist/engines/state-machine/index.js.map +1 -1
- package/dist/engines/state-machine/types.d.ts +7 -0
- package/dist/engines/state-machine/types.d.ts.map +1 -1
- package/dist/engines/state-machine/types.js +14 -0
- package/dist/engines/state-machine/types.js.map +1 -1
- package/dist/engines/utility/index.d.ts +2 -2
- package/dist/engines/utility/index.d.ts.map +1 -1
- package/dist/engines/utility/index.js +4 -1
- package/dist/engines/utility/index.js.map +1 -1
- package/dist/engines/utility/types.d.ts +21 -3
- package/dist/engines/utility/types.d.ts.map +1 -1
- package/dist/engines/utility/types.js +37 -1
- package/dist/engines/utility/types.js.map +1 -1
- package/dist/index.d.ts +30 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/core/evaluation/decay.ts +13 -2
- package/src/core/types/rule.ts +25 -1
- package/src/engines/bayesian/index.ts +1 -0
- package/src/engines/bayesian/types.ts +10 -8
- package/src/engines/constraint/types.ts +40 -11
- package/src/engines/decay/index.ts +4 -0
- package/src/engines/decay/types.ts +26 -4
- package/src/engines/defeasible/index.ts +7 -0
- package/src/engines/defeasible/types.ts +42 -18
- package/src/engines/ensemble/index.ts +6 -0
- package/src/engines/ensemble/types.ts +17 -13
- package/src/engines/expert/index.ts +1 -0
- package/src/engines/expert/types.ts +11 -9
- package/src/engines/fuzzy/fuzzy.types.ts +65 -31
- package/src/engines/loyalty/compiler.ts +174 -0
- package/src/engines/loyalty/engine.ts +174 -0
- package/src/engines/loyalty/index.ts +52 -0
- package/src/engines/loyalty/strategy.ts +532 -0
- package/src/engines/loyalty/types.ts +283 -0
- package/src/engines/menu-engineering/compiler.ts +145 -0
- package/src/engines/menu-engineering/engine.ts +48 -0
- package/src/engines/menu-engineering/index.ts +47 -0
- package/src/engines/menu-engineering/strategy.ts +414 -0
- package/src/engines/menu-engineering/types.ts +242 -0
- package/src/engines/monte-carlo/index.ts +1 -0
- package/src/engines/monte-carlo/types.ts +16 -21
- package/src/engines/negotiation/index.ts +8 -0
- package/src/engines/negotiation/types.ts +23 -4
- package/src/engines/prediction/index.ts +5 -0
- package/src/engines/prediction/types.ts +35 -5
- package/src/engines/pricing/index.ts +3 -1
- package/src/engines/pricing/types.ts +17 -1
- package/src/engines/ranking/index.ts +5 -0
- package/src/engines/ranking/types.ts +32 -11
- package/src/engines/recipe-costing/compiler.ts +219 -0
- package/src/engines/recipe-costing/engine.ts +48 -0
- package/src/engines/recipe-costing/index.ts +48 -0
- package/src/engines/recipe-costing/strategy.ts +357 -0
- package/src/engines/recipe-costing/types.ts +269 -0
- package/src/engines/scoring/index.ts +2 -0
- package/src/engines/scoring/types.ts +8 -6
- package/src/engines/sentiment/index.ts +2 -0
- package/src/engines/sentiment/types.ts +13 -2
- package/src/engines/state-machine/index.ts +3 -0
- package/src/engines/state-machine/types.ts +8 -0
- package/src/engines/utility/index.ts +5 -0
- package/src/engines/utility/types.ts +23 -3
- 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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,OAAO,
|
|
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;;;
|
|
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"}
|