ADR 0003: Safety 규칙 endpoint를 일반화된 Subject로 보존¶
상태: Accepted 결정일: 2026-09-03 범위: 금기, 동일일 제한, 최소 간격, 시술 pair 조회
Context¶
기존 contraindications.json은 대부분 M-code 두 개를 연결하지만
treatment-sequence.json은 다음 종류를 같은 endpoint 위치에 함께 사용한다.
- 단일 시술 또는 시술군:
보톡스,HA 필러 - 복합 시술군:
RF/HIFU,프락셔널/필링 - 약물과 상태:
이소트레티노인,이소트레티노인 복용 중 - 재료:
비가교HA - 범위:
모든 시술 - 이미 발생한 선행 상태:
HA 필러 주입 후 RF/HIFU
이를 모두 (from_procedure_id, to_procedure_id)로 강제하면 비시술 endpoint가 유실되고, 복합
endpoint는 임의의 한 시술로 축소되며, 단항 상태 규칙은 저장할 수 없다.
Decision¶
- 원장의 규칙 endpoint는
SafetySubject로 저장한다. - Subject 종류는
procedure,procedure_set,medication,material,preparation,state,scope,other의 닫힌 집합이다. - 시술을 가리키는 Subject는
SafetySubjectProcedure로 하나 이상의ProcedureConcept에 연결한다. 비시술 Subject는 시술 FK를 억지로 만들지 않는다. - qualifier는 매핑의 한정 의미를 보존한다. 예:
material=HA,state=active,scope=all_procedures,relation=after. - 규칙은 원문 endpoint와 원문 간격을 항상 보존한다.
같은 날, 단순 단위 값·범위처럼 모호하지 않은 간격만 구조화하고, 조건이 섞인 문장은raw_interval만 유지한다. - 기존
ProcedureConstraint는 폐기하지 않는다. 양쪽 Subject를 실제 시술 pair로 해석할 수 있을 때 생성되는 실행용 projection으로 사용한다. 환자 약물·상태 규칙은 별도의 patient context 정책이 평가한다. - mapping이 pending인 Subject나 동일 우선순위에서 결과가 충돌하는 규칙은 release 발행을 차단한다.
원문 rule
├─ from ──> SafetySubject ──> 0..N ProcedureConcept
├─ to ──> SafetySubject ──> 0..N ProcedureConcept
└─ source path / raw interval / rationale / evidence
procedure ↔ procedure로 해석 가능
└─ ProcedureConstraint read projection ──> 기존 pair API
Consequences¶
- 현재 corpus의 Safety Subject 34개와 규칙 45개를 누락 없이 저장할 수 있다.
- 복합 Subject는 여러 시술 FK를 가지며
모든 시술, 약물, 재료도 타입을 잃지 않는다. - UI/API의 단순 pair 조회는 계속 단순한 응답을 받을 수 있지만, projection 생성 시 조상/자손 범위와 복합 집합의 확장 정책이 필요하다.
- 월 단위 간격은 임의로 30일로 환산하지 않는다. API가 날짜 계산을 요구할 때 별도의 달력 정책을 사용해야 한다.
Rejected alternatives¶
| 대안 | 기각 이유 |
|---|---|
| 모든 endpoint를 ProcedureConcept로 생성 | 약물·재료·상태가 시술 taxonomy를 오염시킴 |
| 복합 표현의 첫 시술만 연결 | 안전 규칙 적용 범위를 조용히 축소함 |
| JSON 문장만 저장 | 검색은 가능하지만 결정적 안전 정책을 실행할 수 없음 |
| 월을 항상 30일로 변환 | 임상 원문의 의미보다 강한 계산 가정을 추가함 |