Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide
0.10.0 - Draft for Community Review
Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide - Draft for Community Review (v0.10.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Walkthrough nghiệp vụ đầu-cuối qua tình huống lâm sàng thực tế – từ đăng ký khám đến thanh toán BHYT – cho thấy resource nào xuất hiện theo từng bước, thứ tự tham chiếu ra sao và điểm giao cắt với lớp BHYT.
Bệnh nhân Nguyễn Văn An (nam, sinh 15/03/1985, CCCD 001085012345) đến khám ngoại trú tại Bệnh viện Chợ Rẫy với triệu chứng sốt, ho, khó thở. Bệnh nhân có thẻ BHYT đúng tuyến.
┌────────────┐ ┌────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 1. PATIENT │─▶│ 2. COVERAGE│─▶│ 3. ENCOUNTER │─▶│ 4. CONDITION │─▶│ 5. SERVICE │
│ Đăng ký │ │ Thẻ BHYT │ │ Lượt khám │ │ Chẩn đoán │ │ REQUEST │
└────────────┘ └────────────┘ └──────────────┘ └──────────────┘ │ Chỉ định │
└──────┬───────┘
│
┌────────────┐ ┌────────────────┐ ┌──────────────────┐ ┌──────────────┐ │
│ 10. CLAIM │◀─│ 9. CLAIM │◀─│ 8. MEDICATION │◀─│ 7. OBSERVATION│◀─┘
│ RESPONSE │ │ BHYT │ │ REQUEST │ │ LAB │
│ Phản hồi TT│ │ Yêu cầu TT │ │ Đơn thuốc │ │ Kết quả XN │
└────────────┘ └────────────────┘ └──────────────────┘ └──────┬───────┘
│
┌──────▼───────┐
│ 6. SPECIMEN │
│ Lấy/nhận mẫu │
└──────────────┘
Ghi chú: Sơ đồ trên thể hiện 10 bước chính trong tình huống ngoại trú. Các resource hỗ trợ (Organization, Practitioner) không hiển thị trong sơ đồ nhưng được tham chiếu từ nhiều bước.
Tiếp nhận tạo/cập nhật hồ sơ bệnh nhân với thông tin nhân khẩu học.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
identifier[CCCD] |
001085012345 |
NamingSystem: vn-cccd-ns |
identifier[BHYT] |
0791234567 |
Mã số BHYT hiện hành 10 số, trùng giá trị mã số BHXH |
name.text |
"Nguyễn Văn An" | Họ tên đầy đủ (MS) |
name.family |
"Nguyễn" | Họ |
name.given |
["Văn", "An"] | Tên đệm + tên |
gender |
male |
|
birthDate |
1985-03-15 |
|
address.state |
"Thành phố Hồ Chí Minh" | Nơi cư trú — text tự do |
address.extension[province] |
79 = "Thành phố Hồ Chí Minh" |
VNProvinceCS (NQ 202/2025/QH15) |
address.extension[ward] |
26743 = "Phường Bến Thành" |
VNWardCS |
extension[birthPlace] |
province 01 = "Thành phố Hà Nội", ward 00008 = "Phường Ngọc Hà" |
Nơi sinh (khác nơi cư trú) |
extension[ethnicity] |
01 = "Kinh" |
VNEthnicityCS (121/TCTK) |
Profile: VNCorePatient Example: ExamplePatientNguyenVanAn
Kiểm tra và ghi nhận thông tin thẻ BHYT.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
identifier |
0791234567 |
Mã số BHYT hiện hành 10 số, trùng giá trị mã số BHXH |
status |
active |
|
type |
BHYT | |
beneficiary |
Reference(Patient) | Bệnh nhân |
payor |
Reference(Organization/BHXH) | Cơ quan BHXH |
period.start |
2025-08-01 |
Hiệu lực từ |
period.end |
2026-07-31 |
Hiệu lực đến |
extension[bhytCardType] |
DN = "Người lao động trong doanh nghiệp nhà nước" |
Loại đối tượng (QĐ 1351/QĐ-BHXH, QĐ 1697/QĐ-BHXH, QĐ 1018/QĐ-BHXH; Phụ lục I CV 1804/BHXH-QLT) |
extension[primaryCareFacility] |
Reference(Organization/ChoRay) | Nơi ĐKKCB ban đầu |
Profile: VNCoreCoverage Example: ExampleCoverageBHYTNew
Khi bệnh nhân vào phòng khám, hệ thống tạo Encounter.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
status |
in-progress → finished |
Trạng thái lượt khám |
class |
AMB |
Ngoại trú (ambulatory) |
subject |
Reference(Patient) | |
period.start |
2026-03-19T08:30:00+07:00 |
Giờ bắt đầu |
period.end |
2026-03-19T11:00:00+07:00 |
Giờ kết thúc |
serviceProvider |
Reference(Organization/ChoRay) | BV Chợ Rẫy |
extension[insuranceVisitType] ⚠️ ngừng dùng |
5 = "Khám chữa bệnh ban đầu" |
Chỉ dùng để đọc dữ liệu cũ. Mã 5 là mã mở rộng dự án trong danh mục legacy MA_LYDO_VVIEN, không có trong QĐ 4210/QĐ-BYT và chưa có nguồn ban hành. Dữ liệu mới dùng MA_DOI_TUONG_KCB theo QĐ 3176/QĐ-BYT — xem VNPatientVisitTypeCS |
Profile: VNCoreEncounter Example: ExampleEncounterOutpatient
Bác sĩ khám và chẩn đoán: Viêm phổi (J18.9).
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
clinicalStatus |
active |
|
verificationStatus |
confirmed |
|
category |
encounter-diagnosis |
|
code.coding[0] |
ICD-10 VN J18.9 = "Viêm phổi, không xác định" |
TT 06/2026/TT-BYT + QĐ 1849/QĐ-BYT; phải kiểm mã theo edition hiện hành, không dùng wrapper legacy/experimental của IG làm nguồn authoritative |
subject |
Reference(Patient) | |
encounter |
Reference(Encounter) | |
recordedDate |
2026-03-19 |
|
recorder |
Reference(Practitioner) | BS khám |
Profile: VNCoreCondition Example: ExampleConditionPneumonia
BS chỉ định xét nghiệm glucose máu lúc đói.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
status |
active |
|
intent |
order |
|
category |
XN = "Xét nghiệm" |
VNServiceRequestCategoryCS |
code.coding[0] |
LOINC 1558-6 = "Fasting glucose [Mass/volume] in Serum or Plasma" |
LOINC VN (QĐ 1227/QĐ-BYT) |
code.text |
"Glucose máu lúc đói" | |
subject |
Reference(Patient) | |
encounter |
Reference(Encounter) | |
requester |
Reference(Practitioner) | BS chỉ định |
performerType |
01 = "Hoá sinh" |
VNSpecialtyVS |
Profile: VNCoreServiceRequest Example: ExampleServiceRequestLabGlucose
Phòng xét nghiệm tiếp nhận mẫu huyết thanh sau khi lấy máu.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
status |
available |
Mẫu đạt điều kiện xét nghiệm |
type |
SER = "Serum" |
Huyết thanh |
subject |
Reference(Patient) | |
request[0] |
Reference(ServiceRequest) | Liên kết lại chỉ định gốc |
collection.collectedDateTime |
2026-03-19T09:00:00+07:00 |
Thời điểm lấy mẫu |
receivedTime |
2026-03-19T09:05:00+07:00 |
Thời điểm tiếp nhận mẫu |
container.type |
"Ống tách huyết thanh" | Vật chứa mẫu |
Profile: VNCoreSpecimen Example: ExampleSpecimenSerumChemistry
Phòng xét nghiệm trả kết quả.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
status |
final |
|
category |
laboratory |
|
code |
LOINC 14771-0 = "Fasting glucose [Moles/volume] in Serum or Plasma" |
Đúng cho đơn vị mmol/L |
subject |
Reference(Patient) | |
encounter |
Reference(Encounter) | |
effectiveDateTime |
2026-03-19T09:20:00+07:00 |
Thời điểm có kết quả sau khi tiếp nhận mẫu |
valueQuantity |
6.8 mmol/L | Kết quả — cao hơn giới hạn trên |
referenceRange.low |
3.9 mmol/L | Giới hạn dưới |
referenceRange.high |
6.1 mmol/L | Giới hạn trên |
interpretation |
H = "High" |
Cao — gợi ý cần theo dõi đường huyết |
Profile: VNCoreObservationLab Example: ExampleObservationLabGlucose
BS kê đơn thuốc điện tử.
| FHIR Element | Giá trị | Ghi chú |
|---|---|---|
status |
active |
|
intent |
order |
|
medicationCodeableConcept |
ATC J01CA04 = "Amoxicillin" |
Mã ATC |
subject |
Reference(Patient) | |
encounter |
Reference(Encounter) | |
requester |
Reference(Practitioner) | BS kê đơn |
dosageInstruction.text |
"Uống 500mg x 3 lần/ngày, sau ăn" | Hướng dẫn sử dụng |
dosageInstruction.timing |
3 lần/ngày x 7 ngày | |
dosageInstruction.doseAndRate |
500 mg | |
dispenseRequest.quantity |
21 viên |
Profile: VNCoreMedicationRequest Example: ExampleMedicationRequestAmoxicillin
Lưu ý: Example FSH dùng
medicationCodeableConcept(inline). Profile cũng hỗ trợmedicationReferencekhi cần link đến resource Medication riêng (có thêm SNOMED CT, số đăng ký thuốc).
Bước này gồm hai nhánh liên quan nhưng không đồng nhất: lập tài khoản/bảng kê chi phí và lập hồ sơ đề nghị thanh toán BHYT.
Khi kết thúc lượt khám, chi phí được gom về tài khoản viện phí của đợt, rồi lập bảng kê chi phí theo mẫu QĐ 697/QĐ-BYT. Đây là hai việc khác nhau và nằm trên hai resource khác nhau — xem ADR-0021.
| FHIR Element | Giá trị minh hoạ | Ghi chú |
|---|---|---|
Account.identifier[MALK] |
LK-2026-... |
Mã liên kết hồ sơ; khoá nối sang bảng kê và hồ sơ đề nghị |
Account.servicePeriod |
19/03/2026 | Kỳ phát sinh chi phí, bao trùm mọi Encounter của đợt |
Account.coverage[0] |
Reference(Coverage/BHYT) | Thẻ có hiệu lực trong kỳ |
Invoice.account |
Reference(Account) | 1..1 — bảng kê thuộc đúng một tài khoản |
Invoice.lineItem[n].priceComponent[base] |
200.000 VND | Cột (3) số lượng và (7) thành tiền của mẫu |
Invoice.lineItem[n].extension[linePaymentAllocation] |
4 nguồn tiền | Cột (10)–(13); bắt buộc đủ khi status = issued |
Invoice.totalNet |
Tổng cộng | Đối soát từ các dòng, không nhập tay |
Ba ô ký của mẫu nằm ở VNCoreCostStatementComposition.attester; cả khối được bàn giao bằng
VNCoreCostStatementDocumentBundle.
Profile: VNCoreAccount · VNCoreCostStatementInvoice · VNCoreCostStatementComposition
Claim là hồ sơ đề nghị thanh toán gửi cơ quan bảo hiểm xã hội — KHÔNG phải bảng kê chi phí.
Bảng kê 13 cột đi kèm là Invoice riêng ở bước 9a, nối bằng cùng MA_LK.
| FHIR Element | Giá trị minh hoạ | Ghi chú |
|---|---|---|
status |
active |
|
type |
institutional |
|
use |
claim |
|
patient |
Reference(Patient) | |
provider |
Reference(Organization/ChoRay) | CSKCB |
insurance.coverage |
Reference(Coverage/BHYT) | Thẻ BHYT |
item[0].productOrService |
"Khám bệnh" | Phí khám |
item[1].productOrService |
"XN Glucose" | Chi phí XN |
item[2].productOrService |
"Amoxicillin 500mg x 21" | Chi phí thuốc |
Lưu ý: ExampleClaimBHYT minh hoạ hồ sơ đề nghị cho lượt nội trú (viêm ruột thừa, tổng 14.820.000 VND — trong đó 1.770.000 VND thuốc ngoài danh mục BHYT người bệnh tự trả). Hồ sơ ngoại trú đơn giản hơn — xem ExampleClaimOutpatient và kết quả giám định từ chối một phần ExampleClaimResponsePartialDeny.
Profile: VNCoreClaim
Cơ quan BHXH xử lý và phản hồi yêu cầu thanh toán.
| FHIR Element | Giá trị minh hoạ | Ghi chú |
|---|---|---|
status |
active |
|
type |
institutional |
|
use |
claim |
|
patient |
Reference(Patient) | |
outcome |
complete |
Xử lý hoàn tất |
request |
Reference(Claim) | Tham chiếu Claim bước 9b |
Profile: VNCoreClaimResponse
┌────────────────────────────────────────────────────────────────────┐
│ TIMELINE — Lượt khám ngoại trú BHYT │
├────────┬──────────────────────────────────────────────────────────┤
│ 08:30 │ Patient + Coverage → Đăng ký, xác minh BHYT │
│ 08:35 │ Encounter (in-progress) → Bắt đầu lượt khám │
│ 08:45 │ Condition → BS chẩn đoán Viêm phổi J18.9 │
│ 08:50 │ ServiceRequest → Chỉ định XN Glucose │
│ 09:00 │ Specimen → Lấy mẫu huyết thanh xét nghiệm │
│ 09:05 │ Specimen → Tiếp nhận mẫu tại phòng xét nghiệm │
│ 09:20 │ Observation → Kết quả XN: 6.8 mmol/L (High) │
│ 09:30 │ MedicationRequest → Kê đơn Amoxicillin │
│ 10:00 │ Encounter (finished) → Kết thúc khám │
│ 10:02 │ Account + Invoice → Gom chi phí, lập bảng kê 13 cột │
│ 10:05 │ Claim → Hồ sơ đề nghị thanh toán gửi BHXH │
│ 10:10 │ ClaimResponse → BHXH phản hồi: chấp nhận │
└────────┴──────────────────────────────────────────────────────────┘
| # | Resource | Profile | Vai trò |
|---|---|---|---|
| 1 | Patient | VNCorePatient | Hồ sơ bệnh nhân |
| 2 | Coverage | VNCoreCoverage | Thẻ BHYT |
| 3 | Organization | VNCoreOrganization | BV Chợ Rẫy |
| 4 | Practitioner | VNCorePractitioner | Bác sĩ khám |
| 5 | Encounter | VNCoreEncounter | Lượt khám ngoại trú |
| 6 | Condition | VNCoreCondition | Chẩn đoán ICD-10 |
| 7 | ServiceRequest | VNCoreServiceRequest | Chỉ định XN |
| 8 | Specimen | VNCoreSpecimen | Mẫu bệnh phẩm |
| 9 | Observation | VNCoreObservationLab | Kết quả XN |
| 10 | MedicationRequest | VNCoreMedicationRequest | Đơn thuốc |
| 11 | Account | VNCoreAccount | Tài khoản viện phí của đợt |
| 12 | Invoice | VNCoreCostStatementInvoice | Bảng kê chi phí 13 cột (QĐ 697/QĐ-BYT) |
| 13 | Claim | VNCoreClaim | Hồ sơ đề nghị thanh toán |
| 14 | ClaimResponse | VNCoreClaimResponse | Kết quả giám định của BHXH |
Bệnh nhân ngoại trú có triệu chứng hô hấp được bác sĩ chỉ định CT lồng ngực. Quy trình cần nối chỉ định, siêu dữ liệu DICOM, báo cáo đọc phim và nhóm chi phí CĐHA trong hồ sơ BHYT.
┌────────────────────┐
│ 1. SERVICE REQUEST │ BS chỉ định CT lồng ngực
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 2. IMAGING STUDY │ KTV chụp, StudyInstanceUID, modality CT
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 3. DIAG REPORT │ BS đọc phim, imagingStudy, PDF kết quả
│ IMAGING │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 4. CLAIM BHYT │ Nhóm chi phí 4 CĐHA theo QĐ 697/QĐ-BYT
└────────────────────┘
| Bước | Profile | Vai trò |
|---|---|---|
| 1 | VNCoreServiceRequest | Bác sĩ tạo chỉ định CT |
| 2 | VNCoreImagingStudy | KTV/RIS/PACS ghi DICOM StudyInstanceUID, modality CT, thời điểm thực hiện và kỹ thuật CĐHA |
| 3 | VNCoreDiagnosticReportImaging | Bác sĩ đọc phim ghi resultsInterpreter, tham chiếu imagingStudy, đính kèm presentedForm PDF phiếu kết quả |
| 4 | VNCoreClaim | Tổng hợp thanh toán BHYT, category nhóm chi phí 4 CĐHA theo QĐ 697/QĐ-BYT ngày 19/03/2026 |
Điểm kiểm tra quan trọng: VNCoreDiagnosticReportImaging.imagingStudy phải tham chiếu đúng VNCoreImagingStudy đã sinh từ bước thực hiện chụp, thay vì chỉ gửi text kết quả rời rạc.
Bệnh nhân được chỉ định sinh thiết tổn thương nghi ngờ. Luồng này cần bảo toàn bệnh phẩm, kết luận giải phẫu bệnh và khả năng cập nhật chẩn đoán xác định.
┌────────────────────┐
│ 1. SERVICE REQUEST │ BS chỉ định sinh thiết
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 2. SPECIMEN │ Bệnh phẩm, type/body site theo SNOMED Body Structure
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 3. DIAG REPORT │ GPB: specimen bắt buộc, conclusionCode extensible
│ PATHOLOGY │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 4. CONDITION │ Cập nhật chẩn đoán xác định nếu có
└────────────────────┘
| Bước | Profile | Vai trò |
|---|---|---|
| 1 | VNCoreServiceRequest | Bác sĩ chỉ định sinh thiết |
| 2 | VNCoreSpecimen | Ghi nhận bệnh phẩm, loại mẫu và vị trí giải phẫu; ưu tiên SNOMED CT VN Body Structure theo QĐ 2427/QĐ-BYT ngày 25/07/2025 |
| 3 | VNCoreDiagnosticReportPathology | Báo cáo GPB; specimen bắt buộc 1..*; conclusionCode binding extensible tới VNMorphologyVS theo QĐ 2493/QĐ-BYT năm 2025; conclusion giữ diễn giải narrative |
| 4 | VNCoreCondition | Cập nhật chẩn đoán xác định khi kết quả GPB thay đổi hoặc xác nhận chẩn đoán lâm sàng |
VNCoreDiagnosticReportPathology dùng conclusionCode với binding extensible, không dùng required, vì terminology QA và ánh xạ local chưa hoàn tất cho toàn bộ mã hình thái. Implementer nên dùng VNMorphologyVS khi có mã phù hợp, nhưng vẫn được phương án dự phòng sang SNOMED CT chính thức hoặc text narrative để không chặn triển khai thực tế.
Các tình huống dưới đây thuộc phạm vi v0.10.0 nhưng vẫn cần phản hồi triển khai thật trước khi nâng mức maturity. Phản hồi từ cộng đồng và bên triển khai sẽ giúp xác định thứ tự ưu tiên cho các ví dụ end-to-end tiếp theo.
| Tình huống | Mô tả | Hồ sơ bổ sung |
|---|---|---|
| Nội trú | Nhập viện, chuyển khoa, xuất viện, thanh toán 12 nhóm danh mục chi phí (14 mã) theo QĐ 697/QĐ-BYT | Encounter (inpatient), Invoice (14 dòng danh mục chi phí — xem ADR-0021), Claim |
| Chuyển tuyến | Giấy chuyển viện, KCB trái tuyến, mức thanh toán BHYT theo NĐ 188/2025/NĐ-CP | DocumentReference (giấy chuyển viện), Coverage (trái tuyến) |
| Y học cổ truyền | Chẩn đoán YHCT kèm Tây y, bát cương biện chứng, huyệt vị châm cứu | Condition (YHCT), Observation (YHCT), Procedure |
| Cấp cứu | KCB cấp cứu, xử lý khi chưa có thẻ BHYT hoặc chưa xác định danh tính | Encounter (emergency), Coverage (cấp cứu) |
Mọi góp ý xin gửi qua email [email protected].
| Nếu cần | Nên đọc tiếp |
|---|---|
| Xem chi tiết các hồ sơ FHIR được dùng trong scenario | Danh mục hồ sơ |
| Liên thông scenario với hồ sơ thanh toán BHYT | BHYT Submission |
| Kiểm tra hợp lệ dữ liệu trong scenario | Hướng dẫn kiểm tra hợp lệ |
| Bắt đầu cài đặt và chạy thử scenario trên môi trường local | Getting Started |
This page walks through a complete outpatient visit at a Vietnamese hospital, from patient registration through BHYT insurance claim adjudication, using 14 interlinked VN Core profiles across 10 clinical steps. The scenario illustrates Vietnam-specific elements such as CCCD-based identifiers, BHYT coverage verification, ICD-10 VN coding, and insurance claim submission. Additional scenarios covering inpatient care, referral, traditional medicine, and emergency visits are part of the v0.10.0 pilot-hardening scope and will be promoted as implementation evidence matures.