Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide
0.9.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.9.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Cách dùng terminology trong VN Core FHIR IG, gồm CodeSystem, ValueSet, provenance pháp lý, ranh giới gói và nguyên tắc phối hợp giữa mã quốc gia với mã quốc tế.
VN Core hiện tại đi theo mô hình kết hợp thuật ngữ quốc tế với danh mục Việt Nam, thay vì chọn một phía và loại bỏ phía còn lại. Hướng này được giữ lại nhưng quản trị được siết chặt hơn:
LOINC, SNOMED CT, ICD và các bộ mã quốc tế khi chúng đã đáp ứng đúng bài toán;CodeSystem và ValueSet là danh mục tách rời implementation guidance, search, validation và package quản trị.| Khái niệm | Vai trò | Ví dụ |
|---|---|---|
| CodeSystem | Định nghĩa bộ mã (codes + display) | VNEthnicityCS — định nghĩa 54 mã dân tộc |
| ValueSet | Xác định tập mã được phép hoặc khuyến nghị trong một ngữ cảnh; có thể lấy mã từ một hoặc nhiều CodeSystem bằng include, exclude hoặc filter |
VNEthnicityVS — include toàn bộ VNEthnicityCS |
VN Core ưu tiên display tiếng Việt và designation tiếng Anh khi có bản dịch được quản trị; mức bao phủ song ngữ được công bố theo từng CodeSystem, không mặc định là 100%:
display = Tiếng Việt (ngôn ngữ chính)designation[en] = Tiếng Anh (khi có){
"code": "01",
"display": "Kinh",
"designation": [{
"language": "en",
"value": "Kinh (Vietnamese)"
}]
}
VN Core hiện dùng hai cách biên soạn thuật ngữ song song:
Các bộ mã đang đi theo hướng tài nguyên JSON sinh sẵn gồm:
VNCLSCSVNWardCSVNOCCSCodeSystem Y học cổ truyền (VNYHCTDiseaseCS, VNYHCTDiagnosisCS, VNYHCTAcupointCS, VNYHCTTechniqueCS, VNYHCTSymptomCS, VNYHCTTongueCS, VNYHCTPulseCS, VNYHCTTreatmentMethodCS, VNYHCTHerbCS, VNYHCTPrescriptionCS)VNMedicalDeviceNomenclatureCS trong package hl7.fhir.vn.deviceCách làm này giúp:
Các CodeSystem đặc thù Việt Nam, không có tương đương quốc tế:
| CodeSystem | Nguồn | Số mã | Mô tả |
|---|---|---|---|
VNEthnicityCS |
121/TCTK-PPCĐ | 54 | 54 dân tộc Việt Nam |
VNReligionCS |
CV 6955/BNV-TGCP | 16 | 16 tôn giáo được công nhận |
VNProvinceCS |
NQ 202/2025/QH15 | 34 | 34 tỉnh/TP sau sắp xếp |
VNDistrictLegacyCS |
Danh mục TCTK trước sáp nhập; crosswalk NQ 202/2025/QH15 | 696 | Huyện/quận giai đoạn trước 01/07/2025; canonical retired, chỉ dùng cho dữ liệu lịch sử |
VNDistrictCS |
Superseded canonical | 696 | Canonical cũ retired ở 0.9.0; chỉ giữ để resolve dữ liệu đã công bố |
VNWardCS |
NQ 202/2025/QH15 | ~3.321 | Xã/phường/thị trấn |
VNIdentifierTypeCS |
VN Core | 11 | Loại định danh VN |
VNBHYTCardTypeCS |
BHXH VN | 53 | Loại đối tượng thẻ BHYT |
VNHealthcareLevelCS |
NQ 202/2025/QH15, Luật TCCQĐP 2025 | 3 | Cấp quản lý hành chính y tế (TW, Tỉnh, Xã) |
VNLegacyTechnicalLineCS |
TT 43/2013/TT-BYT, TT 23/2024/TT-BYT | 4 | Tuyến chuyên môn kỹ thuật lịch sử (legacy only) |
VNHospitalRankCS |
TT 06/2024/TT-BYT | 4 | Hạng pháp lý của cơ sở KCB |
VNHealthUnitRankCS |
TT 06/2024/TT-BYT | 4 | Hạng pháp lý của đơn vị y tế không phải cơ sở KCB |
VNOrganizationRankStatusCS |
VN Core | 3 | Tình trạng xếp hạng |
VNOrganizationTypeCS |
Luật KCB 2023, TT 06/2024/TT-BYT | 11 | Loại hình cơ sở y tế; TYT/TTYT là legacy, hiện hành dùng health-station-commune cho TYT cấp xã |
VNInsuranceVisitTypeCS |
QĐ 4210/QĐ-BYT (legacy MA_LYDO_VVIEN, mã 1–4); mã 5 là mở rộng dự án chờ nguồn | 5 | Loại KCB BHYT legacy; chuẩn hiện hành dùng MA_DOI_TUONG_KCB với 27 mã theo QĐ 3276/QĐ-BYT |
VNDischargeDispositionCS |
QĐ 3176/QĐ-BYT | 5 | Tình trạng ra viện |
VNTreatmentOutcomeCS |
QĐ 3176/QĐ-BYT | 8 | Kết quả điều trị |
VNCostCategoryCS |
QĐ 697/QĐ-BYT | 14 | Danh mục chi phí KCB |
VNQualificationCS |
Luật KCB 2023, NĐ 96/2023/NĐ-CP | 14 | Trình độ chuyên môn y tế |
| CodeSystem | Nguồn gốc | Bản VN | Số mã (VN subset) |
|---|---|---|---|
VNICD10CS |
WHO ICD-10 | QĐ 4469/QĐ-BYT + QĐ 98/QĐ-BYT + QĐ 1849/QĐ-BYT | 15.617 (siêu dữ liệu-only trên IG + full JSON qua downloads) |
VNICD9CMCS |
CMS ICD-9-CM V32 | QĐ 387/QĐ-BYT (02/2026) | 3.882 |
VNSNOMEDSubsetCS |
SNOMED supplement (bản dịch VI cho http://snomed.info/sct) | QĐ 2427/QĐ-BYT, 2493, 2805/2025 | 76.066 mã (từ 77.393 concept 3 đợt) |
VNLOINCCS |
LOINC supplement (bản dịch VI cho http://loinc.org) | http://loinc.org / QĐ 1227/QĐ-BYT | 89.470 designation vi / 104.054 mã (LOINC 2.78) |
| CodeSystem | QĐ nguồn | Đợt | Mô tả |
|---|---|---|---|
VNYHCTDiseaseCS |
QĐ 2552/QĐ-BYT | 1 | Thể lâm sàng YHCT |
VNYHCTDiagnosisCS |
QĐ 2552/QĐ-BYT | 1 | Chẩn đoán YHCT |
VNYHCTAcupointCS |
QĐ 2552/QĐ-BYT | 1 | Huyệt châm cứu |
VNYHCTTechniqueCS |
QĐ 2552/QĐ-BYT | 1 | Kỹ thuật YHCT |
VNYHCTSymptomCS |
QĐ 3080/QĐ-BYT | 2 | Triệu chứng YHCT |
VNYHCTTongueCS |
QĐ 3080/QĐ-BYT | 2 | Chẩn đoán lưỡi |
VNYHCTPulseCS |
QĐ 3080/QĐ-BYT | 2 | Chẩn đoán mạch |
VNYHCTTreatmentMethodCS |
QĐ 3080/QĐ-BYT | 2 | Pháp điều trị |
VNYHCTHerbCS |
QĐ 3080/QĐ-BYT | 2 | Dược liệu |
VNYHCTPrescriptionCS |
QĐ 3080/QĐ-BYT | 2 | Bài thuốc cổ phương |
Bộ Y tế ban hành bộ mã CLS quốc gia (QĐ 1227/QĐ-BYT, 11/04/2025) gồm 2.964 chỉ số. ConceptMap hiện có đích LOINC cho 100% mã nguồn, nhưng đây là độ phủ kỹ thuật của mapping, không phải tuyên bố mọi cặp đều tương đương lâm sàng 1–1: nhiều quan hệ đang ở mức wider/heuristic và cần chuyên gia thuật ngữ rà soát trước khi dùng cho quyết định lâm sàng hoặc phân tích.
Artifact VNCLSCS hiện được sinh thành tài nguyên JSON từ dữ liệu nguồn máy đọc được của QĐ 1227/QĐ-BYT trước khi gọi SUSHI. Đây là lựa chọn kiến trúc có chủ đích để vừa bảo toàn mã pháp lý, vừa giữ lượt build ổn định.
Binding strength:
VNCoreObservationLab.codesử dụng binding extensible đếnobservation-codes(LOINC). Nếu ValueSet có khái niệm phù hợp, hệ thống phải dùng mã trong ValueSet; chỉ khi không có khái niệm phù hợp mới dùng mã ngoài, chẳng hạn mã CLS Việt Nam. Có thể gửi thêm coding tương đương từ CodeSystem khác để bảo toàn ánh xạ. Profile hiện tại không dùng bindingrequiredcho LOINC.
Nguyên tắc coding trong FHIR Observation:
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "718-7",
"display": "Hemoglobin [Mass/volume] in Blood"
},
{
"system": "http://fhir.hl7.org.vn/core/CodeSystem/vn-cls-cs",
"code": "1000001",
"display": "Định lượng Hemoglobin (Hb)"
}
]
}
}
| Trường hợp | Dùng system nào? |
|---|---|
| Interoperability quốc tế | http://loinc.org (ưu tiên) |
| Trao đổi nội bộ VN / BHXH | vn-cls-cs (mã CLS VN) |
| Cả hai | Ghi 2 coding — LOINC trước, CLS sau |
5 nhóm CLS:
| Nhóm | Mã | Số chỉ số |
|---|---|---|
| Huyết học — Truyền máu | 1000001–1001022 | 1.022 |
| Sinh hóa | 1010001–1010447 | 447 |
| Vi sinh | 1020001–1020174 | 174 |
| Giải phẫu bệnh | 1060001–1060081 | 81 |
| Chẩn đoán hình ảnh | 1070001–1071240 | 1.240 |
Danh mục nghề nghiệp Việt Nam (QĐ 34/2020/QĐ-TTg) gồm 1.516 mã, 5 cấp phân loại. Tương thích ISCO-08 ở Cấp 1-4, Cấp 5 là chi tiết riêng Việt Nam.
Dùng cho Patient.extension hoặc các tài nguyên liên quan nghề nghiệp bệnh nhân.
Danh pháp thiết bị y tế được tách khỏi Core vào package hl7.fhir.vn.device để không hard-bind VNCoreDevice.type khi phạm vi catalog/regulatory còn tiếp tục mở rộng.
| Artifact | Nguồn | Phạm vi |
|---|---|---|
VNMedicalDeviceNomenclatureCS |
QĐ-3107/QĐ-BYT-2024 + QĐ-847/QĐ-BYT-2025 | 956 concept, display/definition tiếng Việt, tên tiếng Anh trong designation, định nghĩa tiếng Anh trong property definitionEn |
VNMedicalDeviceNomenclatureVS |
Include toàn bộ VNMedicalDeviceNomenclatureCS |
Tập đầy đủ để tra cứu và kiểm tra coverage |
VNDeviceTypeVS |
Include toàn bộ VNMedicalDeviceNomenclatureCS |
Dùng làm binding preferred cho Device.type/DeviceDefinition.type trong package .device, không dùng required trong Core |
Các concept có provenance ở mức từng mã qua sourceDecision, nomenclatureYear, section, sourceRow, sourceStt và status. Khi bổ sung SNOMED CT, GMDN hoặc EMDN, dùng ConceptMap riêng theo license thực tế, không gộp trực tiếp vào CodeSystem Việt Nam.
Một số trường trong luồng KCB BHYT có danh mục mã đóng theo quy định (giám định BHXH từ chối mã ngoài danh mục), như Encounter.hospitalization.dischargeDisposition (VNDischargeDispositionVS), Claim.item.category (VNCostCategoryVS theo QĐ 697/QĐ-BYT) và ClaimResponse.error.code. VNInsuranceVisitTypeVS là danh mục legacy dựa trên MA_LYDO_VVIEN của QĐ 4210/QĐ-BYT (mã 1–4; mã 5 là mở rộng dự án chờ nguồn), không phải danh mục hiện hành của QĐ 3176/QĐ-BYT; triển khai hiện hành dùng MA_DOI_TUONG_KCB qua VNPatientVisitTypeCS.
Quyết định thiết kế có chủ đích: trong VN Core (IG nền) các binding này để extensible, KHÔNG phải required. Lý do:
Việc siết required cho đúng danh mục đóng được thực hiện ở tầng profile/IG vệ tinh BHYT submission (nơi mọi instance phải qua giám định BHXH), không phải ở core. Khi triển khai luồng nộp BHXH, hệ thống PHẢI dùng mã trong ValueSet tương ứng — xem BHYT Submission.
Tóm tắt:
extensibleở core = "phải dùng mã trong danh mục nếu có khái niệm phù hợp; chỉ dùng mã ngoài khi danh mục không có khái niệm phù hợp";requiredở IG vệ tinh BHYT = "chỉ chấp nhận mã trong danh mục pháp lý hoặc hợp đồng tích hợp được profile vệ tinh chỉ định".
{
"code": {
"coding": [{
"system": "http://fhir.hl7.org.vn/core/CodeSystem/vn-icd10-cs",
"code": "J18.9",
"display": "Viêm phổi, không xác định"
}]
}
}
Nếu cần mã không có trong ValueSet có binding extensible:
coding từ CodeSystem khác được quản trị, ví dụ SNOMED CT quốc tế.CodeableConcept.text để bảo toàn diễn giải nguồn khi cần.{
"code": {
"coding": [{
"system": "http://snomed.info/sct",
"code": "123456789",
"display": "Some concept"
}],
"text": "Mô tả bằng tiếng Việt"
}
}
CodeSystem.version phải theo chính sách phiên bản của nguồn thuật ngữ; phiên bản gói IG và phiên bản nghiệp vụ của bộ mã được quản trị riêng.-legacy.
Coding.system là cơ chế duy nhất để phân biệt identity giữa hai giai đoạn hiệu lực; không được đổi
system rồi giữ nguyên code nếu ConceptMap không xác nhận equivalent.Coding.version là tùy chọn. Nếu có, giá trị phải khớp business version của canonical được chọn;
không dùng Coding.version để bù cho semantic collision dưới cùng canonical.English: A meaning change or code-identity reuse requires a separate -legacy canonical. The
Coding.system value is the identity boundary. Coding.version is optional and, when present, must
match the selected canonical's business version.
| Nếu cần | Nên đọc tiếp |
|---|---|
| Danh mục CodeSystem/ValueSet | Terminology |
| Hướng dẫn kiểm tra hợp lệ binding | Validation Guidance |
| Cơ sở pháp lý các bộ mã | Legal Basis |
| Đính chính SNOMED CT VN | SNOMED CT VN Errata |
This page defines VN Core terminology governance. It explains how Vietnam-specific CodeSystems, localized international terminologies, traditional-medicine terminology, and CLS indicators are published and used, and how CodeSystem, ValueSet, binding strength, and package boundary should be handled consistently. Meaning changes use split current/legacy canonicals; Coding.version is optional and must match the selected canonical when present.