| name | healthcare-eval-harness |
| description | 의료 애플리케이션 배포를 위한 환자 안전 평가 하니스입니다. CDSS 정확성, PHI 노출, 임상 워크플로 무결성, 연동 적합성을 자동 테스트하며, 안전 실패 시 배포를 차단합니다. |
| origin | Health1 Super Speciality Hospitals — contributed by Dr. Keyur Patel |
| version | 1.0.0 |
Healthcare Eval Harness — 환자 안전 검증
의료 애플리케이션 배포를 위한 자동 검증 시스템입니다. CRITICAL 실패가 하나라도 있으면 배포를 막아야 합니다. 환자 안전은 타협 대상이 아닙니다.
참고: 예시는 Jest를 기본 테스트 러너로 사용합니다. 사용하는 프레임워크(Vitest, pytest, PHPUnit 등)에 맞게 명령만 바꾸면 됩니다. 테스트 범주와 통과 기준은 프레임워크와 무관합니다.
사용 시점
- EMR/EHR 애플리케이션을 배포하기 전
- CDSS 로직(약물 상호작용, 용량 검증, 점수 계산)을 수정한 후
- 환자 데이터와 관련된 데이터베이스 스키마를 변경한 후
- 인증 또는 액세스 제어 로직을 수정한 후
- 의료 앱을 위한 CI/CD 파이프라인을 설정할 때
- 임상 모듈의 머지 충돌을 해결한 후
동작 방식
평가 하니스는 다섯 가지 테스트 범주를 순서대로 실행합니다. 처음 세 가지(CDSS 정확성, PHI 노출, 데이터 무결성)는 100% 통과율을 요구하는 CRITICAL 게이트이며, 단 하나의 실패라도 배포를 차단합니다. 나머지 두 가지(임상 워크플로, 연동)는 95% 이상의 통과율을 요구하는 HIGH 게이트입니다.
각 범주는 Jest 테스트 경로 패턴에 매핑됩니다. CI 파이프라인은 CRITICAL 게이트를 --bail(첫 번째 실패 시 중지) 옵션으로 실행하고, --coverage --coverageThreshold를 통해 커버리지 기준을 강제합니다.
평가 범주
1. CDSS Accuracy (CRITICAL — 100% 필수)
모든 임상 의사결정지원 로직을 테스트합니다: 약물 상호작용 쌍(양방향), 용량 검증 규칙, 공인 명세 기반의 임상 점수 계산, false negative(미탐) 없음, 자동 무시되는 실패 없음.
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage
2. PHI Exposure (CRITICAL — 100% 필수)
개인 건강 정보(PHI) 유출을 테스트합니다: API 에러 응답, 콘솔 출력, URL 파라미터, 브라우저 저장소, 시설 간 격리, 미인증 액세스, 서비스 역할 키 노출 여부.
npx jest --testPathPattern='tests/security/phi' --bail --ci
3. Data Integrity (CRITICAL — 100% 필수)
임상 데이터 안전성을 테스트합니다: 잠금된 내원 기록, 감사 추적(audit trail) 항목, 계단식 삭제(cascade delete) 보호, 동시 편집 처리, 고립된(orphaned) 레코드 방지.
npx jest --testPathPattern='tests/data-integrity' --bail --ci
4. Clinical Workflow (HIGH — 95% 이상 필수)
엔드투엔드 흐름을 테스트합니다: 내원 라이프사이클, 템플릿 렌더링, 약물 세트, 약물/진단 검색, 처방전 PDF, 레드 플래그 경고.
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
total=$(jq '.numTotalTests // 0' "$tmp_json")
passed=$(jq '.numPassedTests // 0' "$tmp_json")
if [ "$total" -eq 0 ]; then
echo "No clinical tests found" >&2
exit 1
fi
rate=$(echo "scale=2; $passed * 100 / $total" | bc)
echo "Clinical pass rate: ${rate}% ($passed/$total)"
5. Integration Compliance (HIGH — 95% 이상 필수)
외부 시스템 연동을 테스트합니다: HL7 메시지 파싱(v2.x), FHIR 검증, 검사 결과 매핑, 잘못된 형식의 메시지 처리.
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/integration' --ci --json --outputFile="$tmp_json" || true
total=$(jq '.numTotalTests // 0' "$tmp_json")
passed=$(jq '.numPassedTests // 0' "$tmp_json")
if [ "$total" -eq 0 ]; then
echo "No integration tests found" >&2
exit 1
fi
rate=$(echo "scale=2; $passed * 100 / $total" | bc)
echo "Integration pass rate: ${rate}% ($passed/$total)"
통과/실패 매트릭스
| 범주 | 기준 | 실패 시 조치 |
|---|
| CDSS Accuracy | 100% | 배포 차단 (BLOCK) |
| PHI Exposure | 100% | 배포 차단 (BLOCK) |
| Data Integrity | 100% | 배포 차단 (BLOCK) |
| Clinical Workflow | 95% 이상 | 경고(WARN), 리뷰 후 허용 |
| Integration | 95% 이상 | 경고(WARN), 리뷰 후 허용 |
CI/CD 연동
name: Healthcare Safety Gate
on: [push, pull_request]
jobs:
safety-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- name: CDSS Accuracy
run: npx jest --testPathPattern='tests/cdss' --bail --ci --coverage --coverageThreshold='{"global":{"branches":80,"functions":80,"lines":80}}'
- name: PHI Exposure Check
run: npx jest --testPathPattern='tests/security/phi' --bail --ci
- name: Data Integrity
run: npx
안티패턴
- "지난번에 통과했으니까"라며 CDSS 테스트를 건너뛰는 것
- CRITICAL 임계값을 100% 미만으로 설정하는 것
- CRITICAL 테스트 모음에
--no-bail 옵션을 사용하는 것
- 연동 테스트에서 CDSS 엔진을 모킹하는 것 (실제 로직을 테스트해야 함)
- 안전 게이트가 실패(Red) 상태인데 배포를 허용하는 것
- CDSS 테스트 모음을
--coverage 없이 실행하는 것
예시
예시 1: 로컬에서 모든 Critical 게이트 실행
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage && \
npx jest --testPathPattern='tests/security/phi' --bail --ci && \
npx jest --testPathPattern='tests/data-integrity' --bail --ci
예시 2: HIGH 게이트 통과율 확인
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
jq '{
passed: (.numPassedTests // 0),
total: (.numTotalTests // 0),
rate: (if (.numTotalTests // 0) == 0 then 0 else ((.numPassedTests // 0) / (.numTotalTests // 1) * 100) end)
}' "$tmp_json"
예시 3: 평가 보고서
## Healthcare Eval: 2026-03-27 [commit abc1234]
### 환자 안전: PASS
| 범주 | 테스트 수 | 통과 | 실패 | 상태 |
|----------|-------|------|------|--------|
| CDSS Accuracy | 39 | 39 | 0 | PASS |
| PHI Exposure | 8 | 8 | 0 | PASS |
| Data Integrity | 12 | 12 | 0 | PASS |
| Clinical Workflow | 22 | 21 | 1 | 95.5% PASS |
| Integration | 6 | 6 | 0 | PASS |
### 커버리지: 84% (목표: 80% 이상)
### 판정: 배포 가능 (SAFE TO DEPLOY)