Chuyển đến nội dung chính
Kiến trúc hệ thống

So sánh HL7 v2, CDA và FHIR: chọn chuẩn nào cho dự án y tế

HL7 v2, CDA và FHIR đều là chuẩn HL7 nhưng khác nhau hoàn toàn về triết lý. Bài viết phân tích chi tiết transport, payload, use case của từng chuẩn, kèm ví dụ ADT^A01, CCD và FHIR Bundle — giúp bạn chọn đúng chuẩn cho dự án.

So sánh HL7 v2, CDA và FHIR: chọn chuẩn nào cho dự án y tế

Nhiều dự án y tế Việt Nam đang đứng trước câu hỏi: hệ thống bệnh viện hiện tại đang chạy HL7 v2, đối tác mới yêu cầu FHIR, một vài đối tác EU lại gửi CDA. Chọn chuẩn nào, giữ chuẩn nào, dịch chuẩn nào sang chuẩn nào? Bài này làm rõ.

1. Tổng quan 3 chuẩn

flowchart LR
    subgraph V2[HL7 v2 - 1989]
        V2A[Pipe-delimited message]
        V2B[Transport: MLLP / TCP]
        V2C[Use case: real-time bệnh viện]
    end
    subgraph CDA[HL7 CDA - 2005]
        CDAA[XML document]
        CDAB[Transport: file / IHE XDS]
        CDAC[Use case: clinical document]
    end
    subgraph FHIR[HL7 FHIR - 2014+]
        FHIRA[REST + JSON/XML Resource]
        FHIRB[Transport: HTTPS]
        FHIRC[Use case: web/mobile/cloud/AI]
    end
Tiêu chíHL7 v2CDAFHIR
Năm ra mắt198920052014 (DSTU1), 2019 (R4)
Mô hìnhMessage segmentsXML documentRESTful Resource
TransportMLLP / TCPFile / IHE XDS / SOAPHTTPS REST
PayloadPipe-delimited textXML (RIM-based)JSON / XML / Turtle
Versioningv2.3, v2.4, ..., v2.9R1.1, R2DSTU1-3, R4, R5, R6
Phổ biến hiện nayRất phổ biến trong bệnh việnPhổ biến ở Mỹ/EU cho clinical documentChuẩn de facto cho dự án mới

2. HL7 v2 — chuẩn "huyền thoại" trong bệnh viện

2.1 Cấu trúc message

Một ADT (Admit/Discharge/Transfer) message điển hình:

MSH|^~\&|HIS|BV-CHO-RAY|HSDT|MOH|20260507083000||ADT^A01|MSG00001|P|2.5.1
EVN|A01|20260507083000
PID|1||001234567890^^^CCCD~HN12345^^^MR||TRAN^DUY^^^Mr.||19900512|M|||123 Le Loi^^Q1^HCM^700000^VN
PV1|1|I|ICU^101^A|||DR123^NGUYEN^MINH|||MED|||||||A0|V123||||||||||||||||||||||20260507083000
  • MSH: Message Header — sender, receiver, message type, timestamp
  • EVN: Event — A01 = admission
  • PID: Patient Identification — CCCD, tên, giới tính, địa chỉ
  • PV1: Patient Visit — phòng, bác sĩ, thời điểm

Triggers thường gặp: A01 (admit), A03 (discharge), A04 (register outpatient), A08 (update info), ORU^R01 (lab result).

2.2 Transport MLLP

MLLP (Minimal Lower Layer Protocol) bọc message v2 bằng <VT> (start) và <FS><CR> (end), gửi qua TCP socket:

<VT>MSH|^~\&|...<CR>PID|...<CR><FS><CR>

Ưu điểm: cực nhanh, low-latency, đơn giản. Nhược điểm: không có authentication mạnh, khó debug, không HTTP firewall-friendly.

2.3 Khi nào vẫn dùng v2

  • Hệ thống bệnh viện hiện hữu đã chạy v2 ổn định
  • Real-time event streaming trong nội bộ bệnh viện (ADT, ORU)
  • Đối tác legacy (LIS, RIS, billing) chỉ nói v2

