feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
This commit is contained in:
@@ -1,138 +1,138 @@
|
||||
# Tool B - 病历结构化机器人 技术债务清单
|
||||
|
||||
> **鍒涘缓鏃ユ湡锛?* 2025-12-03
|
||||
> **鐘舵€侊細** 寰呭<E5AFB0>鐞?
|
||||
> **创建日期:** 2025-12-03
|
||||
> **状态:** 待处理
|
||||
> **优先级:** P1=高优先级, P2=中优先级, P3=低优先级
|
||||
|
||||
---
|
||||
|
||||
## 📋 技术债务列表
|
||||
|
||||
### **[P1] #1 - Excel瀵煎嚭涓庡墠绔<EFBFBD>樉绀虹粨鏋滀笉涓€鑷?*
|
||||
### **[P1] #1 - Excel导出与前端显示结果不一致**
|
||||
|
||||
**闂<EFBFBD><EFBFBD>鎻忚堪锛?*
|
||||
- 鐢ㄦ埛鍦ㄦ<EFBFBD>楠?浜ゅ弶楠岃瘉椤甸潰鐪嬪埌鐨勬彁鍙栫粨鏋滐紝涓庡<E6B693>鍑虹殑Excel鏂囦欢鍐呭<E98D90>涓嶄竴鑷?
|
||||
- 鍒楅『搴忔贩涔憋紝閮ㄥ垎瀛楁<EFBFBD>缂哄け鎴栨暟鎹<EFBFBD>敊浣?
|
||||
**问题描述:**
|
||||
- 用户在步骤4交叉验证页面看到的提取结果,与导出的Excel文件内容不一致
|
||||
- 列顺序混乱,部分字段缺失或数据错位
|
||||
|
||||
**閲嶇幇姝ラ<EFBFBD>锛?*
|
||||
**重现步骤:**
|
||||
1. 完成双模型提取并进入步骤4
|
||||
2. 点击"导出当前结果"或在步骤5点击"下载结果Excel"
|
||||
3. 打开Excel,对比前端显示的结果
|
||||
|
||||
**鏍规湰鍘熷洜锛?*
|
||||
**根本原因:**
|
||||
- JavaScript对象展开`...extractedData`时顺序不固定
|
||||
- 鏈<EFBFBD>寜妯℃澘瀹氫箟鐨勫瓧娈甸『搴忔瀯寤篍xcel鍒?
|
||||
- 未按模板定义的字段顺序构建Excel列
|
||||
|
||||
**当前状态:**
|
||||
- 鉁?宸查儴鍒嗕慨澶嶏細鎸塼argetFields椤哄簭瀵煎嚭
|
||||
- 鉂?浠嶉渶楠岃瘉锛氬<E9949B>娆″<E5A886>鍑虹粨鏋滄槸鍚︾ǔ瀹氫竴鑷?
|
||||
- ✅ 已部分修复:按targetFields顺序导出
|
||||
- ❌ 仍需验证:多次导出结果是否稳定一致
|
||||
|
||||
**瑙e喅鏂规<EFBFBD>锛?*
|
||||
1. 涓ユ牸鎸夌収`task.targetFields`瀹氫箟鐨勫瓧娈甸『搴忓<EFBFBD>鍑?
|
||||
**解决方案:**
|
||||
1. 严格按照`task.targetFields`定义的字段顺序导出
|
||||
2. 添加表头样式(加粗、冻结首行)
|
||||
3. 娣诲姞鏁版嵁楠岃瘉锛堢‘淇濇墍鏈夊瓧娈甸兘瀛樺湪锛?
|
||||
3. 添加数据验证(确保所有字段都存在)
|
||||
4. 添加导出测试用例
|
||||
|
||||
**棰勮<EFBFBD>宸ユ椂锛?* 2灏忔椂
|
||||
**褰卞搷鑼冨洿锛?* 鍚庣<E98D9A> ExtractionController.exportResults鏂规硶
|
||||
**预计工时:** 2小时
|
||||
**影响范围:** 后端 ExtractionController.exportResults方法
|
||||
|
||||
---
|
||||
|
||||
### **[P2] #2 - 姝ラ<EFBFBD>3杩涘害鏉℃樉绀轰笉澶熺粏鑵?*
|
||||
### **[P2] #2 - 步骤3进度条显示不够细腻**
|
||||
|
||||
**闂<EFBFBD><EFBFBD>鎻忚堪锛?*
|
||||
- 褰撳墠杩涘害鏉$洿鎺ヤ粠0%璺冲埌100%锛岀己灏戜腑闂磋繃绋?
|
||||
**问题描述:**
|
||||
- 当前进度条直接从0%跳到100%,缺少中间过程
|
||||
- 用户无法感知大模型正在处理第几条记录
|
||||
- 娌℃湁瀹炴椂鍙嶉<EFBFBD>褰撳墠澶勭悊鐘舵€侊紙濡?姝e湪澶勭悊绗?/9鏉?锛?
|
||||
- 没有实时反馈当前处理状态(如"正在处理第3/9条")
|
||||
|
||||
**鏈熸湜鏁堟灉锛?*
|
||||
**期望效果:**
|
||||
```
|
||||
提取进度: 33% (3/9条已完成)
|
||||
|
||||
鏃ュ織杈撳嚭锛?
|
||||
日志输出:
|
||||
[13:43:12] 正在创建提取任务...
|
||||
[13:43:12] 任务创建成功 (ID: xxx)
|
||||
[13:43:12] 初始化双模型引擎 (DeepSeek-V3 & Qwen-Max)...
|
||||
[13:43:13] [1/9] 姝e湪鎻愬彇: 銆愬彸鑲轰笅鍙躲€戞蹈娑︽€ц吅鐧?..
|
||||
[13:43:18] [1/9] 鉁?鎻愬彇瀹屾垚 (DeepSeek: 549 tokens, Qwen: 627 tokens)
|
||||
[13:43:19] [2/9] 姝e湪鎻愬彇: 銆愬彸鑲轰笂鍙躲€戞蹈娑︽€ц吅鐧?..
|
||||
[13:43:24] [2/9] 鉁?鎻愬彇瀹屾垚 (DeepSeek: 486 tokens, Qwen: 551 tokens)
|
||||
[13:43:13] [1/9] 正在提取: 【右肺下叶】浸润性腺癌...
|
||||
[13:43:18] [1/9] ✅ 提取完成 (DeepSeek: 549 tokens, Qwen: 627 tokens)
|
||||
[13:43:19] [2/9] 正在提取: 【右肺上叶】浸润性腺癌...
|
||||
[13:43:24] [2/9] ✅ 提取完成 (DeepSeek: 486 tokens, Qwen: 551 tokens)
|
||||
...
|
||||
[13:43:30] PII 脱敏完成
|
||||
[13:43:30] 鉁?鎵€鏈夎<E98F88>褰曟彁鍙栧畬鎴愶紒
|
||||
[13:43:30] ✅ 所有记录提取完成!
|
||||
```
|
||||
|
||||
**瑙e喅鏂规<EFBFBD>锛?*
|
||||
**解决方案:**
|
||||
|
||||
**鍚庣<EFBFBD>鏀瑰姩锛?*
|
||||
**后端改动:**
|
||||
1. 在`DualModelExtractionService.batchExtract`的for循环中,每处理完一条记录就更新进度
|
||||
2. 添加`currentItem`字段到Task表(可选,用于实时显示当前处理的记录)
|
||||
3. 或者使用Redis存储实时进度信息(更云原生)
|
||||
|
||||
**鍓嶇<EFBFBD>鏀瑰姩锛?*
|
||||
**前端改动:**
|
||||
1. 轮询API时,解析`processedCount`和`totalCount`
|
||||
2. 动态生成日志:`[${processedCount}/${totalCount}] 正在提取...`
|
||||
3. 杩涘害鏉″钩婊戣繃娓★紙CSS transition锛?
|
||||
3. 进度条平滑过渡(CSS transition)
|
||||
|
||||
**棰勮<EFBFBD>宸ユ椂锛?* 3灏忔椂
|
||||
**褰卞搷鑼冨洿锛?*
|
||||
**预计工时:** 3小时
|
||||
**影响范围:**
|
||||
- 后端:DualModelExtractionService.batchExtract
|
||||
- 前端:Step3Processing.tsx
|
||||
|
||||
---
|
||||
|
||||
### **[P1] #3 - Excel鏂囦欢棰勫<EFBFBD>鐞嗕笌鑴忔暟鎹<EFBFBD>竻娲?*
|
||||
### **[P1] #3 - Excel文件预处理与脏数据清洗**
|
||||
|
||||
**闂<EFBFBD><EFBFBD>鎻忚堪锛?*
|
||||
鍖荤枟绉戠爺鍦烘櫙涓嬶紝Excel鏂囦欢璐ㄩ噺鍙傚樊涓嶉綈锛屽瓨鍦ㄥぇ閲忚剰鏁版嵁瀵艰嚧瑙f瀽澶辫触鎴栫粨鏋滈敊璇<EFBFBD>€?
|
||||
**问题描述:**
|
||||
医疗科研场景下,Excel文件质量参差不齐,存在大量脏数据导致解析失败或结果错误。
|
||||
|
||||
#### **瀛愰棶棰?锛氳〃澶寸壒娈婂瓧绗?*
|
||||
- **鐜拌薄锛?* 鍒楀悕鍖呭惈鎹㈣<E98EB9>绗<EFBFBD>\n`銆佺┖鏍笺€佸埗琛ㄧ<E7909B>绛夛紝瀵艰嚧鍒楀悕鍖归厤澶辫触
|
||||
- **绀轰緥锛?* `"鐥呬汉ID\n(Patient ID)"` 鈫?鍓嶇<E98D93>涓嬫媺妗嗘樉绀哄紓甯?
|
||||
- **褰卞搷锛?* 鐢ㄦ埛鏃犳硶閫夋嫨姝g‘鐨勫垪
|
||||
#### **子问题1:表头特殊字符**
|
||||
- **现象:** 列名包含换行符`\n`、空格、制表符等,导致列名匹配失败
|
||||
- **示例:** `"病人ID\n(Patient ID)"` → 前端下拉框显示异常
|
||||
- **影响:** 用户无法选择正确的列
|
||||
|
||||
#### **瀛愰棶棰?锛氬叕寮?(Formulas)**
|
||||
- **鐜拌薄锛?* 鍗曞厓鏍煎寘鍚<E5AF98>叕寮廯=A1+B1`锛寈lsx搴撹<E690B4>鍙栨椂杩斿洖鍏<E6B496>紡鏂囨湰鑰岄潪璁$畻缁撴灉
|
||||
- **绀轰緥锛?*
|
||||
#### **子问题2:公式 (Formulas)**
|
||||
- **现象:** 单元格包含公式`=A1+B1`,xlsx库读取时返回公式文本而非计算结果
|
||||
- **示例:**
|
||||
- 原始值:`=SUM(A1:A10)`
|
||||
- 璇诲彇缁撴灉锛氬瓧绗︿覆`"=SUM(A1:A10)"`锛堣€岄潪鏁板瓧锛?
|
||||
- 澶栭儴寮曠敤锛歚=[澶栭儴鏂囦欢]Sheet1!A1` 鈫?`#REF!`
|
||||
- **褰卞搷锛?* 鏁板€煎瀷瀛楁<E7809B>锛堝<E9949B>骞撮緞銆佽<E98A86>绯栧€硷級鍙樻垚鏂囨湰锛屾棤娉曠粺璁?
|
||||
- 读取结果:字符串`"=SUM(A1:A10)"`(而非数字)
|
||||
- 外部引用:`=[外部文件]Sheet1!A1` → `#REF!`
|
||||
- **影响:** 数值型字段(如年龄、血糖值)变成文本,无法统计
|
||||
|
||||
#### **瀛愰棶棰?锛氬悎骞跺崟鍏冩牸 (Merged Cells)**
|
||||
- **鐜拌薄锛?* 鍖荤敓涔犳儻鍚堝苟"浣忛櫌鍙?鍒楋紝瀵瑰簲澶氳<E6BEB6>鍖栭獙璁板綍
|
||||
- **绀轰緥锛?*
|
||||
#### **子问题3:合并单元格 (Merged Cells)**
|
||||
- **现象:** 医生习惯合并"住院号"列,对应多行化验记录
|
||||
- **示例:**
|
||||
```
|
||||
浣忛櫌鍙? 妫€鏌ラ」鐩? 缁撴灉
|
||||
H001 琛€甯歌<EFBFBD> 姝e父 鈫?鍙<>湁杩欒<E69DA9>鏈変綇闄㈠彿
|
||||
(鍚堝苟) 鑲濆姛鑳? 寮傚父 鈫?杩欒<E69DA9>浣忛櫌鍙蜂负null
|
||||
(鍚堝苟) 鑲惧姛鑳? 姝e父 鈫?杩欒<E69DA9>浣忛櫌鍙蜂负null
|
||||
住院号 检查项目 结果
|
||||
H001 血常规 正常 ← 只有这行有住院号
|
||||
(合并) 肝功能 异常 ← 这行住院号为null
|
||||
(合并) 肾功能 正常 ← 这行住院号为null
|
||||
```
|
||||
- **褰卞搷锛?* 鍚庣画琛岀殑鍏宠仈瀛楁<E7809B>涓㈠け锛屾棤娉曡拷婧<E68BB7>埌鎮h€?
|
||||
- **影响:** 后续行的关联字段丢失,无法追溯到患者
|
||||
|
||||
#### **瀛愰棶棰?锛氭棩鏈熷湴鐙?(Date Parsing Hell)**
|
||||
- **鐜拌薄锛?* Excel鏃ユ湡瀛樺偍涓烘暟瀛楋紙Serial Number锛夛紝鎴栧<EFBFBD>绉嶆枃鏈<EFBFBD>牸寮?
|
||||
- **绀轰緥锛?*
|
||||
- `44927` 鈫?搴旇<E690B4>瑙f瀽涓?`2023-01-01`
|
||||
#### **子问题4:日期地狱 (Date Parsing Hell)**
|
||||
- **现象:** Excel日期存储为数字(Serial Number),或多种文本格式
|
||||
- **示例:**
|
||||
- `44927` → 应该解析为 `2023-01-01`
|
||||
- `2023.1.1`(文本)
|
||||
- `2023骞?鏈?鏃<>锛堜腑鏂囷級
|
||||
- `2023年1月1日`(中文)
|
||||
- `Jan 1, 2023`(英文)
|
||||
- **褰卞搷锛?* 鏃ユ湡瀛楁<E7809B>鏃犳硶鎺掑簭銆佺瓫閫夈€佺粺璁?
|
||||
- **影响:** 日期字段无法排序、筛选、统计
|
||||
|
||||
#### **瀛愰棶棰?锛氫笉鍙<E7AC89><E98D99>瀛楃<E7809B>涓庤剰鏂囨湰 (Ghost Characters)**
|
||||
- **鐜拌薄锛?* 鐪嬭捣鏉ユ槸"鐢?锛屽疄闄呭寘鍚<E5AF98>笉鍙<E7AC89><E98D99>瀛楃<E7809B>
|
||||
- **绀轰緥锛?*
|
||||
- `"鐢?"` (灏鹃儴绌烘牸)
|
||||
#### **子问题5:不可见字符与脏文本 (Ghost Characters)**
|
||||
- **现象:** 看起来是"男",实际包含不可见字符
|
||||
- **示例:**
|
||||
- `"男 "` (尾部空格)
|
||||
- `"男\u200b"` (零宽空格 Zero-Width Space)
|
||||
- `"男\ufeff"` (BOM字符)
|
||||
- **褰卞搷锛?* 鏉′欢鍒ゆ柇澶辫触锛歚if (sex === '鐢?)` 鈫?false
|
||||
- **鍖诲<E98D96>鍦烘櫙鐗逛緥锛?*
|
||||
- 鍖栭獙鍗曞<E98D97>鍒剁矘璐存椂甯﹀叆瀵屾枃鏈<E69E83>牸寮?
|
||||
- **影响:** 条件判断失败:`if (sex === '男')` → false
|
||||
- **医学场景特例:**
|
||||
- 化验单复制粘贴时带入富文本格式
|
||||
- 不同医院HIS系统导出编码不统一
|
||||
|
||||
**瑙e喅鏂规<EFBFBD>锛?*
|
||||
**解决方案:**
|
||||
|
||||
#### **鏋舵瀯璁捐<EFBFBD>锛氱嫭绔嬬殑Excel棰勫<EFBFBD>鐞嗘湇鍔?*
|
||||
#### **架构设计:独立的Excel预处理服务**
|
||||
```typescript
|
||||
// backend/src/modules/dc/services/ExcelPreprocessor.ts
|
||||
export class ExcelPreprocessor {
|
||||
@@ -143,24 +143,24 @@ export class ExcelPreprocessor {
|
||||
return headers.map(h => h
|
||||
.replace(/[\n\r\t]/g, ' ') // 移除换行、制表符
|
||||
.trim() // 去除首尾空格
|
||||
.replace(/\s+/g, ' ') // 澶氫釜绌烘牸鍚堝苟涓轰竴涓?
|
||||
.replace(/\s+/g, ' ') // 多个空格合并为一个
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 澶勭悊鍏<EFBFBD>紡鍗曞厓鏍?
|
||||
* 处理公式单元格
|
||||
*/
|
||||
processFormulas(worksheet: xlsx.WorkSheet): void {
|
||||
// 浣跨敤 xlsx 鐨?{ cellFormula: false } 閫夐」
|
||||
// 鎴栨墜鍔ㄩ亶鍘嗗崟鍏冩牸锛岃<EFBFBD>绠楀叕寮忕粨鏋?
|
||||
// 使用 xlsx 的 { cellFormula: false } 选项
|
||||
// 或手动遍历单元格,计算公式结果
|
||||
}
|
||||
|
||||
/**
|
||||
* 灞曞紑鍚堝苟鍗曞厓鏍?
|
||||
* 展开合并单元格
|
||||
*/
|
||||
unflattenMergedCells(worksheet: xlsx.WorkSheet): void {
|
||||
// 1. 鎵惧埌鎵€鏈夊悎骞跺尯鍩?worksheet['!merges']
|
||||
// 2. 灏嗕富鍗曞厓鏍肩殑鍊煎~鍏呭埌鎵€鏈夊瓙鍗曞厓鏍?
|
||||
// 1. 找到所有合并区域 worksheet['!merges']
|
||||
// 2. 将主单元格的值填充到所有子单元格
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -168,7 +168,7 @@ export class ExcelPreprocessor {
|
||||
*/
|
||||
normalizeDates(value: any): string | null {
|
||||
if (typeof value === 'number') {
|
||||
// Excel Serial Number 鈫?ISO Date
|
||||
// Excel Serial Number → ISO Date
|
||||
return this.excelSerialToDate(value);
|
||||
}
|
||||
if (typeof value === 'string') {
|
||||
@@ -181,84 +181,84 @@ export class ExcelPreprocessor {
|
||||
}
|
||||
|
||||
/**
|
||||
* 娓呴櫎涓嶅彲瑙佸瓧绗?
|
||||
* 清除不可见字符
|
||||
*/
|
||||
cleanInvisibleChars(text: string): string {
|
||||
return text
|
||||
.replace(/\u200b/g, '') // 零宽空格
|
||||
.replace(/\ufeff/g, '') // BOM
|
||||
.replace(/\u00a0/g, ' ') // 涓嶉棿鏂<EFBFBD>┖鏍?鈫?鏅<>€氱┖鏍?
|
||||
.replace(/\u00a0/g, ' ') // 不间断空格 → 普通空格
|
||||
.trim();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### **浣跨敤浣嶇疆锛?*
|
||||
1. **uploadFile API** - 涓婁紶鍚庣珛鍗抽<EFBFBD>澶勭悊锛岃繑鍥炴竻娲楀悗鐨勫垪鍚?
|
||||
2. **healthCheck API** - 浣跨敤娓呮礂鍚庣殑鏁版嵁杩涜<EFBFBD>妫€鏌?
|
||||
#### **使用位置:**
|
||||
1. **uploadFile API** - 上传后立即预处理,返回清洗后的列名
|
||||
2. **healthCheck API** - 使用清洗后的数据进行检查
|
||||
3. **createTask API** - 使用清洗后的数据创建items
|
||||
|
||||
**棰勮<EFBFBD>宸ユ椂锛?* 16灏忔椂锛堝<E9949B>鏉傚害楂橈紝闇€瑕佸ぇ閲忔祴璇曪級
|
||||
**褰卞搷鑼冨洿锛?*
|
||||
- 鏂板<E98F82>锛歚ExcelPreprocessor.ts` (~400琛?
|
||||
**预计工时:** 16小时(复杂度高,需要大量测试)
|
||||
**影响范围:**
|
||||
- 新增:`ExcelPreprocessor.ts` (~400行)
|
||||
- 修改:`ExtractionController.ts` 的文件处理逻辑
|
||||
- 测试:覆盖各种脏数据场景
|
||||
|
||||
**渚濊禆锛?*
|
||||
- xlsx搴撶殑楂樼骇鍔熻兘锛坈ellFormula銆?merges绛夛級
|
||||
**依赖:**
|
||||
- xlsx库的高级功能(cellFormula、!merges等)
|
||||
- dayjs或date-fns(日期解析)
|
||||
|
||||
---
|
||||
|
||||
### **[P2] #4 - 鏀<EFBFBD>寔鐢ㄦ埛鑷<EFBFBD>畾涔夋彁鍙栨ā鏉?*
|
||||
### **[P2] #4 - 支持用户自定义提取模板**
|
||||
|
||||
**闂<EFBFBD><EFBFBD>鎻忚堪锛?*
|
||||
褰撳墠绯荤粺鍙<EFBFBD>敮鎸?涓<><E6B693>璁炬ā鏉匡紙鑲虹檶鐥呯悊銆佺硸灏跨梾鍏ラ櫌銆侀珮琛€鍘嬮棬璇婏級锛屾棤娉曟弧瓒崇敤鎴风殑澶氭牱鍖栭渶姹傘€?
|
||||
**问题描述:**
|
||||
当前系统只支持3个预设模板(肺癌病理、糖尿病入院、高血压门诊),无法满足用户的多样化需求。
|
||||
|
||||
**需求场景:**
|
||||
1. 绉戠爺浜哄憳鐮旂┒缃曡<E7BC83>鐥咃紙濡傦細绯荤粺鎬х孩鏂戠嫾鐤<E5ABBE>€侀噸鐥囪倢鏃犲姏锛?
|
||||
2. 闇€瑕佹彁鍙栫殑瀛楁<E7809B>涓庨<E6B693>璁炬ā鏉夸笉鍚?
|
||||
3. 姣忎釜鐮旂┒椤圭洰鐨勬暟鎹<E69A9F><E98EB9>鑼冨彲鑳戒笉鍚?
|
||||
1. 科研人员研究罕见病(如:系统性红斑狼疮、重症肌无力)
|
||||
2. 需要提取的字段与预设模板不同
|
||||
3. 每个研究项目的数据规范可能不同
|
||||
|
||||
**鏈熸湜鍔熻兘锛?*
|
||||
**期望功能:**
|
||||
|
||||
#### **1. 鍓嶇<EFBFBD>锛氳嚜瀹氫箟妯℃澘缂栬緫鍣?*
|
||||
#### **1. 前端:自定义模板编辑器**
|
||||
```
|
||||
步骤2.1:选择模板来源
|
||||
- [ ] 使用系统预设模板
|
||||
- [x] 鍒涘缓鑷<EFBFBD>畾涔夋ā鏉?
|
||||
- [x] 创建自定义模板
|
||||
|
||||
姝ラ<EFBFBD>2.2锛氬畾涔夋ā鏉夸俊鎭?
|
||||
步骤2.2:定义模板信息
|
||||
- 模板名称:[我的肺癌研究模板]
|
||||
- 疾病类型:[自定义:系统性红斑狼疮]
|
||||
- 报告类型:[自定义:实验室检查]
|
||||
|
||||
步骤2.3:定义提取字段(可视化编辑)
|
||||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹?瀛楁<E7809B>1: [鎶楁牳鎶椾綋婊村害] 鈹?
|
||||
鈹?鎻忚堪: [濡?1:320, 1:640] 鈹?
|
||||
鈹?瀹藉害: [w-32] 鈻? 鈹?
|
||||
鈹?[ 鍒犻櫎 ] 鈹?
|
||||
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
鈹?瀛楁<E7809B>2: [琛ヤ綋C3] 鈹?
|
||||
鈹?鎻忚堪: [鍗曚綅g/L] 鈹?
|
||||
鈹?[ 鍒犻櫎 ] 鈹?
|
||||
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
|
||||
┌─────────────────────────────────────┐
|
||||
│ 字段1: [抗核抗体滴度] │
|
||||
│ 描述: [如 1:320, 1:640] │
|
||||
│ 宽度: [w-32] ▼ │
|
||||
│ [ 删除 ] │
|
||||
├─────────────────────────────────────┤
|
||||
│ 字段2: [补体C3] │
|
||||
│ 描述: [单位g/L] │
|
||||
│ [ 删除 ] │
|
||||
└─────────────────────────────────────┘
|
||||
[+ 添加字段]
|
||||
|
||||
姝ラ<EFBFBD>2.4锛欰I鐢熸垚Prompt锛堣嚜鍔ㄥ寲锛?
|
||||
[ 馃<EFBFBD> 璁〢I甯<49>垜鐢熸垚鎻愮ず璇?]
|
||||
步骤2.4:AI生成Prompt(自动化)
|
||||
[ 🤖 让AI帮我生成提示词 ]
|
||||
|
||||
鍚庡彴鑷<EFBFBD>姩鐢熸垚锛?
|
||||
后台自动生成:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
浣犳槸涓€鍚嶉<EFBFBD>婀垮厤鐤<EFBFBD><EFBFBD>涓撳<EFBFBD>銆傝<EFBFBD>浠庝互涓嬬郴缁熸€х孩鏂戠嫾鐤?
|
||||
鎮h€呯殑瀹為獙瀹ゆ<EFBFBD>鏌ユ姤鍛婁腑鎻愬彇鍏抽敭淇℃伅銆?
|
||||
你是一名风湿免疫科专家。请从以下系统性红斑狼疮
|
||||
患者的实验室检查报告中提取关键信息。
|
||||
|
||||
鎻愬彇瀛楁<EFBFBD>锛堝繀椤昏繑鍥炰互涓嬫墍鏈夊瓧娈碉級锛?
|
||||
提取字段(必须返回以下所有字段):
|
||||
- 抗核抗体滴度:如 1:320, 1:640
|
||||
- 补体C3:单位g/L
|
||||
|
||||
**杈撳嚭鏍煎紡锛氫弗鏍肩殑JSON鏍煎紡锛?*
|
||||
**输出格式:严格的JSON格式:**
|
||||
```json
|
||||
{
|
||||
"抗核抗体滴度": "...",
|
||||
@@ -273,7 +273,7 @@ export class ExcelPreprocessor {
|
||||
#### **2. 后端:模板管理API**
|
||||
```typescript
|
||||
// 新增API端点
|
||||
POST /api/v1/dc/tool-b/templates // 鍒涘缓鑷<EFBFBD>畾涔夋ā鏉?
|
||||
POST /api/v1/dc/tool-b/templates // 创建自定义模板
|
||||
PUT /api/v1/dc/tool-b/templates/:id // 更新模板
|
||||
DELETE /api/v1/dc/tool-b/templates/:id // 删除模板
|
||||
GET /api/v1/dc/tool-b/templates/:id // 获取模板详情
|
||||
@@ -282,10 +282,10 @@ GET /api/v1/dc/tool-b/templates/:id // 获取模板详情
|
||||
POST /api/v1/dc/tool-b/templates/generate-prompt
|
||||
Request:
|
||||
{
|
||||
"diseaseType": "绯荤粺鎬х孩鏂戠嫾鐤?,
|
||||
"reportType": "瀹為獙瀹ゆ<EFBFBD>鏌?,
|
||||
"diseaseType": "系统性红斑狼疮",
|
||||
"reportType": "实验室检查",
|
||||
"fields": [
|
||||
{ "name": "鎶楁牳鎶椾綋婊村害", "desc": "濡?1:320, 1:640" },
|
||||
{ "name": "抗核抗体滴度", "desc": "如 1:320, 1:640" },
|
||||
{ "name": "补体C3", "desc": "单位g/L" }
|
||||
]
|
||||
}
|
||||
@@ -299,27 +299,27 @@ Response:
|
||||
|
||||
#### **3. AI Prompt生成逻辑**
|
||||
```typescript
|
||||
// 浣跨敤鍏働rompt锛圡eta-Prompt锛?
|
||||
// 使用元Prompt(Meta-Prompt)
|
||||
async generatePrompt(
|
||||
diseaseType: string,
|
||||
reportType: string,
|
||||
fields: { name: string; desc: string }[]
|
||||
): Promise<string> {
|
||||
const metaPrompt = `
|
||||
浣犳槸涓€鍚嶅尰瀛<EFBFBD>I Prompt宸ョ▼甯堛€傝<E282AC>涓虹梾鍘嗙粨鏋勫寲鎻愬彇浠诲姟鐢熸垚涓撲笟鐨勬彁绀鸿瘝銆?
|
||||
你是一名医学AI Prompt工程师。请为病历结构化提取任务生成专业的提示词。
|
||||
|
||||
浠诲姟鑳屾櫙锛?
|
||||
- 鐤剧梾绫诲瀷锛?{diseaseType}
|
||||
- 鎶ュ憡绫诲瀷锛?{reportType}
|
||||
任务背景:
|
||||
- 疾病类型:${diseaseType}
|
||||
- 报告类型:${reportType}
|
||||
|
||||
鎻愬彇瀛楁<EFBFBD>锛?
|
||||
${fields.map((f, i) => `${i + 1}. ${f.name}锛?{f.desc}`).join('\n')}
|
||||
提取字段:
|
||||
${fields.map((f, i) => `${i + 1}. ${f.name}:${f.desc}`).join('\n')}
|
||||
|
||||
瑕佹眰锛?
|
||||
要求:
|
||||
1. 模拟该疾病领域的专家角色
|
||||
2. 娓呮櫚璇存槑姣忎釜瀛楁<E7809B>鐨勬彁鍙栬<E98D99>鍒?
|
||||
2. 清晰说明每个字段的提取规则
|
||||
3. 要求输出严格的JSON格式
|
||||
4. 澶勭悊"鏈<>彁鍙?鐨勬儏鍐?
|
||||
4. 处理"未提及"的情况
|
||||
|
||||
请生成完整的Prompt。`;
|
||||
|
||||
@@ -334,104 +334,103 @@ ${fields.map((f, i) => `${i + 1}. ${f.name}
|
||||
```
|
||||
|
||||
**技术亮点:**
|
||||
- 鉁?**Prompt鍗充唬鐮侊紙Prompt-as-Code锛?*锛氭ā鏉垮彲鐗堟湰鎺у埗銆丄/B娴嬭瘯
|
||||
- 鉁?**AI鐢熸垚AI鐨凱rompt锛圡eta-Prompt锛?*锛氶檷浣庣敤鎴烽棬妲?
|
||||
- 鉁?**妯℃澘甯傚満锛堟湭鏉ワ級**锛氱敤鎴峰彲鍒嗕韩銆佷笅杞戒紭璐ㄦā鏉?
|
||||
- ✨ **Prompt即代码(Prompt-as-Code)**:模板可版本控制、A/B测试
|
||||
- ✨ **AI生成AI的Prompt(Meta-Prompt)**:降低用户门槛
|
||||
- ✨ **模板市场(未来)**:用户可分享、下载优质模板
|
||||
|
||||
**棰勮<EFBFBD>宸ユ椂锛?* 12灏忔椂
|
||||
**褰卞搷鑼冨洿锛?*
|
||||
- 鏂板<E98F82>锛歚CustomTemplateService.ts` (~300琛?
|
||||
- 鏂板<E98F82>锛歚PromptGeneratorService.ts` (~200琛?
|
||||
**预计工时:** 12小时
|
||||
**影响范围:**
|
||||
- 新增:`CustomTemplateService.ts` (~300行)
|
||||
- 新增:`PromptGeneratorService.ts` (~200行)
|
||||
- 前端:Step2Schema.tsx 新增自定义模板编辑UI
|
||||
- 数据库:DCTemplate表已支持,无需改动
|
||||
|
||||
---
|
||||
|
||||
## 馃搳 浼樺厛绾ц瘎浼?
|
||||
## 📊 优先级评估
|
||||
|
||||
| 鍊哄姟ID | 闂<EFBFBD><EFBFBD> | 浼樺厛绾?| 宸ユ椂 | 褰卞搷鐢ㄦ埛 | 鎶€鏈<E282AC><E98F88>闄?|
|
||||
| 债务ID | 问题 | 优先级 | 工时 | 影响用户 | 技术风险 |
|
||||
|--------|------|--------|------|----------|----------|
|
||||
| #1 | Excel瀵煎嚭涓嶄竴鑷?| P1 | 2h | 楂橈紙鏍稿績鍔熻兘锛?| 浣?|
|
||||
| #2 | 杩涘害鏉℃樉绀轰紭鍖?| P2 | 3h | 涓<EFBFBD>紙浣撻獙浼樺寲锛?| 浣?|
|
||||
| #3 | Excel棰勫<EFBFBD>鐞?| P1 | 16h | 楂橈紙鏁版嵁璐ㄩ噺锛?| 涓?|
|
||||
| #4 | 鑷<EFBFBD>畾涔夋ā鏉?| P2 | 12h | 涓<EFBFBD>紙鎵╁睍鎬э級 | 涓?|
|
||||
| #1 | Excel导出不一致 | P1 | 2h | 高(核心功能) | 低 |
|
||||
| #2 | 进度条显示优化 | P2 | 3h | 中(体验优化) | 低 |
|
||||
| #3 | Excel预处理 | P1 | 16h | 高(数据质量) | 中 |
|
||||
| #4 | 自定义模板 | P2 | 12h | 中(扩展性) | 中 |
|
||||
|
||||
**鎬昏<EFBFBD>锛?* 33灏忔椂锛堢害4涓<34>伐浣滄棩锛?
|
||||
**总计:** 33小时(约4个工作日)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 建议处理顺序
|
||||
|
||||
### **Sprint 1锛氭牳蹇冨姛鑳戒慨澶嶏紙P1浼樺厛锛?*
|
||||
1. 鉁?#1 - Excel瀵煎嚭淇<EFBFBD><EFBFBD>锛?灏忔椂锛夆啋 **绔嬪嵆澶勭悊**
|
||||
2. #3 - Excel棰勫<EFBFBD>鐞嗭紙16灏忔椂锛夆啋 **鍒嗛樁娈靛疄鐜?*
|
||||
- Phase 1锛氳〃澶存竻娲楋紙2灏忔椂锛?
|
||||
- Phase 2锛氬悎骞跺崟鍏冩牸灞曞紑锛?灏忔椂锛?
|
||||
- Phase 3锛氬叕寮忓<EFBFBD>鐞嗭紙3灏忔椂锛?
|
||||
- Phase 4锛氭棩鏈熺粺涓€锛?灏忔椂锛?
|
||||
- Phase 5锛氫笉鍙<EFBFBD><EFBFBD>瀛楃<EFBFBD>娓呯悊锛?灏忔椂锛?
|
||||
- Phase 6锛氶泦鎴愭祴璇曪紙2灏忔椂锛?
|
||||
### **Sprint 1:核心功能修复(P1优先)**
|
||||
1. ✅ #1 - Excel导出修复(2小时)→ **立即处理**
|
||||
2. #3 - Excel预处理(16小时)→ **分阶段实现**
|
||||
- Phase 1:表头清洗(2小时)
|
||||
- Phase 2:合并单元格展开(4小时)
|
||||
- Phase 3:公式处理(3小时)
|
||||
- Phase 4:日期统一(3小时)
|
||||
- Phase 5:不可见字符清理(2小时)
|
||||
- Phase 6:集成测试(2小时)
|
||||
|
||||
### **Sprint 2锛氫綋楠屼紭鍖栵紙P2锛?*
|
||||
1. #2 - 杩涘害鏉′紭鍖栵紙3灏忔椂锛?
|
||||
2. #4 - 鑷<EFBFBD>畾涔夋ā鏉匡紙12灏忔椂锛?
|
||||
- Phase 1锛氬悗绔<EFBFBD>ā鏉緾RUD锛?灏忔椂锛?
|
||||
- Phase 2锛歅rompt鑷<EFBFBD>姩鐢熸垚锛?灏忔椂锛?
|
||||
- Phase 3锛氬墠绔<EFBFBD>ā鏉跨紪杈戝櫒锛?灏忔椂锛?
|
||||
### **Sprint 2:体验优化(P2)**
|
||||
1. #2 - 进度条优化(3小时)
|
||||
2. #4 - 自定义模板(12小时)
|
||||
- Phase 1:后端模板CRUD(4小时)
|
||||
- Phase 2:Prompt自动生成(4小时)
|
||||
- Phase 3:前端模板编辑器(4小时)
|
||||
|
||||
---
|
||||
|
||||
## 💡 长期优化建议
|
||||
|
||||
### **1. 数据质量评分系统**
|
||||
涓轰笂浼犵殑Excel鏂囦欢鎵撳垎锛?-100鍒嗭級锛?
|
||||
- 鉁?90-100锛氫紭璐ㄦ暟鎹<E69A9F>紝鐩存帴澶勭悊
|
||||
为上传的Excel文件打分(0-100分):
|
||||
- ✅ 90-100:优质数据,直接处理
|
||||
- ⚠️ 60-89:一般质量,提示可能问题
|
||||
- 鉂?0-59锛氫綆璐ㄩ噺锛屽己鍒惰<E98D92>姹傜敤鎴锋竻娲楀悗鍐嶄笂浼?
|
||||
- ❌ 0-59:低质量,强制要求用户清洗后再上传
|
||||
|
||||
### **2. Excel妯℃澘鏍囧噯鍖?*
|
||||
鎻愪緵鏍囧噯Excel妯℃澘涓嬭浇锛岀敤鎴锋寜妯℃澘濉<EFBFBD>啓锛屽噺灏戣剰鏁版嵁锛?
|
||||
### **2. Excel模板标准化**
|
||||
提供标准Excel模板下载,用户按模板填写,减少脏数据:
|
||||
```
|
||||
鐥呭巻缁撴瀯鍖栨爣鍑嗘ā鏉?v1.0.xlsx
|
||||
- 琛ㄥご琛屽喕缁?
|
||||
- 鏁版嵁楠岃瘉锛堜笅鎷夋<EFBFBD>锛?
|
||||
病历结构化标准模板 v1.0.xlsx
|
||||
- 表头行冻结
|
||||
- 数据验证(下拉框)
|
||||
- 字段说明(批注)
|
||||
- 示例数据
|
||||
```
|
||||
|
||||
### **3. 智能修复建议**
|
||||
妫€娴嬪埌闂<EFBFBD><EFBFBD>鏃讹紝AI缁欏嚭淇<EFBFBD><EFBFBD>寤鸿<EFBFBD>锛?
|
||||
检测到问题时,AI给出修复建议:
|
||||
```
|
||||
鈿狅笍 妫€娴嬪埌22涓<32>悎骞跺崟鍏冩牸锛屽彲鑳藉<E991B3>鑷存暟鎹<E69A9F>涪澶?
|
||||
寤鸿<EFBFBD>鎿嶄綔锛?
|
||||
[ 鑷<EFBFBD>姩灞曞紑鍚堝苟鍗曞厓鏍?] [ 蹇界暐骞剁户缁?]
|
||||
⚠️ 检测到22个合并单元格,可能导致数据丢失
|
||||
建议操作:
|
||||
[ 自动展开合并单元格 ] [ 忽略并继续 ]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 馃摑 寮€鍙戣<E98D99>褰?
|
||||
## 📝 开发记录
|
||||
|
||||
| 鏃ユ湡 | 澶勭悊鍐呭<E98D90> | 鐘舵€?| 澶囨敞 |
|
||||
| 日期 | 处理内容 | 状态 | 备注 |
|
||||
|------|---------|------|------|
|
||||
| 2025-12-03 | 鍒涘缓鎶€鏈<EFBFBD>€哄姟鏂囨。 | 鉁?| 鍒濆<E98D92>璁板綍4涓<34>棶棰?|
|
||||
| 2025-12-03 | #1 Excel瀵煎嚭椤哄簭淇<EFBFBD><EFBFBD> | 馃攧 | 宸蹭慨鏀逛唬鐮侊紝寰呴獙璇?|
|
||||
| - | #2 杩涘害鏉′紭鍖?| 鈴革笍 | 寰呭紑鍙?|
|
||||
| - | #3 Excel棰勫<EFBFBD>鐞?| 鈴革笍 | 寰呭紑鍙?|
|
||||
| - | #4 鑷<EFBFBD>畾涔夋ā鏉?| 鈴革笍 | 寰呭紑鍙?|
|
||||
| 2025-12-03 | 创建技术债务文档 | ✅ | 初始记录4个问题 |
|
||||
| 2025-12-03 | #1 Excel导出顺序修复 | 🔄 | 已修改代码,待验证 |
|
||||
| - | #2 进度条优化 | ⏸️ | 待开发 |
|
||||
| - | #3 Excel预处理 | ⏸️ | 待开发 |
|
||||
| - | #4 自定义模板 | ⏸️ | 待开发 |
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关文档
|
||||
|
||||
- [鎶€鏈<EFBFBD><EFBFBD>璁℃枃妗o細宸ュ叿 B](../02-鎶€鏈<E282AC><E98F88>璁?鎶€鏈<E282AC><E98F88>璁℃枃妗o細宸ュ叿%20B%20-%20鐥呭巻缁撴瀯鍖栨満鍣ㄤ汉%20(The%20AI%20Structurer).md)
|
||||
- [API璁捐<EFBFBD>鏂囨。](../02-鎶€鏈<EFBFBD><EFBFBD>璁?API璁捐<E79281>鏂囨。-DC妯″潡锛堝畬鏁寸増锛?md)
|
||||
- [寮€鍙戣<EFBFBD>鍒抅(../04-寮€鍙戣<E98D99>鍒?DC妯″潡Tool-B寮€鍙戣<E98D99>鍒?md)
|
||||
- [浜戝師鐢熷紑鍙戣<EFBFBD>鑼僝(../../../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||||
- [技术设计文档:工具 B](../02-技术设计/技术设计文档:工具%20B%20-%20病历结构化机器人%20(The%20AI%20Structurer).md)
|
||||
- [API设计文档](../02-技术设计/API设计文档-DC模块(完整版).md)
|
||||
- [开发计划](../04-开发计划/DC模块Tool-B开发计划.md)
|
||||
- [云原生开发规范](../../../04-开发规范/08-云原生开发规范.md)
|
||||
|
||||
---
|
||||
|
||||
**鏂囨。缁存姢锛?* 姣忔<E5A7A3>澶勭悊鎶€鏈<E282AC>€哄姟鏃舵洿鏂版<E98F82>鏂囨。
|
||||
|
||||
**文档维护:** 每次处理技术债务时更新此文档
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
# Tool C 技术债务清单
|
||||
|
||||
> **创建日期**: 2025-12-06
|
||||
> **譛蜷取峩譁?*: 2025-12-06
|
||||
> **最后更新**: 2025-12-06
|
||||
> **当前版本**: Day 3 MVP完成
|
||||
> **莨伜<EFBFBD>郤ァ蛻<EFBFBD>コ?*: P0-邏ァ諤?| P1-驥崎ヲ<EFBFBD> | P2-荳ュ譛滉シ伜喧 | P3-髟ソ譛溯ァ<E6BAAF><EFBDA7>
|
||||
> **优先级分级**: P0-紧急 | P1-重要 | P2-中期优化 | P3-长期规划
|
||||
|
||||
---
|
||||
|
||||
## 📋 技术债务概览
|
||||
|
||||
| 郛門捷 | 蛟コ蜉。鬘?| 莨伜<E88EA8>郤?| 鬚<>ョ。蟾・譌カ | 蠖ア蜩崎激蝗エ | 隶。蛻呈慮髣エ |
|
||||
| 编号 | 债务项 | 优先级 | 预计工时 | 影响范围 | 计划时间 |
|
||||
|------|-------|--------|---------|---------|---------|
|
||||
| TD-C-001 | Python Session迥カ諤∵戟荵<EFBFBD>喧 | P1 | 1螟?| 遞ウ螳壽?| Day 5-6 |
|
||||
| TD-C-002 | 謨ー謐ョ迚域悽邂。逅<EFBFBD>ク主屓貊?| P2 | 2螟?| 蜉溯<E89C89> | Week 3 |
|
||||
| TD-C-003 | 螟ァ譁<EFBFBD>サカ諤ァ閭ス莨伜喧 | P2 | 1.5螟?| 諤ァ閭ス | Week 3 |
|
||||
| TD-C-001 | Python Session状态持久化 | P1 | 1天 | 稳定性 | Day 5-6 |
|
||||
| TD-C-002 | 数据版本管理与回滚 | P2 | 2天 | 功能 | Week 3 |
|
||||
| TD-C-003 | 大文件性能优化 | P2 | 1.5天 | 性能 | Week 3 |
|
||||
| TD-C-004 | AI Prompt持续优化 | P1 | 持续 | 质量 | 持续 |
|
||||
| TD-C-005 | 蜑咲ォッ蟇ケ隸拔I蠑蜿?| P0 | 3螟?| 蜉溯<E89C89> | Day 4-5 |
|
||||
| TD-C-006 | 螟肴揩蝨コ譎ッPrompt莨伜喧 | P2 | 0.5螟?| 雍ィ驥<EFBDA8> | Day 4 |
|
||||
| TD-C-005 | 前端对话UI开发 | P0 | 3天 | 功能 | Day 4-5 |
|
||||
| TD-C-006 | 复杂场景Prompt优化 | P2 | 0.5天 | 质量 | Day 4 |
|
||||
|
||||
---
|
||||
|
||||
@@ -26,19 +26,26 @@
|
||||
|
||||
**当前问题**:
|
||||
```python
|
||||
# 蠖灘燕螳樒鴫<EFBFBD>壼<EFBFBD>蟄倡サエ謚、Session迥カ諤?session_data = {} # 蟄伜惠蜀<E683A0>ュ倅ク?
|
||||
# 髣ョ鬚假シ?# 1. Python譛榊苅驥榊星 竊?Session謨ー謐ョ荳「螟ア
|
||||
# 2. 螟壼ョ樔セ矩Κ鄂?竊?雍溯スス蝮<EFBDBD>。。莨壼ッシ閾エ迥カ諤∽ク堺ク閾?# 3. 譌<>豕募屓貊壼芦蜴<E88AA6>彰迚域<E8BF9A>?```
|
||||
# 当前实现:内存维护Session状态
|
||||
session_data = {} # 存在内存中
|
||||
|
||||
# 问题:
|
||||
# 1. Python服务重启 → Session数据丢失
|
||||
# 2. 多实例部署 → 负载均衡会导致状态不一致
|
||||
# 3. 无法回滚到历史版本
|
||||
```
|
||||
|
||||
**影响**:
|
||||
- 用户体验差:重启服务后需重新上传文件
|
||||
- 无法云原生部署:不支持多实例
|
||||
- 謨ー謐ョ螳牙<EFBFBD>諤ァ<EFBFBD>壼<EFBFBD>蟄俶妙逕オ蜊ウ荳「螟?
|
||||
- 数据安全性:内存断电即丢失
|
||||
|
||||
**优化方案**:
|
||||
|
||||
**譁ケ譯<EFBFBD>: Redis謖∽ケ<EFBFBD><EFBFBD>?*<EFBFBD>域耳闕撰シ<EFBFBD>
|
||||
**方案A: Redis持久化**(推荐)
|
||||
```python
|
||||
# 菴ソ逕ィRedis蟄伜おSession迥カ諤?import redis
|
||||
# 使用Redis存储Session状态
|
||||
import redis
|
||||
import pickle
|
||||
|
||||
class SessionManager:
|
||||
@@ -49,7 +56,7 @@ class SessionManager:
|
||||
# 序列化DataFrame
|
||||
serialized = pickle.dumps(dataframe)
|
||||
|
||||
# 蟄伜お蛻ーRedis<EFBFBD>?0蛻<30>帖霑<E5B896>悄
|
||||
# 存储到Redis,10分钟过期
|
||||
self.redis_client.setex(
|
||||
f"session:{session_id}",
|
||||
600, # 10分钟
|
||||
@@ -63,7 +70,7 @@ class SessionManager:
|
||||
return None
|
||||
```
|
||||
|
||||
**譁ケ譯<EFBFBD>: OSS謖∽ケ<EFBFBD><EFBFBD>?*
|
||||
**方案B: OSS持久化**
|
||||
```python
|
||||
# 每次操作后保存到OSS
|
||||
def save_to_oss(session_id, dataframe):
|
||||
@@ -78,34 +85,40 @@ def save_to_oss(session_id, dataframe):
|
||||
|
||||
**实施计划**:
|
||||
- Day 5: 实现Redis集成
|
||||
- Day 6: 豬玖ッ穂ク朱Κ鄂?
|
||||
- Day 6: 测试与部署
|
||||
|
||||
---
|
||||
|
||||
### TD-C-004: AI Prompt持续优化
|
||||
|
||||
**当前问题**:
|
||||
- 10荳ェFew-shot遉コ萓句庄閭ス荳榊、溯ヲ<EFBFBD>尠謇譛牙惻譎?- 譟蝉コ帛、肴揩蛹サ逍怜惻譎ッAI逅<49>ァ」荳榊㊥遑?- 莉」遐∫函謌占エィ驥丈セ晁オ縫eepSeek-V3諤ァ閭ス
|
||||
- 10个Few-shot示例可能不够覆盖所有场景
|
||||
- 某些复杂医疗场景AI理解不准确
|
||||
- 代码生成质量依赖DeepSeek-V3性能
|
||||
|
||||
**优化方向**:
|
||||
|
||||
**1. 謇ゥ螻彦ew-shot蠎?*
|
||||
**1. 扩展Few-shot库**
|
||||
```python
|
||||
# 蠖灘燕<EFBFBD>?0荳ェ遉コ萓?# 逶ョ譬<EFBDAE>シ?0-30荳ェ遉コ萓具シ悟<EFBDBC>邀サ蟄伜お
|
||||
# 当前:10个示例
|
||||
# 目标:20-30个示例,分类存储
|
||||
|
||||
few_shot_library = {
|
||||
"basic": [...], # 蝓コ遑貂<EFBFBD>エ暦シ?0荳ェ<E88DB3><EFBDAA>
|
||||
"medical": [...], # 蛹サ逍嶺ク謎ク夲シ?0荳ェ<E88DB3><EFBDAA>
|
||||
"advanced": [...] # 鬮倡コァ蛻<EFBFBD>梵<EFBFBD>?0荳ェ<E88DB3><EFBDAA>
|
||||
"basic": [...], # 基础清洗(10个)
|
||||
"medical": [...], # 医疗专业(10个)
|
||||
"advanced": [...] # 高级分析(10个)
|
||||
}
|
||||
|
||||
# 根据用户需求动态选择相关示例
|
||||
def select_relevant_examples(user_message):
|
||||
# 隸ュ荵牙源驟肴怙逶ク蜈ウ逧?荳ェ遉コ萓? ...
|
||||
# 语义匹配最相关的5个示例
|
||||
...
|
||||
```
|
||||
|
||||
**2. 用户反馈收集**
|
||||
```python
|
||||
# 隶ー蠖柊I逕滓<EFBFBD>螟ア雍・逧<EFBFBD>惻譎?failed_cases = []
|
||||
# 记录AI生成失败的场景
|
||||
failed_cases = []
|
||||
|
||||
# 定期分析,添加新示例
|
||||
def analyze_failures():
|
||||
@@ -114,9 +127,12 @@ def analyze_failures():
|
||||
# 更新System Prompt
|
||||
```
|
||||
|
||||
**3. 螟壽ィ。蝙句、<EFBFBD>?*
|
||||
**3. 多模型备选**
|
||||
```python
|
||||
# 荳サ<EFBFBD>咼eepSeek-V3<EFBFBD>域ァ莉キ豈秘ォ假シ?# 螟<>シ哦PT-4<>郁エィ驥城ォ假シ梧<EFBDBC>譛ャ鬮假シ?# 螟<>シ咾laude-3.5<EFBFBD>井サ」遐∬<EFBFBD>蜉帛シコ<EFBFBD>?
|
||||
# 主:DeepSeek-V3(性价比高)
|
||||
# 备:GPT-4(质量高,成本高)
|
||||
# 备:Claude-3.5(代码能力强)
|
||||
|
||||
if deepseek_fails:
|
||||
retry_with_gpt4()
|
||||
```
|
||||
@@ -128,16 +144,21 @@ if deepseek_fails:
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>泯 P2: 荳ュ譛滉シ伜喧<EFBFBD>?-2荳ェ譛茨シ?
|
||||
### TD-C-002: 謨ー謐ョ迚域悽邂。逅<EFBDA1>ク主屓貊?
|
||||
## 🟡 P2: 中期优化(1-2个月)
|
||||
|
||||
### TD-C-002: 数据版本管理与回滚
|
||||
|
||||
**当前问题**:
|
||||
- AI豈乗ャ。謫堺ス憺<EFBFBD>逶エ謗・菫ョ謾ケ蠖灘燕謨ー謐?- 譌<>豕墓彫髞/蝗樊サ壼芦荵句燕迥カ諤?- 譌<>豕募ッケ豈比ク榊酔迚域悽
|
||||
- AI每次操作都直接修改当前数据
|
||||
- 无法撤销/回滚到之前状态
|
||||
- 无法对比不同版本
|
||||
|
||||
**优化方案**:
|
||||
|
||||
**版本管理架构**:
|
||||
```python
|
||||
# 豈乗ャ。謫堺ス懷錘菫晏ュ伜ソォ辣?class DataVersionManager:
|
||||
# 每次操作后保存快照
|
||||
class DataVersionManager:
|
||||
def save_version(self, session_id, dataframe, operation_desc):
|
||||
version_id = str(uuid.uuid4())
|
||||
|
||||
@@ -145,7 +166,8 @@ if deepseek_fails:
|
||||
oss_key = f"dc/tool-c/sessions/{session_id}/versions/{version_id}.parquet"
|
||||
dataframe.to_parquet(oss_key)
|
||||
|
||||
# 蜈<EFBFBD>焚謐ョ蟄俶焚謐ョ蠎? db.save({
|
||||
# 元数据存数据库
|
||||
db.save({
|
||||
"session_id": session_id,
|
||||
"version_id": version_id,
|
||||
"operation": operation_desc,
|
||||
@@ -165,20 +187,20 @@ if deepseek_fails:
|
||||
// 版本历史列表
|
||||
<Timeline>
|
||||
<TimelineItem>
|
||||
迚域悽1: 荳贋シ<EFBFBD>蜴溷ァ区枚莉カ (100陦?
|
||||
版本1: 上传原始文件 (100行)
|
||||
</TimelineItem>
|
||||
<TimelineItem>
|
||||
迚域悽2: 蛻<EFBFBD>髯、郛コ螟ア蛟?(95陦? [蝗樊サ咯
|
||||
版本2: 删除缺失值 (95行) [回滚]
|
||||
</TimelineItem>
|
||||
<TimelineItem>
|
||||
迚域悽3: 隶。邂唯MI (95陦? [蠖灘燕]
|
||||
版本3: 计算BMI (95行) [当前]
|
||||
</TimelineItem>
|
||||
</Timeline>
|
||||
```
|
||||
|
||||
**成本估算**:
|
||||
- 每个版本~1-5MB(Parquet压缩后)
|
||||
- 10荳ェ迚域<EFBFBD>?= 10-50MB
|
||||
- 10个版本 = 10-50MB
|
||||
- OSS成本:¥0.01-0.05/Session
|
||||
|
||||
**实施计划**:
|
||||
@@ -190,16 +212,21 @@ if deepseek_fails:
|
||||
### TD-C-003: 大文件性能优化
|
||||
|
||||
**当前限制**:
|
||||
- 譁<EFBFBD>サカ螟ァ蟆擾シ?0MB
|
||||
- 陦梧焚髯仙宛<EFBFBD>嘸50,000陦?- 蜑咲ォッ鬚<EFBDAF>ァ茨シ?00陦?
|
||||
- 文件大小:10MB
|
||||
- 行数限制:~50,000行
|
||||
- 前端预览:100行
|
||||
|
||||
**优化目标**:
|
||||
- 譁<EFBFBD>サカ螟ァ蟆擾シ?0MB
|
||||
- 陦梧焚髯仙宛<EFBFBD>?00,000陦?- 蜑咲ォッ鬚<EFBDAF>ァ茨シ夊劒諡滓サ壼<EFBDBB>?
|
||||
**謚譛ッ譁ケ譯?*:
|
||||
- 文件大小:50MB
|
||||
- 行数限制:500,000行
|
||||
- 前端预览:虚拟滚动
|
||||
|
||||
**技术方案**:
|
||||
|
||||
**1. 流式处理**
|
||||
```python
|
||||
# 蛻<EFBFBD>摎隸サ蜿門、ァ譁<EFBFBD>サ?def process_large_file(file_path):
|
||||
# 分块读取大文件
|
||||
def process_large_file(file_path):
|
||||
chunk_size = 10000 # 每次处理1万行
|
||||
|
||||
for chunk in pd.read_csv(file_path, chunksize=chunk_size):
|
||||
@@ -213,13 +240,14 @@ if deepseek_fails:
|
||||
import pyarrow as pa
|
||||
import pyarrow.parquet as pq
|
||||
|
||||
# Node.js 竊?Python 謨ー謐ョ莨<EFBFBD>霎<EFBFBD>
|
||||
# 菴ソ逕ィArrow IPC譬シ蠑擾シ域ッ寧SON蠢?0-100蛟搾シ<EFBFBD>
|
||||
# Node.js ↔ Python 数据传输
|
||||
# 使用Arrow IPC格式(比JSON快10-100倍)
|
||||
```
|
||||
|
||||
**3. 前端虚拟滚动**
|
||||
```typescript
|
||||
// 菴ソ逕ィAG Grid逧<EFBFBD>劒諡滓サ壼<EFBFBD>?<AgGridReact
|
||||
// 使用AG Grid的虚拟滚动
|
||||
<AgGridReact
|
||||
rowModelType="infinite"
|
||||
cacheBlockSize={100}
|
||||
maxBlocksInCache={10}
|
||||
@@ -232,23 +260,31 @@ import pyarrow.parquet as pq
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>泯 P2: 荳ュ譛滉シ伜喧<EFBFBD>?-2荳ェ譛茨シ?
|
||||
### TD-C-006: 螟肴揩蝨コ譎ッPrompt莨伜喧<E4BC9C><E596A7>ay 3豬玖ッ暮@逡呻シ?
|
||||
## 🟡 P2: 中期优化(1-2个月)
|
||||
|
||||
### TD-C-006: 复杂场景Prompt优化(Day 3测试遗留)
|
||||
|
||||
**当前问题**:
|
||||
Day 3测试中,2个复杂场景持续超时失败(3次重试都失败):
|
||||
- **示例2:数值列清洗**(creatinine列处理,包含`<0.1`等特殊符号)
|
||||
- **遉コ萓<EFBFBD>7<EFBFBD>壽匱閭ス蜴サ驥?*<2A>域律譛溯ァ」譫?+ 謗貞コ<E8B29E> + 蜴サ驥搾シ?
|
||||
- **示例7:智能去重**(日期解析 + 排序 + 去重)
|
||||
|
||||
**失败原因分析**:
|
||||
```
|
||||
笶?遉コ萓<EFBDBA>2螟ア雍・: timeout of 60000ms exceeded
|
||||
逕ィ謌キ髴豎? 謚劃reatinine蛻鈴㈹逧<E388B9>撼謨ー蟄礼ャヲ蜿キ蜴サ謗会シ?0.1謖?.05螟<EFBFBD>炊<EFBFBD>瑚スャ荳コ謨ー蛟シ邀サ蝙?
|
||||
髣ョ鬚假シ? - 髴豎よ緒霑ー螟肴揩<E882B4><E68FA9>3荳ェ蟄蝉ササ蜉。<E89C89>壼悉隨ヲ蜿キ + 迚ケ谿雁シ螟<EFBDBC><E89E9F>?+ 邀サ蝙玖スャ謐「<E8AC90>? - AI逅<49>ァ」荳榊㊥遑ョ<E98191>檎函謌千噪莉」遐∵怏騾サ霎鷹漠隸ッ
|
||||
❌ 示例2失败: timeout of 60000ms exceeded
|
||||
用户需求: 把creatinine列里的非数字符号去掉,<0.1按0.05处理,转为数值类型
|
||||
|
||||
问题:
|
||||
- 需求描述复杂(3个子任务:去符号 + 特殊值处理 + 类型转换)
|
||||
- AI理解不准确,生成的代码有逻辑错误
|
||||
- 3次重试仍无法修正
|
||||
|
||||
笶?遉コ萓<EFBDBA>7螟ア雍・: timeout of 60000ms exceeded
|
||||
逕ィ謌キ髴豎? 謖英atient_id蜴サ驥搾シ御ソ晉蕗check_date譛譁ー逧<EFBDB0>ョー蠖<EFBDB0>
|
||||
❌ 示例7失败: timeout of 60000ms exceeded
|
||||
用户需求: 按patient_id去重,保留check_date最新的记录
|
||||
|
||||
髣ョ鬚假シ? - 譌・譛溷<E8AD9B>蜿ッ閭ス蛹<EFBDBD>性螟夂ァ肴<EFBDA7>シ蠑? - 謗貞コ<E8B29E> + 蜴サ驥咲噪扈<E599AA>粋騾サ霎大、肴揩
|
||||
问题:
|
||||
- 日期列可能包含多种格式
|
||||
- 排序 + 去重的组合逻辑复杂
|
||||
- AI生成的代码执行出错后难以自我修正
|
||||
```
|
||||
|
||||
@@ -259,17 +295,20 @@ Day 3测试中,2个复杂场景持续超时失败(3次重试都失败):
|
||||
# 为这两个场景添加更详细的Few-shot示例
|
||||
|
||||
### 示例: 复杂数值清洗(含特殊符号)
|
||||
逕ィ謌キ: 謚願l驟仙<EFBFBD>驥檎噪髱樊焚蟄礼ャヲ蜿キ<EFBFBD><EFBFBD>>縲?<EFBFBD>牙悉謗会シ<EFBFBD><0.1謖?.05螟<EFBFBD>炊<EFBFBD>瑚スャ荳コ謨ー蛟?莉」遐<EFBFBD>:
|
||||
用户: 把肌酐列里的非数字符号(>、<)去掉,<0.1按0.05处理,转为数值
|
||||
代码:
|
||||
\`\`\`python
|
||||
try:
|
||||
# 隨?豁・<E8B181>壼悉髯、隨ヲ蜿キ
|
||||
# 第1步:去除符号
|
||||
df['creatinine_clean'] = df['creatinine'].astype(str).str.replace('>', '').str.replace('<', '')
|
||||
|
||||
# 隨?豁・<E8B181>壼、<E5A3BC>炊迚ケ谿雁? df.loc[df['creatinine_clean'] == '0.1', 'creatinine_clean'] = '0.05'
|
||||
# 第2步:处理特殊值
|
||||
df.loc[df['creatinine_clean'] == '0.1', 'creatinine_clean'] = '0.05'
|
||||
|
||||
# 隨?豁・<E8B181>夊スャ荳コ謨ー蛟? df['creatinine_numeric'] = pd.to_numeric(df['creatinine_clean'], errors='coerce')
|
||||
# 第3步:转为数值
|
||||
df['creatinine_numeric'] = pd.to_numeric(df['creatinine_clean'], errors='coerce')
|
||||
|
||||
print(f'貂<EFBFBD>エ怜ョ梧<EFBFBD><EFBFBD>嘴df["creatinine_numeric"].notna().sum()}荳ェ譛画譜蛟?)
|
||||
print(f'清洗完成:{df["creatinine_numeric"].notna().sum()}个有效值')
|
||||
except Exception as e:
|
||||
print(f'错误: {e}')
|
||||
\`\`\`
|
||||
@@ -279,13 +318,16 @@ except Exception as e:
|
||||
**方案B: 优化System Prompt**
|
||||
```typescript
|
||||
## 复杂场景处理建议
|
||||
1. **謨ー蛟シ貂<EFBFBD>エ?*<EFBFBD>壼<EFBFBD>豁・螟<EFBFBD>炊<EFBFBD>亥悉隨ヲ蜿?竊?螟<EFBFBD>炊迚ケ谿雁?竊?邀サ蝙玖スャ謐「<EFBFBD>?2. **譌・譛滓桃菴<EFBFBD>**<EFBFBD>壼<EFBFBD>逕ィpd.to_datetime()扈滉ク譬シ蠑擾シ悟<EFBFBD>謗貞コ丞悉驥<EFBFBD>
|
||||
1. **数值清洗**:分步处理(去符号 → 处理特殊值 → 类型转换)
|
||||
2. **日期操作**:先用pd.to_datetime()统一格式,再排序去重
|
||||
3. **调试输出**:每步打印中间结果,便于错误定位
|
||||
4. **髞呵ッッ螟<EFBFBD>炊**<EFBFBD>壻スソ逕ィtry-except蛹<EFBFBD>」ケ豈丈クェ蟄先ュ・鬪?```
|
||||
4. **错误处理**:使用try-except包裹每个子步骤
|
||||
```
|
||||
|
||||
**方案C: 调整重试策略**
|
||||
```typescript
|
||||
// 髓亥ッケ迚ケ螳夐漠隸ッ邀サ蝙具シ梧署萓帶峩譏守。ョ逧<EFBFBD>ソョ豁」謠千、?if (error.includes('譌・譛<EFBDA5>') || error.includes('datetime')) {
|
||||
// 针对特定错误类型,提供更明确的修正提示
|
||||
if (error.includes('日期') || error.includes('datetime')) {
|
||||
enhancedMessage = `${userMessage}
|
||||
|
||||
注意:日期列可能包含缺失值或格式不一致,请:
|
||||
@@ -296,177 +338,399 @@ except Exception as e:
|
||||
```
|
||||
|
||||
**实施计划**:
|
||||
- Day 4: 螳樒鴫譁ケ譯<EFBFBD><EFBFBD>亥「槫シコFew-shot遉コ萓具シ?- Day 4: 螳樒鴫譁ケ譯<EFBDB9><E8ADAF>井シ伜喧System Prompt<70>?- Day 5: 豬玖ッ穂シ伜喧謨域棡<E59F9F>育岼譬<E5B2BC>シ夐夊ソ<E5A48A>紫霎セ蛻?5%+<2B>?
|
||||
- Day 4: 实现方案A(增强Few-shot示例)
|
||||
- Day 4: 实现方案B(优化System Prompt)
|
||||
- Day 5: 测试优化效果(目标:通过率达到95%+)
|
||||
|
||||
**预期效果**:
|
||||
- 騾夊ソ<EFBFBD>紫莉<EFBFBD>81.8%謠仙合蛻?5%+
|
||||
- 通过率从81.8%提升到95%+
|
||||
- 复杂场景一次成功率提升50%
|
||||
- 用户体验改善(减少等待时间)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>泙 P3: 髟ソ譛溯ァ<EFBFBD><EFBFBD><EFBFBD>?荳ェ譛<EFBDAA>+<2B>?
|
||||
## 🟢 P3: 长期规划(3个月+)
|
||||
|
||||
### TD-C-007: 医学专业功能增强
|
||||
|
||||
> **创建日期**: 2025-12-08
|
||||
> **来源**: 医学统计分析专家审查反馈
|
||||
> **莨伜<EFBFBD>郤?*: P3<50>亥粥閭ス謖蛾聴MVP螳梧<E89EB3>蜷惹シ伜<EFBDBC>螳樊命<E6A88A><E591BD>
|
||||
> **优先级**: P3(功能按钮MVP完成后优先实施)
|
||||
|
||||
**背景**:
|
||||
当前工具C功能按钮开发计划(V1.0)主要面向通用数据清洗场景。医学专业审查发现,针对临床研究数据的特殊需求,需要增加以下专业功能。
|
||||
|
||||
**閭梧勹**<EFBFBD>?蠖灘燕蟾・蜈キC蜉溯<E89C89>謖蛾聴蠑蜿題ョ。蛻抵シ<E68AB5>1.0<EFBFBD>我クサ隕<EFBFBD>擇蜷鷹夂畑謨ー謐ョ貂<EFBFBD>エ怜惻譎ッ縲ょ現蟄ヲ荳謎ク壼ョ。譟・蜿醍鴫<EFBFBD>碁宙蟇ケ荳エ蠎顔<EFBFBD>皮ゥカ謨ー謐ョ逧<EFBFBD>音谿企怙豎ゑシ碁怙隕∝「槫刈莉・荳倶ク謎ク壼粥閭ス縲?
|
||||
---
|
||||
|
||||
#### 7.1 蠑ょクク蛟シ譽豬句勣<EFBFBD>井シ伜<EFBFBD>郤ァ<EFBFBD>夐ォ假シ?
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- 荳エ蠎頑焚謐ョ蟶ク蟄伜惠蠖募<E8A096>髞呵ッッ<EFBDAF>亥ヲゑシ壼ケエ鮴<EFBDB4>999蟯√∽ス馴<EFBDBD>?00kg<6B>?- 莉ェ蝎ィ謨<EFBDA8>囿蟇シ閾エ逧<EFBDB4>シょクク隸サ謨?- 髴隨ヲ蜷井クエ蠎願激蝗エ逧<EFBDB4>焚謐ョ鬪瑚ッ?
|
||||
**蜉溯<E89C89>隶セ隶。**<EFBFBD>?```
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 蠑ょクク蛟シ譽豬? 笏?笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 騾画叫蛻暦シ喙陦邉?笆シ] 笏?笏? 笏?笏? 譽豬区婿豕包シ<E58C85> 笏?笏? 笳?荳エ蠎願激蝗エ<E89D97>域耳闕撰シ<E692B0> 笏?笏? 豁」蟶ク闌<EFBDB8>峩<EFBFBD>喙3.9___] - [6.1___] 笏?笏? 譚・貅撰シ喙ADA謖<41>漉 笆シ] 笏?笏? 笏?笏? 笳?扈溯ョ。蟄ヲ譁ケ豕? 笏?笏? IQR豕包シ<E58C85>1.5蛟榊屁蛻<EFBFBD>ス崎キ晢シ<EFBFBD> 笏?笏? Z-score豕包シ按ア3譬<33>㊥蟾ョ<E89FBE><EFBDAE> 笏?笏? 笏?笏? 螟<>炊譁ケ蠑擾シ? 笏?笏? 笳?莉<><E88E89><EFBFBD>ョ? 笳?蛻<>髯、 笳?譖ソ謐「荳コ郛コ螟? 笏?笏? 笏?笏? 譽豬句芦<E58FA5>?3荳ェ蠑ょクク蛟? 笏?笏? [譟・逵玖ッヲ諠<EFBDA6> 笏?笏? 笏?笏? [蜿匁カ<E58C81> [謇ァ陦珪 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?```
|
||||
#### 7.1 异常值检测器(优先级:高)
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 蜀<>スョ蟶ク逕ィ荳エ蠎願激蝗エ<E89D97>亥ケエ鮴?-120縲。MI 10-80縲∬。邉?-30遲会シ<E4BC9A>
|
||||
- 謾ッ謖∬<E8AC96>螳壻ケ芽激蝗?- 蜿ッ隗<EFBDAF>喧蠑ょクク蛟シ蛻<EFBDBC>ク<EFBFBD>シ育ョア郤ソ蝗セ<E89D97><EFBDBE>
|
||||
**医学背景**:
|
||||
- 临床数据常存在录入错误(如:年龄999岁、体重500kg)
|
||||
- 仪器故障导致的异常读数
|
||||
- 需符合临床范围的数据验证
|
||||
|
||||
**功能设计**:
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 异常值检测 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 选择列:[血糖 ▼] │
|
||||
│ │
|
||||
│ 检测方法: │
|
||||
│ ● 临床范围(推荐) │
|
||||
│ 正常范围:[3.9___] - [6.1___] │
|
||||
│ 来源:[ADA指南 ▼] │
|
||||
│ │
|
||||
│ ○ 统计学方法 │
|
||||
│ IQR法(1.5倍四分位距) │
|
||||
│ Z-score法(±3标准差) │
|
||||
│ │
|
||||
│ 处理方式: │
|
||||
│ ○ 仅标记 ● 删除 ○ 替换为缺失 │
|
||||
│ │
|
||||
│ 检测到:23个异常值 │
|
||||
│ [查看详情] │
|
||||
│ │
|
||||
│ [取消] [执行] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**实现要点**:
|
||||
- 内置常用临床范围(年龄0-120、BMI 10-80、血糖2-30等)
|
||||
- 支持自定义范围
|
||||
- 可视化异常值分布(箱线图)
|
||||
|
||||
---
|
||||
|
||||
#### 7.2 单位转换器(优先级:高)
|
||||
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- 荳榊酔蝗ス螳カ/蛹サ髯「菴ソ逕ィ荳榊酔蜊穂ス<E7A982>
|
||||
**医学背景**:
|
||||
- 不同国家/医院使用不同单位
|
||||
- 文献meta分析需要统一单位
|
||||
- 蟶ク隗∬スャ謐「髞呵ッッ蟇シ閾エ謨ー謐ョ荳榊庄逕?
|
||||
**蜉溯<E89C89>隶セ隶。**<2A>?```
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 蛹サ蟄ヲ蜊穂ス崎スャ謐「 笏?笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 騾画叫蛻暦シ喙陦邉?笆シ] 笏?笏? 笏?笏? 蠖灘燕蜊穂ス搾シ喙mg/dL 笆シ] 笏?笏? 逶ョ譬<EFBDAE>黒菴搾シ喙mmol/L 笆シ] 笏?笏? 笏?笏? 蟶ク逕ィ霓ャ謐「<E8AC90>? 笏?笏? 窶?陦邉? mg/dL 竊?mmol/L (テキ18.018) 笏?笏? 窶?陦閼? mg/dL 竊?mmol/L 笏?笏? 窶?菴馴㍾: kg 竊?lb (テ<>2.20462) 笏?笏? 窶?霄ォ鬮<EFBDAB>: cm 竊?inch 笏?笏? 窶?閧碁<E996A7>: mg/dL 竊?ホシmol/L 笏?笏? 笏?笏? 笘托ク<E68998> 蛻帛サコ譁ー蛻<EFBDB0> 笏?笏? 譁ー蛻怜錐<E6809C>喙陦邉棒mmol_L_________] 笏?笏? 笏?笏? 鬚<>ァ茨シ?.5 mg/dL 竊?0.31 mmol/L 笏?笏? 笏?笏? [蜿匁カ<E58C81> [謇ァ陦珪 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?```
|
||||
- 常见转换错误导致数据不可用
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 蜀<>スョ蛹サ蟄ヲ蟶ク逕ィ霓ャ謐「蜈ャ蠑<EFBDAC>
|
||||
**功能设计**:
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 医学单位转换 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 选择列:[血糖 ▼] │
|
||||
│ │
|
||||
│ 当前单位:[mg/dL ▼] │
|
||||
│ 目标单位:[mmol/L ▼] │
|
||||
│ │
|
||||
│ 常用转换: │
|
||||
│ • 血糖: mg/dL ↔ mmol/L (÷18.018) │
|
||||
│ • 血脂: mg/dL ↔ mmol/L │
|
||||
│ • 体重: kg ↔ lb (×2.20462) │
|
||||
│ • 身高: cm ↔ inch │
|
||||
│ • 肌酐: mg/dL ↔ μmol/L │
|
||||
│ │
|
||||
│ ☑️ 创建新列 │
|
||||
│ 新列名:[血糖_mmol_L_________] │
|
||||
│ │
|
||||
│ 预览:5.5 mg/dL → 0.31 mmol/L │
|
||||
│ │
|
||||
│ [取消] [执行] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**实现要点**:
|
||||
- 内置医学常用转换公式
|
||||
- 支持批量转换
|
||||
- 閾ェ蜉ィ鬪瑚ッ∬スャ謐「蜷守噪蜷育炊諤?
|
||||
- 自动验证转换后的合理性
|
||||
|
||||
---
|
||||
|
||||
#### 7.3 日期计算器(优先级:高)
|
||||
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- 隶。邂怜ケエ鮴<EFBDB4><EFBFBD>囂隶ソ譌カ髣エ縲∫函蟄俶慮髣エ譏ッ鬮倬「鷹怙豎?- 譌・譛滓<E8AD9B>シ蠑丈ク咲サ滉ク<EFBDB8>?025-01-01 vs 2025/1/1<>?- 髴隕∝、<E2889D>炊髣ー蟷エ縲∵慮髣エ遯礼ュ牙、肴揩蝨コ譎?
|
||||
**蜉溯<E89C89>隶セ隶。**<2A>?```
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 譌・譛<EFBDA5>/譌カ髣エ隶。邂<EFBDA1> 笏?笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 隶。邂礼アサ蝙具シ? 笏?笏? 笳?隶。邂怜ケエ鮴<EFBDB4>シ井サ主<EFBDBB>逕滓律譛滂シ? 笏?笏? 蜃コ逕滓律譛溷<E8AD9B><E6BAB7>喙birth_date 笆シ] 笏?笏? 蜿り<E3828A>律譛滂シ壺<EFBDBC>?莉雁、ゥ 笳?謖<>ョ壼<EFBDAE>? 笏?笏? 譁ー蛻怜錐<E6809C>喙蟷エ鮴Ю________] 笏?笏? 笏?笏? 笳?隶。邂玲慮髣エ髣エ髫<EFBDB4> 笏?笏? 蠑蟋区律譛滂シ喙蜈・髯「譌・譛<EFBDA5> 笆シ] 笏?笏? 扈捺據譌・譛滂シ喙蜃コ髯「譌・譛<EFBDA5> 笆シ] 笏?笏? 蜊穂ス搾シ喙螟?笆シ]<5D>亥、ゥ/蜻?譛?蟷エ<E89FB7><EFBDB4> 笏?笏? 譁ー蛻怜錐<E6809C>喙菴城劼螟ゥ謨ー_____] 笏?笏? 笏?笏? 笳?蛻、譁ュ譌カ髣エ遯暦シ域弍蜷ヲ蝨ィX螟ゥ蜀<EFBDA9>シ? 笏?笏? 莠倶サカ譌・譛滂シ喙髫剰ョソ譌・譛<EFBDA5> 笆シ] 笏?笏? 蝓コ郤ソ譌・譛滂シ喙蜈・扈<EFBDA5>律譛<E5BE8B> 笆シ] 笏?笏? 譌カ髣エ遯暦シ喙30____] 螟ゥ蜀<EFBDA9> 笏?笏? 譁ー蛻怜錐<E6809C>喙30螟ゥ蜀<EFBDA9>囂隶ソ____] 笏?笏? 笏?笏? [蜿匁カ<E58C81> [鬚<>ァ<EFBFBD> [謇ァ陦珪 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?```
|
||||
**医学背景**:
|
||||
- 计算年龄、随访时间、生存时间是高频需求
|
||||
- 日期格式不统一(2025-01-01 vs 2025/1/1)
|
||||
- 需要处理闰年、时间窗等复杂场景
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 閾ェ蜉ィ譽豬区律譛滓<E8AD9B>シ蠑?- 螟<>炊郛コ螟ア譌・譛<EFBDA5>
|
||||
**功能设计**:
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 日期/时间计算 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 计算类型: │
|
||||
│ ● 计算年龄(从出生日期) │
|
||||
│ 出生日期列:[birth_date ▼] │
|
||||
│ 参考日期:● 今天 ○ 指定列 │
|
||||
│ 新列名:[年龄_________] │
|
||||
│ │
|
||||
│ ○ 计算时间间隔 │
|
||||
│ 开始日期:[入院日期 ▼] │
|
||||
│ 结束日期:[出院日期 ▼] │
|
||||
│ 单位:[天 ▼](天/周/月/年) │
|
||||
│ 新列名:[住院天数_____] │
|
||||
│ │
|
||||
│ ○ 判断时间窗(是否在X天内) │
|
||||
│ 事件日期:[随访日期 ▼] │
|
||||
│ 基线日期:[入组日期 ▼] │
|
||||
│ 时间窗:[30____] 天内 │
|
||||
│ 新列名:[30天内随访____] │
|
||||
│ │
|
||||
│ [取消] [预览] [执行] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**实现要点**:
|
||||
- 自动检测日期格式
|
||||
- 处理缺失日期
|
||||
- 支持多种时间单位
|
||||
|
||||
---
|
||||
|
||||
#### 7.4 临床截断值分箱(优先级:中)
|
||||
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- 蛹サ蟄ヲ蛻<EFBDA6>アサ蠎泌渕莠主セェ隸∝現蟄ヲ隸∵紺<E288B5>亥ヲゑシ啗HO縲、DA謖<41>漉<EFBFBD>?- 莉サ諢丞<E8ABA2>邂ア莨壽此螟ア菫。諱ッ荳疲裏荳エ蠎頑э荵?- 髴隕∝庄霑ス貅ッ逧<EFBDAF><E980A7>邀サ譬<EFBDBB><E8ADAC>?
|
||||
**蜉溯<E89C89>謾ケ霑<EFBDB9>**<2A>?```
|
||||
蝨ィ邇ー譛?逕滓<E98095>蛻<EFBFBD>アサ蜿倬㍼"蜉溯<E89C89>荳ュ蠅槫刈<E6A7AB><E58888>
|
||||
**医学背景**:
|
||||
- 医学分类应基于循证医学证据(如:WHO、ADA指南)
|
||||
- 任意分箱会损失信息且无临床意义
|
||||
- 需要可追溯的分类标准
|
||||
|
||||
**功能改进**:
|
||||
```
|
||||
在现有"生成分类变量"功能中增加:
|
||||
|
||||
┌─────────────────────────────────────┐
|
||||
│ 连续变量分箱 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 选择数值列:[BMI ▼] │
|
||||
│ │
|
||||
│ 分箱方式: │
|
||||
│ ● 临床截断值(推荐)⭐ │
|
||||
│ 标准:[WHO标准 ▼] │
|
||||
│ <18.5: 低体重 │
|
||||
│ 18.5-24.9: 正常 │
|
||||
│ 25-29.9: 超重 │
|
||||
│ ≥30: 肥胖 │
|
||||
│ 参考:WHO 2000 │
|
||||
│ │
|
||||
│ [切换为中国标准 ▼] │
|
||||
│ │
|
||||
│ ○ 自定义切点(需注明依据) │
|
||||
│ ○ 等宽/等频分箱(⚠️会损失信息) │
|
||||
│ │
|
||||
│ [取消] [预览分布] [执行] │
|
||||
└─────────────────────────────────────┘
|
||||
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 霑樒サュ蜿倬㍼蛻<E38DBC>ョア 笏?笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 騾画叫謨ー蛟シ蛻暦シ喙BMI 笆シ] 笏?笏? 笏?笏? 蛻<>ョア譁ケ蠑擾シ? 笏?笏? 笳?荳エ蠎頑穐譁ュ蛟シ<E89B9F>域耳闕撰シ俄ュ<E4BF84> 笏?笏? 譬<>㊥<EFBFBD>喙WHO譬<4F>㊥ 笆シ] 笏?笏? <18.5: 菴惹ス馴<EFBDBD>? 笏?笏? 18.5-24.9: 豁」蟶ク 笏?笏? 25-29.9: 雜<>㍾ 笏?笏? 竕?0: 閧・閭<EFBDA5> 笏?笏? 蜿り<E3828A>シ啗HO 2000 笏?笏? 笏?笏? [蛻<>困荳コ荳ュ蝗ス譬<EFBDBD><E8ADAC>?笆シ] 笏?笏? 笏?笏? 笳?閾ェ螳壻ケ牙<EFBDB9>轤ケ<E8BDA4>磯怙豕ィ譏惹セ晄紺<E69984>? 笏?笏? 笳?遲牙ョス/遲蛾「大<EFBDA2>邂ア<E98282>遺國<E981BA>丈シ壽此螟ア菫。諱ッ<E8ABB1>? 笏?笏? 笏?笏? [蜿匁カ<E58C81> [鬚<>ァ亥<EFBDA7>蟶ゾ [謇ァ陦珪 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?
|
||||
支持的临床标准:
|
||||
- BMI蛻<EFBFBD>アサ<EFBFBD>啗HO縲∽クュ蝗ス謌蝉ココ縲∝<EFBFBD>遶・譬<EFBFBD><EFBFBD>?- 陦蜴句<E89CB4>郤ァ<E983A4>哘SH/ESC鬮倩。蜴区欠蜊?- 閧セ蜉溯<E89C89>蛻<EFBFBD>悄<EFBFBD>哮DIGO CKD蛻<44>悄
|
||||
- 蟷エ鮴<EFBFBD><EFBFBD>扈<EFBFBD>シ啗HO譬<EFBFBD>㊥縲∽クエ蠎願ッ暮ェ悟クク逕?- 陦邉門<E98289>邀サ<E98280>哂DA邉門ーソ逞<EFBDBF>ッ頑妙譬<E5A699><E8ADAC>?```
|
||||
- BMI分类:WHO、中国成人、儿童标准
|
||||
- 血压分级:ESH/ESC高血压指南
|
||||
- 肾功能分期:KDIGO CKD分期
|
||||
- 年龄分组:WHO标准、临床试验常用
|
||||
- 血糖分类:ADA糖尿病诊断标准
|
||||
```
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 蜀<>スョ10+蟶ク逕ィ荳エ蠎頑<E8A08E><E9A091>㊥
|
||||
**实现要点**:
|
||||
- 内置10+常用临床标准
|
||||
- 可导出分类依据(供论文写作)
|
||||
- 謠千、コ遲牙ョス蛻<EFBDBD>ョア逧<EFBDB1>ア髯先?
|
||||
- 提示等宽分箱的局限性
|
||||
|
||||
---
|
||||
|
||||
#### 7.5 高级缺失值填补(优先级:中)
|
||||
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- MICE蛛<45>ョセ謨ー謐ョMAR<41>磯囂譛コ郛コ螟ア<E89E9F>会シ御ス<E5BEA1>クエ蠎頑焚謐ョ蟶ク荳コMNAR<41>磯撼髫乗惻郛コ螟ア<E89E9F>?- 逞<>ュ荳・驥肴ぅ閠<E38185>峩譏灘、ア隶ソ<E99AB6>育シコ螟ア髱樣囂譛コ<E8AD9B><EFBDBA>
|
||||
- 髴隕∵撫諢滓ァ蛻<EFBDA7><E89BBB>?
|
||||
**蜉溯<E89C89>謾ケ霑<EFBDB9>**<2A>?```
|
||||
蝨ィ邇ー譛?郛コ螟ア蛟シ蝪ォ陦?蜉溯<E89C89>荳ュ蠅槫刈<E6A7AB><E58888>
|
||||
**医学背景**:
|
||||
- MICE假设数据MAR(随机缺失),但临床数据常为MNAR(非随机缺失)
|
||||
- 病情严重患者更易失访(缺失非随机)
|
||||
- 需要敏感性分析
|
||||
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 郛コ螟ア蛟シ蝪ォ陦・<E999A6>亥現蟄ヲ荳鍋畑<E98D8B>? 笏?笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 騾画叫蛻暦シ喙FMA隸<41><E99AB8> 笆シ] [+] 笏?笏? 笏?笏? 蝪ォ陦・譁ケ豕包シ? 笏?笏? 笳?譛ォ谺。隗よオ句シ扈楢スャ<EFBDBD><EFBDAC>OCF<43>俄ュ<E4BF84> 笏?笏? 騾ら畑<E38289>夂コオ蜷第焚謐ョ<E8AC90>悟∞隶セ譌<EFBDBE>蜿伜<E89CBF>? 笏?笏? 笏?笏? 笳?蝓コ郤ソ隗よオ句シ扈楢スャ<EFBDBD><EFBDAC>OCF<43>? 笏?笏? 騾ら畑<E38289>壻ソ晏ョ井シー隶。<E99AB6>悟∞隶セ譌<EFBDBE>謾ケ蝟? 笏?笏? 笏?笏? 笳?譛蝮乗ュ蜀オ謠定。・<EFBDA1><EFBDA5>orst Case<73>? 笏?笏? 騾ら畑<E38289>壽撫諢滓ァ蛻<EFBDA7><E89BBB>? 笏?笏? 譛蝮丞シ<C280>喙0____] 笏?笏? 笏?笏? 笳?荳ュ菴肴<E88FB4>?蝮<>シ蝪ォ陦? 笏?笏? 笘托ク<E68998> 謖牙<E8AC96>扈<EFBFBD>。ォ陦? 笏?笏? 蛻<>サ<EFBFBD><EFBDBB><EFBFBD>喙諤ァ蛻ォ笆シ][蟷エ鮴<EFBDB4>サ<EFBFBD>名] 笏?笏? 笏?笏? 笳?螟夐㍾謠定。・<EFBDA1><EFBDA5>ICE<43>? 笏?笏? 笞<><E7AC9E><EFBFBD> 蛛<>ョセ謨ー謐ョMAR<41>碁怙譽鬪碁ら畑諤? 笏?笏? 笏?笏? 鬚<>ァ茨シ壼ー<E5A3BC>。ォ陦・ 32 荳ェ郛コ螟ア蛟? 笏?笏? 笏?笏? [蜿匁カ<E58C81> [謨乗─諤ァ蛻<EFBDA7>梵] [謇ァ陦珪 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?```
|
||||
**功能改进**:
|
||||
```
|
||||
在现有"缺失值填补"功能中增加:
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 譏守。ョ蜷<EFBDAE>婿豕慕噪騾ら畑蜑肴署
|
||||
- 謠蝉セ帶撫諢滓ァ蛻<EFBDA7>梵<EFBFBD>亥ッケ豈比ク榊酔譁ケ豕慕サ捺棡<E68DBA>?- 逕滓<E98095>蝪ォ陦・謚・蜻奇シ井セ幄ョコ譁<EFBDBA>婿豕募ュヲ謠剰ソー<EFBDBF><EFBDB0>
|
||||
┌─────────────────────────────────────┐
|
||||
│ 缺失值填补(医学专用) │
|
||||
├─────────────────────────────────────┤
|
||||
│ 选择列:[FMA评分 ▼] [+] │
|
||||
│ │
|
||||
│ 填补方法: │
|
||||
│ ● 末次观测值结转(LOCF)⭐ │
|
||||
│ 适用:纵向数据,假设无变化 │
|
||||
│ │
|
||||
│ ○ 基线观测值结转(BOCF) │
|
||||
│ 适用:保守估计,假设无改善 │
|
||||
│ │
|
||||
│ ○ 最坏情况插补(Worst Case) │
|
||||
│ 适用:敏感性分析 │
|
||||
│ 最坏值:[0____] │
|
||||
│ │
|
||||
│ ○ 中位数/均值填补 │
|
||||
│ ☑️ 按分组填补 │
|
||||
│ 分组列:[性别▼][年龄组▼] │
|
||||
│ │
|
||||
│ ○ 多重插补(MICE) │
|
||||
│ ⚠️ 假设数据MAR,需检验适用性 │
|
||||
│ │
|
||||
│ 预览:将填补 32 个缺失值 │
|
||||
│ │
|
||||
│ [取消] [敏感性分析] [执行] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**实现要点**:
|
||||
- 明确各方法的适用前提
|
||||
- 提供敏感性分析(对比不同方法结果)
|
||||
- 生成填补报告(供论文方法学描述)
|
||||
|
||||
---
|
||||
|
||||
#### 7.6 Codebook<EFBFBD>域焚謐ョ蟄怜<EFBFBD><EFBFBD>臥函謌撰シ井シ伜<EFBFBD>郤ァ<EFBFBD>壻クュ<EFBFBD>?
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- GCP<43>郁艮迚ゥ荳エ蠎願ッ暮ェ瑚エィ驥冗ョ。逅<EFBDA1>ァ<EFBFBD>激<EFBFBD>芽ヲ∵アょ庄霑ス貅ッ諤?- 譛溷<E8AD9B>隕∵アよ署萓帶焚謐ョ蟄怜<E89F84>
|
||||
- 莨ヲ逅<EFBDA6>ョ。譟・髴隕∝序驥剰ッエ譏?
|
||||
**蜉溯<E89C89>隶セ隶。**<2A>?```
|
||||
閾ェ蜉ィ逕滓<EFBFBD>謨ー謐ョ蟄怜<EFBFBD><EFBFBD>?
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏?蜿倬㍼蜷?笏?蜴溷序驥?笏?郛也<E9839B>∬ァ<E288AC><EFBDA7> 笏?蛻帛サコ譌カ髣エ笏?笏懌楳笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏?笏ら<E7AC8F>皮ゥカ荳ュ蠢<EFBDAD>狽遐皮ゥカ荳ュ蠢<EFBDAD><E8A0A2>?=鮟鷹セ呎ア? 笏?2-08 笏?笏<>郛也<E9839B><E4B99F> 笏? 笏?=螻ア荳<EFBDB1> 笏?0:30 笏?笏? 笏? 笏?=蟷ソ蟾<EFBDBF> 笏? 笏?笏懌楳笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏?笏<>MI蛻<49>アサ 笏<>MI 笏?=豁」蟶ク 笏?2-08 笏?笏? 笏? 笏?=雜<>㍾ 笏?0:35 笏?笏? 笏? 笏?=閧・閭<EFBDA5> 笏? 笏?笏? 笏? 笏ょ盾閠<E79BBE>シ啗HO 笏? 笏?笏披楳笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏?
|
||||
蟇シ蜃コ騾蛾。ケ<EFBFBD>?- Excel譬シ蠑擾シ亥クク逕ィ<E98095><EFBDA8>
|
||||
- Word譬シ蠑擾シ井シヲ逅<EFBDA6>冠蜻奇シ<E5A587>
|
||||
- CSV譬シ蠑擾シ<E693BE>PSS蟇シ蜈・<E89C88>?```
|
||||
#### 7.6 Codebook(数据字典)生成(优先级:中)
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 豈乗ャ。驥咲シ也<EFBDBC>?蛻<>ョア閾ェ蜉ィ譖エ譁ー
|
||||
**医学背景**:
|
||||
- GCP(药物临床试验质量管理规范)要求可追溯性
|
||||
- 期刊要求提供数据字典
|
||||
- 伦理审查需要变量说明
|
||||
|
||||
**功能设计**:
|
||||
```
|
||||
自动生成数据字典:
|
||||
|
||||
┌──────────────────────────────────────┐
|
||||
│ 变量名 │ 原变量 │ 编码规则 │ 创建时间│
|
||||
├────────┼────────┼──────────┼─────────┤
|
||||
│研究中心│研究中心│1=黑龙江 │12-08 │
|
||||
│_编码 │ │2=山东 │10:30 │
|
||||
│ │ │3=广州 │ │
|
||||
├────────┼────────┼──────────┼─────────┤
|
||||
│BMI分类 │BMI │1=正常 │12-08 │
|
||||
│ │ │2=超重 │10:35 │
|
||||
│ │ │3=肥胖 │ │
|
||||
│ │ │参考:WHO │ │
|
||||
└────────┴────────┴──────────┴─────────┘
|
||||
|
||||
导出选项:
|
||||
- Excel格式(常用)
|
||||
- Word格式(伦理报告)
|
||||
- CSV格式(SPSS导入)
|
||||
```
|
||||
|
||||
**实现要点**:
|
||||
- 每次重编码/分箱自动更新
|
||||
- 记录操作人和时间
|
||||
- 支持手动添加注释
|
||||
|
||||
---
|
||||
|
||||
#### 7.7 譬キ譛ャ遲幃画オ∫ィ句崟<EFBFBD>井シ伜<EFBFBD>郤ァ<EFBFBD>壻ス趣シ?
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- CONSORT螢ー譏手ヲ∵アよ冠蜻顔ュ幃画オ∫ィ?- 譛溷<E8AD9B>螳。遞ソ隕∵アよ署萓帶オ∫ィ句<EFBDA8>?- 譛牙勧莠主書邇ー遲幃蛾サ霎鷹漠隸ッ
|
||||
#### 7.7 样本筛选流程图(优先级:低)
|
||||
|
||||
**蜉溯<EFBFBD>隶セ隶。**<2A>?```
|
||||
蝨?鬮倡コァ遲幃?蜉溯<E89C89>荳ュ蠅槫刈<E6A7AB><E58888>
|
||||
**医学背景**:
|
||||
- CONSORT声明要求报告筛选流程
|
||||
- 期刊审稿要求提供流程图
|
||||
- 有助于发现筛选逻辑错误
|
||||
|
||||
**功能设计**:
|
||||
```
|
||||
在"高级筛选"功能中增加:
|
||||
|
||||
自动生成筛选流程:
|
||||
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 蜴溷ァ区焚謐ョ: 1000萓? 笏?笏披楳笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏? 竊?謗帝勁蟷エ鮴<EFBDB4><18蟯?笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 蜑ゥ菴<EFBDA9>: 950萓?(-50) 笏?笏披楳笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏? 竊?謗帝勁荳サ隕∫サ灘ア郛コ螟ア
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 蜑ゥ菴<EFBDA9>: 920萓?(-30) 笏?笏披楳笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏? 笏? 竊?謗帝勁驥榊、崎ョー蠖<EFBDB0>
|
||||
笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?笏? 譛扈育コウ蜈? 910萓? 笏?笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏?
|
||||
┌──────────────────────┐
|
||||
│ 原始数据: 1000例 │
|
||||
└──────┬───────────────┘
|
||||
│
|
||||
↓ 排除年龄<18岁
|
||||
┌──────────────────────┐
|
||||
│ 剩余: 950例 (-50) │
|
||||
└──────┬───────────────┘
|
||||
│
|
||||
↓ 排除主要结局缺失
|
||||
┌──────────────────────┐
|
||||
│ 剩余: 920例 (-30) │
|
||||
└──────┬───────────────┘
|
||||
│
|
||||
↓ 排除重复记录
|
||||
┌──────────────────────┐
|
||||
│ 最终纳入: 910例 │
|
||||
└──────────────────────┘
|
||||
|
||||
[导出为图片] [导出为Word]
|
||||
```
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 隶ー蠖墓ッ乗ュ・遲幃臥噪譚。莉カ蜥檎サ捺<EFBDBB>?- 逕滓<E98095>蜿ッ蜿題。ィ逧<EFBDA8>オ∫ィ句<EFBDA8>?- 謾ッ謖∝ッシ蜃コ荳コ鬮伜<E9ACAE>霎ィ邇<EFBDA8>崟迚?
|
||||
**实现要点**:
|
||||
- 记录每步筛选的条件和结果
|
||||
- 生成可发表的流程图
|
||||
- 支持导出为高分辨率图片
|
||||
|
||||
---
|
||||
|
||||
#### 7.8 謨ー謐ョ雍ィ驥乗冠蜻奇シ井シ伜<EFBFBD>郤ァ<EFBFBD>壻ス趣シ?
|
||||
**蛹サ蟄ヲ閭梧勹**<2A>?- 謨ー謐ョ雍ィ驥冗峩謗・蠖ア蜩咲<E89CA9>皮ゥカ扈楢ョコ
|
||||
- 髴隕∝惠蛻<E683A0>梵蜑崎ソ幄。瑚エィ驥剰ッ<E589B0>シ?- 譛溷<E8AD9B>隕∵アよ緒霑ー謨ー謐ョ雍ィ驥<EFBDA8>
|
||||
#### 7.8 数据质量报告(优先级:低)
|
||||
|
||||
**医学背景**:
|
||||
- 数据质量直接影响研究结论
|
||||
- 需要在分析前进行质量评估
|
||||
- 期刊要求描述数据质量
|
||||
|
||||
**功能设计**:
|
||||
```
|
||||
点击"生成数据质量报告":
|
||||
|
||||
**蜉溯<E89C89>隶セ隶。**<2A>?```
|
||||
轤ケ蜃サ"逕滓<E98095>謨ー謐ョ雍ィ驥乗冠蜻<E586A0>"<22>?
|
||||
生成PDF报告,包含:
|
||||
1. 数据概况
|
||||
- 样本量、变量数
|
||||
- 数据收集时间跨度
|
||||
|
||||
2. 螳梧紛諤ァ蛻<EFBFBD><EFBFBD>? - 蜷<>序驥冗シコ螟ア邇<EFBDB1>
|
||||
2. 完整性分析
|
||||
- 各变量缺失率
|
||||
- 缺失模式(MCAR/MAR/MNAR检验)
|
||||
|
||||
3. 荳閾エ諤ァ譽譟? - 騾サ霎鷹漠隸ッ<E99AB8>亥ヲゑシ壼<EFBDBC>逕滓律譛?豁サ莠。譌・譛滂シ? - 驥榊、崎ョー蠖<EFBDB0>
|
||||
3. 一致性检查
|
||||
- 逻辑错误(如:出生日期>死亡日期)
|
||||
- 重复记录
|
||||
|
||||
4. 分布分析
|
||||
- 连续变量分布(直方图+Q-Q图)
|
||||
- 蛻<EFBFBD>アサ蜿倬㍼鬚第焚陦?
|
||||
5. 蠑ょクク蛟シ譽豬? - 邂ア郤ソ蝗? - 蠑ょクク蛟シ蛻苓。?
|
||||
- 分类变量频数表
|
||||
|
||||
5. 异常值检测
|
||||
- 箱线图
|
||||
- 异常值列表
|
||||
|
||||
6. 建议操作
|
||||
- 需要处理的问题清单
|
||||
- 莨伜<EFBFBD>郤ァ謗貞コ?```
|
||||
- 优先级排序
|
||||
```
|
||||
|
||||
**螳樒鴫隕∫せ**<2A>?- 閾ェ蜉ィ逕滓<E98095>蜿ッ蜿題。ィ逧<EFBDA8>。ィ譬シ/蝗?- 謾ッ謖∝ッシ蜃コ荳コWord/PDF
|
||||
**实现要点**:
|
||||
- 自动生成可发表的表格/图
|
||||
- 支持导出为Word/PDF
|
||||
- 符合临床研究报告规范
|
||||
|
||||
---
|
||||
|
||||
### 实施计划
|
||||
|
||||
| 蜉溯<EFBFBD> | 莨伜<E88EA8>郤?| 鬚<>ョ。蟾・譌カ | 隶。蛻呈慮髣エ |
|
||||
| 功能 | 优先级 | 预计工时 | 计划时间 |
|
||||
|------|--------|---------|---------|
|
||||
| 7.1 蠑ょクク蛟シ譽豬句勣 | 鬮?| 2螟?| Phase 4 |
|
||||
| 7.2 蜊穂ス崎スャ謐「蝎?| 鬮?| 1.5螟?| Phase 4 |
|
||||
| 7.3 譌・譛溯ョ。邂怜<EFBFBD>?| 鬮?| 2螟?| Phase 4 |
|
||||
| 7.4 荳エ蠎頑穐譁ュ蛟シ蛻<EFBFBD>ョ?| 荳?| 1螟?| Phase 3蠅槫シコ |
|
||||
| 7.5 鬮倡コァ郛コ螟ア蛟シ蝪ォ陦?| 荳?| 1.5螟?| Phase 3蠅槫シコ |
|
||||
| 7.6 Codebook逕滓<EFBFBD> | 荳?| 1螟?| Phase 5 |
|
||||
| 7.7 遲幃画オ∫ィ句崟 | 菴?| 1.5螟?| Phase 5 |
|
||||
| 7.8 謨ー謐ョ雍ィ驥乗冠蜻<EFBFBD> | 菴?| 2螟?| Phase 5 |
|
||||
| 7.1 异常值检测器 | 高 | 2天 | Phase 4 |
|
||||
| 7.2 单位转换器 | 高 | 1.5天 | Phase 4 |
|
||||
| 7.3 日期计算器 | 高 | 2天 | Phase 4 |
|
||||
| 7.4 临床截断值分箱 | 中 | 1天 | Phase 3增强 |
|
||||
| 7.5 高级缺失值填补 | 中 | 1.5天 | Phase 3增强 |
|
||||
| 7.6 Codebook生成 | 中 | 1天 | Phase 5 |
|
||||
| 7.7 筛选流程图 | 低 | 1.5天 | Phase 5 |
|
||||
| 7.8 数据质量报告 | 低 | 2天 | Phase 5 |
|
||||
|
||||
**总计**:12.5天工时
|
||||
|
||||
**諤サ隶。**<2A>?2.5螟ゥ蟾・譌?
|
||||
---
|
||||
|
||||
### TD-C-008: 自定义函数库
|
||||
|
||||
**諢ソ譎ッ**: 逕ィ謌キ蜿ッ菫晏ュ伜クク逕ィ莉」遐∽クコ蜃ス謨ー<EFBFBD>御ク髞ョ螟咲<EFBFBD>?
|
||||
**愿景**: 用户可保存常用代码为函数,一键复用
|
||||
|
||||
```python
|
||||
# 用户保存的自定义函数
|
||||
my_functions = {
|
||||
"陦蜴句<E89CB4>邀?: "df['bp_category'] = ...",
|
||||
"血压分类": "df['bp_category'] = ...",
|
||||
"年龄分组": "df['age_group'] = ...",
|
||||
}
|
||||
|
||||
# 荳髞ョ蠎皮<EFBFBD>?apply_function("陦蜴句<E89CB4>邀?)
|
||||
# 一键应用
|
||||
apply_function("血压分类")
|
||||
```
|
||||
|
||||
---
|
||||
@@ -475,8 +739,9 @@ my_functions = {
|
||||
|
||||
**愿景**: 多人协作数据清洗
|
||||
|
||||
- 譚<>剞邂。逅<EFBDA1>シ壽衍逵?郛冶セ<E586B6>/螳。譬ク
|
||||
- 謫堺ス懈律蠢暦シ夊ー∝惠莉荵域慮蛟吝★莠<E29885>サ荵?- 隸<>ョコ蜉溯<E89C89><E6BAAF>壼ッケ迚ケ螳壽桃菴懈キサ蜉<EFBDBB>螟<EFBFBD>ウィ
|
||||
- 权限管理:查看/编辑/审核
|
||||
- 操作日志:谁在什么时候做了什么
|
||||
- 评论功能:对特定操作添加备注
|
||||
|
||||
---
|
||||
|
||||
@@ -486,9 +751,9 @@ my_functions = {
|
||||
|
||||
```python
|
||||
quality_check = {
|
||||
"蜿醍鴫23荳ェ蠑ょクク蛟?: "蟒コ隶ョ菴ソ逕ィ蠑ょクク蛟シ譽豬句勣",
|
||||
"蟷エ鮴<EFBDB4><E9AEB4>郛コ螟?2%": "蟒コ隶ョ菴ソ逕ィLOCF蝪ォ陦・",
|
||||
"BMI譛ェ蛻<EFBDAA>ア?: "蟒コ隶ョ菴ソ逕ィWHO譬<4F>㊥蛻<E38AA5>ョア",
|
||||
"发现23个异常值": "建议使用异常值检测器",
|
||||
"年龄列缺失32%": "建议使用LOCF填补",
|
||||
"BMI未分类": "建议使用WHO标准分箱",
|
||||
}
|
||||
```
|
||||
|
||||
@@ -498,25 +763,37 @@ quality_check = {
|
||||
|
||||
### 按优先级
|
||||
- P0: 1项(前端UI,阻塞发布)
|
||||
- P1: 2鬘ケ<EFBFBD><EFBFBD>ession謖∽ケ<EFBFBD>喧縲 ̄rompt莨伜喧<EFBFBD>?- P2: 3鬘ケ<E9AC98>育沿譛ャ邂。逅<EFBDA1>∝、ァ譁<EFBDA7>サカ縲∝、肴揩蝨コ譎ッ莨伜喧<E4BC9C><E596A7>
|
||||
- P3: 4鬘ケ<EFBFBD>磯柄譛溯ァ<EFBFBD><EFBFBD> + 蛹サ蟄ヲ荳謎ク壼粥閭ス蠅槫シコ<EFBDBC>?
|
||||
### 謖牙キ・譌?- 0.5螟? 1鬘ケ<E9AC98>亥、肴揩蝨コ譎ッ莨伜喧<E4BC9C>?- 1螟? 1鬘ケ<E9AC98><EFBDB9>ession謖∽ケ<E288BD>喧<EFBFBD><E596A7>
|
||||
- 1-2螟? 2鬘ケ<E9AC98>育沿譛ャ邂。逅<EFBDA1>∝、ァ譁<EFBDA7>サカ<EFBDBB>?- 3螟ゥ莉・荳? 1鬘ケ<E9AC98>亥燕遶ッUI<55>?- 謖∫サュ莨伜喧: 1鬘ケ<E9AC98><EFBDB9>rompt莨伜喧<E4BC9C>?- **蛹サ蟄ヲ荳謎ク壼粥閭ス**: 12.5螟ゥ<EFBFBD><EFBFBD>8荳ェ蟄仙粥閭ス<EFBFBD>?
|
||||
- P1: 2项(Session持久化、Prompt优化)
|
||||
- P2: 3项(版本管理、大文件、复杂场景优化)
|
||||
- P3: 4项(长期规划 + 医学专业功能增强)
|
||||
|
||||
### 按工时
|
||||
- 0.5天: 1项(复杂场景优化)
|
||||
- 1天: 1项(Session持久化)
|
||||
- 1-2天: 2项(版本管理、大文件)
|
||||
- 3天以上: 1项(前端UI)
|
||||
- 持续优化: 1项(Prompt优化)
|
||||
- **医学专业功能**: 12.5天(8个子功能)
|
||||
|
||||
### 总计
|
||||
- **謚譛ッ蛟コ蜉。諤サ謨ー**: 13鬘ケ<E9AC98>亥性蛹サ蟄ヲ荳謎ク壼粥閭?荳ェ蟄宣。ケ<EFBDA1><EFBDB9>
|
||||
- **霑第悄蠢<EFBFBD>★**: 4鬘ケ<EFBFBD><EFBFBD>0-P1 + 螟肴揩蝨コ譎ッ<EFBFBD>?- **鬚<>ョ。諤サ蟾・譌?*: ~23-25螟? - MVP逶ク蜈ウ<E89C88>嘸10.5-12.5螟? - 蛹サ蟄ヲ荳謎ク壼「槫シコ<EFBDBC>嘸12.5螟?
|
||||
- **技术债务总数**: 13项(含医学专业功能8个子项)
|
||||
- **近期必做**: 4项(P0-P1 + 复杂场景)
|
||||
- **预计总工时**: ~23-25天
|
||||
- MVP相关:~10.5-12.5天
|
||||
- 医学专业增强:~12.5天
|
||||
|
||||
---
|
||||
|
||||
## 🔄 更新记录
|
||||
|
||||
| 譌・譛<EFBFBD> | 迚域悽 | 譖エ譁ー蜀<EFBDB0>ョケ | 譖エ譁ー莠?|
|
||||
| 日期 | 版本 | 更新内容 | 更新人 |
|
||||
|------|------|---------|--------|
|
||||
| 2025-12-08 | V1.2 | 譁ー蠅杁D-C-007<EFBFBD>亥現蟄ヲ荳謎ク壼粥閭ス蠅槫シ?鬘ケ<E9AC98><EFBDB9> | AI Assistant |
|
||||
| 2025-12-07 | V1.1 | 譁ー蠅杁D-C-006<EFBFBD>亥、肴揩蝨コ譎ッPrompt莨伜喧<EFBFBD>?| AI Assistant |
|
||||
| 2025-12-06 | V1.0 | 蛻晏ァ句<EFBFBD>蟒コ<EFBFBD>轡ay 3 MVP螳梧<E89EB3>蜷取「ウ逅?| AI Assistant |
|
||||
| 2025-12-08 | V1.2 | 新增TD-C-007(医学专业功能增强8项) | AI Assistant |
|
||||
| 2025-12-07 | V1.1 | 新增TD-C-006(复杂场景Prompt优化) | AI Assistant |
|
||||
| 2025-12-06 | V1.0 | 初始创建,Day 3 MVP完成后梳理 | AI Assistant |
|
||||
|
||||
---
|
||||
|
||||
**譁<EFBFBD>。」迥カ諤?*: 笨?蟾イ譖エ譁?
|
||||
**文档状态**: ✅ 已更新
|
||||
**下次更新**: Phase 4开发完成后
|
||||
|
||||
|
||||
Reference in New Issue
Block a user