feat(iit): V3.2 data consistency + project isolation + admin config redesign + Chinese labels
Summary: - Refactor timeline API to read from qc_field_status (SSOT) instead of qc_logs - Add field-issues paginated API with severity/dimension/recordId filters - Add LEFT JOIN field_metadata + qc_event_status for Chinese display names - Implement per-project ChatOrchestrator cache and SessionMemory isolation - Redesign admin IIT config tabs (REDCap -> Fields -> KB -> Rules -> Members) - Add AI-powered QC rule generation (D3 programmatic + D1/D5/D6 LLM-based) - Add clickable warning/critical detail Modal in ReportsPage - Auto-dispatch eQuery after batch QC via DailyQcOrchestrator - Update module status documentation to v3.2 Backend changes: - iitQcCockpitController: rewrite getTimeline from qc_field_status, add getFieldIssues - iitQcCockpitRoutes: add field-issues route - ChatOrchestrator: per-projectId cached instances - SessionMemory: keyed by userId::projectId - WechatCallbackController: resolve projectId from iitUserMapping - iitRuleSuggestionService: dimension-based suggest + generateD3Rules - iitBatchController: call DailyQcOrchestrator after batch QC Frontend changes: - AiStreamPage: adapt to new timeline structure with dimension tags - ReportsPage: clickable stats cards with issue detail Modal - IitProjectDetailPage: reorder tabs, add AI rule generation UI - iitProjectApi: add TimelineIssue, FieldIssueItem types and APIs Status: TypeScript compilation verified, no new lint errors Made-with: Cursor
This commit is contained in:
@@ -1,10 +1,15 @@
|
||||
# IIT Manager Agent模块 - 当前状态与开发指南
|
||||
|
||||
> **文档版本:** v3.1
|
||||
> **文档版本:** v3.2
|
||||
> **创建日期:** 2026-01-01
|
||||
> **维护者:** IIT Manager开发团队
|
||||
> **最后更新:** 2026-03-01 **GCP 业务报表 + AI 工作流水增强 + 多项 Bug 修复完成!**
|
||||
> **最后更新:** 2026-03-02 **数据一致性修复 + 项目隔离 + 管理端配置流重设计 + 中文显示名!**
|
||||
> **重大里程碑:**
|
||||
> - **2026-03-02:QC 数据一致性修复!** AI 时间线 + 警告详情 统一从 qc_field_status(SSOT)读取,与热力图数据一致
|
||||
> - **2026-03-02:字段/事件中文显示名!** LEFT JOIN field_metadata + qc_event_status,消除 REDCap 技术标识符
|
||||
> - **2026-03-02:警告详情可查看!** 新增 field-issues 分页 API + ReportsPage 严重问题/警告数字可点击弹出详情 Modal
|
||||
> - **2026-03-02:AI 对话项目隔离!** ChatOrchestrator 按 projectId 缓存实例 + SessionMemory 按 userId::projectId 隔离
|
||||
> - **2026-03-02:管理端配置流重设计!** 5 个配置 Tab 按依赖关系重排 + AI 自动构建质控规则(D1/D3/D5/D6 四维度)
|
||||
> - **2026-03-01:GCP 业务端报表全量完成!** 4 张 GCP 标准报表(D1 筛选入选/D2 完整性/D3D4 质疑跟踪/D6 方案偏离)后端 API + 前端组件 + ReportsPage 五 Tab 重构
|
||||
> - **2026-03-01:AI 工作流水时间线增强!** 实际规则数显示(33 条而非 1 条)+ 中文事件名 + 可展开问题详情表格 + severity 映射修复
|
||||
> - **2026-03-01:业务端一键全量质控!** DashboardPage 新增按钮 + 自动刷新报告缓存 + 事件级通过率修复
|
||||
@@ -61,7 +66,16 @@ CRA Agent 是一个**替代 CRA 岗位的自主 AI Agent**,而非辅助 CRA
|
||||
- AI能力:DeepSeek/Qwen + 自研 RAG(pgvector)+ LLM Tool Use
|
||||
|
||||
### 当前状态
|
||||
- **开发阶段**:**V3.1 质控引擎 + GCP 业务报表 + AI 时间线增强 + Bug 修复 → 待部署验证**
|
||||
- **开发阶段**:**V3.2 数据一致性 + 项目隔离 + 管理端重设计 + 中文显示名 → 待部署验证**
|
||||
- **V3.2 数据一致性 + 项目隔离已完成**(2026-03-02):
|
||||
- AI 时间线改为从 qc_field_status(SSOT)聚合,与风险热力图数据一致
|
||||
- 新增 field-issues 分页查询 API(支持按维度/严重程度/受试者筛选)
|
||||
- ReportsPage 严重问题/警告数字可点击弹出详情 Modal(分页+按维度筛选)
|
||||
- 字段名/事件名中文显示(LEFT JOIN field_metadata + qc_event_status 替代 REDCap 技术标识符)
|
||||
- AI 对话项目隔离(ChatOrchestrator 按 projectId 缓存 + SessionMemory 按 userId::projectId 隔离 + WeChat 回调自动解析 projectId)
|
||||
- 管理端 IIT 配置流重设计:5 个 Tab 按依赖关系重排(REDCap→变量清单→知识库→质控规则→成员)
|
||||
- AI 自动构建质控规则(D3 程序化 + D1/D5/D6 LLM 生成 + 预览批量导入 + 规则追加而非覆盖)
|
||||
- 批量 QC 后自动调用 DailyQcOrchestrator 派发 eQuery
|
||||
- **GCP 业务报表 + Bug 修复已完成**(2026-03-01):
|
||||
- 4 张 GCP 标准报表后端 API(iitQcCockpitService:getEligibilityReport/getCompletenessReport/getEqueryReport/getDeviationReport)
|
||||
- 4 个前端报表组件(EligibilityTable/CompletenessTable/EqueryLogTable/DeviationLogTable)
|
||||
@@ -107,6 +121,37 @@ CRA Agent 是一个**替代 CRA 岗位的自主 AI Agent**,而非辅助 CRA
|
||||
- ✅ **端到端测试通过**(REDCap → Node.js → 企业微信)
|
||||
- ✅ ~~AI对话集成完成(ChatService + SessionMemory)~~ → 已替换为 ChatOrchestrator
|
||||
|
||||
#### ✅ 已完成功能(V3.2 数据一致性 + 项目隔离 + 管理端重设计 - 2026-03-02)
|
||||
- ✅ **QC 数据一致性修复(qc_field_status 为 SSOT)**:
|
||||
- AI 时间线 getTimeline 改为从 qc_field_status 按受试者分组聚合(替代 qc_logs)
|
||||
- 与风险热力图、质控报告数据来源统一,消除数据不一致问题
|
||||
- 时间线展示有问题的受试者(FAIL/WARNING)+ 全部通过的受试者(PASS)
|
||||
- ✅ **字段/事件中文显示名**:
|
||||
- getTimeline + getFieldIssues SQL 增加 LEFT JOIN field_metadata(字段中文标签)+ qc_event_status(事件中文标签)
|
||||
- 前端优先显示 fieldLabel / eventLabel,回退到原始技术标识符
|
||||
- 消除 `65a64dbbd9_arm_1`、`check_date` 等不可读标识符
|
||||
- ✅ **警告详情可查看**:
|
||||
- 新增 GET /:projectId/qc-cockpit/field-issues 分页查询 API(支持按 severity/dimension/recordId 筛选)
|
||||
- 返回聚合统计(bySeverity + byDimension)
|
||||
- ReportsPage "严重问题"/"警告"卡片可点击,弹出详情 Modal(分页+维度下拉筛选)
|
||||
- ✅ **AI 对话项目隔离**:
|
||||
- ChatOrchestrator 从单例改为按 projectId 缓存实例(orchestratorCache Map)
|
||||
- SessionMemory 会话键改为 `userId::projectId`,不同项目聊天历史互不干扰
|
||||
- 后端 /api/v1/iit/chat 路由要求传 projectId
|
||||
- WechatCallbackController 通过 iitUserMapping 自动解析用户 projectId
|
||||
- ✅ **管理端 IIT 配置流重设计**:
|
||||
- 5 个配置 Tab 按依赖关系重排:① REDCap 配置 → ② 变量清单 → ③ 知识库 → ④ 质控规则 → ⑤ 项目成员
|
||||
- "同步元数据" 按钮从基础配置移至变量清单 Tab
|
||||
- 各 Tab 增加前置条件检查和提示(如"请先配置 REDCap 并同步变量")
|
||||
- ✅ **AI 自动构建质控规则**:
|
||||
- D3 准确性:基于 field_metadata 程序化生成范围/枚举/必填检查(无需 LLM)
|
||||
- D1 入选排除 / D5 安全性 / D6 方案偏离:LLM 基于变量清单+知识库智能生成
|
||||
- 预览 Modal 支持多选批量导入 + 规则追加(不覆盖已有规则)
|
||||
- 规则按 D1-D7 维度分组展示(Collapse 折叠面板)
|
||||
- ✅ **批量 QC 后自动派发 eQuery**:
|
||||
- iitBatchController 执行 QcExecutor.executeBatch 后调用 DailyQcOrchestrator.orchestrate
|
||||
- 返回 equeriesCreated 计数
|
||||
|
||||
#### ✅ 已完成功能(GCP 业务报表 + AI 时间线 + Bug 修复 - 2026-03-01)
|
||||
- ✅ **GCP 标准报表(阶段 A 4 张)**:
|
||||
- D1 筛选入选表(getEligibilityReport:record_summary 全量 + qc_field_status D1 叠加)
|
||||
@@ -954,8 +999,8 @@ npx ts-node src/modules/iit-manager/test-wechat-push.ts
|
||||
---
|
||||
|
||||
> **提示**:本文档反映IIT Manager Agent模块的最新真实状态,每个里程碑完成后必须更新!
|
||||
> **最后更新**:2026-03-01
|
||||
> **当前进度**:V3.1 QC Engine 完成 | GCP 业务报表 4 张全量完成 | AI Timeline 增强 | 一键全量质控 | 多项 Bug 修复 | Phase 2: LLM 执行摘要待开发
|
||||
> **最后更新**:2026-03-02
|
||||
> **当前进度**:V3.2 数据一致性修复 | 项目隔离 | 管理端配置流重设计 | AI 规则自动生成 | 中文显示名 | 警告详情 Modal | 待部署验证
|
||||
> **核心文档**:
|
||||
> - [CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) ⭐⭐⭐⭐⭐
|
||||
> - [统一数字 CRA 质控平台 PRD](./04-开发计划/V3.0全新开发计划/统一数字%20CRA%20质控平台产品需求文档(PRD).md) ⭐⭐⭐⭐⭐
|
||||
|
||||
@@ -15,19 +15,35 @@
|
||||
|
||||
| # | 变更内容 | 迁移文件 | 优先级 | 备注 |
|
||||
|---|---------|---------|--------|------|
|
||||
| — | *暂无* | | | |
|
||||
| DB-1 | modules 表新增 `AIA_PROTOCOL`、`RM` 模块注册,IIT 名称改为「CRA质控」 | 无(运行 seed 脚本) | 高 | 运行 `node scripts/seed-modules.js`(upsert,可重复执行) |
|
||||
| DB-2 | RVW Prompt 更新:期刊名称修正为「中华脑血管病杂志」 | 无(重新运行迁移脚本或后台编辑) | 高 | 运行 `npx tsx scripts/migrate-rvw-prompts.ts` 或在 `/admin/prompts/RVW_EDITORIAL` 手动编辑 |
|
||||
|
||||
### 后端变更 (Node.js)
|
||||
|
||||
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|
||||
|---|---------|---------|---------|------|
|
||||
| — | *暂无* | | | |
|
||||
| BE-1 | 登录踢人机制:同一手机号只能一人同时在线 | `auth.service.ts`, `auth.middleware.ts`, `jwt.service.ts` | 重新构建镜像 | JWT 增加 tokenVersion,登录时递增版本号存入缓存,认证中间件校验版本号 |
|
||||
| BE-2 | 模块权限一致性修复:`/me/modules` API 现在尊重 user_modules 精细化配置 | `module.service.ts` | 重新构建镜像 | 之前 `/me/modules` 只看 tenant_modules,现在与登录逻辑一致 |
|
||||
| BE-3 | getModuleName 补充 RM、AIA_PROTOCOL、IIT 名称修正 | `userService.ts` | 重新构建镜像 | IIT Manager → CRA质控 |
|
||||
| BE-4 | RVW 稿约 Prompt 源文件修正 | `prompts/review_editorial_system.txt` | 重新构建镜像 | 中华医学超声杂志 → 中华脑血管病杂志 |
|
||||
| BE-5 | seed 数据:内部租户补充 RM、AIA_PROTOCOL 模块 | `prisma/seed.ts` | 仅影响新环境初始化 | — |
|
||||
| BE-6 | 用户模块配置校验放宽:不再限制必须在租户订阅范围内 | `userService.ts` | 重新构建镜像 | 校验改为「模块代码必须在 modules 表中存在」,支持给用户单独开通功能模块 |
|
||||
| BE-7 | 用户独立模块生效:user_modules 中的模块即使租户未订阅也纳入权限 | `module.service.ts` | 重新构建镜像 | 如 AIA_PROTOCOL 可单独配给用户 |
|
||||
|
||||
### 前端变更
|
||||
|
||||
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|
||||
|---|---------|---------|---------|------|
|
||||
| — | *暂无* | | | |
|
||||
| FE-1 | ASL 模块:隐藏数据源/年限/篇数,默认 PubMed | `SetupPanel.tsx` | 重新构建镜像 | 高级筛选面板全部隐藏 |
|
||||
| FE-2 | ASL 模块:去掉「研究方案生成」「文献管理」,重新编号 1~6 | `ASLLayout.tsx` | 重新构建镜像 | — |
|
||||
| FE-3 | ASL 模块:默认进入智能文献检索(不再是标题摘要初筛) | `asl/index.tsx` | 重新构建镜像 | 路由 index → research/deep |
|
||||
| FE-4 | AIA 模块:删除「已接入DeepSeek」和搜索框 | `AgentHub.tsx` | 重新构建镜像 | — |
|
||||
| FE-5 | AIA 模块:Protocol Agent 按用户模块权限动态显示 | `AgentHub.tsx`, `constants.ts` | 重新构建镜像 | 通过 `hasModule('AIA_PROTOCOL')` 判断,需 DB-1 配合 |
|
||||
| FE-6 | AIA 模块:数据评价与预处理 / 智能统计分析链接修正 | `constants.ts` | 重新构建镜像 | `/dc` → `/research-management` |
|
||||
| FE-7 | 首页重定向到 `/ai-qa`,不再显示模块卡片首页 | `App.tsx` | 重新构建镜像 | — |
|
||||
| FE-8 | PKB 模块:创建知识库时隐藏科室选择,默认 General | `DashboardPage.tsx` | 重新构建镜像 | — |
|
||||
| FE-9 | 被踢出时前端提示「账号已在其他设备登录」 | `axios.ts` | 重新构建镜像 | 配合 BE-1 |
|
||||
| FE-10 | 运营端:用户模块权限弹窗显示所有模块(含 RM、AIA_PROTOCOL、CRA质控) | `ModulePermissionModal.tsx` | 重新构建镜像 | 未订阅模块标注"(未订阅)",不阻止配置 |
|
||||
|
||||
### Python 微服务变更
|
||||
|
||||
@@ -53,6 +69,17 @@
|
||||
|---|---------|------|------|
|
||||
| — | *暂无* | | |
|
||||
|
||||
### 部署顺序建议
|
||||
|
||||
1. **后端先部署**:构建并推送新镜像(包含 BE-1 ~ BE-5)
|
||||
2. **运行数据库脚本**:
|
||||
- `node scripts/seed-modules.js`(DB-1:注册 AIA_PROTOCOL、RM 模块)
|
||||
- `npx tsx scripts/migrate-rvw-prompts.ts`(DB-2:更新 RVW 稿约 Prompt)
|
||||
3. **前端部署**:构建并推送新镜像(包含 FE-1 ~ FE-9)
|
||||
4. **后台配置**:
|
||||
- 为内部测试人员所在租户开通 `AIA_PROTOCOL` 模块
|
||||
- 确认 SSA/ST/IIT/RM 模块权限按需分配给对应租户和用户
|
||||
|
||||
---
|
||||
|
||||
## 记录模板
|
||||
|
||||
Reference in New Issue
Block a user