Files
AIclinicalresearch/docs/05-部署文档/03-待部署变更清单.md
HaHafeng 2030ebe28f feat(iit): Complete V3.1 QC engine + GCP business reports + AI timeline + bug fixes
V3.1 QC Engine:
- QcExecutor unified entry + D1-D7 dimension engines + three-level aggregation
- HealthScoreEngine + CompletenessEngine + ProtocolDeviationEngine + QcAggregator
- B4 flexible cron scheduling (project-level cronExpression + pg-boss dispatcher)
- Prisma migrations for qc_field_status, event_status, project_stats

GCP Business Reports (Phase A - 4 reports):
- D1 Eligibility: record_summary full list + qc_field_status D1 overlay
- D2 Completeness: data entry rate and missing rate aggregation
- D3/D4 Query Tracking: severity distribution from qc_field_status
- D6 Protocol Deviation: D6 dimension filtering
- 4 frontend table components + ReportsPage 5-tab restructure

AI Timeline Enhancement:
- SkillRunner outputs totalRules (33 actual rules vs 1 skill)
- iitQcCockpitController severity mapping fix (critical->red, warning->yellow)
- AiStreamPage expandable issue detail table with Chinese labels
- Event label localization (eventLabel from backend)

Business-side One-click Batch QC:
- DashboardPage batch QC button with SyncOutlined icon
- Auto-refresh QcReport cache after batch execution

Bug Fixes:
- dimension_code -> rule_category in 4 SQL queries
- D1 eligibility data source: record_summary full + qc_field_status overlay
- Timezone UTC -> Asia/Shanghai (QcReportService toBeijingTime helper)
- Pass rate calculation: passed/totalEvents instead of passed/totalRecords

Docs:
- Update IIT module status with GCP reports and bug fix milestones
- Update system status doc v6.6 with IIT progress

Tested: Backend compiles, frontend linter clean, batch QC verified
Made-with: Cursor
2026-03-01 22:49:49 +08:00

