# ASL 模块任务分解（To-do List）

> **文档版本：** V3.2  
> **创建日期：** 2025-11-16  
> **适用阶段：** MVP（标题摘要初筛）  
> **预计周期：** 4 周  
> **最后更新：** 2025-11-21  
> **⭐ 重要：基于真实架构（Frontend-v2 + Backend + asl_schema）**  
> **📊 MVP核心功能进度：** ✅ 100% 完成（Week 1-3 提前完成）  
> **📊 质量优化进度：** 🔄 60% 完成（准确率60%，目标85%）

---

## 📋 使用说明

本文档是 **ASL 标题摘要初筛模块** 的详细任务分解清单，基于 **真实的架构基础**：
- ✅ Frontend-v2（顶部导航 + 模块注册）- Week 2 已完成
- ✅ Backend 增量演进（legacy/ + common/ + modules/）- Week 2 已完成
- ✅ 数据库 10个Schema隔离 - Week 1 已完成

**任务状态标记**：
- `[ ]` - 待开始
- `[🔄]` - 进行中
- `[✅]` - 已完成
- `[❌]` - 已取消/跳过

---

## 🌥️ 云原生开发要求（2025-11-16 新增）

> **⭐ 重要提醒**：所有任务必须遵循云原生开发规范  
> **详细规范**：[云原生开发规范](../../../04-开发规范/08-云原生开发规范.md)

### 核心要求

| 要求 | 说明 |
|------|------|
| ✅ **存储抽象层** | 使用 `StorageFactory`，支持本地/OSS切换 |
| ✅ **内存解析** | Excel导入使用 `xlsx.read(buffer)`，不落盘 |
| ✅ **异步任务** | LLM筛选必须异步处理（> 10秒） |
| ✅ **环境变量** | 所有配置从 `.env` 读取 |
| ✅ **数据库连接池** | 使用全局 `prisma` 实例 |
| ✅ **OSS字段预留** | `pdfUrl`, `pdfOssKey`, `pdfFileSize` |

### 每日检查清单

提交代码前必须确认：
- [ ] 是否使用存储抽象层？
- [ ] 是否避免文件落盘？
- [ ] 是否使用全局 prisma 实例？
- [ ] 是否所有配置都从环境变量读取？
- [ ] 长时间任务是否异步处理？

---

## 🗓️ Week 1: 数据库Schema与后端API框架（Day 1-5）✅ 已完成

**完成日期**: 2025-11-18  
**实际耗时**: 1天（提前4天）  
**完成报告**: [Week 1完成报告](../05-开发记录/2025-11-18-Week1完成报告.md)  
**API测试**: [ASL-API测试报告](../../../../backend/ASL-API-测试报告.md)

### Day 1: Prisma Schema 设计 ✅

#### 数据库任务

- [✅] **T1.1.1** 设计 asl_schema 表结构
  - 文件：`backend/prisma/schema.prisma`
  - 新增4个模型：
    - `AslScreeningProject`（筛选项目表）
    - `AslLiterature`（文献条目表）
    - `AslScreeningResult`（筛选结果表）
    - `AslScreeningTask`（筛选任务表）
  - 使用 `@@schema("asl_schema")` 指定Schema
  - **⭐ 新增要求（云原生）**：在 `AslLiterature` 中添加 OSS 字段
    - `pdfUrl String? @map("pdf_url")` - PDF访问URL
    - `pdfOssKey String? @map("pdf_oss_key")` - OSS存储Key
    - `pdfFileSize Int? @map("pdf_file_size")` - 文件大小（字节）
    - 说明：MVP阶段预留，V1.0阶段使用
  - 预计耗时：2 小时
  - 负责人：后端开发
  - 参考：`02-标题摘要初筛开发计划.md` Week 1 Day 1

- [✅] **T1.1.2** 在 User 模型中添加关联
  ```prisma
  // backend/prisma/schema.prisma - User模型添加
  aslProjects AslScreeningProject[] @relation("AslProjects")
  ```
  - 实际耗时：5 分钟
  - 完成人：AI Assistant

- [✅] **T1.1.3** 运行 Prisma 迁移
  ```bash
  cd backend
  npx tsx scripts/create-asl-tables.ts  # 手动SQL创建
  ```
  - 实际耗时：10 分钟
  - 完成人：AI Assistant

- [✅] **T1.1.4** 生成 Prisma Client
  ```bash
  npx prisma generate
  ```
  - 实际耗时：3 分钟
  - 完成人：AI Assistant

- [✅] **T1.1.5** 验证数据库表创建
  - 使用脚本验证数据库
  - 检查 asl_schema 下的4个表 ✅
  - 检查索引和外键 ✅
  - 实际耗时：5 分钟
  - 完成人：AI Assistant

**Day 1 验收标准** ✅：
- ✅ asl_schema 4张表创建成功
- ✅ Prisma Client 生成无错误
- ✅ 可查询 asl_schema 表

---

### Day 2: 后端目录结构创建 ✅

> **⭐ 前置条件（2025-11-17 更新）**：平台基础设施已完成实施 ✅  
> **完成状态**：8个核心模块，100%测试通过  
> **完成报告**：[平台基础设施实施完成报告](../../../08-项目管理/03-每周计划/2025-11-17-平台基础设施实施完成报告.md)  
> **使用指南**：[backend/src/common/README.md](../../../../backend/src/common/README.md)

