export interface RmForecast {
    id: string;
    event_id: string;
    league: string;
    home_team: string;
    away_team: string;
    forecast_data: any;
    confidence_score: number;
    starts_at: string;
    expires_at: string;
    created_at: string;
    odds_data: any;
    odds_updated_at: string | null;
    composite_confidence: number | null;
    model_signals: any;
    composite_version: string | null;
    last_refresh_at: string | null;
    last_refresh_type: string | null;
    refresh_count: number;
    material_change: any;
    input_quality: any;
    narrative_metadata: any;
}
export declare function getCachedForecast(eventId: string): Promise<RmForecast | null>;
/**
 * Resolve any event ID (SGO random or custom) to the canonical rm_events event_id.
 * Returns the rm_events.event_id if a match is found by team+date, otherwise the original ID.
 */
export declare function resolveCanonicalEventId(eventId: string, homeTeam: string, awayTeam: string, startsAt: string): Promise<string>;
/** Fallback: find cached forecast by team names + date (handles SGO vs custom ID mismatch) */
export declare function getCachedForecastByTeams(homeTeam: string, awayTeam: string, startsAt: string): Promise<RmForecast | null>;
export declare function cacheForecast(data: {
    eventId: string;
    league: string;
    homeTeam: string;
    awayTeam: string;
    forecastData: any;
    confidenceScore: number;
    startsAt: string;
    expiresAt: string;
    oddsData?: any;
}): Promise<RmForecast>;
/** Update only the odds on a cached forecast (no Grok re-generation) */
export declare function updateCachedOdds(eventId: string, oddsData: any): Promise<void>;
export declare function getTodayForecasts(): Promise<RmForecast[]>;
export declare function getAllForecasts(limit?: number): Promise<RmForecast[]>;
export declare function getResolvedForecasts(): Promise<any[]>;
export declare function getAccuracyByBucket(): Promise<any[]>;
//# sourceMappingURL=forecast.d.ts.map