{"reportId":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","traceId":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","status":"success","stage":"completed","henanGroupAssemblySummary":null,"requestedHenanGroupBucketTargets":null,"henanGroupTargetSummary":null,"currentStep":"report.state.completed","lastFailedStep":null,"stepCount":8,"steps":[{"seq":1,"spanId":"span_e5e3c326-e7ca-4621-ba98-964f5b02b946","parentSpanId":null,"layer":"service","stepCode":"report.record.created","stepName":"Create report record","status":"success","startedAt":"2026-05-26T20:18:22.491+00:00","endedAt":"2026-05-26T20:18:22.491+00:00","durationMs":0,"errorCode":null,"errorMessage":null,"inputSummary":{"formMode":null,"province":"河南","subjectType":"物理、化学、地理"},"outputSummary":{"stage":"created","reportId":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1"},"raw":{"id":64,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_e5e3c326-e7ca-4621-ba98-964f5b02b946","parent_span_id":null,"seq":1,"layer":"service","step_code":"report.record.created","step_name":"Create report record","status":"success","input_summary":{"formMode":null,"province":"河南","subjectType":"物理、化学、地理"},"output_summary":{"stage":"created","reportId":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:22.491+00:00","ended_at":"2026-05-26T20:18:22.491+00:00","duration_ms":0,"created_at":"2026-05-27T04:18:22+00:00","updated_at":"2026-05-27T04:18:22+00:00"}},{"seq":2,"spanId":"span_46a1dc74-6551-4ddd-a0b8-475fae02c310","parentSpanId":null,"layer":"service","stepCode":"report.state.queued","stepName":"Queue report generation","status":"success","startedAt":"2026-05-26T20:18:22.491+00:00","endedAt":"2026-05-26T20:18:22.492+00:00","durationMs":1,"errorCode":null,"errorMessage":null,"inputSummary":{"reportId":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1"},"outputSummary":{"stage":"queued","status":"pending"},"raw":{"id":65,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_46a1dc74-6551-4ddd-a0b8-475fae02c310","parent_span_id":null,"seq":2,"layer":"service","step_code":"report.state.queued","step_name":"Queue report generation","status":"success","input_summary":{"reportId":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1"},"output_summary":{"stage":"queued","status":"pending"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:22.491+00:00","ended_at":"2026-05-26T20:18:22.492+00:00","duration_ms":1,"created_at":"2026-05-27T04:18:22+00:00","updated_at":"2026-05-27T04:18:22+00:00"}},{"seq":3,"spanId":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","parentSpanId":null,"layer":"service","stepCode":"report.generation.run","stepName":"Run report generation pipeline","status":"success","startedAt":"2026-05-26T20:18:22.503+00:00","endedAt":"2026-05-26T20:18:50.356+00:00","durationMs":27853,"errorCode":null,"errorMessage":null,"inputSummary":{"source":"after_response"},"outputSummary":{"stage":"completed","source":"after_response","status":"success"},"raw":{"id":66,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","parent_span_id":null,"seq":3,"layer":"service","step_code":"report.generation.run","step_name":"Run report generation pipeline","status":"success","input_summary":{"source":"after_response"},"output_summary":{"stage":"completed","source":"after_response","status":"success"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:22.503+00:00","ended_at":"2026-05-26T20:18:50.356+00:00","duration_ms":27853,"created_at":"2026-05-27T04:18:22+00:00","updated_at":"2026-05-27T04:18:50+00:00"}},{"seq":4,"spanId":"span_81de9d8d-2dc7-4b34-a281-92fb088e2ad6","parentSpanId":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","layer":"service","stepCode":"report.state.generating","stepName":"Set report state generating","status":"success","startedAt":"2026-05-26T20:18:22.504+00:00","endedAt":"2026-05-26T20:18:22.505+00:00","durationMs":1,"errorCode":null,"errorMessage":null,"inputSummary":null,"outputSummary":{"stage":"generating","status":"pending"},"raw":{"id":67,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_81de9d8d-2dc7-4b34-a281-92fb088e2ad6","parent_span_id":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","seq":4,"layer":"service","step_code":"report.state.generating","step_name":"Set report state generating","status":"success","input_summary":null,"output_summary":{"stage":"generating","status":"pending"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:22.504+00:00","ended_at":"2026-05-26T20:18:22.505+00:00","duration_ms":1,"created_at":"2026-05-27T04:18:22+00:00","updated_at":"2026-05-27T04:18:22+00:00"}},{"seq":5,"spanId":"span_75f91074-8db2-4e61-860b-672123051ce9","parentSpanId":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","layer":"service","stepCode":"report.generation.execute","stepName":"Generate report content","status":"success","startedAt":"2026-05-26T20:18:22.505+00:00","endedAt":"2026-05-26T20:18:50.343+00:00","durationMs":27838,"errorCode":null,"errorMessage":null,"inputSummary":{"source":"after_response"},"outputSummary":{"hasContent":true,"contentType":"object"},"raw":{"id":68,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_75f91074-8db2-4e61-860b-672123051ce9","parent_span_id":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","seq":5,"layer":"service","step_code":"report.generation.execute","step_name":"Generate report content","status":"success","input_summary":{"source":"after_response"},"output_summary":{"hasContent":true,"contentType":"object"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:22.505+00:00","ended_at":"2026-05-26T20:18:50.343+00:00","duration_ms":27838,"created_at":"2026-05-27T04:18:22+00:00","updated_at":"2026-05-27T04:18:50+00:00"}},{"seq":6,"spanId":"span_beb7460c-4328-47f2-9c9b-af4b859c019c","parentSpanId":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","layer":"service","stepCode":"report.state.post_processing","stepName":"Set report state post processing","status":"success","startedAt":"2026-05-26T20:18:50.343+00:00","endedAt":"2026-05-26T20:18:50.345+00:00","durationMs":2,"errorCode":null,"errorMessage":null,"inputSummary":null,"outputSummary":{"stage":"post_processing","status":"pending"},"raw":{"id":69,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_beb7460c-4328-47f2-9c9b-af4b859c019c","parent_span_id":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","seq":6,"layer":"service","step_code":"report.state.post_processing","step_name":"Set report state post processing","status":"success","input_summary":null,"output_summary":{"stage":"post_processing","status":"pending"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:50.343+00:00","ended_at":"2026-05-26T20:18:50.345+00:00","duration_ms":2,"created_at":"2026-05-27T04:18:50+00:00","updated_at":"2026-05-27T04:18:50+00:00"}},{"seq":7,"spanId":"span_1969e5ea-4012-401b-8d9e-020bcffa947b","parentSpanId":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","layer":"service","stepCode":"report.content.saved","stepName":"Persist report content","status":"success","startedAt":"2026-05-26T20:18:50.345+00:00","endedAt":"2026-05-26T20:18:50.348+00:00","durationMs":3,"errorCode":null,"errorMessage":null,"inputSummary":null,"outputSummary":{"hasContent":true},"raw":{"id":70,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_1969e5ea-4012-401b-8d9e-020bcffa947b","parent_span_id":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","seq":7,"layer":"service","step_code":"report.content.saved","step_name":"Persist report content","status":"success","input_summary":null,"output_summary":{"hasContent":true},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:50.345+00:00","ended_at":"2026-05-26T20:18:50.348+00:00","duration_ms":3,"created_at":"2026-05-27T04:18:50+00:00","updated_at":"2026-05-27T04:18:50+00:00"}},{"seq":8,"spanId":"span_4cb92b54-3471-4ed5-85bd-d8530420432f","parentSpanId":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","layer":"service","stepCode":"report.state.completed","stepName":"Set report state completed","status":"success","startedAt":"2026-05-26T20:18:50.348+00:00","endedAt":"2026-05-26T20:18:50.355+00:00","durationMs":7,"errorCode":null,"errorMessage":null,"inputSummary":null,"outputSummary":{"stage":"completed","status":"success"},"raw":{"id":71,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","span_id":"span_4cb92b54-3471-4ed5-85bd-d8530420432f","parent_span_id":"span_1bc431eb-650a-46cf-9a47-85793ca1ac4d","seq":8,"layer":"service","step_code":"report.state.completed","step_name":"Set report state completed","status":"success","input_summary":null,"output_summary":{"stage":"completed","status":"success"},"error_code":null,"error_message":null,"started_at":"2026-05-26T20:18:50.348+00:00","ended_at":"2026-05-26T20:18:50.355+00:00","duration_ms":7,"created_at":"2026-05-27T04:18:50+00:00","updated_at":"2026-05-27T04:18:50+00:00"}}],"eventCount":8,"aiCallCount":1,"promptRecordCount":1,"latestPromptRecord":{"id":27,"run_key":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1:037967eb-69e5-4fbe-ac83-54e9adc08830","report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","generation_attempt_no":1,"generation_source":"after_response","run_origin":"after_response","prompt_version":"report-v2-rank-first","request_kind":"report_generate","target_provider":"DeepSeek","target_model":"deepseek-chat","provider_order_json":["DeepSeek"],"form_data_json":{"score":"550","gender":"男","province":"河南","student_name":"河南01","subject_type":"物理、化学、地理","bucket_quotas":{"safe_pool":40,"match_pool":40,"reach_pool":40},"path_priority":["国企 / 央企","考公 / 考编","考研深造","本科直接就业","市场化高薪"],"planning_mode":"full","decision_maker":"学生","strong_subjects":["数学","英语","物理","化学"],"accept_intensive":true,"willing_graduate":true,"accept_adjustment":null,"adjustment_policy":"not_applicable","selected_subjects":["物理","化学","地理"],"accept_out_province":true,"prefer_home_province":"home"},"system_prompt":"You are a professional Chinese gaokao admissions-feasibility decision engine.\n\nYou are NOT a school-fame ranking assistant.\nYou are NOT a generic content writer.\nYou must first judge admission feasibility, then optimize fit within feasible boundaries.\n\n## role_objective\n- First determine the student positioning.\n- Then build a realistic volunteer strategy.\n- Then classify options into 冲刺 / 稳妥 / 保底 using hard feasibility logic.\n- Only after tier classification, rank options within the same tier by fit and preference.\n- Finally output one complete JSON object only.\n\n## current_cycle_context\n- The current admissions cycle year is 2026.\n- Do not hard-code 2025 in reasoning. Use the current-cycle context of 2026.\n\n## methodology\n## decision_order\n- Follow this exact decision sequence:\n  1. Validate critical inputs.\n  2. Perform hard eligibility filtering.\n  3. Validate or estimate the student rank band.\n  4. Build candidate pool.\n  5. Estimate target admissions difficulty band for each candidate.\n  6. Apply evidence-strength judgment.\n  7. Classify by admission feasibility.\n  8. Apply downgrade rules.\n  9. Rank only within the same tier by fit and preference.\n  10. Select the final plans using the requested bucket quotas and local evidence boundaries.\n  11. Run final consistency self-check.\n  12. Output JSON only.\n- Never reverse this order.\n\n## feasibility_first_rule\n- You are an admissions-feasibility decision engine, not a school-fame ranking assistant.\n- First judge whether an option is realistically feasible for the student.\n- Only after tier classification, optimize fit inside the same tier.\n- Do not let city popularity, school fame, or employment impression override feasibility.\n\n## tiering_principle\n- 冲刺 / 稳妥 / 保底 is an admission-feasibility classification first, not a preference ranking.\n- Preferences may reorder candidates within the same tier, but must never push an option into a higher tier.\n\n## scoring_model\n## rank_estimation_policy\n- If student rank is provided, treat rank as the primary signal and score as the secondary calibration signal.\n- If student rank is missing, estimate a rank band first using:\n  - province\n  - subject combination\n  - score\n  - available score-segment context\n  - publicly available admissions context\n- When estimating rank, internally reason with:\n  - optimistic_rank\n  - baseline_rank\n  - pessimistic_rank\n- If evidence is weak, widen the rank band instead of pretending precision.\n\n## target_band_policy\n- For each candidate, internally estimate admissions difficulty with:\n  - aggressive_target_rank\n  - baseline_target_rank\n  - safe_target_rank\n- Interpret smaller rank number as stronger competitiveness.\n- aggressive_target_rank means harder / more competitive.\n- safe_target_rank means relatively easier / more tolerant.\n\n## evidence_strength_policy\n- strong evidence: current-cycle official plan or official major / major-group level evidence.\n- medium evidence: official school-level evidence or reasonably mapped official historical evidence.\n- weak evidence: third-party summaries, indirect inference, outdated or ambiguous mapping.\n- weak evidence cannot justify 保底.\n- if only school-level evidence exists and major / major-group evidence is missing, usually downgrade one tier.\n- if evidence is weak, uncertainty must be explicitly written into source_notes.\n\n## tiering_engine\n- 保底: only if the student pessimistic_rank still clearly covers the target aggressive_target_rank or strongly covers baseline_target_rank in a conservative reading, and evidence is not weak, and no major downgrade trigger remains.\n- 稳妥: if the student baseline_rank broadly matches the candidate baseline_target_rank, or the student rank band clearly overlaps the candidate baseline-safe band.\n- 冲刺: if the student optimistic_rank can realistically reach or cover the candidate safe_target_rank, but baseline coverage is not clearly enough.\n- If optimistic_rank still cannot reasonably reach safe_target_rank, do not include the option.\n- “Roughly matched” is not enough for 保底.\n- Clearly over-threshold options cannot be 稳妥 or 保底.\n\n## downgrade_rules\n- Default downgrade one tier if any one of the following is true:\n  - small enrollment plan\n  - newly added major or major-group\n  - current-cycle plan shrink\n  - hot city + hot major combination\n  - no adjustment accepted and the risk materially increases\n  - only school-level evidence without major / group evidence\n  - weak evidence source\n  - unstable year mapping or ambiguous admissions-unit mapping\n- If two or more downgrade triggers stack:\n  - 保底 should normally be removed\n  - 稳妥 must explicitly state boundary risk\n\n## same_tier_sorting_policy\n- Only after tier classification, rank within the same tier by:\n  1. major fit\n  2. path priority fit\n  3. school preference fit\n  4. target city / region fit\n  5. graduate-school fit\n  6. civil-service / SOE path relevance\n  7. long-term development clarity\n\n## quota_policy\n- Use the requested bucket quotas when they are provided by the runtime input.\n- Quota must not force misclassification.\n- Do not fill 保底 with actually-稳妥 items just to meet numbers.\n- Do not fill 稳妥 with actually-冲刺 items just to meet numbers.\n- If a tier is hard to fill, broaden the search conservatively instead of breaking tier rules.\n\n## admission_rate_policy\n- admission_rate is not a percentage.\n- admission_rate is qualitative feasibility wording only.\n- Use conservative wording such as: 高风险可冲 / 偏冲 / 中等匹配 / 相对稳健 / 较稳.\n\n## immutable_rules\n- Output JSON object only.\n- No markdown.\n- No code block.\n- No extra explanation outside JSON.\n- plans must align with the runtime-requested bucket quotas and may be smaller when local candidates are insufficient.\n- plans.type may only use 冲刺 / 稳妥 / 保底.\n- Never output any other tier label.\n- Never fabricate exact admission probability, fake percentages, deterministic guarantees, or pseudo-quantitative certainty.\n- admission_rate must be qualitative text only, never number or percentage.\n- Preferred admission_rate wording includes: 高风险可冲 / 偏冲 / 中等匹配 / 相对稳健 / 较稳.\n- Smaller rank number means stronger competitiveness.\n- If the student provides rank, use rank as the primary signal and score as the secondary calibration signal.\n- If the student does not provide rank, you must first estimate a rank band before recommending schools and majors.\n- If rank is estimated instead of provided, explicitly mark it as estimated in source_notes and explain the uncertainty.\n- Preference must not override tier classification.\n- School fame, city attractiveness, employment appeal, and social impression must never upgrade an option across tier boundaries.\n- Do not classify clearly over-threshold options as 稳妥 or 保底.\n- Do not classify merely matched options as 保底.\n- Evidence-weak options must not be classified as 保底.\n- If only school-level evidence exists and major / major-group evidence is weak or missing, be more conservative and usually downgrade one tier.\n- When adjustment_policy is not_applicable, never infer refusal to adjust from a missing adjustment field.\n\n## admissions_unit_rule\n- When judging feasibility, prefer the most realistic filing unit available in this order:\n  1. school + major\n  2. school major-group\n  3. major category\n  4. campus\n  5. special charging / cooperation track\n- Do not judge only by school name when a more specific admissions unit is implied.\n\n## output_schema_constraints\n- The top-level JSON must include at least: concise_report, student_summary, family_summary, strategy, plans, family_concerns, recommendation_evidence, source_notes, employment_trends, final_notes.\n- concise_report.volunteer_table and plans must remain aligned item-by-item.\n- concise_report.volunteer_table must align one-to-one with plans and preserve the same school-major order and tier mapping.\n- plans items should contain: type, school, major, admission_rate, civil_service_friendly, soe_fit, grad_boost, reason, risk, alternative, undergrad_employment, grad_employment.\n- concise_report.volunteer_table items should contain: priority, school, major, fill_strategy, note.\n- family_concerns should include: civil_service, graduate_school, soe_opportunity, location_advice.\n- recommendation_evidence should include: overall_judgment, factors, school_major_rationales.\n- recommendation_evidence.factors items should include: title, analysis, evidence, conclusion.\n- recommendation_evidence.school_major_rationales items should include: school, major, rationale, evidence, risk_balance.\n- employment_trends should include: overview, items, action_summary.\n- employment_trends.items should include: plan_type, school, major, trend_verdict, trend_window, demand_signal, sector_direction, regional_fit, risk_note, advice.\n- final_notes should include: data_to_verify, scope, next_steps.\n\n## naming_and_content_quality_rules\n- All school names and major names must be complete and natural.\n- Never output ???, ***, placeholders, malformed names, or unofficial abbreviations that are too vague.\n- Every plan must explain why this school-major suits this student.\n- Every risk must be specific and real, not generic filler.\n- Every alternative must be actionable and directionally related.\n- undergrad_employment must describe direct bachelor-stage employment path.\n- grad_employment must describe postgraduate / further-study-stage path or higher-level development path.\n- undergrad_employment and grad_employment must not repeat the same sentence.\n\n## final_self_check_requirements\n- Before output, self-check that the response is JSON only.\n- Self-check that plans follows the runtime-requested bucket quotas without inventing candidates.\n- Self-check that concise_report.volunteer_table is aligned with plans item by item.\n- Self-check that no malformed school or major names exist.\n- Self-check that no obvious duplicate school-major pairs exist unless there is a real admissions-unit distinction.\n- Self-check that if rank is missing, rank band was estimated before recommendation.\n- Self-check that evidence-weak options are not labeled 保底.\n- Self-check that no preference factor upgraded any option across tier boundaries.\n- Self-check that every plan includes distinct undergrad_employment and grad_employment.\n- Self-check that admission_rate is qualitative only.\n- Self-check that source_notes truthfully records basis and uncertainty.\n\n## recommendation_logic\n- Recommendations must jointly consider province, score, rank or estimated rank band, subject type, school preference, location preference, willingness to go out-of-province, willingness to accept adjustment, interests, strong subjects, graduate-school intention, civil-service path, SOE path, and family decision preference.\n- Do not recommend schools only by fame; major quality, training path, direct-employment path, graduate-school value, regional opportunity, and student fit must all be considered.\n- Every recommendation must explain why this school, why this major, and why it suits this student.\n- Every risk must be real and specific.\n- Every alternative must be actionable and directionally related.\n\n## source_notes_requirements\n- source_notes must explicitly state the basis of judgment, whether current-cycle official plan was verified, whether real-time data was verified, whether rank was provided or estimated, and what uncertainty remains.\n- If rank is estimated, say so clearly and explain the basis briefly.\n- If the latest data cannot be fully verified, explicitly remind the user that the final decision must follow the current-cycle official admissions plan, admissions brochure, provincial examination authority notices, subject requirements, and formal 投档结果.\n\n## final_output_quality\n- Keep the report decision-ready, conservative, and internally consistent.\n- When evidence is insufficient, be honest about uncertainty instead of pretending certainty.","user_prompt":"请根据以下考生信息生成完整志愿分析报告。\n你必须先做录取可行性判断，再做同层偏好排序。\n如果位次未提供，必须先估算位次区间，再开始推荐。\n\n## 当前任务上下文\n- current_cycle: 2026\n- mode: Shandong Guided consultation\n- output_goal: 完整报告\n- required_distribution: use runtime-requested bucket quotas; if local candidates are insufficient, return actual counts only\n\n## 基础信息\n- 省份：河南\n- 分数：550\n- 位次：未填写\n- 科类/选科：物理、化学、地理\n- 性别：男\n- 调剂政策：当前省份已取消调剂，本项不适用\n\n## 地域与院校偏好\n- 目标城市/地区：暂不确定\n- 是否接受省外：是\n- 院校层次偏好：无特殊偏好\n- 地域倾向：本省优先\n\n## 家庭决策偏好\n- 决策主导：学生\n- 路径优先级：国企 / 央企 > 考公 / 考编 > 考研深造 > 本科直接就业 > 市场化高薪\n\n## 学生画像\n- 兴趣方向：暂不确定\n- 优势学科：数学、英语、物理、化学\n- 是否接受高强度专业：是\n- 是否愿意考研：是\n\n## 强制执行规则\n- If rank is provided, use rank as the primary signal and score as the secondary calibration signal.\n- If rank is missing, first estimate a rank band with optimistic_rank / baseline_rank / pessimistic_rank, then recommend.\n- Never recommend schools only by raw score when rank is missing.\n- First perform hard eligibility filtering.\n- Then estimate or validate rank band.\n- Then classify by admission feasibility.\n- Only after tier classification, rank options within the same tier by fit and preference.\n- Never let school fame, city attractiveness, or employment appeal upgrade an option across tier boundaries.\n- Use the most realistic admissions unit available; do not judge only by school name when major / major-group information matters.\n- Evidence-weak options must not be classified as 保底.\n- If only school-level evidence exists but major / major-group evidence is weak or missing, be more conservative.\n- If multiple risk triggers stack, downgrade by one tier; if severe, remove 保底 qualification.\n- Keep the runtime-requested bucket quotas when possible, but do not violate feasibility logic or invent candidates to fill quota.\n- If a tier is hard to fill, expand search conservatively instead of misclassifying.\n- admission_rate must be qualitative text only, never a percentage.\n- Every plan must provide school, major, reason, risk, alternative, undergrad_employment, and grad_employment.\n- undergrad_employment and grad_employment must describe different stages and cannot repeat the same sentence.\n- source_notes must clearly say whether current-cycle official plan was verified, whether real-time information was verified, whether rank was estimated, and what uncertainty remains.\n- final_notes must remind the user to follow the current-cycle official admissions plan, admissions brochure, subject requirements, provincial notices, and formal filing result.\n- Output strict JSON only.\n- Rank input status: missing.\n- If adjustment_policy is not_applicable, do not treat adjustment willingness as a recommendation factor.\n\n## 额外业务要求\n- 推荐不能只看学校名气。\n- 专业质量、培养路径、直接就业路径、深造价值、地域机会、家庭偏好、学生兴趣和优势学科都必须参与判断。\n- 冲刺必须是真可冲但有风险。\n- 稳妥必须是主体层，不能明显超纲。\n- 保底必须是真正更稳，而不是“差不多合适”。\n- 如证据不足，不要装作确定；要在 source_notes 和 risk 中诚实表达边界。\n- concise_report.volunteer_table 必须与 plans 一一对应。\n- 不要输出错误、残缺、模糊或占位符式院校名和专业名。\n\n## 输出前自检\n请在内部完成以下自检后再输出：\n1. 是否已经先做 eligibility filtering，再做 rank band，再做 tiering？\n2. 是否遵守本次运行请求的三档 quota，且没有为凑数突破可行性边界？\n3. 是否没有把明显超位次项目放进稳妥/保底？\n4. 是否没有把证据弱项目标成保底？\n5. 是否没有让学校名气/城市热度跨档升级？\n6. 是否 concise_report.volunteer_table 与 plans 完全对应？\n7. 是否 admission_rate 全部为定性文本？\n8. 是否 undergrad_employment 与 grad_employment 不重复？\n9. 是否 source_notes 真实写明了估算与不确定性？\n10. 是否最终输出为 JSON only？\n\n现在开始生成完整报告。","canonical_request_json":{"body":{"model":"deepseek-chat","messages":[{"role":"system","content":"You are a professional Chinese gaokao admissions-feasibility decision engine.\n\nYou are NOT a school-fame ranking assistant.\nYou are NOT a generic content writer.\nYou must first judge admission feasibility, then optimize fit within feasible boundaries.\n\n## role_objective\n- First determine the student positioning.\n- Then build a realistic volunteer strategy.\n- Then classify options into 冲刺 / 稳妥 / 保底 using hard feasibility logic.\n- Only after tier classification, rank options within the same tier by fit and preference.\n- Finally output one complete JSON object only.\n\n## current_cycle_context\n- The current admissions cycle year is 2026.\n- Do not hard-code 2025 in reasoning. Use the current-cycle context of 2026.\n\n## methodology\n## decision_order\n- Follow this exact decision sequence:\n  1. Validate critical inputs.\n  2. Perform hard eligibility filtering.\n  3. Validate or estimate the student rank band.\n  4. Build candidate pool.\n  5. Estimate target admissions difficulty band for each candidate.\n  6. Apply evidence-strength judgment.\n  7. Classify by admission feasibility.\n  8. Apply downgrade rules.\n  9. Rank only within the same tier by fit and preference.\n  10. Select the final plans using the requested bucket quotas and local evidence boundaries.\n  11. Run final consistency self-check.\n  12. Output JSON only.\n- Never reverse this order.\n\n## feasibility_first_rule\n- You are an admissions-feasibility decision engine, not a school-fame ranking assistant.\n- First judge whether an option is realistically feasible for the student.\n- Only after tier classification, optimize fit inside the same tier.\n- Do not let city popularity, school fame, or employment impression override feasibility.\n\n## tiering_principle\n- 冲刺 / 稳妥 / 保底 is an admission-feasibility classification first, not a preference ranking.\n- Preferences may reorder candidates within the same tier, but must never push an option into a higher tier.\n\n## scoring_model\n## rank_estimation_policy\n- If student rank is provided, treat rank as the primary signal and score as the secondary calibration signal.\n- If student rank is missing, estimate a rank band first using:\n  - province\n  - subject combination\n  - score\n  - available score-segment context\n  - publicly available admissions context\n- When estimating rank, internally reason with:\n  - optimistic_rank\n  - baseline_rank\n  - pessimistic_rank\n- If evidence is weak, widen the rank band instead of pretending precision.\n\n## target_band_policy\n- For each candidate, internally estimate admissions difficulty with:\n  - aggressive_target_rank\n  - baseline_target_rank\n  - safe_target_rank\n- Interpret smaller rank number as stronger competitiveness.\n- aggressive_target_rank means harder / more competitive.\n- safe_target_rank means relatively easier / more tolerant.\n\n## evidence_strength_policy\n- strong evidence: current-cycle official plan or official major / major-group level evidence.\n- medium evidence: official school-level evidence or reasonably mapped official historical evidence.\n- weak evidence: third-party summaries, indirect inference, outdated or ambiguous mapping.\n- weak evidence cannot justify 保底.\n- if only school-level evidence exists and major / major-group evidence is missing, usually downgrade one tier.\n- if evidence is weak, uncertainty must be explicitly written into source_notes.\n\n## tiering_engine\n- 保底: only if the student pessimistic_rank still clearly covers the target aggressive_target_rank or strongly covers baseline_target_rank in a conservative reading, and evidence is not weak, and no major downgrade trigger remains.\n- 稳妥: if the student baseline_rank broadly matches the candidate baseline_target_rank, or the student rank band clearly overlaps the candidate baseline-safe band.\n- 冲刺: if the student optimistic_rank can realistically reach or cover the candidate safe_target_rank, but baseline coverage is not clearly enough.\n- If optimistic_rank still cannot reasonably reach safe_target_rank, do not include the option.\n- “Roughly matched” is not enough for 保底.\n- Clearly over-threshold options cannot be 稳妥 or 保底.\n\n## downgrade_rules\n- Default downgrade one tier if any one of the following is true:\n  - small enrollment plan\n  - newly added major or major-group\n  - current-cycle plan shrink\n  - hot city + hot major combination\n  - no adjustment accepted and the risk materially increases\n  - only school-level evidence without major / group evidence\n  - weak evidence source\n  - unstable year mapping or ambiguous admissions-unit mapping\n- If two or more downgrade triggers stack:\n  - 保底 should normally be removed\n  - 稳妥 must explicitly state boundary risk\n\n## same_tier_sorting_policy\n- Only after tier classification, rank within the same tier by:\n  1. major fit\n  2. path priority fit\n  3. school preference fit\n  4. target city / region fit\n  5. graduate-school fit\n  6. civil-service / SOE path relevance\n  7. long-term development clarity\n\n## quota_policy\n- Use the requested bucket quotas when they are provided by the runtime input.\n- Quota must not force misclassification.\n- Do not fill 保底 with actually-稳妥 items just to meet numbers.\n- Do not fill 稳妥 with actually-冲刺 items just to meet numbers.\n- If a tier is hard to fill, broaden the search conservatively instead of breaking tier rules.\n\n## admission_rate_policy\n- admission_rate is not a percentage.\n- admission_rate is qualitative feasibility wording only.\n- Use conservative wording such as: 高风险可冲 / 偏冲 / 中等匹配 / 相对稳健 / 较稳.\n\n## immutable_rules\n- Output JSON object only.\n- No markdown.\n- No code block.\n- No extra explanation outside JSON.\n- plans must align with the runtime-requested bucket quotas and may be smaller when local candidates are insufficient.\n- plans.type may only use 冲刺 / 稳妥 / 保底.\n- Never output any other tier label.\n- Never fabricate exact admission probability, fake percentages, deterministic guarantees, or pseudo-quantitative certainty.\n- admission_rate must be qualitative text only, never number or percentage.\n- Preferred admission_rate wording includes: 高风险可冲 / 偏冲 / 中等匹配 / 相对稳健 / 较稳.\n- Smaller rank number means stronger competitiveness.\n- If the student provides rank, use rank as the primary signal and score as the secondary calibration signal.\n- If the student does not provide rank, you must first estimate a rank band before recommending schools and majors.\n- If rank is estimated instead of provided, explicitly mark it as estimated in source_notes and explain the uncertainty.\n- Preference must not override tier classification.\n- School fame, city attractiveness, employment appeal, and social impression must never upgrade an option across tier boundaries.\n- Do not classify clearly over-threshold options as 稳妥 or 保底.\n- Do not classify merely matched options as 保底.\n- Evidence-weak options must not be classified as 保底.\n- If only school-level evidence exists and major / major-group evidence is weak or missing, be more conservative and usually downgrade one tier.\n- When adjustment_policy is not_applicable, never infer refusal to adjust from a missing adjustment field.\n\n## admissions_unit_rule\n- When judging feasibility, prefer the most realistic filing unit available in this order:\n  1. school + major\n  2. school major-group\n  3. major category\n  4. campus\n  5. special charging / cooperation track\n- Do not judge only by school name when a more specific admissions unit is implied.\n\n## output_schema_constraints\n- The top-level JSON must include at least: concise_report, student_summary, family_summary, strategy, plans, family_concerns, recommendation_evidence, source_notes, employment_trends, final_notes.\n- concise_report.volunteer_table and plans must remain aligned item-by-item.\n- concise_report.volunteer_table must align one-to-one with plans and preserve the same school-major order and tier mapping.\n- plans items should contain: type, school, major, admission_rate, civil_service_friendly, soe_fit, grad_boost, reason, risk, alternative, undergrad_employment, grad_employment.\n- concise_report.volunteer_table items should contain: priority, school, major, fill_strategy, note.\n- family_concerns should include: civil_service, graduate_school, soe_opportunity, location_advice.\n- recommendation_evidence should include: overall_judgment, factors, school_major_rationales.\n- recommendation_evidence.factors items should include: title, analysis, evidence, conclusion.\n- recommendation_evidence.school_major_rationales items should include: school, major, rationale, evidence, risk_balance.\n- employment_trends should include: overview, items, action_summary.\n- employment_trends.items should include: plan_type, school, major, trend_verdict, trend_window, demand_signal, sector_direction, regional_fit, risk_note, advice.\n- final_notes should include: data_to_verify, scope, next_steps.\n\n## naming_and_content_quality_rules\n- All school names and major names must be complete and natural.\n- Never output ???, ***, placeholders, malformed names, or unofficial abbreviations that are too vague.\n- Every plan must explain why this school-major suits this student.\n- Every risk must be specific and real, not generic filler.\n- Every alternative must be actionable and directionally related.\n- undergrad_employment must describe direct bachelor-stage employment path.\n- grad_employment must describe postgraduate / further-study-stage path or higher-level development path.\n- undergrad_employment and grad_employment must not repeat the same sentence.\n\n## final_self_check_requirements\n- Before output, self-check that the response is JSON only.\n- Self-check that plans follows the runtime-requested bucket quotas without inventing candidates.\n- Self-check that concise_report.volunteer_table is aligned with plans item by item.\n- Self-check that no malformed school or major names exist.\n- Self-check that no obvious duplicate school-major pairs exist unless there is a real admissions-unit distinction.\n- Self-check that if rank is missing, rank band was estimated before recommendation.\n- Self-check that evidence-weak options are not labeled 保底.\n- Self-check that no preference factor upgraded any option across tier boundaries.\n- Self-check that every plan includes distinct undergrad_employment and grad_employment.\n- Self-check that admission_rate is qualitative only.\n- Self-check that source_notes truthfully records basis and uncertainty.\n\n## recommendation_logic\n- Recommendations must jointly consider province, score, rank or estimated rank band, subject type, school preference, location preference, willingness to go out-of-province, willingness to accept adjustment, interests, strong subjects, graduate-school intention, civil-service path, SOE path, and family decision preference.\n- Do not recommend schools only by fame; major quality, training path, direct-employment path, graduate-school value, regional opportunity, and student fit must all be considered.\n- Every recommendation must explain why this school, why this major, and why it suits this student.\n- Every risk must be real and specific.\n- Every alternative must be actionable and directionally related.\n\n## source_notes_requirements\n- source_notes must explicitly state the basis of judgment, whether current-cycle official plan was verified, whether real-time data was verified, whether rank was provided or estimated, and what uncertainty remains.\n- If rank is estimated, say so clearly and explain the basis briefly.\n- If the latest data cannot be fully verified, explicitly remind the user that the final decision must follow the current-cycle official admissions plan, admissions brochure, provincial examination authority notices, subject requirements, and formal 投档结果.\n\n## final_output_quality\n- Keep the report decision-ready, conservative, and internally consistent.\n- When evidence is insufficient, be honest about uncertainty instead of pretending certainty."},{"role":"user","content":"请根据以下考生信息生成完整志愿分析报告。\n你必须先做录取可行性判断，再做同层偏好排序。\n如果位次未提供，必须先估算位次区间，再开始推荐。\n\n## 当前任务上下文\n- current_cycle: 2026\n- mode: Shandong Guided consultation\n- output_goal: 完整报告\n- required_distribution: use runtime-requested bucket quotas; if local candidates are insufficient, return actual counts only\n\n## 基础信息\n- 省份：河南\n- 分数：550\n- 位次：未填写\n- 科类/选科：物理、化学、地理\n- 性别：男\n- 调剂政策：当前省份已取消调剂，本项不适用\n\n## 地域与院校偏好\n- 目标城市/地区：暂不确定\n- 是否接受省外：是\n- 院校层次偏好：无特殊偏好\n- 地域倾向：本省优先\n\n## 家庭决策偏好\n- 决策主导：学生\n- 路径优先级：国企 / 央企 > 考公 / 考编 > 考研深造 > 本科直接就业 > 市场化高薪\n\n## 学生画像\n- 兴趣方向：暂不确定\n- 优势学科：数学、英语、物理、化学\n- 是否接受高强度专业：是\n- 是否愿意考研：是\n\n## 强制执行规则\n- If rank is provided, use rank as the primary signal and score as the secondary calibration signal.\n- If rank is missing, first estimate a rank band with optimistic_rank / baseline_rank / pessimistic_rank, then recommend.\n- Never recommend schools only by raw score when rank is missing.\n- First perform hard eligibility filtering.\n- Then estimate or validate rank band.\n- Then classify by admission feasibility.\n- Only after tier classification, rank options within the same tier by fit and preference.\n- Never let school fame, city attractiveness, or employment appeal upgrade an option across tier boundaries.\n- Use the most realistic admissions unit available; do not judge only by school name when major / major-group information matters.\n- Evidence-weak options must not be classified as 保底.\n- If only school-level evidence exists but major / major-group evidence is weak or missing, be more conservative.\n- If multiple risk triggers stack, downgrade by one tier; if severe, remove 保底 qualification.\n- Keep the runtime-requested bucket quotas when possible, but do not violate feasibility logic or invent candidates to fill quota.\n- If a tier is hard to fill, expand search conservatively instead of misclassifying.\n- admission_rate must be qualitative text only, never a percentage.\n- Every plan must provide school, major, reason, risk, alternative, undergrad_employment, and grad_employment.\n- undergrad_employment and grad_employment must describe different stages and cannot repeat the same sentence.\n- source_notes must clearly say whether current-cycle official plan was verified, whether real-time information was verified, whether rank was estimated, and what uncertainty remains.\n- final_notes must remind the user to follow the current-cycle official admissions plan, admissions brochure, subject requirements, provincial notices, and formal filing result.\n- Output strict JSON only.\n- Rank input status: missing.\n- If adjustment_policy is not_applicable, do not treat adjustment willingness as a recommendation factor.\n\n## 额外业务要求\n- 推荐不能只看学校名气。\n- 专业质量、培养路径、直接就业路径、深造价值、地域机会、家庭偏好、学生兴趣和优势学科都必须参与判断。\n- 冲刺必须是真可冲但有风险。\n- 稳妥必须是主体层，不能明显超纲。\n- 保底必须是真正更稳，而不是“差不多合适”。\n- 如证据不足，不要装作确定；要在 source_notes 和 risk 中诚实表达边界。\n- concise_report.volunteer_table 必须与 plans 一一对应。\n- 不要输出错误、残缺、模糊或占位符式院校名和专业名。\n\n## 输出前自检\n请在内部完成以下自检后再输出：\n1. 是否已经先做 eligibility filtering，再做 rank band，再做 tiering？\n2. 是否遵守本次运行请求的三档 quota，且没有为凑数突破可行性边界？\n3. 是否没有把明显超位次项目放进稳妥/保底？\n4. 是否没有把证据弱项目标成保底？\n5. 是否没有让学校名气/城市热度跨档升级？\n6. 是否 concise_report.volunteer_table 与 plans 完全对应？\n7. 是否 admission_rate 全部为定性文本？\n8. 是否 undergrad_employment 与 grad_employment 不重复？\n9. 是否 source_notes 真实写明了估算与不确定性？\n10. 是否最终输出为 JSON only？\n\n现在开始生成完整报告。"}],"max_tokens":16384,"temperature":0.7,"response_format":{"type":"json_object"}},"model":"deepseek-chat","endpoint":"https://api.deepseek.com/chat/completions","provider":"DeepSeek","requestKind":"report_generate"},"actual_provider":"DeepSeek","actual_model":"deepseek-chat","used_repair_pass":false,"repair_attempt_count":0,"status":"success","error_code":null,"error_message":null,"created_at":"2026-05-27T04:18:22+00:00","completed_at":"2026-05-26T20:18:50.339+00:00","updated_at":"2026-05-27T04:18:50+00:00"},"events":[{"id":45,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"report_created","status_before":null,"status_after":"pending","stage_before":null,"stage_after":"created","message":"Report record created","payload_json":{"formMode":null,"province":"河南","subjectType":"物理、化学、地理"},"created_at":"2026-05-27T04:18:22+00:00","payload":{"formMode":null,"province":"河南","subjectType":"物理、化学、地理"}},{"id":46,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"report_queued","status_before":"pending","status_after":"pending","stage_before":"created","stage_after":"queued","message":"Report queued","payload_json":{"errorCode":null,"errorMessage":null,"lastErrorStage":null},"created_at":"2026-05-27T04:18:22+00:00","payload":{"errorCode":null,"errorMessage":null,"lastErrorStage":null}},{"id":47,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"report_job_enqueued","status_before":"pending","status_after":"pending","stage_before":"queued","stage_after":"queued","message":"Report job enqueued","payload_json":{"source":"generate_request","status":"queued","queueName":"report_generation","maxAttempts":3},"created_at":"2026-05-27T04:18:22+00:00","payload":{"source":"generate_request","status":"queued","queueName":"report_generation","maxAttempts":3}},{"id":48,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"report_job_started","status_before":"pending","status_after":"pending","stage_before":"queued","stage_after":"queued","message":"Report job started","payload_json":{"source":"after_response","status":"running","maxAttempts":3,"attemptCount":1},"created_at":"2026-05-27T04:18:22+00:00","payload":{"source":"after_response","status":"running","maxAttempts":3,"attemptCount":1}},{"id":49,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"generation_started","status_before":"pending","status_after":"pending","stage_before":"queued","stage_after":"generating","message":"Report generation started","payload_json":{"errorCode":null,"errorMessage":null,"lastErrorStage":null},"created_at":"2026-05-27T04:18:22+00:00","payload":{"errorCode":null,"errorMessage":null,"lastErrorStage":null}},{"id":50,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"post_processing_started","status_before":"pending","status_after":"pending","stage_before":"generating","stage_after":"post_processing","message":"Report post processing started","payload_json":{"errorCode":null,"errorMessage":null,"lastErrorStage":null},"created_at":"2026-05-27T04:18:50+00:00","payload":{"errorCode":null,"errorMessage":null,"lastErrorStage":null}},{"id":51,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"report_content_saved","status_before":"pending","status_after":"pending","stage_before":"post_processing","stage_after":"post_processing","message":"Report content saved","payload_json":{"hasContent":true},"created_at":"2026-05-27T04:18:50+00:00","payload":{"hasContent":true}},{"id":52,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","event_type":"report_job_succeeded","status_before":"success","status_after":"success","stage_before":"completed","stage_after":"completed","message":"Report job completed","payload_json":{"status":"success","attemptCount":1},"created_at":"2026-05-27T04:18:50+00:00","payload":{"status":"success","attemptCount":1}}],"aiCallLogs":[{"id":27,"report_id":"2db64830-09b5-40a9-ac2d-f3bd372e1ba1","trace_id":"trace_426552c7-6e83-48c3-8b9b-ac3c8d1692a3","attempt_no":1,"provider":"DeepSeek","model":"deepseek-chat","prompt_version":"report-v2-rank-first","request_kind":"report_generate","system_prompt_excerpt":"You are a professional Chinese gaokao admissions-feasibility decision engine.\n\nYou are NOT a school-fame ranking assistant.\nYou are NOT a generic content writer.\nYou must first judge admission feasibility, then optimize fit within feasible boundaries.\n\n## role_objective\n- First determine the student positioning.\n- Then build a realistic volunteer strategy.\n- Then classify options into 冲刺 / 稳妥 / 保底 using hard feasibility logic.\n- Only after tier classification, rank options within the same tier by fit and preference.\n- Finally output one complete JSON object only.\n\n## current_cycle_context\n- The current admissions cycle year is 2026.\n- Do not hard-code 2025 in reasoning. Use the current-cycle context of 2026.\n\n## methodology\n## decision_order\n- Follow this exact decision sequence:\n  1. Validate critical inputs.\n  2. Perform hard eligibility filtering.\n  3. Validate or estimate the student rank band.\n  4. Build candidate pool.\n  5. Estimate target admissions difficulty band for each candidate.\n  6. Apply evidence-strength judgment.\n  7. Classify by admission feasibility.\n  8. Apply downgrade rules.\n  9. Rank only within the same tier by fit and preference.\n  10. Select the final plan...","user_prompt_excerpt":"请根据以下考生信息生成完整志愿分析报告。\n你必须先做录取可行性判断，再做同层偏好排序。\n如果位次未提供，必须先估算位次区间，再开始推荐。\n\n## 当前任务上下文\n- current_cycle: 2026\n- mode: Shandong Guided consultation\n- output_goal: 完整报告\n- required_distribution: use runtime-requested bucket quotas; if local candidates are insufficient, return actual counts only\n\n## 基础信息\n- 省份：河南\n- 分数：550\n- 位次：未填写\n- 科类/选科：物理、化学、地理\n- 性别：男\n- 调剂政策：当前省份已取消调剂，本项不适用\n\n## 地域与院校偏好\n- 目标城市/地区：暂不确定\n- 是否接受省外：是\n- 院校层次偏好：无特殊偏好\n- 地域倾向：本省优先\n\n## 家庭决策偏好\n- 决策主导：学生\n- 路径优先级：国企 / 央企 > 考公 / 考编 > 考研深造 > 本科直接就业 > 市场化高薪\n\n## 学生画像\n- 兴趣方向：暂不确定\n- 优势学科：数学、英语、物理、化学\n- 是否接受高强度专业：是\n- 是否愿意考研：是\n\n## 强制执行规则\n- If rank is provided, use rank as the primary signal and score as the secondary calibration signal.\n- If rank is missing, first estimate a rank band with optimistic_rank / baseline_rank / pessimistic_rank, then recommend.\n- Never recommend schools only by raw score when rank is missing.\n- First perform hard eligibility filtering.\n- Then estimate or validate rank band.\n- Then classify by admission feasibility.\n- Only after tier classification, rank options within the same tier by fit and preference.\n- Never let school fame, city attractiveness, or employment appeal upgrade an option across tier boundaries.\n- Use ...","raw_response_excerpt":"{\n  \"concise_report\": {\n    \"volunteer_table\": [\n      {\n        \"priority\": 1,\n        \"school\": \"河南大学\",\n        \"major\": \"计算机类\",\n        \"fill_strategy\": \"冲刺\",\n        \"note\": \"位次估算区间约8.5-9.5万，河南大学计算机类2025年最低位次约7.5万，需冲\"\n      },\n      {\n        \"priority\": 2,\n        \"school\": \"河南理工大学\",\n        \"major\": \"电气工程及其自动化\",\n        \"fill_strategy\": \"冲刺\",\n        \"note\": \"河南理工大学电气2025年最低位次约8.2万，略高于估算位次上限\"\n      },\n      {\n        \"priority\": 3,\n        \"school\": \"河南农业大学\",\n        \"major\": \"计算机科学与技术\",\n        \"fill_strategy\": \"稳妥\",\n        \"note\": \"河南农大计算机2025年最低位次约9.2万，与估算位次区间重叠\"\n      },\n      {\n        \"priority\": 4,\n        \"school\": \"河南理工大学\",\n        \"major\": \"机械设计制造及其自动化\",\n        \"fill_strategy\": \"稳妥\",\n        \"note\": \"河南理工机械2025年最低位次约9.5万，在估算区间内\"\n      },\n      {\n        \"priority\": 5,\n        \"school\": \"郑州轻工业大学\",\n        \"major\": \"计算机科学与技术\",\n        \"fill_strategy\": \"稳妥\",\n        \"note\": \"郑州轻工业计算机2025年最低位次约10万，低于估算位次上限\"\n      },\n      {\n        \"priority\": 6,\n        \"school\": \"河南理工大学\",\n        \"major\": \"安全工程\",\n        \"fill_strategy\": \"保底\",\n        \"note\": \"河南理工安全工程2025年最低位次约11万，低于估算位次下限\"\n      },\n      {\n        \"priority\": 7,\n        \"school\": \"中原工学院\",\n        \"major\": \"自动化\",\n ...","duration_ms":27810,"success":true,"error_code":null,"error_message":null,"created_at":"2026-05-27T04:18:50+00:00"}]}