#### 平台已提供的8个核心模块（ASL模块无需实现）

**平台基础设施已完成（2025-11-17）**：

| # | 服务 | 路径 | 使用方式 | 说明 |
|---|------|------|---------|------|
| 1 | 存储服务 | `common/storage/` | `import { storage } from '@/common/storage'` | 文件上传下载（本地/OSS切换） |
| 2 | 日志系统 | `common/logging/` | `import { logger } from '@/common/logging'` | 结构化JSON日志 |
| 3 | 缓存服务 | `common/cache/` | `import { cache } from '@/common/cache'` | 内存/Redis缓存 |
| 4 | 异步任务 | `common/jobs/` | `import { jobQueue } from '@/common/jobs'` | 长时间任务处理 |
| 5 | 健康检查 | `common/health/` | `import { registerHealthRoutes } from '@/common/health'` | SAE健康检查 |
| 6 | 监控指标 | `common/monitoring/` | `import { Metrics } from '@/common/monitoring'` | 性能监控和告警 |
| 7 | 数据库连接池 | `config/database.ts` | `import { prisma } from '@/config/database'` | 全局Prisma实例 |
| 8 | 环境配置 | `config/env.ts` | `import { env } from '@/config/env'` | 统一配置管理 |

**示例代码**：
```typescript
// ASL模块直接使用平台服务
import { storage, logger, cache, jobQueue } from '@/common'
import { prisma } from '@/config/database'
import { Metrics } from '@/common/monitoring'

// 上传文件
const url = await storage.upload('asl/literature/123.pdf', pdfBuffer)

// 记录日志
logger.info('Literature uploaded', { projectId, url })

// 缓存数据
await cache.set(`project:${projectId}`, data, 3600)

// 创建异步任务
const job = await jobQueue.push('asl:screening', { projectId })

// 记录监控指标
Metrics.recordAPIResponseTime('POST', '/api/v1/asl/screening', 200, 150)
```

**⚠️ 禁止的操作（必须遵守）**：

| 禁止操作 | 正确做法 | 原因 |
|---------|---------|------|
| `fs.writeFileSync()` | 使用 `storage.upload()` | Serverless容器重启丢失文件 |
| `new PrismaClient()` | 使用全局 `prisma` 实例 | 避免连接数暴增（已配置连接池） |
| 硬编码配置 | 使用 `process.env` 或 `env` | 配置管理混乱 |
| 同步处理LLM批量任务 | 使用 `jobQueue.push()` | 避免Serverless超时 |
| 直接使用 `console.log()` | 使用 `logger.info()` | 日志格式标准化 |
| 自己实现缓存逻辑 | 使用 `cache.set()` / `cache.get()` | 平台已提供分布式缓存 |

---

#### 后端任务

- [✅] **T1.2.1** 创建 ASL 模块目录结构
  ```bash
  cd backend/src/modules
  mkdir -p asl/{routes,controllers,services,schemas,types,utils}
  ```
  - 预计耗时：5 分钟
  - 负责人：后端开发

- [ ] **T1.2.2** 创建路由文件
  - `routes/index.ts` - 路由注册
  - 实现占位函数（返回404或空数组）
  - 预计耗时：30 分钟
  - 负责人：后端开发

- [ ] **T1.2.3** 创建控制器文件
  - `controllers/projectController.ts` - 项目控制器
  - `controllers/literatureController.ts` - 文献控制器
  - `controllers/screeningController.ts` - 筛选控制器
  - 创建占位函数（每个控制器5-7个函数）
  - 预计耗时：1 小时
  - 负责人：后端开发

- [ ] **T1.2.4** 创建服务层文件
  - `services/projectService.ts` - 项目业务逻辑
  - `services/literatureService.ts` - 文献业务逻辑
  - `services/llmScreeningService.ts` - LLM筛选服务
  - 预计耗时：30 分钟
  - 负责人：后端开发

- [✅] **T1.2.5** 创建类型定义文件
  ```typescript
  // types/screening.types.ts
  export interface Literature { ... }
  export interface ScreeningResult { ... }
  export interface Protocol { ... }
  ```
  - 预计耗时：30 分钟
  - 负责人：后端开发

**Day 2 验收标准** ✅：
- ✅ ASL 模块目录结构完整（5个子目录，9个文件）
- ✅ 所有占位文件创建完成
- ✅ **可正常使用平台服务（8个核心模块）**：
  - ✅ `import { storage } from '@/common/storage'` 可用
  - ✅ `import { logger } from '@/common/logging'` 可用
  - ✅ `import { cache } from '@/common/cache'` 可用
  - ✅ `import { jobQueue } from '@/common/jobs'` 可用
  - ✅ `import { prisma } from '@/config/database'` 可用
  - ✅ `import { Metrics } from '@/common/monitoring'` 可用

---

### Day 3: 注册ASL路由 ✅

#### 后端任务

- [✅] **T1.3.1** 实现 `routes/index.ts`
  - 注册所有API路由
  - 参考 `legacy/routes/` 的风格
  - 预计耗时：1 小时
  - 负责人：后端开发
  - 参考：`02-标题摘要初筛开发计划.md` Week 1 Day 2