Nguyên tắc: đừng vứt v2. Hãy bridge v2 → FHIR ở edge bằng Mirth Connect hoặc Microsoft FHIR Converter.

3. CDA — clinical document chuẩn XML

3.1 Cấu trúc

CDA là document XML có structured body. Một Continuity of Care Document (CCD) chứa các section: Allergies, Medications, Problems, Procedures, Results, Vital Signs.

<ClinicalDocument xmlns="urn:hl7-org:v3">
  <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/>
  <templateId root="2.16.840.1.113883.10.20.22.1.2"/>
  <id root="..." extension="CCD-001"/>
  <code code="34133-9" codeSystem="2.16.840.1.113883.6.1"
        displayName="Summarization of Episode Note"/>
  <recordTarget>
    <patientRole>
      <id extension="001234567890" root="urn:oid:CCCD"/>
      <patient>
        <name><family>Trần</family><given>Duy</given></name>
        <birthTime value="19900512"/>
      </patient>
    </patientRole>
  </recordTarget>
  <component>
    <structuredBody>
      <component>
        <section>
          <code code="11450-4" displayName="Problem List"/>
          <entry>...</entry>
        </section>
      </component>
    </structuredBody>
  </component>
</ClinicalDocument>

3.2 Khi nào dùng CDA

  • Clinical document trao đổi giữa cơ sở y tế (chuyển viện, tổng kết episode)
  • Khu vực Mỹ/EU đã chuẩn hoá CDA (Meaningful Use)
  • Lưu trữ pháp lý vì document có chữ ký số, immutable

3.3 Hạn chế

  • Khó query dữ liệu trong document (phải parse XML đầy đủ)
  • Document-centric, không phù hợp với mobile/web modular UI
  • Khó kết hợp với REST API hiện đại

4. FHIR — chuẩn cho thời đại API

4.1 Cấu trúc Resource

Cùng nội dung ADT^A01 trên, FHIR sẽ là transaction Bundle:

{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [
    {
      "fullUrl": "urn:uuid:patient-1",
      "resource": {
        "resourceType": "Patient",
        "identifier": [
          {"system": "urn:oid:CCCD", "value": "001234567890"},
          {"system": "http://benhvien.vn/mr", "value": "HN12345"}
        ],
        "name": [{"family": "Trần", "given": ["Duy"]}],
        "gender": "male",
        "birthDate": "1990-05-12"
      },
      "request": {"method": "POST", "url": "Patient"}
    },
    {
      "fullUrl": "urn:uuid:encounter-1",
      "resource": {
        "resourceType": "Encounter",
        "status": "in-progress",
        "class": {
          "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
          "code": "IMP", "display": "inpatient encounter"
        },
        "subject": {"reference": "urn:uuid:patient-1"},
        "period": {"start": "2026-05-07T08:30:00+07:00"},
        "location": [{"location": {"display": "ICU-101-A"}}]
      },
      "request": {"method": "POST", "url": "Encounter"}
    }
  ]
}

POST cả Bundle này lên [base]/ — server sẽ tạo cả Patient và Encounter atomic.

4.2 Khi nào dùng FHIR

  • Dự án mới, đặc biệt cần tích hợp web/mobile/cloud
  • Cần SMART on FHIR cho auth chuẩn OAuth2
  • Cần Bulk Data cho analytics/AI
  • Tích hợp HSDT/VNeID ở Việt Nam (Quyết định 3516/QĐ-BYT)

5. So sánh chi tiết

5.1 Use case bệnh nhân nhập viện

