export type EstimationStrategy = "story_points" | "fibonacci" | "planning_poker" | "affinity" | "t_shirt" | "ideal_days" | "ideal_hours" | "three_point"; export type JiraTarget = "story_points" | "time" | "none"; export interface EstimationConfig { strategy: EstimationStrategy; /** Valid values for point-like strategies; when absent, raw value is used. */ scale?: number[]; jiraTarget: JiraTarget; /** Required when jiraTarget = "story_points" */ fieldId?: string; /** Required when strategy = "t_shirt" */ sizeMap?: Record; } export interface ThreePointEstimate { optimistic: number; likely: number; pessimistic: number; } export type EstimateInput = number | string | ThreePointEstimate; export interface NormalizedEstimate { /** Numeric; set for point-like and three_point strategies. */ points?: number; /** Jira originalEstimate string (e.g. "3d", "4h"); set for time-like strategies. */ timeString?: string; /** Original preserved for description footer. */ humanReadable: string; jiraTarget: JiraTarget; } export type NormalizeResult = { ok: true; value: NormalizedEstimate; } | { ok: false; error: string; }; /** * Snap `n` to the nearest value in `scale`. * Exact tie (equidistant) → the **higher** value wins. */ export declare function snapToScale(n: number, scale: number[]): number; /** * Normalize an estimation input into a canonical form. * * Never throws — all errors are returned as `{ ok: false, error }`. * `jiraTarget` is always copied verbatim from `config`; the adapter decides * whether/where to write the value. */ export declare function normalizeEstimate(input: EstimateInput, config: EstimationConfig): NormalizeResult; //# sourceMappingURL=estimation.d.ts.map