- [✅] **T1.3.2** 在 `src/index.ts` 中注册ASL路由
  ```typescript
  import { aslRoutes } from './modules/asl/routes/index.js'
  await app.register(aslRoutes, { prefix: '/api/v1/asl' })
  console.log('✅ ASL 路由已注册到 /api/v1/asl/*')
  ```
  - 预计耗时：10 分钟
  - 负责人：后端开发

- [✅] **T1.3.3** 测试路由可访问性
  ```bash
  # 启动后端服务
  cd backend && npm run dev
  # 测试健康检查
  curl http://localhost:3001/api/v1/asl/projects
  ```
  - 预计耗时：10 分钟
  - 负责人：后端开发

**Day 3 验收标准** ✅：
- ✅ 后端服务正常启动
- ✅ ASL路由注册成功（/api/v1/asl）
- ✅ API可访问（10个端点）

---

### Day 4-5: 实现基础API ✅

#### 后端任务

- [✅] **T1.4.1** 实现 `projectService.ts`
  - `createProject(userId, data)` - 创建项目
  - `listProjects(userId)` - 获取项目列表
  - `getProject(projectId)` - 获取项目详情
  - 使用 Prisma Client 操作 asl_schema
  - 预计耗时：2 小时
  - 负责人：后端开发

- [✅] **T1.4.2** 实现 `projectController.ts`
  - `createProject` - 控制器
  - `listProjects` - 控制器
  - `getProject` - 控制器
  - 请求验证、响应格式化
  - 预计耗时：1.5 小时
  - 负责人：后端开发

- [✅] **T1.4.3** 实现 `literatureService.ts`
  - `importBatch(projectId, literatures)` - 批量导入
  - `listLiteratures(projectId, page, pageSize)` - 分页查询
  - 去重逻辑（基于DOI和标题）
  - 预计耗时：2 小时
  - 负责人：后端开发

- [✅] **T1.4.4** 实现 `literatureController.ts`
  - `importLiteratures` - 导入控制器
  - `listLiteratures` - 列表控制器
  - Excel数据验证
  - 预计耗时：1.5 小时
  - 负责人：后端开发

- [✅] **T1.4.5** API测试（完整测试脚本）
  - 创建 Postman 测试集合
  - 测试所有已实现的API
  - 预计耗时：1 小时
  - 负责人：后端开发

**Day 4-5 验收标准** ✅：
- ✅ 项目管理API可调用（5个接口）
- ✅ 文献导入API可调用（4个接口）
- ✅ 数据正确保存到 asl_schema
- ✅ 所有测试通过（7/7 - 100%）

---

## 🗓️ Week 2: LLM筛选核心（Day 6-10）✅ 已完成

**完成日期**: 2025-11-21  
**实际耗时**: 3天  
**完成报告**: [Prompt设计与测试完成报告](../05-开发记录/2025-11-18-Prompt设计与测试完成报告.md)  
**实际准确率**: 60%（目标85%，需优化）

### Day 6: JSON Schema 与提示词设计 ✅

#### 后端任务

- [✅] **T2.1.1** 定义 JSON Schema
  - 文件：`backend/src/modules/asl/schemas/screening.schema.ts`
  - 定义输出结构（decision, reason, confidence, pico）
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.1.2** 安装验证库
  ```bash
  cd backend
  npm install ajv
  ```
  - 实际耗时：5 分钟
  - 完成人：AI Assistant

- [✅] **T2.1.3** 编写 Schema 验证函数
  - 使用 `Ajv` 验证
  - 错误信息格式化
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T2.1.4** 设计提示词模板 v1.0.0
  - 文件：`backend/prompts/asl/screening/v1.0.0-mvp.txt`
  - 包含：PICO标准、纳排标准、输出格式
  - 实际耗时：4 小时
  - 完成人：AI Assistant + 用户

- [✅] **T2.1.5** 人工测试提示词
  - 手动调用 LLM（使用 10 篇样本）
  - 评估输出质量
  - 迭代优化提示词
  - 实际耗时：2 小时
  - 完成人：AI Assistant + 用户

**Day 6 验收标准** ✅：
- ✅ JSON Schema 定义完成
- ⚠️ 提示词人工测试准确率 60%（目标80%，需后续优化）

---

### Day 7: LLM 服务封装 ✅

#### 后端任务

- [✅] **T2.2.1** 创建 `llmScreeningService.ts`
  - 实际耗时：10 分钟
  - 完成人：AI Assistant

- [✅] **T2.2.2** 实现 `callModel` 方法
  - 调用 `LLMFactory.createLLM()`（复用 common/llm）
  - 设置参数（temperature: 0）
  - 错误处理
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.2.3** 实现 `parseModelOutput` 方法
  - JSON 解析（使用 `common/utils/jsonParser.js`）
  - Schema 验证
  - 格式化为 `ModelDecision`
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.2.4** 实现 `compareDecisions` 方法
  - 对比两个模型的 PICO 判断
  - 识别冲突字段（仅结论不一致）
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.2.5** 实现 `shouldReview` 方法
  - 自动分流规则
  - 置信度阈值（< 0.7）
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T2.2.6** 实现 `dualModelScreening` 方法
  - 并行调用两个模型（`Promise.all`）
  - 汇总结果
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.2.7** 单元测试
  - 测试 JSON 解析
  - 测试冲突检测
  - 测试分流规则
  - 实际耗时：2 小时
  - 完成人：AI Assistant

