Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/04-开发计划/MVP开发任务清单.md
HaHafeng dac3cecf78 feat(iit): Complete IIT Manager Agent Day 1 - Environment initialization and WeChat integration
Summary:
- Complete IIT Manager Agent MVP Day 1 (12.5% progress)
- Database: Create iit_schema with 5 tables (IitProject, IitPendingAction, IitTaskRun, IitUserMapping, IitAuditLog)
- Backend: Add module structure (577 lines) and types (223 lines)
- WeChat: Configure Enterprise WeChat app (CorpID, AgentID, Secret)
- WeChat: Obtain web authorization and JS-SDK authorization
- WeChat: Configure trusted domain (iit.xunzhengyixue.com)
- Frontend: Deploy v1.2 with WeChat domain verification file
- Frontend: Fix CRLF issue in docker-entrypoint.sh (CRLF -> LF)
- Testing: 11/11 database CRUD tests passed
- Testing: Access Token retrieval test passed
- Docs: Create module status and development guide
- Docs: Update MVP task list with Day 1 completion
- Docs: Rename deployment doc to SAE real-time status record
- Deployment: Update frontend internal IP to 172.17.173.80

Technical Details:
- Prisma: Multi-schema support (iit_schema)
- pg-boss: Job queue integration prepared
- Taro 4.x: Framework selected for WeChat Mini Program
- Shadow State: Architecture foundation laid
- Docker: Fix entrypoint script line endings for Linux container

Status: Day 1/14 complete, ready for Day 2 REDCap integration
2026-01-01 14:32:58 +08:00

