HL7 Vietnam VN Core FHIR Implementation Guide

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 Viet Nam cờ

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

Hướng dẫn thuật ngữ

Hướng dẫn thuật ngữ — Terminology Guidance

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ế.

Thuật ngữ quốc tế trước, danh mục Việt Nam sau

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:

  • Ưu tiên LOINC, SNOMED CT, ICD và các bộ mã quốc tế khi chúng đã đáp ứng đúng bài toán;
  • Localize hoặc bổ sung bằng bộ mã Việt Nam khi có căn cứ pháp lý, nhu cầu vận hành hoặc khoảng trống ngữ nghĩa thật;
  • Quản lý provenance pháp lý và ranh giới gói của từng bộ mã ngay từ đầu, không để terminology đứng ngoài chiến lược bề mặt công bố.

Nguyên tắc quản trị

  • Không mở rộng scope chỉ vì một danh mục từng tồn tại trong nguồn cũ.
  • Không trộn bộ mã nền tảng với bộ mã lớn, biến động cao mà không có chiến lược phát hành riêng.
  • Không coi CodeSystem và ValueSet là danh mục tách rời implementation guidance, search, validation và package quản trị.

Nguyên tắc chung

CodeSystem vs ValueSet

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

Song ngữ

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)"
  }]
}

Mô hình biên soạn các bộ mã lớn

VN Core hiện dùng hai cách biên soạn thuật ngữ song song:

  • FSH cho các bộ mã nhỏ hoặc cần biên tập thủ công nhiều về mô tả, designation và ràng buộc nghiệp vụ.
  • Tài nguyên FHIR JSON sinh sẵn cho các bộ mã quy mô lớn, có dữ liệu nguồn máy đọc được và cần giữ ổn định tuyệt đối theo phụ lục pháp lý.

Các bộ mã đang đi theo hướng tài nguyên JSON sinh sẵn gồm:

  • VNCLSCS
  • VNWardCS
  • VNOCCS
  • Toàn bộ 10 CodeSystem Y học cổ truyền (VNYHCTDiseaseCS, VNYHCTDiagnosisCS, VNYHCTAcupointCS, VNYHCTTechniqueCS, VNYHCTSymptomCS, VNYHCTTongueCS, VNYHCTPulseCS, VNYHCTTreatmentMethodCS, VNYHCTHerbCS, VNYHCTPrescriptionCS)
  • VNMedicalDeviceNomenclatureCS trong package hl7.fhir.vn.device

Cách làm này giúp:

  • Giữ nguyên dữ liệu nguồn và provenance pháp lý;
  • Giảm thời gian biên dịch SUSHI;
  • Tăng khả năng tái lập giữa môi trường phát triển, kiểm tra và phát hành.

Các nhóm thuật ngữ

Thuật ngữ quốc gia — do VN Core định nghĩa

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ế

Thuật ngữ y khoa quốc tế — bản địa hoá cho VN

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ại CodeSystem-vn-icd10-cs-2020-legacy.full.json (15.617 concept, version 2020-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 trong copyright của artifact).

Thuật ngữ Y học cổ truyền (YHCT)

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

Chỉ số cận lâm sàng (CLS) — QĐ 1227/QĐ-BYT

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.code bind extensible vào vn-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 chung observation-codes củ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 binding required.

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 đích wider kèm ngữ cảnh ConceptMap (equivalence đi cùng), không nhét thẳng vào Observation.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

Nghề nghiệp (VSCO 2020)

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ế

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.


Binding strength cho mã BHYT đóng

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:

  • Giữ core linh hoạt cho dual-coding (vd kèm SNOMED/ICD), tái sử dụng ngoài ngữ cảnh BHYT, và dữ liệu chuyển tiếp;
  • Tránh chặn cứng khi BYT/BHXH cập nhật danh mục giữa các kỳ phát hành.

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".


Cách sử dụng trong profiles

Coding element

{
  "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"
    }]
  }
}

Khi CodeSystem không đủ

Nếu cần mã không có trong ValueSet có binding extensible:

  1. Tìm khái niệm có ngữ nghĩa phù hợp trong ValueSet; không chọn mã “gần nhất” nếu khác nghĩa.
  2. Nếu không có khái niệm phù hợp, dùng coding từ CodeSystem khác được quản trị, ví dụ SNOMED CT quốc tế.
  3. Ghi 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"
  }
}

Phiên bản thuật ngữ

  • 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.
  • Khi nguồn ban hành thay đổi, công bố bản mới, trạng thái mã và hướng dẫn chuyển đổi.
  • Khi một mã bị tái sử dụng với nghĩa khác, quy tắc mặc định của VN Core là tách canonical hiện hành và canonical -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.
  • Họ đơn vị hành chính là ngoại lệ đã ghi trong hợp đồng 0.10.0: mỗi cấp dùng một canonical thống nhất, còn tên, cha và hiệu lực theo ngày chỉ lấy từ state có bằng chứng. Cùng mã/tên không tạo quan hệ chuyển đổi.
  • 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.


Liên hệ với các trang khác

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

English Summary

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.