규칙에 대한 팁 및 모범 사례
이 페이지에는 스터디의 규칙을 생성할 수 있도록 다양한 팁과 모범 사례가 나열되어 있습니다. 규칙 생성에 대한 지침은 규칙 생성을 참조하십시오.
규칙 세부 정보(속성)
규칙 설명
- 짧고 완전한 문장을 사용합니다.
- 모든 매개변수를 포함하여 규칙의 의도를 명시적으로 표시합니다.
- 양식 및 이벤트를 추가할 때 규칙 작동 방식에 대한 설명을 입력합니다.
- 예시: 시험대상자가 모든 자격 기준을 충족했습니까? "예"를 선택한 경우 치료 이벤트 그룹(egTREAT)을 추가합니다.
- 쿼리 규칙의 경우 값을 처리해야 하는 방식을 정확히 표시합니다(예: '... 이상'과 '... 초과' 비교).
- 예시: '종료 일자가 시작 일자 이전'과 '종료 일자가 시작 일자이거나 이전' 비교.
- 양식 및 이벤트를 추가할 때 규칙 작동 방식에 대한 설명을 입력합니다.
- 테스터는 규칙 통과 여부를 확인하는 설명에 대해 테스트합니다.
- 스터디 사양이 생성되므로 설명 내 항목 레이블을 사용합니다(예: "AESTDAT" 대신 "시작 일자" 사용).
규칙 범위 및 동적 작업&
필요한 경우 항상 규칙 범위의 이벤트 그룹 내를 선택해야 합니다. 이는 예상대로 발행되지 않는 규칙 문제를 해결할 수 있는 가장 흔한 이유입니다.
이메일 보내기 규칙
Vault에서 이메일 규칙에 대한 규칙 실행 데이터를 저장하지 않으므로 이메일 보내기 규칙 생성 시 항상 토큰을 사용합니다.
누락된 데이터 평가(공백 처리)
모범 사례: 항목의 필수 속성은 해당 항목이 공백일 때마다 발행하는 시스템 생성 규칙(일변량)을 생성합니다. 이를 누락된 데이터에 대한 기본 검사로 사용합니다.
사용자 정의 규칙의 경우 표현식 내 논리를 적용하여 데이터가 누락되지 않았는지 확인합니다. 데이터 누락 시나리오가 배제되면 서버 오류, 중복 쿼리 또는 예상치 못한 기타 동작이 발생할 수 있습니다.
Not(IsBlank(ITEM))
를 포함하여 데이터가 누락되지 않았거나 null이 아닌지 확인합니다.
숫자 필드를 평가할 때 규칙 편집기의 공백 처리 속성을 사용하여 Vault에서 빈 값을 처리하는 방법을 선택해야 합니다. 다음 옵션에서 선택할 수 있습니다.
- 0으로 처리: Vault에서 공백 값을 0으로 대체하여 함수 계산을 완료할 수 있도록 합니다.
- null로 처리: Vault에서 공백 값을 null로 처리하여 전체 표현식이 null/빈 값을 반환하도록 합니다.
표현식 및 논리&
#define
문은 식별 및 복사 효율성을 높이기 위해 정확한 항목 이름(거의 정확한 수준까지)을 사용하여 변수를 식별해야 합니다.- 항목 이름이 밑줄(_)로 시작하는 경우 변수의 이름을 변경하여
#define
문에서 밑줄을 제거해야 합니다. 그렇지 않으면 구문 오류가 발생합니다. /* 사용... */
필요한 경우 규칙의 맨 위에 주석을 추가하여 명확성을 높입니다. 규칙 표현식의 맨 위에 이 주석을 추가하지 않으면 규칙을 저장할 수 없습니다.- 스터디 수행 중에 다른 스터디 설계자가 필요할 수 있습니다. 항목을 표현식에 제대로 명명하면 규칙의 명확성을 높이고 개정 작업 수고를 줄일 수 있습니다.
- 간격과 줄 바꿈을 사용하여 규칙의 명확성을 높일 수 있습니다.
스터디 설계자는 개별 논리 섹션을 구분하기 위해 줄을 추가하기로 선택했습니다. 또한 각 논리적 표현식에서 별도의 줄을 사용하여 추가 간격에 맞게 연산자를 조정했습니다.
시간대
규칙의 시간대에 적용되는 모범 사례는 다음과 같습니다.
DateValue
사용 시 항상@Site.timezone__v
매개변수를 포함합니다. 이로써 Vault는 사이트 시간대를 사용하여 날짜를 반환할 수 있습니다. 또는 선택한 시간대를 지정할 수 있습니다. 이 시간대 항목 형식 목록을 참조하십시오.- 날짜 및 시간을 함께 추가하여 날짜/시간을 반환하는 경우 연산자
+
는 사용자의 시간대를 사용합니다. 사이트 시간대(CDMS에 권장됨)를 사용하여 이 작업을 수행하려면StartOfDate(date, @Site.timezone__v) + time
을 사용합니다.
항목 값 설정 규칙 및 파생 값 설정 규칙
파생 값 설정 규칙은 교차 양식 도출 기능을 사용하여 22R3 릴리스의 항목 값 설정을 대체했습니다.
이 때문에 동일한 스터디에서 항목 값 설정 규칙과 파생 값 설정 규칙을 사용할 수 없으므로 한 가지 규칙 유형을 사용하는 스터디의 규칙을 다른 규칙 유형을 포함하는 스터디로 복사할 수 없습니다(반대의 경우도 가능).
항목 값 설정 규칙과 파생 값 설정 규칙 모두에 @Form
부동 식별자("와일드카드 식별자"라고도 함)를 사용해야 합니다. 이 규칙 유형에서 @Form
부동 식별자가 사용되므로 규칙 작업이 동일한 수준으로 정규화되어야 합니다.
파생 값 설정 규칙과 항목 값 설정 규칙에 대해 자세히 알아보십시오.
날짜 비교 규칙
모범 사례: 날짜 항목을 다른 날짜 항목과 비교하려면 가능하면 날짜 비교 구성기를 사용하는 것이 좋습니다.
날짜/시간과 날짜 비교
아래 두 예시는 날짜/시간 형식 항목의 값을 이벤트 날짜와 비교하는 방법을 보여 줍니다. 이 구문은 날짜/날짜/시간 비교에 적용됩니다.
날짜/시간 항목은 알 수 없는 항목을 허용하지 않습니다.
Not(IsBlank(DTC)), Not(IsBlank(EVDAT)) 및 DateValue(DTC, @Site.timezone__v) != EVDAT
&&&&
알 수 없는 항목을 허용하는 날짜/시간 항목:
Not(IsBlank(EVDAT)), &&Not(IsBlank(VSDTC)) 및 &&If(Right(VSDTC, 4) = "UNKZ", DateValue(MinDateTime(VSDTC), 'UTC'), DateValue(MinDateTime(VSDTC), @Site.timezone__v)) != EVDAT
날짜 및 날짜/시간을 =
와(과) 비교할 때 Vault는 Vault의 시간대를 사용하여 날짜/시간을 날짜로 변환합니다. 사이트 시간대를 대신 사용하려면 DateValue({datetime}, @Site.timezone__v)
를 사용합니다.
날짜/시간과 날짜 및 시간 비교&
날짜 항목과 시간 항목을 함께 추가하여 날짜/시간(DateItem + TimeItem
)을 생성할 때 StartOfDay(Date, @Site.timezone__v)
를 사용한 다음 시간 값을 추가합니다. 날짜와 함께 사용되면 StartOfDay
에서 00:00
을 반환합니다.
아래 예시에서 실험실 수집 날짜/시간이 경구투여 시작 일자 및 시간 경과 후 8시간 +/- 30분인지 확인합니다. 참조할 스터디 설계는 다음과 같습니다.
- LBDTC: 실험실 패널 양식의 날짜/시간 형식 항목
- EXSTDAT: 날짜 유형 항목
- EXSTTIM: EXSTDAT와 동일한 양식의 시간 유형 항목
이 예시에서 @Form
부동 식별자("와일드카드 식별자"라고도 함)가 사용되므로 대부분의 경우 규칙 작업은 동일한 수준으로 정규화되어야 합니다.
#define LBDTC @Form.LBHEADER.LBDTC #define EXSTTIM $eg_MAINC1.ev_VISIT1.EXOR.ig_EXOR.EXSTTIM #define EXSTDAT $eg_MAINC1.ev_VISIT1.EXOR.ig_EXOR.EXSTDAT Not(IsBlank(LBDTC)), &&Not(IsBlank(EXSTTIM)), &&Not(IsBlank(EXSTDAT)) 및 Not(InWindow( LBDTC, StartOfDay(EXSTDAT, @Site.timezone__v) + EXSTTIM, Minutes(450), Minutes(510), false, false )) 규칙 세부 정보 양식: 실험실
&&
미래 날짜 규칙
모범 사례: 이벤트나 항목에 대한 속성 패널의 편집 검사 섹션에서 미래 날짜 속성을 선택하여 미래 날짜를 확인하기만 하면 됩니다. 이 확인란이 선택되면 사이트 사용자가 미래 날짜를 입력할 때마다 Vault에서 쿼리가 엽니다(사이트 사용자 시간대에 따라).
사용자 정의 규칙으로 미래 날짜를 확인하려면 표현식의 DateValue(Now(), @Site.timezone__v)
를 사용합니다. Now()
, Today()
및 DateValue()
등의 함수는 UTC 형식으로 변환된 날짜를 반환합니다. 협정 세계시(UTC)는 경도 0°의 자오선을 기준으로 하는 표준화된 시간입니다.
날짜 및 시간이 UTC를 벗어나는 국가의 경우(예: 이탈리아, 남아프리카 공화국, 호주) @Site.timezone__v
가 포함되지 않으면 규칙이 예기치 않게 발행될 수 있습니다. @Site.timezone__v
를 모범 사례로 사용하여 변환된 값을 사이트 시간대로 다시 반환하고 규칙을 예상대로 발행하도록 합니다.
이벤트 날짜와 날짜 항목 비교
스터디 설계자는 @Event.event_date__v
를 부동 식별자로 사용하여 더 많은 이벤트를 유도하고 더 적은 규칙을 작성할 수 있습니다. 단, @Form
에서와 달리 이벤트는 역수가 아닙니다. @Event.event_date__v
가 포함된 규칙은 특정 이벤트 날짜가 수정되면 재평가되지 않습니다.
이벤트 날짜($EventGroup.Event.event_date__v
또는 @EventGroup.Event.event_date__v) 비교 시 정규화된 방문 식별자를 사용하고 각 이벤트 인스턴스에 대해 한 가지 규칙을 작성하는 것이 좋습니다.
예를 들어 사용자가 이벤트 내 정의된 양식을 완료하고 나서 이벤트 날짜를 수정하면 아래와 같은 규칙은 재평가되지 않습니다.
#define EVDAT @Event.event_date__v #define DAT @Form.ig_VS.VSDAT EVDAT != DAT
아래 예시는 부분(알 수 없는) 날짜를 허용하지 않는 날짜 항목과 비교하여, 정규화된 이벤트 날짜 식별자를 보여 줍니다.
#define QSDAT @Form.QS.QSDAT #define EVDAT $FOLLUP.V7.event_date__v Not(IsBlank(QSDAT)), &&Not(IsBlank(EVDAT)), QSDAT 및 EVDAT 규칙 세부 정보 양식: QS
&&>
아래 예시에서 정규화된 이벤트 날짜 식별자와 알 수 없는 시간을 허용하는 날짜/시간 형식 항목을 비교합니다. 이 표현식은 평가 날짜 및 시간(EGDTCD) 항목이 양식의 이벤트 날짜와 같지 않은 경우 쿼리를 여는 쿼리 작업 규칙에 적용됩니다.
#define EVDAT $FOLLUP.FOLLUP.event_date__v #define EGDTC $FOLLUP.FOLLUP.ECG.ig_ECG.EGDTC Not(IsBlank(EVDAT)), &&Not(IsBlank(EGDTC)) 및&& If( Right(EGDTC, 4) = "UNKZ", DateValue(MinDateTime(EGDTC), 'UTC'), DateValue(MinDateTime(EGDTC), @Site.timezone__v) ) != EVDAT
@Event의 다른 사용 사례는 어떻습니까?
@Event
를 사용하여 동일한 이벤트 내 다른 양식을 참조합니다. 예로 동일한 이벤트에서 활력징후를 의약국(EX) 양식의 특정 기간 내에 측정해야 하는 경우 @Event.FORM.IG.ITEM
을 사용하여 다른 양식을 참조할 수 있습니다. 이러한 식으로 표현식을 작성하면 여러 이벤트에서 규칙을 재사용할 수 있습니다.
#define VSDTC @Form.VSTPT2.VSDTC #define EXSTDTC @Event.EX.EX.EXSTDTC Not(IsBlank(VSDTC)) && Not(IsBlank(EXSTDTC)) && Not(InWindow(VSDTC, EXSTDTC, Minutes(5), Minutes(10), false, false)) 규칙 세부 정보 양식: VS
시간 비교(시간 비교 규칙)
정적 시점
예: 입력한 시간이 오후 12:00 이후인 경우 쿼리 발행
TIM1 > 시간(12,0,0)
두 시간 비교
시간 - 시간
은 두 시간의 분 수를 반환합니다.
이 규칙은 문(TimeA - TimeB > #
)으로 작성되며, 여기서 계산이 TimeA
와 TimeB
간의 델타를 숫자(분 단위)로 반환합니다.
예시: 투여 종료 시간이 투여 시작 시간이거나 이후
EXENTIM - EXSTTIM >= 0
예시: 주입 종료 시간이 주입 시작 시간으로부터 12시간 이상 경과한 경우(참고: 12시간 X 60분 = 720분)
EXENTIM - EXSTTIM > 720
항목을 분 수를 계산하는 표현식과 비교하여 이 예시를 작성할 수도 있습니다.
EXENTIM - EXSTTIM > 12*60
직접적 비교는 지원되지 않음: Vault는 시간 + 시간
, 시간 = 시간
또는 시간(논리 연산자) 시간
등 시간 간의 직접적, 논리적 비교를 지원하지 않습니다. Vault는 시간 + 숫자
또는 시간 - 숫자
또한 지원하지 않습니다.
DateValue가 포함된 규칙
DateValue()
함수로 규칙을 작성할 때는 항상 'DateValue(
이벤트 날짜 규칙이 발생하지 않음&
프로토콜을 통해 피험자가 이벤트를 누락하고 다음 이벤트로 계속 진행할 수 있는지 고려해야 합니다. 이와 마찬가지로, 사이트에서 이벤트를 발생하지 않음으로 표시할 수 있는 이벤트 날짜를 검사하는 규칙을 고려해야 합니다.
규칙 표현식에서 Not(IsBlank())
함수 사용에 익숙해지면 날짜가 입력되었는지 확인할 수 있습니다. 이를 확장하게 되면 이벤트의 변경 이유($EventGroup.Event.change_reason__v
) 항목을 확인하여 사이트에서 _ Event를 발생하지 않음으로 표시했는지 확인할 수 있습니다. 여기서 Vault는 사이트에서 선택한 이벤트가 발생되지 않는 이유를 기록합니다.
아래 예시에서 발생되지 않은 이유를 명시적으로 확인합니다.
#define EVDAT $TX.DAY9.event_date__v #define EVDNO $TX.DAY9.change_reason__v Not(IsBlank(EVDAT)) || EVDNO = "Subject missed event"
이 규칙 표현식(이벤트 추가 규칙 작업과 함께 사용)에서 변경 이유를 확인하고, 변경 이유가 "피험자 이벤트 누락"인 경우 다음 이벤트 롤아웃을 허용했습니다. 사이트에서 피험자 조기 종료가 대신 선택된 경우 이 규칙은 다음 이벤트를 추가하지 않습니다.
스터디 Vault에 사용 가능한 변경 이유에 대한 정확한 텍스트를 확인해야 합니다. 제대로 평가하려면 변경 이유는 규칙과 정확히 일치해야 합니다. 도구 > 시스템 도구 > 변경 이유에서 사용 가능한 이유와 표준 및 사용자 정의 모두를 볼 수 있습니다.
불린 항목 규칙(확인란)
true 또는 false로 설정되지 않은 부울 항목(확인란)은 빈 항목("미결정")으로 간주됩니다. 이는 사이트에서 확인란을 선택하지 않는 경우와 확인란을 선택한 다음 선택 취소하는 경우에 발생할 수 있습니다. 규칙 표현식 내 논리가 적절하면 예상대로 시나리오를 제대로 평가할 수 있습니다. 모범 사례는 규칙 표현식에서 부울을 = true
또는 = false
로 명시적으로 설정하는 것입니다.
부울 세트 평가 시 적절한 define 문을 포함하면 모두 공백으로 남습니다. 양식/항목이 의도적으로 공백으로 남김(ILB)로 표시되는 시간과 규칙 작동에 필요한 방식을 고려합니다.
아래 예시에서 규칙은 이유가 입력되고 하나 이상의 확인란이 선택되었는지 확인합니다.
#define ND1 @Form.ig_V1.V1ND #define ND2 @Form.ig_V2.V2ND #define ND3 @Form.ig_V3.V3ND #define ND4 @Form.ig_V4.V4ND #define REAS @Form.ig_V5.VREAS Not(IsBlank(REAS)) 및&& (ND1 = true || ND2 = true || ND3 = true || ND4 = true)
항목 또는 확인란 세트의 공백 여부를 평가할 때 define 문에 의도적으로 공백으로 남김(ILB)을 포함하여 필요에 따라 양식 또는 항목이 ILB로 표시되어 있는지 확인합니다. 이렇게 하면 규칙이 발행되지 않아야 할 때 발행되지 않습니다.
#define AENONE @Form.AE.AENONE #define AEMED @Form.AE.AEMED #define AEACNOTH @Form.AE.AEACNOTH #define AETRANS @Form.AE.AETRANS #define FORMILB @Form.intentionally_left_blank__v FORMILB = &&false(AENONE = false, AEMED = false,&& AEACNOTH = &&false 및 AETRANS = false) 규칙 세부 정보 양식: 이상 사례 &&
이를 종종 이상 사례 관련 규칙 또는 설문지 및 의료 기기 양식에 적용하여 "해당 항목 모두 선택" 확인란이 선택되지 않았는지 확인합니다. 이 논리가 적용되는 일반적인 규칙은 다음과 같습니다.
- 인종에 대한 선택 항목은 없습니다. 해당 항목 모두 선택
- AE 실시한 작업: 없음을 선택하고 약물 등이 선택되었습니다. 수정하십시오.
연령 규칙
다음 규칙 예시에서 윤년을 고려하여 연령을 계산하고 쿼리합니다.
연령 도출(항목 값 설정)
이 예시 규칙 표현식에서는 인구 통계 양식에 입력된 데이터를 기반으로 피험자의 연령을 도출합니다. 이 표현식은 @Form
부동 식별자("와일드카드 식별자"라고도 함)를 사용하므로 규칙 세부 정보 패널에서 참조된 양식을 선택해야 합니다. 대부분의 경우 규칙 작업은 식별자와 동일한 수준으로 정규화되어야 합니다. 예를 들어 항목 값 설정 작업을 선택하고 이 양식 > ig_DM > 연령을 선택합니다.
#define BRTHDAT @Form.ig_DM.BRTHDAT #define RFICDAT @Form.ig_DM.RFICDAT If(BRTHDAT > RFICDAT - Years((Year(RFICDAT) - Year(BRTHDAT))), (Year(RFICDAT) - Year(BRTHDAT)) - 1, (Year(RFICDAT) - Year(BRTHDAT)) ) 규칙 세부 정보 양식: 인구 통계
연령 쿼리(18세 미만의 경우 쿼리)
#define BRTHDAT $eg_SCREEN.ev_SCREEN.DM.ig_DM.BRTHDAT #define EVDAT $eg_SCREEN.ev_SCREEN.event_date__v Not(IsBlank(EVDAT)),&& Not(IsBlank(BRTHDAT)),&& ((EVDAT - MaxDate(BRTHDAT)) / 365.25) 및 < 17.998
규칙을 사용하여 스터디 일정 설정
스터디 설계자는 규칙을 사용하여 양식, 이벤트 및 이벤트 그룹을 스터디 일정에 동적으로 추가할 수 있습니다.
아래 예시에서 규칙은 이벤트 그룹 시퀀스 번호를 평가하여 특정 이벤트 시퀀스의 규칙 작업에 구성된 양식을 추가합니다. 이 예시 표현식에서 나머지 연산자를 사용합니다. 반복 이벤트 그룹에 구성된 레이블과 관련된 올바른 시퀀스 번호를 확인해야 합니다. 시퀀스 번호는 Studio에서 생성된 스터디 설계 사양의 예약 트리 탭에서도 참조할 수 있습니다.
이 예시에서 부동 식별자("와일드카드 식별자"라고도 함)가 사용되므로 대부분의 경우 규칙 작업에 동일한 식별자가 사용되고 규칙 표현식과 규칙 작업은 모두 동일한 수준으로 정규화되어야 합니다.
아래 모든 예시의 경우 규칙 작업에서 '이 이벤트 그룹'을 선택하여 규칙 표현식 #define 문의 @EventGroup
부동 식별자를 일치시킵니다. 이렇게 하면 시스템은 FORM1을 규칙 표현식이 true로 평가되는 이벤트 그룹에만 추가합니다.
예시 1에서 규칙 표현식은 반복 방목 그룹의 시퀀스 번호를 평가하여 홀수인지 여부를 결정합니다. 그런 다음 스터디 설계자는 규칙 작업을 구성하여 표현식이 true로 평가되면 ECOG 양식을 지정된 이벤트 그룹 내 이벤트에 추가할 수 있습니다.
예시 1: 주기적으로 모든 홀수 이벤트에 양식 추가
#define EVDAT @EventGroup.ev_D1.event_date__v #define EVSEQ @EventGroup.sequence__v Not(IsBlank(EVDAT)), &&( EVSEQ = 1 || EVSEQ % 2 = 1 ) 규칙 작업: 양식 추가: 'this event group', ev_D1 및 FORM1>>
예시 1에서 규칙 표현식은 반복 방목 그룹의 시퀀스 번호를 평가하여 짝수인지 여부를 결정합니다. 그런 다음 스터디 설계자는 규칙 작업을 구성하여 표현식이 true로 평가되면 원하는 양식을 지정된 이벤트 그룹 내 이벤트에 추가할 수 있습니다.
예시 2: 주기적으로 모든 짝수 이벤트에 양식 추가
#define EVDAT @EventGroup.ev_D1.event_date__v #define EVSEQ @EventGroup.sequence__v Not(IsBlank(EVDAT)),&& EVSEQ % 2 = 0 규칙 작업: 양식 추가: 'this event group', ev_D1 및 FORM1
>>
주기적으로 규칙을 작성하여 이벤트 그룹의 시퀀스 번호를 평가할 수도 있습니다. 예시 3에서 규칙 표현식은 반복 이벤트 그룹의 시퀀스 번호를 평가하여 주기 2에서 시작되는 반복 이벤트가 3번째 주기마다 발생하는지 여부를 결정합니다.
예시 3: 주기적으로 N번째 이벤트에 양식 추가
#define EVDAT @EventGroup.ev_D1.event_date__v #define EVSEQ @EventGroup.sequence__v Not(IsBlank(EVDAT)), (EVSEQ + 1) % 3 = 0 규칙 작업: 양식 추가: 'this event group', ev_D1 및 FORM1
&&>>
쿼리 메시지
- 문제와 옵션을 정확하게 참조하여 해결합니다. 사실에 입각하여 데이터 편향을 유도하거나 도출할 수 있는 메시지를 사용하지 마십시오.
- 특수 문자는 내보내기 파일에 제대로 표시되지 않을 수 있으므로 사용하지 마십시오.
- 예를 들어 "> 또는 =" 사용 대신 ... 이상을 전체 사용합니다.
- 내추럴 키보드의 문자를 사용합니다. 다운스트림 시스템이나 애플리케이션에 영향을 미칠 수 있는 Alt+ 키 또는 기호를 사용하지 마십시오.
- 질문에는 작은따옴표를 사용합니다(예: 피험자가 등록되었습니까? 답은 '아니요'...).
- 큰따옴표를 사용하지 마십시오.
- 쿼리 메시지는 500자로 제한됩니다.
부동 식별자가 포함된 규칙(@Form, @Event, @EventGroup)
20R1(2020년 4월)부터 새 규칙이 @Form
("와일드카드 식별자"라고도 함) 등 부동 식별자를 사용하는 경우 Vault는 식별된 양식이 제출될 때마다 규칙을 자동으로 평가합니다.
역수 규칙
규칙 표현식이 여러 양식의 데이터를 참조하고 @
과 정규화된 식별자를 모두 사용하는 경우에도, Vault는 규칙 세부 사항 패널에서 선택한 양식이 제출되면 규칙을 평가하고 규칙 표현식에서 참조한 양식에서 데이터가 변경될 때마다 규칙을 재평가하기도 합니다. 이 프로세스를 역수 규칙이라고 합니다. 예를 들어 @Form
를 사용하여 여러 이벤트에서 사용하는 Vitals 양식을 지정하고 정규화된 식별자를 사용하여 PE 양식을 지정하는 경우 Vault은 규칙을 실행하고 Vitals 양식 또는 특정 PE 양식이 제출될 때마다 지정되는 스터디 오브젝트의 데이터를 평가합니다.
규칙 세부 정보 패널에서 선택한 양식이 반복되고 정규화된 경우 Vault는 각 양식 인스턴스의 규칙을 평가합니다.
정규화된 형식과 부동 식별자 형식 비교
식별자를 규칙 표현식 필드에 입력할 때 사용되는 형식은 정규화된 식별자를 사용할지 아니면 부동 식별자(와일드카드 ID라고도 함)를 사용할지 여부를 시스템에 알려 줍니다.
대부분의 경우 정규화된 식별자는 달러 기호($
)로 시작하고, 스터디 오브젝트 참조를 정규화하고 있음을 시스템에 알려 줍니다.
정규화된 식별자 형식 예시:
$EVENTGROUP.EVENT.FORM.ITEMGROUP.ITEM
부동 식별자는 항상 at 기호(@
)로 시작하고, 컨텍스트에 따라 지정되는 스터디 오브젝트를 조회하고 있음을 시스템에 알려 줍니다.
부동 식별자 형식 예시:
@EventGroup.EVENT.FORM.ITEMGROUP.ITEM, @Event.FORM.ITEMGROUP.ITEM 또는 @Form.ITEMGROUP.ITEM
규칙 작업에서 "@
"은 "이 이벤트", "이 이벤트 그룹"이나 "이 양식"으로 표시됩니다.
부동 식별자 사용: 대부분의 경우 규칙 표현식의 부동 식별자("와일드카드 식별자"라고도 함)를 사용하면 규칙 작업에 동일한 식별자가 사용되고 규칙 표현식과 규칙 작업은 모두 동일한 수준으로 정규화되어야 합니다. 이렇게 하면 규칙 작업 및 규칙 표현식의 범위가 사례집의 동일한 오브젝트 인스턴스로 지정됩니다. 그렇지 않으면 규칙 작업이 의도하지 않은 양식에 영향을 줄 수 있습니다.
규칙에 정규화된 반복 이벤트 그룹, 이벤트 또는 양식이 포함된 경우 Vault는 해당 식별자와 일치하는 모든 인스턴스를 조회합니다. 이러한 이유로 반복 오브젝트에 대해 규칙이 실행되지 않은 한 해당 오브젝트에서 정규화된 식별자를 사용하지 않는 것이 좋습니다.
역수가 아닌 동작(20R1 이전)을 사용하여 새 규칙을 생성해야 하는 경우 Veeva 서비스 담당자와 협력하여 작업을 수행하십시오.
23R2의 @Form으로 오류 방지: 23R2부터 규칙 세부 정보 패널에 연결된 양식이 식별자와 일치하지 않을 경우 @Form
또는 '이 양식' 식별자를 사용하는 규칙을 수정하거나 비활성화하여 검증 검사 오류를 방지해야 합니다.
규칙 순열을 최적화하는 모범 사례
반복 양식의 집계를 사용하여 규칙을 작성할 때 집계 식별자 [*]
를 사용합니다.
예: 집계 식별자를 사용하는 #define
문:
#define AEOUT $LOGS.LOGS.AE[*].igAE.AEOUT
반복 양식과 이벤트 그룹을 참조하는 규칙을 작성할 때 @Form
또는 @EventGroup
부동 식별자 부동 식별자("와일드카드 식별자"라고도 함)를 사용하여 순열이 과도하게 사용되는 것을 방지합니다.
테스트 권장 사항
모범 사례: 일반 단위 테스트에는 각 규칙을 열고(생성) 한 번에 쿼리를 해결할 수 있는 테스트가 포함됩니다. 전체 검증과 유사한 방법으로, 한 가지 규칙을 철저히 테스트한 다음 해당 규칙을 복사하여 유사한 규칙을 생성하게 되면 규칙 품질을 높이고 구성 재작업과 재검증 작업을 하는 수고를 줄일 수 있습니다.
단위 테스트를 하든지 공식적으로 규칙을 확인하든지 관계없이 다음 모범 사례를 고려합니다.
- 범위 내에 있는 값과 범위를 벗어난 값을 포함합니다. 여기에는 숫자 값, 날짜 및 날짜/시간 기간이 포함됩니다.
- 모든 경우에 규칙을 발행하고 규칙을 해결할 수 있는 테스트를 포함합니다.
- 코드 목록의 모든 시나리오를 확인합니다.
- 교차 양식 쿼리의 경우 첫 번째 양식과 두 번째 양식(앞뒤로)이 모두 완료되면 규칙이 예상대로 쿼리를 생성하고 해결하고 있음을 표시하는 테스트를 포함합니다.
- 규칙이 반복 항목 그룹 내 항목을 참조하는 경우 규칙이 항목 그룹의 올바른 시퀀스(인스턴스)로 항목의 쿼리를 열고 해결하는지 확인합니다.
- 시간/날짜 기간 내, 동일한 기간과 그 기간 이후에 테스트합니다.
- "다음 날" 시나리오를 테스트합니다. 기간 내 시간을 사용하지만 달력에서 다음 날을 선택합니다.
- 항목의 마스킹 속성에 따라 알 수 없는(UNK) 시간, 일, 월을 테스트합니다.
- 여러 사이트 위치에서 데이터를 입력하는 경우 해당 시간대로 사이트를 설정하고 규칙을 테스트합니다.
- 스터디에 포함된 국가의 예상 시간대 샘플을 나타내는 몇 개의 TST 테스트 사이트를 추가합니다.
- 해당 사이트에 할당된 사이트 사용자와 TST 테스트 사용자의 시간대를 설정합니다.
- 스터디 수행에 적용 가능한 테스트 기간 규칙입니다. 예로 IV 주입 시간이 길어지면 종료 시간이나 예상 ECG 또는 PK 기간이 자정까지 늦어지는 경우
- 테스트에 위험 기반 접근 방식을 도입하여 코드에 대한 동료 검토를 거쳐 품질을 높이고 사용자 수용 테스트 결과를 축소시킬 수 있습니다.