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
| URL chính thức: http://fhir.hl7.org.vn/core/StructureMap/vn-sm-bhyt-xml1-summary | Phiên bản: 0.10.0 | ||||
| Computable Name: BHYTXML1SummaryLMStructureMap | |||||
| Định danh khác: OID:2.25.161089673617632664299011809196868855799.43.1 | |||||
Generated StructureMap scaffold for Bảng 1 tổng hợp KCB BHYT — Logical Model. Source semantics come from the logical model mapping annotations in BHYTXML1SummaryLM.fsh and remain aligned with the Python BHYT round-trip export adapter.
Language: vi
map "http://fhir.hl7.org.vn/core/StructureMap/vn-sm-bhyt-xml1-summary" = "BHYTXML1SummaryLMStructureMap" // Generated StructureMap scaffold for Bảng 1 tổng hợp KCB BHYT — Logical Model. Source semantics come from the logical model mapping annotations in `BHYTXML1SummaryLM.fsh` and remain aligned with the Python BHYT round-trip export adapter. // FHIR-native source bundle profile used by the repository round-trip adapter. uses "http://fhir.hl7.org.vn/core/StructureDefinition/vn-core-bhyt-submission-bundle" alias BHYTSubmissionBundle as source // Bảng 1 tổng hợp KCB BHYT — Logical Model uses "http://fhir.hl7.org.vn/core/StructureDefinition/bhytXml1SummaryLm" alias BHYTXML1SummaryLM as target // Full QD 3176 XML1 field catalog. StructureMap/export rules must preserve source field names and financial semantics. Generated from logical-model `^mapping` annotations. Fields still missing a field-level `^mapping.map` entry remain outside this StructureMap and are tracked in `wiki/mappings/bhyt-output-data/machine/structuremap-coverage.json`. group MapBHYTXML1SummaryLM(source sourceBundle : BHYTSubmissionBundle, target targetRow : BHYTXML1SummaryLM) { // Target field: MA_LK - Mã liên kết hồ sơ FHIR path: VNCoreClaim.identifier[MALK].value sourceBundle.entry 0..* as maLkSource -> targetRow.maLk "maLk"; // Target field: STT - Số thứ tự FHIR path: Derived export row order sourceBundle.entry 0..* as sttSource -> targetRow.stt "stt"; // Target field: MA_BN - Mã người bệnh tại cơ sở FHIR path: VNCorePatient.identifier[MRN].value sourceBundle.entry 0..* as maBnSource -> targetRow.maBn "maBn"; // Target field: HO_TEN - Họ tên người bệnh FHIR path: VNCorePatient.name.text sourceBundle.entry 0..* as hoTenSource -> targetRow.hoTen "hoTen"; // Target field: SO_CCCD - Số CCCD/số định danh cá nhân/hộ chiếu/giấy khai sinh của người bệnh FHIR path: VNCorePatient.identifier[CCCD].value | VNCorePatient.identifier[HC].value | VNCorePatient.identifier[GKS].value Mapping note: Ghi số CCCD/số định danh cá nhân trên thẻ căn cước hoặc giấy khai sinh; người nước ngoài ghi số hộ chiếu (identifier[HC]); trẻ sơ sinh dùng số trên giấy khai sinh (identifier[GKS]); để trống trong trường hợp bất khả kháng (trẻ sơ sinh, người mất ý thức/tâm thần không lấy được số định danh). Đổi kiểu chuỗi và kích thước n theo QĐ 4750/QĐ-BYT. sourceBundle.entry 0..* as soCccdSource -> targetRow.soCccd "soCccd"; // Target field: NGAY_SINH - Ngày sinh FHIR path: VNCorePatient.birthDate sourceBundle.entry 0..* as ngaySinhSource -> targetRow.ngaySinh "ngaySinh"; // Target field: GIOI_TINH - Giới tính FHIR path: VNCorePatient.gender Mapping note: Mã nguồn là 1/2/3 (nam/nữ/chưa xác định) theo QĐ 130/QĐ-BYT, KHÔNG phải mã của AdministrativeGender. Phải chuyển qua ConceptMap/vn-cm-gender-to-administrative-gender trước khi ghi vào Patient.gender. sourceBundle.entry 0..* as gioiTinhSource -> targetRow.gioiTinh "gioiTinh"; // Target field: NHOM_MAU - Nhóm máu FHIR path: future blood-group Observation (LOINC 883-9 ABO group; 10331-7 Rh) Mapping note: Nhóm máu của người bệnh, tối đa 5 ký tự, chỉ ghi khi có thông tin (bổ sung theo QĐ 4750/QĐ-BYT). VN Core chưa có profile Observation nhóm máu chuyên biệt nên đánh dấu future. sourceBundle.entry 0..* as nhomMauSource -> targetRow.nhomMau "nhomMau"; // Target field: MA_QUOCTICH - Mã quốc tịch FHIR path: VNCorePatient.extension[citizenship].valueCodeableConcept.coding.code Mapping note: Mã nguồn là mã quốc tịch 3 chữ số do Bộ Công an ban hành, KHÔNG phải ISO 3166. Phải chuyển sang hệ mã mà extension[citizenship] bind, hoặc ghi kèm đúng system của mã nguồn. sourceBundle.entry 0..* as maQuocTichSource -> targetRow.maQuocTich "maQuocTich"; // Target field: MA_DANTOC - Mã dân tộc FHIR path: VNCorePatient.extension[ethnicity].valueCodeableConcept.coding.code sourceBundle.entry 0..* as maDanTocSource -> targetRow.maDanToc "maDanToc"; // Target field: MA_NGHE_NGHIEP - Mã nghề nghiệp FHIR path: VNCorePatient.extension[occupation].valueCodeableConcept.coding.code sourceBundle.entry 0..* as maNgheNghiepSource -> targetRow.maNgheNghiep "maNgheNghiep"; // Target field: DIA_CHI - Địa chỉ FHIR path: VNCorePatient.address.text sourceBundle.entry 0..* as diaChiSource -> targetRow.diaChi "diaChi"; // Target field: MATINH_CU_TRU - Mã tỉnh cư trú FHIR path: VNCorePatient.address.extension[province].valueCoding.code Mapping note: Giữ mã tỉnh nguồn và ngày hồ sơ. Sau khi xác định hệ mã nhà nước, dùng vn-province-cs; binding history hỗ trợ mã đã thu nhận. Không tự đổi mã lịch sử sang tỉnh hiện hành. Tên/hiệu lực theo ngày cần giai đoạn đã xác minh; thiếu căn cứ giữ địa chỉ text và báo không đủ căn cứ. sourceBundle.entry 0..* as maTinhCuTruSource -> targetRow.maTinhCuTru "maTinhCuTru"; // Target field: MAHUYEN_CU_TRU - Mã huyện cư trú legacy FHIR path: VNCorePatient.address.district Mapping note: Address.district là tên huyện dạng string. Nếu nguồn dùng mã TMS hoặc mã ghép tỉnh+huyện năm chữ số, chỉ chuyển qua registry có scheme và edition tường minh sang mã nhà nước ba chữ số. Tra tên trong vn-district-cs theo ngày hồ sơ khi có bằng chứng; thiếu căn cứ giữ text nguồn, không lấy display hiện hành làm tên lịch sử. Việc đổi cách biểu diễn mã không chứng minh hiệu lực hoặc địa giới. sourceBundle.entry 0..* as maHuyenCuTruSource -> targetRow.maHuyenCuTru "maHuyenCuTru"; // Target field: MAXA_CU_TRU - Mã xã cư trú FHIR path: VNCorePatient.address.extension[ward].valueCoding.code Mapping note: Giữ mã xã nguồn gồm năm chữ số và ngày hồ sơ; dùng vn-ward-cs sau khi xác định đúng hệ mã. Binding history không buộc đổi mã xã cũ sang xã mới. Tra tên/tỉnh quản lý theo giai đoạn có bằng chứng; thiếu căn cứ giữ text nguồn, không tự suy từ tên hoặc mã hiện hành. sourceBundle.entry 0..* as maXaCuTruSource -> targetRow.maXaCuTru "maXaCuTru"; // Target field: DIEN_THOAI - Số điện thoại FHIR path: VNCorePatient.telecom.where(system='phone').value sourceBundle.entry 0..* as dienThoaiSource -> targetRow.dienThoai "dienThoai"; // Target field: MA_THE_BHYT - Mã thẻ BHYT FHIR path: VNCoreCoverage.identifier[BHYT].value | VNCorePatient.identifier[BHYT].value Mapping note: OHP/QD3176 export validator permits up to 2 BHYT card values; map repeated cards to focal/supplemental Coverage entries. sourceBundle.entry 0..* as maTheBhytSource -> targetRow.maTheBhyt "maTheBhyt"; // Target field: MA_DKBD - Mã nơi đăng ký KCB ban đầu FHIR path: VNCoreCoverage.extension[primaryCareFacility].valueReference.identifier.value Mapping note: OHP/QD3176 export validator permits up to 2 values aligned with multiple BHYT cards; this remains the registered primary care facility, not MA_CSKCB. sourceBundle.entry 0..* as maDkbdSource -> targetRow.maDkbd "maDkbd"; // Target field: GT_THE_TU - Giá trị thẻ từ ngày FHIR path: VNCoreCoverage.period.start Mapping note: OHP/QD3176 export validator permits up to 2 values aligned with multiple BHYT cards. sourceBundle.entry 0..* as gtTheTuSource -> targetRow.gtTheTu "gtTheTu"; // Target field: GT_THE_DEN - Giá trị thẻ đến ngày FHIR path: VNCoreCoverage.period.end Mapping note: OHP/QD3176 export validator permits up to 2 values aligned with multiple BHYT cards. sourceBundle.entry 0..* as gtTheDenSource -> targetRow.gtTheDen "gtTheDen"; // Target field: NGAY_MIEN_CCT - Ngày miễn cùng chi trả FHIR path: VNCoreCoverage | future copay-exemption-start-date extension Mapping note: Thời điểm người bệnh đủ điều kiện hưởng chế độ miễn cùng chi trả: 8 ký tự yyyymmdd nếu đã cấp giấy miễn cùng chi trả, 12 ký tự yyyymmddHHMM nếu chưa cấp giấy; để trống nếu không đủ cơ sở xác định. Liên quan trần cùng chi trả luỹ kế theo NĐ 188/2025/NĐ-CP; VN Core chưa có extension ngày miễn cùng chi trả trên Coverage. sourceBundle.entry 0..* as ngayMienCctSource -> targetRow.ngayMienCct "ngayMienCct"; // Target field: LY_DO_VV - Lý do vào viện FHIR path: VNCoreEncounter.reasonCode | VNCoreEncounter.reasonReference.resolve().code sourceBundle.entry 0..* as lyDoVvSource -> targetRow.lyDoVv "lyDoVv"; // Target field: LY_DO_VNT - Lý do vào nội trú FHIR path: VNCoreEncounter.hospitalization.admitSource | VNCoreEncounter.reasonCode Mapping note: Conditionally required for selected inpatient/day-treatment MA_LOAI_KCB values. sourceBundle.entry 0..* as lyDoVntSource -> targetRow.lyDoVnt "lyDoVnt"; // Target field: MA_LY_DO_VNT - Mã lý do vào nội trú FHIR path: VNCoreEncounter.hospitalization.admitSource.coding.code sourceBundle.entry 0..* as maLyDoVntSource -> targetRow.maLyDoVnt "maLyDoVnt"; // Target field: CHAN_DOAN_VAO - Chẩn đoán vào viện FHIR path: VNCoreEncounter.reasonCode | VNCoreComposition.section[chiefComplaint].text sourceBundle.entry 0..* as chanDoanVaoSource -> targetRow.chanDoanVao "chanDoanVao"; // Target field: CHAN_DOAN_RV - Chẩn đoán ra viện FHIR path: VNCoreCondition.code.text | VNCoreComposition.section[diagnosis].text sourceBundle.entry 0..* as chanDoanRvSource -> targetRow.chanDoanRv "chanDoanRv"; // Target field: MA_BENH_CHINH - Mã bệnh chính FHIR path: VNCoreClaim.diagnosis.where(type='principal').diagnosisCodeableConcept | VNCoreCondition.code Mapping note: [MULTI-INSTANCE] Bệnh chính và bệnh kèm theo là HAI Condition khác nhau. Bệnh chính và bệnh kèm theo là HAI Condition riêng, phân biệt bằng Encounter.diagnosis.rank (rank=1 cho bệnh chính); không dồn vào một Condition.code. sourceBundle.entry 0..* as maBenhChinhSource -> targetRow.maBenhChinh "maBenhChinh"; // Target field: MA_BENH_KT - Mã bệnh kèm theo FHIR path: VNCoreClaim.diagnosis.where(type!='principal').diagnosisCodeableConcept | VNCoreCondition.code Mapping note: [MULTI-INSTANCE] Bệnh chính và bệnh kèm theo là HAI Condition khác nhau. Bệnh chính và bệnh kèm theo là HAI Condition riêng, phân biệt bằng Encounter.diagnosis.rank (rank=1 cho bệnh chính); không dồn vào một Condition.code. sourceBundle.entry 0..* as maBenhKtSource -> targetRow.maBenhKt "maBenhKt"; // Target field: MA_BENH_YHCT - Mã bệnh y học cổ truyền FHIR path: VNCoreClaim.diagnosis.diagnosisCodeableConcept.coding.code | VNCoreConditionDiagnosis.code.coding[yhct].code sourceBundle.entry 0..* as maBenhYhctSource -> targetRow.maBenhYhct "maBenhYhct"; // Target field: MA_PTTT_QT - Mã phẫu thuật, thủ thuật quốc tế ICD-9-CM FHIR path: VNCoreProcedure.code.coding.code Mapping note: Mã ICD-9-CM (VNICD9CMCS; QĐ 4440/QĐ-BYT, nay thay bằng QĐ 387/QĐ-BYT). Nhiều PT/TT thì các mã phân cách bằng ';'; chỉ ghi khi người bệnh có thực hiện phẫu thuật, thủ thuật. KHÔNG nhầm với MA_PTTT (mã phương thức thanh toán, Bảng 2/3 STT 36/40). sourceBundle.entry 0..* as maPtttQtSource -> targetRow.maPtttQt "maPtttQt"; // Target field: MA_DOITUONG_KCB - Mã đối tượng đến KCB FHIR path: VNCoreClaim.subType Mapping note: Do not map to Coverage.extension[bhytCardType]; this is visit classification, not the insured/card group. sourceBundle.entry 0..* as maDoituongKcbSource -> targetRow.maDoituongKcb "maDoituongKcb"; // Target field: MA_NOI_DI - Mã nơi đi FHIR path: VNCoreEncounter.hospitalization.origin.resolve().identifier[CSKCB].value sourceBundle.entry 0..* as maNoiDiSource -> targetRow.maNoiDi "maNoiDi"; // Target field: MA_NOI_DEN - Mã nơi đến FHIR path: VNCoreEncounter.hospitalization.destination.resolve().identifier[CSKCB].value sourceBundle.entry 0..* as maNoiDenSource -> targetRow.maNoiDen "maNoiDen"; // Target field: MA_TAI_NAN - Mã tai nạn FHIR path: VNCoreClaim.accident.type sourceBundle.entry 0..* as maTaiNanSource -> targetRow.maTaiNan "maTaiNan"; // Target field: NGAY_VAO - Ngày vào theo định dạng yyyyMMddHHmm FHIR path: VNCoreEncounter.period.start | VNCoreClaim.billablePeriod.start Mapping note: Đính chính 16/08/2026: trước đây ngayVao và ngayRa CÙNG trỏ VNCoreClaim.created. Claim.created là ngày LẬP hồ sơ yêu cầu (1..1) nên không thể mang cả hai mốc; kỳ khám chữa bệnh thuộc Claim.billablePeriod. sourceBundle.entry 0..* as ngayVaoSource -> targetRow.ngayVao "ngayVao"; // Target field: NGAY_VAO_NOI_TRU - Ngày vào nội trú FHIR path: VNCoreEncounter.hospitalization | future admission instant extension sourceBundle.entry 0..* as ngayVaoNoiTruSource -> targetRow.ngayVaoNoiTru "ngayVaoNoiTru"; // Target field: NGAY_RA - Ngày ra theo định dạng yyyyMMddHHmm FHIR path: VNCoreEncounter.period.end | VNCoreClaim.billablePeriod.end Mapping note: Xem ghi chú tại NGAY_VAO: kỳ KCB đi vào Claim.billablePeriod, không phải Claim.created. sourceBundle.entry 0..* as ngayRaSource -> targetRow.ngayRa "ngayRa"; // Target field: GIAY_CHUYEN_TUYEN - Số giấy chuyển tuyến FHIR path: VNCoreServiceRequest.identifier.value | VNCoreDocumentReference.identifier.value Mapping note: Số giấy chuyển tuyến/chuyển cơ sở KBCB nơi chuyển người bệnh đi hoặc số giấy hẹn khám lại (nếu có). Ghi theo trường GIAY_CHUYEN_TUYEN Bảng 13 (BHYTXML13ReferralLM) — liên kết phiếu chuyển tuyến ServiceRequest. sourceBundle.entry 0..* as giayChuyenTuyenSource -> targetRow.giayChuyenTuyen "giayChuyenTuyen"; // Target field: SO_NGAY_DTRI - Số ngày điều trị FHIR path: Derived from VNCoreEncounter.period.start/end | VNCoreEncounter.length.value sourceBundle.entry 0..* as soNgayDtriSource -> targetRow.soNgayDtri "soNgayDtri"; // Target field: PP_DIEU_TRI - Phương pháp điều trị (nội khoa, ngoại khoa, xạ trị, hoá trị hoặc kết hợp) FHIR path: VNCoreProcedure.category | future treatment-method (PP_DIEU_TRI) extension Mapping note: Ghi phương pháp điều trị theo TT 18/2022/TT-BYT (nội khoa, ngoại khoa, xạ trị, hoá trị hoặc xạ trị + nội khoa). VN Core chưa có slice/extension chuyên biệt ở cấp đợt điều trị nên đánh dấu future. sourceBundle.entry 0..* as ppDieuTriSource -> targetRow.ppDieuTri "ppDieuTri"; // Target field: KET_QUA_DTRI - Kết quả điều trị FHIR path: VNCoreEncounter.extension[treatmentOutcome].valueCodeableConcept sourceBundle.entry 0..* as ketQuaDtriSource -> targetRow.ketQuaDtri "ketQuaDtri"; // Target field: MA_LOAI_RV - Mã loại ra viện FHIR path: VNCoreEncounter.hospitalization.dischargeDisposition sourceBundle.entry 0..* as maLoaiRvSource -> targetRow.maLoaiRv "maLoaiRv"; // Target field: GHI_CHU - Lời dặn của bác sĩ/nhân viên y tế sau khi kết thúc KBCB FHIR path: VNCoreComposition.section[dischargeSummary].text Mapping note: Lời dặn của bác sĩ hoặc nhân viên y tế đối với người bệnh sau khi kết thúc lần KBCB; ghi vào phần tóm tắt ra viện/hướng điều trị tiếp của bệnh án điện tử (TT 13/2025/TT-BYT). sourceBundle.entry 0..* as ghiChuSource -> targetRow.ghiChu "ghiChu"; // Target field: NGAY_TTOAN - Ngày thanh toán FHIR path: VNCoreExplanationOfBenefit.created | VNCoreClaimResponse.created sourceBundle.entry 0..* as ngayTtoanSource -> targetRow.ngayTtoan "ngayTtoan"; // Target field: T_THUOC - Tổng tiền thuốc FHIR path: VNCoreClaim.extension[costSummary].extension[totalMedication].valueMoney.value | VNCoreExplanationOfBenefit.total.where(category='medication-subtotal').amount.value sourceBundle.entry 0..* as tThuocSource -> targetRow.tThuoc "tThuoc"; // Target field: T_VTYT - Tổng tiền vật tư y tế FHIR path: VNCoreClaim.extension[costSummary].extension[totalSupplies].valueMoney.value | VNCoreExplanationOfBenefit.total.where(category='supplies-subtotal').amount.value sourceBundle.entry 0..* as tVtytSource -> targetRow.tVtyt "tVtyt"; // Target field: T_TONGCHI_BV - Tổng chi phí bệnh viện FHIR path: VNCoreClaim.total.value | VNCoreExplanationOfBenefit.total.amount sourceBundle.entry 0..* as tTongchiBvSource -> targetRow.tTongchiBv "tTongchiBv"; // Target field: T_TONGCHI_BH - Tổng chi phí thuộc phạm vi BHYT FHIR path: VNCoreExplanationOfBenefit.total.where(category='eligible').amount.value | VNCoreClaimResponse.total.where(category='eligible').amount.value sourceBundle.entry 0..* as tTongchiBhSource -> targetRow.tTongchiBh "tTongchiBh"; // Target field: T_BNTT - Người bệnh tự trả FHIR path: VNCoreClaim.extension[costSummary].extension[totalPatientSelfPay].valueMoney.value | Derived from VNCoreClaimResponse.total.where(category='submitted').amount - .where(category='eligible').amount sourceBundle.entry 0..* as tBnttSource -> targetRow.tBntt "tBntt"; // Target field: T_BNCCT - Người bệnh cùng chi trả FHIR path: VNCoreClaim.extension[costSummary].extension[totalPatientCopay].valueMoney.value | VNCoreClaimResponse.total.where(category='copay').amount.value | VNCoreExplanationOfBenefit.total.where(category='copay').amount.value sourceBundle.entry 0..* as tBncctSource -> targetRow.tBncct "tBncct"; // Target field: T_BHTT - Quỹ BHYT thanh toán FHIR path: VNCoreClaim.extension[costSummary].extension[totalInsurance].valueMoney.value | VNCoreClaimResponse.total.where(category='benefit').amount.value | VNCoreExplanationOfBenefit.total.where(category='benefit').amount.value sourceBundle.entry 0..* as tBhttSource -> targetRow.tBhtt "tBhtt"; // Target field: T_NGUONKHAC - Nguồn khác FHIR path: VNCoreClaim.extension[costSummary].extension[totalOtherFund].valueMoney.value | VNCoreExplanationOfBenefit.total.where(category='other-fund').amount.value sourceBundle.entry 0..* as tNguonkhacSource -> targetRow.tNguonkhac "tNguonkhac"; // Target field: T_BHTT_GDV - BHYT thanh toán giám định viên FHIR path: VNCoreClaim.extension[costSummary] | future totalInsuranceFeeForService sub-extension Mapping note: Số tiền quỹ BHYT thanh toán đối với các khoản chi ngoài định suất hoặc ngoài DRG (là T_BHTT tại Bảng 2, Bảng 3 đối với chi phí có MA_PTTT = '1' — Phí dịch vụ). VNCoreExtClaimCostSummary chưa có sub-extension chuyên biệt cho khoản này nên đánh dấu future. sourceBundle.entry 0..* as tBhttGdvSource -> targetRow.tBhttGdv "tBhttGdv"; // Target field: NAM_QT - Năm quyết toán FHIR path: VNCoreClaim.extension[paymentPeriod].extension[year] sourceBundle.entry 0..* as namQtSource -> targetRow.namQt "namQt"; // Target field: THANG_QT - Tháng quyết toán FHIR path: VNCoreClaim.extension[paymentPeriod].extension[month] sourceBundle.entry 0..* as thangQtSource -> targetRow.thangQt "thangQt"; // Target field: MA_LOAI_KCB - Mã loại khám chữa bệnh FHIR path: VNCoreEncounter.type sourceBundle.entry 0..* as maLoaiKcbSource -> targetRow.maLoaiKcb "maLoaiKcb"; // Target field: MA_KHOA - Mã khoa FHIR path: VNCoreClaim.item.extension[department].valueCodeableConcept.coding.code | VNCoreEncounter.serviceType sourceBundle.entry 0..* as maKhoaSource -> targetRow.maKhoa "maKhoa"; // Target field: MA_CSKCB - Mã cơ sở khám chữa bệnh FHIR path: VNCoreEncounter.serviceProvider.resolve().identifier[CSKCB].value | VNCoreClaim.provider.resolve().identifier[CSKCB].value Mapping note: Actual visit/submission provider. Do not fall back to MA_DKBD on Coverage. sourceBundle.entry 0..* as maCskcbSource -> targetRow.maCskcb "maCskcb"; // Target field: MA_KHUVUC - Mã khu vực FHIR path: VNCoreCoverage | future BHYT living-area (K1/K2/K3) extension Mapping note: Mã nơi sinh sống của người bệnh ghi trên thẻ BHYT (danh mục mã cố định K1/K2/K3). VN Core chưa có extension mã khu vực sinh sống trên Coverage. sourceBundle.entry 0..* as maKhuvucSource -> targetRow.maKhuvuc "maKhuvuc"; // Target field: CAN_NANG - Cân nặng FHIR path: VNCoreObservationBodyWeight.value[x] Mapping note: [MULTI-INSTANCE] Cân nặng NGƯỜI BỆNH và cân nặng CON là hai Observation trên hai chủ thể khác nhau, không phải hai giá trị của một Observation: `subject` của chỉ tiêu này là người bệnh, còn của CAN_NANG_CON là trẻ mới sinh. Token thêm 07/09/2026 khi đích ánh xạ đổi từ `valueQuantity.value` sang `value[x]` — cách viết cũ không phân giải được nên cổng LM MAPPING TARGETS chưa từng thấy cặp tranh chấp này. sourceBundle.entry 0..* as canNangSource -> targetRow.canNang "canNang"; // Target field: CAN_NANG_CON - Cân nặng con FHIR path: VNCoreObservationBodyWeight.value[x] | future newborn-birth-weight extension Mapping note: [MULTI-INSTANCE] Cân nặng người bệnh và cân nặng con là hai Observation trên hai chủ thể khác nhau. Cân nặng con mới sinh, đơn vị gram; subject là trẻ mới sinh (RelatedPerson/Patient liên kết), không phải người bệnh mẹ. Chỉ ghi khi sinh con; sinh từ 2 con trở lên ghi lần lượt, phân cách bằng dấu chấm phẩy ';'. sourceBundle.entry 0..* as canNangConSource -> targetRow.canNangCon "canNangCon"; // Target field: NAM_NAM_LIEN_TUC - Thời điểm đủ 5 năm liên tục FHIR path: VNCoreCoverage | future five-year-continuous-participation date extension Mapping note: Thời điểm người bệnh tham gia BHYT đủ 05 năm liên tục, 8 ký tự yyyymmdd (mốc hưởng quyền lợi 5 năm liên tục). VN Core chưa có extension mốc 5 năm liên tục trên Coverage. sourceBundle.entry 0..* as namNamLienTucSource -> targetRow.namNamLienTuc "namNamLienTuc"; // Target field: NGAY_TAI_KHAM - Ngày tái khám FHIR path: VNCoreServiceRequest.occurrenceDateTime | Appointment.start sourceBundle.entry 0..* as ngayTaiKhamSource -> targetRow.ngayTaiKham "ngayTaiKham"; // Target field: MA_HSBA - Mã hồ sơ bệnh án FHIR path: VNCoreComposition.identifier.value | VNCoreDocumentReference.identifier.value sourceBundle.entry 0..* as maHsbaSource -> targetRow.maHsba "maHsba"; // Target field: MA_TTDV - Mã thủ trưởng đơn vị/người ký FHIR path: VNCoreComposition.author.resolve().identifier.value | VNCoreDocumentReference.author.resolve().identifier.value | VNCoreProvenance.signature.who.resolve().identifier.value sourceBundle.entry 0..* as maTtdvSource -> targetRow.maTtdv "maTtdv"; // Target field: DU_PHONG - Trường dự phòng (tái sử dụng: ghi chiều cao người bệnh, đơn vị cm) FHIR path: VNCoreObservationBodyHeight.value[x] Mapping note: Theo bản sửa đổi, bổ sung QĐ 4750/QĐ-BYT: trường dự phòng Bảng 1 dùng để ghi chiều cao người bệnh (đơn vị cm), bắt buộc trong trường hợp sử dụng chỉ số này để chẩn đoán, điều trị. Riêng Bảng 1 khác các bảng khác (DU_PHONG thường dùng cho dữ liệu chữ ký số theo QĐ 3176/QĐ-BYT). sourceBundle.entry 0..* as duPhongSource -> targetRow.duPhong "duPhong"; }