# text.div
Generated Narrative: StructureMap vn-sm-bhyt-xml14-follow-up-appointment

map "http://fhir.hl7.org.vn/core/StructureMap/vn-sm-bhyt-xml14-follow-up-appointment" = "BHYTXML14FollowUpAppointmentLMStructureMap"

// Generated StructureMap scaffold for Bảng 14 giấy hẹn khám lại — XML14 Follow-up Appointment Logical Model. Source semantics come from the logical model mapping annotations in `BHYTXML14FollowUpAppointmentLM.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 14 giấy hẹn khám lại — XML14 Follow-up Appointment Logical Model
uses "http://fhir.hl7.org.vn/core/StructureDefinition/bhytXml14FollowUpAppointmentLm" alias BHYTXML14FollowUpAppointmentLM as target

// Rows derive from the follow-up appointment ServiceRequest/DocumentReference (giấy hẹn khám lại), the linked Encounter, Patient/Coverage identity data, diagnosis Conditions and the ordering/signing Practitioner. 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 MapBHYTXML14FollowUpAppointmentLM(source sourceBundle : BHYTSubmissionBundle, target targetRow : BHYTXML14FollowUpAppointmentLM) {
  // Target field: MA_LK - Mã liên kết hồ sơ, PRIMARY KEY liên kết Bảng 1 và các bảng khác trong một lần KCB FHIR path: VNCoreClaim.identifier[MALK].value
  sourceBundle.entry 0..* as maLkSource -> targetRow.maLk "maLk";
  // Target field: SO_GIAYHEN_KL - Số giấy hẹn khám lại do cơ sở KBCB cấp theo mẫu số 5 Phụ lục NĐ 75/2023/NĐ-CP FHIR path: VNCoreServiceRequest.identifier.value | VNCoreDocumentReference.identifier.value
  sourceBundle.entry 0..* as soGiayhenKlSource -> targetRow.soGiayhenKl "soGiayhenKl";
  // Target field: MA_CSKCB - Mã cơ sở KBCB nơi cấp giấy hẹn khám lại FHIR path: VNCoreServiceRequest.requester.resolve().identifier[CSKCB].value | VNCoreOrganization.identifier[CSKCB].value
  sourceBundle.entry 0..* as maCskcbSource -> targetRow.maCskcb "maCskcb";
  // Target field: HO_TEN - Họ và tên người bệnh được cấp giấy hẹn khám lại FHIR path: VNCorePatient.name.text
  sourceBundle.entry 0..* as hoTenSource -> targetRow.hoTen "hoTen";
  // Target field: NGAY_SINH - Ngày sinh (ghi theo trường NGAY_SINH Bảng 1) FHIR path: VNCorePatient.birthDate
  sourceBundle.entry 0..* as ngaySinhSource -> targetRow.ngaySinh "ngaySinh";
  // Target field: GIOI_TINH - Giới tính (ghi theo trường GIOI_TINH Bảng 1) FHIR path: VNCorePatient.gender
  sourceBundle.entry 0..* as gioiTinhSource -> targetRow.gioiTinh "gioiTinh";
  // Target field: DIA_CHI - Địa chỉ (ghi theo trường DIA_CHI Bảng 1) FHIR path: VNCorePatient.address.text
  sourceBundle.entry 0..* as diaChiSource -> targetRow.diaChi "diaChi";
  // Target field: MA_THE_BHYT - Mã thẻ BHYT (ghi theo trường MA_THE_BHYT Bảng 1) FHIR path: VNCoreCoverage.identifier[BHYT].value
  sourceBundle.entry 0..* as maTheBhytSource -> targetRow.maTheBhyt "maTheBhyt";
  // Target field: GT_THE_DEN - Giá trị thẻ đến ngày (ghi theo trường GT_THE_DEN Bảng 1) FHIR path: VNCoreCoverage.period.end
  sourceBundle.entry 0..* as gtTheDenSource -> targetRow.gtTheDen "gtTheDen";
  // Target field: NGAY_VAO - Ngày vào theo định dạng yyyyMMddHHmm (ghi theo trường NGAY_VAO Bảng 1) FHIR path: VNCoreEncounter.period.start | VNCoreClaim.created
  sourceBundle.entry 0..* as ngayVaoSource -> targetRow.ngayVao "ngayVao";
  // Target field: NGAY_VAO_NOI_TRU - Ngày vào nội trú (ghi theo trường NGAY_VAO_NOI_TRU Bảng 1) 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 (ghi theo trường NGAY_RA Bảng 1) FHIR path: VNCoreEncounter.period.end | VNCoreClaim.created
  sourceBundle.entry 0..* as ngayRaSource -> targetRow.ngayRa "ngayRa";
  // Target field: NGAY_HEN_KL - Thời điểm người bệnh được hẹn khám lại, định dạng yyyymmdd (08 ký tự) FHIR path: VNCoreServiceRequest.occurrenceDateTime | Appointment.start Mapping note: QĐ 3176/QĐ-BYT sửa toàn bộ diễn giải: định dạng còn 08 ký tự yyyymmdd (bỏ giờ phút), thay cho 12 ký tự yyyymmddHHMM theo QĐ 4750/QĐ-BYT cũ. IG chưa có VNCoreAppointment; Appointment.start chỉ là đích tương lai.
  sourceBundle.entry 0..* as ngayHenKlSource -> targetRow.ngayHenKl "ngayHenKl";
  // Target field: CHAN_DOAN_RV - Chẩn đoán ra viện (ghi theo trường CHAN_DOAN_RV Bảng 1) 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, ICD-10 VN (ghi theo trường MA_BENH_CHINH Bảng 1) FHIR path: VNCoreClaim.diagnosis.where(type='principal').diagnosisCodeableConcept | VNCoreCondition.code
  sourceBundle.entry 0..* as maBenhChinhSource -> targetRow.maBenhChinh "maBenhChinh";
  // Target field: MA_BENH_KT - Mã bệnh kèm theo (ghi theo trường MA_BENH_KT Bảng 1, cho phép nhiều mã) FHIR path: VNCoreClaim.diagnosis.where(type!='principal').diagnosisCodeableConcept | VNCoreCondition.code
  sourceBundle.entry 0..* as maBenhKtSource -> targetRow.maBenhKt "maBenhKt";
  // Target field: MA_BENH_YHCT - Mã bệnh y học cổ truyền (ghi theo trường MA_BENH_YHCT Bảng 1) FHIR path: VNCoreClaim.diagnosis.diagnosisCodeableConcept.coding.code | VNCoreConditionDiagnosis.code.coding[yhct].code
  sourceBundle.entry 0..* as maBenhYhctSource -> targetRow.maBenhYhct "maBenhYhct";
  // Target field: MA_DOITUONG_KCB - Mã đối tượng đến KCB (ghi theo trường MA_DOI_TUONG_KCB Bảng 1) FHIR path: VNCoreClaim.subType Mapping note: Do not map to Coverage.extension[bhytCardType]; đây là phân loại lượt KCB, không phải nhóm thẻ/nhóm người tham gia BHYT.
  sourceBundle.entry 0..* as maDoituongKcbSource -> targetRow.maDoituongKcb "maDoituongKcb";
  // Target field: MA_BACSI - Mã người hành nghề chỉ định người bệnh khám lại (mã hóa theo số GPHN) FHIR path: VNCorePractitioner.identifier[GPHN].value Mapping note: QĐ 3176/QĐ-BYT đổi căn cứ mã hóa từ CCHN sang GPHN. Trường hợp huy động/điều động chống dịch, thiên tai: mã hóa MA_BAC_SI.HD.XXXXX (XXXXX = mã CSKCB cử người đi; nếu không đăng ký hành nghề thì XXXXX = 2 ký tự mã tỉnh nơi ra quyết định huy động + XXX).
  sourceBundle.entry 0..* as maBacsiSource -> targetRow.maBacsi "maBacsi";
  // Target field: MA_TTDV - Mã người đứng đầu CSKCB (hoặc người được ủy quyền) ký giấy hẹn khám lại, ưu tiên GPHN FHIR path: VNCorePractitioner.identifier[GPHN].value | VNCorePractitioner.identifier[CCCD].value (fallback khi không có GPHN) Mapping note: QĐ 3176/QĐ-BYT ưu tiên mã hóa theo GPHN; nếu không có GPHN thì ghi số CCCD hoặc số định danh cá nhân của người ký. Đổi kiểu dữ liệu sang chuỗi, tăng kích thước tối đa 255 ký tự (trước đây là mã số BHXH).
  sourceBundle.entry 0..* as maTtdvSource -> targetRow.maTtdv "maTtdv";
  // Target field: NGAY_CT - Ngày cấp giấy hẹn khám lại, định dạng yyyymmdd (08 ký tự) FHIR path: VNCoreServiceRequest.authoredOn | VNCoreDocumentReference.date
  sourceBundle.entry 0..* as ngayCtSource -> targetRow.ngayCt "ngayCt";
  // Target field: DU_PHONG - Trường dự phòng; theo QĐ 3176/QĐ-BYT dùng để ghi dữ liệu chữ ký số của cơ sở KBCB FHIR path: VNCoreProvenance.signature.data | future chữ-ký-số dự-phòng
  sourceBundle.entry 0..* as duPhongSource -> targetRow.duPhong "duPhong";
}

