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:
2026-03-02 14:29:59 +08:00
parent 72928d3116
commit 71d32d11ee
38 changed files with 1597 additions and 546 deletions

View File

@@ -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-02QC 数据一致性修复!** AI 时间线 + 警告详情 统一从 qc_field_statusSSOT读取与热力图数据一致
> - **2026-03-02字段/事件中文显示名!** LEFT JOIN field_metadata + qc_event_status消除 REDCap 技术标识符
> - **2026-03-02警告详情可查看** 新增 field-issues 分页 API + ReportsPage 严重问题/警告数字可点击弹出详情 Modal
> - **2026-03-02AI 对话项目隔离!** ChatOrchestrator 按 projectId 缓存实例 + SessionMemory 按 userId::projectId 隔离
> - **2026-03-02管理端配置流重设计** 5 个配置 Tab 按依赖关系重排 + AI 自动构建质控规则D1/D3/D5/D6 四维度)
> - **2026-03-01GCP 业务端报表全量完成!** 4 张 GCP 标准报表D1 筛选入选/D2 完整性/D3D4 质疑跟踪/D6 方案偏离)后端 API + 前端组件 + ReportsPage 五 Tab 重构
> - **2026-03-01AI 工作流水时间线增强!** 实际规则数显示33 条而非 1 条)+ 中文事件名 + 可展开问题详情表格 + severity 映射修复
> - **2026-03-01业务端一键全量质控** DashboardPage 新增按钮 + 自动刷新报告缓存 + 事件级通过率修复
@@ -61,7 +66,16 @@ CRA Agent 是一个**替代 CRA 岗位的自主 AI Agent**,而非辅助 CRA
- AI能力DeepSeek/Qwen + 自研 RAGpgvector+ LLM Tool Use
### 当前状态
- **开发阶段****V3.1 质控引擎 + GCP 业务报表 + AI 时间线增强 + Bug 修复 → 待部署验证**
- **开发阶段****V3.2 数据一致性 + 项目隔离 + 管理端重设计 + 中文显示名 → 待部署验证**
- **V3.2 数据一致性 + 项目隔离已完成**2026-03-02
- AI 时间线改为从 qc_field_statusSSOT聚合与风险热力图数据一致
- 新增 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 标准报表后端 APIiitQcCockpitServicegetEligibilityReport/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 筛选入选表getEligibilityReportrecord_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) ⭐⭐⭐⭐⭐

View File

@@ -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 模块权限按需分配给对应租户和用户
---
## 记录模板