fix(server): 按 S01–S10 评测修复读标抽取(F1–F8、口径 Q1–Q4)

- 合并时待确认条目不再借正式条目进清单,没通过的类别记在 pending_categories
- 结构识别:章(按章跳过不相干的部分)、表后「上述……否则无效」说明、★ 节标题
- INVALID 补写法;输出用到上限 92% 按截断处理,拆到底时采用已有输出
- 格式范本正文、整表概括句不收;项目信息多看评标方法所在分块
- WPS 旧版 DOC 直接修正字体表字符集;表格按单元格切句(s3-v4)
- 口径:★ 节继承实质性、★ 定义为计分项时降为重要、「必须/应」声明记 keyword 规则、
  政府采购资格条件按 87 号令第六十三条带无效类别
- 提示词 substantive v5,qualification / schedule / tech_param v4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-03 23:19:30 +08:00
parent f99bb8b358
commit f98fd51128
17 changed files with 912 additions and 62 deletions

View File

@@ -186,7 +186,10 @@ async def test_all_categories_and_project_info(user: User) -> None:
for clause in ("25.3.1", "25.3.2"): # 本身没写「无效」,靠上级标题认定
it = item(clause)
assert it["zone"] == "formal" and "invalidity" in it["categories"], it
assert item("资格要求")["categories"] == ["qualification"]
# 口径 Q4:政府采购项目不具备资格要求的投标无效(87 号令第六十三条),资格条件带「无效」类别,依据是法规
qual = item("资格要求")
assert qual["categories"] == ["qualification", "invalidity"]
assert (qual["importance"], qual["importance_basis"]) == ("substantive", "statute")
assert item("技术方案")["spec"]["scoring"]["points"] == "20"
assert item("系统支持")["spec"]["tech_param"] == {"param": "系统支持", "op": ">=", "value": "200", "unit": "个"}
deadline = item("响应文件递交截止时间")