fix(doc): resolve URS viewing and private-to-shared workflow in document pane for 10 review projects

This commit is contained in:
WeiCHEN
2026-09-13 02:50:21 +00:00
committed by weichen
parent f48181ee0c
commit 76e538a47f
7 changed files with 818 additions and 35 deletions
+111 -2
View File
@@ -343,6 +343,62 @@ PROJECT_DEFS = [
def sha256_text(text: str) -> str:
return hashlib.sha256(text.encode("utf-8")).hexdigest()
def generate_urs_markdown(p, urs_title: str) -> str:
code = p["code"]
name = p["name"]
cust = p["customer"]
dtype = p["device_type"]
iuse = p["intended_use"]
tmarket = p["target_market"]
htech = p["highlight_tech"]
return f"""# {urs_title}
> **文件编号**:{code}-URS-01
> **受控密级**:商用机密 / 内部受控
> **当前版本**:V1.0
> **编制人**:张工(临床工程部)
> **审核人**:李主管(技术与法规部)
> **批准人**:王总监(研发总监)
> **编制日期**:2026-09-11
> **归属项目**:{name} ({code})
> **归属客户/临床科室**:{cust}
> **文档空间**:🔒 个人私密文档库 (支持一键共享至项目协作参考库)
---
## 1. 引言与适用范围
本《用户需求说明书》(User Requirements Specification, 简称 URS) 旨在明确由【{cust}】与水木东方研发团队联合界定的【{name}】系统级功能、技术指标、临床使用流程及强制性安全准则。本文件作为产品经理工作流编制《系统需求规格书》(SRS) 与测试经理工作流构建验证矩阵的原始受控输入基线。
## 2. 临床背景与预期用途
- **预期用途**:{iuse}。
- **设备类型定位**:{dtype}。
- **目标监管市场与分类**:{tmarket}。
- **主要使用科室与操作者**:由具备专业资质的主治医师、专科护士或技师在医院受控临床环境中使用。
## 3. 核心临床诉求与用户痛点
结合前期临床调研与专家论证,提炼以下核心诉求与技术突破点:
1. **关键技术指标突破**:{htech}。
2. **操作便捷性与防呆机制**:人机交互提示明确,具备声光工作指示与故障自检,关键风险动作具备硬件级物理防护与二次确认。
3. **连续运行稳定性**:适应医院高负荷运转要求,电气与散热结构经过严苛冗余考核。
## 4. 关键功能与工程性能指标
依据临床诉求,提炼并要求产品满足以下工程指标约束:
- **功能特性**:涵盖设备主控、信号采集/驱动输出、人机交互与状态监测;
- **精度界限**:核心指标公差必须控制在工程可用范围内,严禁出现无法计量的模糊描述;
- **安全切断机制**:遇有超温、超压、断电、过流等异常工况,硬件必须在毫秒级执行安全封波或物理断开。
## 5. 强制性标准与安全法规要求
产品研发生命周期全流程必须严格满足并遵从以下强制性标准:
- {tmarket} 相关条款;
- GB 9706.1-2020 医用电气设备第一部分:基本安全和基本性能的通用要求;
- YY 0505-2012 / GB 9706.102 电磁兼容要求与试验。
## 6. 个人私密与协作共享声明
- 本文档当前归档于张工的【个人私密文档库】。
- 编制人可在右侧文档操作栏点击「一键共享给项目组」,将本 URS 共享至项目协作参考库,供李主管、王总监及下游团队成员共同评审查阅。
"""
def build_data():
print("开始整合 10 个项目的元数据、文档与多角色对话记录...")
@@ -390,8 +446,14 @@ def build_data():
"updatedAt": "刚刚"
})
doc_urs_id = f"doc-proj{pid}-urs"
doc_srs_id = f"doc-proj{pid}-system_reqs"
doc_svp_id = f"doc-proj{pid}-test_manager"
urs_title = p["urs_file"]["name"].replace(".docx", "").replace(".pdf", "")
# 生成真实高质量 URS 文档正文
urs_md = generate_urs_markdown(p, urs_title)
urs_hash = sha256_text(urs_md)
# 读取真实高质量 Markdown 交付物
srs_file = os.path.join(p["path"], "01-系统需求规格书.md")
@@ -427,9 +489,11 @@ def build_data():
"authorName": "张工"
}
# 第一轮对话为上传 URS 需求文档
# 第一轮对话为上传 URS 需求文档 (挂载真实文件附件及可点击 docId)
if pair_idx == 0:
user_msg["attachments"] = [p["urs_file"]]
urs_att = dict(p["urs_file"])
urs_att["docId"] = doc_urs_id
user_msg["attachments"] = [urs_att]
user_msg["category"] = "file"
user_msg["intentTag"] = "📤 上传用户需求说明书 (URS)"
@@ -655,6 +719,28 @@ def build_data():
})
# 交付物元数据
# 0) 用户需求说明书 (URS) 交付物 (作为张工上传的个人私密文档,带一键共享)
deliverables.append({
"docId": doc_urs_id,
"projectId": pid,
"taskKey": "user_requirements",
"title": urs_title,
"stage": "V0.5",
"category": "private",
"creatorId": 1,
"creatorName": "张工",
"isFixedWorkflow": False,
"isTemplateOnly": False,
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 09:00",
"summary": f"由临床科室与研发团队联合编制的《{p['name']}》用户需求说明书 (URS),已由张工上传至个人私密文档库,可一键共享至项目参考库。",
"space": "my_private",
"governanceMode": "freeform"
})
deliverables.append({
"docId": doc_srs_id,
"projectId": pid,
@@ -695,6 +781,29 @@ def build_data():
})
# 存储文档正文 (完全对齐 MockDocumentMeta 契约)
documents[doc_urs_id] = {
"docId": doc_urs_id,
"projectId": pid,
"taskKey": "user_requirements",
"title": urs_title,
"stage": "V0.5",
"category": "private",
"creatorId": 1,
"creatorName": "张工",
"version": "V1.0",
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 09:00:00",
"summary": f"{p['name']}用户需求说明书 (URS),已归档至个人私密文档库,支持一键共享至项目参考库。",
"markdown": urs_md,
"content": urs_md,
"sha256": urs_hash,
"space": "my_private",
"governanceMode": "freeform"
}
documents[doc_srs_id] = {
"docId": doc_srs_id,
"projectId": pid,