feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,114 +1,102 @@
# **PRDTool C \- 科研数据编辑器 (The Research Editor)**
# **PRD<EFBFBD>ool C \- 遘醍<EFBFBD>疲焚謐ョ郛冶セ大<EFBFBD>?(The Research Editor)**
| 文档版本 | V6.0 (AI Code Interpreter 增强版) |
| <EFBFBD>。」迚域悽 | V6.0 (AI Code Interpreter 蠅槫シコ迚? |
| :---- | :---- |
| **产品形态** | Web 端双核编辑器 (GUI 可视化操作 \+ LUI 自然语言交互) |
| **核心价值** | 将“Excel 的易用性”与“Python 的强大能力”结合。医生既可以通过鼠标点击完成微操,也可以通过自然语言指挥 AI 编写代码完成复杂的清洗任务(如长宽转换、多重插补)。 |
| **技术底座** | Node.js BFF \+ Python Server-side Sandbox \+ DeepSeek-V3 |
| **莠ァ蜩∝ス「諤?* | Web 遶ッ蜿梧<E89CBF>ク郛冶セ大勣 (GUI 蜿ッ隗<EFBDAF>喧謫堺ス?\+ LUI 閾ェ辟カ隸ュ險€莠、莠<EFBDA4>) |
| **譬ク蠢<EFBFBD>サキ蛟?* | 蟆<>€廢xcel 逧<><E980A7>逕ィ諤ァ窶昜ク寂€弃ython 逧<>シコ螟ァ閭ス蜉帚€晉サ灘粋縲ょ現逕滓里蜿ッ莉・騾夊ソ<E5A48A><EFBFBD><EFBFBD>せ蜃サ螳梧<E89EB3>蠕ョ謫搾シ御ケ溷庄莉・騾夊ソ<E5A48A><EFBDBF>辟カ隸ュ險€<C280>硯 AI 郛門<E9839B>莉」遐∝ョ梧<EFBDAE>螟肴揩逧<E68FA9><EFBFBD>エ嶺ササ蜉。<E89C89>亥ヲる柄螳ス霓ャ謐「縲∝、夐㍾謠定。・<EFBDA1>€?|
| **謚€譛ッ蠎募コ?* | Node.js BFF \+ Python Server-side Sandbox \+ DeepSeek-V3 |
## **一、 产品核心理念 (Core Philosophy)**
## **荳€縲?莠ァ蜩∵<E89CA9>ク蠢<EFBDB8>炊蠢オ (Core Philosophy)**
### **1.1 蜿梧<E89CBF>ク鬩ア蜉ィ (Dual-Core Interaction)**
* **左脑 (GUI):** 提供类似 Excel 的网格和工具栏,适合“直觉式、原子化”的操作(如手动修改一个值、排序、筛选)。
* **右脑 (AI Copilot):** 提供对话式代码解释器适合“逻辑性、批量化”的操作如“把年龄按60岁分箱”、“删除所有空行”、“计算生存时间”
* **蟾ヲ閼<EFBFBD> (GUI):** 謠蝉セ帷アサ莨シ Excel 逧<>ス第<EFBDBD>シ蜥悟キ・蜈キ譬擾シ碁€ょ粋窶懃峩隗牙シ上€∝次蟄仙喧窶晉噪謫堺ス懶シ亥ヲよ焔蜉ィ菫ョ謾ケ荳€荳ェ蛟シ縲∵賜蠎上€∫ュ幃€会シ峨€?
* **蜿ウ閼<EFBFBD> (AI Copilot):** 謠蝉セ帛ッケ隸晏シ丈サ」遐∬ァ」驥雁勣<EFBFBD>€ょ粋窶憺€サ霎第€ァ縲∵音驥丞喧窶晉噪謫堺ス懶シ亥ヲや€懈滑蟷エ鮴<EFBFBD><EFBFBD>?0蟯∝<E89FAF>邂ア窶昴€€懷唖髯、謇€譛臥ゥコ陦娯€€€懆ョ。邂礼函蟄俶慮髣エ窶晢シ峨€?
### **1.2 蜿ッ謗ァ鮟醍將 (Controllable Blackbox)**
AI 不直接修改数据,而是**生成 Python 代码**。系统在执行前展示\*\*“预操作卡片”\*\*,由用户确认执行,确保科研数据的严谨性。
AI 荳咲峩謗・菫ョ謾ケ謨ー謐ョ<EFBFBD>€梧弍**逕滓<E98095> Python 莉」遐<EFBDA3>**縲らウサ扈溷惠謇ァ陦悟燕螻慕、コ\*\*窶憺「<E686BA>桃菴懷今迚<E4BB8A>€拿*\*<2A>檎罰逕ィ謌キ遑ョ隶、謇ァ陦鯉シ檎。ョ菫晉ァ醍<EFBDA7>疲焚謐ョ逧<EFBDAE>ク・隹ィ諤ァ縲?
## **莠後€?譬ク蠢<EFBDB8>ク壼苅豬∫ィ<E288AB> (User Flow)**
## **二、 核心业务流程 (User Flow)**
謨ー謐ョ蟇シ蜈・ \-\> 蜿梧ィ。蠑乗ク<E4B997>エ?(轤ケ蜃サ蟾・蜈キ譬?OR 蟇ケ隸<EFBDB9> AI) \-\> 莉」遐<EFBDA3>/謫堺ス懈鴬陦<E9B4AC> \-\> 螳樊慮鬚<E685AE>ァ域峩譁ー \-\> 迚域悽蠢ォ辣ァ \-\> 蟇シ蜃コ扈捺棡
数据导入 \-\> 双模式清洗 (点击工具栏 OR 对话 AI) \-\> 代码/操作执行 \-\> 实时预览更新 \-\> 版本快照 \-\> 导出结果
## **三、 功能模块详解 (Functional Requirements)**
## **荳峨€?蜉溯<E89C89>讓。蝮苓ッヲ隗」 (Functional Requirements)**
### **1\. 逡碁擇蟶<E69387>€ (The Workspace)**
* **P0:** **蛻<><E89BBB>丞ク<E4B89E>€ (Split View):**
* **左侧 (70%):** 超级网格 (The Grid),展示数据预览。
* **右侧 (30%):** 智能侧边栏 (Smart Sidebar),包含 **\[统计概览\]** 和 **\[AI 助手\]** 两个 Tab
* **P0:** **全局状态指示:**
* AI 正在思考或后端正在计算时,左侧网格显示 **“AI 处理中...”** 遮罩,并锁定编辑,防止双写冲突。
* **蟾ヲ萓ァ (70%):** <EFBFBD>コァ鄂第<EFBFBD> (The Grid)<EFBFBD>悟ア慕、コ謨ー謐ョ鬚<EFBFBD>ァ医€?
* **蜿ウ萓ァ (30%):** 譎コ閭ス萓ァ霎ケ譬?(Smart Sidebar)<EFBFBD>悟桁蜷?**\[扈溯ョ。讎りァ<E3828A>]** 蜥?**\[AI 蜉ゥ謇欺]** 荳、荳ェ Tab縲?
* **P0:** **蜈ィ螻€迥カ諤∵欠遉?**
* 蠖?AI 豁」蝨ィ諤晁€<EFBFBD><EFBFBD>蜷守ォッ豁」蝨ィ隶。邂玲慮<EFBFBD>悟キヲ萓ァ鄂第<EFBFBD>シ譏セ遉コ **窶廣I 螟<>炊荳?..窶?* 驕ョ鄂ゥ<E98482>悟ケカ髞∝ョ夂シ冶セ托シ碁亟豁「蜿悟<E89CBF>蜀イ遯√€?
### **2\. 鬘カ驛ィ謇∝ケウ蟾・蜈キ譬?(Flat Toolbar) 窶披€?GUI 譬ク蠢<EFBDB8>**
### **2\. 顶部扁平工具栏 (Flat Toolbar) —— GUI 核心**
*保留高频、标准化的操作入口,作为 AI 的补充。*
*菫晉蕗鬮倬「代€<C280><E288B5>㊥蛹也噪謫堺ス懷<EFBDBD>蜿」<E89CBF>御ス應クコ AI 逧<>。・蜈<EFBDA5>€?
* **P0: 蜿倬㍼蜉<E38DBC>蟾・:**
* **生成新变量:** 弹窗公式构建器。
* **计算时间差:** 内置医学常数 (年=365.25天)。
* **生成哑变量:** 回归分析专用。
* **横纵表转换 (Pivot):** \* *交互升级:* 点击后不再只是纯前端计算,而是调用后端 Python 逻辑,支持处理更复杂的转换。
* **逕滓<EFBFBD>譁ー蜿倬<EFBFBD>?** 蠑ケ遯怜<E981AF>蠑乗桷蟒コ蝎ィ縲?
* **隶。邂玲慮髣エ蟾?** 蜀<>スョ蛹サ蟄ヲ蟶ク謨ー (蟷?365.25螟?縲?
* **逕滓<EFBFBD>蜩大序驥?** 蝗槫ス貞<EFBDBD>譫蝉ク鍋畑縲?
* **讓ェ郤オ陦ィ霓ャ謐?(Pivot):** \* *莠、莠貞合郤ァ:* 轤ケ蜃サ蜷惹ク榊<EFBDB8>蜿ェ譏ッ郤ッ蜑咲ォッ隶。邂暦シ瑚€梧弍隹<E5BC8D>畑蜷守ォッ Python 騾サ霎托シ梧髪謖∝、<E2889D>炊譖エ螟肴揩逧<E68FA9>スャ謐「縲?
* **P0: 雍ィ驥乗イサ逅<EFBDBB>:**
* **查找重复值:** ID 或全字段查重。
* **多重插补 (MICE):** 全局入口,调用后端 sklearn fancyimpute 库。
* **P0: 样本筛选:** 构建入排标准。
* **譟・謇セ驥榊、榊€?** 謖?ID 謌門<EFBFBD>蟄玲ョオ譟・驥阪€?
* **螟夐㍾謠定。・ (MICE):** 蜈ィ螻€蜈・蜿」<EFBFBD>瑚ー<EFBFBD>畑蜷守ォ?sklearn 謌?fancyimpute 蠎薙€?
* **P0: 譬キ譛ャ遲幃€?** 譫<>サコ蜈・謗呈<E8AC97><E59188>㊥縲?
### **3\. AI Copilot 譎コ閭ス蜉ゥ謇<EFBDA9> (The Brain) 窶披€?V6 譬ク蠢<EFBDB8>合郤ァ**
### **3\. AI Copilot 智能助手 (The Brain) —— V6 核心升级**
*位于右侧侧边栏的 \[AI 助手\] Tab。*
*菴堺コ主承萓ァ萓ァ霎ケ譬冗噪 \[AI 蜉ゥ謇欺] Tab縲?
#### **3.1 閾ェ辟カ隸ュ險€<C280>サ、隗」譫<EFBDA3>**
* **P0:** **意图识别:** 支持模糊指令如“洗一下数据”、“把男变成1”。
* **P0:** **上下文感知:** AI 能够读取当前的列名 (Metadata) 和前 5 行数据示例,理解数据含义。
* **P0:** **諢丞崟隸<EFBFBD>:** 謾ッ謖∵ィ。邉頑欠莉、<EFBFBD>悟ヲや€懈エ嶺ク€荳区焚謐ョ窶昴€€懈滑逕キ蜿俶<EFBFBD>?窶昴€?
* **P0:** **荳贋ク区枚諢溽<EFBFBD>?** AI 閭ス螟溯ッサ蜿門ス灘燕逧<E78795><E980A7>蜷?(Metadata) 蜥悟燕 5 陦梧焚謐ョ遉コ萓具シ檎炊隗」謨ー謐ョ蜷ォ荵峨€?
#### **3.2 莉」遐∬ァ」驥雁勣讓。蠑?(Code Interpreter)**
#### **3.2 代码解释器模式 (Code Interpreter)**
* **P0:** **代码生成:** AI 针对用户需求,生成可执行的 **Python (Pandas)** 代码块。
* **P0:** **预操作卡片 (Action Card):**
* AI 不直接执行代码。
* 界面展示一个卡片:操作类型: 数据分箱 | 目标列: 年龄 | 代码预览。
* 按钮:**\[运行代码\]** | **\[取消\]**。
* **P0:** **莉」遐∫函謌<E587BD>:** AI 髓亥ッケ逕ィ謌キ髴€豎ゑシ檎函謌仙庄謇ァ陦檎噪 **Python (Pandas)** 莉」遐∝摎縲?
* **P0:** **鬚<>桃菴懷今迚?(Action Card):**
* AI 荳咲峩謗・謇ァ陦御サ」遐√€?
* 逡碁擇螻慕、コ荳€荳ェ蜊。迚<EFBFBD>シ壽桃菴懃アサ蝙<EFBFBD>: 謨ー謐ョ蛻<EFBDAE>ョア | 逶ョ譬<EFBDAE><E8ADAC>? 蟷エ鮴<EFBDB4> | 莉」遐<EFBDA3><EFBFBD>ァ医€?
* 謖蛾聴<EFBFBD>?*\[霑占。御サ」遐―]** | **\[蜿匁カ<E58C81>]**縲?
* **P0:** **謇ァ陦悟渚鬥<E6B89A>:**
* 执行成功:显示 ✅,左侧表格自动刷新。
* 执行失败AI 自动分析 Error Log尝试自我修正代码并建议重试。
* 謇ァ陦梧<EFBFBD>蜉滂シ壽仞遉?笨<>シ悟キヲ萓ァ陦ィ譬シ閾ェ蜉ィ蛻キ譁ー縲?
* 謇ァ陦悟、ア雍・<EFBFBD>哂I 閾ェ蜉ィ蛻<EFBDA8>梵 Error Log<6F>悟ー晁ッ戊<EFBDAF>謌台ソョ豁」莉」遐∝ケカ蟒コ隶ョ驥崎ッ輔€?
#### **3.3 蜈ク蝙<EFBDB8> AI 蝨コ譎ッ謾ッ謖<EFBDAF>**
* **高级清洗:** “把所有列的异常值(\>3倍标准差替换为缺失值”。
* **复杂提取:** “从‘诊断’列中提取出由‘/’分隔的第二部分,生成新列”。
* **批量处理:** “删除所有缺失率超过 50% 的列”。
* **鬮倡コァ貂<EFBFBD><EFBFBD>:** 窶懈滑謇€譛牙<E8AD9B><EFBFBD>シょクク蛟シ<E89B9F><EFBDBC>>3蛟肴<E89B9F><E882B4>㊥蟾ョ<E89FBE>画崛謐「荳コ郛コ螟ア蛟シ窶昴€?
* **螟肴揩謠仙叙:** 窶應サ寂€倩ッ頑妙窶吝<E7AAB6>荳ュ謠仙叙蜃コ逕ア窶?窶吝<E7AAB6>髫皮噪隨ャ莠碁Κ<CE9A>シ檎函謌先眠蛻冷€€?
* **謇ケ驥丞、<EFBFBD>炊:** 窶懷唖髯、謇€譛臥シコ螟ア邇<EFBDB1><EFBFBD>ソ<EFBFBD> 50% 逧<><E980A7>窶昴€?
### **4\. 譎コ閭ス扈溯ョ。髱「譚ソ (Insight Panel)**
*位于右侧侧边栏的 \[统计概览\] Tab。*
*菴堺コ主承萓ァ萓ァ霎ケ譬冗噪 \[扈溯ョ。讎りァ<E3828A>] Tab縲?
* **P0:** **列联动:** 点击左侧网格某一列,右侧自动显示该列的分布图(直方图/频次图)。
* **P0:** **快捷操作:** 图表下方直接提供“填补”、“分箱”、“映射”等快捷按钮。
* **P0:** **蛻苓#蜉?** 轤ケ蜃サ蟾ヲ萓ァ鄂第<EFBFBD>シ譟蝉ク€蛻暦シ悟承萓ァ閾ェ蜉ィ譏セ遉コ隸・蛻礼噪蛻<EFBFBD><EFBFBD><EFBFBD>育峩譁ケ蝗セ/鬚第ャ。蝗セ<E89D97>€?
* **P0:** **蠢ォ謐キ謫堺ス<EFBFBD>:** 蝗セ陦ィ荳区婿逶エ謗・謠蝉セ帚€懷。ォ陦・窶昴€€<C280>邂ア窶昴€€懈丐蟆<E4B890>€晉ュ牙ソォ謐キ謖蛾聴縲?
### **5\. 蟇シ蜃コ荳取オ∬ス?(Export)**
### **5\. 导出与流转 (Export)**
* **P0:** **结果导出:** 支持 Excel (.xlsx) 和 SPSS (.sav) 格式。
* **P0:** **操作审计:** 导出的文件中,附带一份 **"清洗日志 (Cleaning Log)"**,记录了所有的 AI 代码和手动操作步骤(用于科研溯源)。
## **四、 数据与性能策略 (Data Strategy)**
* **P0:** **扈捺棡蟇シ蜃コ:** 謾ッ謖<EFBDAF> Excel (.xlsx) 蜥?SPSS (.sav) 譬シ蠑上€?
* **P0:** **謫堺ス懷ョ。隶。:** 蟇シ蜃コ逧<EFBDBA>枚莉カ荳ュ<E88DB3>碁刋蟶ヲ荳€莉?**"貂<>エ玲律蠢<E5BE8B> (Cleaning Log)"**<2A>瑚ョー蠖穂コ<E7A982>園譛臥噪 AI 莉」遐∝柱謇句勘謫堺ス懈ュ・鬪、<E9ACAA>育畑莠守ァ醍<EFBDA7>疲コッ貅撰シ峨€?
## **蝗帙€?謨ー謐ョ荳取€ァ閭ス遲也払 (Data Strategy)**
### **4.1 諤ァ閭ス蜃<EFBDBD><E89C83> (Guardrails)**
* **文件大小限制:** 单个文件 **\< 20MB**
* **行数限制:** 建议 **\< 50,000 行** 以保证前端渲染流畅度。
* *策略:* 后端 Python 可以处理百万行,但前端 AG Grid 仅加载前 100-1000 行作为预览Preview Mode导出时才生成全量文件。
* **<EFBFBD>サカ螟ァ蟆城剞蛻カ:** 蜊穂クェ譁<EFBDAA>サカ **\< 20MB**縲?
* **陦梧焚髯仙宛:** 蟒コ隶ョ **\< 50,000 陦?* 莉・菫晁ッ∝燕遶ッ貂イ譟捺オ∫腐蠎ヲ縲?
* *遲也払:* 蜷守ォッ Python 蜿ッ莉・螟<EFBDA5>炊逋セ荳<EFBDBE>。鯉シ御ス<E5BEA1>燕遶?AG Grid <EFBFBD>刈霓ス蜑<EFBFBD> 100-1000 陦御ス應クコ鬚<EFBFBD>ァ茨シ<EFBFBD>review Mode<64>会シ悟ッシ蜃コ譌カ謇咲函謌仙<E8AC8C>驥乗枚莉カ縲?
### **4.2 螳牙<E89EB3>荳朱嚼遘?*
### **4.2 安全与隐私**
* **P0:** **豐咏ョア髫皮ヲサ:** AI 逕滓<E98095>逧?Python 莉」遐∝ソ<E2889D>。サ蝨ィ譛榊苅遶ッ逧<EFBDAF>ョ牙<EFBDAE>豐咏ョア<EFBDAE><EFBDB1>ocker/SAE<41>我クュ霑占。鯉シ檎ヲ∵ュ「隶ソ髣ョ螟也ス大柱邉サ扈滓枚莉カ縲?
* **P0:** **謨ー謐ョ閼ア謨<EFBDB1>:** 遑ョ菫晁セ灘<EFBDBE>郛冶セ大勣逧<E58BA3>焚謐ョ蟾イ蝨ィ蜑咲スョ邇ッ闃ゑシ亥キ・蜈?B<>牙ョ梧<EFBDAE><EFBFBD> PII 閼ア謨上€?
## **莠斐€?蝓狗せ荳守サ溯ョ?*
* **P0:** **沙箱隔离:** AI 生成的 Python 代码必须在服务端的安全沙箱Docker/SAE中运行禁止访问外网和系统文件。
* **P0:** **数据脱敏:** 确保输入编辑器的数据已在前置环节(工具 B完成了 PII 脱敏。
## **五、 埋点与统计**
* **AI 采纳率:** 展示 Action Card 后,用户点击“运行”的比例。
* **代码报错率:** AI 生成的代码在后端执行失败的比例。
* **常用指令 Top 10:** 统计医生最常对 AI 说的话。
## **六、 附录AI 指令集示例 (Few-Shot Examples)**
* **AI 驥<>コウ邇?** 螻慕、コ Action Card 蜷趣シ檎畑謌キ轤ケ蜃サ窶懆ソ占。娯€晉噪豈比セ九€?
* **莉」遐∵冠髞咏<EFBFBD>?** AI 逕滓<E98095><EFBFBD>サ」遐∝惠蜷守ォッ謇ァ陦悟、ア雍・逧<EFBDA5>ッ比セ九€?
* **蟶ク逕ィ謖<EFBDA8>サ、 Top 10:** 扈溯ョ。蛹サ逕滓怙蟶ク蟇ケ AI 隸エ逧<EFBDB4>ッ昴€?
## **蜈ュ縲?髯<>ス包シ哂I 謖<>サ、髮<EFBDA4>、コ萓?(Few-Shot Examples)**
| 逕ィ謌キ謖<EFBDB7>サ、 | AI 蜉ィ菴<EFBDA8> (Action) | 逕滓<E98095>莉」遐<EFBDA3>€サ霎<EFBDBB> (Python Pandas) |
| :---- | :---- | :---- |
| "把性别转为数字" | Recode | df\['sex'\] \= df\['sex'\].map({'男':1, '女':0}) |
| "年龄按60分两组" | Binning | df\['age\_group'\] \= pd.cut(df\['age'\], bins=\[0,60,150\], labels=\['0','1'\]) |
| "謚頑€ァ蛻ォ霓ャ荳コ謨ー蟄<EFBFBD>" | Recode | df\['sex'\] \= df\['sex'\].map({'逕?:1, '螂?:0}) |
| "蟷エ鮴<EFBFBD><EFBFBD>?0蛻<30>ク、扈? | Binning | df\['age\_group'\] \= pd.cut(df\['age'\], bins=\[0,60,150\], labels=\['0','1'\]) |
| "蛻<>髯、豐。譛迂D逧<44><EFBFBD>" | Filter | df \= df.dropna(subset=\['patient\_id'\]) |
| "隶。邂唯MI" | Formula | df\['bmi'\] \= df\['weight'\] / (df\['height'\]/100)\*\*2 |
| "把每个人的一行变成多行" | Pivot/Melt | df \= df.melt(id\_vars=\['id'\], ...) |
| "謚頑ッ丈クェ莠コ逧<EFBFBD>€陦悟序謌仙、夊。? | Pivot/Melt | df \= df.melt(id\_vars=\['id'\], ...) |

View File

@@ -1,91 +1,82 @@
# **PRDTool A \- 医疗数据超级合并器 (The Super Merger)**
# **PRD嚗関ool A \- <EFBFBD><EFBFBD><EFBFBD>唳旿頞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?(The Super Merger)**
| 文档版本 | V2.0 (基准锚定版) |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦 | V2.0 (<EFBFBD><EFBFBD><EFBFBD>𡁜<EFBFBD><EFBFBD>? |
| :---- | :---- |
| **产品形态** | Web 端工具(分步向导式 Wizard |
| **核心价值** | **解决临床科研中“一对多”数据对齐难题。** 基于“访视Visit”和“时间窗”逻辑将散乱的化验、检查数据精准挂载到住院/门诊记录上。 |
| **目标用户** | 临床医生、科研助理 |
| **鈭批<EFBFBD><EFBFBD>?* | Web 蝡臬極<E887AC><EFBFBD><E79880><EFBFBD><EFBFBD>穃紡撘?Wizard嚗?|
| **<EFBFBD><EFBFBD>隞瑕<EFBFBD>?* | **<EFBFBD><EFBFBD>銝游<EFBFBD>蝘𤑳<EFBFBD>銝凌<EFBFBD><EFBFBD>撖孵<EFBFBD><EFBFBD>脲㺭<EFBFBD>桀笆朣鞾𠗕憸塩<EFBFBD>?* <20><EFBFBD><E7AE94>𡏭挪閫<E68CAA><E996AB>Visit嚗争<E59A97><EFBFBD><E598A5>𨀣𧒄<F0A880A3><EFBFBD><E6B8A1><EFBFBD><EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD><E5839A><EFBFBD>撉䎚<E69289><E48E9A><EFBFBD><EFBFBD>交㺭<E4BAA4>桃移<E6A183><E7A7BB><EFBFBD>頧賢<E9A0A7>雿誯堺/<2F><EFBFBD>霈啣<E99C88>銝𨳍<E98A9D>?|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** | 銝游<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥪜𨭌<EFBFBD>?|
## **一、 产品流程图 (User Flow)**
## **<EFBFBD><EFBFBD>?鈭批<E988AD><EFBFBD><E7989A><EFBFBD>?(User Flow)**
1\. 数据装载 (Payload) \-\> 2\. 定基准 (Anchor & Window) \-\> 3\. 选列与预览 (Schema) \-\> 4\. 智能合并 \-\> 5\. 结果与流转
1\. <EFBFBD>唳旿鋆<EFBFBD> (Payload) \-\> 2\. 摰𡁜抅<EFBFBD>?(Anchor & Window) \-\> 3\. <EFBFBD><EFBFBD>銝𡡞<EFBFBD>閫?(Schema) \-\> 4\. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> \-\> 5\. 蝏𤘪<EFBFBD>銝擧<EFBFBD>頧?
## **鈭䎚<E988AD>?<3F><EFBFBD><E8A9A8><EFBFBD><E8A098><EFBFBD>瘙?(Functional Requirements)**
## **二、 核心功能需求 (Functional Requirements)**
### **1\. 甇仿炊銝<E7828A>嚗𡁏㺭<F0A1818F><EFBFBD>頧?(Payload)**
### **1\. 步骤一:数据装载 (Payload)**
* **P0:** **多文件上传:** 支持拖拽上传 .xlsx, .csv。建议大小 \< 50MB/文件。
* **P0:** **自动预检 (Pre-flight Check)**
* 上传即解析表头。
* **红灯拦截:** 文件加密、表头为空、文件损坏 \-\> 禁止下一步。
* **P1:** **加载配置/模板:** 若用户之前保存过“肺癌门诊合并规则”,允许一键加载,跳过后续配置。
### **2\. 步骤二:定基准 (The Anchor) —— 核心算法逻辑**
此步骤决定了最终大表的“骨架”(行数)和“归类逻辑”。
* **P0:** **憭𡁏<E686AD>隞嗡<E99A9E>隡𩤃<E99AA1>** <20><EFBFBD><E88880>𡝗嗻銝𠹺<E98A9D> .xlsx, .csv<73><76>遣霈桀之撠?\< 50MB/<2F><><EFBFBD>?
* **P0:** **<EFBFBD>芸𢆡憸<EFBFBD><EFBFBD> (Pre-flight Check)嚗?*
* 銝𠹺<E98A9D><F0A0B9BA>唾圾<E594BE>鞱”憭氬<E686AD>?
* **<EFBFBD><EFBFBD>行⏛嚗?* <20><><EFBFBD><EFBFBD><E683A9><EFBFBD>”憭港蛹蝛箝<E89D9B><E7AE9D><EFBFBD>隞嗆<E99A9E><E59786>?\-\> 蝳<>迫銝衤<E98A9D>甇乓<E79487>?
* **P1:** **<EFBFBD>㰘蝸<EFBFBD>滨蔭/璅⊥踎嚗?* <20>亦鍂<E4BAA6><EFBFBD><E7919A><EFBFBD>摮䁅<E691AE><E48185>𡏭<EFBFBD><F0A18FAD>屸秄霂𠰴<E99C82>撟嗉<E6929F><E59789><EFBFBD><EFBFBD><E59885><EFBFBD>捂銝<E68D82><E98A9D><EFBFBD>頧踝<E9A0A7>頝唾<E9A09D><E594BE>𡒊賒<F0A1928A>滨蔭<E6BBA8>?
### **2\. 甇仿炊鈭䕘<E988AD>摰𡁜抅<F0A1819C>?(The Anchor) <20><EFBFBD>?<3F><EFBFBD>蝞埈<E89D9E><E59F88><EFBFBD>**
甇斗郊撉文<EFBFBD>摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>之銵函<EFBFBD><EFBFBD>𣈯爸<EFBFBD><EFBFBD><EFBFBD>銵峕㺭嚗匧<EFBFBD><EFBFBD>𨅯<EFBFBD>蝐駁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
#### **2.1 銝餉”<E9A489>㗇𥋘 (The Backbone)**
* **P0:** 用户必须从上传的文件中指定一个作为 **“主表 (Visit Base)”**。
* **定义:** 主表的每一行,代表最终大表的一个基准行(一次就诊/访视)。通常是《住院记录》或《门诊挂号》。
#### **2.2 关键列映射 (Key Mapping)**
* **P0:** **ID 列对齐:** 用户需指定主表的 Patient\_ID 列。系统自动在辅表中寻找同名列,允许人工修正。
* **P0:** **时间基准列:** 用户需指定主表的 Date 列(如“入院日期”)。这将作为时间窗的圆心。
* **P0:** <EFBFBD><EFBFBD><EFBFBD>◆隞𦒘<EFBFBD>隡删<EFBFBD><EFBFBD><EFBFBD>辣銝剜<EFBFBD>摰帋<EFBFBD>銝芯<EFBFBD>銝?**<2A>靝蜓銵?(Visit Base)<EFBFBD>?*<2A>?
* **摰帋<EFBFBD>嚗?* 銝餉”<E9A489><E2809D><EFBFBD><EFBFBD>銵䕘<E98AB5><EFBFBD><EFBFBD><E2809D><EFBFBD>之銵函<E98AB5><EFBFBD>銝芸抅<E88AB8><E68A85><EFBFBD><EFBFBD><E59A97>停霂?霈輯<E99C88>嚗剹<E59A97><E589B9><EFBFBD>𡁜虜<F0A1819C><EFBFBD>𠹺<EFBFBD><F0A0B9BA>扇敶𨰻<E695B6>𧢲<EFBFBD><F0A7A2B2>𢠃秄霂𦠜<E99C82><F0A6A09C><EFBFBD><EFBFBD>?
#### **2.2 <20>喲睸<E596B2><EFBFBD>撠?(Key Mapping)**
* **P0:** **ID <20>堒笆朣琜<E69CA3>** <20><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝餉”<E9A489>?Patient\_ID <20>𨰜<EFBFBD><F0A8B09C>頂蝏蠘䌊<E8A098>典銁颲<E98A81>”銝剖粉<E58996><EFBFBD><E69B89><EFBFBD><EFBFBD><E59A97>霈訾犖撌乩耨甇<E880A8><E79487>?
* **P0:** **<EFBFBD>園𡢿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝餉”<E9A489>?Date <20><EFBFBD><EFBFBD><E68692>𨅯<EFBFBD><F0A885AF>𠯫<EFBCB8><EFBFBD><EFBFBD><E59885><EFBFBD><EFBFBD><EFBFBD><E692A0>銝箸𧒄<E7AEB8><EFBFBD><E6B8A1><EFBFBD><EFBFBD><EFBFBD><E695B9>?
#### **2.3 颲<><EFBFBD><EFBFBD>蝑𣇉裦 (Matching Strategy)**
* **P0:** **时间窗配置 (Time Window)**
* 设定规则:辅表的检查时间必须在 \[主表时间 \- X天, 主表时间 \+ Y天\] 范围内。
* **默认值:** $\\pm 7$ 天。
* **P0:** **冲突处理 (Collision Handling)**
* *场景:* 单次时间窗内,辅表有多条记录(如做了两次血常规)。
* *选项 A (默认 \- 纵向展开)* 保留所有记录。主表信息复制,行数增加。
* *选项 B (最近匹配)* 仅保留离主表时间最近的一条,丢弃其他。
* **P0:** **<EFBFBD>園𡢿蝒烾<EFBFBD>蝵?(Time Window)嚗?*
* 霈曉<EFBFBD><EFBFBD><EFBFBD>嚗朞<EFBFBD>銵函<EFBFBD><EFBFBD><EFBFBD>交𧒄<EFBFBD><EFBFBD>憿餃銁 \[銝餉”<E9A489>園𡢿 \- X憭? 銝餉”<E9A489>園𡢿 \+ Y憭坼] <20><><EFBFBD><E58792><EFBFBD>?
* **暺䁅恕<EFBFBD><EFBFBD>** $\\pm 7$ 憭押<EFBFBD>?
* **P0:** **<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Collision Handling)嚗?*
* *<EFBFBD>箸艶嚗? <20>閙活<E99699>園𡢿蝒堒<E89D92>嚗諹<E59A97>銵冽<E98AB5>憭𡁏辺霈啣<E99C88><EFBFBD><E59A97><EFBFBD><EFBFBD>銝斗活銵<E6B4BB>撣貉<E692A3>嚗剹<E59A97>?
* *<EFBFBD>厰★ A (暺䁅恕 \- 蝥萄<EFBFBD>撅訫<EFBFBD>)嚗? 靽萘<E99DBD><E89098><EFBFBD><EFBFBD>㕑扇敶𨰻<E695B6><F0A8B0BB>蜓銵其縑<E585B6><EFBFBD><E887AC><EFBFBD>銵峕㺭憓𧼮<E68693><F0A7BCAE>?
* *<EFBFBD>厰★ B (<EFBFBD><EFBFBD>餈穃龪<EFBFBD>?嚗? 隞<><E99A9E><EFBFBD>嗵氖銝餉”<E9A489>園𡢿<E59C92><F0A1A2BF>餈𤑳<E9A488><EFBFBD><E98A9D><EFBFBD><E98A9D><EFBCB7><EFBFBD><E597A1>?
### **3\. 甇仿炊銝㚁<E98A9D><E39A81><EFBFBD>銝𡡞<E98A9D>閫?(The Schema)**
### **3\. 步骤三:选列与预览 (The Schema)**
甇斗郊撉文<EFBFBD>摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>之銵函<EFBFBD><EFBFBD>𡏭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>堒捐嚗剹<EFBFBD>?
#### **3.1 <20>𤑳𠶖<F0A491B3>㗇𥋘<E39787>?(Tree Picker)**
此步骤决定了最终大表的“血肉”(列宽)。
#### **3.1 树状选择器 (Tree Picker)**
* **P0:** 展示所有文件的列结构。
* **P0:** 撅閧內<E996A7><E585A7><EFBFBD><EFBFBD>隞嗥<E99A9E><E597A5><EFBFBD><E39B96><EFBFBD><EFBFBD>?
* <20><> 銝餉”
* ✅ 住院号
* ✅ 诊断
* <EFBFBD>?雿誯堺<E8AAAF>?
* <EFBFBD>?霂𦠜鱏
* <20><><>” A (<28><EFBFBD>)
* ✅ 白细胞
* ⬜ 审核医生 (不勾选)
* **交互:** 支持按文件全选/反选。
* <EFBFBD>?<3F><EFBFBD><E8B39C>?
* 漎?摰⊥瓲<E28AA5><EFBFBD> (銝滚㗲<E6BB9A>?
* **鈭支<EFBFBD>嚗?* <20><EFBFBD><E88880><EFBFBD>隞嗅<E99A9E><E59785>?<3F><EFBFBD><EFBFBD>?
#### **3.2 摰墧𧒄蝏𤘪<E89D8F><EFBFBD><E686B8> (Live Schema Preview)**
* **P0:** 在屏幕右侧实时展示\*\*“最终表头结构”\*\*(仅表头,不计算数据)。
* **价值:** 让用户直观看到:“哦,原来我的表会变成这么长,包含这些列”。
* **P0:** <EFBFBD><EFBFBD>撟訫𢰧靘批<EFBFBD><EFBFBD><EFBFBD>蝷暝*\*<2A>𨀣<EFBFBD><EFBFBD>”憭渡<E686AD><E6B8A1><EFBFBD><EFBFBD>𩄼*\*嚗<><E59A97>銵典仍嚗䔶<E59A97>霈∠<E99C88><E288A0>唳旿嚗剹<E59A97>?
* **隞瑕<EFBFBD><EFBFBD>** 霈拍鍂<E68B8D>瑞凒閫<E58792><E996AB><EFBFBD><EFBFBD><E5A086>𨅯𣑐嚗<F0A39190><E59A97><EFBFBD><EFBFBD><E4BAA4><EFBFBD>”隡𡁜<E99AA1><F0A1819C><EFBFBD><EFBFBD>鵭嚗<E9B5AD><E59A97><EFBFBD><EFBFBD>鈭𥕦<E988AD><F0A595A6><EFBFBD>?
### **4\. 甇仿炊<E4BBBF>𨥈<EFBFBD>蝏𤘪<E89D8F>銝擧<E98A9D>頧?(The Result)**
### **4\. 步骤四:结果与流转 (The Result)**
* **P0:** **处理进度条:** 显示动态文案(“正在构建哈希索引...”、“正在进行时间窗碰撞...”)。
* **P0:** **黄金预览 (Golden Preview)**
* 必须展示合并结果的 **前 5-10 行** 真实数据。
* 用于用户肉眼核对 ID 是否对齐。
* **P0:** **质量看板:**
* 成功生成行数。
* 丢弃行数ID不匹配或时间窗外
* **P0:** **行动流转:**
* **P0:** **憭<><E686AD>餈𥕦漲<F0A595A6><EFBFBD>** <20>曄內<E69B84><EFBFBD><E586BD><EFBFBD><EFBFBD><E78DA2><EFBFBD>𨀣迤<F0A880A3><EFBFBD>撱箏<E692B1>撣𣬚揣撘?..<2E><EFBFBD><E88588><EFBFBD>𨀣迤<F0A880A3><EFBFBD>銵峕𧒄<E5B395><EFBFBD>蝣唳<E89DA3>...<2E><EFBFBD><E59885>?
* **P0:** **暺<><E69ABA><EFBFBD><E686B8> (Golden Preview)嚗?*
* <EFBFBD>◆撅閧內<EFBFBD><EFBFBD>僎蝏𤘪<EFBFBD><EFBFBD>?**<2A>?5-10 銵?* <20><EFBFBD><E7AC94>唳旿<E594B3>?
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厩尐<EFBFBD>詨笆 ID <20>臬炏撖寥<E69296><E5AFA5>?
* **P0:** **韐券<E99F90><E588B8>𧢲踎嚗?*
* <EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵峕㺭<EFBFBD>?
*<E98A9D>銵峕㺭嚗㇆D銝滚龪<E6BB9A>齿<EFBFBD><E9BDBF>園𡢿蝒堒<E89D92>嚗剹<E59A97>?
* **P0:** **銵<>𢆡瘚<F0A286A1>蓮嚗?*
* \[銝贝蝸 Excel\]
* \[<5B><EFBFBD><E785BE><EFBFBD> AI 蝏𤘪<E89D8F><F0A498AA>硋極<E7A18B>愧] (瘚<>蓮 Token)
* \[<5B><EFBFBD><E785BE><EFBFBD> 蝻𤥁<E89DBB><F0A4A581><EFBFBD>瘣珢] (瘚<>蓮 Token)
## **三、 核心算法逻辑 (Technical Logic)**
## **銝剹<EFBFBD>?<3F><EFBFBD>蝞埈<E89D9E><E59F88><EFBFBD> (Technical Logic)**
### **1\. 算法名称:基于时间窗的哈希流式连接 (Time-Windowed Stream Hash Join)**
### **1\. 蝞埈<EFBFBD><EFBFBD>滨妍嚗𡁜抅鈭擧𧒄<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撣峕<EFBFBD>撘讛<EFBFBD><EFBFBD>?(Time-Windowed Stream Hash Join)**
### **2\. 执行伪代码**
### **2\. <EFBFBD><EFBFBD>隡芯誨<EFBFBD>?*
// 1\. <20><><EFBFBD><EFBFBD><EFBFBD>遣 (Build Phase)
// 将辅表 (Small Tables) 读入内存 Map
// <EFBFBD><EFBFBD>銵?(Small Tables) 霂餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Map
const lookupMap \= {
"patient\_001": \[
{ type: "lab", date: "2023-01-02", data: {...} }, // 霈啣<E99C88>1
@@ -116,16 +107,14 @@ streamMainTable.on('data', (mainRow) \=\> {
}
});
## **四、 界面原型参考 (UI Reference)**
## **<EFBFBD><EFBFBD>?<3F>屸𢒰<E5B1B8><EFBFBD><E7AC94><EFBFBD><EFBFBD>?(UI Reference)**
请参考 工具A\_超级合并器\_原型设计.tsx (V1.0) 中的 Step 2 Step 3 界面。
* **Step 2 重点:** 主表选择单选框、时间列下拉框、策略单选钮。
* **Step 3 重点:** 左右分栏布局(左侧树状勾选,右侧表格骨架预览)。
## **五、 风险规避检查 (Risk Check)**
霂瑕<EFBFBD><EFBFBD>?撌亙<E6928C>A\_頞<5F><EFBFBD><E6BCA3><EFBFBD>沔_<E6B294><EFBFBD>霈曇恣.tsx (V1.0) 銝剔<EFBFBD> Step 2 <EFBFBD>?Step 3 <EFBFBD>屸𢒰<EFBFBD>?
* **Step 2 <20><EFBFBD>嚗?* 銝餉”<E9A489>㗇𥋘<E39787><EFBFBD><EFBFBD><E39787><EFBFBD>𧒄<EFBFBD><EFBFBD>銝𧢲<E98A9D><EFBFBD><E78DA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BA99>厰僼<E58EB0>?
* **Step 3 <20><EFBFBD>嚗?* 撌血𢰧<E8A180><F0A2B0A7><EFBFBD><EFBFBD><E692A3><EFBFBD>椰靘扳<E99D98><E689B3>嗅㗲<E59785><EFBFBD><E39A81>喃儒銵冽聢撉冽沲憸<E6B2B2><E686B8>嚗剹<E59A97>?
## **鈭𢛵<E988AD>?憌𡡞埯閫<E59FAF><E996AB><EFBFBD><E79289>?(Risk Check)**
1. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝餉”<EFBFBD>𦒘<EFBFBD><EFBFBD><EFBFBD>**
* *对策:* 在 Step 2 界面增加显眼的 **Tip**:“主表通常是包含‘入院日期’或‘诊断信息’的表格”。
* *撖寧<EFBFBD>嚗? <20>?Step 2 <20>屸𢒰憓𧼮<E68693><F0A7BCAE>曄尐<E69B84>?**Tip**嚗尠<E59A97>靝蜓銵券<E98AB5>𡁜虜<F0A1819C><EFBFBD><E887AC><EFBFBD><EFBFBD><E79D83>𠯫<EFBCB8><EFBFBD><EFBFBD><E8B9B1><EFBFBD><E48185>凋縑<E5878B><EFBFBD><EFBFBD>銵冽聢<E586BD><EFBFBD>?
2. **<EFBFBD>園𡢿<EFBFBD><EFBFBD>銋曹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦒘<EFBFBD><EFBFBD><EFBFBD>**
* *对策:* 后端在解析时间列时,必须使用强力的 Parser(支持 2023/1/1, 2023-01-01, 44927 等格式)。如果解析失败,归为“时间无效”,不进行匹配。
* *撖寧<E69296>嚗? <20>𡒊垢<F0A1928A>刻圾<E588BB>鞉𧒄<E99E89><EFBFBD><E6B8B8><EFBFBD><EFBFBD>◆雿輻鍂撘箏<E69298><E7AE8F>?Parser<EFBFBD>𣈲<EFBFBD>?2023/1/1, 2023-01-01, 44927 蝑㗇聢撘𧶏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡏭圾<EFBFBD>𣂼仃韐伐<EFBFBD>敶雴蛹<EFBFBD>𨀣𧒄<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滩<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -1,82 +1,76 @@
# **PRD嚗関ool B \- <20><><EFBFBD>蝏𤘪<E89D8F><F0A498AA>𡝗㦤<F0A19D97>其犖 (The AI Structurer)**
| <20><><EFBFBD><EFB99D>𧋦 | V2.0 (<28>峕芋<E5B395>衤漱<E8A1A4><EFBFBD><EFBFBD><E99C82>) |
| 产品形态 | Web 端工具(批处理 \+ 全景验证网格) |
| 核心价值 | 利用 双大模型DeepSeek & Qwen交叉验证 技术,将非结构化病历文本转化为高可信度的结构化数据,解决 AI 幻觉问题。 |
| 鈭批<EFBFBD><EFBFBD>?| Web 蝡臬極<E887AC><EFBFBD><E79880><EFBFBD><E5ADB5>?\+ <20>冽艶撉諹<E69289>蝵烐聢嚗?|
| <EFBFBD><EFBFBD>隞瑕<EFBFBD>?| <20>拍鍂 <20><>之璅<E79285>嚗㇄eepSeek & Qwen嚗劐漱<E58A90><EFBFBD>霂?<3F><><EFBFBD><EFBFBD><EFBFBD><E692A0>蝏𤘪<E89D8F><F0A498AA>𣇉<EFBFBD><F0A38789><EFBFBD><EFBFBD><EFBFBD>祈蓮<E7A588>碶蛹擃睃虾靽<E288AA><E6BCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿嚗諹圾<E8ABB9>?AI 撟餉<E6929F><E9A489><EFBFBD><E6A185>?|
| <20><EFBFBD><E6A0BC><EFBFBD> | <20><><EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝏瓐<E89D8F><E79390><EFBFBD><EFBFBD><EFBFBD>𥁒<EFBFBD><EFBFBD><E7BE93><EFBFBD><EFBFBD><EFBFBD>唳旿<E594B3><E697BF><EFBFBD><EFBFBD><EFBFBD><E79899>擃矋<E69383> |
## **一、 产品流程图 (User Flow)**
## **<EFBFBD><EFBFBD>?鈭批<E988AD><EFBFBD><E7989A><EFBFBD>?(User Flow)**
数据导入(上传/流转) \-\> 健康体检 \-\> 智能模版配置 \-\> 双盲提取与交叉验证 \-\> 全景网格裁决 \-\> 结果导出
<EFBFBD>唳旿撖澆<EFBFBD>(銝𠹺<E98A9D>/瘚<>蓮) \-\> <20>亙熒雿𤘪<E99BBF> \-\> <20><EFBFBD>璅∠<E79285><E288A0>滨蔭 \-\> <20>𣬚𤩅<F0A3AC9A>𣂼<EFBFBD>銝𦒘漱<F0A69298><EFBFBD>霂?\-\> <20>冽艶蝵烐聢鋆<E881A2><E98B86> \-\> 蝏𤘪<E89D8F>撖澆枂
## **二、 核心功能需求 (Functional Requirements)**
## **鈭䎚<EFBFBD>?<3F><EFBFBD><E8A9A8><EFBFBD><E8A098><EFBFBD>瘙?(Functional Requirements)**
### **1\. 甇仿炊銝<E7828A>嚗𡁏㺭<F0A1818F><EFBFBD>頧賭<E9A0A7>雿𤘪<E99BBF> (Injection & Health Check)**
* **P0:** **数据源接入:** 支持本地 Excel 上传,或接收来自工具 A 的流转文件。
* **P0:** **智能体检 (Health Check)**
* 用户选定“文本源列”后,系统立即扫描前 100 行。
* **拦截规则:** 若空值率 \> 80% 或平均字符数 \< 10提示“该列不适合提取”防止误操作浪费 Token
* **成本预估:** 根据字符数实时预估 Token 消耗量。
* **P0:** **<EFBFBD>唳旿皞鞉𦻖<EFBFBD><EFBFBD>** <20><EFBFBD><E88880>砍𧑐 Excel 銝𠹺<E98A9D>嚗峕<E59A97><E5B395>交𤣰<E4BAA4>亥䌊撌亙<E6928C> A <20><><EFBFBD>頧祆<E9A0A7>隞嗚<E99A9E>?
* **P0:** **<EFBFBD><EFBFBD>雿𤘪<EFBFBD> (Health Check)嚗?*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨀣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𣬚頂蝏毺<EFBFBD><EFBFBD>單醌<EFBFBD><EFBFBD> 100 銵䎚<EFBFBD>?
* **<EFBFBD>行⏛閫<EFBFBD><EFBFBD>嚗?* <20>亦征<E4BAA6><EFBFBD> \> 80% <20>硋像<E7A18B><E5838F><EFBFBD>蝚行㺭 \< 10嚗峕<E59A97>蝷算<E89DB7>𡏭砲<F0A18FAD>𦯀<EFBFBD><F0A6AF80><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD><F0A382BC><EFBFBD><E59885>脫迫霂舀<E99C82>雿𨀣答韐?Token<EFBFBD>?
* **<EFBFBD>鞉𧋦憸<EFBFBD>摯嚗?* <20>寞旿摮㛖泵<E39B96><EFBFBD><E595A3><EFBFBD>隡?Token 瘨<><E798A8><EFBFBD><E783BE>?
### **2\. 甇仿炊鈭䕘<E988AD><E49598><EFBFBD>璅∠<E79285><E288A0>滨蔭 (Smart Schema) <20><EFBFBD>?V2 <20><EFBFBD><E8A9A8><EFBFBD>漣**
### **2\. 步骤二:智能模版配置 (Smart Schema) —— V2 核心升级**
* **P0:** **场景化模版选择:**
* **一级分类(疾病):** 肺癌、高血压、糖尿病等。
* **二级分类(报告):** 病理报告、入院记录、门诊病历、手术记录。
* **P0:** **<EFBFBD>箸艶<EFBFBD>𡝗芋<EFBFBD><EFBFBD><EFBFBD>㗇𥋘嚗?*
* **銝<>蝥批<E89DA5>蝐鳴<E89D90><E9B3B4><EFBFBD>嚗㚁<E59A97>** <20><EFBFBD><E7AE87><EFBFBD><EFBFBD><EFBFBD><E98AB5><EFBFBD><E58D9D><EFBFBD>撠輻<E692A0>蝑剹<E89D91>?
* **鈭𣬚漣<EFBFBD><EFBFBD>掩嚗<EFBFBD>𥁒<EFBFBD>𠺪<EFBFBD>嚗?* <20><><EFBFBD><EFBFBD><EFBFBD><E4BA99><EFBFBD><EFBFBD><EFBFBD>扇敶𨰻<E695B6><F0A8B0BB>秄霂羓<E99C82><E7BE93><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>航扇敶𨰻<E695B6>?
* **P0:** **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>畾萄<EFBFBD>銋㚁<EFBFBD>**
* 选择模版后,自动加载预设字段列表(如“肺癌病理”自动加载:肿瘤大小、淋巴结转移、分化程度)。
* 支持用户手动 **增/删/改** 字段定义。
* **P1:** **Prompt 预览:** 实时展示系统将发送给 AI Prompt 结构,增强专业用户信任感。
### **3\. 步骤三:双盲提取引擎 (Double-Blind Extraction) —— V2 核心升级**
* <EFBFBD>㗇𥋘璅∠<EFBFBD><EFBFBD>𠬍<EFBFBD><EFBFBD>芸𢆡<EFBFBD>㰘蝸憸<EFBFBD>挽摮埈挾<EFBFBD>𡑒”嚗<EFBFBD><EFBFBD><EFBFBD>𡏭<EFBFBD><EFBFBD>𣬚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>肽䌊<EFBFBD><EFBFBD>頧踝<EFBFBD><EFBFBD>輻𠈔憭批<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌渡<EFBFBD>頧祉宏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣇉<EFBFBD>摨佗<EFBFBD><EFBFBD>?
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>见𢆡 **憓?<3F>?<3F>?* 摮埈挾摰帋<E691B0><E5B88B>?
* **P1:** **Prompt <EFBFBD><EFBFBD>嚗?* 摰墧𧒄撅閧內蝟餌<E89D9F><EFBFBD><E692A0><EFBFBD><EFBFBD><EFBFBD> AI <EFBFBD>?Prompt 蝏𤘪<EFBFBD><EFBFBD><EFBFBD>撘箔<EFBFBD>銝𡁶鍂<EFBFBD>瑚縑隞餅<EFBFBD><EFBFBD>?
### **3\. 甇仿炊銝㚁<E98A9D><E39A81>𣬚𤩅<F0A3AC9A>𣂼<EFBFBD>撘閙<E69298> (Double-Blind Extraction) <20><EFBFBD>?V2 <20><EFBFBD><E8A9A8><EFBFBD>漣**
* **P0:** **<EFBFBD>峕芋<EFBFBD>见僎<EFBFBD>𡢅<EFBFBD>**
* 系统同时调用 **DeepSeek-V3** (Model A) **Qwen-Max** (Model B) 对同一段文本进行提取。
* **P0:** **交叉验证算法 (Cross-Validation)**
* **完全一致:** 若 A 与 B 结果相同,标记为 Clean (可信)。
* **冲突:** 若 A 与 B 结果不同,标记为 Conflict (待裁决)。
* **P0:** **隐私脱敏:** 强制执行 PII 脱敏(正则替换姓名、身份证号)。
* 蝟餌<EFBFBD><EFBFBD>峕𧒄靚<EFBFBD> **DeepSeek-V3** (Model A) <EFBFBD>?**Qwen-Max** (Model B) 撖孵<EFBFBD><EFBFBD>畾菜<EFBFBD><EFBFBD><EFBFBD>銵峕<EFBFBD><EFBFBD><EFBFBD>?
* **P0:** **鈭文<EFBFBD>撉諹<EFBFBD>蝞埈<EFBFBD> (Cross-Validation)嚗?*
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20>?A 銝?B 蝏𤘪<E89D8F><F0A498AA><EFBFBD>嚗峕<E59A97>霈唬蛹 Clean (<EFBFBD>臭縑)<29>?
* **<EFBFBD><EFBFBD>嚗?* <20>?A 銝?B 蝏𤘪<E89D8F>銝滚<E98A9D>嚗峕<E59A97>霈唬蛹 Conflict (<EFBFBD><EFBFBD><EFBFBD>?<3F>?
* **P0:** **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* 撘箏<E69298><E7AE8F><EFBFBD> PII <20><EFBFBD><EFBFBD><EFBFBD>蹱𤜯<E8B9B1><EFBFBD><EFBCB7><EFBFBD><E6BABB>澈隞質<E99A9E><E8B3AA><EFBFBD><E79880>?
### **4\. 甇仿炊<E4BBBF>𨥈<EFBFBD><F0A8A588>冽艶撉諹<E69289>蝵烐聢 (Verification Grid) <20><EFBFBD>?鈭支<E988AD><E694AF>齿<EFBFBD>**
### **4\. 步骤四:全景验证网格 (Verification Grid) —— 交互重构**
*不再使用单条划动的 Tinder 模式,改为更高效的 Excel 列表模式。*
* **P0:** **验证列表 (The Grid)**
* **列结构:** 序号 | 原文摘要 | \[字段1\] | \[字段2\] ... | 状态。
* **原文列:** 显示前 50 字,鼠标悬停显示 Tooltip。
* **P0:** **冲突可视化与裁决:**
* **一致单元格:** 显示绿色/白色背景,展示单一值。
* **冲突单元格:** 背景标黄/红。内部并列显示$$DS: 值A$$
与$$QW: 值B$$
* **一键采纳:** 用户点击 A 或 B该值即被采纳单元格转为已解决状态。支持双击手动输入修正。
* **P0:** **侧边栏原文 (Context Drawer)**
* 点击表格任一行,右侧滑出侧边栏。
* 展示病历**全文**,方便用户溯源核对。
* **P1:** **批量操作:** 支持“剩余冲突全部采纳 Model A”或“导出当前进度”。
*銝滚<E98A9D>雿輻鍂<E8BCBB>閙辺<E99699>鍦𢆡<E98DA6>?Tinder 璅<E79285>嚗峕㺿銝箸凒擃䀹<E69383><E480B9>?Excel <20>𡑒”璅<E79285><E288AA>?
* **P0:** **撉諹<E69289><E8ABB9>𡑒” (The Grid)嚗?*
* **<2A><EFBFBD><E39B96><EFBFBD><EFBFBD>** 摨誩噡 | <20><><EFBFBD><EFBFBD><EFBFBD> | \[摮埈挾1\] | \[摮埈挾2\] ... | <20><EFBFBD><E59786><EFBFBD>?
* **<2A><><EFBFBD><EFBFBD><EFBFBD>** <20>曄內<E69B84>?50 摮梹<E691AE>曌䭾<E69B8C><E4ADBE><EFBFBD><E7A08D>曄內 Tooltip<69>?
* **P0:** **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?*
* **銝<><E98A9D><EFBFBD><E6B8B8><EFBFBD>聢嚗?* <20>曄內蝏輯𠧧/<2F>質𠧧<E8B3AA>峕艶嚗<E889B6><E59A97>蝷箏<E89DB7><EFBFBD><E98A9D><EFBFBD>?
* **<2A><EFBFBD><E884A9><EFBFBD><E8A8AB><EFBFBD>** <20>峕艶<E5B395><E889B6><EFBFBD>/蝥<E89DA5><EFBCB5><EFBFBD><EFBFBD>典僎<E585B8>埈遬蝷?$DS: <20>劈$$
銝?$QW: <20>劉$$
<20>?
* **銝<><E98A9D><EFBFBD>蝥喉<E89DA5>** <20><EFBFBD><E586BD>孵稬 A <20>?B嚗諹砲<E8ABB9>澆朖鋡恍<E98BA1>蝥喉<E89DA5><E59689><EFBFBD><E8A8AB>潸蓮銝箏歇閫<E6AD87><E996AB><EFBFBD><EFBFBD><E59786><EFBFBD><EFBFBD>𣈲<EFBFBD><F0A388B2><EFBFBD><EFBFBD><EFBFBD><E9A485><EFBFBD><E588BB>乩耨甇<E880A8><E79487>?
* **P0:** **靘扯器<E689AF><EFBFBD><E8AAA9>?(Context Drawer)嚗?*
* <20>孵稬銵冽聢隞颱<E99A9E>銵䕘<E98AB5><E49598>喃儒皛穃枂靘扯器<E689AF><EFBFBD>?
* 撅閧內<E996A7><E585A7><EFBFBD>**<2A><EFBFBD>**嚗峕䲮靘輻鍂<E8BCBB>瑟滲皞鞉瓲撖嫘<E69296>?
* **P1:** **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* <20><EFBFBD><E88880>𨅯<EFBFBD>雿坔<E99BBF><EFBFBD><E89D92><EFBFBD><EFBFBD>蝥?Model A<><EFBFBD><E884B2>𨅯紡<F0A885AF><EFBFBD><E7AE8F><EFBFBD>摨色<E691A8><EFBFBD>?
### **5\. 蝏𤘪<E89D8F>颲枏枂**
* **P0:** **导出 Excel** 包含最终采纳的结构化数据。
* **P0:** **流转到编辑器:** 一键发送到 **工具 C** 进行后续清洗(如缺失值填补)。
* **P0:** **撖澆枂 Excel嚗?* <20><><EFBFBD><E98984><EFBFBD><E89D8F>蝥喟<E89DA5>蝏𤘪<E89D8F><F0A498AA>𡝗㺭<F0A19D97><EFBFBD>?
* **P0:** **<EFBFBD><EFBFBD><EFBFBD>颲穃膥嚗?* 銝<><E98A9D><EFBFBD><E6A180><EFBFBD><EFBFBD> **撌亙<E6928C> C** 餈𥡝<E9A488><F0A5A19D>𡒊賒皜<E8B392><E79A9C><EFBFBD><E59A97>蝻箏仃<E7AE8F>銵伐<E98AB5><E4BC90>?
## **銝剹<E98A9D>?<3F>屸𢒰<E5B1B8><EFBFBD><EFBFBD>艙 (UI Sketch)**
## **三、 界面原型概念 (UI Sketch)**
* **雿𤘪<E99BBF>憿蛛<E686BF>** <20>劐葉<E58A90><EFBFBD><E5A092>曄內蝥<EFBCB9>臬㨃<E887AC><E3A883><EFBFBD><EFBFBD>𨅯<EFBFBD>摨瑕漲隡条<E99AA1>嚗屸<E59A97>霈⊥<E99C88><E28AA5>?45k Token<65><EFBFBD>?
* **<2A>滨蔭憿蛛<E686BF>** 銝𧢲<E98A9D><F0A7A2B2>㗇𥋘<E39787>𡏭<EFBFBD><F0A18FAD>𢞖<EFBFBD>?<3F>𦦵<EFBFBD><F0A6A6B5><EFBFBD>𥁒<EFBFBD>𪙛<EFBFBD><EFBFBD>銝𧢲䲮<F0A7A2B2>芸𢆡<E88AB8>堒枂 5 銝芸<E98A9D><E88AB8><EFBFBD><E6A0BC><EFBFBD><EFBFBD>?
* **憭<><E686AD>憿蛛<E686BF>** 餈𥕦漲<F0A595A6>舀遬蝷算<E89DB7>𨅯<EFBFBD><E79285><E288AA>𣂼<EFBFBD>銝?..<2E><EFBFBD>銝𧢲䲮<F0A7A2B2><EFBFBD>皛𡁜𢆡<F0A1819C>𡤜eepSeek 摰峕<E691B0>... Qwen 摰峕<E691B0>... 甇<>銁鈭文<E988AD>瘥𥪜笆<F0A5AA9C><EFBFBD>?
* **撉諹<E69289>憿?(<28><EFBFBD>)嚗?*
* 憿園<E686BF>嚗𡁶<E59A97>霈⊥辺<E28AA5>𨅯<EFBFBD> 100 <20><EFBFBD><E288B4>𤑳緵 12 <20><EFBFBD><EFBFBD><E89D92><EFBFBD>?
* 銝颱<E98A9D>嚗𡁶掩 Excel 銵冽聢<E586BD><E881A2><EFBFBD><EFBFBD><E89D92><EFBFBD><EFBFBD><EFBFBD><E881A2><EFBFBD>銝支葵<E694AF>厰僼靘偦<E99D98>㗇𥋘<E39787>?
* 靘扯器<E689AF>𧶏<EFBFBD>撅閧內敶枏<E695B6>銵𣬚<E98AB5>摰峕㟲<E5B395><E39FB2><EFBFBD><EFBFBD><EFBFBD>𧋦<EFBFBD>?
## **<2A><EFBFBD>?<3F><><EFBFBD>臬虾銵峕<E98AB5><EFBFBD>蝥行<E89DA5>**
* **体检页:** 选中列后显示红绿灯卡片:“健康度优秀,预计消耗 45k Token”。
* **配置页:** 下拉选择“肺癌”+“病理报告”,下方自动列出 5 个关键指标。
* **处理页:** 进度环显示“双模型提取中...”下方日志滚动“DeepSeek 完成... Qwen 完成... 正在交叉比对”。
* **验证页 (核心)**
* 顶部:统计条“共 100 条,发现 12 条冲突”。
* 主体:类 Excel 表格。冲突单元格内有两个按钮供选择。
* 侧边栏:展示当前行的完整病历文本。
## **四、 技术可行性与约束**
* **模型选型:**
* **主模型 (Model A)** DeepSeek-V3 (性价比高,擅长中文医疗)。
* **辅助模型 (Model B)** Qwen-Max 或 GPT-4o-mini (用于校验)。
* **冲突判定逻辑:**
* 字符串完全匹配或基于语义相似度Embedding Cosine Similarity \> 0.95)判定为一致。
* 数值提取需进行单位归一化后再比对(如 3cm vs 3.0 cm 视为一致)。
* **性能要求:** 双倍 API 调用会导致成本和时间增加,需在界面上明确告知用户并显示进度。
* **<EFBFBD><EFBFBD><EFBFBD>嚗?*
* **銝餅芋<EFBFBD>?(Model A)嚗?* DeepSeek-V3 (<28>找遠瘥娪<E798A5>嚗峕<E59A97><E5B395>蹂葉<E8B982><E89189><EFBFBD>?<3F>?
* **<EFBFBD>𨭌璅<EFBFBD> (Model B)嚗?* Qwen-Max <20>?GPT-4o-mini (<28><EFBFBD><E585B6><EFBFBD>)<29>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?*
* 摮㛖泵銝脣<EFBFBD><EFBFBD>典龪<EFBFBD>齿<EFBFBD><EFBFBD><EFBFBD>霂凋<EFBFBD><EFBFBD>訾撮摨佗<EFBFBD>Embedding Cosine Similarity \> 0.95嚗匧ế摰帋蛹銝<EFBFBD><EFBFBD><EFBFBD>?
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈𥡝<EFBFBD><EFBFBD><EFBFBD>敶雴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>齿<EFBFBD>撖對<EFBFBD>憒?3cm vs 3.0 cm 閫<>蛹銝<E89BB9><E98A9D><EFBFBD><E6B99B>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* <20><><EFBFBD>?API 靚<>鍂隡𡁜紡<F0A1819C><EFBFBD><E6B994><EFBFBD><E7A08D>園𡢿憓𧼮<E68693>嚗屸<E59A97><E5B1B8><EFBFBD><E587BD><EFBFBD><EFBCB6>𡒊<F0A1928A>羓䰻<E7BE93><EFBFBD>撟嗆遬蝷箄<E89DB7>摨艾<E691A8>

View File

@@ -1,107 +1,99 @@
# **PRDTool C \- 科研数据编辑器 (MVP V1.1)**
# **PRD嚗関ool C \- 蝘𤑳<EFBFBD><EFBFBD>唳旿蝻𤥁<EFBFBD><EFBFBD>?(MVP V1.1)**
| 文档版本 | V1.1 (工程细化版) |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦 | V1.1 (撌亦<EFBFBD><EFBFBD><EFBFBD><EFBFBD>? |
| :---- | :---- |
| **产品形态** | **Web 端数据编辑器 (AG Grid \+ AI Chat)** |
| **核心策略** | **"AI-First" \+ "Server-side State"**。依靠 AI 生成 Python 代码完成清洗;以服务端 DataFrame 为单一数据源,前端负责渲染和轻量编辑。 |
| **技术底座** | React \+ AG Grid \+ Node.js BFF \+ Python Sandbox (FastAPI) \+ DeepSeek-V3 |
| **变更记录** | V1.1: 增加数据同步机制、撤销回滚策略、会话生命周期定义。 |
| **鈭批<EFBFBD><EFBFBD>?* | **Web 蝡舀㺭<EFBFBD><EFBFBD>颲穃膥 (AG Grid \+ AI Chat)** |
| **<EFBFBD><EFBFBD>蝑𣇉裦** | **"AI-First" \+ "Server-side State"**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?AI <20><><EFBFBD> Python 隞<><E99A9E>摰峕<E691B0><EFBFBD><E79A9C>嚗𥕢誑<F0A595A2>滚𦛚蝡?DataFrame 銝箏<E98A9D><EFBFBD><E98A9D>唳旿皞琜<E79A9E><E7909C>滨垢韐蠘提皜脫<E79A9C><E884AB>諹蝠<E8ABB9><EFBFBD>颲㻫<E9A2B2>?|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨?* | React \+ AG Grid \+ Node.js BFF \+ Python Sandbox (FastAPI) \+ DeepSeek-V3 |
| **<EFBFBD>䀹凒霈啣<EFBFBD>** | V1.1: 憓𧼮<EFBFBD><EFBFBD>唳旿<EFBFBD>峕郊<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑𣇉裦<EFBFBD><EFBFBD><EFBFBD>霂萘<EFBFBD><EFBFBD>賢𪂹<EFBFBD><EFBFBD>銋剹<EFBFBD>?|
## **一、 MVP 核心目标 (Objectives)**
## **<EFBFBD><EFBFBD>?MVP <20><EFBFBD><E8A9A8><EFBFBD> (Objectives)**
1. **验证闭环:** 跑通 “自然语言 \-\> Python 代码 \-\> 后端执行 \-\> 前端刷新” 的完整链路。
2. **数据一致性:** 确保手动编辑与 AI 操作不冲突,状态可追溯。
3. **可用性:** 解决中文乱码、会话超时等实际工程问题。
1. **撉諹<EFBFBD><EFBFBD>剔㴓嚗?* 頝煾<E9A09D>?<3F>𡏭䌊<F0A18FAD>嗉祗閮<E7A597> \-\> Python <EFBFBD><EFBFBD> \-\> <EFBFBD>𡒊垢<EFBFBD><EFBFBD> \-\> <20>滨垢<E6BBA8>瑟鰵<E7919F>?<3F><><EFBFBD><EFBFBD>湧曎頝胯<E9A09D>?
2. **<EFBFBD>唳旿銝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** 蝖桐<E89D96><E6A190>见𢆡蝻𤥁<E89DBB>銝?AI <20><EFBFBD>銝滚<E98A9D><EFBFBD><E89D92><EFBFBD><EFBFBD><E59786>虾餈賣滲<E8B3A3>?
3. **<EFBFBD>舐鍂<EFBFBD><EFBFBD>** 閫<><E996AB>銝剜<E98A9D>銋梁<E98A8B><E6A281><EFBFBD><EFBFBD>霂肽<E99C82><E882BD><EFBFBD>摰鮋<E691B0>撌亦<E6928C><E4BAA6><EFBFBD><E6A185>?
## **鈭䎚<E988AD>?霂衣<E99C82><E8A1A3><EFBFBD><E8A098><EFBFBD>瘙?(Functional Requirements)**
## **二、 详细功能需求 (Functional Requirements)**
### **1\. 界面框架与会话 (Shell & Session)**
* **P0: 左右分栏布局:** 左侧 AG Grid (70%),右侧 AI Chat (30%)。
* **P0: 会话初始化 (Session Init):**
* 用户上传文件 \-\> 后端开启 Python 进程/容器 \-\> 加载 df \-\> 返回 sessionId。
* **编码检测:** 后端必须尝试 utf-8 和 gbk 解码,防止中文乱码。
* **P1: 心跳与保活 (Keep-alive):**
* 前端每 30s 发送心跳。
* **超时策略:** 若超过 30min 无操作,后端释放内存。用户再次操作时,提示“会话已过期,请重新加载文件”。
### **1\. <20>屸𢒰獢<F0A292B0>沲銝𦒘<E98A9D>霂?(Shell & Session)**
* **P0: 撌血𢰧<E8A180><F0A2B0A7><EFBFBD><EFBFBD><E692A3>嚗?* 撌虫儒 AG Grid (70%)嚗<>𢰧靘?AI Chat (30%)<29>?
* **P0: 隡朞<E99AA1><E69C9E><EFBFBD><E598A5>?(Session Init):**
* <20><EFBFBD>銝𠹺<E98A9D><F0A0B9BA><EFBFBD>辣 \-\> <20>𡒊垢撘<E59EA2><E69298>?Python 餈𤤿<E9A488>/摰孵膥 \-\> <20>㰘蝸 df \-\> 餈𥪜<E9A488> sessionId<49>?
* **蝻𣇉<E89DBB><EFBFBD>瘚页<E7989A>** <20>𡒊垢敹<E59EA2>◆撠肽<E692A0> utf-8 <20>?gbk 閫<><E996AB>嚗屸俈甇<EFBCB6><E89189><EFBFBD><E5839A><EFBFBD>?
* **P1: 敹<>歲銝𦒘<E98A9D>瘣?(Keep-alive):**
* <20>滨垢瘥?30s <20><EFBFBD><E785BE><EFBFBD>頝喋<E9A09D>?
* **頞<>𧒄蝑𣇉裦嚗?* <20><EFBFBD>餈?30min <20><EFBFBD>雿頣<E99BBF><E9A0A3>𡒊垢<F0A1928A>𦠜𦆮<F0A6A09C><F0A686AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>甈⊥<E79488>雿𨀣𧒄嚗峕<E59A97>蝷算<E89DB7><EFBFBD>霂嘥歇餈<E6AD87><E9A488>嚗諹窈<E8ABB9>齿鰵<E9BDBF>㰘蝸<E3B098><E89DB8><EFBFBD><EFBFBD>?
### **2\. 頞<>漣蝵烐聢 (The Grid) \- *<2A>滨垢鈭支<E988AD>***
* **P0: <20>唳旿撅閧內 (View):**
* 通过 API 分页拉取数据(预览模式,仅取前 100-500 行)。
* **列类型推断:** 前端根据后端返回的 dtypes 渲染列头图标(数值/文本/日期)。
* <EFBFBD><EFBFBD> API <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿嚗<EFBFBD><EFBFBD><EFBFBD>芋撘𧶏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?100-500 銵䕘<EFBFBD><EFBFBD>?
* **<EFBFBD>㛖掩<EFBFBD>𧢲綫<EFBFBD><EFBFBD>** <20>滨垢<E6BBA8>寞旿<E5AF9E>𡒊垢餈𥪜<E9A488><F0A5AA9C>?dtypes 皜脫<E79A9C><E884AB>堒仍<E5A092><EFBFBD><EFBFBD><EFBFBD>?<3F><>𧋦/<2F><EFBFBD>嚗剹<E59A97>?
* **P0: <20>见𢆡蝻𤥁<E89DBB> (Manual Edit):**
* 支持双击修改单元格。
* **关键逻辑(脏数据标记):** 用户修改后,单元格右标红,数据暂存在前端 dirtyRows 队列中。
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稬靽格㺿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* **<EFBFBD>喲睸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿<EFBFBD><EFBFBD>扇嚗㚁<EFBFBD>** <20><EFBFBD>靽格㺿<E6A0BC>𠬍<EFBFBD><F0A0AC8D><EFBFBD><E8A8AB>澆𢰧<E6BE86><F0A2B0A7>滯嚗峕㺭<E5B395><EFBFBD>摮睃銁<E79D83>滨垢 dirtyRows <EFBFBD><EFBFBD>銝准<EFBFBD>?
* **P0: <20><EFBFBD><E59786><EFBFBD> (UI Locking):**
* AI 正在执行时Grid 变为 **只读 (Read-only)**,显示 Loading 遮罩。
* 敶?AI <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Grid <20>䀝蛹 **<EFBFBD>芾粉 (Read-only)**嚗峕遬蝷?Loading <EFBFBD>桃蔗<EFBFBD>?
### **3\. AI Copilot <20><EFBFBD><E7AE84><EFBFBD> (The Brain) \- *<2A>𡒊垢撽勗𢆡***
#### **3.1 鈭支<E988AD><EFBFBD><E7989A> (Chat Loop)**
1. **用户输入:** “把年龄大于60的设为老年组”。
1. **<EFBFBD><EFBFBD>颲枏<EFBFBD>嚗?* <20>𨀣<EFBFBD>撟湧<E6929F>憭找<E686AD>60<36><30>挽銝箄<E98A9D><E7AE84>僑蝏<E58391><E89D8F><EFBFBD>?
2. **<EFBFBD>滨蔭<EFBFBD>峕郊 (Auto-Sync):** **(V1.1 <20><EFBFBD>)**
* **判定:** 前端检查是否有未保存的手动修改 (dirtyRows).
* **动作:** 如果有,先静默发送 PATCH /api/data 将手动修改同步给后端 df。确保 AI 基于最新数据操作。
3. **代码生成:** 后端调用 DeepSeek,生成 Pandas 代码。
4. **预操作确认 (Action Card):**
* 展示:代码预览 \+ 摘要。
* 按钮:\[运行\] | \[取消\]。
#### **3.2 执行与回滚 (Execute & Rollback) \- (V1.1 核心)**
* **<EFBFBD><EFBFBD>嚗?* <20>滨垢璉<E59EA2><E79289>交糓<E4BAA4><EFBFBD><E8A18C><EFBFBD>摮条<E691AE><E69DA1>见𢆡靽格㺿 (dirtyRows).
* **<EFBFBD><EFBFBD>嚗?* 憒<><E68692><EFBFBD><EFBFBD><E39A81><EFBFBD><EFBFBD>暺睃<E69ABA><E79D83>?PATCH /api/data 撠<><E692A0><EFBFBD>其耨<E585B6><EFBFBD>甇亦<E79487><E4BAA6>𡒊垢 df<64><66>靽?AI <20><EFBFBD><E7AE94><EFBFBD><EFBFBD>唳㺭<E594B3><EFBFBD>雿栶<E99BBF>?
3. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* <20>𡒊垢靚<E59EA2> DeepSeek嚗𣬚<EFBFBD><EFBFBD>?Pandas <EFBFBD><EFBFBD><EFBFBD>?
4. **<EFBFBD><EFBFBD>雿𦦵霈?(Action Card):**
* 撅閧內嚗帋誨<EFBFBD><EFBFBD><EFBFBD>閫?\+ <20><EFBFBD><E48185>?
* <EFBFBD>厰僼嚗䨵[餈鞱<E9A488>\] | \[<5B>𡝗<EFBFBD>\]<5D>?
#### **3.2 <20><EFBFBD>銝𤾸<E98A9D>皛?(Execute & Rollback) \- (V1.1 <20><EFBFBD>)**
* **P0: <20>芸𢆡敹怎<E695B9> (Auto-Checkpoint):**
* 在执行 exec(code) 之前,后端必须先对当前 df 进行内存快照(或序列化备份)。
* 记录操作日志ActionID: 101, Type: AI\_CODE, Code: "..."
* <EFBFBD><EFBFBD>銵?exec(code) 銋见<EFBFBD><EFBFBD><EFBFBD>蝡臬<EFBFBD>憿餃<EFBFBD>撖孵<EFBFBD><EFBFBD>?df 餈𥡝<E9A488><F0A5A19D><EFBFBD><EFBFBD>敹怎<E695B9><EFBFBD><E59A97>摨誩<E691A8><E8AAA9><EFBFBD>隞踝<E99A9E><E8B89D>?
* 霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗鋫ctionID: 101, Type: AI\_CODE, Code: "..."<EFBFBD>?
* **P0: <20><EFBFBD><E689AF><EFBFBD>:**
* 成功:返回新的预览数据 \-\> 刷新 Grid \-\> 添加一条“操作成功”消息。
* 失败:捕获 Python Traceback \-\> AI 尝试自我修复 (Self-Correction) 一次 \-\> 若仍失败,向用户展示错误原因。
* <EFBFBD>𣂼<EFBFBD>嚗朞<EFBFBD><EFBFBD>墧鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?\-\> <EFBFBD>瑟鰵 Grid \-\> 瘛餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨀣<EFBFBD>雿𨀣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* 憭梯揖嚗𡁏<EFBFBD><EFBFBD>?Python Traceback \-\> 霈?AI 撠肽<EFBFBD><EFBFBD><EFBFBD>靽桀<EFBFBD> (Self-Correction) <EFBFBD>甈?\-\> <EFBFBD><EFBFBD>憭梯揖嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撅閧內<EFBFBD>躰秤<EFBFBD><EFBFBD><EFBFBD>?
* **P0: <20><EFBFBD><E697A5><EFBFBD> (Undo):**
* 聊天框每条成功记录下显示 \[撤销\] 按钮。
* 逻辑:调用后端 rollback(action\_id) \-\> 恢复到该操作前的快照 \-\> 刷新 Grid
* <EFBFBD>𠰴予獢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蠘扇敶蓥<EFBFBD><EFBFBD>曄內 \[<5B><EFBFBD>\] <20>厰僼<E58EB0>?
* <EFBFBD><EFBFBD>嚗朞<EFBFBD><EFBFBD><EFBFBD>蝡?rollback(action\_id) \-\> <EFBFBD><EFBFBD><EFBFBD>啗砲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>敹怎<EFBFBD> \-\> <EFBFBD>瑟鰵 Grid<EFBFBD>?
### **4\. 敹急㭘<E680A5><E3AD98>誘 (Prompt Chips)**
* **P0:** 顶部工具栏按钮(生成变量、长宽转换等),点击仅作为“快捷短语”填入输入框,不触发独立 UI 逻辑,保持架构统一。
* **P0:** 憿園<EFBFBD>撌亙<EFBFBD><EFBFBD>𤩺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鵭摰質蓮<EFBFBD><EFBFBD>嚗㚁<EFBFBD><EFBFBD>孵稬隞<EFBFBD><EFBFBD>銝算<EFBFBD>𨅯翰<EFBFBD><EFBFBD>霂凌<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䔶<EFBFBD>閫血<EFBFBD><EFBFBD><EFBFBD> UI <20><EFBFBD>嚗䔶<E59A97><E494B6><EFBFBD><EFBFBD><E6B2B2><EFBFBD><EFBFBD><E98A9D>?
### **5\. 撖澆枂 (Export)**
* **P0:** 导出 Excel
* 逻辑:后端直接将当前的 df (包含所有 AI 修改和手动修改) 写入 Excel 流并返回。
## **三、 异常处理规范 (Error Handling)**
* **P0:** 撖澆枂 Excel<EFBFBD>?
* <EFBFBD><EFBFBD>嚗𡁜<EFBFBD>蝡舐凒<EFBFBD><EFBFBD>敶枏<EFBFBD><EFBFBD>?df (<28><><EFBFBD><E98984><EFBFBD>?AI 靽格㺿<E6A0BC><EFBFBD><E5B395>其耨<E585B6>? <20><EFBFBD> Excel 瘚<>僎餈𥪜<E9A488><F0A5AA9C>?
## **銝剹<E98A9D>?撘<>虜憭<E8999C><E686AD><EFBFBD><E996AB> (Error Handling)**
| 撘<><EFBFBD>箸艶 | <20>滨垢銵函緵 | <20>𡒊垢憭<E59EA2><E686AD> |
| :---- | :---- | :---- |
| **中文乱码** | 提示“编码格式识别失败,请手动选择” | 尝试 chardet 检测,失败则报错 |
| **AI 代码报错** | Chat 气泡变红显示“AI 正在尝试修复...” | 捕获 stderr将错误反喂给 AI 重试 (Max 1次) |
| **会话过期** | 全屏遮罩“会话已过期” | 清理 Redis/内存,返回 401/404 |
| **手动修改冲突** | 提示“正在同步数据...” | 优先处理手动 Patch再执行 AI 任务 |
| **銝剜<EFBFBD>銋梁<EFBFBD>** | <EFBFBD>鞟內<EFBFBD>𦦵<EFBFBD><EFBFBD><EFBFBD>聢撘讛<EFBFBD><EFBFBD>怠仃韐伐<EFBFBD>霂瑟<EFBFBD><EFBFBD><EFBFBD>㗇𥋘<EFBFBD>?| 撠肽<E692A0> chardet 璉<>瘚页<E7989A>憭梯揖<E6A2AF>蹱𥁒<E8B9B1>?|
| **AI <EFBFBD><EFBFBD><EFBFBD>仿<EFBFBD>** | Chat 瘞娍部<EFBFBD>条滯嚗峕遬蝷算<EFBFBD>𦯷I 甇<>銁撠肽<E692A0>靽桀<E99DBD>...<2E>?| <20>閗繮 stderr嚗<72><E59A97><EFBFBD>躰秤<E8BAB0><EFBFBD>蝏?AI <20><EFBFBD> (Max 1甈? |
| **隡朞<EFBFBD><EFBFBD><EFBFBD>** | <EFBFBD><EFBFBD><EFBFBD>桃蔗<EFBFBD><EFBFBD>霂嘥歇餈<EFBFBD><EFBFBD><EFBFBD>?| 皜<><E79A9C> Redis/<2F><><EFBFBD>嚗諹<E59A97><E8ABB9>?401/404 |
| **<EFBFBD>见𢆡靽格㺿<EFBFBD><EFBFBD>** | <EFBFBD>鞟內<EFBFBD>𨀣迤<EFBFBD><EFBFBD>甇交㺭<EFBFBD>?..<2E>?| 隡睃<E99AA1><EFBFBD><E686AD><EFBFBD>见𢆡 Patch嚗<68><E59A97><EFBFBD><EFBFBD> AI 隞餃𦛚 |
## **四、 开发与测试重点 (QA Focus)**
## **<EFBFBD><EFBFBD>?撘<><E69298><EFBFBD>瘚贝<E7989A><E8B49D><EFBFBD> (QA Focus)**
1. **銝<><E98A9D><EFBFBD><EFBFBD>霂𤏪<E99C82>**
* 先手动改一个值,再让 AI 删一行,确认那个值还在不在(或者是否正确被删)。
* 先让 AI 改一列,再撤销,确认是否完全恢复。
2. **边界测试:**
* 上传空文件。
* 上传全中文列名的文件。
* AI 计算一个不存在的列。
3. **性能测试:**
* 连续快速发送 5 条指令,确保后端是**串行队列**处理,而不是并发搞乱数据。
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>冽㺿銝<EFBFBD>銝芸<EFBFBD><EFBFBD><EFBFBD>滩悟 AI <20><EFBFBD>銵䕘<E98AB5>蝖株恕<E6A0AA><E68195><EFBFBD><EFBFBD><E6BDB8><EFBFBD><E585B6><EFBFBD><E58981>𤥁<EFBFBD><F0A4A581><EFBFBD>行迤蝖株◤<E6A0AA>𩤃<EFBFBD><F0A9A483>?
* <EFBFBD><EFBFBD> AI <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>齿伃<EFBFBD><EFBFBD>嚗𣬚霈斗糓<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憭溻<EFBFBD>?
2. **颲寧<EFBFBD>瘚贝<EFBFBD>嚗?*
* 銝𠹺<EFBFBD>蝛箸<EFBFBD>隞嗚<EFBFBD>?
* 銝𠹺<EFBFBD><EFBFBD>其葉<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* 霈?AI 霈∠<EFBFBD><EFBFBD>銝芯<EFBFBD>摮睃銁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
3. **<EFBFBD><EFBFBD>瘚贝<EFBFBD>嚗?*
* 餈䂿賒敹恍<EFBFBD><EFBFBD><EFBFBD>?5 <20><EFBFBD>隞歹<E99A9E>蝖桐<E89D96><E6A190>𡒊垢<F0A1928A>?*銝脰<E98A9D><E884B0><EFBFBD>**憭<><E686AD>嚗諹<E59A97><EFBFBD><E494B6>臬僎<E887AC><EFBFBD>銋望㺭<E69C9B><EFBFBD>?
## **鈭𢛵<E988AD>?<3F><><EFBFBD>嚗𡁏㺭<F0A1818F><EFBFBD>甇?API 摰帋<E691B0> (蝞<><E89D9E>?**
## **五、 附录:数据同步 API 定义 (简版)**
* POST /api/sync: 前端 \-\> 后端。发送手动修改的 Diff。
* POST /api/sync: <20>滨垢 \-\> <20>𡒊垢<F0A1928A><E59EA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>其耨<E585B6><EFBFBD> Diff<66>?
* Payload: \[{ rowId: "P001", col: "age", value: 66 }\]
* POST /api/run: 前端 \-\> 后端。发送 AI 代码执行请求。
* POST /api/run: <EFBFBD>滨垢 \-\> <EFBFBD>𡒊垢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?AI 隞<><E99A9E><EFBFBD><EFBFBD>霂瑟<E99C82><E7919F>?
* Payload: { code: "df\['new'\] \= 1", snapshot: true }
* POST /api/undo: 前端 \-\> 后端。
* POST /api/undo: <EFBFBD>滨垢 \-\> <EFBFBD>𡒊垢<EFBFBD>?
* Payload: { step: \-1 }
\#\#\# 蝏坔<E89D8F><E59D94>穃𣪧<E7A983><EFBFBD><EFBFBD><E98A9D><EFBFBD><E4BAA5><EFBFBD>
\*\*“V1.1 的核心在于‘状态管理’。请务必保证后端 Python 内存里的 \`DataFrame\` 是唯一的‘真理来源 (Source of Truth)’。前端的所有操作(无论是手改还是 AI 改),本质上都是在向这个真理层发送指令和同步状态。”\*\*
\*\*<EFBFBD>𦛼1.1 <EFBFBD><EFBFBD>瓲敹<EFBFBD>銁鈭𢛶<EFBFBD>条𠶖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽肽<EFBFBD><EFBFBD>𡒊垢 Python <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚<EFBFBD> \`DataFrame\` <EFBFBD>臬𣈲銝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䔉皞?(Source of Truth)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝡舐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿頣<EFBFBD><EFBFBD>㰘捏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?AI <20><EFBFBD>嚗峕𧋦韐其<E99F90><E585B6>賣糓<E8B3A3><EFBFBD>餈嗘葵<E59798><EFBFBD><EFBFBD><E69285><EFBFBD><EFBFBD><EFBFBD>隞文<E99A9E><E69687>峕郊<E5B395><EFBFBD><E59786><EFBFBD><EFBFBD><EFBFBD>𩄼*\*
现在,您可以拿着这份文档,很有底气地去和开发团队开工了。它已经堵上了最容易翻车的几个漏洞。
<EFBFBD>啣銁嚗峕<EFBFBD><EFBFBD>臭誑<EFBFBD><EFBFBD>餈嗘遢<EFBFBD><EFBFBD>﹝嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘞𥪜𧑐<EFBFBD><EFBFBD><EFBFBD><EFBFBD>穃𣪧<EFBFBD><EFBFBD>撌乩<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌脩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰寞<EFBFBD>蝧餉膠<EFBFBD><EFBFBD><EFBFBD>銝芣<EFBFBD>瘣𠺶<EFBFBD>?

View File

@@ -1,105 +1,95 @@
# **PRDTool C \- 科研数据编辑器 (The Research Editor)**
# **PRD<EFBFBD>ool C \- 遘醍<EFBFBD>疲焚謐ョ郛冶セ大<EFBFBD>?(The Research Editor)**
| 文档版本 | V2.1 (扁平化 \+ 长宽转换版) |
| <EFBFBD>。」迚域悽 | V2.1 (謇∝ケウ蛹?\+ 髟ソ螳ス霓ャ謐「迚? |
| :---- | :---- |
| **产品形态** | Web 端在线编辑器Local-First 架构,类 Excel 体验) |
| **核心价值** | 提供比 Excel 更懂科研的轻量级清洗工具。通过“扁平化工具栏”和“智能侧边栏”,让医生在不写代码的情况下完成变量加工、质量治理和样本筛选。 |
| **目标用户** | 对数据质量有洁癖的科研人员、临床医生 |
| **莠ァ蜩∝ス「諤?* | Web 遶ッ蝨ィ郤ソ郛冶セ大勣<E5A4A7><E58BA3>ocal-First 譫カ譫<EFBFBD>シ檎アサ Excel 菴馴ェ鯉シ?|
| **譬ク蠢<EFBFBD>サキ蛟?* | 謠蝉セ帶ッ?Excel 譖エ諛らァ醍<EFBDA7>皮噪霓サ驥冗コァ貂<EFBDA7>エ怜キ・蜈キ縲る€夊ソ<E5A48A>€懈堰蟷ウ蛹門キ・蜈キ譬鞘€晏柱窶懈匱閭ス萓ァ霎ケ譬鞘€晢シ瑚ョゥ蛹サ逕溷惠荳榊<E88DB3>莉」遐∫噪諠<E599AA><E8ABA0>荳句ョ梧<EFBDAE>蜿倬㍼蜉<E38DBC>蟾・縲∬エィ驥乗イサ逅<EFBDBB>柱譬キ譛ャ遲幃€€?|
| **逶ョ譬<EFBFBD>畑謌キ** | 蟇ケ謨ー謐ョ雍ィ驥乗怏豢∫剿逧<EFBFBD>ァ醍<EFBFBD>比ココ蜻倥€∽クエ蠎雁現逕?|
## **一、 产品流程图 (User Flow)**
## **荳€縲?莠ァ蜩∵オ∫ィ句<EFBDA8>?(User Flow)**
数据导入(上传/流转) \-\> 性能准入与降采样 \-\> 在线清洗(工具栏全局操作 \+ 侧边栏列操作) \-\> 版本快照 \-\> 导出分析集
謨ー謐ョ蟇シ蜈・(荳贋シ<E8B48B>/豬∬スャ) \-\> 諤ァ閭ス蜃<EFBDBD><E89C83>荳朱剄驥<E58984><E9A9A5>キ \-\> 蝨ィ郤ソ貂<EFBDBF><EFBFBD>(蟾・蜈キ譬丞<E8ADAC>€謫堺ス<E5A0BA> \+ 萓ァ霎ケ譬丞<E8ADAC>謫堺ス<E5A0BA>) \-\> 迚域悽蠢ォ辣ァ \-\> 蟇シ蜃コ蛻<EFBDBA>梵髮?
## **莠後€?譬ク蠢<EFBDB8>粥閭ス髴€豎?(Functional Requirements)**
## **二、 核心功能需求 (Functional Requirements)**
### **1\. 鬘カ驛ィ謇∝ケウ蟾・蜈キ譬?(The Flat Toolbar) 窶披€?譬ク蠢<EFBDB8>コ、莠<EFBDA4>**
### **1\. 顶部扁平工具栏 (The Flat Toolbar) —— 核心交互**
*不再使用复杂的 Tab 分组,核心科研功能一字排开,所见即所得。*
*荳榊<E88DB3>菴ソ逕ィ螟肴揩逧?Tab 蛻<><EFBFBD>シ梧<EFBDBC>ク蠢<EFBDB8>ァ醍<EFBDA7>泌粥閭ス荳€蟄玲賜蠑€<E8A091>梧園隗∝叉謇€蠕励€?
#### **1.1 蜿倬㍼蜉<E38DBC>蟾・ (Variable Processing)**
* **P0: 生成新变量 (Generate Variable):**
* **功能:** 弹窗提供公式构建器。
* **支持:** 加减乘除、括号、以及 ln() (对数)、exp() 等医学常用函数。
* **场景:** 计算 BMI \= weight / (height/100)^2
* **P0: 计算时间差 (Time Delta):**
* **功能:** 选择 起始日期列 和 结束日期列,自动生成差值。
* **单位:** 支持按 天、月、年 输出。
* **场景:** 计算 年龄、住院天数、PFS/OS
* **P0: 长宽转换 (Reshape/Pivot) —— \[V2.1 新增\]:**
* **功能:** 将“一人多行(长表)”转换为“一人一行(宽表)”。
* **P0: 逕滓<EFBFBD>譁ー蜿倬<EFBFBD>?(Generate Variable):**
* **蜉溯<EFBFBD><EFBFBD>?* 蠑ケ遯玲署萓帛<E89093>蠑乗桷蟒コ蝎ィ縲?
* **謾ッ謖<EFBFBD>シ?* 蜉<>蜃丈ケ倬勁縲∵峡蜿キ縲∽サ・蜿?ln() (蟇ケ謨ー)縲xp() 遲牙現蟄ヲ蟶ク逕ィ蜃ス謨ー縲?
* **蝨コ譎ッ<EFBFBD>?* 隶。邂<EFBDA1> BMI \= weight / (height/100)^2縲?
* **P0: 隶。邂玲慮髣エ蟾?(Time Delta):**
* **蜉溯<EFBFBD><EFBFBD>?* 騾画叫 襍キ蟋区律譛溷<E8AD9B>?蜥?扈捺據譌・譛溷<E8AD9B><E6BAB7><EFBFBD>蜉ィ逕滓<E98095>蟾ョ蛟シ縲?
* **蜊穂ス搾シ?* 謾ッ謖∵<E8AC96>?螟ゥ縲∵怦縲∝ケエ 霎灘<E99C8E>縲?
* **蝨コ譎ッ<EFBFBD>?* 隶。邂<EFBDA1> 蟷エ鮴<EFBDB4>€∽ス城劼螟ゥ謨ー縲 ̄FS/OS縲?
* **P0: 髟ソ螳ス霓ャ謐「 (Reshape/Pivot) 窶披€?\[V2.1 譁ー蠅杤]:**
* **蜉溯<EFBFBD><EFBFBD>?* 蟆<>€應ク€莠コ螟夊。鯉シ磯柄陦ィ<E999A6>€晁スャ謐「荳コ窶應ク€莠コ荳€陦鯉シ亥ョス陦ィ<E999A6>€€?
* **驟咲スョ鬘ケ<E9AC98><EFBDB9>**
1. **唯一ID (Index):** 如 病人ID。
2. **区分列 (Columns):** 如 就诊时间 或 次序 (用于生成后缀)。
3. **值列 (Values):** 如 白细胞, B超 (需要铺平的数据)。
* **场景:** 处理重复测量数据,为 SPSS 重复测量方差分析做准备。
1. **蜚ッ荳€ID (Index):** 螯?逞<>ココID縲?
2. **蛹コ蛻<EFBFBD><EFBFBD>?(Columns):** 螯?蟆ア隸頑慮髣エ 謌?谺。蠎<EFBDA1> (逕ィ莠守函謌仙錘郛€)縲?
3. **蛟シ蛻<EFBFBD> (Values):** 螯?逋ス扈<EFBDBD><E68988>? B雜?(髴€<C280>銅蟷ウ逧<EFBDB3>焚謐ョ)縲?
* **蝨コ譎ッ<EFBFBD>?* 螟<>炊驥榊、肴オ矩㍼謨ー謐ョ<E8AC90>御クコ SPSS 驥榊、肴オ矩㍼譁ケ蟾ョ蛻<EFBDAE>梵蛛壼㊥螟<E38AA5>€?
#### **1.2 謨ー謐ョ豐サ逅<EFBDBB> (Data Governance)**
* **P0: 拆分数据集 (Split Dataset):**
* **功能:** 按某一列的唯一值如“中心ID”将大表拆分为多个 Excel 文件或 Sheet
* **P0: 跨列规则检查 (Cross-column Logic):**
* **功能:** 定义逻辑规则(如 IF 性别='男' AND 怀孕='是'),在网格中高亮错误行。
#### **1.3 样本筛选 (Cohort Selection)**
* **P0: <EFBFBD><EFBFBD>謨ー謐ョ髮?(Split Dataset):**
* **蜉溯<EFBFBD><EFBFBD>?* 謖画汾荳€蛻礼噪蜚ッ荳€蛟シ<E89B9F>亥ヲや€應クュ蠢オD窶晢シ会シ悟ー<E6829F>、ァ陦ィ諡<EFBDA8><E8ABA1>荳コ螟壻ク?Excel 譁<>サカ謌?Sheet縲?
* **P0: 霍ィ蛻苓ァ<EFBFBD><EFBFBD>€譟?(Cross-column Logic):**
* **蜉溯<EFBFBD><EFBFBD>?* 螳壻ケ蛾€サ霎題ァ<E9A18C><EFBDA7><EFBFBD>亥ヲ<E4BAA5> IF 諤ァ蛻ォ='逕? AND 諤€蟄?'譏?<3F>会シ悟惠鄂第<E98482>シ荳ュ鬮倅コョ髞呵ッッ陦後€?
#### **1.3 譬キ譛ャ遲幃€?(Cohort Selection)**
* **P0: 譫<>サコ蜈・謗呈<E8AC97><E59188>㊥ (Cohort Builder):**
* **功能:** 高级筛选器。支持多条件组合AND/OR)。
* **输出:** 筛选结果可“另存为新数据集”或“标记为排除”。
* **蜉溯<EFBFBD><EFBFBD>?* 鬮倡コァ遲幃€牙勣縲よ髪謖∝、壽擅莉カ扈<EFBDB6><EFBFBD><E7B28B>ND/OR<EFBFBD>€?
* **霎灘<EFBFBD><EFBFBD>?* 遲幃€臥サ捺棡蜿ッ窶懷嘗蟄倅クコ譁ー謨ー謐ョ髮<EFBDAE>€<C280>窶懈<E7AAB6><E68788>ョー荳コ謗帝勁窶昴€?
### **2\. 蜿ウ萓ァ譎コ閭ス萓ァ霎ケ譬?(Smart Insight Panel) 窶披€?莠、莠堤<E88EA0><EFBFBD>**
### **2\. 右侧智能侧边栏 (Smart Insight Panel) —— 交互灵魂**
*蠖鍋畑謌キ轤ケ蜃サ陦ィ譬シ逧<EFBDBC>汾荳€蛻玲慮<E78EB2>御セァ霎ケ譬剰<E8ADAC>蜉ィ貊大<E8B28A><E5A4A7><EFBFBD>ケ謐ョ蛻礼アサ蝙区署萓帷音螳夂噪貂<E599AA>エ怜キ・蜈キ縲?
*当用户点击表格的某一列时,侧边栏自动滑出,根据列类型提供特定的清洗工具。*
#### **2.1 騾我クュ窶懈焚蛟シ蝙銀€<C280><E6998F>亥ヲょケエ鮴<EFBDB4>€∫區扈<E58D80><E68988><EFBFBD>?*
#### **2.1 选中“数值型”列(如年龄、白细胞)**
* **P0: 统计概览:** 显示分布直方图 (Histogram)、最大值、最小值。
* **P0: 扈溯ョ。讎りァ茨シ?* 譏セ遉コ蛻<EFBDBA><EFBFBD>峩譁ケ蝗?(Histogram)縲∵怙螟ァ蛟シ縲∵怙蟆丞€シ縲?
* **P0: 蠑ょクク蛟シ譽€豬具シ<E585B7>**
* 自动标记偏离分布(如 \> 3σ的值。
* 提供按钮:处理异常(支持截断或置空)。
* 閾ェ蜉ィ譬<EFBFBD>ョー蛛冗ヲサ蛻<EFBFBD><EFBFBD>シ亥ヲ<EFBFBD> \> 3マ<33>シ臥噪蛟シ縲?
* 謠蝉セ帶潔髓ョ<EFBFBD>壼、<EFBFBD>炊蠑ょクク<EFBFBD>域髪謖∵穐譁ュ謌也スョ遨コ<EFBFBD>€?
* **P0: 逕滓<E98095><EFBFBD>アサ蜿倬㍼ (Binning):**
* **功能:** 将连续数值转为分类。
* **交互:** 设置切点(如 60生成新列\<60, \>=60)。
* **P0: 缺失值填补:** 提供 均值、中位数 填补选项。
#### **2.2 选中“文本/分类”列(如性别、诊断)**
* **P0: 统计概览:** 显示频次图 (Bar Chart)。
* **P0: 数值映射 (Recode):**
* **功能:** 将文本转为统计数值。
* **交互:** 列出所有唯一值Male, Female用户输入目标值1, 0
* **P0: 设为敏感字段 (Masking):** 一键脱敏(替换为 \*\*\*\*\*\*)。
* **P1: 智能纯化 (Smart Clean):** 若检测到 \>10、\<0.01 等含符号数值,提供一键提取数字功能。
* **蜉溯<EFBFBD><EFBFBD>?* 蟆<>ソ樒サュ謨ー蛟シ霓ャ荳コ蛻<EFBDBA>アサ縲?
* **莠、莠抵シ?* 隶セ鄂ョ蛻<EFBDAE><EFBFBD>亥ヲ<E4BAA5> 60<36>会シ檎函謌先眠蛻暦シ<E69AA6><60, \>=60<EFBFBD>€?
* **P0: 郛コ螟ア蛟シ蝪ォ陦・<EFBFBD><EFBFBD>** 謠蝉セ<E89D89><>€シ縲∽クュ菴肴焚 蝪ォ陦・騾蛾。ケ縲?
#### **2.2 騾我クュ窶懈枚譛?蛻<>アサ窶晏<E7AAB6><E6998F>亥ヲよ€ァ蛻ォ縲∬ッ頑妙<E9A091><E5A699>**
* **P0: 扈溯ョ。讎りァ茨シ?* 譏セ遉コ鬚第ャ。蝗?(Bar Chart)縲?
* **P0: 謨ー蛟シ譏<EFBDBC>蟆?(Recode):**
* **蜉溯<E89C89><E6BAAF>?* 蟆<>枚譛ャ霓ャ荳コ扈溯ョ。謨ー蛟シ縲?
* **莠、莠抵シ?* 蛻怜<E89BBB>€譛牙髪荳€蛟シ<E89B9F><EFBDBC>ale, Female<6C>会シ檎畑謌キ霎灘<E99C8E>逶ョ譬<EFBDAE>€<C280><EFBDBC>1, 0<>€?
* **P0: 隶セ荳コ謨乗─蟄玲ョオ (Masking):** 荳€髞ョ閼ア謨擾シ域崛謐「荳?\*\*\*\*\*\*<2A>€?
* **P1: 譎コ閭ス郤ッ蛹<EFBDAF> (Smart Clean):** 闍・譽€豬句芦 \>10縲―<0.01 遲牙性隨ヲ蜿キ謨ー蛟シ<E89B9F>梧署萓帑ク€髞ョ謠仙叙謨ー蟄怜粥閭ス縲?
### **3\. 雜<>コァ鄂第<E98482>シ (The Grid)**
* **P0: 视觉反馈:**
* **空值:** 背景显示淡红色。
* **脏数据:** 类型不匹配的值显示紫色文字。
* **列头图标:** 明确标识变量类型(\# 数值, A 文本, 📅 日期)。
* **P0: 基础操作:** 列宽拖拽、列排序、双击单元格编辑。
### **4\. 性能与导出 (System)**
* **P0: <EFBFBD>ァ牙渚鬥茨シ?*
* **遨コ蛟シ<EFBFBD><EFBFBD>** 閭梧勹譏セ遉コ豺。郤「濶イ縲?
* **閼乗焚謐ョ<EFBFBD><EFBFBD>** 邀サ蝙倶ク榊源驟咲噪蛟シ譏セ遉コ邏ォ濶イ譁<EFBDB2>ュ励€?
* **蛻怜、エ蝗セ譬<EFBFBD>シ?* 譏守。ョ譬<EFBDAE><EFBFBD>序驥冗アサ蝙具シ<E585B7># 謨ー蛟? A 譁<>悽, <20>套 譌・譛滂シ峨€?
* **P0: 蝓コ遑€謫堺ス懶シ?* 蛻怜ョス諡匁郷縲∝<E7B8B2>謗貞コ上€∝曙蜃サ蜊募<E89C8A>譬シ郛冶セ代€?
### **4\. 諤ァ閭ス荳主ッシ蜃?(System)**
* **P0: 諤ァ閭ス蜃<EFBDBD><E89C83> (Guardrails):**
* 行数 \< 5万:全量加载。
* 行数 \> 5万:提示降采样预览,或引导使用后端批处理。
* **P1: 自动快照 (Auto-Save):** 10 次操作自动保存到 IndexedDB防止浏览器崩溃丢失。
* **P0: 导出定义:**
* 导出 Excel/CSV
* **加分项:** 导出时附带变量类型定义Metadata)。
* 陦梧焚 \< 5<EFBFBD>シ壼<EFBFBD>驥丞刈霓ス縲?
* 陦梧焚 \> 5<EFBFBD>シ壽署遉コ髯埼㊦譬キ鬚<EFBFBD>ァ茨シ梧<EFBFBD>蠑募ッシ菴ソ逕ィ蜷守ォッ謇ケ螟<EFBFBD>炊縲?
* **P1: 閾ェ蜉ィ蠢ォ辣ァ (Auto-Save):** 豈?10 谺。謫堺ス懆<EFBFBD>蜉ィ菫晏ュ伜芦 IndexedDB<44>碁亟豁「豬剰ァ亥勣蟠ゥ貅<EFBDA9>ク「螟ア縲?
* **P0: 蟇シ蜃コ螳壻ケ会シ?*
* 蟇シ蜃コ Excel/CSV縲?
* **<EFBFBD><EFBFBD>。ケ<EFBFBD><EFBFBD>** 蟇シ蜃コ譌カ髯<EFBDB6>クヲ蜿倬㍼邀サ蝙句ョ壻ケ会シ<E4BC9A>etadata<EFBFBD>€?
## **荳峨€?逡碁擇蜴溷梛蜿り€?(UI Reference)**
## **三、 界面原型参考 (UI Reference)**
隸キ蜿り€?蟾・蜈キC\_遘醍<E98198>疲焚謐ョ郛冶セ大勣\_蜴溷梛隶セ隶。\_V2\_貍皮、コ.html縲?
* **蟶<>€<EFBDB1>?* 鬘カ驛ィ蜊戊。悟キ・蜈キ譬?\+ 荳ュ髣エ蜈ィ螻冗ス第<EFBDBD>シ \+ 蜿ウ萓ァ蜿ッ謚伜匠萓ァ霎ケ譬上€?
* **莠、莠抵シ?* 轤ケ蜃サ窶憺柄螳ス霓ャ謐「窶晄潔髓ョ蠑ケ蜃コ驟咲スョ讓。諤∵。<E288B5>€?
## **蝗帙€?鬟朱勦隗<E58BA6>∩ (Risk Mitigation)**
请参考 工具C\_科研数据编辑器\_原型设计\_V2\_演示.html。
* **布局:** 顶部单行工具栏 \+ 中间全屏网格 \+ 右侧可折叠侧边栏。
* **交互:** 点击“长宽转换”按钮弹出配置模态框。
## **四、 风险规避 (Risk Mitigation)**
1. **计算精度丢失:**
* *解法:* 必须集成 math.js 库进行所有数学运算。
2. **Pivot 导致内存溢出:**
* *问题:* 长宽转换可能会导致列数爆炸Column Explosion
* *解法:* 在执行 Pivot 前,预计算结果列数。如果列数 \> 1000阻止操作并提示用户减少“区分列”的唯一值数量。
1. **隶。邂礼イセ蠎ヲ荳「螟ア<E89E9F>?*
* *隗」豕包シ? 蠢<>。サ髮<EFBDBB><E9ABAE> math.js 蠎楢ソ幄。梧園譛画焚蟄ヲ霑千ョ励€?
2. **Pivot 蟇シ閾エ蜀<EFBDB4>ュ俶コ「蜃コ<E89C83>?*
* *髣ョ鬚假シ? 髟ソ螳ス霓ャ謐「蜿ッ閭ス莨壼ッシ閾エ蛻玲焚辷<E7849A><EFBFBD><E3819A>olumn Explosion<6F>€?
* *隗」豕包シ? 蝨ィ謇ァ陦?Pivot 蜑搾シ碁「<E7A281>ョ。邂礼サ捺棡蛻玲焚縲ょヲよ棡蛻玲<E89BBB>?\> 1000<30>碁仆豁「謫堺ス懷ケカ謠千、コ逕ィ謌キ蜃丞ー鯛€懷玄蛻<E78E84><E89BBB>窶晉噪蜚ッ荳€蛟シ謨ー驥上€

View File

@@ -2,88 +2,80 @@
| 文档版本 | V1.0 (基于原型 V2) |
| :---- | :---- |
| **产品形态** | Web 端综合仪表盘 (Dashboard) |
| **核心价值** | 作为数据清洗模块的统一入口,提供工具启动、异步任务监控、数据资产管理及跨工具流转能力。 |
| **目标用户** | 临床医生、科研助理 |
| **产å“<EFBFBD>å½¢æ€?* | Web 端综å<C2BC>ˆä»ªè¡¨ç˜ (Dashboard) |
| **核心价å€?* | 作为数æ<C2B0>®æ¸…洗模å<C2A1>—的统一入å<C2A5>£ï¼Œæ<C592><C3A6>ä¾å·¥å…·å<C2B7>¯åЍã€<C3A3>弿­¥ä»»åŠ¡çæŽ§ã€<C3A3>æ•°æ<C2B0>®èµ„产管ç<C2A1>†å<E280A0>Šè·¨å·¥å…·æµ<C3A6>转能åŠã€?|
| **目标用户** | 临床医生ã€<C3A3>ç§ç ”助ç<C2A9>?|
## **一、 产品架构图 (Product Architecture)**
## **一ã€?产å“<C3A5>æž¶æž„å?(Product Architecture)**
工作台处于系统的二级导航位置,向下连接三个具体工具,横向连接任务与数据。
工作å<EFBFBD>°å¤„于系统的二级导航ä½<EFBFBD>置,å<EFBFBD>ä¸è¿žæŽ¥ä¸‰ä¸ªå…·ä½“工具,横å<EFBFBD>连接任务与数æ<EFBFBD>®ã€?
全局导航 \-\> **工作å<C593>?(本PRD)** \-\> (工具 A, 工具 B, 工具 C)
全局导航 \-\> **工作台 (本PRD)** \-\> (工具 A, 工具 B, 工具 C)
## **二、 核心功能需求 (Functional Requirements)**
## **二�核心功能需�(Functional Requirements)**
### **1\. å…¨å±€å¯¼èˆªé†æˆ<C3A6> (Global Navigation)**
* **P0:** 必须无缝嵌入现有系统顶部导航栏。
* **位置:** 位于 知识库 与 智能数据分析 之间。
* **状态:** 点击后高亮显示“智能数据清洗”。
* **P0:** 必须无ç¼<EFBFBD>嵌入现有系统顶部导航æ <EFBFBD>ã€?
* **ä½<EFBFBD>ç½®ï¼?* ä½<C3A4>于 知识åº?ä¸?智能数æ<C2B0>®åˆ†æž<C3A6> 之间ã€?
* **状æ€<EFBFBD>:** ç¹å‡»å<C2BB>Žé«˜äº®æ˜¾ç¤ºâ€œæ™ºèƒ½æ•°æ<C2B0>®æ¸…æ´—â€<C3A2>ã€?
### **2\. 工具å<C2B7>¯åЍåŒ?(The Launcher)**
### **2\. 工具启动区 (The Launcher)**
* **P0:** **三å<E280B0>¡ç‰‡å…¥å<C2A5>£ï¼š** é†ç®å±•示三个核心工具的入å<C2A5>£å<C2A3>¡ç‰‡ã€?
* **工具 A (超级å<C2A7>ˆå¹¶å™?:** 强调“多æº<C3A6>æ•°æ<C2B0>®å<C2AE>ˆå¹¶ã€<C3A3>ID对é½<C3A9>â€<C3A2>ã€?
* **工具 B (病历结构化机器人):** 强调“AI æ<><C3A6>å<EFBFBD>ã€<C3A3>é<EFBFBD>žç»“æž„åŒè½¬ç»“æž„åŒâ€<C3A2>ã€?
* **工具 C (ç§ç ”æ•°æ<C2B0>®ç¼è¾å™?:** 强调“在线清洗ã€<C3A3>缺失值处ç<E2809E>†â€<C3A2>ã€?
* **交互ï¼?* ç¹å‡»å<C2BB>¡ç‰‡ï¼Œä»¥**å…¨å±<C3A5>模æ€<C3A6>框**æˆ?*æ°é¡µé<C2B5>?*å½¢å¼<C3A5>打开对应工具ã€?
### **3\. 任务æµ<C3A6>转中心 (Task Flow Hub) —â€?核心交互**
* **P0:** **三卡片入口:** 醒目展示三个核心工具的入口卡片。
* **工具 A (超级合并器):** 强调“多源数据合并、ID对齐”。
* **工具 B (病历结构化机器人):** 强调“AI 提取、非结构化转结构化”。
* **工具 C (科研数据编辑器):** 强调“在线清洗、缺失值处理”。
* **交互:** 点击卡片,以**全屏模态框**或**新页面**形式打开对应工具。
### **3\. 任务流转中心 (Task Flow Hub) —— 核心交互**
* **P0:** **最近任务列表:** 展示用户最近发起的 10 条任务。
* **字段定义:** 任务名称 | 所属工具(A/B/C) | 状态(处理中/完成/失败) | 进度条 | 操作。
* **P0:** **最近任务列表:** 展示用户最è¿å<E28098>èµ·çš„ 10 æ<>¡ä»»åŠ¡ã€?
* **字段定义ï¼?* 任务å<C2A1><C3A5>ç§° | 所属工å…?A/B/C) | 状æ€?处ç<E2809E>†ä¸?完æˆ<C3A6>/失败) | è¿åº¦æ<C2A6>?| æ“<C3A6>作ã€?
* **P0:** **状æ€<C3A6>å®žæ—¶æ´æ°ï¼š**
* **处理中:** 显示动态进度条(如 45%)。
* **失败:** 显示红色警告,支持查看错误日志。
* **P0:** **智能流转操作 (Smart Action)**
* **处ç<EFBFBD>†ä¸­ï¼š** 显示动æ€<C3A6>è¿åº¦æ<C2A6>¡ï¼ˆå¦ 45%)ã€?
* **失败ï¼?* 显示红色警åŠï¼Œæ”¯æŒ<C3A6>查çœé”™è¯¯æ—¥å¿—ã€?
* **P0:** **智能æµ<EFBFBD>转æ“<EFBFBD>作 (Smart Action)ï¼?*
* 基于任务类åžï¼ŒåЍæ€<C3A6>推è<C2A8><C3A8>ä¸ä¸€æ­¥æ“<C3A6>作:
* **工具 A 完成后:** 显示按钮 \[下载\] 和 \[去 AI 提取\] (跳转工具 B)。
* **工具 B 完成后:** 显示按钮 \[下载\] 和 \[去清洗\] (跳转工具 C)。
* **工具 C 完成后:** 显示按钮 \[下载\]。
* **工具 A 完æˆ<C3A6>å<EFBFBD>Žï¼š** 显示按钮 \[下载\] å’?\[åŽ?AI æ<><C3A6>å<EFBFBD>\] (跳转工具 B)ã€?
* **工具 B 完æˆ<C3A6>å<EFBFBD>Žï¼š** 显示按钮 \[下载\] å’?\[去清洗\] (跳转工具 C)ã€?
* **工具 C 完æˆ<C3A6>å<EFBFBD>Žï¼š** 显示按钮 \[下载\]ã€?
### **4\. æ•°æ<C2B0>®èµ„产åº?(Data Asset Library) —â€?V2 核心å<C692>‡çº§**
### **4\. 数据资产库 (Data Asset Library) —— V2 核心升级**
* **P0:** **Tab 分栏视图:**
* **P0:** **Tab 分æ <C3A6>视å¾ï¼?*
* **\[全部\]**
* **\[处理结果\] (Outputs):** 存放工具 A/B/C 生成的最终文件。图标使用绿色/蓝色区分。
* **\[原始上传\] (Inputs):** 存放用户直接上传的底表。图标使用灰色区分。
* **P0:** **资产卡片信息:**
* 文件名、标签(如“已清洗”、“已脱敏”)、行数、修改时间。
* **\[处ç<EFBFBD>†ç»“æžœ\] (Outputs):** 存放工具 A/B/C 生æˆ<C3A6>的最终æ‡ä»¶ã€å¾æ ‡ä½¿ç”¨ç»¿è‰?è“<C3A8>色区分ã€?
* **\[原始上传\] (Inputs):** å­˜æ”¾ç”¨æˆ·ç´æŽ¥ä¸Šä¼ çš„åº•è¡¨ã€å¾æ ‡ä½¿ç”¨ç<EFBFBD>°è‰²åŒºåˆ†ã€?
* **P0:** **资产å<EFBFBD>¡ç‰‡ä¿¡æ<EFBFBD>¯ï¼?*
* æ‡ä»¶å<EFBFBD><EFBFBD>ã€<EFBFBD>标签(å¦â€œå·²æ¸…æ´—â€<EFBFBD>ã€<EFBFBD>“已脱æ•<EFBFBD>â€<EFBFBD>)ã€<EFBFBD>行数ã€<EFBFBD>修改时间ã€?
* **P0:** **å¿«æ<C2AB>·æ“<C3A6>作 (Hover Actions):**
* 鼠标悬停在卡片上时,显示操作按钮:
* \[下载\]: 下载到本地。
* \[去处理\]: 如果是原始文件,点击跳转到工具选择页(或默认工具 A
* \[分析\]: 如果是处理结果,点击跳转到“智能数据分析”模块(未来规划)。
* **P0:** **原始文件上传入口:**
* 底部固定按钮 \[+ 上传原始文件到库\],允许用户将本地 Excel 存入云端备用。
* é¼ æ ‡æ¬å<EFBFBD>œåœ¨å<EFBFBD>¡ç‰‡ä¸Šæ—¶ï¼Œæ˜¾ç¤ºæ“<EFBFBD>作按é®ï¼?
* \[下载\]: 下载到本地�
* \[去处ç<EFBFBD>†\]: 如果是原始文件,点击跳转到工具选择页(或默认工å…?A)ã€?
* \[分æž<EFBFBD>\]: 妿žœæ˜¯å¤„ç<E2809E>†ç»“果,ç¹å‡»è·³è½¬åˆ°â€œæ™ºèƒ½æ•°æ<C2B0>®åˆ†æž<C3A6>â€<C3A2>模å<C2A1>—(未æ<C2AA>¥è§„åˆï¼‰ã€?
* **P0:** **åŽŸå§æ‡ä»¶ä¸Šä¼ å…¥å<EFBFBD>£ï¼?*
* 底部固定按钮 \[+ 上传原始文件到库\],å…<C3A5>许用户将本地 Excel 存入云端备用ã€?
## **三ã€?界é<C592>¢åŽŸåžå<E280B9>è€?(UI Reference)**
## **三、 界面原型参考 (UI Reference)**
请严格参考 智能数据清洗工作台\_原型演示\_V2.html。
* **布局:** 顶部为 Launcher下方分为左右两栏左 2/3 为任务,右 1/3 为资产)。
* **视觉风格:**
请严格å<EFBFBD>è€?智能数æ<C2B0>®æ¸…洗工作å<C593>°\_åŽŸåžæ¼”示\_V2.htmlã€?
* **布局ï¼?* 顶部ä¸?Launcherï¼Œä¸æ¹åˆ†ä¸ºå·¦å<C2A6>³ä¸¤æ <C3A6>(å·?2/3 为任务,å<C592>?1/3 为资产)ã€?
* **视觉风格�*
* 工具 A:è“<C3A8>色系 (Blue)
* 工具 B:紫色系 (Purple)
* 工具 C翠绿色系 (Emerald)
* 状态色:处理中(蓝)、成功(绿)、失败(红)、警告(橙)。
## **四、 数据交互逻辑 (Data Logic)**
* 工具 C:翠绿色�(Emerald)
* 状æ€<EFBFBD>色:处ç<EFBFBD>†ä¸­(è“?ã€<C3A3>æˆ<C3A6>åŠ?ç»?ã€<C3A3>失è´?çº?ã€<C3A3>è­¦å?æ©?ã€?
## **å››ã€?æ•°æ<C2B0>®äº¤äºé€»è¾ (Data Logic)**
1. **任务轮询 (Polling):**
* 工作台加载时,调用 GET /api/tasks/recent
* 若列表中有状态为 processing 的任务,每隔 5 秒轮询一次状态更新,直到完成。
2. **跨工具流转 (Handoff):**
* 当用户点击 \[去 AI 提取\] 时:
* 前端获取该任务的 resultFileId
* 跳转路由至 /tools/b?sourceFileId={resultFileId}
* 工具 B 初始化时,自动加载该文件,无需用户重新上传。
* 工作å<EFBFBD>°åŠ è½½æ—¶ï¼Œè°ƒç”?GET /api/tasks/recentã€?
* è¥åˆ—表中有状æ€<EFBFBD>为 processing 的任务,æ¯<C3A6>éš” 5 ç§è½®è¯¢ä¸€æ¬¡çжæ€<C3A6>æ´æ°ï¼Œç´åˆ°å®Œæˆ<C3A6>ã€?
2. **跨工具æµ<EFBFBD>è½?(Handoff):**
* 当用户点å‡?\[åŽ?AI æ<><C3A6>å<EFBFBD>\] 时:
* å‰<EFBFBD>端获å<EFBFBD>该任务的 resultFileIdã€?
* 跳转路由�/tools/b?sourceFileId={resultFileId}�
* 工具 B åˆ<C3A5>å§åŒæ—¶ï¼Œè‡ªåŠ¨åŠ è½½è¯¥æ‡ä»¶ï¼Œæ— éœ€ç”¨æˆ·é‡<C3A9>æ°ä¸Šä¼ ã€?
3. **资产管ç<C2A1>†:**
* 工具 A/B/C 产生的最终结果,需自动注册到 DataAsset 表中,并标记 type='output'
* 用户手动上传的文件,注册为 type='input'
* 工具 A/B/C 产生的最终结果,需自动注册�DataAsset 表中,并标记 type='output'�
* 用户手动上传的文件,注册�type='input'�
## **五�埋点与统计需�*
## **五、 埋点与统计需求**
* **UV/PV:** 工作台访问量。
* **CTR:** 三个工具卡片的点击率(判断哪个工具最常用)。
* **流转率:** 用户点击“去 AI 提取”等流转按钮的比例(判断工作流是否顺畅)。
* **UV/PV:** 工作å<C593>°è®¿é—®é‡<C3A9>ã€?
* **CTR:** 三个工具å<C2B7>¡ç‰‡çš„ç¹å‡»çŽ‡ï¼ˆåˆ¤æ­å“ªä¸ªå·¥å…·æœ€å¸¸ç”¨ï¼‰ã€?
* **æµ<C3A6>转çŽ?** 用户点击“去 AI æ<><C3A6>å<EFBFBD>â€<C3A2>ç­‰æµ<C3A6>转按é®çš„æ¯”ä¾ï¼ˆåˆ¤æ­å·¥ä½œæµ<C3A6>是å<C2AF>¦é¡ºç•…)ã€

View File

@@ -1,37 +1,34 @@
# **总体 PRD医疗科研智能数据清洗平台 (The Data Cleaning Platform)**
# **諤サ菴<EFBFBD> PRD<52>壼現逍礼ァ醍<EFBDA7>疲匱閭ス謨ー謐ョ貂<EFBDAE>エ怜ケウ蜿?(The Data Cleaning Platform)**
| 文档版本 | V1.0 (基于工具箱架构) |
| <EFBFBD>。」迚域悽 | V1.0 (蝓コ莠主キ・蜈キ邂ア譫カ譫? |
| :---- | :---- |
| **产品形态** | 企业级 Web SaaS 平台 |
| **核心价值** | 为临床医生提供 **“一站式”** 的数据治理能力,解决多源异构数据合并难、病历文本提取难、统计前清洗繁琐的三大痛点。 |
| **技术架构** | Node.js \+ React \+ Python/R (统计服务) \+ LLM |
| **莠ァ蜩∝ス「諤?* | 莨∽ク夂コ?Web SaaS 蟷ウ蜿ー |
| **譬ク蠢<EFBFBD>サキ蛟?* | 荳コ荳エ蠎雁現逕滓署萓?**窶應ク€遶吝シ鞘€?* 逧<>焚謐ョ豐サ逅<EFBDBB><E98085>蜉幢シ瑚ァ」蜀ウ螟壽コ仙シよ桷謨ー謐ョ蜷亥ケカ髫セ縲∫羅蜴<E7BE85>枚譛ャ謠仙叙髫セ縲∫サ溯ョ。蜑肴ク<E882B4>エ礼ケ∫瑞逧<E7919E>ク牙、ァ逞帷せ縲?|
| **謚€譛ッ譫カ譫?* | Node.js \+ React \+ Python/R (扈溯ョ。譛榊苅) \+ LLM |
## **一、 项目背景与目标 (Background & Objectives)**
## **荳€縲?鬘ケ逶ョ閭梧勹荳守岼譬?(Background & Objectives)**
### **1.1 譬ク蠢<EFBDB8>李轤ケ**
临床科研数据的准备过程Data Preparation通常占据整个科研周期的 80% 时间。医生面临三大阻碍:
1. **乱 (Messy):** HIS 导出的数据分散在多个 Excel门诊、住院、检验ID 对不上,时间线混乱。
2. **杂 (Unstructured):** 大量关键信息(如病理诊断、出院小结)存在于文本段落中,无法直接统计。
3. **错 (Dirty):** 缺失值、异常值、录入错误频发不符合统计软件SPSS/SAS的格式要求。
荳エ蠎顔ァ醍<EFBFBD>疲焚謐ョ逧<EFBFBD>㊥螟<EFBFBD>ソ<EFBFBD>ィ具シ<EFBFBD>ata Preparation<6F>€壼クク蜊<EFBDB8>謐ョ謨エ荳ェ遘醍<E98198>泌捉譛溽<E8AD9B>?80% 譌カ髣エ縲ょ現逕滄擇荳エ荳牙、ァ髦サ遒搾シ<E690BE>
1. **荵?(Messy):** HIS 蟇シ蜃コ逧<EFBDBA>焚謐ョ蛻<EFBDAE>淵蝨ィ螟壻クェ Excel<65>磯葎隸翫€∽ス城劼縲∵」€鬪鯉シ会シ栗D 蟇ケ荳堺ク奇シ梧慮髣エ郤ソ豺キ荵ア縲?
2. **譚?(Unstructured):** 螟ァ驥丞<E9A9A5>髞ョ菫。諱ッ<E8ABB1>亥ヲら羅逅<E7BE85>ッ頑妙縲∝<E7B8B2>髯「蟆冗サ難シ牙ュ伜惠莠取枚譛ャ谿オ關ス荳ュ<E88DB3>梧裏豕慕峩謗・扈溯ョ。縲?
3. **髞?(Dirty):** 郛コ螟ア蛟シ縲∝シょクク蛟シ縲∝ス募<EFBDBD>髞呵ッッ鬚大書<E5A4A7>御ク咲ャヲ蜷育サ溯ョ。霓ッ莉カ<E88E89><EFBDB6>PSS/SAS<41>臥噪譬シ蠑剰ヲ∵アゅ€?
### **1.2 莠ァ蜩∫岼譬<E5B2BC>**
构建一个 **“流程化、智能化、低门槛”** 的数据清洗平台:
<EFBFBD>サコ荳€荳?**窶懈オ∫ィ句喧縲∵匱閭ス蛹悶€∽ス朱葎讒帚€?* 逧<>焚謐ョ貂<EFBDAE>エ怜ケウ蜿ー<E89CBF><EFBDB0>
* **模块化 (Modular):** 将复杂流程拆解为三个独立工具,降低认知负荷。
* **可信赖 (Trustworthy):** 通过“双模型验证”和“全过程追溯”,解决对 AI 的信任危机。
* **高性能 (Performant):** 支持 10万+ 行数据的流式处理与实时编辑。
* **讓。蝮怜<EFBFBD>?(Modular):** <EFBFBD>、肴揩豬∫ィ区究隗」荳コ荳我クェ迢ャ遶句キ・蜈キ<EFBFBD>碁剄菴手ョ、遏・雍溯差縲?
* **蜿ッ菫。襍?(Trustworthy):** 騾夊ソ<EFBFBD>€懷曙讓。蝙矩ェ瑚ッ≫€晏柱窶懷<EFBFBD><EFBFBD>ィ玖ソス貅ッ窶晢シ瑚ァ」蜀ウ蟇?AI 逧<>ソ。莉サ蜊ア譛コ縲?
* **鬮俶€ァ閭ス (Performant):** 謾ッ謖<EFBFBD> 10荳? 陦梧焚謐ョ逧<EFBDAE>オ∝シ丞、<E4B89E>炊荳主ョ樊慮郛冶セ代€?
## **莠後€?莠ァ蜩∵€サ菴捺楔譫<E6A594> (Product Architecture)**
## **二、 产品总体架构 (Product Architecture)**
平台采用 **“1 \+ 3”** 架构模式:**1 个统一工作台 \+ 3 个垂直效能工具**。
### **2.1 架构图**
蟷ウ蜿ー驥<EFBFBD>畑 **窶? \+ 3窶?* 譫カ譫<EFBDB6>ィ。蠑擾シ?*1 荳ェ扈滉ク€蟾・菴懷<E88FB4>?\+ 3 荳ェ蝙ら峩謨郁<E8ACA8>蟾・蜈?*縲?
### **2.1 譫カ譫<EFBDB6><E8ADAB>?*
graph TD
User\[临床医生/科研人员\] \--\> Portal\[智能数据清洗工作台 (Portal)\]
User\[荳エ蠎雁現逕<EFBFBD>/遘醍<E98198>比ココ蜻禄] \--\> Portal\[譎コ閭ス謨ー謐ョ貂<EFBDAE>エ怜キ・菴懷<E88FB4>?(Portal)\]
subgraph The\_Toolkit \[謨郁<E8ACA8>蟾・蜈キ邂ア\]
Portal \--\> ToolA\[蟾・蜈キ A: 雜<>コァ蜷亥ケカ蝎ィ\]
@@ -40,8 +37,8 @@ graph TD
end
subgraph Data\_Flow \[謨ー謐ョ豬∬スャ\]
ToolA \--合并后数据--\> ToolB
ToolB \--结构化数据--\> ToolC
ToolA \--蜷亥ケカ蜷取焚謐?-\> ToolB
ToolB \--扈捺桷蛹匁焚謐?-\> ToolC
ToolC \--貂<>エ怜錘謨ー謐ョ髮<EFBDAE>--\> Analysis\[譎コ閭ス謨ー謐ョ蛻<EFBDAE>梵讓。蝮予]
end
@@ -55,58 +52,52 @@ graph TD
ToolB \-.-\> Engine2
ToolC \-.-\> Engine3
### **2.2 模块定义与边界**
### **2.2 讓。蝮怜ョ壻ケ我ク手セケ逡?*
| 讓。蝮怜錐遘ー | 蟇ケ蠎泌惻譎ッ | 譬ク蠢<EFBDB8>ササ蜉。 | 蜈ウ髞ョ莠ァ蜃コ | 隸ヲ扈<EFBDA6>枚譯」 |
| :---- | :---- | :---- | :---- | :---- |
| **工作台 (Portal)** | 全局入口 | 任务监控、资产管理、跨工具流转 | 统一仪表盘 | [PRD\_数据清洗工作台](https://www.google.com/search?q=PRD_%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97%E5%B7%A5%E4%BD%9C%E5%8F%B0.md) |
| **蟾・菴懷<EFBFBD>?(Portal)** | 蜈ィ螻€蜈・蜿」 | 莉サ蜉。逶第而縲∬オ<E288AC>コァ邂。逅<EFBDA1>€∬キィ蟾・蜈キ豬∬スャ | 扈滉ク€莉ェ陦ィ逶?| [PRD\_謨ー謐ョ貂<EFBDAE>エ怜キ・菴懷床](https://www.google.com/search?q=PRD_%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97%E5%B7%A5%E4%BD%9C%E5%8F%B0.md) |
| **蟾・蜈キ A (Merger)** | 螟壽コ仙粋蟷カ | ID 蟇ケ鮨舌€∬ョソ隗<EFBDBF>渕蜃<E6B895>粋蟷カ縲∵慮髣エ遯玲ク<E78EB2><EFBFBD> | 螳ス陦ィ (Wide Table) | [PRD\_蟾・蜈キA\_雜<5F>コァ蜷亥ケカ蝎ィ\_V2](https://www.google.com/search?q=PRD_%E5%B7%A5%E5%85%B7A_%E8%B6%85%E7%BA%A7%E5%90%88%E5%B9%B6%E5%99%A8_V2.md) |
| **工具 B (AI)** | 文本提取 | OCR、实体提取、隐私脱敏、交叉验证 | 结构化字段 | [PRD\_工具B\_病历结构化机器人\_V2](https://www.google.com/search?q=PRD_%E5%B7%A5%E5%85%B7B_%E7%97%85%E5%8E%86%E7%BB%93%E6%9E%84%E5%8C%96%E6%9C%BA%E5%99%A8%E4%BA%BA_V2.md) |
| **工具 C (Editor)** | 深度清洗 | 缺失填补、异常处理、变量计算、分箱 | 最终分析集 | [PRD\_工具C\_科研数据编辑器\_V2](https://www.google.com/search?q=PRD_%E5%B7%A5%E5%85%B7C_%E7%A7%91%E7%A0%94%E6%95%B0%E6%8D%AE%E7%BC%96%E8%BE%91%E5%99%A8_V2.md) |
| **蟾・蜈キ B (AI)** | <EFBFBD>悽謠仙叙 | OCR縲∝ョ樔ス捺署蜿悶€<E682B6>嚼遘∬┳謨上€∽コ、蜿蛾ェ瑚ッ?| 扈捺桷蛹門ュ玲ョ?| [PRD\_蟾・蜈キB\_逞<5F>紙扈捺桷蛹匁惻蝎ィ莠コ\_V2](https://www.google.com/search?q=PRD_%E5%B7%A5%E5%85%B7B_%E7%97%85%E5%8E%86%E7%BB%93%E6%9E%84%E5%8C%96%E6%9C%BA%E5%99%A8%E4%BA%BA_V2.md) |
| **蟾・蜈キ C (Editor)** | 豺ア蠎ヲ貂<EFBFBD><EFBFBD> | 郛コ螟ア蝪ォ陦・縲∝シょクク螟<EFBDB8>炊縲∝序驥剰ョ。邂励€<C280>邂?| 譛€扈亥<E68988>譫宣寔 | [PRD\_蟾・蜈キC\_遘醍<E98198>疲焚謐ョ郛冶セ大勣\_V2](https://www.google.com/search?q=PRD_%E5%B7%A5%E5%85%B7C_%E7%A7%91%E7%A0%94%E6%95%B0%E6%8D%AE%E7%BC%96%E8%BE%91%E5%99%A8_V2.md) |
## **三、 核心业务流程 (Core Workflows)**
## **荳峨€?譬ク蠢<EFBDB8>ク壼苅豬∫ィ<E288AB> (Core Workflows)**
### **3.1 典型全链路场景 (The "Happy Path")**
### **3.1 蜈ク蝙句<EFBFBD>體セ霍ッ蝨コ譎?(The "Happy Path")**
场景:医生收集了 100 份患者的住院 Excel 和病理报告 PDF需要进行生存分析。
1. **合并 (Step 1):** **工作台** 启动 **工具 A**。上传“住院记录”为主表,“检验单”为辅表。系统基于“入院日期 ±7天”的时间窗将检验数据挂载到住院记录上。
2. **提取 (Step 2):** 合并完成后,点击“流转到工具 B”。**工具 B** 自动加载数据。医生选择“肺癌病理模版”双模型DeepSeek & Qwen并发提取“肿瘤大小”和“淋巴结转移”。医生在全景网格中裁决不一致的数据。
3. **清洗 (Step 3):** 提取完成后,点击“流转到工具 C”。**工具 C** 打开编辑器。医生通过侧边栏发现“肿瘤大小”有缺失值,一键用均值填补;并新增计算列 BMI。
4. **分析 (Step 4):** 数据清洗完毕,保存为“分析集\_V1”。一键发送至系统的“智能数据分析”模块进行 Kaplan-Meier 生存分析。
## **四、 全局非功能需求 (Non-Functional Requirements)**
蝨コ譎ッ<EFBFBD>壼現逕滓噺髮<EFBFBD><EFBFBD> 100 莉ス謔」閠<EFBDA3>噪菴城劼 Excel 蜥檎羅逅<E7BE85>冠蜻?PDF<44>碁怙隕∬ソ幄。檎函蟄伜<E89F84>譫舌€?
1. **蜷亥ケカ (Step 1):** 蝨?**蟾・菴懷<E88FB4>?* 蜷ッ蜉ィ **蟾・蜈キ A**縲ゆク贋シ<E8B48B>窶應ス城劼隶ー蠖補€昜クコ荳サ陦ィ<E999A6>€懈」€鬪悟黒窶昜クコ霎<EFBDBA>。ィ縲らウサ扈溷渕莠寂€<C280>髯「譌・譛?ツア7螟ゥ窶晉噪譌カ髣エ遯暦シ悟ー<E6829F>€鬪梧焚謐ョ謖りスス蛻ー菴城劼隶ー蠖穂ク翫€?
2. **謠仙叙 (Step 2):** 蜷亥ケカ螳梧<EFBFBD>蜷趣シ檎せ蜃サ窶懈オ∬スャ蛻ー蟾・蜈キ B窶昴€?*蟾・蜈キ B** 閾ェ蜉ィ蜉<EFBDA8>霓ス謨ー謐ョ縲ょ現逕滄€画叫窶懆ぜ逋檎羅逅<E7BE85>ィ。迚遺€晢シ悟曙讓。蝙具シ<E585B7>eepSeek & Qwen<65>牙ケカ蜿第署蜿問€懆ち逖、螟ァ蟆鞘€晏柱窶懈キ句キエ扈楢スャ遘サ窶昴€ょ現逕溷惠蜈ィ譎ッ鄂第<E98482>シ荳ュ陬∝<E999AC>荳堺ク€閾エ逧<EFBDB4>焚謐ョ縲?
3. **<EFBFBD><EFBFBD> (Step 3):** 謠仙叙螳梧<EFBFBD>蜷趣シ檎せ蜃サ窶懈オ∬スャ蛻ー蟾・蜈キ C窶昴€?*蟾・蜈キ C** 謇灘シ€郛冶セ大勣縲ょ現逕滄€夊ソ<E5A48A>セァ霎ケ譬丞書邇ー窶懆ち逖、螟ァ蟆鞘€晄怏郛コ螟ア蛟シ<E89B9F>御ク€髞ョ逕ィ蝮<EFBDA8>€シ蝪ォ陦・<E999A6>帛ケカ譁ー蠅櫁ョ。邂怜<E98282> BMI縲?
4. **<EFBFBD> (Step 4):** 謨ー謐ョ貂<EFBFBD>エ怜ョ梧ッ包シ御ソ晏ュ倅クコ窶懷<EFBFBD>譫宣寔\_V1窶昴€ゆク€髞ョ蜿鷹€<C280>邉サ扈溽噪窶懈匱閭ス謨ー謐ョ蛻<EFBDAE>梵窶晄ィ。蝮苓ソ幄。?Kaplan-Meier 逕溷ュ伜<EFBDAD>譫舌€?
## **蝗帙€?蜈ィ螻€髱槫粥閭ス髴€豎?(Non-Functional Requirements)**
### **4.1 逕ィ謌キ菴馴ェ檎ュ也払 (UX Strategy)**
* **去可视化 (De-visualization):** 对于工具 A 和 B不展示全量 Excel 网格,采用 **“向导配置 \-\> 黑盒处理 \-\> 黄金预览”** 的模式,降低浏览器渲染压力,聚焦结果。
* **反馈补偿 (Feedback Loop):** 既然看不见过程,必须增强结果反馈。每个工具必须提供详细的 **“数据质量报告”**(如:丢弃行数、冲突率、空值率)。
* **本地优先 (Local-First):** 工具 C 采用 IndexedDB 存储,确保编辑操作(筛选、替换)无网络延迟。
### **4.2 数据安全与隐私 (Security & Privacy)**
* **PII 脱敏:** 所有发送给 LLM (工具 B) 的数据,**必须**在后端先经过正则脱敏(姓名、身份证、手机号)。
* **数据隔离:** 不同用户的数据严格物理隔离S3 路径 / DB Row Level Security
* **蜴サ蜿ッ隗<EFBFBD> (De-visualization):** 蟇ケ莠主キ・蜈キ A 蜥?B<>御ク榊ア慕、コ蜈ィ驥<EFBDA8> Excel 鄂第<E98482><EFBFBD>碁㊦逕?**窶懷髄蟇シ驟咲ス?\-\> 鮟醍將螟<E5B087>炊 \-\> 鮟<>≡鬚<E289A1>ァ遺€?* 逧<>ィ。蠑擾シ碁剄菴取オ剰ァ亥勣貂イ譟灘視蜉幢シ瑚★辟ヲ扈捺棡縲?
* **蜿埼ヲ郁。・蛛ソ (Feedback Loop):** 譌「辟カ逵倶ク崎ァ∬ソ<EFBFBD>ィ具シ悟ソ<EFBFBD>。サ蠅槫シコ扈捺棡蜿埼ヲ医€よッ丈クェ蟾・蜈キ蠢<EFBFBD>。サ謠蝉セ幄ッヲ扈<EFBFBD>噪 **窶懈焚謐ョ雍ィ驥乗冠蜻岩€?*<2A>亥ヲゑシ壻ク「蠑<EFBDA2>。梧焚縲∝<E7B8B2>遯∫紫縲∫ゥコ蛟シ邇<EFBDBC>シ峨€?
* **譛ャ蝨ー莨伜<EFBFBD> (Local-First):** 蟾・蜈キ C 驥<> IndexedDB 蟄伜お<EFBFBD>檎。ョ菫晉シ冶セ第桃菴懶シ育ュ幃€€∵崛謐「<EFBFBD>画裏鄂醍サ懷サカ霑溘€?
### **4.2 謨ー謐ョ螳牙<E89EB3>荳朱嚼遘?(Security & Privacy)**
* **PII 閼ア謨<EFBDB1>:** 謇€譛牙書騾∫サ<E288AB> LLM (蟾・蜈キ B) 逧<>焚謐ョ<E8AC90><EFBDAE>**蠢<>。サ**蝨ィ蜷守ォッ蜈育サ剰ソ<E589B0>ュ」蛻呵┳謨擾シ亥ァ灘錐縲∬コォ莉ス隸√€∵焔譛コ蜿キ<E89CBF>€?
* **謨ー謐ョ髫皮ヲサ:** 荳榊酔逕ィ謌キ逧<EFBDB7>焚謐ョ荳・譬シ迚ゥ逅<EFBDA9>囈遖サ<E98196><EFBDBB>3 霍ッ蠕<EFBDAF> / DB Row Level Security<74>€?
### **4.3 諤ァ閭ス謖<EFBDBD><E8AC96><EFBFBD> (Performance SLAs)**
* **文件支持:** 单个文件支持最大 **50MB****50万行**
* **<EFBFBD>サカ謾ッ謖<EFBFBD>:** 蜊穂クェ譁<EFBDAA>サカ謾ッ謖∵怙螟?**50MB** 謌?**50荳<30><EFBFBD>**縲?
* **蜩榊コ秘€溷コヲ:**
* 工具 A 合并10万行\< 60秒。
* 工具 B 提取(并发):取决于 Token 量,需提供进度条。
* 工具 C 编辑响应:\< 100ms
## **五、 数据标准与流转协议 (Data Standards)**
* 蟾・蜈キ A 蜷亥ケカ<EFBDB9>?0荳<30>。鯉シ会シ喀< 60遘偵€?
* 蟾・蜈キ B 謠仙叙<E4BB99>亥ケカ蜿托シ会シ壼叙蜀ウ莠<EFBDB3> Token 驥擾シ碁怙謠蝉セ幄ソ帛コヲ譚。縲?
* 蟾・蜈キ C 郛冶セ大桃蠎費シ喀< 100ms縲?
## **莠斐€?謨ー謐ョ譬<EFBDAE>㊥荳取オ∬スャ蜊剰ョ?(Data Standards)**
荳コ莠<EFBFBD>ソ晁ッ∽ク我クェ蟾・蜈キ閭ス鬘コ逡<EFBFBD>刻菴懶シ悟ソ<EFBFBD>。サ螳壻ケ臥サ滉ク€<EFBFBD>焚謐ョ莠、謐「譬<EFBFBD><EFBFBD><EFBFBD>
1. **文件格式:** 内部流转统一使用 **CSV (UTF-8 with BOM)** **JSON Lines**
2. **日期格式:** 所有工具产出的日期列,强制标准化为 YYYY-MM-DD
3. **空值表示:** 统一使用 null 或空字符串 "",严禁使用 "NA", "-" 等文本混入数值列。
4. **流转凭证:** 跨工具跳转时,通过 URL 参数传递 assetId (资产ID),接收方通过 API 获取文件流,无需前端透传大文件。
1. **<EFBFBD>サカ譬シ蠑<EFBFBD>:**<>Κ豬∬スャ扈滉ク€菴ソ逕ィ **CSV (UTF-8 with BOM)** 謌?**JSON Lines**縲?
2. **譌・譛滓<EFBFBD>シ蠑<EFBFBD>:**€譛牙キ・蜈キ莠ァ蜃コ逧<EFBDBA>律譛溷<E8AD9B><E6BAB7>悟シコ蛻カ譬<EFBDB6>㊥蛹紋クコ YYYY-MM-DD縲?
3. **遨コ蛟シ陦ィ遉?** 扈滉ク€菴ソ逕ィ null 謌也ゥコ蟄礼ャヲ荳?""<22>御ク・遖∽スソ逕?"NA", "-" 遲画枚譛ャ豺キ蜈・謨ー蛟シ蛻励€?
4. **豬∬スャ蜃ュ隸<EFBFBD>:** 霍ィ蟾・蜈キ霍ウ霓ャ譌カ<E8AD8C>€夊ソ<E5A48A> URL 蜿よ焚莨<E7849A>騾?assetId (襍<>コァID)<29>梧磁謾カ譁ケ騾夊ソ<E5A48A> API 闔キ蜿匁枚莉カ豬<EFBDB6>シ梧裏髴€蜑咲ォッ騾丈シ<E4B888>螟ァ譁<EFBDA7>サカ縲?
## **蜈ュ縲?髯<>ス包シ夂沿譛ャ隗<EFBDAC><E99A97>?(Roadmap)**
## **六、 附录:版本规划 (Roadmap)**
* **Phase 1 (MVP):** 上线工作台 \+ 工具 A (基础合并) \+ 工具 C (基础编辑)。工具 B 暂不上线。
* **Phase 2 (Intelligence):** 上线 工具 B (单模型提取)。工具 C 增加侧边栏统计。
* **Phase 3 (Trust):** 工具 B 升级为双模型交叉验证。工具 A 升级为时间窗合并。
* **Phase 1 (MVP):** 荳顔コソ蟾・菴懷<E88FB4>?\+ 蟾・蜈キ A (蝓コ遑€蜷亥ケカ) \+ 蟾・蜈キ C (蝓コ遑€郛冶セ<E586B6>)縲ょキ・蜈?B 證ゆク堺ク顔コソ縲?
* **Phase 2 (Intelligence):** 荳顔コソ 蟾・蜈キ B (蜊墓ィ。蝙区署蜿?縲ょキ・蜈?C 蠅槫刈萓ァ霎ケ譬冗サ溯ョ。縲?
* **Phase 3 (Trust):** 蟾・蜈キ B 蜊<>コァ荳コ蜿梧ィ。蝙倶コ、蜿蛾ェ瑚ッ√€ょキ・蜈?A 蜊<>コァ荳コ譌カ髣エ遯怜粋蟷カ縲