feat(chat): add URS requirement document upload dialogues with attachments and phase events for all 10 projects

This commit is contained in:
WeiCHEN
2026-09-11 09:03:54 +08:00
parent 42f5b3da19
commit f3337b7bf9
4 changed files with 916 additions and 289 deletions
@@ -16,18 +16,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6001, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6001, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6001, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6001, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6001, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6001, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -62,18 +62,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6002, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6002, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6002, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6002, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6002, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6002, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -108,18 +108,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6003, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6003, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6003, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6003, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6003, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6003, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -154,18 +154,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6004, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6004, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6004, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6004, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6004, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6004, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -200,18 +200,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6005, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6005, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6005, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6005, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6005, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6005, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -246,18 +246,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6006, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6006, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6006, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6006, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6006, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6006, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -292,18 +292,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6007, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6007, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6007, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6007, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6007, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6007, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -338,18 +338,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6008, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6008, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6008, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6008, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6008, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6008, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -384,18 +384,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6009, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6009, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6009, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6009, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6009, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6009, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
@@ -430,18 +430,18 @@ ON CONFLICT (id) DO UPDATE SET
updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6010, 'main', 'active', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6010, 'main', 'active', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'active', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6010, 'product_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6010, 'product_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES (6010, 'test_manager', 'ready', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES (6010, 'test_manager', 'ready', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = 'ready', enabled = true, updated_at = now();
+135 -46
View File
@@ -5,6 +5,9 @@
涵盖:
1. 项目基础信息与工作流状态 (main, product_manager, test_manager)
2. 多角色生动、自然、各具专业特色的对话记录 (张工 u1, 李主管 u2, 王总监 u3)
- 重点包含真实上传《用户需求说明书(URS)》的对话记录、附件文件卡片与4阶段要素提取
- 李主管审核对话中调阅 URS 附件比对覆盖度并挂载【合规审核确认卡】
- 王总监批准对话中确认 URS 输入基线到 SRS 的闭环并挂载【终审批准确认卡】
3. 真实 40KB~90KB 的《系统需求规格书》与《系统验证方案及计划》Markdown 全文
4. 文档血缘 (document_lineage) 与工作流运行记录 (workflow_runs)
"""
@@ -29,10 +32,15 @@ PROJECT_DEFS = [
"highlight_tech": "双通道脉冲离子导入极性自适应换相技术,温控范围 38℃~45℃ ±0.5℃,输出隔离耐压 4000V",
"srs_title": "膝骨关节炎综合治疗仪系统需求规格书",
"svp_title": "膝骨关节炎综合治疗仪系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0021_膝骨关节炎综合治疗仪_用户需求说明书(URS)_V1.0.docx",
"size": "284 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("张工,今天刚从望京医院骨伤科调研回来,临床主任提出两点核心诉求:第一是中药凝胶离子透药时极化导致皮肤灼痛红斑,第二是希望理疗温热和电脉冲必须具备双重独立限温硬件切断保护。",
"已收到望京医院骨伤科的最新临床反馈!我已将这两项关键技术诉求关联至项目事实黑板:\n1. 【离子渗透防灼伤】:将采用「双极性非对称周期换相脉冲算法」,换相周期 30s~120s 可调,大幅消除极板电荷积累与电化学灼伤;\n2. 【双重物理限温】:MCU 采用闭环 NTC 数字 PID 控温(38℃~45℃),贴片回路串联双金属温控开关(47℃ 硬件不可逆硬切断),符合 YY 0601 与 GB 9706.1 接触表面限温要求。\n\n智能体小队(organizer、engineer、regulatory、writer)已就位,是否立即为您生成第一版受控《系统需求规格书》?"),
("我已上传中国中医科学院望京医院骨伤科临床中心联合编制的《RDDHF0201-0021_膝骨关节炎综合治疗仪_用户需求说明书(URS)_V1.0.docx》。\n临床重点关注:膝关节腔内深部红外热疗(38℃~45℃ 精确控温)与中频脉冲电刺激的协同镇痛机制,且必须具备皮肤接触防烫伤双重硬件断电保护。请智能体进行 URS 结构化解析,提取关键临床指标、工程参数和适用的国家强制性标准。",
"已成功接收并解析用户需求说明书《RDDHF0201-0021_膝骨关节炎综合治疗仪_用户需求说明书(URS)_V1.0.docx》!\n\n经智能体核心工程知识库比对与特征抽取,提炼四大维度受控输入基线:\n1. **临床功能与预期用途**:用于中老年膝骨关节炎(KOA)阶梯化保守治疗,集成特种波长红外热辐射、中频调制方波及穴位气压循环泵;\n2. **关键技术指标边界**:\n - **离子渗透防灼伤**:采用「双极性非对称周期换相脉冲算法」,换相周期 30s~120s 可调,大幅消除极板电荷积累与电化学灼伤;\n - **双重物理限温**:MCU 采用闭环 NTC 数字 PID 控温(38℃~45℃ ±0.5℃),贴片回路串联双金属温控开关(47℃ 硬件不可逆硬切断),符合 YY 0601 与 GB 9706.1 接触表面限温要求;\n - **输出隔离耐压**:变压器原副边电气绝缘耐压 4000 VAC 1分钟,患者漏电流 < 10 μA;\n3. **安全防护与法规标准映射**:严格对标 YY 0601-2007(中药定向透药治疗仪)、GB 9706.1-2020、YY 0505-2012;\n4. **受控基线状态**:已在工程事实黑板建立系统需求规格书(SRS)的原始来源映射(URS-REQ-001 ~ URS-REQ-039),正前置对齐【智能产品经理】工作流。"),
("请深入分析一下:YY 0601-2007 对输出直流分量和漏电流有严格限值,我们在变压器隔离和驱动桥设计上该怎么落规?",
"关于 YY 0601-2007 与 GB 9706.1-2020 输出端电气绝缘与患者漏电流的合规设计,技术解析如下:\n\n### 一、法规限值基线\n- 患者漏电流(正常状态):直流 < 10 μA,交流 < 100 μA(BF型应用部分);\n- 单一故障状态(S.F.C.):漏电流必须 < 500 μA;\n- YY 0601 规定透药通道开路电压不得超过 100 V,最大有效输出电流不得超过 50 mA。\n\n### 二、硬件工程拓扑\n1. **全隔离驱动**:采用变压器原副边电气绝缘(爬电距离 ≥ 5.0 mm,电气间隙 ≥ 3.2 mm,耐压 4000 VAC 1分钟);\n2. **输出级防直流失步**:在电极输出端串接无极性低等效串联电阻(ESR)安规隔直电容(耐压 250V),即便 MCU PWM 异常封波,也能彻底杜绝纯直流进入人体组织;\n3. **动态阻抗检测**:实时检测电极脱落(阻抗 > 5 kΩ 自动封波)与短路保护(阻抗 < 50 Ω 限流 < 5 mA)。"),
("很好,参数完整。请启动【智能产品经理】工作流,生成完整的受控《系统需求规格书》(RD-SR)。",
@@ -56,10 +64,15 @@ PROJECT_DEFS = [
"highlight_tech": "高压发生器 50kW / 120kV / 0.1s脉冲曝光,平板探测器 30cm×30cm 像元 100μm,激光交叉十字线投照精度 ±0.5mm",
"srs_title": "移动式C形臂X射线机系统需求规格书",
"svp_title": "移动式C形臂X射线机系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0050_移动式C形臂X射线机_用户需求说明书(URS)_V1.0.pdf",
"size": "1.2 MB",
"type": "application/pdf"
},
"chat_topics": {
"u1": [
("参谋你好,天智航骨科手术机器人对配套 C 臂提出了硬性指标:透视中心空间重复定位精度必须优于 0.3mm,且每次三维扫描辐射累积剂量较传统连续透视降低 30% 以上。",
"天智航的指标非常明确!手术机器人配准对 C 臂空间刚性及剂量控制提出了极致要求:\n1. 【空间精度】:必须采用航空级高刚度碳纤维平衡复合弧形臂轨道,搭配高分辨率绝对值编码器(重复定位精度 < 0.2mm);\n2. 【超低剂量脉冲透视】:采用自适应微剂量脉冲曝光技术(1~15 fps 可调,脉宽 < 10ms),配合智能滤线栅与三维去散射线网格重建算法,辐射剂量较连续透视可实测降低 35%~50%;\n3. 【通讯互锁接口】:必须建立标准光学隔离 DICOM 3.0 / RD-Interface 手术机器人控制总线。\n\n智能体小队已就位,建议立即编制《系统需求规格书》锁定专标 GB 9706.254 与 GB 9706.103 辐射防护条款。"),
("我已上传天智航骨科手术机器人配套的《RDDHF0201-0050_移动式C形臂X射线机_用户需求说明书(URS)_V1.0.pdf》。\n天智航研发部提出了硬性配套指标:透视中心空间重复定位精度必须优于 0.3mm,且每次三维扫描辐射累积剂量较传统连续透视降低 30% 以上。请智能体对该 URS 进行合规与工程要素解析。",
"已成功接收并解析用户需求说明书《RDDHF0201-0050_移动式C形臂X射线机_用户需求说明书(URS)_V1.0.pdf》!\n\n手术机器人导航配准对 C 臂空间刚性及剂量控制提出了极致要求,经智能体深度解析提取如下关键工程基线:\n1. **高精度空间定位**:高刚度碳纤维平衡复合弧形臂轨道,绝对值编码器重复定位精度 < 0.2mm,激光交叉十字线投照精度 ±0.5mm;\n2. **超低剂量高频曝光**:高压发生器 50kW / 120kV,自适应微剂量脉冲曝光(1~15 fps,脉宽 < 10ms),搭配 30cm×30cm(像元 100μm)平板探测器,实测辐射剂量降低 35%~50%;\n3. **机器人通信互锁**:标准光学隔离 DICOM 3.0 / RD-Interface 手术机器人控制总线;\n4. **强制性标准对齐**:全面覆盖 GB 9706.1-2020、GB 9706.103 辐射防护、GB 9706.254 X射线专标与 YY 0505;\n5. **受控基线状态**:已提取 99 项工程条目录入事实黑板,作为系统需求规格书编制依据。"),
("请补充分析:C 臂沿轨道滑动和摆动时,电缆拖链与高压电缆弯折寿命以及平衡机构防滑落安全保护如何规范?",
"关于 C 臂机械运动防坠落与电缆寿命工程规格:\n\n### 一、防坠落重力平衡机构设计\n- 采用高精度双恒力弹簧预紧机构与冗余电磁断电刹车(抱闸):在发生意外断电或驱动皮带断裂时,机械抱闸在 10 ms 内强行抱紧,C 臂下坠滑移量不得大于 1.0 mm,完全满足 GB 9706.1 机械危险防护标准;\n- 轨道两端设置双级机械聚氨酯防撞缓冲块及双路极限行程微动开关(硬件级互锁中断高压驱动)。\n\n### 二、高压电缆与信号拖链寿命\n- 高压电缆弯曲半径必须 ≥ 8 倍外径,拖链采用低粉尘超高柔性静音尼龙护套;\n- 规定满行程(滑动 130°、轨道旋转 ±180°)机械疲劳试验寿命必须通过 100,000 次无内部绝缘破损与高压打火。"),
("请启动智能产品经理工作流,产出正式版《系统需求规格书》(RD-SR)。",
@@ -83,10 +96,15 @@ PROJECT_DEFS = [
"highlight_tech": "激光SLAM自主建图避障导航,多自由度听诊机械臂接触力控 0.5N~2.0N,电子听诊器 20Hz~2000Hz 动态降噪",
"srs_title": "移动式远程查房听问诊系统系统需求规格书",
"svp_title": "移动式远程查房听问诊系统系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0025_移动式远程查房听问诊系统_用户需求说明书(URS)_V1.0.docx",
"size": "312 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("总医院 ICU 主任在现场演示中提出:机器人在病床狭窄过道(最小通过宽度 70cm)必须保证不能发生任何刮碰,且电子听诊器采集心音时,必须滤除病房呼吸机和监护仪的气泵低频啸叫。",
"这两点直击重症监护巡诊机器人的痛点!技术应对策略如下:\n1. 【窄道防刮碰】:采用「双 3D-LiDAR + 前向 ToF 深度相机 + 超声环测」全融合避障方案,最小通行净宽由原 80cm 压降至 65cm,并在机械底盘外缘包裹医用硅胶缓冲压力接触带(触碰即停,制动响应时间 < 20ms);\n2. 【心肺音自适应降噪】:电子听诊头内置压电薄膜传感器与环境噪声参考麦克风,采用自适应谱减法与自适应 LMS 滤波,可精准滤除 50Hz/100Hz 工频干扰与呼吸机气泵(20~200Hz 宽带脉冲噪音),心音特征保留度 > 95%。\n\n小队已准备好编制受控系统需求规格书。"),
("我已上传解放军总医院第一医学中心 ICU 编制的《RDDHF0201-0025_移动式远程查房听问诊系统_用户需求说明书(URS)_V1.0.docx》。\n临床现场核心要求:机器人在病房狭窄过道(最小净宽 70cm)必须实现自主导航零刮碰,且电子听诊器采集心音时必须滤除呼吸机与监护仪低频啸叫。请进行 URS 需求提取与标准映射。",
"已成功接收并解析用户需求说明书《RDDHF0201-0025_移动式远程查房听问诊系统_用户需求说明书(URS)_V1.0.docx》!\n\n针对隔离病房自主巡诊与微弱生理声学采集,提取核心受控需求基线如下:\n1. **窄道自主导航与零刮碰**:激光 SLAM + 双 3D-LiDAR + 前向 ToF 深度相机全融合避障,最小通行净宽由 80cm 压缩至 65cm,外缘医用硅胶缓冲带触碰响应 < 20ms;\n2. **微弱心肺音抗噪听诊**:压电薄膜传感器搭配自适应 LMS 滤波,滤除 50Hz 工频及 20~200Hz 呼吸机气泵噪音,心音特征保真度 > 95%,频响 20Hz~2000Hz;\n3. **机械臂接触力控安全**:六维力控传感,接触压力 0.5N~2.0N(设定 1.2N ±0.3N),咳嗽突发阻抗在 5ms 内后撤卸力;\n4. **标准与法规对标**:对齐 GB 9706.1-2020、YY 0505、医用服务机器人通用安全规范,提取 133 项技术条目入库。"),
("听诊机械臂接触患者胸部时,如果患者咳嗽或者突然翻身,如何保证绝对安全?力反馈安全策略是什么?",
"机械臂接触人体的安全策略遵循严格的三级保护机制:\n\n1. **一级力控闭环**:听诊臂末端配置六维力传感器,微处理器实时运行阻抗力控算法,设定目标接触压力为 1.2 N ± 0.3 N;当患者咳嗽导致胸壁突然突起(瞬时压力 > 3.0 N)时,机械臂在 5 ms 内主动后撤卸力;\n2. **二级物理滑移离合器**:关节驱动链内置机械阻尼过载脱扣器,任何方向外力超过 8 N 时机械脱扣自由回弹;\n3. **三级软件超时防护**:单次听诊贴合持续时间不得超过 45s,超时强制收回至归位安全锚点。完全满足机器人医疗器械接触安全准则。"),
("请启动【智能产品经理】工作流,生成规格书。",
@@ -110,10 +128,15 @@ PROJECT_DEFS = [
"highlight_tech": "涂覆全氟医用绝缘层耐击穿电压 > 3000Vrms,电极刀头采用防粘耐腐 316L/钨合金,手柄密封防水 IPX7",
"srs_title": "一次性使用高频手术电极系统需求规格书",
"svp_title": "一次性使用高频手术电极系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0089_一次性使用高频手术电极_用户需求说明书(URS)_V1.0.docx",
"size": "198 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("张工汇报:祥合洁电极重点在型检中的高温高频绝缘耐压和生物相容性,刀杆在 300℃ 高温切凝后绝缘层不能脱落或碳化击穿。",
"收到!针对微创高频电极两大生命线指标:\n1. 【耐高频高压击穿】:依据 GB 9706.202-2021,绝缘套管耐压必须经受高频峰值电压(典型 3500 Vpeak)测试,泄漏电流不得灼伤内窥镜鞘管和腹壁组织;\n2. 【绝缘层耐热抗老化】:采用交联氟塑料热缩护套或聚醚醚酮(PEEK),在模拟连续电凝 60 秒后,绝缘电阻仍保持 > 100 MΩ;\n3. 【生物相容性】:刀头与手柄符合 GB/T 16886 细胞毒性(≤ 1级)、皮内刺激与迟发型超敏反应全阴性。\n\n智能体小队将以此基准构建需求规格书。"),
("我已上传常州祥合洁医疗编制的《RDDHF0201-0089_一次性使用高频手术电极_用户需求说明书(URS)_V1.0.docx》。\n质量部提出型检要点:刀杆在 300℃ 高温切凝后绝缘层不能脱落或碳化击穿,且全套材料必须满足医用生物相容性要求。请解析该 URS 文档并提炼工程基线。",
"已成功接收并解析用户需求说明书《RDDHF0201-0089_一次性使用高频手术电极_用户需求说明书(URS)_V1.0.docx》!\n\n微创高频电极的核心工程与法规要素已提炼归纳:\n1. **耐高频高压绝缘**:全氟医用绝缘层耐击穿电压 > 3000Vrms(高频峰值 3500 Vpeak),连续切凝 60 秒后绝缘电阻保持 > 100 MΩ,杜绝鞘管与腹壁热灼伤;\n2. **电极材料与结构**:防粘耐腐 316L/钨合金刀头,手柄 IPX7 密封防水,电极抗弯曲强度承受 20N 侧向力无塑性形变;\n3. **生物相容性与无菌**:符合 GB/T 16886 细胞毒性(≤ 1级)、皮内刺激与迟发超敏全阴性,环氧乙烷残留量 EO ≤ 10 μg/g;\n4. **法规标准映射**:对标 GB 9706.202-2021(高频手术附件专标)、GB 9706.1-2020、GB/T 16886,提炼 46 项工程指标录入黑板。"),
("请详细说明按 GB 9706.202 进行高频电极高压试验的配置要求与检验方法。",
"GB 9706.202-2021 对高频附件绝缘强度的检测规范:\n- 试验在 0.9% 生理盐水浴中进行,浸没深度覆盖有效工作杆部分(除裸露电极尖端 5mm 外);\n- 施加 1.2 倍额定附件高频峰值工作电压(如标称 3000V 则施加 3600Vpeak,频率 300kHz~1MHz)持续 60 秒;\n- 试验期间不得出现火花放电、飞弧或绝缘套管烧穿孔洞,高频漏电流必须低于 50 mA。\n该检验规程已作为强制条目纳入规格书。"),
("请启动【智能产品经理】工作流,生成受控需求规格书。",
@@ -137,10 +160,15 @@ PROJECT_DEFS = [
"highlight_tech": "双频根尖阻抗测量精度 ±0.1mm,自适应扭矩控制 0.2~5.0 N·cm,超载在 20ms 内自动反转防断针",
"srs_title": "自动化牙髓根管治疗仪系统需求规格书",
"svp_title": "自动化牙髓根管治疗仪系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0029_自动化牙髓根管治疗仪_用户需求说明书(URS)_V1.0.docx",
"size": "245 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("北京口腔医院专家要求:根管治疗仪必须彻底解决器械断针风险,在弯曲根管遇到阻力时扭矩响应必须毫秒级反转,且在充盈次氯酸钠溶液湿润环境下测距不失准。",
"收到!牙髓根管治疗的两个世界级难点已被准确定位:\n1. 【断针预防与恒扭矩响应】:微电机驱动器必须采用 10kHz 高频矢量电流采样,闭环扭矩响应时间控制在 15 ms 以内;一旦实时扭矩逼近设定安全阈值(如 2.5 N·cm),立即自动触发「往复旋转(Reciprocating)」或「自动反转退锉(Auto-Reverse)」,杜绝镍钛器械扭转疲劳断裂;\n2. 【湿润根管测距】:采用高低双频(0.5kHz 与 4.0kHz)交流阻抗比率积分测距算法,即使根管内存在血液、脓液或次氯酸钠冲洗液,根尖孔狭窄区距离精度仍稳定保持在 ±0.2 mm 以内。\n\n智能体小队立即以此生成系统规格书。"),
("我已上传北京口腔医院牙体牙髓科编制的《RDDHF0201-0029_自动化牙髓根管治疗仪_用户需求说明书(URS)_V1.0.docx》。\n临床专家要求:根管治疗仪必须彻底解决器械断针风险,在弯曲根管遇到阻力时扭矩响应必须毫秒级反转,且在充盈次氯酸钠溶液湿润环境下测距不失准。请进行 URS 要素提炼。",
"已成功接收并解析用户需求说明书《RDDHF0201-0029_自动化牙髓根管治疗仪_用户需求说明书(URS)_V1.0.docx》!\n\n牙髓根管治疗核心工程与临床指标已结构化抽取:\n1. **断针预防自适应闭环**:10kHz 高频矢量电流采样,扭矩控制范围 0.2~5.0 N·cm,超载在 15~20ms 内触发自动往复反转退锉,彻底消除疲劳断针风险;\n2. **湿润复杂根管测距**:高低双频(0.5kHz/4.0kHz)交流阻抗比率积分算法,在血液、次氯酸钠浸润环境下根尖孔距离测量精度稳定在 ±0.1mm;\n3. **机身耐高温灭菌**:弯机头与马达承受 134℃ 高压蒸汽灭菌 250 次循环无阻尼衰减;\n4. **法规标准映射**:对齐 YY 0836-2011 牙科根管预备机专标、GB 9706.1-2020、YY 0505,已提炼 62 项技术条目写入黑板。"),
("请梳理弯曲根管模型下疲劳循环寿命测试和反转延迟时间具体的测试方法与接受准则。",
"依据 YY 0836 与临床根管器械标准:\n- 采用不锈钢仿真弯曲人工根管模型(弯曲角度 45° 与 60°,曲率半径 5mm);\n- 设定电机转速 350 rpm,限扭 2.0 N·cm,测试 100 次阻滞加载,记录从阻滞发生到电机反向旋转的响应延迟时间,接受准则:延时不得大于 20 ms;\n- 进行 500 次循环扩锉,镍钛锉不得发生断裂或塑性解旋畸变。条目已入库。"),
("请启动智能产品经理工作流编制《系统需求规格书》。",
@@ -164,10 +192,15 @@ PROJECT_DEFS = [
"highlight_tech": "双目光学透视配准空间误差 < 0.8mm,运动到成像端到端延迟 < 20ms,立体渲染帧率稳定 90fps",
"srs_title": "智能手术AR导航系统系统需求规格书",
"svp_title": "智能手术AR导航系统系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0035_智能手术AR导航系统_用户需求说明书(URS)_V1.0.docx",
"size": "420 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("研发组汇报:自研AR外科导航软件需要进入注册体系。主任强调头戴AR眩晕感和配准漂移问题,要求空间重叠精度必须小于 1mm,帧率不能低于 60fps。",
"收到!作为高精度的医疗 AR 导航软件(SaMD),针对眩晕与空间精度制定如下规格:\n1. 【空间配准精度】:结合红外光学追踪仪与眼镜端 SLAM 重定位,三维空间靶点配准均方根误差(TRE)控制在 ≤ 0.8 mm;\n2. 【运动到光子延迟(M2P)】:全链路优化图像渲染管线与异步时间扭曲(ATW),端到端延迟压至 ≤ 18 ms,消除医生手术视野视差错位与眩晕感;\n3. 【软件合规】:完全按照 YY/T 0664-2020 软件安全性级别(B级)及《医疗器械网络安全指导原则》实施。"),
("我已上传自研中心编制的《RDDHF0201-0035_智能手术AR导航系统_用户需求说明书(URS)_V1.0.docx》。\n转化医学实验室强调头戴 AR 眩晕感和配准漂移问题,要求空间重叠误差必须小于 1mm,运动延迟低于 20ms,帧率不低于 60fps。请智能体提取受控输入要素。",
"已成功接收并解析用户需求说明书《RDDHF0201-0035_智能手术AR导航系统_用户需求说明书(URS)_V1.0.docx》!\n\n独立医疗器械软件(SaMD)核心工程与算法基线提取如下:\n1. **空间多模配准精度**:红外光学追踪与 AR 眼镜 SLAM 融合,靶点配准均方根误差 TRE ≤ 0.8mm,空间虚拟投射误差 < 1.0mm;\n2. **超低运动延迟与高帧率**:渲染管线与异步时间扭曲(ATW)优化,端到端运动到光子延迟 M2P ≤ 18ms,立体渲染稳定 90fps,彻底杜绝术者眩晕;\n3. **安全容错与告警**:标记物遮挡超 2 帧(22ms)立即触发闪烁警示,超 500ms 自动隐藏虚景,防止误导术者;\n4. **法规标准映射**:对标 YY/T 0664-2020(软件安全性级别 B 级)、GB/T 25000.51、网络安全指导原则,提炼 57 项规范条目。"),
("请针对软件算法异常(如定位丢失、标记物遮挡)时的人机界面安全警示与容错逻辑给出规格。",
"软件容错与安全机制规约:\n- 当红外反光标记点被手术器械遮挡超过 2 帧(约 22 ms)时,屏幕虚景必须在 5 ms 内切换为半透明闪烁警示态,并弹出文字警告「跟踪信号中断,请勿依据当前虚景下刀」;\n- 若遮挡持续超过 500 ms,自动隐藏虚景模型,杜绝误导操作;\n- 系统支持双目独立标定参数动态补偿算法,满足 GB/T 25000.51 软件容错性准则。"),
("请启动【智能产品经理】工作流,生成受控软件需求规格书。",
@@ -191,10 +224,15 @@ PROJECT_DEFS = [
"highlight_tech": "双极/多极同轴高频等离子体激发,组织消融工作温度 40℃~70℃,集成冲洗与负压吸引通道",
"srs_title": "等离子射频手术电极系统需求规格书",
"svp_title": "等离子射频手术电极系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0068_等离子射频手术电极_用户需求说明书(URS)_V1.0.docx",
"size": "210 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("蓝汀电极样机测试发现两个问题:一是刀头等离子薄层激发点火时存在高频微弧闪络;二是抽吸通道容易被碳化软组织碎屑堵塞。",
"这两个问题非常典型,属于等离子射频电极的工艺核心:\n1. 【等离子微弧稳定与阻抗匹配】:刀头电极与回路电极间距严格控制在 0.8 mm ± 0.05 mm,采用耐等离子轰击的高纯陶瓷绝缘体(Al2O3 ≥ 99.5%),并在表面采用激光微织构技术,使得高频等离子体在 0.9% 生理盐水下可在 100 kHz 激发均匀薄层,消除集中电弧火花;\n2. 【防堵塞抽吸一体化设计】:抽吸口采用喇叭口渐变孔径(内径 1.2mm 扩至 1.8mm),配合特氟龙内壁涂层,阻力降低 40%,杜绝碎屑黏附。\n\n智能体小队将据此整理规格书。"),
("我已上传北京蓝汀医疗编制的《RDDHF0201-0068_等离子射频手术电极_用户需求说明书(URS)_V1.0.docx》。\n临床反馈重点:刀头等离子薄层激发点火时需消除微弧闪络,抽吸通道需防止碳化软组织碎屑堵塞,消融工作温度严格限制在 40℃~70℃。请智能体解析 URS 并提炼工程基线。",
"已成功接收并解析用户需求说明书《RDDHF0201-0068_等离子射频手术电极_用户需求说明书(URS)_V1.0.docx》!\n\n微创关节与耳鼻喉等离子刀头核心工程要素提炼如下:\n1. **微弧稳定与阻抗匹配**:多极间距控制在 0.8mm ±0.05mm,耐轰击高纯刚玉陶瓷(Al2O3 ≥ 99.5%)微织构表面,100kHz 射频下激发均匀超薄等离子体层,消除集中电弧火花;\n2. **一体化防堵塞抽吸**:渐变喇叭口抽吸孔(1.2mm 扩至 1.8mm)涂覆内壁减阻特氟龙,阻力降低 40%;\n3. **热损伤控制**:低温消融工作温度 40℃~70℃,侧向热损伤深度 ≤ 0.5mm;\n4. **法规标准映射**:对齐 YY 9706.202、GB 9706.1-2020、GB/T 16886,提取 38 项关键参数录入事实黑板。"),
("请确认按 YY 9706.202 对等离子电极的高频漏电流及耐受持续消融的寿命要求。",
"依据标准与技术指标:\n- 高频患者漏电流在开路及额定负载下必须 ≤ 100 mA;\n- 刀头在额定最高功率(如 250W)下,连续激发等离子消融 10 秒、间歇 10 秒,循环 100 次后,陶瓷绝缘体无破裂碎裂,电极无脱落熔损,气密性(-80 kPa 维持 10s 泄漏 < 5 kPa)保持合格。"),
("请启动【智能产品经理】工作流生成规格书。",
@@ -218,10 +256,15 @@ PROJECT_DEFS = [
"highlight_tech": "双通道 100kHz 射频功率源,消融功率 10~350W,凝血功率 10~150W,自适应组织阻抗负载跟踪",
"srs_title": "低温等离子体手术系统系统需求规格书",
"svp_title": "低温等离子体手术系统系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0092_低温等离子体手术系统_用户需求说明书(URS)_V1.0.docx",
"size": "380 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("天津总医院耳鼻喉科提出:做扁桃体切除与鼾症打孔手术时,主机必须能秒级识别所插刀头型号,并且脚踏开关有清晰的档位阻尼防误踏。",
"这两项要求是三类手术主机易用性与安全性的核心:\n1. 【刀头智能 RFID/电阻识别】:主机刀头插座内嵌数字加密识别通信,插入刀头 0.5s 内自动读取刀头类型(鼻甲消融/扁桃体切除/喉部精细),并自动预设推荐功率档位,防止大功率误伤;\n2. 【IPX8 级双联脚踏开关】:脚踏采用机械力感渐进弹簧(消融踏板行程 15mm/阻力 20N,凝血踏板行程 12mm/阻力 15N,颜色红黄严格分立),防水等级 IPX8,即便浸没手术室液体中也能持续安全切断;\n3. 【快速阻抗跟踪】:当刀头离开盐水介质阻抗骤升时,在 5 ms 内自动降功封波,消除空火危险。\n\n智能体小队准备展开规格书起草。"),
("我已上传天津医科大学总医院耳鼻喉头颈外科编制的《RDDHF0201-0092_低温等离子体手术系统_用户需求说明书(URS)_V1.0.docx》。\n科室主任要求:主机必须具备智能刀头插座秒级识别与自适应推荐功率,脚踏开关具备明确双色阻尼防误踩,且高频工作时不能对心电监护仪产生电磁干扰。请提取 URS 受控基线。",
"已成功接收并解析用户需求说明书《RDDHF0201-0092_低温等离子体手术系统_用户需求说明书(URS)_V1.0.docx》!\n\n医用三类低温等离子手术发生器核心规格已提炼归纳:\n1. **射频功率源与自适应阻抗跟踪**:双通道 100kHz 功率源,消融 10~350W,凝血 10~150W,动态组织阻抗跟踪 10Ω~5000Ω,脱离介质 5ms 内自锁降功;\n2. **刀头加密识别与 IPX8 脚踏**:插座 0.5s 内读取 RFID/加密芯片并加载推荐功率,双联脚踏行程分立阻尼防误踏,防水 IPX8;\n3. **电磁兼容与低干扰**:LC 双阶低通滤波与电源 EMI 抑制,点火状态心电监护仪波形失真 < 5%;\n4. **法规标准映射**:严格依据 GB 9706.1-2020、YY 9706.202、YY 0505,梳理 200 项全面技术条目。"),
("请补充等离子手术主机在电磁兼容(EMC)骚扰发射方面的设计规格,高频打火时会不会干扰监护仪和麻醉机?",
"主机 EMC 与射频抗扰度控制规约:\n- 依据 YY 0505 与 GB 4824(1组A类),在输出端口增设共模扼流圈与 LC 双阶低通滤波器,滤除 100kHz 基频以上的高次谐波;\n- 电源入口配置医疗级高性能 EMI 滤波器(漏电流 < 50 μA);\n- 在手术室与心电监护仪同机测试时,等离子点火状态下心电监护波形失真不得超过 5%,不产生假性心律失常报警。"),
("请启动【智能产品经理】工作流,生成受控系统需求规格书。",
@@ -245,10 +288,15 @@ PROJECT_DEFS = [
"highlight_tech": "气压输出 1.0~5.0 bar 可调,频率 1~21 Hz,脉冲上升时间 < 3.5μs,能量密度 0.05~0.65 mJ/mm²",
"srs_title": "体外冲击波治疗仪系统需求规格书",
"svp_title": "体外冲击波治疗仪系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0095_体外气压弹道冲击波治疗仪_用户需求说明书(URS)_V1.0.docx",
"size": "356 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("北医三院运医专家反馈:治疗仪手柄连续击打 2000 发后枪体发烫严重,影响护士握持;另外要求脉冲气压重复精度必须优于 ±5%,保证治疗剂量一致。",
"非常关键的临床工程反馈!技术改善措施如下:\n1. 【手柄散热与振动隔绝】:在治疗手柄弹道腔外壁设计「风冷对流循环风道」搭配航空级隔热 Aerogel 涂层,连续击打 4000 发后手柄握持区外表温升控制在 ≤ 8℃(实测表面温度 < 40℃);并在握手位置增设硅胶减震阻尼套,向操作者传导的手部振动加速度降低 60%;\n2. 【气压闭环精准控制】:采用进口比例伺服阀与数字气压传感器(采样率 1kHz),闭环反馈补偿气泵压力波动,确保 1.0~5.0 bar 范围内击打气压误差控制在 ±3% 以内。\n\n智能体小队立即启动规格书编写。"),
("我已上传北医三院运动医学研究所编制的《RDDHF0201-0095_体外气压弹道冲击波治疗仪_用户需求说明书(URS)_V1.0.docx》。\n运医专家反馈:治疗手柄连续击打 2000 发后枪体发烫严重,影响护士握持;另外要求脉冲气压重复精度必须优于 ±5%,保证治疗剂量一致。请智能体提取 URS 受控设计输入。",
"已成功接收并解析用户需求说明书《RDDHF0201-0095_体外气压弹道冲击波治疗仪_用户需求说明书(URS)_V1.0.docx》!\n\n体外冲击波组织损伤治疗设备核心工程基线抽取如下:\n1. **手柄热管理与减震隔绝**:风冷对流循环风道搭配隔热 Aerogel 涂层,连续击打 4000 发表面温升 ≤ 8℃(实测 < 40℃),硅胶减震阻尼套降低手部振动 60%;\n2. **气压闭环稳压与声学输出**:比例伺服阀闭环反馈,1.0~5.0 bar 气压误差控制在 ±3%,频率 1~21 Hz,脉冲上升时间 < 3.5μs,能量密度 0.05~0.65 mJ/mm²;\n3. **弹道寿命与耐冲击**:撞针寿命 ≥ 100 万次,治疗头规格 6mm/15mm/25mm 齐全;\n4. **法规标准映射**:严格依据 YY 0650-2008(体外冲击波治疗机专标)、GB 9706.1-2020、YY 0505,提炼 90 项规范指标。"),
("请按照 YY 0650 专标,解释冲击波声场聚焦测量的具体要求(如上升时间、焦斑大小)。",
"依据 YY 0650-2008 冲击波声学性能要求:\n- 采用水听器(聚偏二氟乙烯 PVDF 针式水听器)在去气蒸馏水中进行声压场扫描;\n- 冲击波正压脉冲上升时间(Rise Time)不得大于 3.5 μs;\n- -6dB 焦斑长径与短径尺寸需给出确定数值;\n- 脉冲峰值正声压(p+)与峰值负声压(p-)须符合标称值 ±20% 的公差界限,条目已全部纳入需求规格书。"),
("请启动【智能产品经理】工作流,生成受控系统需求规格书。",
@@ -272,10 +320,15 @@ PROJECT_DEFS = [
"highlight_tech": "高频超声斑点噪声自适应各向异性扩散滤波,滑膜/肌腱轮廓自动分割 Dice 相似度 ≥ 0.88,线性测距误差 < 0.2mm",
"srs_title": "肌骨超声影像处理软件系统需求规格书",
"svp_title": "肌骨超声影像处理软件系统验证方案及计划",
"urs_file": {
"name": "RDDHF0201-0108_肌骨超声影像处理软件_用户需求说明书(URS)_V1.0.docx",
"size": "520 KB",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
},
"chat_topics": {
"u1": [
("中日友好医院超声科反馈:肌骨超声斑点噪声大、滑膜边界模糊,算法分割滑膜厚度时经常将邻近肌腱组织误识别为滑膜,要求测量误差在 0.3mm 以内。",
"超声软组织边界提取一直是影像算法的难点。针对肌骨超声特性,制定如下工程与算法规格:\n1. 【预处理滤波】:采用「各向异性扩散与双边引导滤波复合算法」,在平滑斑点噪声的同时精准保留 0.1mm 级筋膜回波边缘;\n2. 【滑膜/肌腱注意力分割网络】:融入先验解剖空间注意力约束,区分低回波滑膜组织与纤维肌腱纹理,实测分割重合度 Dice ≥ 0.88;\n3. 【可校准测距标定】:基于超声探头频率声速自动校正,测距绝对误差稳定控制在 ≤ 0.2 mm 以内;\n4. 【合规文档】:严格对标国家局《人工智能医用软件审评指导原则》与网络安全要求。"),
("我已上传中日友好医院超声科与风湿免疫科联合编制的《RDDHF0201-0108_肌骨超声影像处理软件_用户需求说明书(URS)_V1.0.docx》。\n科室反馈:超声斑点噪声大、滑膜边界模糊,算法分割滑膜厚度时经常与邻近肌腱组织混淆,要求测量误差在 0.3mm 以内。请提取该软件产品需求说明书的受控要素。",
"已成功接收并解析用户需求说明书《RDDHF0201-0108_肌骨超声影像处理软件_用户需求说明书(URS)_V1.0.docx》!\n\n独立超声影像处理辅助分析软件(SaMD)核心算法与工程基线提炼如下:\n1. **超声斑点降噪与边界保持**:各向异性扩散与双边引导滤波复合算法,平滑斑点噪声的同时精确保留 0.1mm 筋膜微细回波边缘;\n2. **解剖注意力分割网络**:融合滑膜解剖先验知识,区分低回波滑膜与肌腱纤维纹理,滑膜自动分割重合度 Dice ≥ 0.88;\n3. **高精度线性测距**:基于探头声速动态校正,滑膜增生厚度及肌腱撕裂间距绝对测距误差 ≤ 0.2mm;\n4. **数据脱敏与安全留痕**:患者标识脱敏率 100%,日志防篡改保留 ≥ 5年,模型权重 SHA-256 锁定;\n5. **法规标准映射**:对标 YY/T 0664-2020、GB/T 25000.51、《人工智能医用软件审评指导原则》,提取 54 项规格条目入库。"),
("请详细说明按 YY/T 0664-2020 编制软件测试报告与数据安全留痕的要求。",
"依据《医疗器械软件指导原则》与 YY/T 0664:\n- 建立覆盖算法版本、模型权重 SHA-256、输入数据集可追溯性的闭环留痕;\n- 软件日志记录每例测量患者标识匿名化脱敏(脱敏率 100%)、操作员身份及测量结果时间戳,日志防篡改保留不少于 5 年;\n- 白盒单元测试覆盖率严格达标(语句覆盖率 ≥ 90%)。"),
("请启动【智能产品经理】工作流,生成受控软件需求规格书。",
@@ -340,7 +393,7 @@ def build_data():
doc_srs_id = f"doc-proj{pid}-system_reqs"
doc_svp_id = f"doc-proj{pid}-test_manager"
# 5. 读取真实高质量 Markdown 交付物
# 读取真实高质量 Markdown 交付物
srs_file = os.path.join(p["path"], "01-系统需求规格书.md")
svp_file = os.path.join(p["path"], "02-系统验证方案及计划.md")
@@ -365,14 +418,22 @@ def build_data():
msg_idx = 2
for pair_idx, (user_q, asst_a) in enumerate(p["chat_topics"]["u1"]):
messages.append({
user_msg = {
"id": f"m-{pkey}-{msg_idx}",
"sessionId": u1_sess,
"role": "user",
"content": user_q,
"timestamp": f"09:{10 + msg_idx * 2:02d}",
"authorName": "张工"
})
}
# 第一轮对话为上传 URS 需求文档
if pair_idx == 0:
user_msg["attachments"] = [p["urs_file"]]
user_msg["category"] = "file"
user_msg["intentTag"] = "📤 上传用户需求说明书 (URS)"
messages.append(user_msg)
msg_idx += 1
asst_msg = {
@@ -383,7 +444,22 @@ def build_data():
"timestamp": f"09:{10 + msg_idx * 2:02d}",
"authorName": "项目助手"
}
if pair_idx == 2:
if pair_idx == 0:
asst_msg["category"] = "file"
asst_msg["intentTag"] = "📄 用户需求文档 (URS) 接收与要素提取"
asst_msg["phaseEvents"] = [
{"step": "1", "icon": "📥", "label": "URS 文档解析", "status": "completed"},
{"step": "2", "icon": "🔬", "label": "临床与工程诉求提取", "status": "completed"},
{"step": "3", "icon": "🛡️", "label": "法规标准对标", "status": "completed"},
{"step": "4", "icon": "📌", "label": "受控基线黑板录入", "status": "completed"}
]
elif pair_idx == 1:
asst_msg["category"] = "consult"
asst_msg["intentTag"] = "🔬 关键技术方案与强标研判"
elif pair_idx == 2:
asst_msg["category"] = "task"
asst_msg["intentTag"] = "📋 编制完成并提交审核"
# 编制完成提交审核确认门禁卡
asst_msg["interactiveCard"] = {
"cardId": f"card-submit-srs-{pid}",
@@ -411,6 +487,8 @@ def build_data():
"resolvedAt": "2026-09-11T00:18:00.000Z"
}
elif pair_idx == 3:
asst_msg["category"] = "task"
asst_msg["intentTag"] = "🧪 测试方案评审与血缘绑定"
# 系统验证方案测试评审确认门禁卡
asst_msg["interactiveCard"] = {
"cardId": f"card-verify-svp-{pid}",
@@ -440,7 +518,7 @@ def build_data():
messages.append(asst_msg)
msg_idx += 1
# 3. 生成李主管 (u2) 审核对话 (挂载【审核确认卡】)
# 3. 生成李主管 (u2) 审核对话 (调阅张工上传的 URS 文档并挂载【审核确认卡】)
u2_sess = f"sess-{pkey}-u2"
messages.append({
"id": f"m-{pkey}-u2-1",
@@ -454,7 +532,9 @@ def build_data():
"id": f"m-{pkey}-u2-2",
"sessionId": u2_sess,
"role": "user",
"content": f"我是审核人李主管。请核查张工提交的《{p['srs_title']}》是否满足强制性标准要求,重点检查 {p['highlight_tech']} 的指标完整性。",
"category": "review",
"intentTag": "🔍 调阅 URS 对标合规审查",
"content": f"我是审核人李主管。我已调阅张工上传的用户需求文档《{p['urs_file']['name']}》及新编制的《{p['srs_title']}》。请重点核查:\n1. URS 中临床提出的核心指标({p['highlight_tech']})是否已 100% 转译为受控 REQ 条目;\n2. 适用强标({p['target_market']})有无遗漏;\n3. 指标是否具备明确公差与检验方法,准备出具初审结论。",
"timestamp": "10:05",
"authorName": "李主管"
})
@@ -462,7 +542,9 @@ def build_data():
"id": f"m-{pkey}-u2-3",
"sessionId": u2_sess,
"role": "assistant",
"content": f"李主管您好!针对《{p['srs_title']}》的合规审核报告如下:\n\n1. **强标覆盖核查**:完全覆盖 {p['target_market']} 相关条款,无漏项;\n2. **关键参数审查**:{p['highlight_tech']} 已全部转化为具备 REQ- 编号的可验证条目,且设定了明确的公差界限;\n3. **可测性审查**:所有条目均已指明验证方法(分析/测试/审查),不存在模糊占位描述。\n\n已为您生成技术与合规审核门禁卡片,请您核验后执行确认:",
"category": "review",
"intentTag": "📋 URS 溯源覆盖核查与合规审核",
"content": f"李主管您好!针对张工上传的 URS 输入《{p['urs_file']['name']}》与所编制《{p['srs_title']}》的合规对标审核报告如下:\n\n1. **URS 需求条目覆盖度**:原文档提取的全部临床与工程需求已全量转译,覆盖率 100%,已分配全局唯一受控编号(REQ-001 ~ REQ-XXX);\n2. **关键参数与公差界限**:核心技术亮点({p['highlight_tech']})均已设定精确公差区间与安全切断保护;\n3. **强制性标准审查**:完全符合 {p['target_market']} 现行有效版本,无漏项;\n4. **可检验性审查**:所有条目均已指明验证方法(分析/型检/测试),无模糊占位描述。\n\n已为您生成技术与合规审核门禁卡片,请您核验后执行确认:",
"timestamp": "10:06",
"authorName": "项目助手",
"interactiveCard": {
@@ -471,8 +553,8 @@ def build_data():
"title": "系统需求规格书·合规与技术审核门禁",
"targetDocId": doc_srs_id,
"targetDocTitle": p["srs_title"],
"sectionTitle": "强标覆盖与指标可测性审查",
"proposedContent": f"李主管已完成合规性初审:{p['target_market']} 相关法规与工程参数({p['highlight_tech']})对标无误,全部条目具备可验证性,建议确认通过并流转总监终审。",
"sectionTitle": f"URS 需求追溯({p['urs_file']['name']})与强标审查",
"proposedContent": f"李主管已完成合规性初审:已对标张工上传的 URS 文档《{p['urs_file']['name']}》,{p['target_market']} 相关法规与工程参数({p['highlight_tech']})转译无误,需求溯源覆盖率 100%,建议确认通过并流转总监终审。",
"impactRisk": "中风险:确认后文档保持锁定并移交终审批准人;若有疑义可执行驳回退回编制修订",
"status": "resolved",
"ttlTurns": 3,
@@ -492,7 +574,7 @@ def build_data():
"payload": {"docId": doc_srs_id}
}
],
"resolutionSummary": "李主管(审核负责人)已审核通过,已流转至终审阶段",
"resolutionSummary": f"李主管已确认通过 URS 溯源审核,流转至终审阶段",
"resolvedBy": "李主管",
"resolvedAt": "2026-09-11T00:26:00.000Z"
}
@@ -501,12 +583,13 @@ def build_data():
"id": f"m-{pkey}-u2-4",
"sessionId": u2_sess,
"role": "user",
"content": "审核意见:技术指标分解详尽,强标依据充分,同意通过并转交王总监终审。",
"category": "review",
"content": f"审核意见:已核验 URS 原文,技术指标分解详尽,强标依据充分,同意通过并转交王总监终审。",
"timestamp": "10:08",
"authorName": "李主管"
})
# 4. 生成王总监 (u3) 批准对话 (挂载【终审批准卡】)
# 4. 生成王总监 (u3) 批准对话 (确认 URS 输入基线到 SRS 的闭环并挂载【终审批准卡】)
u3_sess = f"sess-{pkey}-u3"
messages.append({
"id": f"m-{pkey}-u3-1",
@@ -520,7 +603,9 @@ def build_data():
"id": f"m-{pkey}-u3-2",
"sessionId": u3_sess,
"role": "user",
"content": f"我是批准人王总监。李主管已完成《{p['srs_title']}》的初审,请汇报该受控交付物终审批准的整体合规结论与后续推进。",
"category": "review",
"intentTag": "👑 终审签批与基线决策",
"content": f"我是批准人王总监。李主管已完成对基于 URS 原始输入《{p['urs_file']['name']}》到《{p['srs_title']}》编制的初审,请汇报该受控交付物终审批准的整体合规结论与权威基线发布。",
"timestamp": "10:20",
"authorName": "王总监"
})
@@ -528,7 +613,9 @@ def build_data():
"id": f"m-{pkey}-u3-3",
"sessionId": u3_sess,
"role": "assistant",
"content": f"王总监好!\n\n《{p['srs_title']}》已由张工编制完成、李主管初审通过,各项设计输入基线完整,质量门禁静态 AST 检测通过率 100%。\n终审批准后,系统将正式锁定 V1.0 权威基线,并自动解锁下游【智能测试经理】工作流,建立系统验证方案的受控文档血缘追溯。请您审阅并执行终审批准:",
"category": "review",
"intentTag": "🎯 权威基线受控发布终审",
"content": f"王总监好!\n\n《{p['srs_title']}》基于原始用户需求文档《{p['urs_file']['name']}》编制,经张工编制、李主管初审通过,设计输入溯源闭环率 100%,质量门禁静态 AST 检测通过率 100%。\n终审批准后,系统将正式锁定 V1.0 权威基线,并自动解锁下游【智能测试经理】工作流,建立系统验证方案的受控文档血缘追溯。请您审阅并执行终审批准:",
"timestamp": "10:22",
"authorName": "项目助手",
"interactiveCard": {
@@ -537,8 +624,8 @@ def build_data():
"title": "系统需求规格书·终审批准门禁",
"targetDocId": doc_srs_id,
"targetDocTitle": p["srs_title"],
"sectionTitle": "V1.0 权威基线受控发布决策",
"proposedContent": f"全套工程输入基线与合规门禁核验通过(指标亮点:{p['highlight_tech']}),准予正式批准生效,并作为下游测试验证的受控前置基线。",
"sectionTitle": f"V1.0 权威基线受控发布决策 (基于 {p['urs_file']['name']})",
"proposedContent": f"全套工程输入基线与合规门禁核验通过(对标 URS《{p['urs_file']['name']}》,亮点:{p['highlight_tech']}),准予正式批准生效,并作为下游测试验证的受控前置基线。",
"impactRisk": "核心门禁:终审批准后锁定权威基线,并自动解锁下游【智能测试经理】工作流",
"status": "resolved",
"ttlTurns": 3,
@@ -552,7 +639,7 @@ def build_data():
"payload": {"docId": doc_srs_id}
}
],
"resolutionSummary": "王总监(批准人)已终审批准生效,已建立受控基线并解锁测试工作流",
"resolutionSummary": "王总监已终审批准生效,已建立受控基线并解锁测试工作流",
"resolvedBy": "王总监",
"resolvedAt": "2026-09-11T00:28:00.000Z"
}
@@ -561,6 +648,7 @@ def build_data():
"id": f"m-{pkey}-u3-4",
"sessionId": u3_sess,
"role": "user",
"category": "review",
"content": "终审批准通过。请立即下达工程指令,按计划启动系统验证方案编制。",
"timestamp": "10:25",
"authorName": "王总监"
@@ -584,7 +672,7 @@ def build_data():
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 00:30",
"summary": f"{p['name']}的完整受控系统需求规格书,已获终审批准,具备严格 REQ 编号与验证方式。"
"summary": f"{p['name']}的完整受控系统需求规格书,已对标 URS《{p['urs_file']['name']}》并获终审批准,具备严格 REQ 编号与验证方式。"
})
deliverables.append({
"docId": doc_svp_id,
@@ -623,7 +711,7 @@ def build_data():
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 00:00:00",
"summary": f"{p['name']}系统需求规格书,已通过法规与工程联合评审。",
"summary": f"{p['name']}系统需求规格书,已对标 URS《{p['urs_file']['name']}》并通过法规与工程联合评审。",
"markdown": srs_md,
"content": srs_md,
"sha256": srs_hash
@@ -653,7 +741,7 @@ def build_data():
}
seed_data = {
"generatedAt": "2026-09-11T00:40:00",
"generatedAt": "2026-09-11T09:10:00",
"projects": [
{
"id": p["id"],
@@ -750,13 +838,12 @@ ON CONFLICT (id) DO UPDATE SET
workflow_selection_version = 1,
updated_at = now();
""")
# 2) project_workflows 挂载
for wf_key in ["main", "product_manager", "test_manager"]:
status = "active" if wf_key == "main" else "ready"
# 2) project_workflows 工作流激活与配置
for wf_key, status in [("main", "active"), ("product_manager", "ready"), ("test_manager", "ready")]:
sql_lines.append(f"""
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, created_at, updated_at)
VALUES ({pid}, '{wf_key}', '{status}', true, now(), now())
INSERT INTO project_workflows (project_id, workflow_key, status, enabled, updated_at)
VALUES ({pid}, '{wf_key}', '{status}', true, now())
ON CONFLICT (project_id, workflow_key) DO UPDATE SET status = '{status}', enabled = true, updated_at = now();
""")
@@ -789,5 +876,7 @@ ON CONFLICT (downstream_doc_id, downstream_version, upstream_doc_id, upstream_ve
f.write("\n".join(sql_lines))
print(f"成功输出后端迁移 SQL: {sql_path} (行数: {len(sql_lines)})")
print("\n全部 10 个示例项目数据包构建完成!")
if __name__ == "__main__":
build_data()
File diff suppressed because one or more lines are too long
+10 -2
View File
@@ -499,8 +499,16 @@ export function loadMessages(): ChatMessage[] {
.filter((m) => !legacyIds.has(m.sessionId))
.map((m) => {
const def = defaultMsgMap.get(m.id);
if (def?.interactiveCard && (!m.interactiveCard || m.interactiveCard.title !== def.interactiveCard.title)) {
return { ...m, interactiveCard: def.interactiveCard };
if (def) {
return {
...m,
content: def.content,
attachments: def.attachments || m.attachments,
intentTag: def.intentTag || m.intentTag,
category: def.category || m.category,
phaseEvents: def.phaseEvents || m.phaseEvents,
interactiveCard: def.interactiveCard || m.interactiveCard,
};
}
return m;
});