HL7 Vietnam VN Core FHIR Implementation Guide

Bộ Hướng dẫn Triển khai Core FHIR cho Việt Nam
0.8.0 - Draft for Community Review Viet Nam cờ

Bộ Hướng dẫn Triển khai Core FHIR cho Việt Nam - Draft for Community Review (v0.8.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

StructureMap: Bảng 7 giấy ra viện — XML7 Discharge Paper Logical Model — StructureMap

URL chính thức: http://fhir.hl7.org.vn/core/StructureMap/vn-sm-bhyt-xml7-discharge-paper Phiên bản: 0.8.0
Computable Name: BHYTXML7DischargePaperLMStructureMap
Định danh khác: OID:2.25.161089673617632664299011809196868855799.43.10

Generated StructureMap scaffold for Bảng 7 giấy ra viện — XML7 Discharge Paper Logical Model. Source semantics come from the logical model mapping annotations in BHYTXML7DischargePaperLM.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-xml7-discharge-paper" = "BHYTXML7DischargePaperLMStructureMap"

// Generated StructureMap scaffold for Bảng 7 giấy ra viện — XML7 Discharge Paper Logical Model. Source semantics come from the logical model mapping annotations in `BHYTXML7DischargePaperLM.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 7 giấy ra viện — XML7 Discharge Paper Logical Model
uses "http://fhir.hl7.org.vn/core/StructureDefinition/bhytXml7DischargePaperLm" alias BHYTXML7DischargePaperLM as target

// Rows are derived from discharge Composition/DocumentReference, the linked Encounter, Condition, Practitioner and guardian/temporary card data. 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 MapBHYTXML7DischargePaperLM(source sourceBundle : BHYTSubmissionBundle, target targetRow : BHYTXML7DischargePaperLM) {
  // 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: SO_LUU_TRU - Số lưu trữ/số hồ sơ bệnh án FHIR path: VNCoreComposition.identifier.value | VNCoreDocumentReference.identifier.value
  sourceBundle.entry 0..* as soLuuTruSource -> targetRow.soLuuTru "soLuuTru";
  // Target field: MA_YTE - Mã y tế/mã người bệnh FHIR path: VNCorePatient.identifier[MRN].value
  sourceBundle.entry 0..* as maYteSource -> targetRow.maYte "maYte";
  // Target field: MA_KHOA_RV - Mã khoa ra viện/tổng kết FHIR path: VNCoreEncounter.location.location.resolve().identifier.value | VNCoreOrganizationDepartment.identifier.value
  sourceBundle.entry 0..* as maKhoaRvSource -> targetRow.maKhoaRv "maKhoaRv";
  // Target field: NGAY_VAO - Ngày vào viện FHIR path: VNCoreEncounter.period.start
  sourceBundle.entry 0..* as ngayVaoSource -> targetRow.ngayVao "ngayVao";
  // Target field: NGAY_RA - Ngày ra viện FHIR path: VNCoreEncounter.period.end | VNCoreComposition.date
  sourceBundle.entry 0..* as ngayRaSource -> targetRow.ngayRa "ngayRa";
  // Target field: MA_DINH_CHI_THAI - Mã đình chỉ thai FHIR path: VNCoreProcedure.code | VNCoreCondition.code Mapping note: MA_DINH_CHI_THAI='1' (đình chỉ thai nghén) tương ứng với sự tồn tại một VNCoreProcedure đình chỉ thai nghén (termination of pregnancy); '0' là không đình chỉ. Chưa có slice/mã cố định cho thủ thuật đình chỉ thai nên dùng Procedure.code; quan hệ điều kiện với 3 trường chi tiết theo invariant bhyt-xml7-abortion-fields-required (nhất quán nhóm đình chỉ thai với BHYTXML11SickLeaveLM).
  sourceBundle.entry 0..* as maDinhChiThaiSource -> targetRow.maDinhChiThai "maDinhChiThai";
  // Target field: NGUYENNHAN_DINHCHI - Nguyên nhân đình chỉ thai FHIR path: VNCoreProcedure.reasonCode.text | VNCoreProcedure.reasonReference.resolve().code | VNCoreCondition.code Mapping note: Nguyên nhân đình chỉ thai nghén — ghi dạng text hoặc mã ICD-10 chẩn đoán liên quan (VNCoreCondition); trường hợp bất thường/bệnh lý thai nhi tham chiếu danh mục VNFetalSexDisclosureDiseaseVS (căn cứ TT 11/2026/TT-BYT). Bắt buộc khi MA_DINH_CHI_THAI='1' (invariant bhyt-xml7-abortion-fields-required).
  sourceBundle.entry 0..* as nguyenNhanDinhChiSource -> targetRow.nguyenNhanDinhChi "nguyenNhanDinhChi";
  // Target field: THOIGIAN_DINHCHI - Thời gian đình chỉ thai FHIR path: VNCoreProcedure.performedDateTime Mapping note: Thời điểm thực hiện đình chỉ thai nghén (định dạng yyyymmddHHMM). Bắt buộc khi MA_DINH_CHI_THAI='1' (invariant bhyt-xml7-abortion-fields-required).
  sourceBundle.entry 0..* as thoiGianDinhChiSource -> targetRow.thoiGianDinhChi "thoiGianDinhChi";
  // Target field: TUOI_THAI - Tuổi thai FHIR path: VNCoreProcedure | future tuổi-thai gestational-age extension Mapping note: Tuần tuổi thai thực tế (1–42 tuần) tại thời điểm đình chỉ. FHIR base không có phần tử tuổi thai trên Procedure nên đích mã hoá qua extension gestational-age để future (hoặc Observation LOINC 18185-9). Bắt buộc khi MA_DINH_CHI_THAI='1' (invariant bhyt-xml7-abortion-fields-required).
  sourceBundle.entry 0..* as tuoiThaiSource -> targetRow.tuoiThai "tuoiThai";
  // Target field: CHAN_DOAN_RV - Chẩn đoán ra viện FHIR path: VNCoreComposition.section[diagnosis].entry.resolve().code | VNCoreCondition.code | section.text
  sourceBundle.entry 0..* as chanDoanRvSource -> targetRow.chanDoanRv "chanDoanRv";
  // Target field: PP_DIEUTRI - 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: VNCoreComposition.section[dischargeSummary].text | VNCoreProcedure.category | future phương-pháp-điều-trị extension Mapping note: Ghi phương pháp điều trị (nội khoa, ngoại khoa, xạ trị, hoá trị hoặc xạ trị kết hợp nội khoa) theo hướng dẫn TT 18/2022/TT-BYT. QĐ 4750/QĐ-BYT (trong chuẩn QĐ 3176/QĐ-BYT) sửa đổi toàn bộ diễn giải và tăng kích thước tối đa lên n ký tự. Chưa có code system phương pháp điều trị riêng nên đích mã hoá tạm để future extension.
  sourceBundle.entry 0..* as ppDieuTriSource -> targetRow.ppDieuTri "ppDieuTri";
  // Target field: GHI_CHU - Ghi chú FHIR path: VNCoreDocumentReference.description | VNCoreComposition.section.text
  sourceBundle.entry 0..* as ghiChuSource -> targetRow.ghiChu "ghiChu";
  // Target field: MA_TTDV - Mã thủ trưởng đơn vị/người ký FHIR path: VNCoreComposition.attester.party.resolve().identifier.value | VNCoreDocumentReference.authenticator.resolve().identifier.value
  sourceBundle.entry 0..* as maTtdvSource -> targetRow.maTtdv "maTtdv";
  // Target field: MA_BS - Mã bác sĩ FHIR path: VNCoreComposition.author.resolve().identifier.value | VNCorePractitioner.identifier.value
  sourceBundle.entry 0..* as maBsSource -> targetRow.maBs "maBs";
  // Target field: TEN_BS - Tên bác sĩ FHIR path: VNCoreComposition.author.display | VNCorePractitioner.name.text
  sourceBundle.entry 0..* as tenBsSource -> targetRow.tenBs "tenBs";
  // Target field: NGAY_CT - Ngày cấp chứng từ FHIR path: VNCoreDocumentReference.date | VNCoreComposition.date
  sourceBundle.entry 0..* as ngayCtSource -> targetRow.ngayCt "ngayCt";
  // Target field: MA_CHA - Mã cha FHIR path: VNCoreRelatedPerson.where(relationship.coding.code='FTH').identifier[CCCD].value | VNCorePatient.contact.where(relationship.coding.code='FTH').name
  sourceBundle.entry 0..* as maChaSource -> targetRow.maCha "maCha";
  // Target field: MA_ME - Mã mẹ FHIR path: VNCoreRelatedPerson.where(relationship.coding.code='MTH').identifier[CCCD].value | VNCorePatient.contact.where(relationship.coding.code='MTH').name
  sourceBundle.entry 0..* as maMeSource -> targetRow.maMe "maMe";
  // Target field: MA_THE_TAM - Mã thẻ tạm FHIR path: VNCoreCoverage.identifier.value Mapping note: Temporary card identifiers are kept as Coverage.identifier until a dedicated temporary-card slice is profiled.
  sourceBundle.entry 0..* as maTheTamSource -> targetRow.maTheTam "maTheTam";
  // Target field: HO_TEN_CHA - Họ tên cha FHIR path: VNCoreRelatedPerson.where(relationship.coding.code='FTH').name.text | VNCorePatient.contact.where(relationship.coding.code='FTH').name.text
  sourceBundle.entry 0..* as hoTenChaSource -> targetRow.hoTenCha "hoTenCha";
  // Target field: HO_TEN_ME - Họ tên mẹ FHIR path: VNCoreRelatedPerson.where(relationship.coding.code='MTH').name.text | VNCorePatient.contact.where(relationship.coding.code='MTH').name.text
  sourceBundle.entry 0..* as hoTenMeSource -> targetRow.hoTenMe "hoTenMe";
  // Target field: SO_NGAY_NGHI - Số ngày nghỉ FHIR path: Derived from VNCoreDocumentReference.context.period | VNCoreComposition.event.period
  sourceBundle.entry 0..* as soNgayNghiSource -> targetRow.soNgayNghi "soNgayNghi";
  // Target field: NGOAITRU_TUNGAY - Ngoại trú từ ngày FHIR path: VNCoreDocumentReference.context.period.start | VNCoreComposition.event.period.start
  sourceBundle.entry 0..* as ngoaiTruTuNgaySource -> targetRow.ngoaiTruTuNgay "ngoaiTruTuNgay";
  // Target field: NGOAITRU_DENNGAY - Ngoại trú đến ngày FHIR path: VNCoreDocumentReference.context.period.end | VNCoreComposition.event.period.end
  sourceBundle.entry 0..* as ngoaiTruDenNgaySource -> targetRow.ngoaiTruDenNgay "ngoaiTruDenNgay";
}