Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/00-系统设计/CRA Agent 质控体系全景技术路径(策略评审稿).md
HaHafeng 0b29fe88b5 feat(iit): QC deep fix + V3.1 architecture plan + project member management
QC System Deep Fix:
- HardRuleEngine: add null tolerance + field availability pre-check (skipped status)
- SkillRunner: baseline data merge for follow-up events + field availability check
- QcReportService: record-level pass rate calculation + accurate LLM XML report
- iitBatchController: legacy log cleanup (eventId=null) + upsert RecordSummary
- seed-iit-qc-rules: null/empty string tolerance + applicableEvents config

V3.1 Architecture Design (docs only, no code changes):
- QC engine V3.1 plan: 5-level data structure (CDISC ODM) + D1-D7 dimensions
- Three-batch implementation strategy (A: foundation, B: bubbling, C: new engines)
- Architecture team review: 4 whitepapers reviewed + feedback doc + 4 critical suggestions
- CRA Agent strategy roadmap + CRA 4-tool explanation doc for clinical experts

Project Member Management:
- Cross-tenant member search and assignment (remove tenant restriction)
- IIT project detail page enhancement with tabbed layout (KB + members)
- IitProjectContext for business-side project selection
- System-KB route access control adjustment for project operators

Frontend:
- AdminLayout sidebar menu restructure
- IitLayout with project context provider
- IitMemberManagePage new component
- Business-side pages adapt to project context

Prisma:
- 2 new migrations (user-project RBAC + is_demo flag)
- Schema updates for project member management

Made-with: Cursor
2026-03-01 15:27:05 +08:00

