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
Hướng dẫn tích hợp đầu–cuối cho một lượt khám ngoại trú: đăng ký → khám → cận lâm sàng → kê đơ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. Walkthrough lâm sàng kể chuyện ở Tình huống lâm sàng (Tình huống 1). Cùng bộ playbook: Nội trú · Cấp cứu · Dược.
Ca minh họa tổng hợp: Nguyễn Văn An (CCCD 001085012345, BHYT loại DN 80%) khám ngoại trú đúng tuyến tại BV Chợ Rẫy ngày 19/3/2026 vì sốt/ho/khó thở; chẩn đoán viêm phổi J18.9, xét nghiệm glucose, kê Amoxicillin. Tất cả Example Instance là dữ liệu tổng hợp, không phải hồ sơ người bệnh thật.
KCB ngoại trú có/không BHYT: khám, cận lâm sàng (XN/CĐHA), kê đơn, thủ thuật ngoại trú. Không bao gồm nhập viện (→ Nội trú) hay cấp cứu (→ Cấp cứu).
HIS/EMR ngoại trú (chủ luồng), LIS, RIS/PACS, khoa Dược, cổng giám định BHXH.
TT 13/2025/TT-BYT (bệnh án điện tử); QĐ 4210/QĐ-BYT (legacy MA_LYDO_VVIEN); QĐ 3176/QĐ-BYT (MA_DOI_TUONG_KCB, KET_QUA_DTRI, MA_LOAI_RV và khóa MA_LK); MA_LUOT_KCB là convention VN Core tương thích MA_LK khi trao đổi BHYT; NĐ 188/2025/NĐ-CP (BHYT, đúng tuyến); QĐ 697/QĐ-BYT (bảng kê chi phí); QĐ 4469/QĐ-BYT (ICD-10 VN); QĐ 1227/QĐ-BYT (cận lâm sàng).
| # | Resource | Profile | Ghi chú VN | |—|—|—|—| | P1 | Cơ sở + khoa | VNCoreOrganization + VNCoreOrganizationDepartment | mã cơ sở KCB; hạng/tuyến | | P2 | Phòng khám | VNCoreLocation | poli/phòng khám | | P3 | Bác sĩ | VNCorePractitioner | 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 | số thẻ; nơi ĐKKCB ban đầu (đúng tuyến) |
Khi máy chủ công bố hỗ trợ transaction, có thể gửi lượt khám bằng transaction Bundle (type=transaction) để áp dụng atomic. Ví dụ tổng hợp: Bundle-ExampleBundleOutpatientTransaction (8 entry PUT update-as-create). Hệ thống MAY dùng tương tác khác nếu CapabilityStatement và hợp đồng tích hợp cho phép. Hai pattern entry (PUT update-as-create, idempotent; POST + ifNoneExist) và ba loại Bundle được trình bày tại Playbook Nội trú §5.
Patient ─▶ Coverage ─▶ Encounter(AMB) ─▶ Condition(J18.9)
│
┌────────────────────┼─────────────────────┐
▼ ▼ ▼
ServiceRequest(XN) ▶ Specimen ▶ Observation MedicationRequest (CĐHA: ImagingStudy ▶ DiagReport)
▼
Encounter(finished + treatmentOutcome) ─▶ Claim(BHYT) ─▶ ClaimResponse/EOB
└───────────── gói trong 1 transaction Bundle ─────────────┘
| # | Bước | Profile | Element chính | Terminology | Example |
|—|—|—|—|—|—|
| 1 | Lượt khám | VNCoreEncounter | class=AMB, extension[insuranceVisitType] (mã 5 KCB ban đầu là mở rộng dự án trong danh mục legacy), identifier[maLuotKcb] (convention VN Core) | Legacy MA_LYDO_VVIEN: QĐ 4210/QĐ-BYT; trao đổi hiện hành dùng MA_DOI_TUONG_KCB và MA_LK | Outpatient |
| 2 | Chẩn đoán | VNCoreConditionDiagnosis | code ICD-10 J18.9 (+ SNOMED), category=encounter-diagnosis | QĐ 4469/QĐ-BYT | Pneumonia |
| 3 | Chỉ định XN | VNCoreServiceRequest | intent=order, code LOINC | QĐ 1227/QĐ-BYT | LabGlucose |
| 4 | Mẫu bệnh phẩm | VNCoreSpecimen | type, collection, request | — | SerumChemistry |
| 5 | Kết quả XN | VNCoreObservationLab | code LOINC, valueQuantity, interpretation, referenceRange | QĐ 1227/QĐ-BYT | LabGlucose |
| 6 | CĐHA (nhánh) | VNCoreServiceRequest → VNCoreImagingStudy → VNCoreDiagnosticReportImaging | StudyInstanceUID, resultsInterpreter | — | ChestCT |
| 7 | Kê đơn | VNCoreMedicationRequest | medicationCodeableConcept (ATC), dosageInstruction | TT 26/2025/TT-BYT | Amoxicillin |
| 8 | Thủ thuật (nếu có) | VNCoreProcedure | code DVKT | TT 23/2024/TT-BYT; QĐ 387/QĐ-BYT | — |
VNCoreEncounter.status = finished + extension[treatmentOutcome] (KET_QUA_DTRI) + Encounter.diagnosis (chẩn đoán chính). Ngoại trú thường không có hospitalization.
VNCoreClaim (type=institutional/professional, item.category từ vn-cost-category-vs — khám/XN/CĐHA/thuốc, QĐ 697/QĐ-BYT; ngoại trú thường 2–4 item, đúng 1 thẻ focal=true) → VNCoreClaimResponse → VNCoreExplanationOfBenefit → gói gửi VNCoreBHYTSubmissionBundle (ExampleBHYTSubmissionOutpatient). Lớp ánh xạ hiện hành bám chuẩn dữ liệu đầu ra KCB theo QĐ 3176/QĐ-BYT; QĐ 4210/QĐ-BYT chỉ dùng để giải nghĩa hoặc chuyển đổi dữ liệu lịch sử.
ICD-10 VN (QĐ 4469/QĐ-BYT), LOINC/cận lâm sàng (QĐ 1227/QĐ-BYT), DVKT (TT 23/2024/TT-BYT), MA_LYDO_VVIEN legacy (QĐ 4210/QĐ-BYT), KET_QUA_DTRI (QĐ 3176/QĐ-BYT), nhóm chi phí (QĐ 697/QĐ-BYT). Xem Hướng dẫn terminology.
subject + serviceProvider + class=AMB (VN-RULE-ENC-001).Condition.code có một coding ICD-10 VN bắt buộc và có thể có thêm coding tương đương như SNOMED CT, không gộp nhiều chẩn đoán khác nghĩa vào một resource (VN-RULE-CON-001, VN-RULE-TERM-001).valueQuantity.+07:00; Claim đúng 1 thẻ BHYT focal=true (VN-RULE-CLM-001).Mã lỗi tra tại Registry quy tắc. Ví dụ OperationOutcome — Encounter thiếu serviceProvider:
{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"required",
"details":{"coding":[{"system":"http://fhir.hl7.org.vn/core/CodeSystem/vn-validation-rule-cs","code":"VN-RULE-ENC-001"}],
"text":"Encounter.serviceProvider là bắt buộc"},"expression":["Bundle.entry[2].resource.serviceProvider"]}]}
| GAP | Ảnh hưởng | Priority |
|—|—|—|
| CarePlan | ✅ Đã bổ sung VNCoreCarePlan (kế hoạch chăm sóc) | resolved |
| MedicationStatement (tiền sử dùng thuốc) | ✅ Đã bổ sung VNCoreMedicationStatement | resolved |
| ClinicalImpression, Goal | ✅ Đã bổ sung VNCoreClinicalImpression + VNCoreGoal | resolved |
Luồng lõi ngoại trú chạy đủ với profile sẵn có.
| Nếu cần | Đọc tiếp | |—|—| | Walkthrough kể chuyện | Tình huống lâm sàng | | Cơ chế transaction Bundle chi tiết | Playbook Nội trú | | Quy ước OperationOutcome | OperationOutcome & Registry | | Liên thông BHYT | BHYT Submission |
Outpatient integration playbook for a coherent synthetic pneumonia (J18.9) scenario. It illustrates an atomic transaction Bundle (ExampleBundleOutpatientTransaction) when the applicable server CapabilityStatement advertises transaction support. The page lists prerequisites, the resource sequence, published synthetic Example Instances, terminology with Vietnamese legal basis, and a validation checklist referencing the VN-RULE registry.