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
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 |
QĐ 121-TCTK/PPCĐ | 56 | 54 dân tộc + 55 Người nước ngoài + 99 Không rõ |
VNReligionCS |
CV 6955/BNV-TGCP | 18 | 00 Không tôn giáo + 16 tôn giáo + 99 Không rõ |
VNProvinceCS |
QĐ 124/2004/QĐ-TTg, QĐ 19/2025/QĐ-TTg và nguồn danh mục đã thẩm định | 64 | Tập mã quan sát; current VS có 34 mã tại 20/09/2026; lịch sử có phạm vi |
VNDistrictCS |
Danh mục MOF/NSO và bằng chứng mã nhà nước ba chữ số | 716 | Danh mục lịch sử dạng fragment; không gán hiệu lực hoặc cha từ quan sát |
VNWardCS |
QĐ 19/2025/QĐ-TTg và nguồn danh mục đã thẩm định | 11.180 | Tập mã quan sát; current VS có 3.321 mã tại 20/09/2026 |
VNIdentifierTypeCS |
VN Core | 17 | Loại định danh VN |
VNBHYTCardTypeCS |
BHXH VN | 71 | 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 | TT 06/2026/TT-BYT (bảng 29 cột trong PDF ký) + QĐ 1849/QĐ-BYT; nền QĐ 4469/QĐ-BYT + QĐ 98/QĐ-BYT | 16.052 (15.844 hiện hành + 208 mã huỷ giữ inactive; business version 2026-07-01); mã ở dạng ASCII trơn; vai trò dagger/asterisk ghi bằng property dagger-asterisk chứ không nhét ký hiệu vào giá trị mã |
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) |
Edition ICD-10 2026 — đã rebuild và đối soát (07/08/2026): danh mục dựng trực tiếp từ bảng 29 cột trong phụ lục ban hành kèm TT 06/2026/TT-BYT (bản PDF ký, 1.275 trang — nguồn công bố tại Cổng Chính phủ), mang đủ sáu cờ sử dụng WHO 2019 và hướng dẫn mã hoá song ngữ cho toàn danh mục. Đối soát ba chiều bằng
scripts/reconcile_icd10_edition.py: tập mã bảng TT 06 khớp đúng chuỗi (bảng QĐ 4469/QĐ-BYT − Phụ lục 4 + Phụ lục 5 QĐ 1849/QĐ-BYT), 8 phép kiểm R1-R8 sạch; hai phân xử nguồn được khoá cứng trong gate (J13 — PL4 dọn dòng trùng chứ không huỷ mã; M47.00†–M47.09† — bảng TT 06 in dagger trong khi PL5 ký in bare). Bản edition 2020 đóng băng nguyên trạng tạiCodeSystem-vn-icd10-cs-2020-legacy.full.json(15.617 concept, version2020-legacy) cho dữ liệu lập trước 01/07/2026. Quyền tái phân phối vẫn cần chủ sở hữu IG phê duyệt trước khi phát hành production (ghi trongcopyrightcủa artifact).
| 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Đ 2738/QĐ-BYT PL IV | 3 | Pháp điều trị (164 mã; QĐ 2738/QĐ-BYT thay Phụ lục IV của QĐ 3080/QĐ-BYT) |
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: chỉ 1.404/2.964 quan hệ là equivalent, còn 1.560 ở mức wider (đích rộng hơn nguồn) 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.
Ba miền nghiệp vụ — ba ValueSet. QĐ 1227/QĐ-BYT gộp ba miền vào một danh mục; từ 0.10.0 IG tách ValueSet theo miền để binding đúng loại dịch vụ (một kết quả xét nghiệm không được mang mã chụp X-quang):
| ValueSet | Miền | Phụ lục | Số chỉ số |
|---|---|---|---|
vn-cls-laboratory-vs |
Xét nghiệm (Huyết học, Sinh hoá, Vi sinh) | 01–03 | 1.643 |
vn-cls-pathology-vs |
Giải phẫu bệnh | 04 | 81 |
vn-cls-imaging-vs |
Chẩn đoán hình ảnh | 05 | 1.240 |
vn-cls-vs |
Toàn danh mục (ngữ cảnh không phân miền, vd DiagnosticReport) | 01–05 | 2.964 |
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: từ 0.10.0,
VNCoreObservationLab.codebind extensible vàovn-lab-observation-code-vs— ValueSet này gồm cả LOINC vàvn-cls-cs(Phụ lục 01–03, miền xét nghiệm) như hai hệ ngang hàng, không phải quan hệ chính–phụ. Mã CLS theo QĐ 1227/QĐ-BYT vì vậy nằm TRONG binding, không phải "mã ngoài dùng khi LOINC không có". Trước 0.10.0 profile bind vào tập chungobservation-codescủa HL7, khiến 2.964 chỉ số của danh mục quốc gia không ràng buộc được kết quả xét nghiệm nào. Vẫn khuyến nghị gửi song song hai coding để bảo toàn ánh xạ; profile không dùng bindingrequired.
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": "1000151",
"display": "Lượng huyết sắc tố trong máu"
}
]
}
}
| 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 | Chỉ khi quan hệ trong vn-cm-cls-to-loinc là equivalent (1.404/2.964) — ghi 2 coding, LOINC trước, CLS sau |
Không tự động dual-code. Với 1.560 mã có quan hệ
wider, hệ thống KHÔNG được tự sinh coding LOINC từ mã CLS như thể tương đương — làm vậy là ghi kết quả thành khái niệm rộng hơn thực tế. Khi cần trao đổi quốc tế cho nhóm này, dùng đíchwiderkèm ngữ cảnh ConceptMap (equivalenceđi cùng), không nhét thẳng vàoObservation.code.coding.
5 nhóm CLS:
| Nhóm | Mã | Số chỉ số |
|---|---|---|
| Huyết học — Truyền máu | 1000001–1001022 | 1.022 |
| Sinh hoá | 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), ClaimResponse.error.code (VNBHYTProcessingIssueVS — chỉ mã lỗi XỬ LÝ) và ClaimResponse.adjudication.reason (VNBHYTAdjudicationIssueVS — mã kết quả giám định). Hai tập này tách nhau từ 0.10.0 vì ClaimResponse.error trong R4 chỉ dành cho lỗi khiến hồ sơ không giám định được, không phải từ chối nghiệp vụ có căn cứ pháp lý. 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ế chính để 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à tuỳ 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 normally requires a separate -legacy canonical.
Administrative units use the bounded 0.10.0 exception: one canonical per level with evidenced dated
states, and no identity or transition is inferred from a matching code or name. 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.