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 - Local Development build (v0.9.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Các quy tắc nền dưới đây áp dụng chung cho VN Core: cách biểu diễn tên, địa chỉ, định danh, pattern datatype và ranh giới giữa guidance chung với các trang chuyên đề.
VN Core hiện tại đi theo nguyên tắc: dùng baseline quốc tế trước, rồi chỉ Việt hóa ở nơi thật sự cần.
IPS và extension chuẩn của HL7 nếu đã diễn đạt đúng ngữ nghĩa.Không để mỗi profile tự định nghĩa lại một pattern cho cùng một datatype. Các pattern dùng lại được giữ ở trang diễn giải và quản trị thay vì lặp lại trong từng profile:
| Pattern | Vai trò trong VN Core hiện tại | Đọc ở đâu |
|---|---|---|
Identifier |
Chốt trạng thái hiện hành/lịch sử/ngừng dùng, system URI, search và precedence |
Danh mục định danh, Ánh xạ URI/OID |
Address |
Chốt mô hình 2 cấp mới, dữ liệu legacy cấp huyện và quy tắc địa chỉ Việt Nam | Trang này, Kiểm tra hợp lệ |
Coding / CodeableConcept |
Chốt cách kết hợp mã quốc tế, mã Việt Nam, text, display, translation |
Hướng dẫn thuật ngữ |
Dosage |
Chốt đường hướng reusable ngữ nghĩa cho medication luồng công việc, không lặp tùy tiện ở từng profile | Profile FHIR, Hướng dẫn thuật ngữ |
Chi tiết cách diễn giải và cẩm nang HIS -> FHIR đã được tách sang trang riêng: Hướng dẫn Must Support.
Trong VN Core IG, khi một element được đánh dấu Must Support (MS), nghĩa là:
Must Support KHÔNG có nghĩa là element đó bắt buộc phải có giá trị (required). Một element có thể vừa MS vừa 0..1 — nghĩa là không bắt buộc có, nhưng nếu có thì phải hỗ trợ.
| Element | Cardinality | MS | Giải thích |
|---|---|---|---|
Patient.identifier[CCCD] |
1..1 | MS | Slice CCCD là bắt buộc; nếu chưa có giá trị thực tế thì dùng data-absent-reason và lý do bất khả kháng hợp lệ |
Patient.name |
1..* | MS | Bắt buộc có và phải hỗ trợ |
Patient.birthDate |
1..1 | MS | Bắt buộc có phần tử; khi chưa biết giá trị, dùng cơ chế thiếu dữ liệu được profile cho phép |
Khi element MS không có giá trị, hệ thống cần phân biệt cardinality:
0, vẫn phải khai phần tử và dùng Data Absent Reason extension (http://hl7.org/fhir/StructureDefinition/data-absent-reason) khi profile cho phép.0..x), có thể bỏ phần tử; không tạo element rỗng chỉ để biểu thị thiếu dữ liệu.Tên tiếng Việt có cấu trúc: Họ + Tên đệm + Tên gọi. Ánh xạ sang FHIR:
| Thành phần VN | FHIR Element | Ví dụ |
|---|---|---|
| Họ | HumanName.family |
"Nguyễn" |
| Tên đệm + Tên gọi | HumanName.given (mảng) |
["Văn", "An"] |
| Họ tên đầy đủ | HumanName.text |
"Nguyễn Văn An" |
text nên được điền khi nguồn có họ tên đầy đủ chính thức; VN Core đánh dấu name.text là 0..1 MS, không phải phần tử bắt buộc.family và given theo cấu trúc tên do nguồn có thẩm quyền cung cấp; không suy ra máy móc chỉ từ vị trí từ đầu tiên.given; dùng text để bảo toàn cách viết chính thức.use = official cho tên chính thức trên CCCD/giấy tờ{
"name": [{
"use": "official",
"text": "Nguyễn Văn An",
"family": "Nguyễn",
"given": ["Văn", "An"]
}]
}
given chỉ có 1 phần tử. Ví dụ: Bảo Đại → family: "Bảo", given: ["Đại"]family chứa toàn bộ họ kép. Ví dụ: "Tôn Thất" → family: "Tôn Thất"use: "official"Địa chỉ Việt Nam sau NQ 202/2025/QH15 có 2 cấp chính (tỉnh + xã), nhưng VN Core vẫn hỗ trợ tương thích ngược:
| Cấp | FHIR Element | CodeSystem | Ghi chú |
|---|---|---|---|
| Tỉnh/TP | Extension vn-ext-province |
VNProvinceCS (34 mã) |
0..1 MS; với địa chỉ có country = "VN", thiếu mã tỉnh tạo cảnh báo vn-addr-province |
| Huyện/Quận | Address.district |
VNDistrictLegacyCS |
Chỉ dùng cho dữ liệu lịch sử trước 01/07/2025; cấp huyện không còn trong mô hình mới |
| Xã/Phường | Extension vn-ext-ward |
VNWardCS |
Cấp 2 chính thức |
| Số nhà, đường | Address.line |
— | Text tự do |
| Quốc gia | Address.country |
ISO 3166 | "VN" |
VNDistrictLegacyCS giữ 696 mã huyện cũ với property concept status = deprecated để hỗ trợ dữ liệu lịch sử; CodeSystem này ở trạng thái retired theo tiền lệ Province/KSK legacy và chỉ dùng để resolve, validate hoặc di trú dữ liệu cũ. Canonical cũ VNDistrictCS cũng ở trạng thái retired nhưng giữ đủ mã để resolve dữ liệu đã công bố.Để tra cứu tập trung các NamingSystem, xem thêm Danh mục định danh. Để bắc cầu với OID hoặc hệ thống cũ, xem Ánh xạ URI/OID.
| Identifier | NamingSystem | Ưu tiên | Ghi chú |
|---|---|---|---|
| Số CCCD | $VN-CCCD |
Cao nhất | 12 chữ số, trục định danh chính |
| Mã số BHXH | — | Cao | 10 chữ số, liên thông BHXH |
| Số thẻ/mã số BHYT | $VN-BHYT |
Cao | 10 chữ số hiện hành (trùng giá trị mã số BHXH) hoặc 15 ký tự lịch sử; CCCD 12 chữ số dùng $VN-CCCD, không thuộc namespace BHYT |
| GPHN | $VN-GPHN |
Trung bình | Định danh hành nghề hiện hành cho người hành nghề |
| CCHN | $VN-CCHN |
Lịch sử | Chỉ giữ để chuyển đổi và tra cứu dữ liệu đã lập theo khung cũ |
| Mã CSKCB | $VN-CSKCB |
Trung bình | Dùng cho cơ sở y tế |
| MRN | $VN-MRN |
Bệnh viện | Mã bệnh nhân nội bộ |
XML1_ID / mã phản hồi gateway BHYT |
$VN-BHYT-GATEWAY-RESPONSE-ID |
Lớp BHYT Submission | Dùng cho ClaimResponse.identifier, không thay thế MA_LK |
CCCD: CCCD là định danh cá nhân lõi cho công dân Việt Nam trong VN Core.
VNeID: VNeID là tài khoản định danh điện tử và kênh truy cập của ứng dụng người dân; chỉ nên dùng ở lớp ứng dụng người dân, xác thực hoặc tích hợp, không dùng song song với CCCD như một định danh người bệnh chính.
VN Core vẫn giữ identifier[CCCD] là lát cắt định danh chính. Tuy nhiên, khi chưa có giá trị CCCD thực tế, cần tách ba tình huống:
| Tình huống | Cách biểu diễn khuyến nghị |
|---|---|
| Ca cấp cứu / bất khả kháng / chưa xác định được danh tính | Giữ slice identifier[CCCD] với data-absent-reason và khai forceMajeureReason hợp lệ |
| Trẻ sơ sinh / trẻ nhỏ chưa có CCCD nhưng đã có giấy khai sinh | Giữ slice identifier[CCCD] với data-absent-reason; bổ sung identifier[GKS] |
| Người nước ngoài hoặc người bệnh dùng định danh thay thế hợp lệ | Giữ slice identifier[CCCD] với data-absent-reason; bổ sung identifier[HC] và citizenship phù hợp |
Không nên dùng forceMajeureReason để mô tả người bệnh có định danh thay thế hợp lệ như hộ chiếu hoặc giấy khai sinh.
Số CCCD 12 chữ số mã hóa thông tin:
Mã prefix BCA này là terminology hỗ trợ validation cho CCCD đã cấp và không thay thế cho VNProvinceCS dùng trong địa chỉ hành chính hiện hành.
Chi tiết kiểm tra hợp lệ: xem Hướng dẫn kiểm tra hợp lệ
MA_LK, MA_LUOT_KCB và mã phản hồi gateway BHYT, nên coi tìm kiếm là truy vấn nghiệp vụ chính xác theo kiểu token khi hệ thống công bố search tương ứng.Chi tiết xem Hành vi tìm kiếm.
Khi triển khai Organization và Location, VN Core tách riêng:
| Khái niệm | Tài nguyên | Ghi chú |
|---|---|---|
| Hạng pháp lý của cơ sở KCB | vn-ext-org-rank |
Chỉ cho cơ sở KCB theo TT 06/2024/TT-BYT |
| Hạng pháp lý của đơn vị y tế không phải cơ sở KCB | vn-ext-health-unit-rank |
Cho y tế dự phòng, TTYT, kiểm nghiệm, kiểm định |
| Cấp KCB hiện hành | vn-ext-facility-care-level |
3 cấp theo Luật KCB 2023 + NĐ 96/2023/NĐ-CP |
| Tuyến chuyên môn kỹ thuật lịch sử | vn-ext-legacy-technical-line |
Chỉ dùng cho dữ liệu cũ / chuyển đổi |
vn-ext-org-level chỉ biểu diễn cấp quản lý hành chính y tế hiện hành, không thay cho tuyến kỹ thuật cũ.
organizationType, organizationLevel, facilityCareLevel; chỉ điền organizationRank khi có căn cứ pháp lý rõ.organizationRankStatus = not-applicable nếu cần diễn đạt rõ.healthUnitRank, không dùng organizationRank.Location không mang hạng pháp lý; chỉ nên mang facilityCareLevel khi địa điểm được quản trị như một phân hệ chuyên môn riêng.Chi tiết: xem Quản trị Organization và Location.
VN Core IG sử dụng các mức binding theo FHIR:
| Binding | Ý nghĩa | Ví dụ trong VN Core |
|---|---|---|
| Required | Mã phải thuộc ValueSet | VNEthnicityVS (54 dân tộc) |
| Extensible | Nếu ValueSet có khái niệm phù hợp, phải dùng mã trong ValueSet; chỉ dùng mã ngoài khi không có khái niệm phù hợp | VNConditionCodeVS (ICD-10 VN) |
| Preferred | Khuyến khích dùng mã trong ValueSet; mã ngoài vẫn hợp lệ | — |
| Example | ValueSet chỉ dùng để minh họa | — |
| Loại | Mẫu URL | Ví dụ |
|---|---|---|
| Profile FHIR | http://fhir.hl7.org.vn/core/StructureDefinition/{id} |
.../vn-core-patient |
| Phần mở rộng (Extension) | http://fhir.hl7.org.vn/core/StructureDefinition/{id} |
.../vn-ext-ethnicity |
| CodeSystem | http://fhir.hl7.org.vn/core/CodeSystem/{id} |
.../vn-ethnicity-cs |
| ValueSet | http://fhir.hl7.org.vn/core/ValueSet/{id} |
.../vn-ethnicity-vs |
| NamingSystem | http://fhir.hl7.org.vn/core/NamingSystem/{id} |
.../vn-cccd-ns |
| Nếu cần | Nên đọc tiếp |
|---|---|
| Hiểu quy tắc tìm kiếm chuỗi có dấu tiếng Việt và chuẩn hóa Unicode | Tìm kiếm chuỗi và Unicode |
| Nắm hành vi tìm kiếm của FHIR server và cách so khớp định danh | Hành vi tìm kiếm |
| Tra cứu tập trung các NamingSystem và ánh xạ URI/OID | Danh mục định danh |
| Diễn giải Must Support và cẩm nang ánh xạ HIS → FHIR | Hướng dẫn Must Support |
| Quy trình phát hành, versioning và quản trị IG | Phát hành và quản trị |
This page defines the general reusable rules for VN Core. It covers Vietnamese names, address modeling, identifier precedence, Organization/Location separation, and binding basics that apply across multiple profiles. Historical district data uses VNDistrictLegacyCS; the former VNDistrictCS canonical is retired but remains fully resolvable. Detailed Must Support interpretation is documented on its own page.