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.9.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.9.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Playbook Nội trú

Playbook Nội trú — KCB nội trú (Inpatient)

Hướng dẫn tích hợp đầu–cuối cho một đợt điều trị nội trú: từ nhập viện → điều trị/phẫu thuật → ra viện → thanh toán BHYT. Trang minh họa phương án gửi bằng Bundle.type = transaction khi CapabilityStatement áp dụng cho máy chủ công bố hỗ trợ transaction.

Trang này là integration spec cho vendor HIS/EMR. Để xem walkthrough lâm sàng kể chuyện, đọc Tình huống lâm sàng. Để hiểu bối cảnh thiết kế (đối sánh nền tảng SATUSEHAT Indonesia), xem tài liệu phân tích nội bộ của dự án.

Ca minh họa tổng hợp xuyên suốt: Nguyễn Văn An (nam, CCCD 001085012345, BHYT loại DN 80%) nhập viện BV Chợ Rẫy ngày 10/3/2026 vì viêm ruột thừa cấp (K35.8) có giấy chuyển tuyến hợp lệ (đúng tuyến), phẫu thuật cắt ruột thừa nội soi, nằm viện 7 ngày, ra viện ổn định ngày 17/3/2026. Mọi resource trong trang là Example Instance tổng hợp, không phải hồ sơ người bệnh thật.


1. Phạm vi & khi nào dùng

Bao gồm Không bao gồm
Nhập viện (tự đến / từ cấp cứu / chuyển tuyến), điều trị nội trú, chuyển khoa, phẫu thuật/thủ thuật, y lệnh & cấp phát thuốc nội trú, theo dõi, ra viện, thanh toán BHYT nội trú (12 nhóm chi phí + ngày giường) KCB ngoại trú (→ Playbook Ngoại trú), tiếp nhận cấp cứu ban đầu (→ Playbook Cấp cứu), cấp phát thuốc nhà thuốc bán lẻ (→ Playbook Dược)

Áp dụng cho mọi CSKCB có giường bệnh, hướng tới yêu cầu bệnh án điện tử theo TT 13/2025/TT-BYT (cơ sở KCB khác hoàn thành chậm nhất 31/12/2026).

2. Vai trò triển khai và hệ thống

Actor / Hệ thống Vai trò trong luồng
HIS/EMR nội trú Chủ luồng; có thể tạo transaction Bundle khi máy chủ công bố hỗ trợ
Khoa lâm sàng Ghi diễn biến, y lệnh, chuyển khoa
Khoa Dược (nội trú) Cấp phát thuốc theo y lệnh
LIS / RIS-PACS Trả kết quả XN / CĐHA
Cổng giám định BHXH Nhận dữ liệu đầu ra KCB theo QĐ 3176/QĐ-BYT; QĐ 4210/QĐ-BYT chỉ còn dùng cho dữ liệu lịch sử/chuyển đổi
FHIR server quốc gia/vùng Tiếp nhận theo các tương tác được công bố trong CapabilityStatement; áp dụng $validate khi operation được hỗ trợ

3. Căn cứ pháp lý

  • TT 13/2025/TT-BYT — bệnh án điện tử (nền tảng ca sử dụng).
  • QĐ 4210/QĐ-BYT (2017) — nguồn legacy cho MA_LYDO_VVIEN (4 mã). Mã 5 của VNInsuranceVisitTypeCS là mở rộng dự án chờ nguồn.
  • QĐ 3176/QĐ-BYT (29/10/2024) — chuẩn dữ liệu đầu ra KCB hiện hành: MA_DOI_TUONG_KCB, KET_QUA_DTRI, MA_LOAI_RV và khóa MA_LK. MA_LUOT_KCB là convention cộng đồng của VN Core, chỉ giữ tương thích với MA_LK khi trao đổi BHYT.
  • NĐ 188/2025/NĐ-CP (hiệu lực 15/8/2025) — quy tắc thanh toán & mức hưởng BHYT; cấp cứu/đúng tuyến.
  • QĐ 697/QĐ-BYT (19/3/2026, triển khai 01/7/2026) — mẫu bảng kê chi phí KCB: 12 nhóm danh mục chi phí, gồm ngày giường.
  • NĐ 164/2025/NĐ-CP (29/6/2025) — giao dịch điện tử trong BHXH (cơ sở pháp lý cho nộp dữ liệu điện tử).
  • QĐ 4469/QĐ-BYT — ICD-10 VN; TT 23/2024/TT-BYT + QĐ 387/QĐ-BYT — DVKT/ICD-9-CM.