147 lines
12 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.
# 待部署变更清单
> **用途**: 开发过程中实时记录所有待部署的变更,下次部署时按此清单逐项执行
> **维护规则**: 每次修改 Schema / 新增依赖 / 改配置时,**立即**在此文档追加记录
> **Cursor Rule**: `.cursor/rules/deployment-change-tracking.mdc` 会自动提醒
> **最后清零**: 2026-02-270227 部署完成后清零)
---
## 当前待部署变更
> ⚠️ 下次部署前,逐项检查此清单。部署完成后将已部署项移到「历史」区域并清零。
### 数据库变更
| # | 变更内容 | 迁移文件 | 优先级 | 备注 |
|---|---------|---------|--------|------|
| DB-1 | ssa_workflows 类型精度对齐 + 清理重复 FK | `20260227_align_schema_with_db_types` | 低 | 幂等 SQLRDS 上执行无副作用 |
| DB-2 | Phase 2: user_mappings 加 user_id FK + projects 加 tenant_id FK + UserRole 加 IIT_OPERATOR | `20260228_add_iit_phase2_user_project_rbac` | 高 | nullable 列,不破坏现有数据 |
| DB-3 | IIT projects 加 is_demo 标记 | `20260228_add_iit_project_is_demo` | 低 | nullable boolean DEFAULT false无破坏 |
| DB-4 | V3.1 QC 引擎架构升级:新建 qc_field_status 五级坐标表 + qc_logs/equery 加 instance_id + field_mapping 加 semantic_label/form_name/rule_category | `20260301_add_v31_qc_field_status_and_instance_columns` | 高 | 全部 ADD COLUMN / CREATE TABLE向后兼容零停机 |
| DB-5 | V3.1 Batch B新建 qc_event_status 事件级聚合表 + record_summary 加 events/fields/d1-d7 聚合列 + top_issues | `20260301_add_v31_qc_event_status_and_record_summary_aggregation` | 高 | 全部 ADD COLUMN / CREATE TABLEIF NOT EXISTS零停机 |
| DB-6 | V3.1 Batch Cqc_project_stats 加 d1-d7 pass_rate + health_score + health_grade + dimension_detail | `20260301_add_v31_project_stats_health_score` | 中 | 全部 ADD COLUMNDEFAULT 值,零停机 |
### 后端变更 (Node.js)
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---------|---------|---------|------|
| BE-1 | V3.1 RedcapAdapter: normalizeInstances() + exportRecordsNormalized() 五级坐标标准化 | `adapters/RedcapAdapter.ts` | 重新构建镜像 | 新增公共方法,不破坏现有调用 |
| BE-2 | V3.1 QC 分类体系升级D1-D7 七维分类 + toDimensionCode() 转换函数 | `engines/HardRuleEngine.ts`, `engines/SoftRuleEngine.ts` | 重新构建镜像 | 扩展联合类型,旧值 → D-code 自动映射 |
| BE-3 | V3.1 QcExecutor 统一质控执行入口executeSingle/executeBatch + qc_field_status upsert | `engines/QcExecutor.ts` (新文件) | 重新构建镜像 | 包装 SkillRunner新增字段级状态写入 |
| BE-4 | V3.1 SyncManager: syncSemanticLabels() 语义标签自动同步 | `services/SyncManager.ts` | 重新构建镜像 | 从 REDCap 元数据填充 field_mapping.semantic_label |
| BE-5 | 种子规则 D-code 迁移inclusion→D1, exclusion→D1, lab_values→D3 | `prisma/seed-iit-qc-rules.ts` | 重新执行种子脚本 | 下次重新初始化项目时生效 |
| BE-6 | V3.1 QcAggregator: aggregateDeferred() + aggregateForRecord() 异步防抖聚合 | `engines/QcAggregator.ts` (新文件) | 重新构建镜像 | 纯 SQL INSERT...ON CONFLICT 聚合field→event→record 三级冒泡 |
| BE-7 | V3.1 QcExecutor 集成聚合 + State Transition HookFAIL→PASS 自动关闭 eQuery | `engines/QcExecutor.ts` | 重新构建镜像 | executeSingle 推 pg-boss 防抖executeBatch 直接聚合PASS-flip 覆盖旧 FAIL |
| BE-8 | V3.1 pg-boss Worker: iit_qc_aggregate 受试者粒度防抖聚合 | `modules/iit-manager/index.ts` | 重新构建镜像 | singletonKey 防抖 10s多 CRC 并发录入互不干扰 |
| BE-9 | V3.1 D2 CompletenessEngine: 绝对必填字段缺失率 + 双重过滤(字段+时序) | `engines/CompletenessEngine.ts` (新文件) | 重新构建镜像 | 排除 branching_logic/calc/descriptive 字段 + 排除未来访视 |
| BE-10 | V3.1 D6 ProtocolDeviationEngine: 访视超窗检测 | `engines/ProtocolDeviationEngine.ts` (新文件) | 重新构建镜像 | 基于项目 cachedRules.visitWindows 配置,支持早到/迟到检测 |
| BE-11 | V3.1 C4 HealthScoreEngine: D1-D7 加权综合健康度评分 | `engines/HealthScoreEngine.ts` (新文件) | 重新构建镜像 | 0-100 评分 + A-F 等级,持久化到 qc_project_stats |
| BE-12 | V3.1 Webhook Worker 接入 QcExecutor.executeSingle() | `modules/iit-manager/index.ts` | 重新构建镜像 | 替换 HardRuleEngine 旧路径 |
| BE-13 | V3.1 batchQualityCheck 接入 QcExecutor.executeBatch() | `admin/iitBatchController.ts` | 重新构建镜像 | 替换 SkillRunner 直接调用 |
| BE-14 | V3.1 QcExecutor 集成 D2/D6 维度引擎 | `engines/QcExecutor.ts` | 重新构建镜像 | 自动运行 CompletenessEngine + ProtocolDeviationEngine |
| BE-15 | V3.1 QcAggregator 集成 HealthScoreEngine | `engines/QcAggregator.ts` | 重新构建镜像 | aggregateDeferred 末尾自动刷新健康度 |
| BE-16 | V3.1 QcReportService 数据源升级 | `services/QcReportService.ts` | 重新构建镜像 | qc_field_status + event_overview + dimension_summary |
| BE-17 | V3.1 iitQcCockpitService 升级 | `admin/iitQcCockpitService.ts` | 重新构建镜像 | 热力图 record×event + healthScore/维度 |
| BE-18 | V3.1 新增 API: dimensions / completeness / field-status | `admin/iitQcCockpitRoutes.ts` + Controller | 重新构建镜像 | 3 个新 GET 端点 |
| BE-19 | V3.1 ToolsService check_quality → QcExecutor | `services/ToolsService.ts` | 重新构建镜像 | + read_report dimension_summary/event_overview |
| BE-20 | B4: 项目级 cronExpression 持久化 + 调度器重构 | `iitProjectService.ts`, `iit-manager/index.ts` | 重新构建镜像 | 旧全局 cron → dispatcher 每分钟轮询 + per-project 匹配 |
| BE-21 | B4: iit_scheduled_qc Worker V3.1 升级 | `iit-manager/index.ts` | 重新构建镜像 | 替换 HardRuleEngine → QcExecutor.executeBatch |
| BE-22 | P0-A: SkillRunner evidence 传播 category + subType | `engines/SkillRunner.ts` | 重新构建镜像 | D1 规则不再被错误存为 D3需重跑全量 QC |
| BE-23 | P0-A: QcExecutor dimCode 回退逻辑增强 | `engines/QcExecutor.ts` | 重新构建镜像 | 优先取 evidence.category |
| BE-24 | P0-B: ProtocolDeviationEngine 输出结构化 JSON actual_value | `engines/ProtocolDeviationEngine.ts` | 重新构建镜像 | D6 API 零正则零脆断 |
| BE-25 | GCP D1 筛选入选表 API + D2 完整性总览/字段懒加载 API | `iitQcCockpitService/Controller/Routes` | 重新构建镜像 | 5 层数据 + L4/L5 按需加载 |
| BE-26 | GCP D3/D4 eQuery 全生命周期跟踪 API | `iitQcCockpitService/Controller/Routes` | 重新构建镜像 | 统计+分组+全量明细+时间线 |
| BE-27 | GCP D6 方案偏离报表增强 API | `iitQcCockpitService/Controller/Routes` | 重新构建镜像 | JSON.parse(actual_value) 结构化超窗数据 |
### 前端变更
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---------|---------|---------|------|
| FE-1 | V3.1 DashboardPage: 后端 healthScore + D1-D7 维度条 | `DashboardPage.tsx` | 重新构建前端 | 替换客户端健康度计算 |
| FE-2 | V3.1 热力图 record×event 矩阵 | `DashboardPage.tsx` | 重新构建前端 | cells 用 eventId |
| FE-3 | V3.1 ReportsPage: 维度分析 + 事件概览 tab | `ReportsPage.tsx` | 重新构建前端 | 2 新 Tab + 五级坐标列 |
| FE-4 | V3.1 API 客户端 + 类型定义 | `iitProjectApi.ts`, `qcCockpit.ts` | 重新构建前端 | 3 个新 API + V3.1 类型 |
| FE-5 | B4: 管理端项目配置页 cron UI 增强 | `IitProjectDetailPage.tsx`, `iitProject.ts` | 重新构建前端 | 更多预设选项 + 自定义 cron 输入框 |
| FE-6 | V3.1 管理端类型 V3.1 升级 | `qcCockpit.ts` | 重新构建前端 | HeatmapCell.eventId + DimensionBreakdown + DeviationItem + RecordDetail 五级坐标 |
| FE-7 | V3.1 管理端 API 客户端升级 | `iitProjectApi.ts` | 重新构建前端 | getQcRecordDetail(eventId) + getDeviations + getDimensions + getCompleteness + getFieldStatus |
| FE-8 | V3.1 QcDetailDrawer 事件级详情 + 维度标签 | `QcDetailDrawer.tsx` | 重新构建前端 | eventId 传参 + 语义标签 + D-code Tag |
| FE-9 | V3.1 RiskHeatmap 列头中文化 | `RiskHeatmap.tsx` | 重新构建前端 | 使用后端 columnLabels 映射 + Tooltip 显示原始 eventId |
| FE-10 | V3.1 IitQcCockpitPage 方案偏离弹窗升级 | `IitQcCockpitPage.tsx` | 重新构建前端 | 调用 D6 deviations API + 五级坐标定位表格 |
| FE-11 | V3.1 QcReportDrawer 维度分析 + 事件概览 Tab | `QcReportDrawer.tsx` | 重新构建前端 | 新增维度分析(D1-D7)和事件概览(按受试者缺失率)Tab |
| FE-12 | GCP 业务端 API 类型定义 | `iit/api/iitProjectApi.ts` | 重新构建前端 | 5 个报表接口 + 完整 TS 类型 |
| FE-13 | GCP ReportsPage 重构为 5 Tab | `iit/pages/ReportsPage.tsx` | 重新构建前端 | 执行摘要 + D1/D2/D3D4/D6 四张 GCP 报表 |
| FE-14 | GCP D1 EligibilityTable 组件 | `iit/components/reports/EligibilityTable.tsx` | 重新构建前端 | 纳入/排除逐条判定 + 受试者展开 |
| FE-15 | GCP D2 CompletenessTable 组件 | `iit/components/reports/CompletenessTable.tsx` | 重新构建前端 | L2/L3 统计 + L4/L5 懒加载展开 |
| FE-16 | GCP D3/D4 EqueryLogTable 组件 | `iit/components/reports/EqueryLogTable.tsx` | 重新构建前端 | eQuery 生命周期时间线 + 筛选 |
| FE-17 | GCP D6 DeviationLogTable 组件 | `iit/components/reports/DeviationLogTable.tsx` | 重新构建前端 | 结构化超窗数据 + 影响评估/CAPA 预留 |
### Python 微服务变更
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---------|---------|---------|------|
| — | *暂无* | | | |
### R 统计引擎变更
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---------|---------|---------|------|
| — | *暂无* | | | |
### 环境变量 / 配置变更
| # | 变更内容 | 服务 | 变量名 | 备注 |
|---|---------|------|--------|------|
| — | *暂无* | | | |
### 基础设施变更
| # | 变更内容 | 范围 | 备注 |
|---|---------|------|------|
| — | *暂无* | | |
---
## 记录模板
开发时发现需要部署的变更,复制下方模板追加到对应区域:
```markdown
<!-- 数据库变更 -->
| 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` | 备注 |
```
---
## 历史(已部署,仅供追溯)
### 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.2SSA/ASL/RVW/IIT 全模块更新) | 2026-02-27 | ✅ |
| BE | Dockerfile 增加 JSON 配置文件拷贝 | 2026-02-27 | ✅ |
| FE | 前端 v1.3 → v1.8react-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 | ✅ |