/** V2 uses visible, dated product evidence. The historical 6.9 selector is separate. */ export declare const OPPORTUNITY_VERSION: "fastmoss-evidence-v2"; export declare const MARKETS: { MX: string; US: string; GB: string; BR: string; DE: string; ES: string; FR: string; IT: string; ID: string; TH: string; VN: string; PH: string; MY: string; JP: string; SG: string; AT: string; BE: string; NL: string; PL: string; PT: string; }; export type Ranking = "sales" | "new" | "hot" | "video"; export declare const RANKINGS: Record; export type SelectionConfig = { market: string; categories: string[]; /** Legacy single-category sessions. */ category?: string; opportunity: "all" | "emerging" | "rebound"; candidateLimit: number; detailLimit: number; }; type CategoryScope = Pick, "categories" | "category">; export declare function selectionCategories(input: CategoryScope): string[]; /** Match any selected visible category keyword; an empty scope means all categories. */ export declare function matchesCategory(category: string, config: CategoryScope): boolean; export type Period = { start: string; end: string; timeZone: string; }; export type EvidenceRef = { url: string; section: string; observedAt: string; period: Period | null; }; export type DailySale = { date: string; units: number | null; ref: EvidenceRef; }; export type VideoSale = { id: string; url: string; creatorId: string | null; creatorName: string; published: string; units: number | null; ad: boolean | null; ref: EvidenceRef; }; export type ProductEvidence = { version: typeof OPPORTUNITY_VERSION; productId: string; market: string; title: string; url: string; category: string; storeName: string; imageUrls: string[]; discoveredAt: string; rankings: Array<{ source: Ranking; position: number; ref: EvidenceRef; }>; identityVerified: boolean; currency: string | null; listingDate: string | null; price: number | null; stock: number | null; rating: number | null; priceBasis?: "7天成交均价"; stockText?: string; reviewCount?: number | null; daily: DailySale[]; videos: VideoSale[]; overview: { ref: EvidenceRef; units?: number | null; unitsTolerance?: number; videoShare: number | null; liveShare: number | null; adShare: number | null; otherShare: number | null; } | null; missing: string[]; detailState: "pending" | "running" | "complete" | "failed"; error?: string; }; export type Assessment = { decision: "test" | "watch" | "skip"; opportunity: "emerging" | "rebound" | "unconfirmed"; reasons: string[]; risks: string[]; missing: string[]; cutoff: string | null; recentUnits: number | null; previousUnits: number | null; growthPercent: number | null; increment: number | null; newVideoUnits: number | null; newVideoCount: number; convertingCreators: number; topCreatorShare: number | null; reboundWindows: Array<{ start: string; end: string; units: number; }>; }; export declare function selectionConfig(input: Partial): SelectionConfig; /** Missing, rounded lower bounds and ranges must never silently become exact zero. */ export declare function visibleNumber(value: unknown): number | null; export declare const isoDate: (value: string) => boolean; export declare const dayOffset: (date: string, days: number) => string; export declare const samePeriod: (a: Period | null, b: Period | null) => boolean; export declare function assessOpportunity(product: ProductEvidence, config: SelectionConfig, now?: Date): Assessment; export declare function opportunityCandidate(product: ProductEvidence, config: SelectionConfig, sessionId: string): { source: string; sourceProductId: string; platformProductId: string; title: string; market: string; category: string; storeName: string; productUrl: string; imageUrls: string[]; metrics: { strategy: "fastmoss-evidence-v2"; selectionSessionId: string; selectionDecision: "test" | "watch" | "skip"; selectionEligible: boolean; portfolioSelected: boolean; selectionReasons: string[]; selectionRisks: string[]; sales: number | null; growthPercent: number | null; price: number | null; currency: string | null; captureDate: string; sourceVerified: boolean; opportunityAssessment: Assessment; opportunityEvidence: ProductEvidence; }; }; export {};