# title
Bảng 14 giấy hẹn khám lại — XML14 Follow-up Appointment Logical Model — StructureMap

# publisher
Omi HealthTech / VN Core FHIR Community Initiative

# contact[].name
Omi HealthTech / VN Core FHIR Community Initiative

# description
Generated StructureMap scaffold for Bảng 14 giấy hẹn khám lại — XML14 Follow-up Appointment Logical Model. Source semantics come from the logical model mapping annotations in `BHYTXML14FollowUpAppointmentLM.fsh` and remain aligned with the Python BHYT round-trip export adapter.

# purpose
Publish canonical, reviewable FHIR-to-BHYT XML mapping artifacts for XML1-XML15 without duplicating field-level mapping semantics across FSH, wiki, and export code.

# structure[].documentation
FHIR-native source bundle profile used by the repository round-trip adapter.

# structure[].documentation
Bảng 14 giấy hẹn khám lại — XML14 Follow-up Appointment Logical Model

# group[].documentation
Rows derive from the follow-up appointment ServiceRequest/DocumentReference (giấy hẹn khám lại), the linked Encounter, Patient/Coverage identity data, diagnosis Conditions and the ordering/signing Practitioner. 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[].input[].documentation
Bảng 14 giấy hẹn khám lại — XML14 Follow-up Appointment Logical Model

