@higher.archi/boe 1.0.23 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/core/types/rule.d.ts +1 -1
  2. package/dist/core/types/rule.d.ts.map +1 -1
  3. package/dist/engines/prediction/compiler.d.ts +11 -0
  4. package/dist/engines/prediction/compiler.d.ts.map +1 -0
  5. package/dist/engines/prediction/compiler.js +153 -0
  6. package/dist/engines/prediction/compiler.js.map +1 -0
  7. package/dist/engines/prediction/engine.d.ts +49 -0
  8. package/dist/engines/prediction/engine.d.ts.map +1 -0
  9. package/dist/engines/prediction/engine.js +91 -0
  10. package/dist/engines/prediction/engine.js.map +1 -0
  11. package/dist/engines/prediction/index.d.ts +9 -0
  12. package/dist/engines/prediction/index.d.ts.map +1 -0
  13. package/dist/engines/prediction/index.js +25 -0
  14. package/dist/engines/prediction/index.js.map +1 -0
  15. package/dist/engines/prediction/strategy.d.ts +20 -0
  16. package/dist/engines/prediction/strategy.d.ts.map +1 -0
  17. package/dist/engines/prediction/strategy.js +441 -0
  18. package/dist/engines/prediction/strategy.js.map +1 -0
  19. package/dist/engines/prediction/types.d.ts +150 -0
  20. package/dist/engines/prediction/types.d.ts.map +1 -0
  21. package/dist/engines/prediction/types.js +59 -0
  22. package/dist/engines/prediction/types.js.map +1 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +14 -2
  26. package/dist/index.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/core/types/rule.ts +1 -1
  29. package/src/engines/prediction/compiler.ts +186 -0
  30. package/src/engines/prediction/engine.ts +120 -0
  31. package/src/engines/prediction/index.ts +49 -0
  32. package/src/engines/prediction/strategy.ts +573 -0
  33. package/src/engines/prediction/types.ts +236 -0
  34. package/src/index.ts +39 -0
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ /**
3
+ * Prediction Engine Strategy
4
+ *
5
+ * Core execution logic for all prediction strategies:
6
+ * - linear-regression: Least-squares line fit with R² confidence
7
+ * - exponential-smoothing: Holt's double exponential (level + trend)
8
+ * - weighted-moving-average: Rolling window with recency weighting
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.predictionStrategy = exports.PredictionExecutor = void 0;
12
+ const types_1 = require("./types");
13
+ // Milliseconds per day / per month (30 days)
14
+ const MS_PER_DAY = 86_400_000;
15
+ const MS_PER_MONTH = 2_592_000_000; // 30 days
16
+ class PredictionExecutor {
17
+ run(ruleSet, wm, options = {}) {
18
+ const startTime = performance.now();
19
+ const asOf = options.asOf ? options.asOf.getTime() : Date.now();
20
+ // Group snapshots by entity
21
+ const entityGroups = groupByEntity(wm.getByType(ruleSet.snapshotType), ruleSet.fields);
22
+ const predictions = [];
23
+ for (const [entityId, points] of entityGroups) {
24
+ let prediction;
25
+ switch (ruleSet.strategy) {
26
+ case 'linear-regression':
27
+ prediction = this.runLinearRegression(ruleSet, entityId, points, asOf);
28
+ break;
29
+ case 'exponential-smoothing':
30
+ prediction = this.runExponentialSmoothing(ruleSet, entityId, points, asOf);
31
+ break;
32
+ case 'weighted-moving-average':
33
+ prediction = this.runWeightedMovingAverage(ruleSet, entityId, points, asOf);
34
+ break;
35
+ default:
36
+ throw new Error(`Unknown prediction strategy: '${ruleSet.strategy}'`);
37
+ }
38
+ if (options.onPredict) {
39
+ options.onPredict(prediction);
40
+ }
41
+ predictions.push(prediction);
42
+ }
43
+ const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
44
+ return {
45
+ predictions,
46
+ totalEntities: predictions.length,
47
+ strategy: ruleSet.strategy,
48
+ horizonMs: ruleSet.horizonMs,
49
+ executionTimeMs
50
+ };
51
+ }
52
+ // ========================================
53
+ // Linear Regression
54
+ // ========================================
55
+ runLinearRegression(ruleSet, entityId, points, asOf) {
56
+ const currentScore = points[points.length - 1].score;
57
+ const forecastTime = asOf + ruleSet.horizonMs;
58
+ const forecastDate = new Date(forecastTime);
59
+ // 1 data point
60
+ if (points.length === 1) {
61
+ return this.buildSinglePointPrediction(ruleSet, entityId, currentScore, asOf, forecastDate, 'linear-regression');
62
+ }
63
+ // 2 data points
64
+ if (points.length === 2) {
65
+ const dt = points[1].timestamp - points[0].timestamp;
66
+ const ds = points[1].score - points[0].score;
67
+ const slopePerMs = dt > 0 ? ds / dt : 0;
68
+ const predicted = currentScore + slopePerMs * ruleSet.horizonMs;
69
+ const stableThreshold = ruleSet.config.stableThreshold / MS_PER_DAY; // convert to per-ms
70
+ return {
71
+ entityId,
72
+ dataPoints: 2,
73
+ trend: (0, types_1.resolveTrendDirection)(slopePerMs, stableThreshold),
74
+ trendSlope: round(slopePerMs * MS_PER_DAY, 4),
75
+ confidence: 0.3,
76
+ confidenceBracket: (0, types_1.resolveConfidenceBracket)(0.3),
77
+ currentScore,
78
+ forecast: {
79
+ date: forecastDate,
80
+ dateIso: forecastDate.toISOString(),
81
+ predictedScore: round(predicted, 2)
82
+ },
83
+ thresholdCrossings: computeThresholdCrossings(currentScore, slopePerMs, asOf, ruleSet.thresholds),
84
+ model: {
85
+ strategy: 'linear-regression',
86
+ params: { slopePerDay: round(slopePerMs * MS_PER_DAY, 6), intercept: 0, rSquared: 0 }
87
+ }
88
+ };
89
+ }
90
+ // 3+ data points: full least-squares
91
+ const n = points.length;
92
+ const tMin = points[0].timestamp;
93
+ // Normalize timestamps to avoid precision loss
94
+ const xs = points.map(p => p.timestamp - tMin);
95
+ const ys = points.map(p => p.score);
96
+ const xMean = xs.reduce((a, b) => a + b, 0) / n;
97
+ const yMean = ys.reduce((a, b) => a + b, 0) / n;
98
+ let sXX = 0;
99
+ let sXY = 0;
100
+ for (let i = 0; i < n; i++) {
101
+ const dx = xs[i] - xMean;
102
+ sXX += dx * dx;
103
+ sXY += dx * (ys[i] - yMean);
104
+ }
105
+ const slope = sXX > 0 ? sXY / sXX : 0;
106
+ const intercept = yMean - slope * xMean;
107
+ // R²
108
+ let ssTot = 0;
109
+ let ssRes = 0;
110
+ for (let i = 0; i < n; i++) {
111
+ const yHat = slope * xs[i] + intercept;
112
+ ssTot += (ys[i] - yMean) * (ys[i] - yMean);
113
+ ssRes += (ys[i] - yHat) * (ys[i] - yHat);
114
+ }
115
+ const rSquared = ssTot > 0 ? Math.max(0, Math.min(1, 1 - ssRes / ssTot)) : 0;
116
+ // Prediction at horizon
117
+ const xPred = forecastTime - tMin;
118
+ const predicted = slope * xPred + intercept;
119
+ // 95% confidence interval
120
+ const se = n > 2 ? Math.sqrt(ssRes / (n - 2)) : 0;
121
+ const margin = 1.96 * se * Math.sqrt(1 + 1 / n + ((xPred - xMean) * (xPred - xMean)) / sXX);
122
+ const stableThreshold = ruleSet.config.stableThreshold / MS_PER_DAY;
123
+ return {
124
+ entityId,
125
+ dataPoints: n,
126
+ trend: (0, types_1.resolveTrendDirection)(slope, stableThreshold),
127
+ trendSlope: round(slope * MS_PER_DAY, 4),
128
+ confidence: round(rSquared, 4),
129
+ confidenceBracket: (0, types_1.resolveConfidenceBracket)(rSquared),
130
+ currentScore,
131
+ forecast: {
132
+ date: forecastDate,
133
+ dateIso: forecastDate.toISOString(),
134
+ predictedScore: round(predicted, 2),
135
+ confidenceInterval: margin > 0
136
+ ? { lower: round(predicted - margin, 2), upper: round(predicted + margin, 2) }
137
+ : undefined
138
+ },
139
+ thresholdCrossings: computeThresholdCrossings(currentScore, slope, asOf - tMin, ruleSet.thresholds, tMin),
140
+ model: {
141
+ strategy: 'linear-regression',
142
+ params: {
143
+ slopePerDay: round(slope * MS_PER_DAY, 6),
144
+ intercept: round(intercept, 4),
145
+ rSquared: round(rSquared, 4)
146
+ }
147
+ }
148
+ };
149
+ }
150
+ // ========================================
151
+ // Exponential Smoothing (Holt's Double)
152
+ // ========================================
153
+ runExponentialSmoothing(ruleSet, entityId, points, asOf) {
154
+ const currentScore = points[points.length - 1].score;
155
+ const forecastTime = asOf + ruleSet.horizonMs;
156
+ const forecastDate = new Date(forecastTime);
157
+ // 1 data point
158
+ if (points.length === 1) {
159
+ return this.buildSinglePointPrediction(ruleSet, entityId, currentScore, asOf, forecastDate, 'exponential-smoothing');
160
+ }
161
+ // 2 data points
162
+ if (points.length === 2) {
163
+ const dt = points[1].timestamp - points[0].timestamp;
164
+ const ds = points[1].score - points[0].score;
165
+ const slopePerMs = dt > 0 ? ds / dt : 0;
166
+ const predicted = currentScore + slopePerMs * ruleSet.horizonMs;
167
+ // Use a default stable threshold for exponential smoothing
168
+ const stableThreshold = 0.001 / MS_PER_DAY;
169
+ return {
170
+ entityId,
171
+ dataPoints: 2,
172
+ trend: (0, types_1.resolveTrendDirection)(slopePerMs, stableThreshold),
173
+ trendSlope: round(slopePerMs * MS_PER_DAY, 4),
174
+ confidence: 0.3,
175
+ confidenceBracket: (0, types_1.resolveConfidenceBracket)(0.3),
176
+ currentScore,
177
+ forecast: {
178
+ date: forecastDate,
179
+ dateIso: forecastDate.toISOString(),
180
+ predictedScore: round(predicted, 2)
181
+ },
182
+ thresholdCrossings: computeThresholdCrossings(currentScore, slopePerMs, asOf, ruleSet.thresholds),
183
+ model: {
184
+ strategy: 'exponential-smoothing',
185
+ params: {
186
+ level: currentScore,
187
+ trendPerDay: round(slopePerMs * MS_PER_DAY, 6),
188
+ alpha: ruleSet.config.alpha,
189
+ beta: ruleSet.config.beta
190
+ }
191
+ }
192
+ };
193
+ }
194
+ // 3+ points: Holt's double exponential smoothing
195
+ const { alpha, beta } = ruleSet.config;
196
+ let level = points[0].score;
197
+ let trend = points[1].score - points[0].score;
198
+ // Track errors for MAE-based confidence
199
+ let totalAbsError = 0;
200
+ let minScore = points[0].score;
201
+ let maxScore = points[0].score;
202
+ for (let i = 1; i < points.length; i++) {
203
+ const score = points[i].score;
204
+ minScore = Math.min(minScore, score);
205
+ maxScore = Math.max(maxScore, score);
206
+ const predicted = level + trend;
207
+ totalAbsError += Math.abs(score - predicted);
208
+ const prevLevel = level;
209
+ level = alpha * score + (1 - alpha) * (prevLevel + trend);
210
+ trend = beta * (level - prevLevel) + (1 - beta) * trend;
211
+ }
212
+ const avgInterval = (points[points.length - 1].timestamp - points[0].timestamp) / (points.length - 1);
213
+ const stepsAhead = avgInterval > 0 ? ruleSet.horizonMs / avgInterval : 0;
214
+ const predicted = level + trend * stepsAhead;
215
+ // Confidence: 1 - (MAE / range), clamped [0, 1]
216
+ const mae = totalAbsError / (points.length - 1);
217
+ const range = maxScore - minScore;
218
+ const confidence = range > 0 ? Math.max(0, Math.min(1, 1 - mae / range)) : (mae === 0 ? 1 : 0);
219
+ // Convert trend per interval to per ms
220
+ const trendPerMs = avgInterval > 0 ? trend / avgInterval : 0;
221
+ const stableThreshold = 0.001 / MS_PER_DAY;
222
+ return {
223
+ entityId,
224
+ dataPoints: points.length,
225
+ trend: (0, types_1.resolveTrendDirection)(trendPerMs, stableThreshold),
226
+ trendSlope: round(trendPerMs * MS_PER_DAY, 4),
227
+ confidence: round(confidence, 4),
228
+ confidenceBracket: (0, types_1.resolveConfidenceBracket)(confidence),
229
+ currentScore,
230
+ forecast: {
231
+ date: forecastDate,
232
+ dateIso: forecastDate.toISOString(),
233
+ predictedScore: round(predicted, 2)
234
+ },
235
+ thresholdCrossings: computeThresholdCrossings(currentScore, trendPerMs, asOf, ruleSet.thresholds),
236
+ model: {
237
+ strategy: 'exponential-smoothing',
238
+ params: {
239
+ level: round(level, 4),
240
+ trendPerDay: round(trendPerMs * MS_PER_DAY, 6),
241
+ alpha,
242
+ beta
243
+ }
244
+ }
245
+ };
246
+ }
247
+ // ========================================
248
+ // Weighted Moving Average
249
+ // ========================================
250
+ runWeightedMovingAverage(ruleSet, entityId, points, asOf) {
251
+ const currentScore = points[points.length - 1].score;
252
+ const forecastTime = asOf + ruleSet.horizonMs;
253
+ const forecastDate = new Date(forecastTime);
254
+ // 1 data point
255
+ if (points.length === 1) {
256
+ return this.buildSinglePointPrediction(ruleSet, entityId, currentScore, asOf, forecastDate, 'weighted-moving-average');
257
+ }
258
+ // 2+ points
259
+ const windowSize = Math.min(ruleSet.config.window, points.length);
260
+ const recent = points.slice(-windowSize);
261
+ // Weighted average: weights = [1, 2, ..., N]
262
+ let weightedSum = 0;
263
+ let totalWeight = 0;
264
+ for (let i = 0; i < recent.length; i++) {
265
+ const w = i + 1;
266
+ weightedSum += recent[i].score * w;
267
+ totalWeight += w;
268
+ }
269
+ const weightedAvg = weightedSum / totalWeight;
270
+ // Weighted slope from consecutive diffs
271
+ let slopeWeightedSum = 0;
272
+ let slopeTotalWeight = 0;
273
+ for (let i = 1; i < recent.length; i++) {
274
+ const dt = recent[i].timestamp - recent[i - 1].timestamp;
275
+ if (dt > 0) {
276
+ const diff = (recent[i].score - recent[i - 1].score) / dt;
277
+ const w = i; // more weight on recent diffs
278
+ slopeWeightedSum += diff * w;
279
+ slopeTotalWeight += w;
280
+ }
281
+ }
282
+ const slopePerMs = slopeTotalWeight > 0 ? slopeWeightedSum / slopeTotalWeight : 0;
283
+ const predicted = weightedAvg + slopePerMs * ruleSet.horizonMs;
284
+ // Confidence: max(0, 1 - CV) where CV = stdDev / |mean|
285
+ const mean = recent.reduce((a, b) => a + b.score, 0) / recent.length;
286
+ const variance = recent.reduce((a, b) => a + (b.score - mean) * (b.score - mean), 0) / recent.length;
287
+ const stdDev = Math.sqrt(variance);
288
+ const cv = Math.abs(mean) > 0 ? stdDev / Math.abs(mean) : 0;
289
+ const confidence = Math.max(0, Math.min(1, 1 - cv));
290
+ const stableThreshold = 0.001 / MS_PER_DAY;
291
+ return {
292
+ entityId,
293
+ dataPoints: points.length,
294
+ trend: (0, types_1.resolveTrendDirection)(slopePerMs, stableThreshold),
295
+ trendSlope: round(slopePerMs * MS_PER_DAY, 4),
296
+ confidence: round(confidence, 4),
297
+ confidenceBracket: (0, types_1.resolveConfidenceBracket)(confidence),
298
+ currentScore,
299
+ forecast: {
300
+ date: forecastDate,
301
+ dateIso: forecastDate.toISOString(),
302
+ predictedScore: round(predicted, 2)
303
+ },
304
+ thresholdCrossings: computeThresholdCrossings(currentScore, slopePerMs, asOf, ruleSet.thresholds),
305
+ model: {
306
+ strategy: 'weighted-moving-average',
307
+ params: {
308
+ weightedAverage: round(weightedAvg, 4),
309
+ window: windowSize,
310
+ slopePerDay: round(slopePerMs * MS_PER_DAY, 6)
311
+ }
312
+ }
313
+ };
314
+ }
315
+ // ========================================
316
+ // Shared Helpers
317
+ // ========================================
318
+ buildSinglePointPrediction(ruleSet, entityId, currentScore, asOf, forecastDate, strategy) {
319
+ // If defaultTrend is configured, use it as slope (per month -> per ms)
320
+ let slopePerMs = 0;
321
+ let trend = 'insufficient-data';
322
+ let predicted = currentScore;
323
+ if (ruleSet.defaultTrend !== undefined) {
324
+ slopePerMs = ruleSet.defaultTrend / MS_PER_MONTH;
325
+ predicted = currentScore + slopePerMs * ruleSet.horizonMs;
326
+ const stableThreshold = 0.001 / MS_PER_DAY;
327
+ trend = (0, types_1.resolveTrendDirection)(slopePerMs, stableThreshold);
328
+ }
329
+ return {
330
+ entityId,
331
+ dataPoints: 1,
332
+ trend,
333
+ trendSlope: round(slopePerMs * MS_PER_DAY, 4),
334
+ confidence: 0,
335
+ confidenceBracket: 'insufficient-data',
336
+ currentScore,
337
+ forecast: {
338
+ date: forecastDate,
339
+ dateIso: forecastDate.toISOString(),
340
+ predictedScore: round(predicted, 2)
341
+ },
342
+ thresholdCrossings: slopePerMs !== 0
343
+ ? computeThresholdCrossings(currentScore, slopePerMs, asOf, ruleSet.thresholds)
344
+ : [],
345
+ model: {
346
+ strategy,
347
+ params: {}
348
+ }
349
+ };
350
+ }
351
+ }
352
+ exports.PredictionExecutor = PredictionExecutor;
353
+ // ========================================
354
+ // Module-Level Helpers
355
+ // ========================================
356
+ function resolveDotPath(obj, path) {
357
+ const parts = path.split('.');
358
+ let current = obj;
359
+ for (const part of parts) {
360
+ if (current == null)
361
+ return undefined;
362
+ current = current[part];
363
+ }
364
+ return current;
365
+ }
366
+ function groupByEntity(facts, fields) {
367
+ const groups = new Map();
368
+ for (const fact of facts) {
369
+ const entityId = resolveDotPath(fact.data, fields.entityId);
370
+ const score = resolveDotPath(fact.data, fields.score);
371
+ const timestampRaw = resolveDotPath(fact.data, fields.timestamp);
372
+ if (entityId == null || score == null || timestampRaw == null)
373
+ continue;
374
+ const timestamp = typeof timestampRaw === 'string'
375
+ ? new Date(timestampRaw).getTime()
376
+ : typeof timestampRaw === 'number'
377
+ ? timestampRaw
378
+ : NaN;
379
+ if (isNaN(timestamp))
380
+ continue;
381
+ if (!groups.has(entityId)) {
382
+ groups.set(entityId, []);
383
+ }
384
+ groups.get(entityId).push({ score: Number(score), timestamp });
385
+ }
386
+ // Sort each group by timestamp ascending
387
+ for (const points of groups.values()) {
388
+ points.sort((a, b) => a.timestamp - b.timestamp);
389
+ }
390
+ return groups;
391
+ }
392
+ function computeThresholdCrossings(currentScore, slopePerMs, asOf, thresholds, tMin = 0) {
393
+ if (slopePerMs === 0 || thresholds.length === 0)
394
+ return [];
395
+ const crossings = [];
396
+ const now = tMin > 0 ? asOf + tMin : asOf; // adjust if tMin is a normalization offset
397
+ for (const threshold of thresholds) {
398
+ const diff = threshold.value - currentScore;
399
+ // Check if crossing is possible given direction of slope
400
+ if (threshold.direction === 'above') {
401
+ // Currently below threshold, trending up
402
+ if (currentScore < threshold.value && slopePerMs > 0) {
403
+ const msToThreshold = diff / slopePerMs;
404
+ const crossTime = now + msToThreshold;
405
+ const crossDate = new Date(crossTime);
406
+ crossings.push({
407
+ thresholdId: threshold.id,
408
+ thresholdName: threshold.name,
409
+ value: threshold.value,
410
+ direction: 'above',
411
+ estimatedAt: crossDate,
412
+ estimatedAtIso: crossDate.toISOString()
413
+ });
414
+ }
415
+ }
416
+ else {
417
+ // direction === 'below': currently above threshold, trending down
418
+ if (currentScore > threshold.value && slopePerMs < 0) {
419
+ const msToThreshold = diff / slopePerMs;
420
+ const crossTime = now + msToThreshold;
421
+ const crossDate = new Date(crossTime);
422
+ crossings.push({
423
+ thresholdId: threshold.id,
424
+ thresholdName: threshold.name,
425
+ value: threshold.value,
426
+ direction: 'below',
427
+ estimatedAt: crossDate,
428
+ estimatedAtIso: crossDate.toISOString()
429
+ });
430
+ }
431
+ }
432
+ }
433
+ return crossings;
434
+ }
435
+ function round(value, decimals) {
436
+ const factor = Math.pow(10, decimals);
437
+ return Math.round(value * factor) / factor;
438
+ }
439
+ /** Singleton instance */
440
+ exports.predictionStrategy = new PredictionExecutor();
441
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/engines/prediction/strategy.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAeH,mCAA0E;AAQ1E,6CAA6C;AAC7C,MAAM,UAAU,GAAG,UAAU,CAAC;AAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,CAAG,UAAU;AAEhD,MAAa,kBAAkB;IAC7B,GAAG,CACD,OAAkC,EAClC,EAAkB,EAClB,UAA6B,EAAE;QAE/B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAEhE,4BAA4B;QAC5B,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvF,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC9C,IAAI,UAA4B,CAAC;YAEjC,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,mBAAmB;oBACtB,UAAU,GAAG,IAAI,CAAC,mBAAmB,CACnC,OAA0C,EAC1C,QAAQ,EAAE,MAAM,EAAE,IAAI,CACvB,CAAC;oBACF,MAAM;gBACR,KAAK,uBAAuB;oBAC1B,UAAU,GAAG,IAAI,CAAC,uBAAuB,CACvC,OAA8C,EAC9C,QAAQ,EAAE,MAAM,EAAE,IAAI,CACvB,CAAC;oBACF,MAAM;gBACR,KAAK,yBAAyB;oBAC5B,UAAU,GAAG,IAAI,CAAC,wBAAwB,CACxC,OAA+C,EAC/C,QAAQ,EAAE,MAAM,EAAE,IAAI,CACvB,CAAC;oBACF,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,iCAAkC,OAAe,CAAC,QAAQ,GAAG,CAAC,CAAC;YACnF,CAAC;YAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;YAED,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAEhF,OAAO;YACL,WAAW;YACX,aAAa,EAAE,WAAW,CAAC,MAAM;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,oBAAoB;IACpB,2CAA2C;IAEnC,mBAAmB,CACzB,OAAwC,EACxC,QAAgB,EAChB,MAAmB,EACnB,IAAY;QAEZ,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,eAAe;QACf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,0BAA0B,CACpC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,mBAAmB,CACzE,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7C,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YAChE,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,oBAAoB;YAEzF,OAAO;gBACL,QAAQ;gBACR,UAAU,EAAE,CAAC;gBACb,KAAK,EAAE,IAAA,6BAAqB,EAAC,UAAU,EAAE,eAAe,CAAC;gBACzD,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;gBAC7C,UAAU,EAAE,GAAG;gBACf,iBAAiB,EAAE,IAAA,gCAAwB,EAAC,GAAG,CAAC;gBAChD,YAAY;gBACZ,QAAQ,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE;oBACnC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;iBACpC;gBACD,kBAAkB,EAAE,yBAAyB,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;gBACjG,KAAK,EAAE;oBACL,QAAQ,EAAE,mBAAmB;oBAC7B,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;iBACtF;aACF,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjC,+CAA+C;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACzB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QAExC,KAAK;QACL,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;YACvC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7E,wBAAwB;QACxB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;QAE5C,0BAA0B;QAC1B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAE5F,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC;QAEpE,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,IAAA,6BAAqB,EAAC,KAAK,EAAE,eAAe,CAAC;YACpD,UAAU,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC;YACxC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9B,iBAAiB,EAAE,IAAA,gCAAwB,EAAC,QAAQ,CAAC;YACrD,YAAY;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE;gBACnC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBACnC,kBAAkB,EAAE,MAAM,GAAG,CAAC;oBAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;oBAC9E,CAAC,CAAC,SAAS;aACd;YACD,kBAAkB,EAAE,yBAAyB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;YACzG,KAAK,EAAE;gBACL,QAAQ,EAAE,mBAAmB;gBAC7B,MAAM,EAAE;oBACN,WAAW,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC;oBACzC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,wCAAwC;IACxC,2CAA2C;IAEnC,uBAAuB,CAC7B,OAA4C,EAC5C,QAAgB,EAChB,MAAmB,EACnB,IAAY;QAEZ,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,eAAe;QACf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,0BAA0B,CACpC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,uBAAuB,CAC7E,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7C,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YAEhE,2DAA2D;YAC3D,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,CAAC;YAE3C,OAAO;gBACL,QAAQ;gBACR,UAAU,EAAE,CAAC;gBACb,KAAK,EAAE,IAAA,6BAAqB,EAAC,UAAU,EAAE,eAAe,CAAC;gBACzD,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;gBAC7C,UAAU,EAAE,GAAG;gBACf,iBAAiB,EAAE,IAAA,gCAAwB,EAAC,GAAG,CAAC;gBAChD,YAAY;gBACZ,QAAQ,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE;oBACnC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;iBACpC;gBACD,kBAAkB,EAAE,yBAAyB,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;gBACjG,KAAK,EAAE;oBACL,QAAQ,EAAE,uBAAuB;oBACjC,MAAM,EAAE;wBACN,KAAK,EAAE,YAAY;wBACnB,WAAW,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;wBAC9C,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;wBAC3B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;qBAC1B;iBACF;aACF,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEvC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5B,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE9C,wCAAwC;QACxC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAErC,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;YAChC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;YAE7C,MAAM,SAAS,GAAG,KAAK,CAAC;YACxB,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;YAC1D,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC1D,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtG,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;QAE7C,gDAAgD;QAChD,MAAM,GAAG,GAAG,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/F,uCAAuC;QACvC,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,CAAC;QAE3C,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,KAAK,EAAE,IAAA,6BAAqB,EAAC,UAAU,EAAE,eAAe,CAAC;YACzD,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;YAC7C,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChC,iBAAiB,EAAE,IAAA,gCAAwB,EAAC,UAAU,CAAC;YACvD,YAAY;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE;gBACnC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACpC;YACD,kBAAkB,EAAE,yBAAyB,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;YACjG,KAAK,EAAE;gBACL,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtB,WAAW,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;oBAC9C,KAAK;oBACL,IAAI;iBACL;aACF;SACF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,0BAA0B;IAC1B,2CAA2C;IAEnC,wBAAwB,CAC9B,OAA6C,EAC7C,QAAgB,EAChB,MAAmB,EACnB,IAAY;QAEZ,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,eAAe;QACf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,0BAA0B,CACpC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,yBAAyB,CAC/E,CAAC;QACJ,CAAC;QAED,YAAY;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAEzC,6CAA6C;QAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACnC,WAAW,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;QAE9C,wCAAwC;QACxC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YACzD,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B;gBAC3C,gBAAgB,IAAI,IAAI,GAAG,CAAC,CAAC;gBAC7B,gBAAgB,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QAE/D,wDAAwD;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACrG,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEpD,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,CAAC;QAE3C,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,KAAK,EAAE,IAAA,6BAAqB,EAAC,UAAU,EAAE,eAAe,CAAC;YACzD,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;YAC7C,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAChC,iBAAiB,EAAE,IAAA,gCAAwB,EAAC,UAAU,CAAC;YACvD,YAAY;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE;gBACnC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACpC;YACD,kBAAkB,EAAE,yBAAyB,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;YACjG,KAAK,EAAE;gBACL,QAAQ,EAAE,yBAAyB;gBACnC,MAAM,EAAE;oBACN,eAAe,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBACtC,MAAM,EAAE,UAAU;oBAClB,WAAW,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;iBAC/C;aACF;SACF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,iBAAiB;IACjB,2CAA2C;IAEnC,0BAA0B,CAChC,OAAkC,EAClC,QAAgB,EAChB,YAAoB,EACpB,IAAY,EACZ,YAAkB,EAClB,QAA+C;QAE/C,uEAAuE;QACvE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,GAA8B,mBAAmB,CAAC;QAC3D,IAAI,SAAS,GAAG,YAAY,CAAC;QAE7B,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;YACjD,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YAC1D,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,CAAC;YAC3C,KAAK,GAAG,IAAA,6BAAqB,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,CAAC;YACb,KAAK;YACL,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;YAC7C,UAAU,EAAE,CAAC;YACb,iBAAiB,EAAE,mBAAmB;YACtC,YAAY;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE;gBACnC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACpC;YACD,kBAAkB,EAAE,UAAU,KAAK,CAAC;gBAClC,CAAC,CAAC,yBAAyB,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;gBAC/E,CAAC,CAAC,EAAE;YACN,KAAK,EAAE;gBACL,QAAQ;gBACR,MAAM,EAAE,EAAE;aACX;SACF,CAAC;IACJ,CAAC;CACF;AA7aD,gDA6aC;AAED,2CAA2C;AAC3C,uBAAuB;AACvB,2CAA2C;AAE3C,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,MAA8D;IAE9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAEjE,IAAI,QAAQ,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI;YAAE,SAAS;QAExE,MAAM,SAAS,GAAG,OAAO,YAAY,KAAK,QAAQ;YAChD,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;YAClC,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ;gBAChC,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,GAAG,CAAC;QAEV,IAAI,KAAK,CAAC,SAAS,CAAC;YAAE,SAAS;QAE/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAChC,YAAoB,EACpB,UAAkB,EAClB,IAAY,EACZ,UAAiC,EACjC,OAAe,CAAC;IAEhB,IAAI,UAAU,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3D,MAAM,SAAS,GAAwB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,2CAA2C;IAEtF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;QAE5C,yDAAyD;QACzD,IAAI,SAAS,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YACpC,yCAAyC;YACzC,IAAI,YAAY,GAAG,SAAS,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,aAAa,GAAG,IAAI,GAAG,UAAU,CAAC;gBACxC,MAAM,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;gBACtC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtC,SAAS,CAAC,IAAI,CAAC;oBACb,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,aAAa,EAAE,SAAS,CAAC,IAAI;oBAC7B,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,SAAS,EAAE,OAAO;oBAClB,WAAW,EAAE,SAAS;oBACtB,cAAc,EAAE,SAAS,CAAC,WAAW,EAAE;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kEAAkE;YAClE,IAAI,YAAY,GAAG,SAAS,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,aAAa,GAAG,IAAI,GAAG,UAAU,CAAC;gBACxC,MAAM,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;gBACtC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtC,SAAS,CAAC,IAAI,CAAC;oBACb,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,aAAa,EAAE,SAAS,CAAC,IAAI;oBAC7B,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,SAAS,EAAE,OAAO;oBAClB,WAAW,EAAE,SAAS;oBACtB,cAAc,EAAE,SAAS,CAAC,WAAW,EAAE;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,QAAgB;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAC7C,CAAC;AAED,yBAAyB;AACZ,QAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Prediction Engine Types
3
+ *
4
+ * Trajectory forecasting engine that takes historical score snapshots,
5
+ * fits a model, and projects forward. Supports linear regression,
6
+ * exponential smoothing, and weighted moving average strategies.
7
+ */
8
+ /** Prediction algorithm to use */
9
+ export type PredictionStrategy = 'linear-regression' | 'exponential-smoothing' | 'weighted-moving-average';
10
+ /** Trend direction derived from slope */
11
+ export type TrendDirection = 'rising' | 'stable' | 'declining' | 'insufficient-data';
12
+ /** Exponential smoothing sensitivity presets */
13
+ export type SmoothingPreset = 'responsive' | 'balanced' | 'smooth';
14
+ /** Forecast horizon presets */
15
+ export type HorizonPreset = '1-day' | '1-week' | '1-month' | '3-months' | '6-months' | '1-year';
16
+ /** Human-readable confidence bracket */
17
+ export type ConfidenceBracket = 'high' | 'moderate' | 'low' | 'insufficient-data';
18
+ export declare const SMOOTHING_PRESET_VALUES: Record<SmoothingPreset, {
19
+ alpha: number;
20
+ beta: number;
21
+ }>;
22
+ export declare const HORIZON_PRESET_VALUES: Record<HorizonPreset, number>;
23
+ export declare function isSmoothingPreset(value: unknown): value is SmoothingPreset;
24
+ export declare function isHorizonPreset(value: unknown): value is HorizonPreset;
25
+ /** Map a confidence value (0-1) to a semantic bracket */
26
+ export declare function resolveConfidenceBracket(confidence: number): ConfidenceBracket;
27
+ /** Map a slope (per ms) to a semantic trend direction */
28
+ export declare function resolveTrendDirection(slopePerMs: number, stableThreshold: number): TrendDirection;
29
+ /** Configurable dot-path field mapping into fact.data */
30
+ export type FieldMapping = {
31
+ entityId: string;
32
+ score: string;
33
+ timestamp: string;
34
+ };
35
+ export type ThresholdDefinition = {
36
+ id: string;
37
+ name?: string;
38
+ value: number;
39
+ direction: 'above' | 'below';
40
+ };
41
+ export type LinearRegressionConfig = {
42
+ stableThreshold?: number;
43
+ };
44
+ export type ExponentialSmoothingConfig = {
45
+ smoothing?: SmoothingPreset | {
46
+ alpha: number;
47
+ beta: number;
48
+ };
49
+ };
50
+ export type WeightedMovingAverageConfig = {
51
+ window?: number;
52
+ };
53
+ type PredictionRuleSetBase = {
54
+ id: string;
55
+ name?: string;
56
+ mode: 'prediction';
57
+ snapshotType: string;
58
+ fields: FieldMapping;
59
+ horizon: HorizonPreset | number;
60
+ thresholds?: ThresholdDefinition[];
61
+ defaultTrend?: number;
62
+ };
63
+ export type LinearRegressionRuleSet = PredictionRuleSetBase & {
64
+ strategy: 'linear-regression';
65
+ config?: LinearRegressionConfig;
66
+ };
67
+ export type ExponentialSmoothingRuleSet = PredictionRuleSetBase & {
68
+ strategy: 'exponential-smoothing';
69
+ config?: ExponentialSmoothingConfig;
70
+ };
71
+ export type WeightedMovingAverageRuleSet = PredictionRuleSetBase & {
72
+ strategy: 'weighted-moving-average';
73
+ config?: WeightedMovingAverageConfig;
74
+ };
75
+ export type PredictionRuleSet = LinearRegressionRuleSet | ExponentialSmoothingRuleSet | WeightedMovingAverageRuleSet;
76
+ type CompiledPredictionRuleSetBase = {
77
+ id: string;
78
+ name?: string;
79
+ mode: 'prediction';
80
+ snapshotType: string;
81
+ fields: FieldMapping;
82
+ horizonMs: number;
83
+ thresholds: ThresholdDefinition[];
84
+ defaultTrend?: number;
85
+ };
86
+ export type CompiledLinearRegressionRuleSet = CompiledPredictionRuleSetBase & {
87
+ strategy: 'linear-regression';
88
+ config: {
89
+ stableThreshold: number;
90
+ };
91
+ };
92
+ export type CompiledExponentialSmoothingRuleSet = CompiledPredictionRuleSetBase & {
93
+ strategy: 'exponential-smoothing';
94
+ config: {
95
+ alpha: number;
96
+ beta: number;
97
+ };
98
+ };
99
+ export type CompiledWeightedMovingAverageRuleSet = CompiledPredictionRuleSetBase & {
100
+ strategy: 'weighted-moving-average';
101
+ config: {
102
+ window: number;
103
+ };
104
+ };
105
+ export type CompiledPredictionRuleSet = CompiledLinearRegressionRuleSet | CompiledExponentialSmoothingRuleSet | CompiledWeightedMovingAverageRuleSet;
106
+ export type ThresholdCrossing = {
107
+ thresholdId: string;
108
+ thresholdName?: string;
109
+ value: number;
110
+ direction: 'above' | 'below';
111
+ estimatedAt: Date;
112
+ estimatedAtIso: string;
113
+ };
114
+ export type Forecast = {
115
+ date: Date;
116
+ dateIso: string;
117
+ predictedScore: number;
118
+ confidenceInterval?: {
119
+ lower: number;
120
+ upper: number;
121
+ };
122
+ };
123
+ export type EntityPrediction = {
124
+ entityId: string;
125
+ dataPoints: number;
126
+ trend: TrendDirection;
127
+ trendSlope: number;
128
+ confidence: number;
129
+ confidenceBracket: ConfidenceBracket;
130
+ currentScore: number;
131
+ forecast: Forecast;
132
+ thresholdCrossings: ThresholdCrossing[];
133
+ model: {
134
+ strategy: PredictionStrategy;
135
+ params: Record<string, number>;
136
+ };
137
+ };
138
+ export type PredictionResult = {
139
+ predictions: EntityPrediction[];
140
+ totalEntities: number;
141
+ strategy: PredictionStrategy;
142
+ horizonMs: number;
143
+ executionTimeMs: number;
144
+ };
145
+ export type PredictionOptions = {
146
+ onPredict?: (prediction: EntityPrediction) => void;
147
+ asOf?: Date;
148
+ };
149
+ export {};
150
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/prediction/types.ts"],"names":[],"mappings":"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"}