4. Điều kiện tiên quyết

Trước khi nộp đợt nội trú, các resource sau PHẢI tồn tại/được nộp kèm:

# Resource Profile Ghi chú VN
P1 Cơ sở + khoa/phòng VNCoreOrganization + VNCoreOrganizationDepartment mã cơ sở KCB; hạng/tuyến
P2 Địa điểm/giường VNCoreLocation cây khoa→phòng→giường để ghi chuyển khoa
P3 Bác sĩ điều trị VNCorePractitioner + VNCorePractitionerRole GPHN hiện hành; CCHN chỉ dùng cho dữ liệu lịch sử
P4 Bệnh nhân VNCorePatient CCCD là định danh cốt lõi; VNeID chỉ dùng cho xác thực/tích hợp
P5 Thẻ BHYT VNCoreCoverage mã số BHYT hiện hành 10 số (trùng mã số BHXH) hoặc số thẻ legacy 15 ký tự; CCCD chỉ dùng làm khóa tra cứu/xuất trình, không thuộc sid/bhyt; nơi ĐKKCB ban đầu; giấy chuyển tuyến (đúng tuyến)

5. Phương án gửi dữ liệu bằng Transaction Bundle

Khi máy chủ công bố hỗ trợ tương tác transaction, có thể gửi một lượt khám/đợt điều trị bằng Bundle.type = transaction. Toàn bộ resource trong transaction được áp dụng atomic: hoặc tất cả thành công, hoặc toàn bộ thay đổi được hoàn tác. Trước khi áp dụng, bên triển khai phải xác nhận transaction trong CapabilityStatement và hợp đồng tích hợp; hệ thống MAY dùng các tương tác khác đã được công bố.

Ví dụ tổng hợp: Bundle-ExampleBundleInpatientTransaction — minh họa gửi atomic toàn bộ đợt viêm ruột thừa.

5.1 Hai pattern entry khi dùng transaction

Pattern request.method fullUrl Khi nào dùng
PUT update-as-create PUT + request.url = "ResourceType/{id}" canonical URL theo id HIS gán HIS giữ id ổn định; idempotent khi nộp lại (an toàn cho retry). Mặc định khuyến nghị.
POST + conditional create POST + request.url = "ResourceType" + request.ifNoneExist = "identifier=..." urn:uuid:... Để server tự sinh id; chống trùng bằng business identifier (vd Patient theo CCCD)

Trong ví dụ tổng hợp, dữ liệu chủ (Patient/Coverage/Practitioner/Organization) và resource lâm sàng đều dùng PUT update-as-create — đơn giản, idempotent, dễ đối soát BHXH. Tham chiếu nội bộ dùng dạng tương đối ResourceType/{id} (hợp lệ trong transaction).

5.2 Quy tắc đóng gói

  • Atomicity: nếu một resource sai (vd Encounter thiếu serviceProvider), toàn bộ Bundle bị từ chối → tránh dữ liệu nửa vời.
  • Thứ tự không quan trọng trong transaction (server tự giải tham chiếu), nhưng nên xếp dữ liệu chủ trước cho dễ đọc.
  • Bundle.timestamp bắt buộc (dấu vết kiểm toán, NĐ 137/2024/NĐ-CP).
  • Idempotency: nộp lại cùng Bundle (cùng id) bằng PUT không tạo bản trùng.

5.3 Ba loại Bundle trong vòng đời một đợt nội trú

Bundle.type Mục đích Ví dụ
transaction Gửi/ghi đợt điều trị lên FHIR server khi CapabilityStatement công bố hỗ trợ ExampleBundleInpatientTransaction
document Bệnh án điện tử/Tóm tắt xuất viện bất biến (ký số) — Composition là entry[0] ExampleBundleInpatientDischarge
collection Hồ sơ thanh toán BHYT gửi cổng giám định ExampleBHYTSubmissionInpatient