# group[].rule[].documentation
Target field: MA_LK - Mã liên kết hồ sơ, PRIMARY KEY liên kết Bảng 1 và các bảng khác trong một lần KCB FHIR path: VNCoreClaim.identifier[MALK].value

# group[].rule[].documentation
Target field: SO_GIAYHEN_KL - Số giấy hẹn khám lại do cơ sở KBCB cấp theo mẫu số 5 Phụ lục NĐ 75/2023/NĐ-CP FHIR path: VNCoreServiceRequest.identifier.value | VNCoreDocumentReference.identifier.value

# group[].rule[].documentation
Target field: MA_CSKCB - Mã cơ sở KBCB nơi cấp giấy hẹn khám lại FHIR path: VNCoreServiceRequest.requester.resolve().identifier[CSKCB].value | VNCoreOrganization.identifier[CSKCB].value

# group[].rule[].documentation
Target field: HO_TEN - Họ và tên người bệnh được cấp giấy hẹn khám lại FHIR path: VNCorePatient.name.text

# group[].rule[].documentation
Target field: NGAY_SINH - Ngày sinh (ghi theo trường NGAY_SINH Bảng 1) FHIR path: VNCorePatient.birthDate

# group[].rule[].documentation
Target field: GIOI_TINH - Giới tính (ghi theo trường GIOI_TINH Bảng 1) FHIR path: VNCorePatient.gender

# group[].rule[].documentation
Target field: DIA_CHI - Địa chỉ (ghi theo trường DIA_CHI Bảng 1) FHIR path: VNCorePatient.address.text

# group[].rule[].documentation
Target field: MA_THE_BHYT - Mã thẻ BHYT (ghi theo trường MA_THE_BHYT Bảng 1) FHIR path: VNCoreCoverage.identifier[BHYT].value

# group[].rule[].documentation
Target field: GT_THE_DEN - Giá trị thẻ đến ngày (ghi theo trường GT_THE_DEN Bảng 1) FHIR path: VNCoreCoverage.period.end

# group[].rule[].documentation
Target field: NGAY_VAO - Ngày vào theo định dạng yyyyMMddHHmm (ghi theo trường NGAY_VAO Bảng 1) FHIR path: VNCoreEncounter.period.start | VNCoreClaim.created

# group[].rule[].documentation
Target field: NGAY_VAO_NOI_TRU - Ngày vào nội trú (ghi theo trường NGAY_VAO_NOI_TRU Bảng 1) FHIR path: VNCoreEncounter.hospitalization | future admission instant extension