656 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IIT Manager Agent MVP 开发任务清单
> **版本:** V1.1(基于架构评审修正版)
> **时间规划:** 2周10个工作日
> **目标:** 打通 REDCap → Node.js → 企微 的完整闭环
> **参考文档:** `02-技术设计/IIT Manager Agent 完整技术开发方案 (V1.1).md`
---
## 📅 Week 1基础连接层Day 1-5
### Day 1环境初始化8小时✅ **已完成2025-12-31 ~ 2026-01-01**
#### 数据库初始化4小时
- [x] 创建 `iit_schema` 数据库Schema
- [x] 编写 Prisma Schema
- [x] IitProject 表含V1.1新增字段cachedRules, lastSyncAt
- [x] IitPendingAction 表(影子状态)
- [x] IitTaskRun 表(任务管理)
- [x] IitUserMapping 表含V1.1新增字段miniProgramOpenId, sessionKey
- [x] IitAuditLog 表(审计日志)
- [x] 同步数据库:`npx prisma db push`
- [x] 生成 Prisma Client`npx prisma generate`
- [x] 验证编写测试CRUD操作`test-iit-database.ts`
**验收标准**
- ✅ 5个表全部创建成功
- ✅ Prisma Client可正常导入
- ✅ 测试脚本能执行CRUD11/11测试通过
**完成情况**
- ✅ Schema定义完整223行类型定义
- ✅ 数据库表创建成功
- ✅ CRUD操作验证通过
#### 企业微信初始化2小时
- [x] 注册企业微信开发者账号
- [x] 创建自建应用:`IIT Manager Agent`
- [x] 获取并保存凭证:
- [x] CorpID: `ww01cb7b72ea2db83c`
- [x] AgentID: `1000002`
- [x] Secret: `F3XqlAqKdcOKHi9pLGv5a2dSUowWbevdcDRrBk2pXLM`
- [x] 配置环境变量到后端 SAE
- [x] 测试获取Access Token成功
**验收标准**
- ✅ 企微账号注册成功
- ✅ 能成功获取Access Token
-**网页授权及JS-SDK授权已获取**
-**可信域名配置成功iit.xunzhengyixue.com**
**完成情况**
- ✅ 企业微信应用创建成功
- ✅ Access Token获取测试通过`test-wechat-push.ts`
- ✅ 前端域名验证文件部署成功v1.2
- ✅ 可信域名授权完成
#### 项目初始化2小时
- [x] 创建模块目录结构
```
backend/src/modules/iit-manager/
├── controllers/
├── services/
├── agents/
├── adapters/
├── routes/
└── types/
```
- [x] 配置路由前缀:`/api/v1/iit`
- [x] 配置健康检查端点
- [x] 创建基础类型定义223行
**验收标准**
- ✅ 目录结构完整
- ✅ 路由骨架已创建
- ✅ 类型定义完整
**完成情况**
- ✅ 模块目录结构创建完成
- ✅ `types/index.ts` 完整定义223行
- ✅ 路由骨架创建(`routes/index.ts`
- ✅ 主模块入口创建(`index.ts`
---
### 📊 Day 1 完成总结
**实际完成时间**2025-12-31 ~ 2026-01-01
**任务完成度**11/11100%
**关键成果**
1. ✅ 数据库Schema创建iit_schema5个表
2. ✅ Prisma Schema编写223行类型定义
3. ✅ 模块目录结构创建
4. ✅ 企业微信应用注册和配置
5. ✅ 企业微信Access Token获取成功
6. ✅ 企业微信可信域名配置成功iit.xunzhengyixue.com
7. ✅ 前端域名验证文件部署v1.2
**重要里程碑**
- 🎉 IIT Manager Agent模块正式启动
- 🎉 企业微信集成基础完成
- 🎉 网页授权及JS-SDK授权已获取
---
### Day 2REDCap拉取能力🔥 V1.1核心8小时⏳ **待开始**
#### REDCap API Adapter4小时
- [ ] 创建 `RedcapAdapter.ts`
- [ ] 实现 `exportRecords()` 方法
- [ ] 支持 `dateRangeBegin` 时间过滤
- [ ] 支持 `fields` 字段过滤
- [ ] 支持 `records` 记录过滤
- [ ] 实现 `importRecords()` 方法(回写数据)
- [ ] 实现 `exportMetadata()` 方法(获取字段定义)
- [ ] 配置超时和重试机制
- [ ] 编写单元测试
**验收标准**
- ✅ 能成功拉取REDCap数据测试项目
- ✅ 时间过滤功能正常
- ✅ 单元测试全部通过
#### SyncManager混合同步模式4小时
- [ ] 创建 `SyncManager.ts`
- [ ] 实现 `initializeSync()` 方法
- [ ] Webhook连通性测试
- [ ] 自动选择同步模式
- [ ] 实现 `schedulePolling()` 方法
- [ ] 使用 pg-boss 的 schedule 功能
- [ ] 配置轮询间隔5分钟或30分钟
- [ ] 实现 `handlePoll()` 方法
- [ ] 获取上次同步时间(缓存 + 数据库)
- [ ] 拉取增量数据
- [ ] 推送到质控队列
- [ ] 更新同步时间
- [ ] 实现幂等性保护(`isDuplicate()`
- [ ] 注册 Worker`iit:redcap:poll`
**验收标准**
- ✅ 轮询任务能正确调度pg-boss
- ✅ 能拉取增量数据(按时间过滤)
- ✅ 幂等性保护生效(不重复处理)
- ✅ 日志完整记录
---
### Day 3历史数据扫描🔥 V1.1功能补充8小时
#### BulkScanService全量扫描6小时
- [ ] 创建 `BulkScanService.ts`
- [ ] 实现 `scanAllRecords()` 方法
- [ ] 轻量级拉取所有 record_id
- [ ] 智能阈值判断(<50直接处理≥50队列
- [ ] 实现 `scanViaQueue()` 方法
- [ ] 创建 IitTaskRun 记录
- [ ] 任务拆分每批50条
- [ ] 推送批次任务
- [ ] 实现 `processBatch()` Worker
- [ ] 加载断点CheckpointService
- [ ] 逐个拉取完整数据
- [ ] 调用质控Agent
- [ ] 每10条保存断点
- [ ] 更新任务统计
- [ ] 实现 `scanDirectly()` 方法(小批量)
- [ ] 注册 Worker`iit:bulk-scan:batch`
**验收标准**
- ✅ 能扫描100条历史数据
- ✅ 断点续传功能正常(模拟中断)
- ✅ 任务进度可查询
- ✅ 大批量任务正确拆分
#### API端点2小时
- [ ] 创建 `POST /api/v1/iit/projects/:id/scan-all`
- [ ] 创建 `GET /api/v1/iit/tasks/:taskRunId/progress`
- [ ] 实现并发扫描检查(防止重复)
- [ ] 编写API文档Swagger
**验收标准**
- ✅ API端点可正常调用
- ✅ 进度查询返回正确数据
- ✅ 并发保护生效
---
### Day 4Webhook增强作为补充8小时
#### REDCap External Module4小时
- [ ] 创建EM目录结构
```
iit_manager_connector_v1.0.0/
├── config.json
├── IITManagerConnector.php
├── js/
│ └── ai_assistant.js
└── README.md
```
- [ ] 编写 `config.json`EM配置
- [ ] 实现 `IITManagerConnector.php`
- [ ] 实现 `redcap_save_record` Hook
- [ ] 实现 Webhook 推送
- [ ] HMAC-SHA256 签名
- [ ] 错误日志记录
- [ ] 本地测试Docker REDCap
**验收标准**
- ✅ EM可成功安装到REDCap
- ✅ 保存记录时触发Hook
- ✅ Webhook签名正确
#### Node.js Webhook接收器4小时
- [ ] 创建 `webhookController.ts`
- [ ] 实现 `handleRedcapWebhook()` 方法
- [ ] 验证签名HMAC-SHA256
- [ ] 防重放攻击5分钟有效期
- [ ] 立即返回200不阻塞REDCap
- [ ] 异步推送质控任务
- [ ] 实现 `verifyWebhookSignature()` 工具函数
- [ ] 配置路由:`POST /api/v1/iit/webhooks/redcap`
- [ ] 编写单元测试模拟Webhook
**验收标准**
- ✅ Webhook签名验证正确
- ✅ 响应时间 < 100ms
- ✅ 异步任务正确入队
- ✅ 单元测试全部通过
---
### Day 5企微集成与测试8小时
#### 企微适配器4小时
- [ ] 创建 `WeChatAdapter.ts`
- [ ] 实现 `getAccessToken()` 方法
- [ ] 调用企微API获取token
- [ ] 缓存到 Postgres7000秒
- [ ] 实现 `sendMessage()` 方法(卡片消息)
- [ ] 实现 `sendQualityAlert()` 方法(质控预警)
- [ ] 错误处理和重试机制
- [ ] 编写单元测试
**验收标准**
- ✅ Access Token可正确获取和缓存
- ✅ 能发送卡片消息到企微
- ✅ 质控预警格式正确
#### 端到端测试4小时
- [ ] 场景1Webhook模式测试
- [ ] REDCap保存记录 → Node.js收到Webhook
- [ ] 延迟 < 2秒
- [ ] 场景2轮询模式测试
- [ ] 手动修改REDCap数据 → 轮询拉取到
- [ ] 延迟 < 10分钟
- [ ] 场景3全量扫描测试
- [ ] 触发扫描 → 处理历史数据
- [ ] 断点续传正常
- [ ] 场景4企微通知测试
- [ ] 质控发现问题 → 企微收到卡片
- [ ] 延迟 < 5秒
- [ ] 编写测试报告
**验收标准**
- ✅ 4个场景全部通过
- ✅ 测试报告完成
- ✅ Week 1 里程碑达成
---
## 📅 Week 2AI智能质控Day 6-10
### Day 6-7Protocol服务与Dify集成16小时
#### ProtocolService8小时
- [ ] 创建 `ProtocolService.ts`
- [ ] 实现 `initializeProtocolKnowledgeBase()` 方法
- [ ] 上传Protocol PDF到OSS
- [ ] 调用Dify创建Dataset
- [ ] 上传文档到Dify
- [ ] 🔥 预提取关键规则V1.1性能优化)
- [ ] 缓存规则到 `cachedRules` 字段
- [ ] 实现 `extractKeyRules()` 方法(私有)
- [ ] 调用Dify提取入排标准
- [ ] 提取关键字段规则
- [ ] 解析JSON结构
- [ ] 实现 `checkProtocolCompliance()` 方法
- [ ] 优先使用缓存规则(快速路径)
- [ ] 复杂规则调用Dify RAG慢路径
- [ ] 解析AI响应
- [ ] 实现 `parseComplianceResult()` 方法
- [ ] 错误处理和降级策略
**验收标准**
- ✅ Protocol可成功上传到Dify
- ✅ 关键规则正确提取和缓存
- ✅ 简单规则检查 < 100ms
- ✅ 复杂规则检查 < 2秒
- ✅ Dify RAG准确率 > 80%
#### API端点2小时
- [ ] 创建 `POST /api/v1/iit/projects`(创建项目)
- [ ] 创建 `POST /api/v1/iit/projects/:id/protocol`上传Protocol
- [ ] 创建 `PUT /api/v1/iit/projects/:id/field-mappings`(配置映射)
- [ ] 编写API文档
**验收标准**
- ✅ API端点可正常调用
- ✅ 字段映射配置正确存储
#### Dify集成测试6小时
- [ ] 准备测试Protocol标准IIT方案
- [ ] 测试入排标准检索
- [ ] 年龄范围18-60岁
- [ ] 性别要求
- [ ] 必填字段
- [ ] 测试复杂规则检索
- [ ] 用药禁忌
- [ ] 合并症排除
- [ ] 调优Dify参数temperature, top_k等
- [ ] 记录测试结果和准确率
**验收标准**
- ✅ 简单规则准确率 > 95%
- ✅ 复杂规则准确率 > 80%
- ✅ 假阳性率 < 15%
---
### Day 8-9数据质控Agent16小时
#### DataQualityAgent10小时
- [ ] 创建 `DataQualityAgent.ts`
- [ ] 实现 `checkRecord()` 方法
- [ ] 获取项目配置字段映射、Dify DatasetId
- [ ] 提取关键字段值
- [ ] 逐个字段检查合规性
- [ ] 调用ProtocolService检查
- [ ] 收集所有问题
- [ ] 创建影子建议PROPOSED状态
- [ ] 发送企微通知(严重违背)
- [ ] 实现 `createPendingActions()` 方法(私有)
- [ ] 批量创建影子记录
- [ ] 包含推理过程和证据链
- [ ] 实现 `sendWeChatNotification()` 方法(私有)
- [ ] 调用WeChatAdapter
- [ ] 格式化质控预警
- [ ] 注册 Worker`iit:quality-check`
- [ ] 错误处理和重试
**验收标准**
- ✅ 能检测年龄违背如65岁
- ✅ 能检测性别不符
- ✅ 能检测必填字段缺失
- ✅ 影子记录正确创建
- ✅ 企微通知正确发送
- ✅ Worker可靠处理任务
#### 影子状态管理6小时
- [ ] 创建 `PendingActionService.ts`
- [ ] 实现 `getPendingActions()` 方法
- [ ] 分页查询
- [ ] 按状态过滤
- [ ] 按项目过滤
- [ ] 实现 `getPendingActionDetail()` 方法
- [ ] 返回详细信息
- [ ] 包含证据链
- [ ] 实现 `approveAction()` 方法
- [ ] 更新状态PROPOSED → APPROVED
- [ ] 调用REDCap API回写数据
- [ ] 更新状态APPROVED → EXECUTED
- [ ] 记录审计日志
- [ ] 实现 `rejectAction()` 方法
- [ ] 更新状态PROPOSED → REJECTED
- [ ] 记录拒绝原因
- [ ] 记录审计日志
- [ ] API端点
- [ ] `GET /api/v1/iit/pending-actions`
- [ ] `GET /api/v1/iit/pending-actions/:id`
- [ ] `POST /api/v1/iit/pending-actions/:id/approve`
- [ ] `POST /api/v1/iit/pending-actions/:id/reject`
**验收标准**
- ✅ 影子建议列表可查询
- ✅ 确认后数据正确回写REDCap
- ✅ 状态流转正确PROPOSED → APPROVED → EXECUTED
- ✅ 审计日志完整
---
### Day 10-12PC Workbench前端24小时
#### 前端骨架8小时
- [ ] 创建前端路由:`/iit/workbench`
- [ ] 创建主布局组件
- [ ] 顶部导航
- [ ] 侧边栏(项目列表)
- [ ] 内容区
- [ ] 创建任务列表页
- [ ] 表格组件Ant Design Table
- [ ] 状态筛选PROPOSED/APPROVED/REJECTED
- [ ] 分页功能
- [ ] 刷新按钮
- [ ] 创建项目选择器
- [ ] 下拉选择
- [ ] 快速切换
**验收标准**
- ✅ 路由可正常访问
- ✅ 任务列表可展示
- ✅ 项目切换功能正常
#### 详情对比页10小时
- [ ] 创建详情页面组件
- [ ] 左侧:当前数据展示
- [ ] 字段名 + 当前值
- [ ] 高亮违背字段(红色)
- [ ] 右侧AI建议展示
- [ ] AI建议值
- [ ] 推理过程
- [ ] 证据链Protocol页码
- [ ] 置信度(进度条)
- [ ] 底部:操作按钮
- [ ] [拒绝] 按钮 + 拒绝原因输入
- [ ] [确认] 按钮 + 二次确认
- [ ] 证据链高亮
- [ ] 点击跳转到Protocol PDF
- [ ] 高亮相关文字
- [ ] 实时状态更新
- [ ] WebSocket 或 轮询
**验收标准**
- ✅ 详情页面布局合理
- ✅ 当前数据与AI建议对比清晰
- ✅ 证据链可点击查看
- ✅ 操作按钮功能正常
#### 交互优化6小时
- [ ] 加载状态Skeleton
- [ ] 错误提示Message/Notification
- [ ] 成功提示(绿色通知)
- [ ] 二次确认Modal
- [ ] 批量操作(多选)
- [ ] 快捷键支持回车确认、ESC关闭
- [ ] 响应式布局(适配不同屏幕)
- [ ] 性能优化
- [ ] 虚拟滚动(大列表)
- [ ] 防抖搜索
**验收标准**
- ✅ 加载状态友好
- ✅ 错误提示清晰
- ✅ 操作响应流畅
- ✅ 快捷键可用
---
### Day 13影子状态闭环8小时
#### 完整流程测试6小时
- [ ] 场景1年龄违背检测
- [ ] REDCap录入年龄65岁
- [ ] AI检测到违背18-60岁
- [ ] 影子建议创建
- [ ] 企微通知发送
- [ ] Workbench显示建议
- [ ] CRC确认
- [ ] 数据回写REDCap标记为排除
- [ ] 审计日志记录
- [ ] 场景2性别不符检测
- [ ] 场景3必填字段缺失检测
- [ ] 场景4复杂规则检测用药禁忌
- [ ] 场景5拒绝建议流程
- [ ] 性能测试
- [ ] 100条记录批量质控
- [ ] 平均处理时间 < 10秒/条
- [ ] 压力测试
- [ ] 并发10个质控任务
- [ ] 系统稳定运行
**验收标准**
- ✅ 5个场景全部通过
- ✅ 完整闭环(录入→发现→确认→回写)
- ✅ 审计日志完整
- ✅ 性能指标达标
#### 错误处理测试2小时
- [ ] REDCap连接失败
- [ ] Dify API超时
- [ ] 企微推送失败
- [ ] 数据库连接中断
- [ ] Webhook签名错误
- [ ] 轮询任务失败
- [ ] 断点续传验证
**验收标准**
- ✅ 所有错误场景有友好提示
- ✅ 系统能自动重试
- ✅ 不影响其他任务执行
---
### Day 14Demo录制与交付8小时
#### Demo录制3小时
- [ ] 准备Demo脚本5分钟
```
场景骨科IIT研究年龄18-60岁
第1分钟背景介绍
第2分钟问题录入年龄65岁
第3分钟AI发现企微卡片
第4分钟人类复核Workbench
第5分钟价值总结
```
- [ ] 录制视频
- [ ] 屏幕录制
- [ ] 语音讲解
- [ ] 关键节点字幕
- [ ] 视频剪辑和优化
**验收标准**
- ✅ Demo视频5分钟
- ✅ 流程清晰完整
- ✅ 价值展示到位
#### 文档整理3小时
- [ ] 更新部署文档
- [ ] 编写使用手册
- [ ] 管理员手册(项目配置)
- [ ] CRC手册Workbench使用
- [ ] PI手册企微通知查看
- [ ] 编写API文档完善Swagger
- [ ] 编写故障排查文档
**验收标准**
- ✅ 文档完整清晰
- ✅ 新人可根据文档上手
#### 技术债务记录2小时
- [ ] 记录已知问题
- [ ] Dify准确率待提升
- [ ] 前端性能可优化
- [ ] 小程序待开发
- [ ] 记录改进建议
- [ ] OCR智能采集Phase 2
- [ ] 任务驱动AgentPhase 2
- [ ] 智能汇报AgentPhase 3
- [ ] 创建技术债务清单
- [ ] 按优先级排序
- [ ] 估算工作量
**验收标准**
- ✅ 技术债务清单完整
- ✅ 优先级合理
- ✅ MVP可交付
---
## 📊 MVP验收标准最终
### 功能完整性
- [ ] ✅ REDCap数据监听Webhook + 轮询)
- [ ] ✅ 历史数据全量扫描
- [ ] ✅ AI质控检测Dify RAG
- [ ] ✅ 影子状态管理
- [ ] ✅ 企微卡片通知
- [ ] ✅ PC Workbench复核
- [ ] ✅ 数据回写REDCap
- [ ] ✅ 审计日志记录
### 技术指标
| 指标 | 目标值 | 验收 |
|------|--------|------|
| Webhook响应时间 | < 100ms | [ ] |
| AI质控完成时间 | < 30秒 | [ ] |
| 企微推送延迟 | < 5秒 | [ ] |
| AI准确率 | > 80% | [ ] |
| 假阳性率 | < 15% | [ ] |
| 系统可用性 | > 99% | [ ] |
### 文档完整性
- [ ] ✅ 技术方案 V1.1
- [ ] ✅ API文档Swagger
- [ ] ✅ 部署文档
- [ ] ✅ 使用手册3份
- [ ] ✅ Demo视频5分钟
- [ ] ✅ 技术债务清单
---
## 📝 日常开发习惯
### 每日站会15分钟
- [ ] 昨天完成了什么?
- [ ] 今天计划做什么?
- [ ] 遇到什么阻碍?
### 每日提交
- [ ] 代码提交至少1次
- [ ] 更新TODO清单
- [ ] 记录开发笔记
### 每日复盘10分钟
- [ ] 今日完成度?
- [ ] 明日优先级?
- [ ] 需要调整计划?
---
## 🎯 关键里程碑
| 里程碑 | 时间 | 目标 | 状态 |
|--------|------|------|------|
| 🏁 Week 1 完成 | Day 5结束 | 基础连接层打通 | [ ] |
| 🏁 Week 2 完成 | Day 14结束 | MVP完整交付 | [ ] |
| 🏁 Demo录制 | Day 14 | 5分钟演示视频 | [ ] |
---
**创建日期**2025-12-31
**维护者**:开发团队
**更新频率**:每日
**参考文档**`02-技术设计/IIT Manager Agent 完整技术开发方案 (V1.1).md`