**Day 7 验收标准** ✅：
- ✅ 可成功调用 DeepSeek 和 Qwen3
- ✅ JSON Schema 验证通过率 100%
- ✅ 冲突检测准确（仅结论不一致）

---

### Day 8: 批量筛选任务管理 ✅

#### 后端任务

- [✅] **T2.3.1** 实现 `batchScreening` 方法
  - 串行处理（避免API限流）
  - 进度计算
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T2.3.2** 实现任务创建
  - `screeningService.startScreeningTask`
  - 初始化任务记录（AslScreeningTask表）
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.3.3** 实现任务状态更新
  - `screeningService.processLiteraturesInBackground`
  - 更新 processedItems, deepseekProcessed, qwenProcessed 等
  - 实际耗时：1.5 小时
  - 完成人：AI Assistant

- [✅] **T2.3.4** 实现结果保存
  - 单篇保存到 `AslScreeningResult` 表
  - 冲突检测（仅结论不一致）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T2.3.5** 错误处理和重试
  - 单篇失败不影响整体
  - 记录错误信息
  - 实际耗时：1 小时
  - 完成人：AI Assistant

**Day 8 验收标准** ✅：
- ✅ 可批量处理 199 篇文献（串行）
- ✅ 任务状态正确记录
- ✅ 结果正确保存到数据库
- ✅ 进度实时更新（每1条）

---

### Day 9: 筛选 API 开发 ✅

#### 后端任务

- [✅] **T2.4.1** 实现启动筛选 API
  - 自动在文献导入后启动（`literatureController.importLiteratures`）
  - 创建任务
  - **⭐ 云原生要求**：异步执行筛选（立即返回taskId，后台处理）
  - 避免请求超时（SAE默认30秒超时限制）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T2.4.2** 实现进度查询 API
  - `GET /api/v1/asl/projects/:projectId/screening-task`
  - 返回实时进度（总数、已处理、成功、冲突、失败、DS处理数、Qwen处理数）
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.4.3** 实现结果查询 API
  - `GET /api/v1/asl/projects/:projectId/screening-results`
  - 支持过滤（all, conflict, included, excluded, reviewed）
  - 分页（后端分页）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T2.4.4** 实现更新决策 API
  - `POST /api/v1/asl/screening-results/:resultId/review`
  - 人工复核提交
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T2.4.5** Postman 测试
  - 创建测试集合
  - 测试各种场景
  - 实际耗时：1 小时
  - 完成人：AI Assistant

**Day 9 验收标准** ✅：
- ✅ API 调用成功
- ✅ 任务可异步执行
- ✅ 进度查询实时准确（1秒轮询）

---

### Day 10: 后端集成测试 ✅

#### 后端任务

- [✅] **T2.5.1** 端到端测试（199篇文献）
  - 导入文献 → 自动启动筛选 → 查询结果
  - 实际耗时：1 小时执行 + 1小时分析
  - 完成人：AI Assistant + 用户

- [✅] **T2.5.2** 性能测试
  - 测试 199 篇文献筛选时间
  - 实际：约33-66分钟（串行处理）
  - 实际耗时：1 小时
  - 完成人：AI Assistant + 用户

- [✅] **T2.5.3** 质量评估
  - 计算准确率（对比金标准）
  - 计算双模型一致率
  - 计算冲突率
  - 实际耗时：2 小时
  - 完成人：AI Assistant + 用户
  - **结果**：准确率60%, 一致率70-100%, JSON验证率100%

- [✅] **T2.5.4** 修复 Bug
  - 修复字段映射问题（PICOS、模型名称）
  - 修复列表顺序问题
  - 修复进度显示问题
  - 实际耗时：3 小时
  - 完成人：AI Assistant

**Week 2 总验收标准** ⚠️ 部分达标：
- ✅ 可成功筛选 199 篇文献
- ⚠️ 准确率 60%（目标85%，需Prompt优化）
- ✅ 双模型一致率 70-100%
- ⚠️ 性能：199篇约33-66分钟（串行处理，可优化为并发）
- ✅ JSON Schema验证率100%

---

## 🗓️ Week 3: 前端模块开发（Day 11-15）✅ 已完成

**完成日期**: 2025-11-21  
**实际耗时**: 2天  
**完成报告**: [Week2-Day2完成报告](../05-开发记录/2025-11-19-Week2-Day2完成报告.md)  
**说明**: Week 3任务实际在Week 2完成

### Day 11: 前端模块结构创建 ✅

#### 前端任务

- [✅] **T3.1.1** 更新 `modules/asl/index.tsx`
  - 创建左侧导航布局（ASLLayout）
  - 7个主模块，标题摘要初筛含3个子页面
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T3.1.2** 创建 ASL 子目录
  ```bash
  cd frontend-v2/src/modules/asl
  mkdir pages components api hooks types utils
  ```
  - 实际耗时：5 分钟
  - 完成人：AI Assistant

- [✅] **T3.1.3** 创建路由配置
  - 直接在 `index.tsx` 中使用 `<Route>` 定义
  - 使用 `lazy()` 懒加载
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T3.1.4** 创建3个主页面
  - `pages/TitleScreeningSettings.tsx` - 设置与启动
  - `pages/ScreeningWorkbench.tsx` - 审核工作台
  - `pages/ScreeningResults.tsx` - 初筛结果（占位）
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T3.1.5** 测试路由
  - 启动前端：`cd frontend-v2 && npm run dev`
  - 访问 `http://localhost:3001/literature`
  - 确认顶部导航显示"AI智能文献"
  - 实际耗时：10 分钟
  - 完成人：AI Assistant + 用户