# group[].rule[].documentation
Target field: NGAY_RA - Ngày ra theo định dạng yyyyMMddHHmm (ghi theo trường NGAY_RA Bảng 1) FHIR path: VNCoreEncounter.period.end | VNCoreClaim.created

# group[].rule[].documentation
Target field: NGAY_HEN_KL - Thời điểm người bệnh được hẹn khám lại, định dạng yyyymmdd (08 ký tự) FHIR path: VNCoreServiceRequest.occurrenceDateTime | Appointment.start Mapping note: QĐ 3176/QĐ-BYT sửa toàn bộ diễn giải: định dạng còn 08 ký tự yyyymmdd (bỏ giờ phút), thay cho 12 ký tự yyyymmddHHMM theo QĐ 4750/QĐ-BYT cũ. IG chưa có VNCoreAppointment; Appointment.start chỉ là đích tương lai.

# group[].rule[].documentation
Target field: CHAN_DOAN_RV - Chẩn đoán ra viện (ghi theo trường CHAN_DOAN_RV Bảng 1) FHIR path: VNCoreCondition.code.text | VNCoreComposition.section[diagnosis].text

# group[].rule[].documentation
Target field: MA_BENH_CHINH - Mã bệnh chính, ICD-10 VN (ghi theo trường MA_BENH_CHINH Bảng 1) FHIR path: VNCoreClaim.diagnosis.where(type='principal').diagnosisCodeableConcept | VNCoreCondition.code

# group[].rule[].documentation
Target field: MA_BENH_KT - Mã bệnh kèm theo (ghi theo trường MA_BENH_KT Bảng 1, cho phép nhiều mã) FHIR path: VNCoreClaim.diagnosis.where(type!='principal').diagnosisCodeableConcept | VNCoreCondition.code

# group[].rule[].documentation
Target field: MA_BENH_YHCT - Mã bệnh y học cổ truyền (ghi theo trường MA_BENH_YHCT Bảng 1) FHIR path: VNCoreClaim.diagnosis.diagnosisCodeableConcept.coding.code | VNCoreConditionDiagnosis.code.coding[yhct].code

# group[].rule[].documentation
Target field: MA_DOITUONG_KCB - Mã đối tượng đến KCB (ghi theo trường MA_DOI_TUONG_KCB Bảng 1) FHIR path: VNCoreClaim.subType Mapping note: Do not map to Coverage.extension[bhytCardType]; đây là phân loại lượt KCB, không phải nhóm thẻ/nhóm người tham gia BHYT.

# group[].rule[].documentation
Target field: MA_BACSI - Mã người hành nghề chỉ định người bệnh khám lại (mã hóa theo số GPHN) FHIR path: VNCorePractitioner.identifier[GPHN].value Mapping note: QĐ 3176/QĐ-BYT đổi căn cứ mã hóa từ CCHN sang GPHN. Trường hợp huy động/điều động chống dịch, thiên tai: mã hóa MA_BAC_SI.HD.XXXXX (XXXXX = mã CSKCB cử người đi; nếu không đăng ký hành nghề thì XXXXX = 2 ký tự mã tỉnh nơi ra quyết định huy động + XXX).

# group[].rule[].documentation
Target field: MA_TTDV - Mã người đứng đầu CSKCB (hoặc người được ủy quyền) ký giấy hẹn khám lại, ưu tiên GPHN FHIR path: VNCorePractitioner.identifier[GPHN].value | VNCorePractitioner.identifier[CCCD].value (fallback khi không có GPHN) Mapping note: QĐ 3176/QĐ-BYT ưu tiên mã hóa theo GPHN; nếu không có GPHN thì ghi số CCCD hoặc số định danh cá nhân của người ký. Đổi kiểu dữ liệu sang chuỗi, tăng kích thước tối đa 255 ký tự (trước đây là mã số BHXH).

# group[].rule[].documentation
Target field: NGAY_CT - Ngày cấp giấy hẹn khám lại, định dạng yyyymmdd (08 ký tự) FHIR path: VNCoreServiceRequest.authoredOn | VNCoreDocumentReference.date

# group[].rule[].documentation
Target field: DU_PHONG - Trường dự phòng; theo QĐ 3176/QĐ-BYT dùng để ghi dữ liệu chữ ký số của cơ sở KBCB FHIR path: VNCoreProvenance.signature.data | future chữ-ký-số dự-phòng