export declare const PROVINCES: Record<string, {
    name: string;
    pinyin: string;
}>;
export declare function resolveProvince(input: string): string | null;
export declare const EXAM_TYPES: {
    readonly guokao: "国家公务员考试";
    readonly beijing: "北京市公务员考试";
    readonly shengkao: "省级公务员考试（各省省考）";
    readonly xiaofang: "国家综合性消防救援队伍消防员招录（退役士兵专项）";
    readonly shiye: "事业单位招聘（退役专项/定向）";
};
export type ExamType = keyof typeof EXAM_TYPES;
export declare const EDUCATION_LEVELS: readonly ["本科", "硕士研究生", "博士研究生", "大专", "本科及以上", "硕士研究生及以上", "博士研究生及以上", "仅限本科", "仅限硕士研究生", "仅限博士研究生"];
export declare const POLITICAL_STATUS: readonly ["中共党员", "中共党员或共青团员", "不限"];
export declare const INST_TYPES: readonly ["中央党群机关", "中央国家行政机关本级", "中央国家行政机关省级以下直属机构", "中央国家行政机关参照公务员法管理事业单位"];
export type ProgramTag = "退役士兵" | "基层项目";
/**
 * 从岗位文本（建议拼接 remarks + 职位名称 + 职位简介等字段）识别专项定向标签。
 *   - "退役士兵": 出现"退役士兵/退役大学生士兵"——覆盖纯退役专项岗 + 退役士兵也能报的合并定向岗。
 *   - "基层项目": 面向大学生村官/三支一扶/特岗教师/西部计划等服务基层项目人员的定向岗。
 * 国考中退役士兵专项常与服务基层项目人员合并在同一定向计划招录，故两个标签会大量重叠。
 */
export declare function classifyPrograms(text: string): ProgramTag[];
export type Position = {
    id: string;
    year: number;
    exam: ExamType;
    dept_code: string;
    dept_name: string;
    bureau: string;
    inst_type: string;
    inst_level: string;
    position_name: string;
    position_attr: string;
    position_dist: string;
    position_desc: string;
    exam_category: string;
    headcount: number;
    education: string;
    degree: string;
    major: string;
    political: string;
    grassroots_years: string;
    work_location: string;
    remarks: string;
    programs: ProgramTag[];
    province?: string;
    channel?: string;
    service_year?: string;
    source?: string;
    supplementary?: boolean;
};
export type Cutoff = {
    year: number;
    exam: ExamType;
    national_lines: {
        central: {
            total: number;
            xingce: number;
        };
        provincial: {
            total: number;
            xingce: number;
        };
        western: {
            total: number;
            xingce: number;
        };
        special: {
            total: number;
            xingce: number;
        };
    };
    positions?: Array<{
        position_id: string;
        min_score: number;
        avg_score?: number;
        max_score?: number;
    }>;
};
export type ShengkaoCoverage = {
    year: number;
    full_positions: number;
    completeness: "full" | "vet_only" | "partial";
};
export type PositionIndex = {
    meta: {
        built_at: string;
        version: string;
        exams: ExamType[];
        years: number[];
        total_positions: number;
        shengkao_coverage?: Record<string, ShengkaoCoverage>;
    };
    positions: Position[];
};
