Research 도메인 비즈니스 규칙
Research 도메인의 비즈니스 규칙을 정의합니다. 본 문서는 requirements.md 및 event-storming.md의 합의를 기준으로 합니다.
1. 불변식 (Invariants)
1.1 연구 참여자 부분집합
- 규칙: 연구 참여자(Research Participant)는 진료용 환자(활성 사용자)의 부분집합이어야 한다.
- 위반 시: 연구 참여자 등록/조회가 거부되어야 한다.
1.2 무작위번호 병원 단위 유일성
- 규칙: 동일
siteId내에서randomizationNumber는 중복될 수 없다. - 허용: 서로 다른
siteId간randomizationNumber중복은 허용한다. - 위반 시: 무작위번호 저장/수정이 거부되어야 한다.
1.3 메모 단일 최신본
- 규칙: 메모는 단일 최신본만 유지하며 과거 수정 이력을 제공하지 않는다.
1.4 연구 리스트 제외(삭제)의 의미
- 규칙: 연구 참여자 삭제는 “연구 리스트에서 제외”이며, 진료용 환자 데이터(원천 사용자)는 삭제하지 않는다.
2. 유효성 규칙 (Validation Rules)
2.1 연구 기능 접근
- 규칙: 연구 기능 접근은
clinicalResearch=true인 Site에 대해서만 허용된다. - 규칙: 연구 데이터 조회 스코프는 IAM 권한 평가 결과(그룹/권한) +
siteId컨텍스트로 결정된다.
2.2 무작위번호 입력/검증
- 최소 입력 조건: 1개 이상의 문자가 입력되어야 한다.
- 중복 검증 스코프: 동일
siteId내 중복 검증을 수행한다. - UX 디바운스: 클라이언트는 0.5초 동안 추가 입력이 없을 때 검증 결과 메시지를 표시한다.
2.3 삭제 비밀번호 검증
- 규칙: 연구 리스트 제외(삭제) 수행 전 비밀번호 검증이 필요하다.
- 참조: 비밀번호 검증 방식은 Auth Operation 컨텍스트를 따른다.
3. 상태 전이 규칙 (State Transition Rules)
3.1 연구 참여자 리스트 포함 상태
[NotEnrolled]
↓ (ImportResearchParticipant / CreateResearchParticipant)
[Enrolled]
↓ (RemoveResearchParticipantFromList)
[RemovedFromResearchList]
RemovedFromResearchList는 “연구 시트에서 더 이상 조회되지 않는 상태”이며, 원천 사용자/진료용 데이터의 삭제가 아니다.
3.2 불성실 상태
[Compliant]
↔ (EvaluateNonCompliance)
[NonCompliant]
불성실 판정 조건:
- 조건 1: 슬립큐 코드 등록 8일차부터 수면 기록률이 50% 이하
- 조건 2: 43일차에 도달했음에도 마지막 설문 미실시
4. 권한 규칙 (Authorization Rules)
본 섹션은 Research 도메인에서 요구하는 “행위 가능 조건”을 정의합니다.
IAM 모델/프로비저닝의 상세는 IAM Operation 문서를 따릅니다.
4.1 연구용 탭 접근(교차 참조)
IAM Operation 문서의 “그룹별 접근 권한” 규칙을 따른다.
예시(참고):
| 그룹 | 연구용 탭 접근 | 스코프 |
|---|---|---|
| medi.platform-admin | ✓ | 모든 임상연구 참여 Site |
| medi.site-admin | ✓ (조건부) | 본인 Site (Site가 ClinicalResearch인 경우) |
| medi.site-member | ✓ (조건부) | 본인 Site (Site가 ClinicalResearch인 경우) |
4.2 연구 참여자 관리 권한
- 규칙: 사이트 스코프 사용자(예:
medi.site-admin,medi.site-member)만 연구 참여자 등록/수정/삭제를 수행할 수 있다. - 규칙: 플랫폼 전체 조회 권한 보유자는 기본적으로 조회/필터링 기능을 제공하고, 등록/수정/삭제 기능은 제한될 수 있다(요구사항 참조).
5. 계산/파생 규칙 (Derivation Rules)
5.1 치료주차
- 1일~7일: 1주차
- 8일~14일: 2주차
- 15일~21일: 3주차
- 22일~28일: 4주차
- 29일~35일: 5주차
- 36일~42일: 6주차
- 43일 이후: 만료됨(43일)
5.2 앱 접속 횟수(n/42)
n: 00:00~23:59 사이에 1회 이상 접속한 “일자 수”- 동일 일자 중복 접속은 1회로 카운팅
5.3 준수율(기상/취침)
- 분모: 첫 처방 다음날 이후로 작성한 수면 기록 수
- DNS는 “수면 기록은 작성한 것으로, 목표 시간은 준수하지 않은 것”으로 해석
- 소수점 첫째 자리에서 반올림
5.4 주차 평균(SE/WASO/TST/SOL)
- 1주차(8일차) 평균: 1일차~7일차 작성 데이터
- 6주차(43일차) 평균: 36일차~42일차 작성 데이터
- 미작성 날은 평균 계산에서 제외
- 데이터가 없으면 “-”로 표기
- 소수점 셋째 자리에서 반올림 후 표기(0이어도 표기)
6. 제약 사항 (Constraints)
6.1 스코프 제약
- 제약: 스코프가
SITE_SCOPED인 사용자는 요청 시siteId컨텍스트와 일치하는 데이터만 접근 가능해야 한다.
6.2 감사(감사 로그) 제약
- 제약: 연구 참여자 등록/삭제, 무작위번호 변경, 메모 변경, 불성실 판정 변경은 감사 가능하도록 기록되어야 한다.
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-12-29 | jeff@weltcorp.com | 최초 작성 |