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:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

@@ -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>
# 存储到Redis10分钟过期
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諤ァ閭ス
- 10Few-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-5MBParquet压缩后
- 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: 2Session持久化、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个子项
- **近期必做**: 4P0-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开发完成后