**Day 11 验收标准** ✅：
- ✅ 顶部导航显示"AI智能文献"
- ✅ 左侧导航显示7个模块
- ✅ 点击后进入"设置与启动"页面

---

### Day 12: Excel 上传功能 ✅

#### 前端任务

- [✅] **T3.2.1** 安装依赖
  ```bash
  cd frontend-v2
  npm install xlsx
  ```
  - 实际耗时：5 分钟
  - 完成人：AI Assistant

- [✅] **T3.2.2** 创建 Excel上传组件
  - 集成在 `TitleScreeningSettings.tsx` 中
  - 文件选择（`antd Upload.Dragger`）
  - 文件类型验证（.xls, .xlsx）
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T3.2.3** 实现 Excel 解析逻辑
  - 使用 `xlsx` 库解析
  - **⭐ 云原生要求**：内存解析 `xlsx.read(buffer)`，禁止落盘
  - 字段映射（Title/title → title，支持中英文）
  - 数据验证（title和abstract必填）
  - 文件：`utils/excelUtils.ts`
  - 实际耗时：3 小时
  - 完成人：AI Assistant

- [✅] **T3.2.4** 实现去重逻辑
  - 基于 DOI 去重（优先）
  - 基于标题去重（标准化，去空格/标点）
  - 去重统计展示
  - 文件：`utils/excelUtils.ts`
  - 实际耗时：1.5 小时
  - 完成人：AI Assistant

- [✅] **T3.2.5** 实现文献预览表格
  - 使用 `Ant Design Table`
  - 显示：序号、标题、摘要、作者、年份、期刊、PMID、DOI
  - 固定列宽、Tooltip显示全文
  - 无分页（内存中）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T3.2.6** 实现Excel模板下载
  - 生成包含字段说明的Excel模板
  - 两个Sheet：文献列表、字段说明
  - 实际耗时：1 小时
  - 完成人：AI Assistant

**Day 12 验收标准** ✅：
- ✅ 可成功上传 Excel 文件
- ✅ 解析后数据正确展示
- ✅ 去重功能正常（DOI优先，标题辅助）
- ✅ Excel模板下载正常

---

### Day 13: API 客户端封装 ✅

#### 前端任务

- [✅] **T3.3.1** 创建 API 客户端
  - `api/index.ts`
  - 使用 `fetch` + 统一错误处理
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T3.3.2** 实现项目 API
  - `createProject(data)`
  - `listProjects()`
  - `getProject(id)`
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T3.3.3** 实现文献 API
  - `importLiteratures(projectId, literatures)`
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T3.3.4** 实现筛选 API
  - `getScreeningTask(projectId)` - 获取任务进度
  - `getScreeningResultsList(projectId, params)` - 获取结果列表
  - `getScreeningResultDetail(resultId)` - 获取结果详情
  - `reviewScreeningResult(resultId, data)` - 人工复核
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T3.3.5** 前后端联调
  - 测试所有API调用
  - 错误处理（统一message提示）
  - Loading 状态
  - 实际耗时：2 小时
  - 完成人：AI Assistant + 用户

**Day 13 验收标准** ✅：
- ✅ API 客户端可正常调用后端
- ✅ 上传Excel后数据保存到数据库
- ✅ 自动启动筛选任务

---

### Day 14-15: 审核工作台（核心UI）✅

#### 前端任务

- [✅] **T3.4.1** 实现 `ScreeningWorkbench` 页面
  - 任务进度显示（轮询1秒/次）
  - 双行表格结构（使用`rowSpan`）
  - 实际耗时：3 小时
  - 完成人：AI Assistant

- [✅] **T3.4.2** 实现表头
  - 序号、文献标题、结论、操作、模型、P、I、C、S
  - 压缩列宽、模型名缩写（DS/Qw）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T3.4.3** 实现主行（双行）
  - 点击标题展开/收起证据
  - 文献标题、DS和Qwen的PICO判断（单字母）
  - 冲突状态（红色背景）
  - 结论Tag（纳入/排除）
  - 实际耗时：4 小时
  - 完成人：AI Assistant

- [✅] **T3.4.4** 实现展开行
  - 显示DS和Qwen的详细PICOS判断、证据、理由
  - 两栏布局（左DS，右Qwen）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T3.4.5** 实现冲突高亮
  - 冲突行背景色浅红（仅结论不一致）
  - 冲突Tag显示
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T3.4.6** 实现复核Drawer
  - 使用 `Ant Design Drawer`（1000px宽）
  - 左侧70%：文献详情、模型判断、证据
  - 右侧30%：人工复核表单（sticky）
  - 实际耗时：4 小时
  - 完成人：AI Assistant

- [✅] **T3.4.7** 实现筛选Tab
  - 全部、冲突、已纳入、已排除、已复核
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T3.4.8** 实现分页
  - 后端分页（20条/页）
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

**Day 14-15 验收标准** ✅：
- ✅ 审核工作台完整可用
- ✅ 表格可正确展示筛选结果（双行）
- ✅ 冲突项高亮显示（红色背景）
- ✅ 复核Drawer可弹出并提交
- ✅ 进度实时更新（1秒轮询）
- ✅ 列表顺序与Excel上传一致