6. Sơ đồ luồng đợt nội trú

Patient ─▶ Coverage(BHYT đúng tuyến) ─▶ Encounter(IMP, in-progress)
                                            │  hospitalization.admitSource = chuyển tuyến
        ┌────────────────────────────────────┼─────────────────────────────────┐
        ▼                                    ▼                                  ▼
  Condition(vào viện: K35.8)        location[period] (chuyển khoa)        Observation(theo dõi)
        ▼
  ServiceRequest ▶ Specimen ▶ DiagnosticReport (giải phẫu bệnh)
        ▼
  Procedure(cắt ruột thừa nội soi)  +  MedicationRequest(y lệnh) ▶ MedicationDispense(cấp phát)
        ▼
  Encounter(finished + treatmentOutcome=Khỏi + dischargeDisposition=Ra viện)
        ▼
  Composition(tóm tắt xuất viện, LOINC 18842-5)
        ▼
  Claim(12 nhóm + 7 ngày giường) ─▶ ClaimResponse ─▶ ExplanationOfBenefit
        │
        └────────────────── tất cả gói trong 1 transaction Bundle ──────────────────┘

7. Các bước gửi dữ liệu

# Bước Profile Element chính Terminology / căn cứ Example Instance
1 Nhập viện VNCoreEncounter class=IMP, status, period.start, hospitalization.admitSource, extension[insuranceVisitType]=Đúng tuyến (legacy MA_LYDO_VVIEN=1), extension[referralMode], identifier[maLuotKcb] là convention VN Core QĐ 4210/QĐ-BYT cho mã legacy; identifier cộng đồng tương thích MA_LK của QĐ 3176/QĐ-BYT khi trao đổi BHYT ExampleEncounterInpatient
2 Chẩn đoán vào viện VNCoreConditionDiagnosis code ICD-10 K35.8 (+ SNOMED 85189001), category=encounter-diagnosis, diagnosis.use=AD QĐ 4469/QĐ-BYT ExampleConditionAppendicitis
3 Chuyển khoa (nếu có) VNCoreEncounter.location[] location, period mỗi khoa, physicalType (trong Encounter)
4 Phẫu thuật/thủ thuật VNCoreProcedure code SNOMED 6025007 + ICD-9-CM 47.01, performedDateTime, bodySite, outcome TT 23/2024/TT-BYT; QĐ 387/QĐ-BYT ExampleProcedureAppendectomy
5 Bệnh phẩm VNCoreSpecimen type, collection, request SNOMED CT VN body structure (QĐ 2427/QĐ-BYT) ExampleSpecimenAppendixTissue
6 Kết quả GPB VNCoreDiagnosticReportPathology specimen (1..*), conclusion, conclusionCode QĐ 2493/QĐ-BYT (morphology) ExampleDiagnosticReportPathology
7 Y lệnh thuốc VNCoreMedicationRequest intent=order, medicationCodeableConcept (ATC J01DD04), dosageInstruction, category=inpatient TT 26/2025/TT-BYT; Dược thư QG (trong document Bundle)
8 Cấp phát thuốc VNCoreMedicationDispense authorizingPrescription→MedicationRequest, whenHandedOver (NGAY_CAP), quantity, performer.actor QĐ 3176/QĐ-BYT ExampleMedicationDispenseInpatientAntibiotic
9 Theo dõi/sinh hiệu VNCoreObservationVitalSigns (+ HA/mạch/SpO2…) chuỗi theo thời gian; sinh hiệu trước ra viện LOINC
10 Sử dụng thuốc thực tế VNCoreMedicationAdministration effective[x] (NGAY_TH_YL), request→MedicationRequest (khép chuỗi) QĐ 3176/QĐ-BYT; TT 13/2025/TT-BYT ExampleMedicationAdministrationInpatient

