export type PlayerPropSignalTier = 'STRONG' | 'GOOD' | 'FAIR' | 'COIN_FLIP';
export type SurfaceablePlayerPropSignalTier = Extract<PlayerPropSignalTier, 'FAIR' | 'GOOD' | 'STRONG'>;
export type PlayerPropDirection = 'OVER' | 'UNDER' | null;
export interface PlayerPropSignalInput {
    player?: string | null;
    team?: string | null;
    teamSide?: 'home' | 'away' | null;
    league?: string | null;
    prop?: string | null;
    statType?: string | null;
    normalizedStatType?: string | null;
    marketLine?: number | null;
    odds?: number | null;
    projectedProbability?: number | null;
    projectedOutcome?: number | null;
    edgePct?: number | null;
    recommendation?: string | null;
    playerRole?: string | null;
    modelContext?: Record<string, any> | null;
    marketSource?: string | null;
    marketCompletenessStatus?: 'source_complete' | 'multi_source_complete' | 'incomplete' | null;
    sourceBacked?: boolean | null;
    marketQualityScore?: number | null;
    clvFitScore?: number | null;
}
export interface PlayerPropSignalRow {
    propType: string;
    marketLine: number | null;
    odds: number | null;
    marketImpliedProbability: number | null;
    forecastDirection: Extract<PlayerPropDirection, 'OVER' | 'UNDER'>;
    projectedProbability: number | null;
    projectedOutcome: number | null;
    edgePct: number | null;
    signal: SurfaceablePlayerPropSignalTier;
}
export interface RankedPlayerPropSignal extends QualifiedPlayerPropSignal {
    rawRankScore: number;
    rankScore: number;
    rankPosition: number;
}
export interface QualifiedPlayerPropSignal extends PlayerPropSignalInput {
    forecastDirection: Extract<PlayerPropDirection, 'OVER' | 'UNDER'>;
    marketImpliedProbability: number;
    projectedProbability: number;
    projectedOutcome: number | null;
    edgePct: number;
    signalTier: SurfaceablePlayerPropSignalTier;
    signalLabel: string;
    tableRow: PlayerPropSignalRow;
    agreementScore: number;
    agreementLabel: 'LOW' | 'MEDIUM' | 'HIGH';
    agreementSources: string[];
    marketQualityScore: number;
    marketQualityLabel: 'WEAK' | 'FAIR' | 'GOOD' | 'STRONG';
}
export interface DerivedPlayerPropMetadata extends PlayerPropSignalInput {
    forecastDirection: Extract<PlayerPropDirection, 'OVER' | 'UNDER'>;
    marketImpliedProbability: number;
    projectedProbability: number;
    projectedOutcome: number | null;
    edgePct: number;
    signalTier: PlayerPropSignalTier | null;
    signalLabel: string | null;
    tableRow: PlayerPropSignalRow | null;
    agreementScore: number;
    agreementLabel: 'LOW' | 'MEDIUM' | 'HIGH';
    agreementSources: string[];
    marketQualityScore: number;
    marketQualityLabel: 'WEAK' | 'FAIR' | 'GOOD' | 'STRONG';
}
export declare function americanOddsToImpliedProbability(odds: number | null | undefined): number | null;
export declare function inferMarketImpliedProbabilityFromEdge(projectedProbability: number | null | undefined, edgePct: number | null | undefined): number | null;
export declare function normalizePlayerPropDirection(value: string | null | undefined): PlayerPropDirection;
export declare function classifyPlayerPropSignal(edgePct: number | null | undefined): PlayerPropSignalTier;
export declare function isSurfaceablePlayerPropSignal(tier: PlayerPropSignalTier): boolean;
export declare function getPlayerPropSignalRank(tier: PlayerPropSignalTier | null | undefined): number;
export declare function getPlayerPropTypeLabel(input: PlayerPropSignalInput): string;
export declare function buildPlayerPropMetadata(input: PlayerPropSignalInput): DerivedPlayerPropMetadata | null;
export declare function buildPlayerPropSignal(input: PlayerPropSignalInput): QualifiedPlayerPropSignal | null;
export declare function explainPlayerPropMetadataRejection(input: PlayerPropSignalInput): string | null;
export declare function computeTopPropRawScore(signal: QualifiedPlayerPropSignal, confidenceFactor?: number | null): number;
export declare function rankQualifiedSignals(signals: Array<QualifiedPlayerPropSignal & {
    confidenceFactor?: number | null;
}>, limits?: {
    maxPropsPerPlayer?: number;
    maxPerPropTypePerPlayer?: number;
    limit?: number;
}): RankedPlayerPropSignal[];
export declare function groupQualifiedSignalsByPlayer(signals: QualifiedPlayerPropSignal[]): Array<{
    player: string;
    team: string | null;
    teamSide: 'home' | 'away' | null;
    playerRole: string | null;
    strongestSignal: SurfaceablePlayerPropSignalTier;
    maxEdgePct: number;
    props: PlayerPropSignalRow[];
}>;
//# sourceMappingURL=player-prop-signals.d.ts.map