---

## 🗓️ Week 4: 结果展示与集成测试（Day 16-20）✅ 已完成

**完成日期**: 2025-11-21  
**实际耗时**: 1天（3小时）  
**完成报告**: [Week4完成报告](../05-开发记录/2025-11-21-Week4完成报告.md)  
**架构验证**: ✅ 完全符合云原生开发规范

### Day 16: 结果统计与展示 ✅

#### 前端任务

- [✅] **T4.1.1** 实现统计概览卡片
  - 4个卡片（总数、纳入、排除、待复核）
  - 使用 `Ant Design Statistic`
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T4.1.2** 实现 PRISMA 式排除总结
  - 按排除原因分组统计（后端聚合）
  - 柱状图展示（Progress组件）
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T4.1.3** 实现结果列表 Tab 页
  - 全部、已纳入、已排除、待复核 Tab
  - Tab数量动态显示
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T4.1.4** 实现结果表格（混合方案）
  - 列：序号、标题、AI共识、排除原因、人工最终决策、状态、操作
  - 可点击标题展开查看双模型详细判断
  - 总宽度870px（无需横向滚动）
  - 实际耗时：2 小时
  - 完成人：AI Assistant

- [✅] **T4.1.5** 实现后端统计API
  - GET /projects/:projectId/statistics
  - Prisma并行聚合查询
  - 实际耗时：1 小时
  - 完成人：AI Assistant

**Day 16 验收标准** ✅：
- ✅ 统计数据正确展示
- ✅ PRISMA 排除总结清晰
- ✅ 结果列表可正常查看
- ✅ 混合方案解决逻辑矛盾
- ✅ 云原生架构验证通过

---

### Day 17: Excel 导出功能

#### 后端任务

- [ ] **T4.2.1** 后端实现导出逻辑
  - 使用 `exceljs` 库
  - 生成 Excel 文件
  - 预计耗时：2 小时
  - 负责人：后端开发

- [ ] **T4.2.2** 实现导出 API
  - `GET /api/v1/asl/projects/:id/screening/results/export`
  - 支持过滤参数（导出全部/仅纳入/仅排除）
  - 预计耗时：1.5 小时
  - 负责人：后端开发

#### 前端任务

- [ ] **T4.2.3** 前端实现导出按钮
  - 调用导出 API
  - 下载文件
  - 预计耗时：1 小时
  - 负责人：前端开发

- [✅] **T4.2.1** 创建Excel导出工具
  - 文件：`utils/excelExport.ts`
  - 使用 `xlsx` 库（前端生成，零文件落盘）
  - 实际耗时：1.5 小时
  - 完成人：AI Assistant

- [✅] **T4.2.2** 实现导出功能
  - 导出统计摘要（2个Sheet）
  - 导出初筛结果（当前Tab）
  - 导出选中项
  - 实际耗时：1 小时
  - 完成人：AI Assistant

- [✅] **T4.2.3** Excel格式优化（混合方案）
  - 共40列完整信息
  - 包含AI共识、双模型详细判断、人工决策
  - 一行显示全部信息
  - 自动设置列宽
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

**Day 17 验收标准** ✅：
- ✅ 可成功导出 Excel（3种方式）
- ✅ 导出格式规范（40列）
- ✅ 数据完整准确
- ✅ 云原生：前端生成，零文件落盘

---

### Day 18: 完整流程测试 ✅

#### 集成测试任务

- [✅] **T4.3.1** 端到端完整流程测试
  - 上传 → 筛选 → 复核 → 统计 → 导出
  - 使用真实的 7 篇测试数据
  - 实际耗时：1 小时
  - 完成人：AI Assistant + 用户

- [✅] **T4.3.2** UI/UX优化
  - 修复逻辑矛盾（纳入不显示排除原因）
  - 实现混合方案（AI共识+人工决策）
  - 优化表格宽度（870px，无需滚动）
  - 实际耗时：1 小时
  - 完成人：AI Assistant + 用户

- [✅] **T4.3.3** 性能测试
  - 统计API：<500ms（199篇）
  - Excel导出：<3秒（199篇）
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

- [✅] **T4.3.4** 创建快速测试工具
  - `scripts/get-test-projects.mjs`
  - 自动推荐有数据的项目
  - 生成测试URL
  - 实际耗时：30 分钟
  - 完成人：AI Assistant

**Day 18 验收标准** ✅：
- ✅ 完整流程无阻塞
- ✅ 混合方案解决问题
- ✅ 性能达标
- ✅ 符合云原生规范

---

### Day 19: 质量验收

#### 质量验收任务

- [ ] **T4.4.1** 准确率测试
  - 使用金标准数据集（199 篇）
  - 计算准确率、召回率、F1
  - 目标：准确率 ≥ 85%
  - 预计耗时：2 小时
  - 负责人：AI工程师 + 医学专家

- [ ] **T4.4.2** 双模型一致性测试
  - 计算一致率
  - 目标：≥ 80%
  - 预计耗时：1 小时
  - 负责人：AI工程师

- [ ] **T4.4.3** JSON Schema 验证率测试
  - 统计验证通过率
  - 目标：≥ 95%
  - 预计耗时：30 分钟
  - 负责人：后端开发

