import { TheOddsBookmaker } from './the-odds';
export interface RainmakerMoneyline {
    home: number | null;
    away: number | null;
}
export interface RainmakerSpreadSide {
    line: number | null;
    odds: number | null;
}
export interface RainmakerTotalSide {
    line: number | null;
    odds: number | null;
}
export interface RainmakerPublicEvent {
    id: string;
    league: string;
    homeTeam: string;
    awayTeam: string;
    startsAt: string;
    moneyline: RainmakerMoneyline;
    spread: {
        home: RainmakerSpreadSide | null;
        away: RainmakerSpreadSide | null;
    };
    total: {
        over: RainmakerTotalSide | null;
        under: RainmakerTotalSide | null;
    };
    forecastStatus: string;
    forecastMeta?: {
        confidence?: number | null;
        forecastSide?: string | null;
    } | null;
}
export interface RainmakerPublicEventsFeed {
    totalEvents: number;
    leagues: string[];
    events: Record<string, RainmakerPublicEvent[]>;
}
export interface TheOddsCurrentEvent {
    id: string;
    sport_key: string;
    sport_title: string;
    commence_time: string;
    home_team: string;
    away_team: string;
    bookmakers: TheOddsBookmaker[];
}
export type ForecastAuditIssueCode = 'event_unmatched' | 'start_time_mismatch' | 'ready_without_confidence' | 'moneyline_out_of_range' | 'spread_out_of_range' | 'total_out_of_range';
export interface ForecastAuditNumberComparison {
    available: boolean;
    exact: boolean;
    within: boolean;
    deltaFromMedian: number | null;
    range: {
        min: number;
        max: number;
    } | null;
    median: number | null;
    sampleSize: number;
}
export interface ForecastAuditEventReport {
    league: string;
    eventId: string;
    matchup: string;
    forecastStatus: string;
    forecastSide: string | null;
    confidence: number | null;
    thirdPartyEventId: string | null;
    thirdPartyBooks: number;
    startDeltaMin: number | null;
    issues: ForecastAuditIssueCode[];
    moneyline: {
        home: ForecastAuditNumberComparison;
        away: ForecastAuditNumberComparison;
    };
    spread: {
        homeLine: ForecastAuditNumberComparison;
        awayLine: ForecastAuditNumberComparison;
        homeOdds: ForecastAuditNumberComparison;
        awayOdds: ForecastAuditNumberComparison;
    };
    total: {
        overLine: ForecastAuditNumberComparison;
        underLine: ForecastAuditNumberComparison;
        overOdds: ForecastAuditNumberComparison;
        underOdds: ForecastAuditNumberComparison;
    };
}
export interface ForecastAuditSummary {
    rainmakerEvents: number;
    matchedEvents: number;
    unmatchedEvents: number;
    readyForecasts: number;
    generatingForecasts: number;
    readyWithoutConfidence: number;
    exactStartTimes: number;
    startTimeMismatches: number;
    moneylineSidesOutsideRange: number;
    spreadSidesOutsideRange: number;
    totalSidesOutsideRange: number;
}
export interface ForecastAuditExactRollups {
    exactMoneylineSides: number;
    exactSpreadLineSides: number;
    exactSpreadOddsSides: number;
    exactTotalLineSides: number;
    exactTotalOddsSides: number;
}
export interface ForecastAuditIssueCounts {
    event_unmatched: number;
    start_time_mismatch: number;
    ready_without_confidence: number;
    moneyline_out_of_range: number;
    spread_out_of_range: number;
    total_out_of_range: number;
}
export interface ForecastFeedAuditReport {
    auditedAt: string;
    summary: ForecastAuditSummary;
    exactRollups: ForecastAuditExactRollups;
    issueCounts: ForecastAuditIssueCounts;
    startDeltaDistribution: Array<{
        delta: number;
        count: number;
    }>;
    issueEventCount: number;
    passed: boolean;
    events: ForecastAuditEventReport[];
}
export declare function flattenRainmakerEventsFeed(feed: RainmakerPublicEventsFeed): RainmakerPublicEvent[];
export declare function filterRainmakerFeedByEtDate(feed: RainmakerPublicEventsFeed, dateEt: string): RainmakerPublicEventsFeed;
export declare function matchRainmakerEvent(event: RainmakerPublicEvent, candidates: TheOddsCurrentEvent[]): {
    event: TheOddsCurrentEvent;
    score: number;
    deltaMs: number;
} | null;
export declare function buildForecastFeedAuditReport(params: {
    feed: RainmakerPublicEventsFeed;
    thirdPartyByLeague: Record<string, TheOddsCurrentEvent[]>;
    auditedAt?: string;
}): ForecastFeedAuditReport;
export declare function renderForecastFeedAuditMarkdown(report: ForecastFeedAuditReport): string;
//# sourceMappingURL=forecast-feed-audit.d.ts.map