Mỗi Condition biểu diễn một vấn đề/chẩn đoán lâm sàng. Condition.code có thể chứa nhiều Coding tương đương cho cùng khái niệm, chẳng hạn một coding ICD-10 VN bắt buộc và một coding SNOMED CT; không gộp nhiều chẩn đoán khác nghĩa vào một resource. Mọi datetime có offset +07:00.

8. Đóng đợt nội trú

VNCoreEncounter: status = finished + period.end + extension[treatmentOutcome] (KET_QUA_DTRI — ví dụ 1 = Khỏi) + hospitalization.dischargeDisposition (MA_LOAI_RV — ví dụ 1 = Ra viện). Chẩn đoán ra viện (Condition category/diagnosis.use) phải có mặt khi đóng.

9. Tài liệu tổng hợp — Tóm tắt xuất viện

Cuối đợt, lập VNCoreComposition tóm tắt xuất viện (LOINC 18842-5 — Discharge summary) với các section chuẩn theo TT 13/2025/TT-BYT: lý do nhập viện, chẩn đoán, thủ thuật, thuốc, khám trước ra viện, tóm tắt ra viện. Đóng gói thành document Bundle (Composition là entry[0]) để ký số và lưu trữ bất biến.

Ví dụ Composition: ExampleCompositionDischargeSummary. Ví dụ document Bundle hoàn chỉnh (Composition là entry[0]): ExampleBundleInpatientDischarge.

Có thể đồng thời cập nhật Sổ Sức khỏe điện tử (VNeID) dạng VNCoreCompositionHealthRecordSummary (IPS, LOINC 60591-5) — bản tóm tắt longitudinal.

10. Tích hợp BHYT/Claim

Bước Profile Nội dung
Yêu cầu thanh toán VNCoreClaim type=institutional, subType=1.1 (đúng tuyến), item.category từ 12 nhóm chi phí QĐ 697/QĐ-BYT gồm ngày giường (2.2: 7 ngày × 360.000), khám, phẫu thuật (ICD-9-CM 47.01), thuốc (Ceftriaxone), thiết bị y tế. Đúng 1 thẻ BHYT focal=true. Ví dụ: ExampleClaimBHYT (tổng ~14,82 triệu VND, gồm 1,77 triệu thuốc ngoài danh mục BHYT tự trả)
Phản hồi VNCoreClaimResponse adjudication theo từng item. ExampleClaimResponseBHYT
Giải trình quyền lợi VNCoreExplanationOfBenefit mức hưởng/đồng chi trả. ExampleExplanationOfBenefitBHYT
Quyết toán VNCorePaymentReconciliation đối soát kỳ thanh toán
Gói gửi BHXH VNCoreBHYTSubmissionBundle Cầu nối dữ liệu đầu ra KCB theo QĐ 3176/QĐ-BYT; QĐ 4210/QĐ-BYT chỉ dùng cho dữ liệu lịch sử/chuyển đổi. ExampleBHYTSubmissionInpatient

Kiểm tra ngày giường: số lượng item[category=2.2].quantity phải được tính theo quy tắc nghiệp vụ/giám định hiện hành và đối chiếu với Encounter.period. Không suy ra máy móc chỉ bằng phép trừ hai timestamp khi có ngày vào/ra không trọn ngày, chuyển khoa hoặc ngoại lệ thanh toán. Trong ca minh họa, kết quả nghiệp vụ là 7 ngày (10/3 → 17/3).

11. Phụ lục terminology (pointer)

FHIR path ValueSet / CodeSystem Căn cứ
Condition.code ICD-10 VN QĐ 4469/QĐ-BYT; QĐ 98/QĐ-BYT
Procedure.code DVKT / ICD-9-CM VN TT 23/2024/TT-BYT; QĐ 387/QĐ-BYT
Encounter.extension[insuranceVisitType] MA_LYDO_VVIEN (legacy; mã 1–4) QĐ 4210/QĐ-BYT; mã 5 là mở rộng dự án chờ nguồn. Hiện hành dùng MA_DOI_TUONG_KCB theo QĐ 3176/QĐ-BYT/QĐ 3276/QĐ-BYT
Encounter.extension[treatmentOutcome] KET_QUA_DTRI QĐ 3176/QĐ-BYT
Claim.item.category Nhóm chi phí (12) QĐ 697/QĐ-BYT
Specimen body site SNOMED CT VN QĐ 2427/QĐ-BYT