- [ ] **T4.4.4** 人工复核队列测试
  - 统计需人工复核的比例
  - 目标：≤ 20%
  - 预计耗时：30 分钟
  - 负责人：AI工程师

- [ ] **T4.4.5** 根据测试结果优化
  - 调整提示词
  - 调整分流阈值
  - 预计耗时：3 小时
  - 负责人：AI工程师

**Day 19 验收标准**：
- ✅ 准确率 ≥ 85%
- ✅ 双模型一致率 ≥ 80%
- ✅ JSON Schema 验证通过率 ≥ 95%
- ✅ 人工复核队列 ≤ 20%

---

### Day 20: 文档与交付

#### 文档任务

- [ ] **T4.5.1** 编写用户手册
  - 功能介绍
  - 操作步骤
  - 常见问题
  - 预计耗时：3 小时
  - 负责人：产品经理

- [ ] **T4.5.2** 编写技术文档
  - 架构设计
  - API 文档
  - 数据库设计
  - 预计耗时：2 小时
  - 负责人：后端开发

- [ ] **T4.5.3** 编写测试报告
  - 测试用例
  - 测试结果
  - 质量指标
  - 预计耗时：2 小时
  - 负责人：测试

- [ ] **T4.5.4** 代码审查
  - 代码规范检查
  - 安全性检查
  - 性能检查
  - 预计耗时：2 小时
  - 负责人：技术 Leader

- [ ] **T4.5.5** 准备演示环境
  - 部署到测试环境
  - 准备演示数据
  - 预计耗时：1 小时
  - 负责人：运维

**Day 20 验收标准**：
- ✅ 文档完整
- ✅ 代码质量合格
- ✅ 测试报告完整
- ✅ 演示环境就绪

---

## 📊 总体验收清单（2025-11-21 更新）

### 功能完整性（MVP核心）

- [✅] 用户可上传 Excel 文件
- [✅] Excel 格式验证正常（中英文表头）
- [✅] 文献去重功能正常（DOI优先，标题辅助）
- [✅] AI 双模型筛选可运行（DeepSeek + Qwen）
- [✅] 冲突自动检测和标记（仅结论不一致）
- [✅] 人工复核界面完整（DetailReviewDrawer）
- [✅] 批量选择功能正常（Checkbox多选）
- [✅] 结果统计正确展示（统计概览+PRISMA排除分析）
- [✅] Excel 导出功能正常（3种导出方式）
- [✅] ASL模块在顶部导航显示并可点击
- [✅] 混合方案解决逻辑矛盾（AI决策+人工决策明确区分）

### 质量指标

- [⚠️] 准确率 60%（**目标85%，需Prompt优化**）
- [✅] 双模型一致率 70-100%
- [✅] JSON Schema 验证通过率 100%
- [⚠️] 人工复核队列 20-30%（目标≤20%）

### 性能指标

- [⚠️] 199 篇文献筛选 33-66 分钟（串行，**可优化为3-5并发**）
- [✅] Excel 上传响应 < 1 秒（内存解析）
- [✅] 页面加载 < 2 秒

### 架构验证

