feat(ui): 查标第 6 步前端补齐
- 读标页:每条清单项写最近一次检查的结论,点投标侧出处看投标原文;
「已响应」也能反馈判断有误(漏报);证书要求写资质库里的情况
(新接口 GET /projects/{id}/qualification-matches,资质库空时不写)
- 概览:检查记录卡(历次检查、各级问题数、报告下载)、文件卡
- 工作台:「致命」列、统计可点筛选、待处理的致命问题卡(?f= 定位到问题)
- 日期输入加日历弹层(DateInput,Reka UI Calendar)
- 查标页:? 键显示快捷键说明;反馈对话框抽成 FeedbackDialog 共用
- 扫描件提示去掉多余空格
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -285,3 +285,25 @@ def test_level_column_wins_over_certificate_number() -> None:
|
||||
]
|
||||
(h,) = run(items, {a: result("responded")}, sents, [])[0]
|
||||
assert h.code == "QUAL.LEVEL_LOW" and "「CS2」" in h.explanation
|
||||
|
||||
|
||||
def test_library_matches_for_checklist_page() -> None:
|
||||
"""读标清单上的资质库情况:认出类别的资质 / 评分条目给出有效期最晚的那条,按截止日判断过期;
|
||||
产品证书、技术参数不给;资质库空的什么都不给(QL3)。"""
|
||||
iso_old = Record(uuid4(), "ISO9001质量管理体系认证证书", "system_cert", None, "Q-1", date(2025, 6, 30))
|
||||
iso_new = Record(uuid4(), "质量管理体系认证证书(GB/T 19001)", "system_cert", None, "Q-2", date(2028, 6, 30))
|
||||
itss = Record(uuid4(), "ITSS 信息技术服务标准符合性证书", "certificate", "三级", "ITSS-9", date(2026, 3, 1))
|
||||
items: list[dict[str, Any]] = [
|
||||
{"id": "a", "categories": ["qualification"], "title": "具有有效的 ISO9001 质量管理体系认证证书"},
|
||||
{"id": "b", "categories": ["scoring"], "title": "具有 ITSS 运行维护三级及以上证书得 2 分"},
|
||||
{"id": "c", "categories": ["scoring"], "title": "具有 CMMI 三级及以上证书得 1 分"},
|
||||
{"id": "d", "categories": ["scoring"], "title": "所投产品具有节能产品认证证书"},
|
||||
{"id": "e", "categories": ["tech_param"], "title": "支持 ISO9001 质量管理体系认证的流程模板"},
|
||||
]
|
||||
got = qualification.library_matches(items, [iso_old, iso_new, itss], date(2026, 11, 20))
|
||||
assert set(got) == {"a", "b", "c"}
|
||||
(a,) = got["a"]
|
||||
assert (a["state"], a["count"], a["record"]["cert_no"]) == ("valid", 2, "Q-2")
|
||||
assert got["b"][0]["state"] == "expired"
|
||||
assert (got["c"][0]["state"], got["c"][0]["record"]) == ("missing", None)
|
||||
assert qualification.library_matches(items, [], date(2026, 11, 20)) == {}
|
||||
|
||||
@@ -167,7 +167,7 @@ def test_scanned_fallback_turns_missing_evidence_into_a_hint() -> None:
|
||||
results[a].verdict == "scanned"
|
||||
and spec is not None
|
||||
and spec.severity == "hint"
|
||||
and "资格证明册第 12–14、20 页 是扫描件(共 4 页)" in spec.explanation
|
||||
and "资格证明册第 12–14、20 页是扫描件(共 4 页)" in spec.explanation
|
||||
)
|
||||
assert match.page_ranges([5, 3, 4, 9]) == "3–5、9"
|
||||
assert results[b].verdict == "not_found" # 技术参数不是证明材料,照常报未找到
|
||||
|
||||
Reference in New Issue
Block a user