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
7.2 KiB
7.2 KiB
待部署变更清单
用途: 开发过程中实时记录所有待部署的变更,下次部署时按此清单逐项执行
维护规则: 每次修改 Schema / 新增依赖 / 改配置时,立即在此文档追加记录
Cursor Rule:.cursor/rules/deployment-change-tracking.mdc会自动提醒
最后清零: 2026-03-02(0302 部署完成后清零)
当前待部署变更
⚠️ 下次部署前,逐项检查此清单。部署完成后将已部署项移到「历史」区域并清零。
数据库变更
| # | 变更内容 | 迁移文件 | 优先级 | 备注 |
|---|---|---|---|---|
| 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 微服务变更
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---|---|---|---|
| — | 暂无 |
R 统计引擎变更
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---|---|---|---|
| — | 暂无 |
环境变量 / 配置变更
| # | 变更内容 | 服务 | 变量名 | 备注 |
|---|---|---|---|---|
| — | 暂无 |
基础设施变更
| # | 变更内容 | 范围 | 备注 |
|---|---|---|---|
| — | 暂无 |
部署顺序建议
- 后端先部署:构建并推送新镜像(包含 BE-1 ~ BE-5)
- 运行数据库脚本:
node scripts/seed-modules.js(DB-1:注册 AIA_PROTOCOL、RM 模块)npx tsx scripts/migrate-rvw-prompts.ts(DB-2:更新 RVW 稿约 Prompt)
- 前端部署:构建并推送新镜像(包含 FE-1 ~ FE-9)
- 后台配置:
- 为内部测试人员所在租户开通
AIA_PROTOCOL模块 - 确认 SSA/ST/IIT/RM 模块权限按需分配给对应租户和用户
- 为内部测试人员所在租户开通
记录模板
开发时发现需要部署的变更,复制下方模板追加到对应区域:
<!-- 数据库变更 -->
| DB-N | 简述变更 | `迁移文件名` | 高/中/低 | 备注 |
<!-- 后端变更 -->
| BE-N | 简述变更 | `file.ts` | 重新构建镜像 | 备注 |
<!-- 前端变更 -->
| FE-N | 简述变更 | `Component.tsx` | 重新构建镜像 | 备注 |
<!-- Python 变更 -->
| PY-N | 简述变更 | `requirements-prod.txt` | 重新构建镜像 | 备注 |
<!-- R 变更 -->
| R-N | 简述变更 | `tool.R` | 重新构建镜像 | 备注 |
<!-- 环境变量 -->
| ENV-N | 简述变更 | nodejs-backend-test | `VAR_NAME=value` | 备注 |
历史(已部署,仅供追溯)
0302 部署已清零项
| # | 变更内容 | 部署日期 | 结果 |
|---|---|---|---|
| DB | 6 个 Prisma 迁移(SSA 类型对齐 + IIT RBAC + is_demo + V3.1 QC 三批) | 2026-03-02 | ✅ |
| DB | 新建 qc_field_status、qc_event_status 2 张表(84 → 86) | 2026-03-02 | ✅ |
| BE | Node.js v2.3 → v2.4(IIT V3.1 QC引擎全面升级,27 项变更) | 2026-03-02 | ✅ |
| FE | 前端 v1.9 → v2.0(GCP 报表 + V3.1 前端,17 项变更) | 2026-03-02 | ✅ |
| ENV | frontend-nginx-service: BACKEND_SERVICE_HOST → 172.17.197.32 | 2026-03-02 | ✅ |
0227 部署已清零项
| # | 变更内容 | 部署日期 | 结果 |
|---|---|---|---|
| DB | 5 个业务迁移 + 1 个 drift patch | 2026-02-27 | ✅ |
| DB | SSA data_profile 列补充 | 2026-02-27 | ✅ 线上热修 |
| DB | RVW review_tasks 8 列补充 | 2026-02-27 | ✅ 线上热修 |
| BE | Node.js v1.7 → v2.2(SSA/ASL/RVW/IIT 全模块更新) | 2026-02-27 | ✅ |
| BE | Dockerfile 增加 JSON 配置文件拷贝 | 2026-02-27 | ✅ |
| FE | 前端 v1.3 → v1.8(react-markdown, nginx 配置更新) | 2026-02-27 | ✅ |
| PY | Python v1.1 → v1.2(新增 scipy) | 2026-02-27 | ✅ |
| R | R 统计引擎 v1.0.1 全新部署 | 2026-02-27 | ✅ |
| ENV | nodejs-backend-test: R_STATISTICS_SERVICE_URL 等 | 2026-02-27 | ✅ |
| ENV | frontend-nginx-service: BACKEND_SERVICE_HOST 更新 | 2026-02-27 | ✅ |