@higher.archi/boe 1.0.30 → 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/index.d.ts +1 -0
- package/dist/engines/loyalty/index.d.ts.map +1 -1
- package/dist/engines/loyalty/index.js +8 -1
- package/dist/engines/loyalty/index.js.map +1 -1
- package/dist/engines/loyalty/types.d.ts +36 -5
- package/dist/engines/loyalty/types.d.ts.map +1 -1
- package/dist/engines/loyalty/types.js +40 -0
- package/dist/engines/loyalty/types.js.map +1 -1
- 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 +28 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -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/index.ts +9 -0
- package/src/engines/loyalty/types.ts +36 -5
- 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 +146 -8
|
@@ -6,10 +6,52 @@
|
|
|
6
6
|
* and fuzzy inference. Self-contained within the fuzzy engine.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.WIDTH_VALUES = exports.POSITION_VALUES = void 0;
|
|
9
|
+
exports.WIDTH_VALUES = exports.POSITION_VALUES = exports.DefuzzifyPresets = exports.TransformMethods = exports.DefuzzifyMethods = exports.AggregationMethods = exports.EdgeSemantics = exports.WidthSemantics = exports.PositionSemantics = exports.MembershipShapes = void 0;
|
|
10
10
|
exports.isSemanticTerm = isSemanticTerm;
|
|
11
11
|
exports.isExplicitTerm = isExplicitTerm;
|
|
12
12
|
exports.expandDefuzzifyPreset = expandDefuzzifyPreset;
|
|
13
|
+
// ========================================
|
|
14
|
+
// Membership Shape Types
|
|
15
|
+
// ========================================
|
|
16
|
+
/**
|
|
17
|
+
* Membership function shapes
|
|
18
|
+
* These define how membership degree (0-1) is calculated from a crisp value
|
|
19
|
+
*/
|
|
20
|
+
exports.MembershipShapes = {
|
|
21
|
+
triangle: 'triangle',
|
|
22
|
+
trapezoid: 'trapezoid',
|
|
23
|
+
gaussian: 'gaussian',
|
|
24
|
+
shoulder: 'shoulder',
|
|
25
|
+
block: 'block',
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Semantic position within domain (compiles to numeric center)
|
|
29
|
+
*/
|
|
30
|
+
exports.PositionSemantics = {
|
|
31
|
+
veryLow: 'very-low',
|
|
32
|
+
low: 'low',
|
|
33
|
+
medium: 'medium',
|
|
34
|
+
high: 'high',
|
|
35
|
+
veryHigh: 'very-high',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Semantic width/spread (compiles to numeric spread as % of domain)
|
|
39
|
+
*/
|
|
40
|
+
exports.WidthSemantics = {
|
|
41
|
+
tight: 'tight',
|
|
42
|
+
narrow: 'narrow',
|
|
43
|
+
medium: 'medium',
|
|
44
|
+
wide: 'wide',
|
|
45
|
+
veryWide: 'very-wide',
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Edge behavior for shoulder/block shapes
|
|
49
|
+
*/
|
|
50
|
+
exports.EdgeSemantics = {
|
|
51
|
+
openLeft: 'open-left',
|
|
52
|
+
openRight: 'open-right',
|
|
53
|
+
closed: 'closed',
|
|
54
|
+
};
|
|
13
55
|
/**
|
|
14
56
|
* Type guard for semantic terms
|
|
15
57
|
*/
|
|
@@ -23,6 +65,52 @@ function isExplicitTerm(term) {
|
|
|
23
65
|
return 'params' in term;
|
|
24
66
|
}
|
|
25
67
|
// ========================================
|
|
68
|
+
// Defuzzification Pipeline Types
|
|
69
|
+
// ========================================
|
|
70
|
+
/**
|
|
71
|
+
* Aggregation methods - combine multiple rule activations for same output
|
|
72
|
+
*/
|
|
73
|
+
exports.AggregationMethods = {
|
|
74
|
+
max: 'max',
|
|
75
|
+
sum: 'sum',
|
|
76
|
+
probor: 'probor',
|
|
77
|
+
bound: 'bound',
|
|
78
|
+
min: 'min',
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Defuzzification methods - convert fuzzy output to crisp value
|
|
82
|
+
*/
|
|
83
|
+
exports.DefuzzifyMethods = {
|
|
84
|
+
centroid: 'centroid',
|
|
85
|
+
bisector: 'bisector',
|
|
86
|
+
mom: 'mom',
|
|
87
|
+
som: 'som',
|
|
88
|
+
lom: 'lom',
|
|
89
|
+
wtaver: 'wtaver',
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Transform methods - post-process the crisp output
|
|
93
|
+
*/
|
|
94
|
+
exports.TransformMethods = {
|
|
95
|
+
clamp: 'clamp',
|
|
96
|
+
round: 'round',
|
|
97
|
+
deadband: 'deadband',
|
|
98
|
+
scale: 'scale',
|
|
99
|
+
quantize: 'quantize',
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Named presets that expand to full pipelines
|
|
103
|
+
*/
|
|
104
|
+
exports.DefuzzifyPresets = {
|
|
105
|
+
balanced: 'balanced',
|
|
106
|
+
smooth: 'smooth',
|
|
107
|
+
decisive: 'decisive',
|
|
108
|
+
cautious: 'cautious',
|
|
109
|
+
aggressive: 'aggressive',
|
|
110
|
+
discrete: 'discrete',
|
|
111
|
+
stable: 'stable',
|
|
112
|
+
};
|
|
113
|
+
// ========================================
|
|
26
114
|
// Preset Expansions
|
|
27
115
|
// ========================================
|
|
28
116
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy.types.js","sourceRoot":"","sources":["../../../src/engines/fuzzy/fuzzy.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"fuzzy.types.js","sourceRoot":"","sources":["../../../src/engines/fuzzy/fuzzy.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Loyalty Engine -- Point Ledger Management
|
|
3
3
|
*/
|
|
4
4
|
export type { LoyaltyStrategy, PointTransactionType, TierStatus, QualifyingMetric, EvaluationPeriod, EarningRule, RedemptionOption, LoyaltyTierDefinition, PromotionRule, ExpirationPolicy, PointTransaction, MemberBalance, EarningRuleSet, RedemptionRuleSet, TierEvaluationRuleSet, LoyaltyRuleSet, CompiledEarningRuleSet, CompiledRedemptionRuleSet, CompiledTierEvaluationRuleSet, CompiledLoyaltyRuleSet, EarningResult, RedemptionResult, MemberTierResult, TierEvaluationResult, LoyaltyResult, LoyaltyOptions, LoyaltyIngestResult } from './types';
|
|
5
|
+
export { LoyaltyStrategies, PointTransactionTypes, TierStatuses, QualifyingMetrics, EvaluationPeriods } from './types';
|
|
5
6
|
export { compileLoyaltyRuleSet } from './compiler';
|
|
6
7
|
export { LoyaltyExecutor, loyaltyStrategy } from './strategy';
|
|
7
8
|
export { LoyaltyEngine } from './engine';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/loyalty/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/loyalty/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -3,7 +3,14 @@
|
|
|
3
3
|
* Loyalty Engine -- Point Ledger Management
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.LoyaltyEngine = exports.loyaltyStrategy = exports.LoyaltyExecutor = exports.compileLoyaltyRuleSet = void 0;
|
|
6
|
+
exports.LoyaltyEngine = exports.loyaltyStrategy = exports.LoyaltyExecutor = exports.compileLoyaltyRuleSet = exports.EvaluationPeriods = exports.QualifyingMetrics = exports.TierStatuses = exports.PointTransactionTypes = exports.LoyaltyStrategies = void 0;
|
|
7
|
+
// Constants
|
|
8
|
+
var types_1 = require("./types");
|
|
9
|
+
Object.defineProperty(exports, "LoyaltyStrategies", { enumerable: true, get: function () { return types_1.LoyaltyStrategies; } });
|
|
10
|
+
Object.defineProperty(exports, "PointTransactionTypes", { enumerable: true, get: function () { return types_1.PointTransactionTypes; } });
|
|
11
|
+
Object.defineProperty(exports, "TierStatuses", { enumerable: true, get: function () { return types_1.TierStatuses; } });
|
|
12
|
+
Object.defineProperty(exports, "QualifyingMetrics", { enumerable: true, get: function () { return types_1.QualifyingMetrics; } });
|
|
13
|
+
Object.defineProperty(exports, "EvaluationPeriods", { enumerable: true, get: function () { return types_1.EvaluationPeriods; } });
|
|
7
14
|
// Compiler
|
|
8
15
|
var compiler_1 = require("./compiler");
|
|
9
16
|
Object.defineProperty(exports, "compileLoyaltyRuleSet", { enumerable: true, get: function () { return compiler_1.compileLoyaltyRuleSet; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/loyalty/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAiCH,WAAW;AACX,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAE9B,WAAW;AACX,uCAA8D;AAArD,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEzC,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/loyalty/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAiCH,YAAY;AACZ,iCAMiB;AALf,0GAAA,iBAAiB,OAAA;AACjB,8GAAA,qBAAqB,OAAA;AACrB,qGAAA,YAAY,OAAA;AACZ,0GAAA,iBAAiB,OAAA;AACjB,0GAAA,iBAAiB,OAAA;AAGnB,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"}
|
|
@@ -8,15 +8,46 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { Condition } from '../../core/types/condition';
|
|
10
10
|
/** Loyalty strategy to use */
|
|
11
|
-
export
|
|
11
|
+
export declare const LoyaltyStrategies: {
|
|
12
|
+
readonly earning: "earning";
|
|
13
|
+
readonly redemption: "redemption";
|
|
14
|
+
readonly tierEvaluation: "tier-evaluation";
|
|
15
|
+
};
|
|
16
|
+
export type LoyaltyStrategy = typeof LoyaltyStrategies[keyof typeof LoyaltyStrategies];
|
|
12
17
|
/** Point transaction type */
|
|
13
|
-
export
|
|
18
|
+
export declare const PointTransactionTypes: {
|
|
19
|
+
readonly earn: "earn";
|
|
20
|
+
readonly redeem: "redeem";
|
|
21
|
+
readonly expire: "expire";
|
|
22
|
+
readonly transfer: "transfer";
|
|
23
|
+
readonly adjust: "adjust";
|
|
24
|
+
};
|
|
25
|
+
export type PointTransactionType = typeof PointTransactionTypes[keyof typeof PointTransactionTypes];
|
|
14
26
|
/** Member tier status */
|
|
15
|
-
export
|
|
27
|
+
export declare const TierStatuses: {
|
|
28
|
+
readonly qualified: "qualified";
|
|
29
|
+
readonly atRisk: "at-risk";
|
|
30
|
+
readonly downgradePending: "downgrade-pending";
|
|
31
|
+
readonly locked: "locked";
|
|
32
|
+
};
|
|
33
|
+
export type TierStatus = typeof TierStatuses[keyof typeof TierStatuses];
|
|
16
34
|
/** Qualifying metric for tier evaluation */
|
|
17
|
-
export
|
|
35
|
+
export declare const QualifyingMetrics: {
|
|
36
|
+
readonly pointsEarned: "points-earned";
|
|
37
|
+
readonly qualifyingSpend: "qualifying-spend";
|
|
38
|
+
readonly qualifyingNights: "qualifying-nights";
|
|
39
|
+
readonly qualifyingFlights: "qualifying-flights";
|
|
40
|
+
readonly qualifyingRentalDays: "qualifying-rental-days";
|
|
41
|
+
readonly qualifyingCruiseDays: "qualifying-cruise-days";
|
|
42
|
+
};
|
|
43
|
+
export type QualifyingMetric = typeof QualifyingMetrics[keyof typeof QualifyingMetrics];
|
|
18
44
|
/** Evaluation period for tier assessment */
|
|
19
|
-
export
|
|
45
|
+
export declare const EvaluationPeriods: {
|
|
46
|
+
readonly rolling12Months: "rolling-12-months";
|
|
47
|
+
readonly calendarYear: "calendar-year";
|
|
48
|
+
readonly custom: "custom";
|
|
49
|
+
};
|
|
50
|
+
export type EvaluationPeriod = typeof EvaluationPeriods[keyof typeof EvaluationPeriods];
|
|
20
51
|
/** An earning rule that maps activities to points */
|
|
21
52
|
export type EarningRule = {
|
|
22
53
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/loyalty/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAM5D,8BAA8B;AAC9B,MAAM,MAAM,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/loyalty/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,44 @@
|
|
|
8
8
|
* maintains running balance state across operations.
|
|
9
9
|
*/
|
|
10
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
|
+
};
|
|
11
51
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/loyalty/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}
|
|
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"}
|