480 lines
23 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.
# CRA Agent 质控体系全景技术路径(策略评审稿)
> **文档性质**:策略与路径评审文档,供团队内部和临床研究专家讨论可行性
> **版本**V1.0 | 2026-03-01
> **目标读者**:技术团队、产品负责人、临床研究顾问
> **下一步**:经评审认可后,基于本文档形成具体开发计划
---
## 一、背景与核心问题
### 1.1 CRA 做什么
临床监查员CRA的工作本质上是一个**多维度的数据质量守门人**。参照行业标准ICH-GCP E6 R2/R3CRA 在常规监查阶段的工作可以分解为以下 7 个维度:
| 维度 | CRA 具体工作 | 输出物 |
|------|------------|--------|
| **D1 入组质量** | 核查入排标准、知情同意时序、筛选流程 | 筛选与入组日志 |
| **D2 数据完整性** | 检查缺失字段、录入时效、分支逻辑完整性 | 数据缺失率报表 |
| **D3 变量准确性** | 极值校验、时序逻辑、跨表单关联 | 变量质控清单 |
| **D4 数据质疑管理** | 生成 Query、跟踪回复、二次复核、关闭 | eQuery 清单 |
| **D5 安全性监测** | AE/SAE 识别、编码、分级、因果判定、时效监管 | AE/SAE 追踪表 |
| **D6 方案偏离侦测** | 访视超窗、剂量偏差、操作遗漏、CAPA 跟踪 | 方案偏离记录 |
| **D7 药物管理** | 发药/回收核算、依从性计算、批号追踪 | IP 管理明细 |
以上 7 个维度最终汇聚为一张 **项目健康度评分卡**,供 PI 和项目管理层决策。
### 1.2 我们现在能做什么
当前 CRA Agent 系统已实现的能力:
```
┌──────────────────────────────────────────┐
│ CRA 工作全景7 维度) │
│ │
已实现 ──────► │ ■ D1 入组质量(入排标准规则已有) │
│ □ D2 数据完整性 │
部分实现 ────► │ ■ D3 变量准确性(基础范围检查) │
│ □ D4 数据质疑管理eQuery 表已建) │
│ □ D5 安全性监测 │
│ □ D6 方案偏离侦测 │
未涉及 ─────► │ □ D7 药物管理 │
│ │
│ □ 项目健康度评分卡 │
└──────────────────────────────────────────┘
■ 已实现 ■ 部分实现 □ 未涉及
```
**覆盖率估算**:约 20-25%(仅 D1 部分 + D3 基础),距离替代 CRA 70-80% 工作的目标差距明显。
### 1.3 差距的根源
差距不仅是"规则数量不够",而是**架构层面的三个结构性问题**
| 问题 | 影响 |
|------|------|
| **规则体系缺乏分类** | 所有规则混在一起,无法按 CRA 工作维度组织和统计 |
| **数据结构粒度不足** | 只有记录级状态,缺少事件级和变量级独立状态表 |
| **报告缺乏维度** | 只有一张扁平的"通过/不通过"报告,无法反映 7 个维度的各自状况 |
---
## 二、核心认知:一条完整的链路
### 2.1 从方案到报告的 1:1 映射链
```
研究方案Protocol
│ "年龄 16-35 岁、已签知情同意、无排除标准..."
变量清单Data Dictionary
│ age(数值型)、consent_date(日期型)、exclusion_criteria(选择型)...
质控规则QC Rules──── 按 7 大维度分类
│ D1: { "and": [{">=": ["age", 16]}, {"<=": ["age", 35]}] }
│ D3: { "<": ["consent_date", "screening_date"] }
│ D6: { "<=": [{"abs_diff": ["visit_date", "target_date"]}, 3] }
三级质控状态(变量级 → 事件级 → 记录级)
│ record_3 / baseline / exclusion_criteria → FAIL (D1:排除标准)
│ record_3 / baseline → FAIL
│ record_3 → FAIL
多维质控报告7 个维度各自独立汇总)
│ D1 入组质量: 13/14 通过 (92.9%)
│ D3 变量准确性: 98.5% 合格率
│ D5 安全性: 0 例未报告 AE
│ ...
项目健康度评分(加权综合)
│ 综合评分: 87/100
│ 建议: 关注 3 号受试者入组资格
行动eQuery 派发 / 告警推送 / 监查报告)
```
**关键洞察**:这条链路中的每一环都需要"维度category"这根线串起来。变量清单中的字段属于哪个表单→ 规则属于哪个维度→ 质控结果按维度汇总→ 报告按维度呈现。
### 2.2 IIT 场景的特殊性
我们的目标用户是 IIT研究者发起的试验与注册临床试验有显著区别
| 特征 | 注册试验 | IIT 项目 |
|------|---------|---------|
| 有无专职 CRA | 有,全职 CRA 团队 | 通常没有,或仅兼职 |
| 监管严格度 | 极高FDA/NMPA 审查) | 中等(伦理委员会审查) |
| EDC 系统 | 商业 EDCMedidata 等) | 多用 REDCap免费 |
| 预算 | 充足 | 有限 |
| AI 替代的意义 | 从 100% 提升到 110%(锦上添花) | **从 0% 提升到 70%(雪中送炭)** |
**这意味着**
- 我们不需要追求注册试验级别的完美覆盖
- 优先覆盖 IIT 中**最常出问题、最容易被忽视**的维度
- 先做"有胜于无"的基础覆盖,再做精细化提升
---
## 三、技术路径:三阶段演进
### 阶段一:数据质量基石(当前 → 近期)
**目标**:把已有的能力做扎实,建立正确的数据基础架构。
#### 核心工作
```
1. 三级质控数据结构
├── 变量级状态表qc_field_status
├── 事件级状态表qc_event_status
└── 记录级状态表record_summary 改造)
2. 规则分类体系
└── 每条规则标注所属维度D1-D7
3. 多模式触发
├── 实时触发REDCap DET Webhook已有代码
├── 定时触发(项目级 Cron 配置,取代全局硬编码)
└── 手动触发(一键全量质控 + AI 对话)
4. 报告结构升级
└── 从扁平报告 → 多维度报告框架
```
#### 覆盖的 CRA 维度
| 维度 | 阶段一目标 |
|------|-----------|
| D1 入组质量 | 已有入排规则,补充知情同意时序检查 |
| D3 变量准确性 | 已有范围检查,补充时序逻辑和跨表单关联 |
| D4 数据质疑 | 已有 eQuery 表,补充闭环状态机 |
#### 需要确认的问题
> **问临床专家**
> 1. IIT 项目中,入排标准检查和变量范围检查是否是最高优先级?
> 2. 知情同意日期 < 筛选日期 < 基线日期的时序校验,在 IIT 中是否必须?
> 3. 跨表单校验(如性别 vs 妊娠检查)在 IIT 中常见吗?
---
### 阶段二:方案合规覆盖(中期)
**目标**:覆盖 CRA 日常监查中最高频的工作——数据完整性检查和方案偏离侦测。
#### 核心工作
```
1. 数据完整性引擎D2
├── 按事件/表单统计应填字段 vs 实际已填
├── 分支逻辑感知(排除不应填的字段)
├── 录入时效统计REDCap 审计日志 → 计算延迟天数)
└── 缺失率阈值告警
2. 方案偏离侦测引擎D6
├── 访视窗口检查(目标日 ± 允许天数)
├── 操作遗漏检查Schedule of Assessment 对照)
└── 偏离严重性自动分级Major / Minor
3. 报告增强
├── 新增"数据完整性"章节
├── 新增"方案偏离"章节
└── 健康度评分初版D1+D2+D3+D6 加权)
```
#### 覆盖的 CRA 维度
| 维度 | 阶段二目标 |
|------|-----------|
| D2 数据完整性 | **新增**:缺失率、录入时效、分支逻辑计算 |
| D6 方案偏离 | **新增**:超窗检测、操作遗漏、偏离分级 |
#### 需要确认的问题
> **问临床专家**
> 1. IIT 项目中最常见的方案偏离类型是什么?(超窗?漏检?用药偏差?)
> 2. 访视窗口 ±N 天的 N 值,一般如何确定?是每个方案不同还是有通用标准?
> 3. 数据缺失率到多少算"红灯"IIT 行业有没有通用标准(如 3%、5%
> 4. 分支逻辑的处理——REDCap 中的分支逻辑字段在 Data Dictionary 中是否完整可读?
#### 技术前提
- **依赖阶段一**的三级数据结构和规则分类体系
- 需要从 REDCap 拉取 Schedule of Assessment表单-事件映射 + 必填字段清单)
- 需要从 REDCap 审计日志Logging API获取录入时间信息
---
### 阶段三:安全性与药物管理(远期)
**目标**:覆盖 CRA 工作中专业性最强的部分——不良事件监测和药物管理。
#### 核心工作
```
1. AE/SAE 安全性引擎D5
├── AE 识别触发(实验室异常自动触发 AE 检查)
├── 严重程度分级CTCAE 标准内嵌)
├── 时序逻辑AE 起止时间 vs 用药时间)
├── SAE 时效监控(发现后 24h 上报 deadline
└── LLM 辅助:因果关系初步评估(概率性判断)
2. 药物依从性引擎D7
├── 发药/回收核算
├── 依从性 = (发药量 - 回收量) / 预期量 × 100%
├── 80%-120% 合格区间判定
└── 批号有效期交叉比对
3. 实验室预警增强
├── 绝对值 vs 正常范围
├── 基线变化率监测(连续升高趋势)
└── DILI药物性肝损伤早期预警模型
4. 合并用药核查
├── 方案禁忌药物比对
├── 新增用药 ↔ AE 关联推断
└── 洗脱期计算
5. 完整健康度评分
└── 7 维度加权综合评分 + AI 建议后续行动
```
#### 覆盖的 CRA 维度
| 维度 | 阶段三目标 |
|------|-----------|
| D5 安全性监测 | **新增**AE/SAE 追踪、时效监控、因果评估 |
| D7 药物管理 | **新增**:依从性计算、批号追踪 |
#### 需要确认的问题
> **问临床专家**
> 1. IIT 项目中AE/SAE 的管理是由 PI 团队自行负责还是有外部安全委员会?
> 2. IIT 项目中是否普遍使用 CTCAE 分级?还是只在肿瘤相关 IIT 中常用?
> 3. 药物依从性在 IIT 中的重要性如何?是否每个 IIT 都涉及试验药物管理?
> 4. AI 做因果关系"初步评估"(而非最终判定),这在临床上能否被接受?
> 5. 合并用药的禁忌药物清单,是每个方案自定义还是有标准数据库可以引用?
#### 技术前提
- 依赖阶段一、二的基础设施
- AE/SAE 需要 REDCap 中有对应的 CRF 表单(不是所有 IIT 项目都有)
- 因果关系评估涉及 LLM 概率性推理SoftRuleEngine需要人类确认机制
- 药物管理需要 IWRS 或 REDCap 药物管理模块的数据接口
---
## 四、三级数据架构概要
三个阶段共用同一套数据架构,一次设计到位:
```
┌──────────────────────────────────┐
│ qc_field_status │
│ (变量级,保持最新) │
│ │
│ project × record × event × field │
│ + status + rule_category │
│ + actual_value + expected_value │
└───────────────┬──────────────────┘
│ 聚合
┌───────────────▼──────────────────┐
│ qc_event_status │
│ (事件级,保持最新) │
│ │
│ project × record × event │
│ + status (所有变量中最严重的) │
│ + 各维度计数 (d1_issues, d2_...) │
└───────────────┬──────────────────┘
│ 聚合
┌───────────────▼──────────────────┘
│ record_summary │
│ (记录级,保持最新) │
│ │
│ project × record │
│ + overall_status (所有事件最严重) │
│ + events_total / passed / failed │
└───────────────┬──────────────────┘
│ 聚合
┌───────────────▼──────────────────┐
│ 多维度质控报告 │
│ │
│ D1 入组质量: 92.9% │
│ D2 数据完整性: --(阶段二) │
│ D3 变量准确性: 98.5% │
│ D4 eQuery: 3 Open / 12 Closed │
│ D5 安全性: --(阶段三) │
│ D6 方案偏离: --(阶段二) │
│ D7 药物管理: --(阶段三) │
│ ───────────────────────── │
│ 健康度评分: 87 / 100 │
└──────────────────────────────────┘
```
**关键设计决策**`rule_category` 字段贯穿整个体系,阶段一只用到 `inclusion`/`exclusion`/`variable`,阶段二加入 `completeness`/`protocol_deviation`,阶段三加入 `ae_safety`/`ip_compliance`。**表结构不需要改,只是规则类别在扩展**。
---
## 五、规则类型与引擎匹配
不同维度的规则,其"确定性"不同,需要匹配不同的执行引擎:
| 维度 | 规则性质 | 适用引擎 | 举例 |
|------|---------|---------|------|
| D1 入组质量 | 确定性 100% | HardRuleEngine (JSON Logic) | age ∈ [16,35] |
| D2 数据完整性 | 确定性 100% | 专用 CompletenessEngine | 必填字段 A 为空 |
| D3 变量准确性 | 确定性 90%+ | HardRuleEngine | consent_date < screening_date |
| D4 数据质疑 | 管理流程 | 状态机 (eQuery Workflow) | Open→Answered→Closed |
| D5 安全性 | 确定性 60-80% | HardRule + SoftRuleEngine (LLM) | CTCAE 分级确定,因果关系需 LLM |
| D6 方案偏离 | 确定性 95% | HardRuleEngine + 日历引擎 | visit_date 超出窗口 ±3 天 |
| D7 药物管理 | 确定性 100% | HardRuleEngine | 依从性 = 85% ∈ [80,120] |
**核心原则**
- **确定性规则用硬引擎**HardRuleEngine / JSON Logic——结果可审计、可复现
- **概率性判断用软引擎**SoftRuleEngine / LLM——必须附带"AI 建议 + 人类确认"机制
- **D4 不是规则引擎问题**,而是流程管理问题(状态机)
---
## 六、覆盖率演进预期
```
100%─┬─────────────────────────────────────────────
│ ┌───────
80%─┤ ┌────────┤ 阶段三
│ │ D5+D7 │ 70-80%
60%─┤ ┌───────────┤ │
│ │ D2+D6 │ 阶段二 │
40%─┤ │ │ 50-60% │
│ ┌──────────┤ │ │
20%─┤ │ D1+D3+D4 │ 阶段一 │ │
│ │ │ 25-35% │ │
0%─┴──┴──────────┴───────────┴────────┴─────────
现状 阶段一 阶段二 阶段三
```
**说明**:百分比是估算值,表示对 CRA 可替代工作70-80%)的覆盖程度。阶段三完成后,系统应能覆盖 CRA 可替代工作的绝大部分。
---
## 七、与现有四大工具的关系
当前对话层的 4 个工具(`read_report``look_up_data``check_quality``search_knowledge`)在三个阶段中保持稳定,**工具不变,内涵在扩展**
| 工具 | 阶段一 | 阶段二 | 阶段三 |
|------|--------|--------|--------|
| `read_report` | D1+D3 报告 | + D2+D6 章节 | + D5+D7 章节 + 健康度评分 |
| `look_up_data` | 原始数据 + 质控标注 | + 缺失率标注 | + AE/ConMed 数据 |
| `check_quality` | 入排 + 变量检查 | + 完整性 + 偏离检查 | + AE + 依从性检查 |
| `search_knowledge` | 研究方案/CRF 搜索 | + Schedule of Assessment | + IB研究者手册 |
**这是一个很好的设计**——对 LLM 来说,工具数量和接口不变,它不需要"学习"新工具。内部的规则引擎和报告内容在持续丰富,对 LLM 透明。
---
## 八、风险与约束
### 8.1 数据源约束
| 数据需求 | 来源 | 约束 |
|---------|------|------|
| 变量值 | REDCap Record API | ✅ 已打通 |
| 变量定义Data Dictionary | REDCap Metadata API | ✅ 已打通 |
| 表单-事件映射 | REDCap Form-Event API | ✅ 已打通 |
| 录入时间(审计日志) | REDCap Logging API | ✅ 已实现exportLogging |
| 分支逻辑 | Data Dictionary.branching_logic | ⚠️ 需解析 REDCap 分支逻辑语法 |
| Schedule of Assessment | 研究方案 PDF + 人工配置 | ⚠️ 需要项目管理员手动配置 |
| AE/SAE 表单 | REDCap CRF | ⚠️ 取决于项目是否建了 AE 表单 |
| 药物管理数据 | REDCap CRF 或外部 IWRS | ❌ 可能不在 REDCap 中 |
### 8.2 IIT 场景的现实约束
- **不是所有 IIT 都有 AE 表单**:观察性研究可能没有不良事件采集
- **不是所有 IIT 都涉及试验药物**:非药物干预研究(如手术方案对比)无 D7
- **方案复杂度差异大**:简单的 IIT 可能只有 2 个访视,复杂的可能有 20+
- **REDCap 配置标准化程度低**:不同机构的 REDCap 项目结构差异很大
**应对策略**:系统必须支持"维度可选"——管理员在项目配置时勾选本项目适用的维度,未勾选的维度不执行、不展示。
### 8.3 LLM 在临床决策中的边界
| 场景 | LLM 角色 | 人类角色 |
|------|---------|---------|
| 数值范围检查 | 直接判定 | 不需要 |
| 时序逻辑检查 | 直接判定 | 不需要 |
| 数据缺失统计 | 直接计算 | 不需要 |
| AE 严重程度分级 | 根据 CTCAE 标准建议分级 | PI 确认 |
| AE 因果关系 | **初步评估(建议)** | **PI 必须确认** |
| 方案偏离严重性 | 按规则初分 Major/Minor | PI 可修正 |
| 综合健康度建议 | 提供建议行动 | PI 决策 |
**铁律**凡涉及医学判断的结论AI 只提供建议,必须经人类确认后才能写入正式记录。
---
## 九、待讨论的关键问题
以下问题需要在技术评审中与临床研究专家确认:
### 优先级与范围
1. **IIT 项目中,以下 7 个维度的重要性排序是什么?** 哪些是"必须有",哪些是"有了更好"
2. **D5安全性和 D7药物管理在 IIT 中的覆盖率有多高?** 是不是很多 IIT 项目并不涉及?
3. **三个阶段的划分是否合理?** 是否有维度需要提前或推迟?
### 规则可行性
4. **时序逻辑的通用性**:知情同意日 < 筛选日 < 基线日,这个时序在所有 IIT 中都成立吗?
5. **访视窗口**IIT 中 ±N 天的窗口一般怎么定?是写在方案里的还是有行业惯例?
6. **数据缺失率的"红线"**IIT 行业是否有通用的缺失率阈值标准?
7. **跨表单校验的实用性**:性别 vs 妊娠检查这类跨表单逻辑在 IIT 中常见吗?
### 临床接受度
8. **AI 做因果关系"初步评估"**PI 是否愿意参考?还是更倾向完全自行判断?
9. **自动生成的 eQuery 语气和内容**,是否需要 PI 先审核再发给 CRC
10. **健康度评分**PI 能否接受一个 AI 打分?评分维度和权重怎么定才合理?
### 数据源
11. **REDCap 中 Schedule of Assessment 的信息**是否足够完整?还是需要额外配置?
12. **AE 表单在 IIT REDCap 项目中的标准化程度如何?** 字段命名是否有规范?
---
## 十、总结
```
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ 研究方案 ──→ 变量清单 ──→ 质控规则 ──→ 三级质控状态 ──→ 多维报告 │
│ (7大维度) (变量/事件/记录) (7大章节) │
│ │
│ 阶段一D1 入组 + D3 变量 + D4 eQuery ── 数据质量基石 │
│ 阶段二D2 完整性 + D6 方案偏离 ── 方案合规覆盖 │
│ 阶段三D5 安全性 + D7 药物管理 ── 全维度覆盖 │
│ │
│ 确定性规则 → HardRuleEngine可审计、可复现
│ 概率性判断 → SoftRuleEngine + LLMAI 建议 + 人类确认) │
│ │
│ 工具层不变4 工具),内涵逐步扩展 │
│ 数据架构一次设计到位(三级状态表 + rule_category 字段) │
│ │
└──────────────────────────────────────────────────────────────────────┘
```
**本文档的目的不是确定"怎么做",而是确定"做什么、按什么顺序做、做到什么程度"。** 经团队和临床专家评审认可后,再基于此形成具体的开发计划和技术设计。