헬스케어 EMR 개발 패턴은(는) 무엇을 하나요?
전자의무기록(EMR) 및 전자건강기록(EHR) 시스템 구축을 위한 패턴입니다. 환자 안전, 임상 정확성 및 의료진 효율성을 최우선으로 합니다.
사용 시기
- 환자 진료 워크플로우(주 호소, 검진, 진단, 처방) 구축
- 임상 노트 작성(구조화 + 자유 텍스트 + 음성-텍스트) 구현
- 약물 상호작용 확인 기능이 있는 처방/약물 모듈 설계
- 임상 의사결정 지원 시스템(CDSS) 통합
- 참조 범위 강조 표시가 있는 검사 결과 표시 구축
- 임상 데이터 감사 추적 구현
- 의료 데이터 입력을 위한 헬스케어 접근성 UI 설계
작동 방식
환자 안전 최우선
모든 설계 결정은 다음 질문에 대해 평가되어야 합니다: "이것이 환자에게 해를 끼칠 수 있는가?"
- 약물 상호작용은 반드시 알림을 표시해야 하며, 조용히 넘어가면 안 됩니다.
- 비정상 검사 값은 반드시 시각적으로 표시되어야 합니다.
- 중요한 활력 징후는 반드시 에스컬레이션 워크플로우를 트리거해야 합니다.
- 감사 추적 없이 임상 데이터를 수정할 수 없습니다.
단일 페이지 진료 흐름
임상 진료는 단일 페이지에서 수직으로 흘러야 합니다. 탭 전환 방식이 아닙니다.
환자 헤더 (고정 — 항상 표시)
├── 인구통계, 알레르기, 현재 복용 약물
│
진료 흐름 (수직 스크롤)
├── 1. 주 호소 (구조화된 템플릿 + 자유 텍스트)
├── 2. 현병력
├── 3. 신체 검진 (계통별)
├── 4. 활력 징후 (자동 임상 점수 트리거)
├── 5. 진단 (ICD-10/SNOMED 검색)
├── 6. 약물 (약물 DB + 상호작용 확인)
├── 7. 검사 (검사실/방사선 검사 오더)
├── 8. 계획 및 추적 관찰
└── 9. 서명 / 잠금 / 인쇄
스마트 템플릿 시스템
interface ClinicalTemplate {
id: string;
name: string; // 예: "흉통"
chips: string[]; // 클릭 가능한 증상 칩
requiredFields: string[]; // 필수 데이터 포인트
redFlags: string[]; // 해제 불가능한 알림 트리거
icdSuggestions: string[]; // 사전 매핑된 진단 코드
}
모든 템플릿의 위험 신호는 토스트 알림이 아닌 눈에 띄고 해제할 수 없는 알림을 트리거해야 합니다.
약물 안전 패턴
사용자 약물 선택
→ 현재 복용 약물과 상호작용 확인
→ 진료 중 약물과 상호작용 확인
→ 환자 알레르기 확인
→ 체중/나이/신장 기능에 따른 용량 검증
→ 치명적 상호작용인 경우: 처방을 완전히 차단
→ 의료진은 차단을 진행하려면 재정의 사유를 문서화해야 함
→ 주요 상호작용인 경우: 경고 표시, 확인 요구
→ 모든 알림 및 재정의 사유를 감사 추적에 기록
치명적 상호작용은 기본적으로 처방을 차단합니다. 의료진은 감사 추적에 기록된 문서화된 사유와 함께 명시적으로 재정의해야 합니다. 시스템은 치명적 상호작용을 절대 조용히 허용하지 않습니다.
잠긴 진료 기록 패턴
임상 진료가 서명되면:
- 편집 불가 — 추가 기록(별도의 연결된 레코드)만 허용
- 원본과 추가 기록 모두 환자 타임라인에 표시
- 감사 추적은 서명한 사람, 서명 시간 및 모든 추가 기록을 캡처
임상 데이터를 위한 UI 패턴
활력 징후 표시: 정상 범위 강조 표시(녹색/노란색/빨간색)가 있는 현재 값, 이전 값과의 추세 화살표, 자동 계산된 임상 점수(NEWS2, qSOFA), 인라인 에스컬레이션 안내.
검사 결과 표시: 정상 범위 강조 표시, 이전 값 비교, 해제 불가능한 알림이 있는 치명적 값, 채취/분석 타임스탬프, 예상 소요 시간이 있는 보류 중인 오더.
처방전 PDF: 환자 인구통계, 알레르기, 진단, 약물 세부 정보(일반명 + 상표명, 용량, 경로, 빈도, 기간), 의료진 서명 블록이 포함된 원클릭 생성.
헬스케어 접근성
헬스케어 UI는 일반 웹 앱보다 더 엄격한 요구 사항이 있습니다:
- 최소 4.5:1 명암비(WCAG AA) — 의료진은 다양한 조명 환경에서 작업합니다.
- 큰 터치 대상(최소 44x44px) — 장갑을 끼거나 서두르는 상호작용을 위해
- 키보드 탐색 — 데이터를 빠르게 입력하는 고급 사용자를 위해
- 색상 전용 표시기 금지 — 항상 색상을 텍스트/아이콘과 쌍으로 사용(색맹 의료진 고려)
- 모든 양식 필드에 화면 판독기 레이블
- 임상 알림을 위한 자동 사라짐 토스트 금지 — 의료진이 적극적으로 확인해야 함
안티 패턴
- 브라우저 localStorage에 임상 데이터 저장
- 약물 상호작용 확인의 조용한 실패
- 중요한 임상 알림에 대한 해제 가능한 토스트
- 임상 워크플로우를 분할하는 탭 기반 진료 UI
- 서명/잠금된 진료 기록 편집 허용
- 감사 추적 없이 임상 데이터 표시
- 임상 데이터 구조에
any유형 사용
예제
예제 1: 환자 진료 흐름
의사가 환자 #4521의 진료 기록을 엽니다.
→ 고정 헤더에 표시: "Rajesh M, 58M, 알레르기: Penicillin, 현재 복용 약물: Metformin 500mg"
→ 주 호소: "흉통" 템플릿 선택
→ 칩 클릭: "substernal", "radiating to left arm", "crushing"
→ 위험 신호 "crushing substernal chest pain"이 해제 불가능한 알림 트리거
→ 검진: CVS 계통 — "S1 S2 정상, 잡음 없음"
→ 활력 징후: HR 110, BP 90/60, SpO2 94%
→ NEWS2 자동 계산: 점수 8, 위험 높음, 에스컬레이션 알림 표시
→ 진단: "ACS" 검색 → ICD-10 I21.9 선택
→ 약물: Aspirin 300mg 선택
→ CDSS가 Metformin과 상호작용 확인: 상호작용 없음
→ 진료 서명 → 잠금, 이 시점부터 추가 기록만 가능
예제 2: 약물 안전 워크플로우
의사가 환자 #4521에게 Warfarin을 처방
→ CDSS 감지: Warfarin + Aspirin = 치명적 상호작용
→ UI: 빨간색 해제 불가능한 모달이 처방 차단
→ 의사가 "사유와 함께 재정의" 클릭
→ 입력: "이점이 위험을 상회함 — 모니터링된 INR 프로토콜"
→ 재정의 사유 + 알림이 감사 추적에 저장됨
→ 문서화된 재정의와 함께 처방 진행
예제 3: 잠긴 진료 기록 + 추가 기록
진료 #E-2024-0891이 14:30에 Dr. Shah에 의해 서명됨
→ 모든 필드 잠금 — 편집 버튼 표시되지 않음
→ "추가 기록 추가" 버튼 사용 가능
→ Dr. Shah가 추가 기록을 클릭하여 추가: "검사 결과 수신 — Troponin 상승"
→ 새 레코드 E-2024-0891-A1이 원본에 연결됨
→ 타임라인에 둘 다 표시: 원본 진료 기록 + 타임스탬프가 있는 추가 기록