feat: visualize ranked event opportunities

This commit is contained in:
2026-08-22 18:44:59 +08:00
parent f3f8a0bb99
commit 2f856db441
6 changed files with 682 additions and 94 deletions

View File

@@ -907,19 +907,73 @@ export interface components {
expectedAmountRial: components["schemas"]["GrowthRange"];
historicalEvidenceId: string;
};
GrowthUpcomingEvent: {
GrowthHistoricalEventEvidence: {
/** Format: date-time */
priorStartDate: string;
/** Format: date-time */
priorEndDate: string;
/** @description Number of eligible comparison windows used to establish the baseline. */
observationCount: number;
/** Format: int64 */
paidSessionUpliftBps: number;
/** Format: int64 */
amountUpliftBps: number;
materialWin: boolean;
materialDecline: boolean;
};
GrowthProfileEventEvidence: {
matchedSignals: string[];
historyUnavailableReason?: components["schemas"]["GrowthHistoryUnavailableReason"];
};
/** @enum {string} */
GrowthHistoryUnavailableReason: "INSUFFICIENT_BASELINE_OBSERVATIONS" | "INSUFFICIENT_BASELINE_SESSIONS" | "INSUFFICIENT_HISTORY" | "INCOMPLETE_EVENT_WINDOW" | "INSUFFICIENT_COHORT" | "TERMINAL_SCOPE_UNSUPPORTED";
GrowthUpcomingEventCommon: {
evidenceId: string;
eventId: string;
occasionKey: string;
/** @enum {string} */
eventVariant: "PRIMARY" | "CAMPAIGN_WINDOW" | "OPERATIONAL_WINDOW";
eventTitleFa: string;
/** Format: date-time */
date: string;
/** Format: date-time */
endDate: string;
eventType: string;
officialHoliday: boolean;
merchantCategories: string[];
behavioralChannels: string[];
};
GrowthUpcomingHistoricalEvent: components["schemas"]["GrowthUpcomingEventCommon"] & {
/** @enum {string} */
insightBasis: "HISTORICAL";
historicalEvidence: components["schemas"]["GrowthHistoricalEventEvidence"];
} & {
/**
* @description discriminator enum property added by openapi-typescript
* @enum {string}
*/
insightBasis: "HISTORICAL";
};
GrowthUpcomingProfileEvent: components["schemas"]["GrowthUpcomingEventCommon"] & {
/** @enum {string} */
insightBasis: "BUSINESS_PROFILE";
profileEvidence: components["schemas"]["GrowthProfileEventEvidence"];
} & {
/**
* @description discriminator enum property added by openapi-typescript
* @enum {string}
*/
insightBasis: "BUSINESS_PROFILE";
};
GrowthUpcomingEvent: components["schemas"]["GrowthUpcomingHistoricalEvent"] | components["schemas"]["GrowthUpcomingProfileEvent"];
/** @description Exactly three recommendations are returned in descending priority order. Their positive integer priorityPercent values sum to 100. */
GrowthEventRecommendation: {
evidenceId: string;
priorityPercent: number;
/** @enum {string} */
stance: "PROMOTE" | "PREPARE" | "CAUTION";
/** @enum {string} */
insightBasis: "HISTORICAL" | "BUSINESS_PROFILE";
relevanceReason: string;
};
GrowthRisk: {
@@ -977,6 +1031,7 @@ export interface components {
category: string;
niches: string[];
salesChannels: string[];
businessDescriptions?: string[];
};
};
GrowthReport: {
@@ -991,6 +1046,7 @@ export interface components {
horizonDays: 90;
deterministicEvidence?: components["schemas"]["GrowthEvidence"];
aiCopy?: {
/** @description Ranked in descending priorityPercent order; the three percentages sum to exactly 100. */
eventRecommendations: components["schemas"]["GrowthEventRecommendation"][];
};
failureCode?: string;