feat(iit): Initialize IIT Manager Agent MVP - Day 1 complete

- Add iit_schema with 5 tables
- Create module structure and types (223 lines)
- WeChat integration verified (Access Token success)
- Update system docs to v2.4
- Add REDCap source folders to .gitignore
- Day 1/14 complete (11/11 tasks)
This commit is contained in:
2025-12-31 18:35:05 +08:00
parent decff0bb1f
commit 4c5bb3d174
154 changed files with 13759 additions and 8 deletions

View File

@@ -0,0 +1,614 @@
# 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小时
#### 数据库初始化4小时
- [ ] 创建 `iit_schema` 数据库Schema
- [ ] 编写 Prisma Schema
- [ ] IitProject 表含V1.1新增字段cachedRules, lastSyncAt
- [ ] IitPendingAction 表(影子状态)
- [ ] IitTaskRun 表(任务管理)
- [ ] IitUserMapping 表含V1.1新增字段miniProgramOpenId, sessionKey
- [ ] IitAuditLog 表(审计日志)
- [ ] 运行迁移:`npx prisma migrate dev --name init_iit_schema`
- [ ] 生成 Prisma Client`npx prisma generate`
- [ ] 验证编写测试CRUD操作
**验收标准**
- ✅ 5个表全部创建成功
- ✅ Prisma Client可正常导入
- ✅ 测试脚本能执行CRUD
#### 企业微信初始化2小时
- [ ] 注册企业微信开发者账号
- [ ] 创建自建应用:`IIT Manager Agent测试`
- [ ] 获取并保存凭证:
- [ ] CorpID
- [ ] AgentID
- [ ] Secret
- [ ] 配置环境变量到 `.env`
- [ ] 测试:用 Postman 发送一条卡片消息
**验收标准**
- ✅ 企微账号注册成功
- ✅ 能收到Postman发送的测试卡片
#### 项目初始化2小时
- [ ] 创建模块目录结构
```
backend/src/modules/iit-manager/
├── controllers/
├── services/
├── agents/
├── adapters/
├── routes/
└── types/
```
- [ ] 配置路由前缀:`/api/v1/iit`
- [ ] 配置健康检查端点
- [ ] 创建基础类型定义
**验收标准**
- ✅ 目录结构完整
- ✅ 健康检查端点可访问
---
### 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`