Files
Agent-System/scripts/seed_ten_projects.py
T

992 lines
76 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成 10 个医疗器械示例项目的完整数据包 (前端 Seed JSON + 后端 SQL 导入脚本)
涵盖:
1. 项目基础信息与工作流状态 (main, product_manager, test_manager)
2. 多角色生动、自然、各具专业特色的对话记录 (张工 u1, 李主管 u2, 王总监 u3)
- 重点包含真实上传《用户需求说明书(URS)》的对话记录、附件文件卡片与4阶段要素提取
- 李主管审核对话中调阅 URS 附件比对覆盖度并挂载【合规审核确认卡】
- 王总监批准对话中确认 URS 输入基线到 SRS 的闭环并挂载【终审批准确认卡】
3. 真实 40KB~90KB 的《系统需求规格书》与《系统验证方案及计划》Markdown 全文
4. 文档血缘 (document_lineage) 与工作流运行记录 (workflow_runs)
"""
import hashlib
import json
import os
import sys
PROJECT_DEFS = [
{
"id": 6001,
"code": "PROJ-WANGJING-0021",
"key": "wangjing",
"name": "膝骨关节炎综合治疗仪",
"short_name": "膝骨关节炎综合治疗仪 (望京医院)",
"customer": "中国中医科学院望京医院骨伤科",
"device_type": "中药离子导入与多频温控电热综合治疗设备",
"intended_use": "用于早中期膝骨关节炎患者的局部经皮靶向定向透药导入、穴位多频电刺激止痛与温热理疗",
"target_market": "中国 NMPA II类 (YY 0601-2007 中药定向透药治疗仪, GB 9706.1-2020, YY 0505-2012)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/望京医院",
"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": [
("我已上传中国中医科学院望京医院骨伤科临床中心联合编制的《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)。",
"已启动【智能产品经理工作流】编制任务!\n\n- 步骤1/5: 需求提炼(已提取 39 项用户需求)\n- 步骤2/5: 规格分解(完成电气、温控、软件、结构 117 项 REQ 条目)\n- 步骤3/5: 强标论证(对齐 YY 0601、GB 9706.1、YY 0505)\n- 步骤4/5: 全文编制(完成 12 个规范章节,含环境与包材要求)\n- 步骤5/5: 可测性终审(门禁通过率 100%,无 TODO 占位符)\n\n正式成果《膝骨关节炎综合治疗仪系统需求规格书》已生成并载入交付物受控大盘(doc-proj6001-system_reqs),现已提交李主管审核。"),
("李主管和王总监已审批通过规格书!请切换到【智能测试经理】工作流,以已批准的规格书为基准,编制完整的《系统验证方案及计划》(RD-SVP)。",
"已原子切换至【智能测试经理】工作流焦点!\n系统检测到前置依赖《系统需求规格书》(RD-SR, V1.0, 状态: approved) 已就绪,已放行前置质量门禁。\n\n测试经理智能体正在遍历 117 项系统规格条目,自动生成映射验证用例库(涵盖温控精度试验、输出波形与电流密度试验、电磁兼容试验、安规耐压与漏电流试验、软件压力与故障注入测试)。\n\n成果《膝骨关节炎综合治疗仪系统验证方案及计划》已生成完毕(doc-proj6001-test_manager)!系统已建立与上游规格书的文档血缘追踪链路,版本与 SHA-256 均已安全锁定。")
]
}
},
{
"id": 6002,
"code": "PROJ-TINAVI-0050",
"key": "tianzhihang",
"name": "移动式C形臂X射线机",
"short_name": "移动式C形臂X射线机 (天智航)",
"customer": "北京天智航医疗科技股份有限公司",
"device_type": "骨科手术三维透视导航配准高频X射线成像系统",
"intended_use": "用于骨科创伤与脊柱微创手术中实时高频脉冲透视、三维空间重构及导航配准标记点追踪",
"target_market": "中国 NMPA III类 (GB 9706.1-2020, GB 9706.103, GB 9706.254, YY 0505)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/天智航",
"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": [
("我已上传天智航骨科手术机器人配套的《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)。",
"已触发【智能产品经理工作流】!\n正在调取天智航原始用户需求(RDDHF0201-0050),完成 99 项规格条目分解及 X 射线专标(GB 9706.254)条文对齐。\n\n已成功生成《移动式C形臂X射线机系统需求规格书》(doc-proj6002-system_reqs)并锁定受控状态!正文包括球管热容量、平板成像特性、激光指示器波长、电磁制动扭矩及辐射泄漏率等严苛技术要求。"),
("规格书经李主管审核与王总监批准已正式受控生效。请立即启动【智能测试经理】工作流,输出配套的系统验证方案。",
"收到!系统校验前置《系统需求规格书》已处于批准态,前置依赖门禁通过!\n\n智能测试经理已启动执行:\n1. 提取 136 项可测性技术指标;\n2. 编制《移动式C形臂X射线机系统验证方案及计划》(doc-proj6002-test_manager);\n3. 覆盖高压重复性试验、X射线空气比释动能率试验、空间分辨率线对卡实测(≥ 3.2 lp/mm)、跌落与抗倾翻稳定性试验;\n4. 建立与规格书各 REQ- 的双向追溯矩阵(Traceability Matrix)及 SHA-256 数据指纹。")
]
}
},
{
"id": 6003,
"code": "PROJ-ROBOT-0025",
"key": "xunzun",
"name": "移动式远程查房听问诊系统",
"short_name": "巡诊机器人 (ICU远程查房)",
"customer": "解放军总医院第一医学中心急诊重症监护室",
"device_type": "移动式隔离病区智能巡诊查房与电子听诊系统",
"intended_use": "用于传染病隔离病房及危重监护室中远程医生自主导航移动巡诊、高保真电子听诊心肺音与音视频问诊",
"target_market": "中国 NMPA II类 (GB 9706.1-2020, YY 0505, 机器人安全通用要求)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/巡诊机器人",
"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 编制的《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,超时强制收回至归位安全锚点。完全满足机器人医疗器械接触安全准则。"),
("请启动【智能产品经理】工作流,生成规格书。",
"【智能产品经理工作流】执行完毕!已生成《移动式远程查房听问诊系统系统需求规格书》(doc-proj6003-system_reqs)。涵盖激光导航定位精度(重复定位误差 < 15mm)、音视频端到端延迟(< 150ms)、听诊器声学频响曲线(20Hz~2000Hz)、锂电池连续工作巡航(≥ 8小时)等 133 项规格。"),
("经审核批准后,请触发【智能测试经理】工作流,产出系统验证方案。",
"已切换至【智能测试经理】工作流!前置依赖核验完成(规格书状态为 approved)。\n测试经理已生成《移动式远程查房听问诊系统系统验证方案及计划》(doc-proj6003-test_manager),包含:倾翻与越障试验(越过 10mm 门槛)、机械臂接触力超载主动后退试验、心肺音仿真发生器对比失真度测试(THD < 1.0%)、网络弱网丢包模拟试验。文档血缘已绑定!")
]
}
},
{
"id": 6004,
"code": "PROJ-XHJ-0089",
"key": "xianghejie",
"name": "一次性使用高频手术电极",
"short_name": "一次性高频手术电极 (祥合洁)",
"customer": "常州祥合洁医疗科技有限公司",
"device_type": "无源微创高频腹腔镜手术电极附件",
"intended_use": "与兼容的高频手术设备主机配套,用于内窥镜或普腹手术中对人体软组织进行电切、电凝止血与剥离",
"target_market": "中国 NMPA II类 (GB 9706.202-2021 高频手术设备专标, GB/T 16886, GB 9706.1)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/祥合洁电极",
"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": [
("我已上传常州祥合洁医疗编制的《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该检验规程已作为强制条目纳入规格书。"),
("请启动【智能产品经理】工作流,生成受控需求规格书。",
"已完成【智能产品经理工作流】全流程编排!正式生成《一次性使用高频手术电极系统需求规格书》(doc-proj6004-system_reqs)。涵盖刀尖几何公差(±0.05mm)、插头插拔力(5N~25N)、电极抗弯曲强度(承受 20N 侧向力无永久塑性变形)等 46 项工程指标。"),
("规格书批准生效,请切换至【智能测试经理】工作流生成验证方案与计划。",
"已切换【智能测试经理】工作流,前置依赖已确认!\n成功生成《一次性使用高频手术电极系统验证方案及计划》(doc-proj6004-test_manager)。方案涵盖高压介电强度试验、环氧乙烷灭菌残留量实测(EO ≤ 10 μg/g)、无菌包装热封密封剥离力测试(1.5N/15mm~3.5N/15mm)及高频组织切割热损伤深度病理切片对比试验。血缘链路完整。")
]
}
},
{
"id": 6005,
"code": "PROJ-ENDO-0029",
"key": "yamui",
"name": "自动化牙髓根管治疗仪",
"short_name": "自动化牙髓根管治疗仪 (北京口腔医院)",
"customer": "首都医科大学附属北京口腔医院牙体牙髓科",
"device_type": "牙科电动根管自适应预备与根尖阻抗测距一体化系统",
"intended_use": "用于牙科牙体牙髓病及根尖周病治疗中根管的机用镍钛锉旋转往复预备扩锉与根尖孔生理狭窄区精确定位",
"target_market": "中国 NMPA II类 (YY 0836-2011 牙科根管预备机, YY 0505, GB 9706.1-2020)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/自动化牙髓治疗仪",
"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": [
("我已上传北京口腔医院牙体牙髓科编制的《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 次循环扩锉,镍钛锉不得发生断裂或塑性解旋畸变。条目已入库。"),
("请启动智能产品经理工作流编制《系统需求规格书》。",
"已执行【智能产品经理工作流】!已输出《自动化牙髓根管治疗仪系统需求规格书》(doc-proj6005-system_reqs)。涵盖转速范围(100~1000 rpm ±10%)、弯机头 16:1 减速比配合公差、机身防水防喷溅、高压蒸汽灭菌(134℃,3分钟)耐受性等 62 项技术要求。"),
("规格书经评审已批准!请启动【智能测试经理】工作流,建立系统验证方案并绑定血缘。",
"已启动【智能测试经理】工作流!前置门禁顺利通过。\n正式产出《自动化牙髓根管治疗仪系统验证方案及计划》(doc-proj6005-test_manager)。包含转矩校准误差测试、多频阻抗测量一致性测试、反转防断针疲劳考核、手柄高温灭菌 250 次循环验证试验等 62 项完整测试用例,血缘与哈希值均已持久化。")
]
}
},
{
"id": 6006,
"code": "PROJ-ARNAV-0035",
"key": "ziyanar",
"name": "智能手术AR导航系统",
"short_name": "智能手术AR导航系统 (自研AR)",
"customer": "水木东方自研医疗器械研发中心 (转化医学实验室)",
"device_type": "独立医疗器械软件 (SaMD, II类医疗器械)",
"intended_use": "用于显微外科与骨科导航中将术前三维 CT/MRI 重建解剖结构与光学透视 AR 眼镜实时精准配准叠加",
"target_market": "中国 NMPA II类 (YY/T 0664-2020 软件生存周期, GB/T 25000.51, 医疗器械网络安全)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/自研AR",
"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": [
("我已上传自研中心编制的《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 软件容错性准则。"),
("请启动【智能产品经理】工作流,生成受控软件需求规格书。",
"已执行【智能产品经理工作流】!正式输出《智能手术AR导航系统系统需求规格书》(doc-proj6006-system_reqs)。涵盖 DICOM 数据导入解析校验、三维表面网格重构(Marching Cubes)、刚体变换配准算法、网络数据传输安全(TLS 1.3)等 57 项规范指标。"),
("软件需求规格书已获李主管与王总监审批,请启动【智能测试经理】工作流生成软件验证方案。",
"已切换至【智能测试经理】工作流!前置依赖已核验闭环。\n正式生成《智能手术AR导航系统系统验证方案及计划》(doc-proj6006-test_manager),包含空间标定精度实测、白盒覆盖率要求(语句覆盖 100%、分支覆盖 85%)、故障注入(模拟 DICOM 缺失、网络丢包、标记物反光污染)及持续 72 小时压力内存泄漏监测用例。血缘已牢固绑定!")
]
}
},
{
"id": 6007,
"code": "PROJ-LT-0068",
"key": "lanting",
"name": "等离子射频手术电极",
"short_name": "等离子射频手术电极 (蓝汀)",
"customer": "北京蓝汀医疗器械开发有限公司",
"device_type": "微创关节与耳鼻喉低温等离子多极射频刀头",
"intended_use": "与等离子射频手术主机配合,在生理盐水导电介质中激发低温等离子体薄层,用于微创软组织的精确消融打孔与凝血",
"target_market": "中国 NMPA II类 (YY 9706.202, GB 9706.1-2020, GB/T 16886)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/蓝汀电极",
"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": [
("我已上传北京蓝汀医疗编制的《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)保持合格。"),
("请启动【智能产品经理】工作流生成规格书。",
"已执行【智能产品经理工作流】!生成《等离子射频手术电极系统需求规格书》(doc-proj6007-system_reqs)。明确了双极电极阻抗匹配网络、工作杆弯曲角度(15°/45°可选)、插拔次数(≥ 50次)、包装无菌密封等 38 项指标。"),
("规格书经审批生效!请启动【智能测试经理】工作流生成验证方案。",
"已切换【智能测试经理】工作流!前置门禁顺利核验。\n正式产出《等离子射频手术电极系统验证方案及计划》(doc-proj6007-test_manager)。包含组织消融效率离体肝脏实测(消融深度速率 ≥ 1.0mm/s)、热损伤扩散带病理测量(侧向热损伤 ≤ 0.5mm)、电气安全与无菌衰变寿命测试。血缘追溯已锚定。")
]
}
},
{
"id": 6008,
"code": "PROJ-PLASMA-0092",
"key": "dengyizi",
"name": "低温等离子体手术系统",
"short_name": "低温等离子体手术系统 (主机+刀头)",
"customer": "天津医科大学总医院耳鼻咽喉头颈外科",
"device_type": "医用多功能低温等离子手术发生器与控制系统",
"intended_use": "用于耳鼻咽喉、关节外科、脊柱微创手术中通过 100kHz 射频激发低温等离子体对软组织进行分子键裂解消融、精确切割与双极电凝止血",
"target_market": "中国 NMPA III类 (GB 9706.1-2020, YY 9706.202, YY 0505)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/dual-agent/等离子手术",
"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": [
("我已上传天津医科大学总医院耳鼻喉头颈外科编制的《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%,不产生假性心律失常报警。"),
("请启动【智能产品经理】工作流,生成受控系统需求规格书。",
"已执行【智能产品经理工作流】!正式输出《低温等离子体手术系统系统需求规格书》(doc-proj6008-system_reqs)。包括额定功率精度(±10% 或 ±5W)、声光报警响应时间(< 100ms)、双极阻抗监测动态范围(10Ω~5000Ω)、屏幕触控防误触等 200 项全面规格。"),
("规格书终审通过!请触发【智能测试经理】工作流,输出系统验证方案并绑定血缘。",
"已切换至【智能测试经理】工作流!前置依赖状态 approved,门禁放行!\n测试经理已编制生成《低温等离子体手术系统系统验证方案及计划》(doc-proj6008-test_manager)。全面涵盖高频功率输出负载曲线实测(10Ω~1000Ω 步进)、单一故障测试(输出功率继电器粘连切断)、环境可靠性(高温高湿工作环境)及 200 项需求条目 100% 覆盖验证。血缘关系已完整登记!")
]
}
},
{
"id": 6009,
"code": "PROJ-ESWT-0095",
"key": "chongjibo",
"name": "体外气压弹道冲击波治疗仪",
"short_name": "体外冲击波治疗仪 (北医三院运医)",
"customer": "北京大学第三医院运动医学研究所",
"device_type": "气压弹道式体外冲击波组织损伤治疗设备",
"intended_use": "用于慢性软组织肌腱止点病变、跟腱炎、足底筋膜炎、肩周炎的局部无创高能压力脉冲松解与骨肌镇痛",
"target_market": "中国 NMPA II类 (YY 0650-2008 体外冲击波治疗机专标, GB 9706.1-2020, YY 0505)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/verify-batch4/out/冲击波",
"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": [
("我已上传北医三院运动医学研究所编制的《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% 的公差界限,条目已全部纳入需求规格书。"),
("请启动【智能产品经理】工作流,生成受控系统需求规格书。",
"已执行【智能产品经理工作流】!正式输出《体外冲击波治疗仪系统需求规格书》(doc-proj6009-system_reqs)。系统梳理了气泵额定功率、撞针弹道寿命(≥ 100万次)、电磁换向阀开关寿命、治疗头尺寸规格(6mm/15mm/25mm)等 90 项技术条目。"),
("规格书审批已生效!请切换至【智能测试经理】工作流,建立系统验证方案及血缘追踪。",
"已切换【智能测试经理】工作流!前置规格书状态 verified(approved),前置门禁顺利通过。\n正式产出《体外冲击波治疗仪系统验证方案及计划》(doc-proj6009-test_manager)。包含气压稳定性水听器声场测试、疲劳击打寿命测试、跌落耐冲击测试、电磁兼容抗扰度试验及完整追溯矩阵。血缘哈希绑定就绪!")
]
}
},
{
"id": 6010,
"code": "PROJ-MSK-0108",
"key": "jigu",
"name": "肌骨超声影像处理软件",
"short_name": "肌骨超声影像处理软件 (PMP108)",
"customer": "中日友好医院超声诊断科与风湿免疫科",
"device_type": "独立超声影像处理辅助分析软件 (SaMD, II类医疗器械)",
"intended_use": "用于风湿关节炎及运动损伤中高频肌骨超声图像的滑膜增生厚度、肌腱断端撕裂间距及血流多普勒信号的智能测量与报告生成",
"target_market": "中国 NMPA II类 (YY/T 0664-2020, GB/T 25000.51, 医疗器械软件指导原则)",
"path": "/Volumes/新加卷/WeiCHEN-Backup/01-Projects/ShuiMuDongFang/2026-08-17 飞书智能体/.tmp/verify-batch4/out/PMP108肌骨超声",
"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": [
("我已上传中日友好医院超声科与风湿免疫科联合编制的《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%)。"),
("请启动【智能产品经理】工作流,生成受控软件需求规格书。",
"已执行【智能产品经理工作流】!正式生成《肌骨超声影像处理软件系统需求规格书》(doc-proj6010-system_reqs)。涵盖 DICOM 超声成像流解析、滑膜微血管彩色多普勒血流定量计算、测量标注工具链及结构化电子报告输出等 54 项规格。"),
("规格书已审批通过!请切换至【智能测试经理】工作流,输出系统验证方案。",
"已切换【智能测试经理】工作流!前置依赖审核通过(approved)。\n正式产出《肌骨超声影像处理软件系统验证方案及计划》(doc-proj6010-test_manager)。包含标准超声体模几何精度测试、多中心 1000 例典型病例盲态回溯对比测试(算法与 3 位副高医生金标准比对一致性 ICC ≥ 0.92)、软件性能与容错压力测试。血缘追溯已锁定!")
]
}
}
]
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 个项目的元数据、文档与多角色对话记录...")
sessions = []
messages = []
deliverables = []
documents = {}
for p in PROJECT_DEFS:
pid = p["id"]
pkey = p["key"]
# 1. 建立用户会话 (张工 u1, 李主管 u2, 王总监 u3)
sessions.append({
"sessionId": f"sess-{pkey}-u1",
"userId": 1,
"projectId": pid,
"title": p["short_name"],
"deviceType": p["device_type"],
"stage": "V0.5",
"stageLabel": "V0.5 方案成型与法规对齐",
"messageCount": 8,
"updatedAt": "刚刚"
})
sessions.append({
"sessionId": f"sess-{pkey}-u2",
"userId": 2,
"projectId": pid,
"title": p["short_name"],
"deviceType": p["device_type"],
"stage": "V0.5",
"stageLabel": "V0.5 方案成型与法规对齐",
"messageCount": 4,
"updatedAt": "刚刚"
})
sessions.append({
"sessionId": f"sess-{pkey}-u3",
"userId": 3,
"projectId": pid,
"title": p["short_name"],
"deviceType": p["device_type"],
"stage": "V0.5",
"stageLabel": "V0.5 方案成型与法规对齐",
"messageCount": 4,
"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")
svp_file = os.path.join(p["path"], "02-系统验证方案及计划.md")
with open(srs_file, "r", encoding="utf-8") as f:
srs_md = f.read()
with open(svp_file, "r", encoding="utf-8") as f:
svp_md = f.read()
srs_hash = sha256_text(srs_md)
svp_hash = sha256_text(svp_md)
# 2. 生成张工 (u1) 的多轮专业对话
u1_sess = f"sess-{pkey}-u1"
messages.append({
"id": f"m-{pkey}-1",
"sessionId": u1_sess,
"role": "system",
"content": f"项目助手已就位。当前项目【{p['name']}】已进入【V0.5 方案成型与法规对齐】阶段。您正以「张工」身份与智能体协同。",
"timestamp": "09:00",
"authorName": "项目助手"
})
msg_idx = 2
for pair_idx, (user_q, asst_a) in enumerate(p["chat_topics"]["u1"]):
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 需求文档 (挂载真实文件附件及可点击 docId)
if pair_idx == 0:
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)"
messages.append(user_msg)
msg_idx += 1
asst_msg = {
"id": f"m-{pkey}-{msg_idx}",
"sessionId": u1_sess,
"role": "assistant",
"content": asst_a,
"timestamp": f"09:{10 + msg_idx * 2:02d}",
"authorName": "项目助手"
}
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}",
"cardType": "CONFIRMATION",
"title": "系统需求规格书·编制提审门禁",
"targetDocId": doc_srs_id,
"targetDocTitle": p["srs_title"],
"sectionTitle": "第4节「国家强标与可追溯性规格」",
"proposedContent": f"编制人张工与产品经理智能体已完成《{p['srs_title']}》编制(涵盖{p['highlight_tech']}),静态 AST 门禁通过率 100%,已提交李主管合规初审。",
"impactRisk": "流程流转:提交后正文自动锁定,正式进入李主管合规审核流程",
"status": "resolved",
"ttlTurns": 3,
"createdAt": "09:16",
"actions": [
{
"actionId": "confirm_submit_review",
"label": "确认提交审核",
"style": "primary",
"isAffirmativeDefault": True,
"payload": {"docId": doc_srs_id}
}
],
"resolutionSummary": "张工(编制人)已正式提交审核,正文锁定",
"resolvedBy": "张工",
"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}",
"cardType": "CONFIRMATION",
"title": "系统验证方案及计划·测试评审门禁",
"targetDocId": doc_svp_id,
"targetDocTitle": p["svp_title"],
"sectionTitle": "第5节「可追溯性验证矩阵与用例覆盖度」",
"proposedContent": f"测试经理智能体已完成 100% 需求验证映射(覆盖 {p['highlight_tech']}),前置需求规格书依赖校验通过(SHA-256 强校验),血缘追溯已锁定。",
"impactRisk": "质量红线:已绑定上游规格书 SHA-256,上游基线变动将自动级联触发失效标记",
"status": "resolved",
"ttlTurns": 3,
"createdAt": "09:24",
"actions": [
{
"actionId": "confirm_review_pass",
"label": "确认测试方案并归档",
"style": "primary",
"isAffirmativeDefault": True,
"payload": {"docId": doc_svp_id}
}
],
"resolutionSummary": "测试方案已通过合规评审并成功绑定上游血缘",
"resolvedBy": "李主管",
"resolvedAt": "2026-09-11T00:25:00.000Z"
}
messages.append(asst_msg)
msg_idx += 1
# 3. 生成李主管 (u2) 审核对话 (调阅张工上传的 URS 文档并挂载【审核确认卡】)
u2_sess = f"sess-{pkey}-u2"
messages.append({
"id": f"m-{pkey}-u2-1",
"sessionId": u2_sess,
"role": "system",
"content": f"项目助手已就位。当前项目【{p['name']}】待办审查。您正以「李主管(审核人)」身份与智能体协同。",
"timestamp": "10:00",
"authorName": "项目助手"
})
messages.append({
"id": f"m-{pkey}-u2-2",
"sessionId": u2_sess,
"role": "user",
"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": "李主管"
})
messages.append({
"id": f"m-{pkey}-u2-3",
"sessionId": u2_sess,
"role": "assistant",
"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": {
"cardId": f"card-review-srs-{pid}",
"cardType": "CONFIRMATION",
"title": "系统需求规格书·合规与技术审核门禁",
"targetDocId": doc_srs_id,
"targetDocTitle": p["srs_title"],
"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,
"createdAt": "10:06",
"actions": [
{
"actionId": "confirm_review_pass",
"label": "确认审核通过",
"style": "primary",
"isAffirmativeDefault": True,
"payload": {"docId": doc_srs_id}
},
{
"actionId": "confirm_reject",
"label": "驳回修订",
"style": "danger",
"payload": {"docId": doc_srs_id}
}
],
"resolutionSummary": f"李主管已确认通过 URS 溯源审核,流转至终审阶段",
"resolvedBy": "李主管",
"resolvedAt": "2026-09-11T00:26:00.000Z"
}
})
messages.append({
"id": f"m-{pkey}-u2-4",
"sessionId": u2_sess,
"role": "user",
"category": "review",
"content": f"审核意见:已核验 URS 原文,技术指标分解详尽,强标依据充分,同意通过并转交王总监终审。",
"timestamp": "10:08",
"authorName": "李主管"
})
# 4. 生成王总监 (u3) 批准对话 (确认 URS 输入基线到 SRS 的闭环并挂载【终审批准卡】)
u3_sess = f"sess-{pkey}-u3"
messages.append({
"id": f"m-{pkey}-u3-1",
"sessionId": u3_sess,
"role": "system",
"content": f"项目助手已就位。当前项目【{p['name']}】终审签批。您正以「王总监(批准人)」身份与智能体协同。",
"timestamp": "10:15",
"authorName": "项目助手"
})
messages.append({
"id": f"m-{pkey}-u3-2",
"sessionId": u3_sess,
"role": "user",
"category": "review",
"intentTag": "👑 终审签批与基线决策",
"content": f"我是批准人王总监。李主管已完成对基于 URS 原始输入《{p['urs_file']['name']}》到《{p['srs_title']}》编制的初审,请汇报该受控交付物终审批准的整体合规结论与权威基线发布。",
"timestamp": "10:20",
"authorName": "王总监"
})
messages.append({
"id": f"m-{pkey}-u3-3",
"sessionId": u3_sess,
"role": "assistant",
"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": {
"cardId": f"card-appr-srs-{pid}",
"cardType": "CONFIRMATION",
"title": "系统需求规格书·终审批准门禁",
"targetDocId": doc_srs_id,
"targetDocTitle": p["srs_title"],
"sectionTitle": f"V1.0 权威基线受控发布决策 (基于 {p['urs_file']['name']})",
"proposedContent": f"全套工程输入基线与合规门禁核验通过(对标 URS《{p['urs_file']['name']}》,亮点:{p['highlight_tech']}),准予正式批准生效,并作为下游测试验证的受控前置基线。",
"impactRisk": "核心门禁:终审批准后锁定权威基线,并自动解锁下游【智能测试经理】工作流",
"status": "resolved",
"ttlTurns": 3,
"createdAt": "10:22",
"actions": [
{
"actionId": "confirm_final_approve",
"label": "确认终审批准",
"style": "primary",
"isAffirmativeDefault": True,
"payload": {"docId": doc_srs_id}
}
],
"resolutionSummary": "王总监已终审批准生效,已建立受控基线并解锁测试工作流",
"resolvedBy": "王总监",
"resolvedAt": "2026-09-11T00:28:00.000Z"
}
})
messages.append({
"id": f"m-{pkey}-u3-4",
"sessionId": u3_sess,
"role": "user",
"category": "review",
"content": "终审批准通过。请立即下达工程指令,按计划启动系统验证方案编制。",
"timestamp": "10:25",
"authorName": "王总监"
})
# 交付物元数据
# 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,
"taskKey": "system_reqs",
"title": p["srs_title"],
"stage": "V0.5",
"category": "workflow",
"creatorId": 1,
"creatorName": "张工",
"isFixedWorkflow": True,
"isTemplateOnly": False,
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 00:30",
"summary": f"{p['name']}的完整受控系统需求规格书,已对标 URS《{p['urs_file']['name']}》并获终审批准,具备严格 REQ 编号与验证方式。"
})
deliverables.append({
"docId": doc_svp_id,
"projectId": pid,
"taskKey": "test_manager",
"title": p["svp_title"],
"stage": "V0.5",
"category": "workflow",
"creatorId": 1,
"creatorName": "张工",
"isFixedWorkflow": True,
"isTemplateOnly": False,
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 00:35",
"summary": f"{p['name']}的系统验证方案及计划,基于已批准的规格书全量映射构建,文档血缘已绑定。"
})
# 存储文档正文 (完全对齐 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,
"taskKey": "system_reqs",
"title": p["srs_title"],
"stage": "V0.5",
"category": "workflow",
"creatorId": 1,
"creatorName": "系统管理员",
"version": "V1.0",
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 00:00:00",
"summary": f"{p['name']}系统需求规格书,已对标 URS《{p['urs_file']['name']}》并通过法规与工程联合评审。",
"markdown": srs_md,
"content": srs_md,
"sha256": srs_hash
}
documents[doc_svp_id] = {
"docId": doc_svp_id,
"projectId": pid,
"taskKey": "test_manager",
"title": p["svp_title"],
"stage": "V0.5",
"category": "workflow",
"creatorId": 1,
"creatorName": "系统管理员",
"version": "V1.0",
"lifecycleState": "approved",
"isClaimed": True,
"author": "张工",
"reviewer": "李主管",
"approver": "王总监",
"updatedAt": "2026-09-11 00:35:00",
"summary": f"{p['name']}系统验证方案及计划,已建立完整需求映射。",
"markdown": svp_md,
"content": svp_md,
"sha256": svp_hash,
"upstreamDocId": doc_srs_id,
"upstreamSha256": srs_hash
}
seed_data = {
"generatedAt": "2026-09-11T09:10:00",
"projects": [
{
"id": p["id"],
"code": p["code"],
"name": p["name"],
"shortName": p["short_name"],
"customer": p["customer"],
"deviceType": p["device_type"],
"intendedUse": p["intended_use"],
"targetMarket": p["target_market"],
"activeWorkflowKey": "main",
"version": 1,
"creatorUserId": 1
}
for p in PROJECT_DEFS
],
"sessions": sessions,
"messages": messages,
"deliverables": deliverables,
"documents": documents
}
seed_json_path = "web/src/data/seeds/tenProjectsSeed.json"
with open(seed_json_path, "w", encoding="utf-8") as f:
json.dump(seed_data, f, ensure_ascii=False, indent=2)
print(f"成功输出前端 Seed JSON 文件: {seed_json_path} (大小: {os.path.getsize(seed_json_path)} 字节)")
# 6. 生成前端导出 TS 封装
ts_code = '''// 10 个示例项目评审专用数据封装
import seed from './seeds/tenProjectsSeed.json';
import { ProjectSession, ChatMessage, DeliverableItem } from '../types/workbench';
import { MockDocumentMeta } from './mockDocuments';
export interface SeedProjectMeta {
id: number;
code: string;
name: string;
shortName: string;
customer: string;
deviceType: string;
intendedUse: string;
targetMarket: string;
activeWorkflowKey: string;
version: number;
creatorUserId: number;
}
export const TEN_PROJECTS_LIST: SeedProjectMeta[] = seed.projects as SeedProjectMeta[];
export const TEN_PROJECTS_SESSIONS: ProjectSession[] = seed.sessions as ProjectSession[];
export const TEN_PROJECTS_MESSAGES: ChatMessage[] = seed.messages as ChatMessage[];
export const TEN_PROJECTS_DELIVERABLES: DeliverableItem[] = seed.deliverables as DeliverableItem[];
export const TEN_PROJECTS_DOCUMENTS: Record<string, MockDocumentMeta> = seed.documents as Record<
string,
MockDocumentMeta
>;
'''
ts_path = "web/src/data/tenProjectsDemo.ts"
with open(ts_path, "w", encoding="utf-8") as f:
f.write(ts_code)
print(f"成功输出前端 TS 模块: {ts_path}")
# 7. 生成后端 SQL 导入脚本
sql_lines = [
"-- 10 个示例医疗器械项目数据初始化脚本 (针对项目评审全流程落地)",
"BEGIN;",
]
for p in PROJECT_DEFS:
pid = p["id"]
code = p["code"]
name = p["name"].replace("'", "''")
cust = p["customer"].replace("'", "''")
dtype = p["device_type"].replace("'", "''")
iuse = p["intended_use"].replace("'", "''")
tmarket = p["target_market"].replace("'", "''")
doc_srs_id = f"doc-proj{pid}-system_reqs"
doc_svp_id = f"doc-proj{pid}-test_manager"
srs_hash = sha256_text(documents[doc_srs_id]["content"])
# 1) projects 表
sql_lines.append(f"""
INSERT INTO projects (id, code, name, customer_name, device_type, intended_use, target_market, current_stage, environment, status, creator_user_id, active_workflow_key, workflow_selection_version, created_at, updated_at)
VALUES ({pid}, '{code}', '{name}', '{cust}', '{dtype}', '{iuse}', '{tmarket}', 'V0.5', 'dev', 'active', 1, 'main', 1, now(), now())
ON CONFLICT (id) DO UPDATE SET
code = EXCLUDED.code,
name = EXCLUDED.name,
customer_name = EXCLUDED.customer_name,
device_type = EXCLUDED.device_type,
intended_use = EXCLUDED.intended_use,
target_market = EXCLUDED.target_market,
creator_user_id = 1,
active_workflow_key = 'main',
workflow_selection_version = 1,
updated_at = now();
""")
# 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, 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();
""")
# 3) workflow_runs 运行记录
run_pm = f"run-proj{pid}-pm-01"
run_tm = f"run-proj{pid}-tm-01"
sql_lines.append(f"""
INSERT INTO workflow_runs (run_id, project_id, workflow_key, status, started_by, stage_key, task_key, output_doc_id, output_summary, started_at, finished_at, created_at)
VALUES ('{run_pm}', {pid}, 'product_manager', 'completed', 1, 'V0.5', 'system_reqs', '{doc_srs_id}', '智能产品经理已生成系统需求规格书并通过门禁', now() - interval '2 hours', now() - interval '1 hour', now())
ON CONFLICT (run_id) DO NOTHING;
INSERT INTO workflow_runs (run_id, project_id, workflow_key, status, started_by, stage_key, task_key, output_doc_id, output_summary, started_at, finished_at, created_at)
VALUES ('{run_tm}', {pid}, 'test_manager', 'completed', 1, 'V0.5', 'test_manager', '{doc_svp_id}', '智能测试经理已建立测试方案并完成需求全量映射', now() - interval '50 minutes', now() - interval '30 minutes', now())
ON CONFLICT (run_id) DO NOTHING;
""")
# 4) document_lineage 血缘关系
sql_lines.append(f"""
INSERT INTO document_lineage (project_id, downstream_doc_id, downstream_version, upstream_doc_id, upstream_version, upstream_sha256, is_stale, created_at)
VALUES ({pid}, '{doc_svp_id}', 1, '{doc_srs_id}', 1, '{srs_hash}', false, now())
ON CONFLICT (downstream_doc_id, downstream_version, upstream_doc_id, upstream_version) DO UPDATE SET
upstream_sha256 = EXCLUDED.upstream_sha256,
is_stale = false;
""")
sql_lines.append("COMMIT;")
sql_path = "deploy/postgres/migrations/2026-09-11-seed-ten-projects.sql"
with open(sql_path, "w", encoding="utf-8") as f:
f.write("\n".join(sql_lines))
print(f"成功输出后端迁移 SQL: {sql_path} (行数: {len(sql_lines)})")
print("\n全部 10 个示例项目数据包构建完成!")
if __name__ == "__main__":
build_data()