sequenceDiagram
    participant HIS as HIS
    participant LIS as LIS
    participant FHIR as FHIR Gateway
    participant National as HSDT QG

    HIS->>LIS: ADT^A01 (HL7 v2 MLLP)
    HIS->>FHIR: ADT^A01 (HL7 v2 MLLP)
    FHIR->>FHIR: Transform v2 → FHIR Bundle
    FHIR->>National: POST Bundle (FHIR R4)
    
    LIS->>FHIR: ORU^R01 (kết quả XN, HL7 v2)
    FHIR->>FHIR: Transform → Observation
    FHIR->>National: POST Observation
    
    Note over HIS,National: V2 trong nội bộ + FHIR ra ngoài

Đây là pattern co-existence phổ biến — không bắt buộc thay v2 ngay, chỉ bridge khi ra ngoài.

5.2 Bảng tóm tắt khi nào chọn gì

Tình huốngChuẩn khuyên dùng
HIS-LIS-RIS streaming nội bộ bệnh việnHL7 v2 (MLLP)
Tích hợp với HSDT/VNeID Việt NamFHIR R4
Trao đổi clinical document EU/MỹCDA hoặc FHIR Document Bundle
Dự án telemedicine mớiFHIR + SMART on FHIR
Analytics + AI/RAG y khoaFHIR Bulk Data Export
ImagingDICOM (FHIR ImagingStudy chỉ giữ meta)
BHYT điện tử Việt NamFHIR Coverage/Claim + extension VN

6. Migration HL7 v2 → FHIR

Pattern phổ biến trong dự án Việt Nam:

flowchart LR
    A[HIS / LIS / RIS<br/>HL7 v2] -->|MLLP| B[Mirth Connect<br/>NextGen Connect]
    B -->|JavaScript transformer| C[FHIR Bundle]
    C -->|HTTPS POST| D[HAPI FHIR<br/>Cloud FHIR]
    D --> E[HSDT / Analytics / SMART app]

Mapping ví dụ:

HL7 v2 segmentFHIR ResourceField chính
MSHMessageHeader (nếu cần)event, source, destination
PIDPatientidentifier, name, gender, birthDate, address
PV1Encounterclass, status, period, location, participant
OBXObservationcode (LOINC), value, effective
ORC + RXEMedicationRequestmedication, dosage, requester
AL1AllergyIntolerancecode, reaction
DG1Conditioncode (ICD-10), clinicalStatus

Microsoft FHIR Converter và Mirth có template sẵn cho các message phổ biến.

7. Câu hỏi thường gặp

Q: Bệnh viện tôi đang chạy v2, có cần migrate sang FHIR không?
A: Không cần migrate ngay. Giữ v2 trong nội bộ, dùng FHIR Gateway để giao tiếp với HSDT, BHYT, app bệnh nhân. Khi nâng cấp HIS thì chọn vendor hỗ trợ FHIR native.

Q: Có cần biết v2 nếu chỉ làm FHIR?
A: Có. Hầu hết dự án Việt Nam đều phải bridge v2 nên hiểu cấu trúc v2 (MSH, PID, PV1, OBX) là kỹ năng bắt buộc cho integration engineer.

Q: CDA có còn cần thiết?
A: Cần nếu bạn làm với hệ thống Mỹ (Meaningful Use), EU eHealth Network, hoặc legal record. Còn lại FHIR Document Bundle có thể thay thế cho hầu hết use case mới.

Kết luận

3 chuẩn không loại trừ nhau — chúng phục vụ use case khác nhau. Chiến lược thực tế:

  • Trong bệnh viện: giữ HL7 v2 cho real-time
  • Ra ngoài: dùng FHIR cho mọi tích hợp mới
  • Document chính thức: cân nhắc CDA hoặc FHIR Document
  • Bridge: Mirth/NextGen Connect, Microsoft FHIR Converter

Bài tiếp: Terminology y tế cho FHIR — ICD, SNOMED CT, LOINC, RxNorm, UCUM.

DUY TRAN
Tác giả

DUY TRAN

Pursuing an AI-first mindset and intelligent system architecture. I build solutions by combining technology, creativity, and the ability to see structure in chaos — the foundation for becoming a Solution Architect.

Bình luận

Bài viết liên quan