Xem thêm Hướng dẫn terminology.

12. Danh sách kiểm tra hợp lệ + lỗi thường gặp

Checklist khi chọn phương án transaction Bundle:

  • Bundle.type = transactionmỗi entry có request.method + request.url (FHIR bdl-3).
  • Encounter: class=IMP, có subject + serviceProvider + period.start + hospitalization.admitSource.
  • Mỗi Condition biểu diễn một chẩn đoán; code có coding ICD-10 VN bắt buộc và có thể có thêm coding tương đương, không gộp nhiều chẩn đoán khác nghĩa.
  • Mỗi MedicationDispense có authorizingPrescription (không cấp phát "mồ côi").
  • Claim có dòng ngày giường được tính theo quy tắc nghiệp vụ/giám định hiện hành và đối chiếu với đợt nằm viện; đúng 1 thẻ BHYT focal=true.
  • Mọi datetime có offset +07:00.
  • Tham chiếu nội bộ giải được trong Bundle (relative ResourceType/{id} hoặc urn:uuid).

Ví dụ OperationOutcome — Encounter thiếu serviceProvider (cả Bundle bị từ chối):

{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"required",
"details":{"text":"Encounter.serviceProvider là bắt buộc (VN-RULE-ENC-001)"},
"expression":["Bundle.entry[4].resource.serviceProvider"]}]}

Ví dụ — số ngày giường không khớp:

{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"business-rule",
"details":{"text":"Số ngày giường (item 2.2) không phù hợp quy tắc nghiệp vụ/giám định hoặc không đối chiếu được với đợt nằm viện (VN-RULE-CLM-014)"},
"expression":["Bundle.entry[11].resource.item.where(category.coding.code='2.2')"]}]}

Lỗi thường gặp: | Lỗi | Nguyên nhân | Xử lý | |—|—|—| | Cả Bundle bị từ chối dù chỉ 1 resource sai | Bản chất atomic của transaction | Sửa resource lỗi, nộp lại toàn bộ | | Tạo bản trùng khi retry | Dùng POST không có ifNoneExist | Chuyển sang PUT update-as-create hoặc thêm ifNoneExist | | Tham chiếu không giải được | Trộn urn:uuid và id thật không nhất quán | Thống nhất 1 kiểu reference trong Bundle |

13. Khoảng trống profile (GAP) & maturity

GAP Ảnh hưởng Priority
MedicationAdministration ✅ Đã bổ sung VNCoreMedicationAdministration (khép chuỗi y lệnh → cấp phát → sử dụng) resolved
EpisodeOfCare (gom đa Encounter/bệnh mạn) ✅ Đã bổ sung VNCoreEpisodeOfCare resolved
Observation chuyển khoa/diễn biến ✅ Chuyển khoa đã mô hình bằng Encounter.location[].period; diễn biến/biện luận dùng VNCoreClinicalImpression + Observation theo thời gian resolved (guidance)

Ca sử dụng nội trú thuộc phạm vi gia cố cho thí điểm — xem Checklist sẵn sàng thí điểm.

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

Nếu cần Đọc tiếp
Walkthrough lâm sàng kể chuyện Tình huống lâm sàng
Cơ chế nộp BHYT chi tiết BHYT Submission
Kiểm tra hợp lệ Hướng dẫn kiểm tra hợp lệ
Danh mục hồ sơ Profiles

English Summary

This page is the inpatient integration playbook for VN Core. It specifies the end-to-end FHIR workflow for one inpatient stay (admission → treatment/surgery → discharge → BHYT claim). A coherent synthetic example (ExampleBundleInpatientTransaction) demonstrates the PUT update-as-create pattern in an atomic transaction Bundle when the applicable server CapabilityStatement advertises transaction support, alongside a discharge-summary document Bundle and a BHYT submission collection Bundle. The page lists prerequisites, the resource sequence, terminology bindings with Vietnamese legal basis, and a validation checklist with OperationOutcome samples.