创建规则(V1)

18R3 及更早版本

你可以使用规则引擎创建数据验证规则,以验证 Vault EDC 中的数据。然后,Vault 可以根据规则的评估执行某些任务:

  • 在用户离开字段后创建系统生成的查询
  • 根据输入的数据在研究 中显示事件组
  • 根据输入的数据有条件地启用和禁用某些条目

你还可以使用公式来定义单位转换。当你为研究 定义了单位转换后,Vault EDC 可以使用正确的单位转换和存储输入的值,而不考虑数据录入用户的本地化输入格式。

表达式引擎版本:以下内容引用了 2019 年 4 月 19R1 Release 之前的原始公式语法和规则编辑器(表达式引擎 V1)。如果你的研究 是在 19R1 Release 之后创建的,请参见创建规则(V2)

系统管理的数据验证规则

数据验证规则可以对单个条目 强制实施约束。Vault EDC 使用你在条目定义属性面板中定义的属性来创建系统管理的数据验证规则。Vault EDC 会自动为以下属性创建数据验证规则:

  • 必填字段(必填(Required)复选框)
  • 范围验证(最小值(Minimum Value)最大值(Maximum Value)
  • 未来日期验证(未来日期(Future Date)

默认情况下,Vault 不会在用户定义的规则选项卡中列出系统管理的规则。如果你的组织希望在工作室中显示这些规则,你可以选择这样做。

要在用户定义的规则选项卡中显示系统管理的规则,请执行以下操作:

  1. 导航到管理(Admin)> 业务管理(Business Admin)> 研究设置(Study Settings)
  2. 单击 + 创建(+ Create)
  3. 对于名称(Name),输入“show_system_rules”。
  4. 对于研究(Study),选择你的研究
  5. 输入“true”作为值(Value)
  6. 点击保存

启用后,系统管理的规则可在工作室的规则选项卡中查看,但你只能从相关条目定义属性面板中编辑这些规则。系统托管的规则没有以蓝色突出显示的规则名称,并且不可单击。

规则属性

你可以从属性面板对规则执行其他配置。必需的属性具有黄色背景。有关可用属性的说明,请参见规则设计属性

使用规则的数据验证查询

你可以跨多个条目创建数据验证规则,也可以不基于系统管理规则的属性为单个条目创建规则。当输入的条目 值与你定义的条件不匹配时,Vault 将创建一个查询。

  1. 导航到规则(Rules)选项卡。
  2. 单击 + 新建规则(New Rule)
  3. 输入名称
  4. 选择将应用规则的表单
  5. 标准(Criteria)选项卡中,输入表达式(Expression)。在表达式的语法有效之前,你无法保存规则。 添加查询规则表达式

  6. 单击操作(Actions)选项卡。
  7. 操作类型(Action Type)下拉列表中,选择查询(Query)
  8. 输入查询要发布到(Post To)条目。你必须使用属性(Properties)面板中完整、准确的条目 名称(名称)字段。 查询规则操作

  9. 输入查询消息(Query Message)。此文本在表单上显示为查询备注。
  10. 点击保存

数据验证规则现在在你的研究中处于活动状态。要停用任何现有规则,请取消选中活动(Active)复选框。

数据验证规则在规则选项卡中显示为可单击链接。单击该链接将重新打开添加研究规则对话框,你可以在其中编辑规则。打开你创建的规则的属性面板,请单击链接旁边的规则行。

示例数据验证规则

{Vitals/Diastolic Blood Pressure} > {Vitals/Systolic Blood Pressure}

在此示例中,如果最左侧的条目值 Diastolic Blood Pressure 大于最右侧的条目值 Systolic Blood Pressure,Vault EDC 会生成一个查询。这两个条目都在 Vitals 表单上。由于此公式包含两个标识符,因此每个标识符都用大括号括起。

引用病例手册版本版本号

你可以将数据验证规则配置为仅评估特定版本的受试者病例手册。例如,你可以让规则针对版本 小于 8 的所有病例手册 运行。当你更新了病例手册定义,以致某个规则根据新设计不再有效时,此类型的规则非常有用。

要引用版本号,请使用以下语法:{@casebook__v.casebook_def__vr.version__v}

dateTimeDiff({Demographics/Birth Date Time}, {Screening}) >= 0 &&{@casebook__v.casebook_def__vr.version__v} > 7

在上面的示例公式中,仅当病例手册版本大于 7 时,规则才会确定受试者的出生日期 & 时间 与其筛选 事件的日期和时间的差异是否大于或等于 0。

存档(删除)规则

已删除的规则将存档。已存档规则的行为方式与非活动规则相同。Vault 会从验证和文档中排除这些规则,(以存档状态)部署它们,并阻止用户将其标记为活动。这会阻止这些规则的执行。

默认情况下,存档的规则不包含在“用户定义的规则”列表中。选中显示存档的规则(Show Archived Rules)复选框以包含它们。已存档规则在“已存档(Archived)”列中有一个绿色复选标记()。

如何存档规则

要存档规则,请执行以下操作:

  1. 导航到研究工作室 > 用户定义的规则
  2. 在列表中找到你的规则。
  3. 将鼠标悬停在规则的名称上以显示操作(Actions)菜单。
  4. 操作菜单中,选择 删除(Delete)

  5. 删除规则(Delete Rule)确认对话框中,单击删除(Delete)

你的规则现在已存档。选中显示存档的规则复选框以在列表中显示它。

如何恢复规则

要恢复已存档(已删除)的规则,请执行以下操作:

  1. 导航到研究工作室 > 用户定义的规则
  2. 选中显示存档的规则复选框。
  3. 在列表中找到你的规则。
  4. 将鼠标悬停在规则的名称上以显示操作(Actions)菜单。
  5. 操作菜单中,选择 恢复已删除的规则(Restore Deleted Rule)

Vault 将恢复规则。该规则现在处于活动状态,并将正常执行。

带规则的动态研究设计

你可以在研究中使用数据验证规则,根据用户输入的数据动态添加事件组。例如,你可以配置规则,以根据受试者的群组或随机化编号控制哪些事件组 显示在病例手册 中。你还可以使用数据验证规则根据另一个条目 值动态启用和禁用数据收集条目。

要生成动态研究设计规则,请执行以下操作:

  1. 导航到规则(Rules)选项卡。
  2. 单击 + 新建规则(New Rule)
  3. 输入名称
  4. 标准选项卡中,输入表达式。当你输入的公式对用户输入的数据返回 True 时,Vault EDC 会添加事件组事件表单,或启用条目
  5. 单击操作(Actions)选项卡。
  6. 操作类型下拉列表中,选择添加计划(Add Schedule)以添加事件组,选择添加事件(Add Event)以添加事件,选择添加表单(Add Form)以添加表单,或选择跳过条目(Skip Item)以有条件地启用条目
  7. 将操作设置为对象(Set Action to Object)下拉列表中,选择你希望 Vault 添加或启用的事件组事件表单条目。请注意,对于添加事件添加表单 操作类型,你只能选择选中了动态(Dynamic)复选框的事件表单 动态事件组规则操作

  8. 点击保存

事件组

使用此数据验证规则,当用户输入的数据被 Vault EDC 评估为 True 时,Vault EDC 会自动将指定的事件组 添加到该病例手册 中。

你必须使用数据验证规则来显示研究 中第一个事件组 之后的任何事件组。如果你想一次显示研究 的所有事件组,则可以配置规则来执行此操作。参见以下示例。

textEquals({ItemGroup/Item}, _Item_value_)

要显示所有事件组,请使用研究 中的第一个表单 上的条目。在公式中包含所有可能的值,以便无论输入哪个条目 值,公式都返回 true。你需要为要显示的每个事件组 配置规则。例如,如果一项研究有两个群组,并且群组分为事件组 A事件组 B,则必须创建一个规则来添加事件组 A,并创建另一个规则来添加事件组 B

事件 & 表单

在使用动态事件表单 之前,你必须联系 Veeva 支持以启用此功能。

你可以通过在控制 上使用添加事件添加表单 操作类型配置规则,根据用户输入的数据有条件地将事件表单 添加到病例手册。当该规则的计算结果为 True 时,Vault EDC 会自动将从属事件表单 添加到病例手册 中。如果规则的计算结果为 False,则 Vault 不会添加事件表单

要将事件定义表单定义 与这些规则一起使用,你必须在属性面板中选中该事件表单动态复选框。

例如,你可以创建一个规则,当用户在表单上选中需要跟进访视(Follow Up Visit Required)复选框时,添加跟进访视 事件。

要有条件地添加多个事件表单,请在将操作设置为对象字段中输入多个标识符,以逗号分隔。请注意,你只能为添加事件 规则输入多个事件,为添加表单 规则输入多个表单

与动态事件组 不同,你不必创建添加事件添加表单 规则以在研究 中显示任何事件表单。这些规则旨在临时用于有条件地添加事件表单,类似于动态字段的可用功能。

删除“添加事件”&“添加表单”规则

与其他规则类型不同,添加事件添加表单 规则会在规则执行时创建额外的对象记录:规则结果。如果你需要删除这些类型的规则,并且该规则已执行,则首先需要删除与该规则相关的所有现有规则结果 记录。

请注意,如果你尚未发布病例手册定义,则无需执行以下步骤即可删除这些规则。

要删除规则结果 记录,请执行以下操作:

  1. 管理(Admin)> 业务管理(Business Admin)导航到 规则结果 对象。
  2. 规则定义(Rule Definition)字段中找到包含要删除的规则的所有规则结果 记录。你可以选择添加一个规则定义列,方法是从操作菜单中选择编辑列(Edit Columns)
  3. 在每个规则结果 记录上,从每个规则结果 记录的操作菜单中选择删除
  4. 单击确定(OK)

字段

要有条件地启用数据录入条目条目组,请使用跳过条目 操作类型对单个控制 配置规则。当“跳过条目”规则的计算结果为 True 时,Vault EDC 会自动禁用从属条目条目组。如果规则的计算结果为 False,则 Vault EDC 会将该从属 条目条目组 保持启用。

在当前版本中,你只能使用单个布尔值或代码列表类型的条目 作为表达式中的控制

但是,你可以选择在表达式中使用 OR 语句,为控制 设置多个可能的值,作为禁用从属条目条目组 的条件。

例如,你可以构建一个规则,以根据性别 条目有条件地禁用妊娠试验结果 条目。

textEquals({Screening Visit/Demographics/Creation Criteria/Gender}, Male)

使用此规则,将跳过条目操作设置为妊娠试验结果 条目。Vault 会评估用户输入的数据中的性别,并在性别 条目设置为男性 时禁用妊娠试验结果 条目。

要有条件地启用多个条目条目组,请输入多个标识符,以逗号分隔。以下示例将启用或禁用妊娠试验节育 条目。

{Creation Criteria/Pregnancy Test}, {Creation Criteria/Birth Control}

请注意,Vault 不会对已禁用的条目 创建所需的条目 查询。

使用规则派生值

你可以在研究 中使用规则,以使用派生值自动填充条目字段。在你可以使用此功能之前,管理员必须联系 Veeva 支持来启用它。

在当前版本中,“设置条目值”类型的规则为单个表单。你在表达式中引用的任何条目必须与派生的条目位于同一表单上。

要创建规则以派生条目 值,请执行以下操作:

  1. 创建或编辑条目定义,并将其设置为派生(Derived)条目类型
  2. 导航到规则(Rules)选项卡。
  3. 单击 + 新建规则(New Rule)
  4. 输入名称
  5. 标准选项卡中,输入表达式。Vault EDC 使用此表达式的结果填充条目。请注意,此表达式返回的数据类型必须与条目 预期的数据类型匹配。
  6. 单击操作(Actions)选项卡。
  7. 操作类型下拉列表中,选择设置条目值(Set Item Value)
  8. 条目(Item)下拉列表中,选择你希望 Vault 使用表达式的计算结果填充的条目。请注意,只有为条目类型 选择了派生条目 才可用。
  9. 点击保存

示例“设置条目值”规则

表单 上,你可能希望包含 BMI条目 字段。你可以将 Vault EDC 配置为自动派生此条目 值,而不是让研究者单独计算每个受试者的 BMI。为 BMI 创建条目定义,并将条目类型(Item Type)属性设置为派生(Derived)BMI 条目必须与身高体重 条目位于同一表单 上。

使用以下表达式创建规则,然后选择设置条目值操作并选择 BMI 条目。

{Vitals/Weight}/({Vitals/Height}*{Vitals/Height})

用户完成表单 后,Vault EDC 将使用表达式的结果自动填充 BMI 条目字段。

使用规则设置受试者状态

你可以在研究 中使用规则,根据用户输入的数据自动设置受试者的状态

Vault 会维护每个受试者的状态随时间变化的历史记录。如果用户稍后编辑控制数据,导致规则计算结果为 false,则 Vault 会将受试者 返回到上一个(最新)状态。

可用受试者状态

以下选项可用于受试者状态

  • 预筛选(Pre Screen)
  • 筛选中(In screening)
  • 筛选失败(Screen Failure)
  • 已入组(Enrolled)
  • 已随机化(Randomized)
  • 治疗结束(End of Treatment)
  • 已退出(Withdrawn)
  • 完成

Vault 仅允许你将受试者 移动到更高级的状态。例如,你可以将受试者从已入组 移动到已随机化,但不能将受试者从完成 移动到已入组

Vault 将事件日期 或者日期或日期时间条目 的值记录为状态更改的日期。Vault 根据目标状态 使用受试者 对象(subject__v)上的不同字段记录此日期。请注意,预筛选 状态在受试者 上没有日期字段,因为它是初始受试者状态。

  • 筛选中 → 筛选日期screened_date__v
  • 筛选失败 → 筛选失败日期screen_failed_date__v
  • 已入组 → 入组日期enrolled_date__v
  • 已随机化 → 随机化日期randomized_date__v
  • 治疗结束 → 治疗结束end_of_treatment_date__v
  • 已退出 → 退出日期withdrawn_date__v
  • 完成 → 研究结束日期end_of_study_date__v

如果为状态更改日期选择一个条目,则该条目 必须为日期或日期时间数据类型,并且不能属于重复条目组。对于未知日期和时间,Vault 会将日期或时间的未知部分替换为可能的最小(最早)值。

当规则的计算结果为 true 时,Vault 始终为特定状态 添加状态日期,无论该状态是否为最新,或者受试者是否实际进入该状态。

当设置最高级状态的规则回滚时(例如,由于表单被重置),Vault 还会移除该状态的受试者状态日期。如果在“工作室(Studio)”>“设置(Settings)”中将“启用受试者状态日期回滚(Enable Subject Status Date Rollback)”设置为“是”,则当关联的受试者状态规则的计算结果为 false 时,为受试者存储的任何状态日期都将被移除。

当你在“工作室”>“设置”中将启用受试者状态日期回滚 设置为 时,如果未设置最高级状态的规则的计算结果为 false,则 Vault 不会移除该状态的受试者状态日期。

在 20R1 之前创建的“设置受试者状态”规则

如果你在 20R1 Release(2020 年 4 月)之前创建了任何设置受试者状态 规则,则可以继续使用它们,而无需选择日期。但是,如果你编辑规则,则在选择状态更改日期之前,你将无法保存规则。

设置受试者状态 & 受试者 ID

如果你的研究 使用 by_site 受试者 ID 生成方法,则每次规则将该受试者 返回到筛选中 时,Vault 都会递增该受试者的 ID,而不考虑现有的受试者 ID 值。

示例“设置受试者状态”规则

你可能希望在筛选事件有事件日期 后自动将受试者的状态 设置为筛选中。你可以使用设置受试者状态 规则来执行此操作。

使用以下表达式创建规则,然后选择设置受试者状态 操作类型和筛选中 状态。

Not(IsBlank(@Screening.Screening.event_date__v)

一旦筛选 事件的事件日期 不为空(在数据录入用户输入日期后),Vault 会将该受试者状态 更新为 筛选中

使用规则发送电子邮件通知

你可以在研究 中使用规则,在发生某些情况时自动向一组用户发送电子邮件通知。

了解有关发送电子邮件通知的更多信息。

可用的规则操作类型

以下操作类型可用于 Vault EDC 中的规则:

操作类型 字段 结果
未处理的查询 查询级别(Query Level)、
条目/事件(Item/Event)、
查询消息(Query Message)
当表达式的计算结果为 True 时,Vault 将使用输入的查询消息(在“规则操作”面板中标记为“输入消息(Enter message)”的字段)对选定的条目事件日期 创建查询。查询消息的字符数限制为 500 个。查询消息中允许使用特殊字符,但它们可能无法在导出文件中正确显示。
添加事件组 事件组 当表达式的计算结果为 True 时,Vault 会将选定的事件组 添加到病例手册计划中。
添加事件 1 事件 当表达式的计算结果为 True 时,Vault 会将选定的事件 添加到病例手册计划中。
添加表单 1 表单 当表达式的计算结果为 True 时,Vault 会将选定的表单 添加到病例手册计划中。
禁用 4 标识符(Identifier) 当表达式的计算结果为 True 时,Vault 将禁用选定的条目
添加评估 2 评估(Assessment) 当表达式的计算结果为 True 时,Vault 将创建一个评估
设置受试者状态 状态 当表达式的计算结果为 True 时,Vault 会将受试者的状态更新为所选状态,并记录状态更改日期。如果受试者的当前状态与规则的状态相同,则不会发生任何更改。
创建集成条目1 不适用 当表达式的计算结果为 True 时,Vault 会创建一个集成任务记录。
Set Derived Value(设置导出值) 条目 Vault 使用表达式的计算结果填充选定的条目。
发送电子邮件 不适用 当表达式的计算结果为 True 时,Vault 使用配置的主题和邮件向预配置的收件人组发送电子邮件。
渐进显示 2, 3, 4 不适用 在当前版本中,此操作类型仅适用于系统生成的规则。要配置渐进显示,请从“工作室(Studio)”>“计划(Schedule)”中编辑条目的属性。了解详情
覆盖审查 审查计划任务(Review Plan Task)、覆盖默认计划时使用(Override default plan with) 当表达式的计算结果为 True 时,Vault 会用所选的审查计划 覆盖表单的默认审查计划(在“规则详细信息”面板中选择的表单定义)。
设置为准备随机化 5 不适用 当表达式的计算结果为 true 时,Vault 会将受试者标记为“准备随机化(Ready for Randomization)”,这将启用“数据录入(Data Entry)”选项卡中的“随机化(Randomization)”选项。

1 请联系 Veeva 支持,以启用此操作类型。

2 此操作类型仅在启用了 Role by Study 的 Vault 中可用。请联系 Veeva 支持以在 Vault 中启用 Role by Study。

3 此操作类型仅在使用自动部署模型的研究中可用。

4 此行动类型的可用性取决于研究配置 记录上的规则版本(Rules Version)字段。如果规则版本 为“2”,则禁用 操作不可用。

5 此操作类型仅在配置了随机化的研究中可用。

规则处理顺序

数据录入用户完成表单 后,Vault EDC 将按以下操作类型顺序处理规则:

  1. 设置项值
  2. Add Schedule(添加计划)
  3. Add Event(添加事件)
  4. Add Form(添加表单)
  5. 查询

在每种规则类型中,Vault EDC 按以下顺序处理规则:

  1. 单表单规则(控制对象和从属对象位于同一表单 中)
  2. 跨表单 - 同事件规则(控制对象和从属对象位于不同的表单 中)
  3. 跨表单 - 跨事件规则(控制对象和从属对象位于不同的事件 中)

Vault 按此顺序处理规则,以便在存在所有预期数据的情况下,可以处理受派生条目值或任何添加的事件组事件表单 影响的任何查询类型规则。

单位转换公式

你还可以使用公式来定义单位转换。请参见在工作室中定义默认单位 & 转换

可用的运算符 & 函数

有多个运算符和函数可用于数据规则验证。有关完整列表,请参见 Vault 公式参考指南

公式指南

使用条目组条目名称 来标识公式中的条目。如果研究设计多次使用该条目,请按层次结构标识该条目,直到唯一为止。如果公式中有多个标识符,请使用大括号将 {标识符} 括起。如果你的公式包含多个运算符,请使用括号。Vault 从左到右处理公式。对于嵌套函数,Vault 先从左到右处理子函数,然后再处理父函数。Vault 按照标准运算顺序,先处理算术和逻辑运算符,再处理其他类型的运算符。你可以使用括号覆盖运算顺序。请注意,Vault EDC 将数字视为浮点数,并在公式评估结束时对其进行解析。

表达式指南

编写表达式时,请遵循以下指南:

  • 小数点使用句点,而不考虑 Vault 区域设置。
  • 公式的最大表达式长度为 1,500 个字符。
  • 当表达式包含多个标识符时,用 {大括号} 将标识符括起。
  • 你必须按层次结构定义条目,直到唯一为止,并用正斜杠分隔标识符:{Event/Form/Item Group/Item}。示例:{Baseline Visit/Vitals/Blood Pressure/Systolic blood pressure}
  • 要定义值的单位,请在下划线之间附加单位 名称。示例:Pulse_bpm_Diastolic blood pressure_mmHg_

函数指南

在公式表达式中添加函数时,请遵循以下指南:

  • 函数名称区分大小写。
  • 函数可以有一个或多个参数。不同函数允许不同数量的参数。

布尔值类型条目指南

编写引用布尔值类型条目的公式时,使用 true 表示(复选框已选中),使用 false 表示(复选框未选中)。

错误处理

任何语法错误都必须在创建或更新规则之前解决。单击条件(Criteria)字段以外的区域时,如果公式语法不正确,Vault 会显示表达式无效(Expression is invalid)。以下是常见的语法错误:

  • 返回的类型不匹配。例如,如果返回类型为日期,但表达式返回一个数字,那么将收到错误。
  • 公式缺少结束括号,或者括号不匹配。
  • 函数中参数的数量不正确。例如,在 if(expression, value 1, value 2) 函数中使用了三个参数。
  • 函数具有不正确的参数值。