- [✅] ASL模块正确注册（左侧导航）
- [✅] 后端路由注册到 /api/v1/asl/*
- [✅] 数据保存到 asl_schema
- [✅] 复用 common/llm 成功（LLMFactory）
- [✅] Prisma Client 正常工作（全局实例）
- [✅] 云原生要求：内存解析Excel
- [✅] 云原生要求：异步处理筛选任务

---

---

## 🚀 Phase 2: 智能Prompt生成模块（Week 5-7）

> **前置条件**: MVP阶段（Week 1-4）完成  
> **开发周期**: 3周  
> **优先级**: P1（高级功能）  
> **详细设计**: [智能Prompt生成模块开发计划](../02-技术设计/07-智能Prompt生成模块开发计划.md)

### 核心目标

**解决问题**: 消除AI与人类对边界情况的理解差异

**核心流程**:
```
用户输入PICOS → AI分析边界情况 → 用户确认 → 生成自定义Prompt → 筛选
```

---

### 🗓️ Week 5: 后端开发（Day 21-25）

#### Day 21-22: PICOS分析服务

- [ ] **T5.1.1** 创建Prompt配置数据表
  - 文件：`backend/prisma/schema.prisma`
  - 新增模型：`PromptConfiguration`
  - 预计耗时：2小时

- [ ] **T5.1.2** 实现PICOS分析服务
  - 文件：`backend/src/modules/asl/services/picosAnalyzer.ts`
  - 功能：调用LLM分析PICOS，生成边界问题
  - 预计耗时：1天

- [ ] **T5.1.3** API: 分析PICOS
  - 路由：`POST /api/v1/asl/prompt/analyze`
  - 预计耗时：3小时

#### Day 23: Prompt生成服务

- [ ] **T5.2.1** 实现Prompt生成逻辑
  - 文件：`backend/src/modules/asl/services/promptGenerator.ts`
  - 预计耗时：1天

- [ ] **T5.2.2** API: 确认边界规则并生成Prompt
  - 路由：`POST /api/v1/asl/prompt/confirm-rules`
  - 预计耗时：2小时

#### Day 24: Prompt保存与使用

- [ ] **T5.3.1** API: 保存最终Prompt
  - 路由：`POST /api/v1/asl/prompt/save`
  - 预计耗时：3小时

- [ ] **T5.3.2** 修改筛选服务支持自定义Prompt
  - 新增参数：`customPromptOverride?: string`
  - 预计耗时：2小时

#### Day 25: 测试与优化

- [ ] **T5.4.1** 单元测试
  - 预计耗时：3小时

- [ ] **T5.4.2** 集成测试
  - 预计耗时：3小时

---

### 🗓️ Week 6: 前端开发（Day 26-30）

#### Day 26: PICOS输入界面

- [ ] **T6.1.1** 创建PICOS配置页面
  - 路径：`/asl/projects/:id/prompt-config`
  - 预计耗时：4小时

- [ ] **T6.1.2** PICOS输入表单组件
  - 7个输入字段
  - 预计耗时：4小时

#### Day 27-28: 用户确认界面

- [ ] **T6.2.1** AI理解展示组件
  - 显示必须纳入/排除的要素
  - 预计耗时：1天

- [ ] **T6.2.2** 边界问题确认组件
  - 逐个确认边界问题
  - 预计耗时：1天

#### Day 29: Prompt编辑器

- [ ] **T6.3.1** Prompt预览与编辑组件
  - 支持用户编辑和保存
  - 预计耗时：1天

#### Day 30: 集成与测试

- [ ] **T6.4.1** 完整流程集成
  - 预计耗时：3小时

- [ ] **T6.4.2** UI/UX优化
  - 预计耗时：3小时

---

### 🗓️ Week 7: 优化与上线（Day 31-35）

#### Day 31-32: 功能完善

- [ ] **T7.1.1** Prompt模板管理
  - 预计耗时：1天

- [ ] **T7.1.2** 在筛选任务中使用自定义Prompt
  - 预计耗时：4小时

#### Day 33: 测试

- [ ] **T7.2.1** 端到端测试
  - 预计耗时：1天

#### Day 34-35: 优化与上线

- [ ] **T7.3.1** 性能优化
  - 预计耗时：4小时

- [ ] **T7.3.2** 用户文档
  - 预计耗时：4小时

- [ ] **T7.3.3** 上线部署
  - 预计耗时：4小时

---

### Phase 2 验收标准

- [ ] 用户可以输入PICOS和纳排标准
- [ ] AI可以分析并生成5-8个边界问题
- [ ] 用户可以确认每个边界问题的处理方式
- [ ] 系统可以自动生成自定义Prompt
- [ ] 用户可以编辑生成的Prompt
- [ ] 筛选任务可以使用自定义Prompt
- [ ] Prompt生成准确率 ≥ 90%

---

## 📊 完整进度跟踪（2025-11-21 更新）

| 阶段 | Week | 任务 | 状态 | 完成时间 | 备注 |
|------|------|------|------|----------|------|
| **MVP** | Week 1 | 数据库+后端API | ✅ | 2025-11-18 | 提前4天完成 |
| **MVP** | Week 2 | LLM筛选核心 | ✅ | 2025-11-21 | 准确率60%，需优化 |
| **MVP** | Week 3 | 前端UI（设置+工作台） | ✅ | 2025-11-21 | 实际在Week 2完成 |
| **MVP** | Week 4 | 结果展示+导出 | ✅ | 2025-11-21 | **混合方案，云原生架构** |
| **MVP优化** | - | **Prompt优化** | 🔄 | - | **下一步：提升至85%** |
| **MVP优化** | - | 并发处理优化 | ⏸️ | - | 3-5并发，提升性能 |
| **Phase 2** | Week 5 | 智能Prompt后端 | ⬜ | - | 待MVP质量达标后开始 |
| **Phase 2** | Week 6 | 智能Prompt前端 | ⬜ | - | - |
| **Phase 2** | Week 7 | 优化+上线 | ⬜ | - | - |

---

## 📚 相关文档

- [开发里程碑](./01-开发里程碑.md)
- [标题摘要初筛开发计划](./02-标题摘要初筛开发计划.md)
- [质量保障策略](../02-技术设计/06-质量保障与可追溯策略.md)
- [技术选型](../02-技术设计/07-文献处理技术选型.md)
- [API 设计规范](../02-技术设计/02-API设计规范.md)
- [智能Prompt生成模块](../02-技术设计/07-智能Prompt生成模块开发计划.md) ⭐ **新增**
- [前后端模块化架构设计-V2](../../../00-系统总体设计/前后端模块化架构设计-V2.md)
- [Schema隔离架构设计](../../../09-架构实施/01-Schema隔离架构设计（10个）.md)

---

**更新日志**：
- 2025-11-21: V3.3 更新，Week 4功能完成（结果展示+Excel导出，混合方案解决逻辑矛盾）
- 2025-11-21: V3.2 更新，反映MVP核心功能完成状态（Week 1-3已完成，准确率60%需优化）
- 2025-11-18: V4.0 更新，整合智能Prompt生成模块（Phase 2: Week 5-7）
- 2025-11-18: V3.1 更新，补充平台基础设施完成状态（8个核心模块，禁止操作清单）
- 2025-11-16: V3.0 完全重写，基于真实架构（Frontend-v2 + Backend + asl_schema），详细到每个任务
- 2025-11-16: V2.0 完全重写，详细到每个任务（预计耗时、负责人、验收标准）
- 2025-10-29: V1.0 创建，初始占位符
