@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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Loyalty Engine Types
|
|
4
|
+
*
|
|
5
|
+
* Point ledger engine that manages earning rules with category multipliers,
|
|
6
|
+
* point transactions (earn/redeem/transfer/expire), tier-qualified balances,
|
|
7
|
+
* and promotion stacking. Unlike other BOE engines, the Loyalty engine
|
|
8
|
+
* maintains running balance state across operations.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.EvaluationPeriods = exports.QualifyingMetrics = exports.TierStatuses = exports.PointTransactionTypes = exports.LoyaltyStrategies = void 0;
|
|
12
|
+
// ========================================
|
|
13
|
+
// Semantic Types
|
|
14
|
+
// ========================================
|
|
15
|
+
/** Loyalty strategy to use */
|
|
16
|
+
exports.LoyaltyStrategies = {
|
|
17
|
+
earning: 'earning',
|
|
18
|
+
redemption: 'redemption',
|
|
19
|
+
tierEvaluation: 'tier-evaluation',
|
|
20
|
+
};
|
|
21
|
+
/** Point transaction type */
|
|
22
|
+
exports.PointTransactionTypes = {
|
|
23
|
+
earn: 'earn',
|
|
24
|
+
redeem: 'redeem',
|
|
25
|
+
expire: 'expire',
|
|
26
|
+
transfer: 'transfer',
|
|
27
|
+
adjust: 'adjust',
|
|
28
|
+
};
|
|
29
|
+
/** Member tier status */
|
|
30
|
+
exports.TierStatuses = {
|
|
31
|
+
qualified: 'qualified',
|
|
32
|
+
atRisk: 'at-risk',
|
|
33
|
+
downgradePending: 'downgrade-pending',
|
|
34
|
+
locked: 'locked',
|
|
35
|
+
};
|
|
36
|
+
/** Qualifying metric for tier evaluation */
|
|
37
|
+
exports.QualifyingMetrics = {
|
|
38
|
+
pointsEarned: 'points-earned',
|
|
39
|
+
qualifyingSpend: 'qualifying-spend',
|
|
40
|
+
qualifyingNights: 'qualifying-nights',
|
|
41
|
+
qualifyingFlights: 'qualifying-flights',
|
|
42
|
+
qualifyingRentalDays: 'qualifying-rental-days',
|
|
43
|
+
qualifyingCruiseDays: 'qualifying-cruise-days',
|
|
44
|
+
};
|
|
45
|
+
/** Evaluation period for tier assessment */
|
|
46
|
+
exports.EvaluationPeriods = {
|
|
47
|
+
rolling12Months: 'rolling-12-months',
|
|
48
|
+
calendarYear: 'calendar-year',
|
|
49
|
+
custom: 'custom',
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/loyalty/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAIH,2CAA2C;AAC3C,iBAAiB;AACjB,2CAA2C;AAE3C,8BAA8B;AACjB,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,iBAAiB;CACzB,CAAC;AAGX,6BAA6B;AAChB,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACR,CAAC;AAGX,yBAAyB;AACZ,QAAA,YAAY,GAAG;IAC1B,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,SAAS;IACjB,gBAAgB,EAAE,mBAAmB;IACrC,MAAM,EAAE,QAAQ;CACR,CAAC;AAGX,4CAA4C;AAC/B,QAAA,iBAAiB,GAAG;IAC/B,YAAY,EAAE,eAAe;IAC7B,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,mBAAmB;IACrC,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,wBAAwB;IAC9C,oBAAoB,EAAE,wBAAwB;CACtC,CAAC;AAGX,4CAA4C;AAC/B,QAAA,iBAAiB,GAAG;IAC/B,eAAe,EAAE,mBAAmB;IACpC,YAAY,EAAE,eAAe;IAC7B,MAAM,EAAE,QAAQ;CACR,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu Engineering Engine Compiler
|
|
3
|
+
*
|
|
4
|
+
* Validates menu engineering rulesets and resolves defaults.
|
|
5
|
+
*/
|
|
6
|
+
import type { MenuEngineeringRuleSet, CompiledMenuEngineeringRuleSet } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Compile and validate a menu engineering ruleset.
|
|
9
|
+
*/
|
|
10
|
+
export declare function compileMenuEngineeringRuleSet(ruleSet: MenuEngineeringRuleSet): CompiledMenuEngineeringRuleSet;
|
|
11
|
+
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/engines/menu-engineering/compiler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,sBAAsB,EACtB,8BAA8B,EAI/B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,sBAAsB,GAC9B,8BAA8B,CA4ChC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Menu Engineering Engine Compiler
|
|
4
|
+
*
|
|
5
|
+
* Validates menu engineering rulesets and resolves defaults.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.compileMenuEngineeringRuleSet = compileMenuEngineeringRuleSet;
|
|
9
|
+
const errors_1 = require("../../core/errors");
|
|
10
|
+
/**
|
|
11
|
+
* Compile and validate a menu engineering ruleset.
|
|
12
|
+
*/
|
|
13
|
+
function compileMenuEngineeringRuleSet(ruleSet) {
|
|
14
|
+
if (!ruleSet.id) {
|
|
15
|
+
throw new errors_1.CompilationError('Menu engineering ruleset requires an id');
|
|
16
|
+
}
|
|
17
|
+
if (ruleSet.mode !== 'menu-engineering') {
|
|
18
|
+
throw new errors_1.CompilationError(`Expected mode 'menu-engineering', got '${ruleSet.mode}'`);
|
|
19
|
+
}
|
|
20
|
+
if (!ruleSet.items || ruleSet.items.length === 0) {
|
|
21
|
+
throw new errors_1.CompilationError('Menu engineering ruleset requires at least one menu item');
|
|
22
|
+
}
|
|
23
|
+
// Validate unique item IDs
|
|
24
|
+
const itemIds = new Set();
|
|
25
|
+
for (const item of ruleSet.items) {
|
|
26
|
+
if (!item.id) {
|
|
27
|
+
throw new errors_1.CompilationError('Each menu item requires an id');
|
|
28
|
+
}
|
|
29
|
+
if (itemIds.has(item.id)) {
|
|
30
|
+
throw new errors_1.CompilationError(`Duplicate menu item id: '${item.id}'`);
|
|
31
|
+
}
|
|
32
|
+
if (item.sellingPrice < 0) {
|
|
33
|
+
throw new errors_1.CompilationError(`Menu item '${item.id}' sellingPrice must be non-negative`);
|
|
34
|
+
}
|
|
35
|
+
if (item.plateCost < 0) {
|
|
36
|
+
throw new errors_1.CompilationError(`Menu item '${item.id}' plateCost must be non-negative`);
|
|
37
|
+
}
|
|
38
|
+
if (item.salesCount < 0) {
|
|
39
|
+
throw new errors_1.CompilationError(`Menu item '${item.id}' salesCount must be non-negative`);
|
|
40
|
+
}
|
|
41
|
+
itemIds.add(item.id);
|
|
42
|
+
}
|
|
43
|
+
switch (ruleSet.strategy) {
|
|
44
|
+
case 'classify':
|
|
45
|
+
return compileClassify(ruleSet);
|
|
46
|
+
case 'price-optimization':
|
|
47
|
+
return compilePriceOptimization(ruleSet);
|
|
48
|
+
case 'mix-analysis':
|
|
49
|
+
return compileMixAnalysis(ruleSet);
|
|
50
|
+
default:
|
|
51
|
+
throw new errors_1.CompilationError(`Unknown menu engineering strategy: '${ruleSet.strategy}'`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function compileClassify(ruleSet) {
|
|
55
|
+
const config = ruleSet.config ?? {};
|
|
56
|
+
return {
|
|
57
|
+
id: ruleSet.id,
|
|
58
|
+
name: ruleSet.name,
|
|
59
|
+
mode: 'menu-engineering',
|
|
60
|
+
strategy: 'classify',
|
|
61
|
+
items: ruleSet.items,
|
|
62
|
+
config: {
|
|
63
|
+
mixThresholdMode: config.mixThresholdMode ?? 'average',
|
|
64
|
+
customMixThreshold: config.customMixThreshold ?? 0,
|
|
65
|
+
marginThresholdMode: config.marginThresholdMode ?? 'average',
|
|
66
|
+
customMarginThreshold: config.customMarginThreshold ?? 0
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function compilePriceOptimization(ruleSet) {
|
|
71
|
+
if (!ruleSet.config || !ruleSet.config.priceChanges || ruleSet.config.priceChanges.length === 0) {
|
|
72
|
+
throw new errors_1.CompilationError('Price-optimization strategy requires at least one price change');
|
|
73
|
+
}
|
|
74
|
+
// Validate price changes reference existing items
|
|
75
|
+
const itemIds = new Set(ruleSet.items.map(i => i.id));
|
|
76
|
+
for (const change of ruleSet.config.priceChanges) {
|
|
77
|
+
if (!itemIds.has(change.itemId)) {
|
|
78
|
+
throw new errors_1.CompilationError(`Price change references unknown item: '${change.itemId}'`);
|
|
79
|
+
}
|
|
80
|
+
if (change.newPrice < 0) {
|
|
81
|
+
throw new errors_1.CompilationError(`Price change for '${change.itemId}' newPrice must be non-negative`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
id: ruleSet.id,
|
|
86
|
+
name: ruleSet.name,
|
|
87
|
+
mode: 'menu-engineering',
|
|
88
|
+
strategy: 'price-optimization',
|
|
89
|
+
items: ruleSet.items,
|
|
90
|
+
config: {
|
|
91
|
+
priceChanges: ruleSet.config.priceChanges,
|
|
92
|
+
elasticities: ruleSet.config.elasticities ?? [],
|
|
93
|
+
defaultElasticity: ruleSet.config.defaultElasticity ?? -1.0
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function compileMixAnalysis(ruleSet) {
|
|
98
|
+
const config = ruleSet.config ?? {};
|
|
99
|
+
const groupBy = config.groupBy ?? 'category';
|
|
100
|
+
if (groupBy === 'category') {
|
|
101
|
+
// Verify at least some items have categories
|
|
102
|
+
const hasCategories = ruleSet.items.some(i => i.category);
|
|
103
|
+
if (!hasCategories) {
|
|
104
|
+
throw new errors_1.CompilationError('Mix-analysis with groupBy "category" requires items with category values');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
id: ruleSet.id,
|
|
109
|
+
name: ruleSet.name,
|
|
110
|
+
mode: 'menu-engineering',
|
|
111
|
+
strategy: 'mix-analysis',
|
|
112
|
+
items: ruleSet.items,
|
|
113
|
+
config: {
|
|
114
|
+
groupBy,
|
|
115
|
+
daypartField: config.daypartField ?? 'daypart'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/engines/menu-engineering/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu Engineering Engine
|
|
3
|
+
*
|
|
4
|
+
* Classifies menu items into Stars/Plowhorses/Puzzles/Dogs based on
|
|
5
|
+
* sales mix percentage and contribution margin. Supports price optimization
|
|
6
|
+
* with elasticity modeling and category-level mix analysis.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const engine = new MenuEngineeringEngine();
|
|
11
|
+
*
|
|
12
|
+
* const result = engine.execute(compiledMenuEngineering);
|
|
13
|
+
* // result.items -> classified menu items with recommendations
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import type { CompiledMenuEngineeringRuleSet, MenuEngineeringOptions, MenuEngineeringResult } from './types';
|
|
17
|
+
export declare class MenuEngineeringEngine {
|
|
18
|
+
private strategy;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Execute a menu engineering ruleset.
|
|
22
|
+
*
|
|
23
|
+
* Classifies menu items, optimizes prices, or analyzes category mix
|
|
24
|
+
* depending on the strategy.
|
|
25
|
+
*
|
|
26
|
+
* @param ruleSet - Compiled menu engineering ruleset
|
|
27
|
+
* @param options - Runtime options
|
|
28
|
+
* @returns Menu engineering result
|
|
29
|
+
*/
|
|
30
|
+
execute(ruleSet: CompiledMenuEngineeringRuleSet, options?: MenuEngineeringOptions): MenuEngineeringResult;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/engines/menu-engineering/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAIjB,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAA0B;;IAM1C;;;;;;;;;OASG;IACH,OAAO,CACL,OAAO,EAAE,8BAA8B,EACvC,OAAO,GAAE,sBAA2B,GACnC,qBAAqB;CAGzB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Menu Engineering Engine
|
|
4
|
+
*
|
|
5
|
+
* Classifies menu items into Stars/Plowhorses/Puzzles/Dogs based on
|
|
6
|
+
* sales mix percentage and contribution margin. Supports price optimization
|
|
7
|
+
* with elasticity modeling and category-level mix analysis.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const engine = new MenuEngineeringEngine();
|
|
12
|
+
*
|
|
13
|
+
* const result = engine.execute(compiledMenuEngineering);
|
|
14
|
+
* // result.items -> classified menu items with recommendations
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.MenuEngineeringEngine = void 0;
|
|
19
|
+
const strategy_1 = require("./strategy");
|
|
20
|
+
class MenuEngineeringEngine {
|
|
21
|
+
strategy;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.strategy = new strategy_1.MenuEngineeringExecutor();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Execute a menu engineering ruleset.
|
|
27
|
+
*
|
|
28
|
+
* Classifies menu items, optimizes prices, or analyzes category mix
|
|
29
|
+
* depending on the strategy.
|
|
30
|
+
*
|
|
31
|
+
* @param ruleSet - Compiled menu engineering ruleset
|
|
32
|
+
* @param options - Runtime options
|
|
33
|
+
* @returns Menu engineering result
|
|
34
|
+
*/
|
|
35
|
+
execute(ruleSet, options = {}) {
|
|
36
|
+
return this.strategy.run(ruleSet, options);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.MenuEngineeringEngine = MenuEngineeringEngine;
|
|
40
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/engines/menu-engineering/engine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAQH,yCAAqD;AAErD,MAAa,qBAAqB;IACxB,QAAQ,CAA0B;IAE1C;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,kCAAuB,EAAE,CAAC;IAChD,CAAC;IAED;;;;;;;;;OASG;IACH,OAAO,CACL,OAAuC,EACvC,UAAkC,EAAE;QAEpC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AAvBD,sDAuBC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu Engineering Engine -- Menu Item Classification & Optimization
|
|
3
|
+
*/
|
|
4
|
+
export type { MenuEngineeringStrategy, MenuClassification, MenuItem, PriceElasticity, PriceChange, ClassifyConfig, PriceOptimizationConfig, MixAnalysisConfig, ClassifyRuleSet, PriceOptimizationRuleSet, MixAnalysisRuleSet, MenuEngineeringRuleSet, CompiledClassifyRuleSet, CompiledPriceOptimizationRuleSet, CompiledMixAnalysisRuleSet, CompiledMenuEngineeringRuleSet, ClassifiedItem, MenuSummary, PriceOptimizationItem, CategoryMixResult, ClassifyResult, PriceOptimizationResult, MixAnalysisResult, MenuEngineeringResult, MenuEngineeringOptions } from './types';
|
|
5
|
+
export { MenuEngineeringStrategies, MenuClassifications } from './types';
|
|
6
|
+
export { compileMenuEngineeringRuleSet } from './compiler';
|
|
7
|
+
export { MenuEngineeringExecutor, menuEngineeringStrategy } from './strategy';
|
|
8
|
+
export { MenuEngineeringEngine } from './engine';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/menu-engineering/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,gCAAgC,EAChC,0BAA0B,EAC1B,8BAA8B,EAC9B,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Menu Engineering Engine -- Menu Item Classification & Optimization
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MenuEngineeringEngine = exports.menuEngineeringStrategy = exports.MenuEngineeringExecutor = exports.compileMenuEngineeringRuleSet = exports.MenuClassifications = exports.MenuEngineeringStrategies = void 0;
|
|
7
|
+
// Constants
|
|
8
|
+
var types_1 = require("./types");
|
|
9
|
+
Object.defineProperty(exports, "MenuEngineeringStrategies", { enumerable: true, get: function () { return types_1.MenuEngineeringStrategies; } });
|
|
10
|
+
Object.defineProperty(exports, "MenuClassifications", { enumerable: true, get: function () { return types_1.MenuClassifications; } });
|
|
11
|
+
// Compiler
|
|
12
|
+
var compiler_1 = require("./compiler");
|
|
13
|
+
Object.defineProperty(exports, "compileMenuEngineeringRuleSet", { enumerable: true, get: function () { return compiler_1.compileMenuEngineeringRuleSet; } });
|
|
14
|
+
// Strategy
|
|
15
|
+
var strategy_1 = require("./strategy");
|
|
16
|
+
Object.defineProperty(exports, "MenuEngineeringExecutor", { enumerable: true, get: function () { return strategy_1.MenuEngineeringExecutor; } });
|
|
17
|
+
Object.defineProperty(exports, "menuEngineeringStrategy", { enumerable: true, get: function () { return strategy_1.menuEngineeringStrategy; } });
|
|
18
|
+
// Engine
|
|
19
|
+
var engine_1 = require("./engine");
|
|
20
|
+
Object.defineProperty(exports, "MenuEngineeringEngine", { enumerable: true, get: function () { return engine_1.MenuEngineeringEngine; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/menu-engineering/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA+BH,YAAY;AACZ,iCAGiB;AAFf,kHAAA,yBAAyB,OAAA;AACzB,4GAAA,mBAAmB,OAAA;AAGrB,WAAW;AACX,uCAA2D;AAAlD,yHAAA,6BAA6B,OAAA;AAEtC,WAAW;AACX,uCAA8E;AAArE,mHAAA,uBAAuB,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAEzD,SAAS;AACT,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu Engineering Engine Strategy
|
|
3
|
+
*
|
|
4
|
+
* Core execution logic for all menu engineering strategies:
|
|
5
|
+
* - classify: categorize items into Stars/Plowhorses/Puzzles/Dogs
|
|
6
|
+
* - price-optimization: model price change impacts with elasticity
|
|
7
|
+
* - mix-analysis: analyze category/daypart mix with divergence detection
|
|
8
|
+
*/
|
|
9
|
+
import type { CompiledMenuEngineeringRuleSet, MenuEngineeringResult, MenuEngineeringOptions } from './types';
|
|
10
|
+
export declare class MenuEngineeringExecutor {
|
|
11
|
+
run(ruleSet: CompiledMenuEngineeringRuleSet, _options?: MenuEngineeringOptions): MenuEngineeringResult;
|
|
12
|
+
private runClassify;
|
|
13
|
+
private runPriceOptimization;
|
|
14
|
+
private runMixAnalysis;
|
|
15
|
+
}
|
|
16
|
+
/** Singleton instance */
|
|
17
|
+
export declare const menuEngineeringStrategy: MenuEngineeringExecutor;
|
|
18
|
+
//# sourceMappingURL=strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/engines/menu-engineering/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,8BAA8B,EAa9B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAuHjB,qBAAa,uBAAuB;IAClC,GAAG,CACD,OAAO,EAAE,8BAA8B,EACvC,QAAQ,GAAE,sBAA2B,GACpC,qBAAqB;IAiBxB,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,oBAAoB;IAuH5B,OAAO,CAAC,cAAc;CA2FvB;AAED,yBAAyB;AACzB,eAAO,MAAM,uBAAuB,yBAAgC,CAAC"}
|