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
| Draft tại thời điểm 2026-07-31 |
Các định nghĩa cho vnHealthCheckupDataSyncEnvelopeLm mô hình logic
Guidance on how to interpret the contents of this table can be foundhere
| 0. vnHealthCheckupDataSyncEnvelopeLm | |
| Definition | Logical model cho bản tin (envelope) đồng bộ tự động tập dữ liệu khám sức khỏe định kỳ từ cơ sở KCB lên Cổng/Trục dữ liệu sức khỏe Bộ Y tế (api.emrhub.vn). API: POST /api/platform/data-sync/push. Xác thực: OAuth2 + Bearer Token (lấy từ /api/auth/login). Định dạng JSON (UTF-8). KHÁC với luồng BHYT Gateway (gdbhyt.baohiemxahoi.gov.vn, XML 4210) — đây là surface liên thông KSK quốc gia. INFORMATIVE / non-normative: đây là mô hình ánh xạ transport envelope (không phải FHIR resource normative). Các National Core IG (KR/JP) chỉ chuẩn hóa profile/search/capability RESTful; envelope được giữ làm mapping aid để implementer ánh xạ payload FHIR ↔ bản tin đồng bộ. Môi trường (PL02 mục 2): Cổng dữ liệu sức khỏe BYT — admin https://csdlksk.vn (sandbox https://sandbox.csdlksk.vn); Trục dữ liệu BYT — admin https://admin.emrhub.vn (sandbox https://admin-sandbox.emrhub.vn), API https://api.emrhub.vn (sandbox https://api-sandbox.emrhub.vn). Căn cứ: QĐ 2062/QĐ-BYT (07/7/2026) Phụ lục 02 (Hướng dẫn kết nối, liên thông dữ liệu) — THAY Phụ lục 02 QĐ 1551/QĐ-BYT (31/5/2026); đọc hợp nhất. API OAuth2 + Bearer, POST /api/platform/data-sync/push (service-type=100, msg_type=101/102, txn_type=sync_checkup), checksum RSASHA256. ĐÃ ĐỐI CHIẾU TOÀN VĂN PL02 ngày 23/07/2026 (file 'Phu luc 2-5.pdf' nhúng trong bản docx user cung cấp). |
| Short | Bản tin đồng bộ dữ liệu KSK lên Trục dữ liệu BYT — Logical Model (Phụ lục 02) |
| Control | 0..* |
| Is Modifier | false |
| Logical Model | Instances of this logical model are not marked to be the target of a Reference |
| 2. vnHealthCheckupDataSyncEnvelopeLm.httpHeader | |
| Definition | HTTP headers của request |
| Short | HTTP headers của request |
| Control | 1..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 4. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 6. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.httpHeader.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 8. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| 10. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.contentType | |
| Definition | Content-Type = application/json |
| Short | Content-Type = application/json |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 12. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.accept | |
| Definition | Accept = / |
| Short | Accept = */* |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 14. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.acceptEncoding | |
| Definition | Accept-Encoding = gzip,deflate,br |
| Short | Accept-Encoding = gzip,deflate,br |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 16. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.authorization | |
| Definition | Authorization = Bearer + Authorization Token (văn bản gọi 'Authorization Token'; lấy từ POST /api/auth/login — response cấp token/refresh_token/duration giây/role: facility=Cơ sở KCB, doh=Sở Y tế) |
| Short | Authorization = Bearer + Authorization Token (văn bản gọi 'Authorization Token'; lấy từ POST /api/auth/login — response cấp token/refresh_token/duration giây/role: facility=Cơ sở KCB, doh=Sở Y tế) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 18. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.serviceType | |
| Definition | service-type = 100 (Dịch vụ data sync vào Trục dữ liệu Bộ Y tế) |
| Short | service-type = 100 (Dịch vụ data sync vào Trục dữ liệu Bộ Y tế) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 20. vnHealthCheckupDataSyncEnvelopeLm.header | |
| Definition | header - Thông tin header bản tin (JSON Object) |
| Short | header - Thông tin header bản tin (JSON Object) |
| Control | 1..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 22. vnHealthCheckupDataSyncEnvelopeLm.header.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 24. vnHealthCheckupDataSyncEnvelopeLm.header.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.header.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 26. vnHealthCheckupDataSyncEnvelopeLm.header.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| 28. vnHealthCheckupDataSyncEnvelopeLm.header.version | |
| Definition | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Short | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Note | This is a business version Id, not a resource version Id (see discussion) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 30. vnHealthCheckupDataSyncEnvelopeLm.header.senderId | |
| Definition | sender_id - Mã định danh bên phát tin (13 số mã định danh CSKCB từ Cục KCB) |
| Short | sender_id - Mã định danh bên phát tin (13 số mã định danh CSKCB từ Cục KCB) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 32. vnHealthCheckupDataSyncEnvelopeLm.header.receiverId | |
| Definition | receiver_id - Mã bên nhận tin (vd: TDLBYT) |
| Short | receiver_id - Mã bên nhận tin (vd: TDLBYT) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 34. vnHealthCheckupDataSyncEnvelopeLm.header.txnType | |
| Definition | txn_type - Loại giao dịch. Giá trị cố định: sync_checkup (đồng bộ tập dữ liệu KSK định kỳ) |
| Short | txn_type - Loại giao dịch. Giá trị cố định: sync_checkup (đồng bộ tập dữ liệu KSK định kỳ) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 36. vnHealthCheckupDataSyncEnvelopeLm.header.msgId | |
| Definition | msg_id - Mã giao dịch = sender_id + YY (2 ký tự năm) + MM (2 ký tự tháng) + DD (2 ký tự ngày) + UUIDv4 (không gạch) |
| Short | msg_id - Mã giao dịch = sender_id + YY (2 ký tự năm) + MM (2 ký tự tháng) + DD (2 ký tự ngày) + UUIDv4 (không gạch) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 38. vnHealthCheckupDataSyncEnvelopeLm.header.msgType | |
| Definition | msg_type - REQUEST cố định = 101 (thông điệp phát tin đồng bộ). Response dùng 102 (xem nhóm response bên dưới). service-type=100 |
| Short | msg_type - REQUEST cố định = 101 (thông điệp phát tin đồng bộ). Response dùng 102 (xem nhóm response bên dưới). service-type=100 |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 40. vnHealthCheckupDataSyncEnvelopeLm.header.dataType | |
| Definition | data_type - Định dạng file. Giá trị: xml/base64 HOẶC json/base64 (chỉ 2 giá trị này theo Phụ lục 02) |
| Short | data_type - Định dạng file. Giá trị: xml/base64 HOẶC json/base64 (chỉ 2 giá trị này theo Phụ lục 02) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 42. vnHealthCheckupDataSyncEnvelopeLm.header.sendDatetime | |
| Definition | send_datetime - Thời điểm đẩy dữ liệu, Unix timestamp 13 số. VĂN BẢN GỐC kiểu Long; mô hình hóa string vì vượt phạm vi FHIR R4 integer 32-bit (INFORMATIVE) |
| Short | send_datetime - Thời điểm đẩy dữ liệu, Unix timestamp 13 số. VĂN BẢN GỐC kiểu Long; mô hình hóa string vì vượt phạm vi FHIR R4 integer 32-bit (INFORMATIVE) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 44. vnHealthCheckupDataSyncEnvelopeLm.data | |
| Definition | data - File dữ liệu (XML/JSON) đã encode Base64 (STRING BASE64 theo quy tắc mục 4 PL02). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Short | data - File dữ liệu (XML/JSON) đã encode Base64 (STRING BASE64 theo quy tắc mục 4 PL02). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 46. vnHealthCheckupDataSyncEnvelopeLm.signature | |
| Definition | signature - Chữ ký số checksum RSASHA256 giữa header và data (bên phát tin tạo). Công thức PL02 mục 4: A=Uppercase(SHA256(header)); B=Uppercase(SHA256(data)); C=A+'.'+B; SIGNATURE=Uppercase(RSASHA256(C, Private Key)). Quy tắc: bỏ whitespace/xuống dòng trước khi hash; header rỗng truyền {}; data là STRING BASE64. BYT cấp cặp khóa cho đơn vị; bản tin còn phải KÝ SỐ TỔ CHỨC trước khi gửi (Trục xác thực trước khi nhận). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Short | signature - Chữ ký số checksum RSASHA256 giữa header và data (bên phát tin tạo). Công thức PL02 mục 4: A=Uppercase(SHA256(header)); B=Uppercase(SHA256(data)); C=A+'.'+B; SIGNATURE=Uppercase(RSASHA256(C, Private Key)). Quy tắc: bỏ whitespace/xuống dòng trước khi hash; header rỗng truyền {}; data là STRING BASE64. BYT cấp cặp khóa cho đơn vị; bản tin còn phải KÝ SỐ TỔ CHỨC trước khi gửi (Trục xác thực trước khi nhận). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 48. vnHealthCheckupDataSyncEnvelopeLm.response | |
| Definition | Bản tin phản hồi từ Trục BYT (msg_type=102) |
| Short | Bản tin phản hồi từ Trục BYT (msg_type=102) |
| Control | 0..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 50. vnHealthCheckupDataSyncEnvelopeLm.response.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 52. vnHealthCheckupDataSyncEnvelopeLm.response.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.response.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 54. vnHealthCheckupDataSyncEnvelopeLm.response.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| 56. vnHealthCheckupDataSyncEnvelopeLm.response.version | |
| Definition | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Short | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Note | This is a business version Id, not a resource version Id (see discussion) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 58. vnHealthCheckupDataSyncEnvelopeLm.response.senderId | |
| Definition | sender_id (response) - Mã bên nhận-nay-phát (ví dụ TDLBYT) |
| Short | sender_id (response) - Mã bên nhận-nay-phát (ví dụ TDLBYT) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 60. vnHealthCheckupDataSyncEnvelopeLm.response.receiverId | |
| Definition | receiver_id (response) - Mã bên phát tin gốc (13 số mã định danh CSKCB) |
| Short | receiver_id (response) - Mã bên phát tin gốc (13 số mã định danh CSKCB) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 62. vnHealthCheckupDataSyncEnvelopeLm.response.txnId | |
| Definition | txn_id - Mã giao dịch do Trục sinh = XX (2 ký tự dịch vụ) + '-' + sender_id + '-' + YY + MM + DD + UUIDv4 không gạch (cấu trúc KHÁC msg_id) |
| Short | txn_id - Mã giao dịch do Trục sinh = XX (2 ký tự dịch vụ) + '-' + sender_id + '-' + YY + MM + DD + UUIDv4 không gạch (cấu trúc KHÁC msg_id) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 64. vnHealthCheckupDataSyncEnvelopeLm.response.txnType | |
| Definition | txn_type (response) = sync_checkup |
| Short | txn_type (response) = sync_checkup |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 66. vnHealthCheckupDataSyncEnvelopeLm.response.msgType | |
| Definition | msg_type (response) = 102 (Trục đã nhận dữ liệu và thực hiện đồng bộ) |
| Short | msg_type (response) = 102 (Trục đã nhận dữ liệu và thực hiện đồng bộ) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 68. vnHealthCheckupDataSyncEnvelopeLm.response.msgId | |
| Definition | msg_id (response) - sender_id + YY + MM + DD + UUIDv4 không gạch |
| Short | msg_id (response) - sender_id + YY + MM + DD + UUIDv4 không gạch |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 70. vnHealthCheckupDataSyncEnvelopeLm.response.refMsgId | |
| Definition | ref_msg_id - msg_id của bên phát tin gốc |
| Short | ref_msg_id - msg_id của bên phát tin gốc |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 72. vnHealthCheckupDataSyncEnvelopeLm.response.sendDatetime | |
| Definition | send_datetime (response) - Ngày gửi của bên phát tin, Unix timestamp 13 số |
| Short | send_datetime (response) - Ngày gửi của bên phát tin, Unix timestamp 13 số |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 74. vnHealthCheckupDataSyncEnvelopeLm.response.resDatetime | |
| Definition | res_datetime - Ngày phản hồi của bên nhận tin (Unix timestamp 13 số) |
| Short | res_datetime - Ngày phản hồi của bên nhận tin (Unix timestamp 13 số) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 76. vnHealthCheckupDataSyncEnvelopeLm.response.resCode | |
| Definition | res_code - Mã trạng thái tiếp nhận, đủ 10 mã theo PL02: CM_SUCCESS | CM_INVALID_REQUEST | PS_DS_RSA_SIGNATURE_INVALID | PS_DS_RSA_SIGNATURE_MISSING | PS_DS_CA_SIGNATURE_INVALID | PS_DS_CA_SIGNATURE_MISSING | PS_DS_VERIFY_SUCCESS | PS_DS_VERIFY_FAIL | PS_DS_SAVE_SUCCESS | PS_DS_SAVE_FAIL |
| Short | res_code - Mã trạng thái tiếp nhận, đủ 10 mã theo PL02: CM_SUCCESS | CM_INVALID_REQUEST | PS_DS_RSA_SIGNATURE_INVALID | PS_DS_RSA_SIGNATURE_MISSING | PS_DS_CA_SIGNATURE_INVALID | PS_DS_CA_SIGNATURE_MISSING | PS_DS_VERIFY_SUCCESS | PS_DS_VERIFY_FAIL | PS_DS_SAVE_SUCCESS | PS_DS_SAVE_FAIL |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 78. vnHealthCheckupDataSyncEnvelopeLm.response.resMsg | |
| Definition | res_msg - Diễn giải trạng thái tiếp nhận |
| Short | res_msg - Diễn giải trạng thái tiếp nhận |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 80. vnHealthCheckupDataSyncEnvelopeLm.response.dataState | |
| Definition | data.data_state - Mã trạng thái dữ liệu sau khi về kho (vd '0') |
| Short | data.data_state - Mã trạng thái dữ liệu sau khi về kho (vd '0') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 82. vnHealthCheckupDataSyncEnvelopeLm.response.dataStateMsg | |
| Definition | data.data_state_msg - Chi tiết trạng thái dữ liệu (vd 'Data is received') |
| Short | data.data_state_msg - Chi tiết trạng thái dữ liệu (vd 'Data is received') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 84. vnHealthCheckupDataSyncEnvelopeLm.response.messageCheckCa | |
| Definition | data.message_check_ca - Trạng thái kiểm tra chữ ký số bản tin (vd 'Digitally signed XML data') |
| Short | data.message_check_ca - Trạng thái kiểm tra chữ ký số bản tin (vd 'Digitally signed XML data') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 86. vnHealthCheckupDataSyncEnvelopeLm.response.messageNotify | |
| Definition | data.message_notify - Trạng thái hệ thống với bản tin (vd 'Successfully inserted data to DATA LAKE') |
| Short | data.message_notify - Trạng thái hệ thống với bản tin (vd 'Successfully inserted data to DATA LAKE') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 88. vnHealthCheckupDataSyncEnvelopeLm.response.signature | |
| Definition | signature (response) - Chữ ký RSASHA256 của Trục BYT |
| Short | signature (response) - Chữ ký RSASHA256 của Trục BYT |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 90. vnHealthCheckupDataSyncEnvelopeLm.authLogin | |
| Definition | Xác thực tài khoản liên thông (POST /api/auth/login) — INFORMATIVE, TRANSPORT-ONLY: username/password/token là thông tin phiên truyền tải, TUYỆT ĐỐI không persist vào FHIR store/clinical Bundle/log; quản lý trong lớp IAM của hệ thống gửi |
| Short | Xác thực tài khoản liên thông (POST /api/auth/login) — INFORMATIVE, TRANSPORT-ONLY: username/password/token là thông tin phiên truyền tải, TUYỆT ĐỐI không persist vào FHIR store/clinical Bundle/log; quản lý trong lớp IAM của hệ thống gửi |
| Control | 0..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 92. vnHealthCheckupDataSyncEnvelopeLm.authLogin.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 94. vnHealthCheckupDataSyncEnvelopeLm.authLogin.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.authLogin.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 96. vnHealthCheckupDataSyncEnvelopeLm.authLogin.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists()) |
| 98. vnHealthCheckupDataSyncEnvelopeLm.authLogin.username | |
| Definition | username - Tên đăng nhập tài khoản liên thông do Trục dữ liệu BYT cấp |
| Short | username - Tên đăng nhập tài khoản liên thông do Trục dữ liệu BYT cấp |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 100. vnHealthCheckupDataSyncEnvelopeLm.authLogin.password | |
| Definition | password - Mật khẩu |
| Short | password - Mật khẩu |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 102. vnHealthCheckupDataSyncEnvelopeLm.authLogin.token | |
| Definition | data.token - Token gọi API nghiệp vụ (response) |
| Short | data.token - Token gọi API nghiệp vụ (response) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 104. vnHealthCheckupDataSyncEnvelopeLm.authLogin.refreshToken | |
| Definition | data.refresh_token - Cấp lại token khi hết hiệu lực |
| Short | data.refresh_token - Cấp lại token khi hết hiệu lực |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 106. vnHealthCheckupDataSyncEnvelopeLm.authLogin.duration | |
| Definition | data.duration - Thời gian hiệu lực token, đơn vị giây (VĂN BẢN GỐC kiểu Long) |
| Short | data.duration - Thời gian hiệu lực token, đơn vị giây (VĂN BẢN GỐC kiểu Long) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 108. vnHealthCheckupDataSyncEnvelopeLm.authLogin.role | |
| Definition | data.role - Phân quyền: facility (Cơ sở KCB) | doh (Sở Y tế) |
| Short | data.role - Phân quyền: facility (Cơ sở KCB) | doh (Sở Y tế) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 110. vnHealthCheckupDataSyncEnvelopeLm.authLogin.resCode | |
| Definition | header.res_code - CM_SUCCESS | CM_AUTH_ACCOUNT_FAIL |
| Short | header.res_code - CM_SUCCESS | CM_AUTH_ACCOUNT_FAIL |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
Guidance on how to interpret the contents of this table can be foundhere
| 0. vnHealthCheckupDataSyncEnvelopeLm | |
| Definition | Logical model cho bản tin (envelope) đồng bộ tự động tập dữ liệu khám sức khỏe định kỳ từ cơ sở KCB lên Cổng/Trục dữ liệu sức khỏe Bộ Y tế (api.emrhub.vn). API: POST /api/platform/data-sync/push. Xác thực: OAuth2 + Bearer Token (lấy từ /api/auth/login). Định dạng JSON (UTF-8). KHÁC với luồng BHYT Gateway (gdbhyt.baohiemxahoi.gov.vn, XML 4210) — đây là surface liên thông KSK quốc gia. INFORMATIVE / non-normative: đây là mô hình ánh xạ transport envelope (không phải FHIR resource normative). Các National Core IG (KR/JP) chỉ chuẩn hóa profile/search/capability RESTful; envelope được giữ làm mapping aid để implementer ánh xạ payload FHIR ↔ bản tin đồng bộ. Môi trường (PL02 mục 2): Cổng dữ liệu sức khỏe BYT — admin https://csdlksk.vn (sandbox https://sandbox.csdlksk.vn); Trục dữ liệu BYT — admin https://admin.emrhub.vn (sandbox https://admin-sandbox.emrhub.vn), API https://api.emrhub.vn (sandbox https://api-sandbox.emrhub.vn). Căn cứ: QĐ 2062/QĐ-BYT (07/7/2026) Phụ lục 02 (Hướng dẫn kết nối, liên thông dữ liệu) — THAY Phụ lục 02 QĐ 1551/QĐ-BYT (31/5/2026); đọc hợp nhất. API OAuth2 + Bearer, POST /api/platform/data-sync/push (service-type=100, msg_type=101/102, txn_type=sync_checkup), checksum RSASHA256. ĐÃ ĐỐI CHIẾU TOÀN VĂN PL02 ngày 23/07/2026 (file 'Phu luc 2-5.pdf' nhúng trong bản docx user cung cấp). |
| Short | Bản tin đồng bộ dữ liệu KSK lên Trục dữ liệu BYT — Logical Model (Phụ lục 02) |
| Logical Model | Instances of this logical model are not marked to be the target of a Reference |
| 2. vnHealthCheckupDataSyncEnvelopeLm.httpHeader | |
| Definition | HTTP headers của request |
| Short | HTTP headers của request |
| Control | 1..1 |
| Type | BackboneElement |
| 4. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.contentType | |
| Definition | Content-Type = application/json |
| Short | Content-Type = application/json |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 6. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.accept | |
| Definition | Accept = / |
| Short | Accept = */* |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 8. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.acceptEncoding | |
| Definition | Accept-Encoding = gzip,deflate,br |
| Short | Accept-Encoding = gzip,deflate,br |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 10. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.authorization | |
| Definition | Authorization = Bearer + Authorization Token (văn bản gọi 'Authorization Token'; lấy từ POST /api/auth/login — response cấp token/refresh_token/duration giây/role: facility=Cơ sở KCB, doh=Sở Y tế) |
| Short | Authorization = Bearer + Authorization Token (văn bản gọi 'Authorization Token'; lấy từ POST /api/auth/login — response cấp token/refresh_token/duration giây/role: facility=Cơ sở KCB, doh=Sở Y tế) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 12. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.serviceType | |
| Definition | service-type = 100 (Dịch vụ data sync vào Trục dữ liệu Bộ Y tế) |
| Short | service-type = 100 (Dịch vụ data sync vào Trục dữ liệu Bộ Y tế) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 14. vnHealthCheckupDataSyncEnvelopeLm.header | |
| Definition | header - Thông tin header bản tin (JSON Object) |
| Short | header - Thông tin header bản tin (JSON Object) |
| Control | 1..1 |
| Type | BackboneElement |
| 16. vnHealthCheckupDataSyncEnvelopeLm.header.version | |
| Definition | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Short | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Note | This is a business version Id, not a resource version Id (see discussion) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 18. vnHealthCheckupDataSyncEnvelopeLm.header.senderId | |
| Definition | sender_id - Mã định danh bên phát tin (13 số mã định danh CSKCB từ Cục KCB) |
| Short | sender_id - Mã định danh bên phát tin (13 số mã định danh CSKCB từ Cục KCB) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 20. vnHealthCheckupDataSyncEnvelopeLm.header.receiverId | |
| Definition | receiver_id - Mã bên nhận tin (vd: TDLBYT) |
| Short | receiver_id - Mã bên nhận tin (vd: TDLBYT) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 22. vnHealthCheckupDataSyncEnvelopeLm.header.txnType | |
| Definition | txn_type - Loại giao dịch. Giá trị cố định: sync_checkup (đồng bộ tập dữ liệu KSK định kỳ) |
| Short | txn_type - Loại giao dịch. Giá trị cố định: sync_checkup (đồng bộ tập dữ liệu KSK định kỳ) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 24. vnHealthCheckupDataSyncEnvelopeLm.header.msgId | |
| Definition | msg_id - Mã giao dịch = sender_id + YY (2 ký tự năm) + MM (2 ký tự tháng) + DD (2 ký tự ngày) + UUIDv4 (không gạch) |
| Short | msg_id - Mã giao dịch = sender_id + YY (2 ký tự năm) + MM (2 ký tự tháng) + DD (2 ký tự ngày) + UUIDv4 (không gạch) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 26. vnHealthCheckupDataSyncEnvelopeLm.header.msgType | |
| Definition | msg_type - REQUEST cố định = 101 (thông điệp phát tin đồng bộ). Response dùng 102 (xem nhóm response bên dưới). service-type=100 |
| Short | msg_type - REQUEST cố định = 101 (thông điệp phát tin đồng bộ). Response dùng 102 (xem nhóm response bên dưới). service-type=100 |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 28. vnHealthCheckupDataSyncEnvelopeLm.header.dataType | |
| Definition | data_type - Định dạng file. Giá trị: xml/base64 HOẶC json/base64 (chỉ 2 giá trị này theo Phụ lục 02) |
| Short | data_type - Định dạng file. Giá trị: xml/base64 HOẶC json/base64 (chỉ 2 giá trị này theo Phụ lục 02) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 30. vnHealthCheckupDataSyncEnvelopeLm.header.sendDatetime | |
| Definition | send_datetime - Thời điểm đẩy dữ liệu, Unix timestamp 13 số. VĂN BẢN GỐC kiểu Long; mô hình hóa string vì vượt phạm vi FHIR R4 integer 32-bit (INFORMATIVE) |
| Short | send_datetime - Thời điểm đẩy dữ liệu, Unix timestamp 13 số. VĂN BẢN GỐC kiểu Long; mô hình hóa string vì vượt phạm vi FHIR R4 integer 32-bit (INFORMATIVE) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 32. vnHealthCheckupDataSyncEnvelopeLm.data | |
| Definition | data - File dữ liệu (XML/JSON) đã encode Base64 (STRING BASE64 theo quy tắc mục 4 PL02). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Short | data - File dữ liệu (XML/JSON) đã encode Base64 (STRING BASE64 theo quy tắc mục 4 PL02). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 34. vnHealthCheckupDataSyncEnvelopeLm.signature | |
| Definition | signature - Chữ ký số checksum RSASHA256 giữa header và data (bên phát tin tạo). Công thức PL02 mục 4: A=Uppercase(SHA256(header)); B=Uppercase(SHA256(data)); C=A+'.'+B; SIGNATURE=Uppercase(RSASHA256(C, Private Key)). Quy tắc: bỏ whitespace/xuống dòng trước khi hash; header rỗng truyền {}; data là STRING BASE64. BYT cấp cặp khóa cho đơn vị; bản tin còn phải KÝ SỐ TỔ CHỨC trước khi gửi (Trục xác thực trước khi nhận). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Short | signature - Chữ ký số checksum RSASHA256 giữa header và data (bên phát tin tạo). Công thức PL02 mục 4: A=Uppercase(SHA256(header)); B=Uppercase(SHA256(data)); C=A+'.'+B; SIGNATURE=Uppercase(RSASHA256(C, Private Key)). Quy tắc: bỏ whitespace/xuống dòng trước khi hash; header rỗng truyền {}; data là STRING BASE64. BYT cấp cặp khóa cho đơn vị; bản tin còn phải KÝ SỐ TỔ CHỨC trước khi gửi (Trục xác thực trước khi nhận). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 36. vnHealthCheckupDataSyncEnvelopeLm.response | |
| Definition | Bản tin phản hồi từ Trục BYT (msg_type=102) |
| Short | Bản tin phản hồi từ Trục BYT (msg_type=102) |
| Control | 0..1 |
| Type | BackboneElement |
| 38. vnHealthCheckupDataSyncEnvelopeLm.response.version | |
| Definition | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Short | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Note | This is a business version Id, not a resource version Id (see discussion) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 40. vnHealthCheckupDataSyncEnvelopeLm.response.senderId | |
| Definition | sender_id (response) - Mã bên nhận-nay-phát (ví dụ TDLBYT) |
| Short | sender_id (response) - Mã bên nhận-nay-phát (ví dụ TDLBYT) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 42. vnHealthCheckupDataSyncEnvelopeLm.response.receiverId | |
| Definition | receiver_id (response) - Mã bên phát tin gốc (13 số mã định danh CSKCB) |
| Short | receiver_id (response) - Mã bên phát tin gốc (13 số mã định danh CSKCB) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 44. vnHealthCheckupDataSyncEnvelopeLm.response.txnId | |
| Definition | txn_id - Mã giao dịch do Trục sinh = XX (2 ký tự dịch vụ) + '-' + sender_id + '-' + YY + MM + DD + UUIDv4 không gạch (cấu trúc KHÁC msg_id) |
| Short | txn_id - Mã giao dịch do Trục sinh = XX (2 ký tự dịch vụ) + '-' + sender_id + '-' + YY + MM + DD + UUIDv4 không gạch (cấu trúc KHÁC msg_id) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 46. vnHealthCheckupDataSyncEnvelopeLm.response.txnType | |
| Definition | txn_type (response) = sync_checkup |
| Short | txn_type (response) = sync_checkup |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 48. vnHealthCheckupDataSyncEnvelopeLm.response.msgType | |
| Definition | msg_type (response) = 102 (Trục đã nhận dữ liệu và thực hiện đồng bộ) |
| Short | msg_type (response) = 102 (Trục đã nhận dữ liệu và thực hiện đồng bộ) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 50. vnHealthCheckupDataSyncEnvelopeLm.response.msgId | |
| Definition | msg_id (response) - sender_id + YY + MM + DD + UUIDv4 không gạch |
| Short | msg_id (response) - sender_id + YY + MM + DD + UUIDv4 không gạch |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 52. vnHealthCheckupDataSyncEnvelopeLm.response.refMsgId | |
| Definition | ref_msg_id - msg_id của bên phát tin gốc |
| Short | ref_msg_id - msg_id của bên phát tin gốc |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 54. vnHealthCheckupDataSyncEnvelopeLm.response.sendDatetime | |
| Definition | send_datetime (response) - Ngày gửi của bên phát tin, Unix timestamp 13 số |
| Short | send_datetime (response) - Ngày gửi của bên phát tin, Unix timestamp 13 số |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 56. vnHealthCheckupDataSyncEnvelopeLm.response.resDatetime | |
| Definition | res_datetime - Ngày phản hồi của bên nhận tin (Unix timestamp 13 số) |
| Short | res_datetime - Ngày phản hồi của bên nhận tin (Unix timestamp 13 số) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 58. vnHealthCheckupDataSyncEnvelopeLm.response.resCode | |
| Definition | res_code - Mã trạng thái tiếp nhận, đủ 10 mã theo PL02: CM_SUCCESS | CM_INVALID_REQUEST | PS_DS_RSA_SIGNATURE_INVALID | PS_DS_RSA_SIGNATURE_MISSING | PS_DS_CA_SIGNATURE_INVALID | PS_DS_CA_SIGNATURE_MISSING | PS_DS_VERIFY_SUCCESS | PS_DS_VERIFY_FAIL | PS_DS_SAVE_SUCCESS | PS_DS_SAVE_FAIL |
| Short | res_code - Mã trạng thái tiếp nhận, đủ 10 mã theo PL02: CM_SUCCESS | CM_INVALID_REQUEST | PS_DS_RSA_SIGNATURE_INVALID | PS_DS_RSA_SIGNATURE_MISSING | PS_DS_CA_SIGNATURE_INVALID | PS_DS_CA_SIGNATURE_MISSING | PS_DS_VERIFY_SUCCESS | PS_DS_VERIFY_FAIL | PS_DS_SAVE_SUCCESS | PS_DS_SAVE_FAIL |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 60. vnHealthCheckupDataSyncEnvelopeLm.response.resMsg | |
| Definition | res_msg - Diễn giải trạng thái tiếp nhận |
| Short | res_msg - Diễn giải trạng thái tiếp nhận |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 62. vnHealthCheckupDataSyncEnvelopeLm.response.dataState | |
| Definition | data.data_state - Mã trạng thái dữ liệu sau khi về kho (vd '0') |
| Short | data.data_state - Mã trạng thái dữ liệu sau khi về kho (vd '0') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 64. vnHealthCheckupDataSyncEnvelopeLm.response.dataStateMsg | |
| Definition | data.data_state_msg - Chi tiết trạng thái dữ liệu (vd 'Data is received') |
| Short | data.data_state_msg - Chi tiết trạng thái dữ liệu (vd 'Data is received') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 66. vnHealthCheckupDataSyncEnvelopeLm.response.messageCheckCa | |
| Definition | data.message_check_ca - Trạng thái kiểm tra chữ ký số bản tin (vd 'Digitally signed XML data') |
| Short | data.message_check_ca - Trạng thái kiểm tra chữ ký số bản tin (vd 'Digitally signed XML data') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 68. vnHealthCheckupDataSyncEnvelopeLm.response.messageNotify | |
| Definition | data.message_notify - Trạng thái hệ thống với bản tin (vd 'Successfully inserted data to DATA LAKE') |
| Short | data.message_notify - Trạng thái hệ thống với bản tin (vd 'Successfully inserted data to DATA LAKE') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 70. vnHealthCheckupDataSyncEnvelopeLm.response.signature | |
| Definition | signature (response) - Chữ ký RSASHA256 của Trục BYT |
| Short | signature (response) - Chữ ký RSASHA256 của Trục BYT |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 72. vnHealthCheckupDataSyncEnvelopeLm.authLogin | |
| Definition | Xác thực tài khoản liên thông (POST /api/auth/login) — INFORMATIVE, TRANSPORT-ONLY: username/password/token là thông tin phiên truyền tải, TUYỆT ĐỐI không persist vào FHIR store/clinical Bundle/log; quản lý trong lớp IAM của hệ thống gửi |
| Short | Xác thực tài khoản liên thông (POST /api/auth/login) — INFORMATIVE, TRANSPORT-ONLY: username/password/token là thông tin phiên truyền tải, TUYỆT ĐỐI không persist vào FHIR store/clinical Bundle/log; quản lý trong lớp IAM của hệ thống gửi |
| Control | 0..1 |
| Type | BackboneElement |
| 74. vnHealthCheckupDataSyncEnvelopeLm.authLogin.username | |
| Definition | username - Tên đăng nhập tài khoản liên thông do Trục dữ liệu BYT cấp |
| Short | username - Tên đăng nhập tài khoản liên thông do Trục dữ liệu BYT cấp |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 76. vnHealthCheckupDataSyncEnvelopeLm.authLogin.password | |
| Definition | password - Mật khẩu |
| Short | password - Mật khẩu |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 78. vnHealthCheckupDataSyncEnvelopeLm.authLogin.token | |
| Definition | data.token - Token gọi API nghiệp vụ (response) |
| Short | data.token - Token gọi API nghiệp vụ (response) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 80. vnHealthCheckupDataSyncEnvelopeLm.authLogin.refreshToken | |
| Definition | data.refresh_token - Cấp lại token khi hết hiệu lực |
| Short | data.refresh_token - Cấp lại token khi hết hiệu lực |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 82. vnHealthCheckupDataSyncEnvelopeLm.authLogin.duration | |
| Definition | data.duration - Thời gian hiệu lực token, đơn vị giây (VĂN BẢN GỐC kiểu Long) |
| Short | data.duration - Thời gian hiệu lực token, đơn vị giây (VĂN BẢN GỐC kiểu Long) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 84. vnHealthCheckupDataSyncEnvelopeLm.authLogin.role | |
| Definition | data.role - Phân quyền: facility (Cơ sở KCB) | doh (Sở Y tế) |
| Short | data.role - Phân quyền: facility (Cơ sở KCB) | doh (Sở Y tế) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 86. vnHealthCheckupDataSyncEnvelopeLm.authLogin.resCode | |
| Definition | header.res_code - CM_SUCCESS | CM_AUTH_ACCOUNT_FAIL |
| Short | header.res_code - CM_SUCCESS | CM_AUTH_ACCOUNT_FAIL |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
Guidance on how to interpret the contents of this table can be foundhere
| 0. vnHealthCheckupDataSyncEnvelopeLm | |
| Definition | Logical model cho bản tin (envelope) đồng bộ tự động tập dữ liệu khám sức khỏe định kỳ từ cơ sở KCB lên Cổng/Trục dữ liệu sức khỏe Bộ Y tế (api.emrhub.vn). API: POST /api/platform/data-sync/push. Xác thực: OAuth2 + Bearer Token (lấy từ /api/auth/login). Định dạng JSON (UTF-8). KHÁC với luồng BHYT Gateway (gdbhyt.baohiemxahoi.gov.vn, XML 4210) — đây là surface liên thông KSK quốc gia. INFORMATIVE / non-normative: đây là mô hình ánh xạ transport envelope (không phải FHIR resource normative). Các National Core IG (KR/JP) chỉ chuẩn hóa profile/search/capability RESTful; envelope được giữ làm mapping aid để implementer ánh xạ payload FHIR ↔ bản tin đồng bộ. Môi trường (PL02 mục 2): Cổng dữ liệu sức khỏe BYT — admin https://csdlksk.vn (sandbox https://sandbox.csdlksk.vn); Trục dữ liệu BYT — admin https://admin.emrhub.vn (sandbox https://admin-sandbox.emrhub.vn), API https://api.emrhub.vn (sandbox https://api-sandbox.emrhub.vn). Căn cứ: QĐ 2062/QĐ-BYT (07/7/2026) Phụ lục 02 (Hướng dẫn kết nối, liên thông dữ liệu) — THAY Phụ lục 02 QĐ 1551/QĐ-BYT (31/5/2026); đọc hợp nhất. API OAuth2 + Bearer, POST /api/platform/data-sync/push (service-type=100, msg_type=101/102, txn_type=sync_checkup), checksum RSASHA256. ĐÃ ĐỐI CHIẾU TOÀN VĂN PL02 ngày 23/07/2026 (file 'Phu luc 2-5.pdf' nhúng trong bản docx user cung cấp). |
| Short | Bản tin đồng bộ dữ liệu KSK lên Trục dữ liệu BYT — Logical Model (Phụ lục 02) |
| Control | 0..* |
| Is Modifier | false |
| Logical Model | Instances of this logical model are not marked to be the target of a Reference |
| 2. vnHealthCheckupDataSyncEnvelopeLm.httpHeader | |
| Definition | HTTP headers của request |
| Short | HTTP headers của request |
| Control | 1..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 4. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 6. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.httpHeader.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 8. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| 10. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.contentType | |
| Definition | Content-Type = application/json |
| Short | Content-Type = application/json |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 12. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.accept | |
| Definition | Accept = / |
| Short | Accept = */* |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 14. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.acceptEncoding | |
| Definition | Accept-Encoding = gzip,deflate,br |
| Short | Accept-Encoding = gzip,deflate,br |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 16. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.authorization | |
| Definition | Authorization = Bearer + Authorization Token (văn bản gọi 'Authorization Token'; lấy từ POST /api/auth/login — response cấp token/refresh_token/duration giây/role: facility=Cơ sở KCB, doh=Sở Y tế) |
| Short | Authorization = Bearer + Authorization Token (văn bản gọi 'Authorization Token'; lấy từ POST /api/auth/login — response cấp token/refresh_token/duration giây/role: facility=Cơ sở KCB, doh=Sở Y tế) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 18. vnHealthCheckupDataSyncEnvelopeLm.httpHeader.serviceType | |
| Definition | service-type = 100 (Dịch vụ data sync vào Trục dữ liệu Bộ Y tế) |
| Short | service-type = 100 (Dịch vụ data sync vào Trục dữ liệu Bộ Y tế) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 20. vnHealthCheckupDataSyncEnvelopeLm.header | |
| Definition | header - Thông tin header bản tin (JSON Object) |
| Short | header - Thông tin header bản tin (JSON Object) |
| Control | 1..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 22. vnHealthCheckupDataSyncEnvelopeLm.header.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 24. vnHealthCheckupDataSyncEnvelopeLm.header.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.header.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 26. vnHealthCheckupDataSyncEnvelopeLm.header.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| 28. vnHealthCheckupDataSyncEnvelopeLm.header.version | |
| Definition | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Short | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Note | This is a business version Id, not a resource version Id (see discussion) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 30. vnHealthCheckupDataSyncEnvelopeLm.header.senderId | |
| Definition | sender_id - Mã định danh bên phát tin (13 số mã định danh CSKCB từ Cục KCB) |
| Short | sender_id - Mã định danh bên phát tin (13 số mã định danh CSKCB từ Cục KCB) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 32. vnHealthCheckupDataSyncEnvelopeLm.header.receiverId | |
| Definition | receiver_id - Mã bên nhận tin (vd: TDLBYT) |
| Short | receiver_id - Mã bên nhận tin (vd: TDLBYT) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 34. vnHealthCheckupDataSyncEnvelopeLm.header.txnType | |
| Definition | txn_type - Loại giao dịch. Giá trị cố định: sync_checkup (đồng bộ tập dữ liệu KSK định kỳ) |
| Short | txn_type - Loại giao dịch. Giá trị cố định: sync_checkup (đồng bộ tập dữ liệu KSK định kỳ) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 36. vnHealthCheckupDataSyncEnvelopeLm.header.msgId | |
| Definition | msg_id - Mã giao dịch = sender_id + YY (2 ký tự năm) + MM (2 ký tự tháng) + DD (2 ký tự ngày) + UUIDv4 (không gạch) |
| Short | msg_id - Mã giao dịch = sender_id + YY (2 ký tự năm) + MM (2 ký tự tháng) + DD (2 ký tự ngày) + UUIDv4 (không gạch) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 38. vnHealthCheckupDataSyncEnvelopeLm.header.msgType | |
| Definition | msg_type - REQUEST cố định = 101 (thông điệp phát tin đồng bộ). Response dùng 102 (xem nhóm response bên dưới). service-type=100 |
| Short | msg_type - REQUEST cố định = 101 (thông điệp phát tin đồng bộ). Response dùng 102 (xem nhóm response bên dưới). service-type=100 |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 40. vnHealthCheckupDataSyncEnvelopeLm.header.dataType | |
| Definition | data_type - Định dạng file. Giá trị: xml/base64 HOẶC json/base64 (chỉ 2 giá trị này theo Phụ lục 02) |
| Short | data_type - Định dạng file. Giá trị: xml/base64 HOẶC json/base64 (chỉ 2 giá trị này theo Phụ lục 02) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 42. vnHealthCheckupDataSyncEnvelopeLm.header.sendDatetime | |
| Definition | send_datetime - Thời điểm đẩy dữ liệu, Unix timestamp 13 số. VĂN BẢN GỐC kiểu Long; mô hình hóa string vì vượt phạm vi FHIR R4 integer 32-bit (INFORMATIVE) |
| Short | send_datetime - Thời điểm đẩy dữ liệu, Unix timestamp 13 số. VĂN BẢN GỐC kiểu Long; mô hình hóa string vì vượt phạm vi FHIR R4 integer 32-bit (INFORMATIVE) |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 44. vnHealthCheckupDataSyncEnvelopeLm.data | |
| Definition | data - File dữ liệu (XML/JSON) đã encode Base64 (STRING BASE64 theo quy tắc mục 4 PL02). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Short | data - File dữ liệu (XML/JSON) đã encode Base64 (STRING BASE64 theo quy tắc mục 4 PL02). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 46. vnHealthCheckupDataSyncEnvelopeLm.signature | |
| Definition | signature - Chữ ký số checksum RSASHA256 giữa header và data (bên phát tin tạo). Công thức PL02 mục 4: A=Uppercase(SHA256(header)); B=Uppercase(SHA256(data)); C=A+'.'+B; SIGNATURE=Uppercase(RSASHA256(C, Private Key)). Quy tắc: bỏ whitespace/xuống dòng trước khi hash; header rỗng truyền {}; data là STRING BASE64. BYT cấp cặp khóa cho đơn vị; bản tin còn phải KÝ SỐ TỔ CHỨC trước khi gửi (Trục xác thực trước khi nhận). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Short | signature - Chữ ký số checksum RSASHA256 giữa header và data (bên phát tin tạo). Công thức PL02 mục 4: A=Uppercase(SHA256(header)); B=Uppercase(SHA256(data)); C=A+'.'+B; SIGNATURE=Uppercase(RSASHA256(C, Private Key)). Quy tắc: bỏ whitespace/xuống dòng trước khi hash; header rỗng truyền {}; data là STRING BASE64. BYT cấp cặp khóa cho đơn vị; bản tin còn phải KÝ SỐ TỔ CHỨC trước khi gửi (Trục xác thực trước khi nhận). Bắt buộc trong thực tế dù bảng gốc không đánh dấu 'x' |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 48. vnHealthCheckupDataSyncEnvelopeLm.response | |
| Definition | Bản tin phản hồi từ Trục BYT (msg_type=102) |
| Short | Bản tin phản hồi từ Trục BYT (msg_type=102) |
| Control | 0..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 50. vnHealthCheckupDataSyncEnvelopeLm.response.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 52. vnHealthCheckupDataSyncEnvelopeLm.response.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.response.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 54. vnHealthCheckupDataSyncEnvelopeLm.response.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| 56. vnHealthCheckupDataSyncEnvelopeLm.response.version | |
| Definition | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Short | version - Phiên bản hệ thống Trục dữ liệu BYT |
| Note | This is a business version Id, not a resource version Id (see discussion) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 58. vnHealthCheckupDataSyncEnvelopeLm.response.senderId | |
| Definition | sender_id (response) - Mã bên nhận-nay-phát (ví dụ TDLBYT) |
| Short | sender_id (response) - Mã bên nhận-nay-phát (ví dụ TDLBYT) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 60. vnHealthCheckupDataSyncEnvelopeLm.response.receiverId | |
| Definition | receiver_id (response) - Mã bên phát tin gốc (13 số mã định danh CSKCB) |
| Short | receiver_id (response) - Mã bên phát tin gốc (13 số mã định danh CSKCB) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 62. vnHealthCheckupDataSyncEnvelopeLm.response.txnId | |
| Definition | txn_id - Mã giao dịch do Trục sinh = XX (2 ký tự dịch vụ) + '-' + sender_id + '-' + YY + MM + DD + UUIDv4 không gạch (cấu trúc KHÁC msg_id) |
| Short | txn_id - Mã giao dịch do Trục sinh = XX (2 ký tự dịch vụ) + '-' + sender_id + '-' + YY + MM + DD + UUIDv4 không gạch (cấu trúc KHÁC msg_id) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 64. vnHealthCheckupDataSyncEnvelopeLm.response.txnType | |
| Definition | txn_type (response) = sync_checkup |
| Short | txn_type (response) = sync_checkup |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 66. vnHealthCheckupDataSyncEnvelopeLm.response.msgType | |
| Definition | msg_type (response) = 102 (Trục đã nhận dữ liệu và thực hiện đồng bộ) |
| Short | msg_type (response) = 102 (Trục đã nhận dữ liệu và thực hiện đồng bộ) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 68. vnHealthCheckupDataSyncEnvelopeLm.response.msgId | |
| Definition | msg_id (response) - sender_id + YY + MM + DD + UUIDv4 không gạch |
| Short | msg_id (response) - sender_id + YY + MM + DD + UUIDv4 không gạch |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 70. vnHealthCheckupDataSyncEnvelopeLm.response.refMsgId | |
| Definition | ref_msg_id - msg_id của bên phát tin gốc |
| Short | ref_msg_id - msg_id của bên phát tin gốc |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 72. vnHealthCheckupDataSyncEnvelopeLm.response.sendDatetime | |
| Definition | send_datetime (response) - Ngày gửi của bên phát tin, Unix timestamp 13 số |
| Short | send_datetime (response) - Ngày gửi của bên phát tin, Unix timestamp 13 số |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 74. vnHealthCheckupDataSyncEnvelopeLm.response.resDatetime | |
| Definition | res_datetime - Ngày phản hồi của bên nhận tin (Unix timestamp 13 số) |
| Short | res_datetime - Ngày phản hồi của bên nhận tin (Unix timestamp 13 số) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 76. vnHealthCheckupDataSyncEnvelopeLm.response.resCode | |
| Definition | res_code - Mã trạng thái tiếp nhận, đủ 10 mã theo PL02: CM_SUCCESS | CM_INVALID_REQUEST | PS_DS_RSA_SIGNATURE_INVALID | PS_DS_RSA_SIGNATURE_MISSING | PS_DS_CA_SIGNATURE_INVALID | PS_DS_CA_SIGNATURE_MISSING | PS_DS_VERIFY_SUCCESS | PS_DS_VERIFY_FAIL | PS_DS_SAVE_SUCCESS | PS_DS_SAVE_FAIL |
| Short | res_code - Mã trạng thái tiếp nhận, đủ 10 mã theo PL02: CM_SUCCESS | CM_INVALID_REQUEST | PS_DS_RSA_SIGNATURE_INVALID | PS_DS_RSA_SIGNATURE_MISSING | PS_DS_CA_SIGNATURE_INVALID | PS_DS_CA_SIGNATURE_MISSING | PS_DS_VERIFY_SUCCESS | PS_DS_VERIFY_FAIL | PS_DS_SAVE_SUCCESS | PS_DS_SAVE_FAIL |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 78. vnHealthCheckupDataSyncEnvelopeLm.response.resMsg | |
| Definition | res_msg - Diễn giải trạng thái tiếp nhận |
| Short | res_msg - Diễn giải trạng thái tiếp nhận |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 80. vnHealthCheckupDataSyncEnvelopeLm.response.dataState | |
| Definition | data.data_state - Mã trạng thái dữ liệu sau khi về kho (vd '0') |
| Short | data.data_state - Mã trạng thái dữ liệu sau khi về kho (vd '0') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 82. vnHealthCheckupDataSyncEnvelopeLm.response.dataStateMsg | |
| Definition | data.data_state_msg - Chi tiết trạng thái dữ liệu (vd 'Data is received') |
| Short | data.data_state_msg - Chi tiết trạng thái dữ liệu (vd 'Data is received') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 84. vnHealthCheckupDataSyncEnvelopeLm.response.messageCheckCa | |
| Definition | data.message_check_ca - Trạng thái kiểm tra chữ ký số bản tin (vd 'Digitally signed XML data') |
| Short | data.message_check_ca - Trạng thái kiểm tra chữ ký số bản tin (vd 'Digitally signed XML data') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 86. vnHealthCheckupDataSyncEnvelopeLm.response.messageNotify | |
| Definition | data.message_notify - Trạng thái hệ thống với bản tin (vd 'Successfully inserted data to DATA LAKE') |
| Short | data.message_notify - Trạng thái hệ thống với bản tin (vd 'Successfully inserted data to DATA LAKE') |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 88. vnHealthCheckupDataSyncEnvelopeLm.response.signature | |
| Definition | signature (response) - Chữ ký RSASHA256 của Trục BYT |
| Short | signature (response) - Chữ ký RSASHA256 của Trục BYT |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 90. vnHealthCheckupDataSyncEnvelopeLm.authLogin | |
| Definition | Xác thực tài khoản liên thông (POST /api/auth/login) — INFORMATIVE, TRANSPORT-ONLY: username/password/token là thông tin phiên truyền tải, TUYỆT ĐỐI không persist vào FHIR store/clinical Bundle/log; quản lý trong lớp IAM của hệ thống gửi |
| Short | Xác thực tài khoản liên thông (POST /api/auth/login) — INFORMATIVE, TRANSPORT-ONLY: username/password/token là thông tin phiên truyền tải, TUYỆT ĐỐI không persist vào FHIR store/clinical Bundle/log; quản lý trong lớp IAM của hệ thống gửi |
| Control | 0..1 |
| Type | BackboneElement |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count())) |
| 92. vnHealthCheckupDataSyncEnvelopeLm.authLogin.id | |
| Definition | Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Short | Unique id for inter-element referencing |
| Control | 0..1 |
| Type | string |
| Is Modifier | false |
| XML Format | In the XML format, this property is represented as an attribute. |
| Summary | false |
| 94. vnHealthCheckupDataSyncEnvelopeLm.authLogin.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Short | Additional content defined by implementations |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | false |
| Summary | false |
| Alternate Names | extensions, user content |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| Slicing | This element introduces a set of slices on vnHealthCheckupDataSyncEnvelopeLm.authLogin.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators: |
| 96. vnHealthCheckupDataSyncEnvelopeLm.authLogin.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself). |
| Short | Extensions that cannot be ignored even if unrecognized |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them |
| Summary | true |
| Requirements | Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions. |
| Alternate Names | extensions, user content, modifiers |
| Invariants | ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))ext-1: Must have either extensions or value[x], not both ( extension.exists() != value.exists()) |
| 98. vnHealthCheckupDataSyncEnvelopeLm.authLogin.username | |
| Definition | username - Tên đăng nhập tài khoản liên thông do Trục dữ liệu BYT cấp |
| Short | username - Tên đăng nhập tài khoản liên thông do Trục dữ liệu BYT cấp |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 100. vnHealthCheckupDataSyncEnvelopeLm.authLogin.password | |
| Definition | password - Mật khẩu |
| Short | password - Mật khẩu |
| Control | 1..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 102. vnHealthCheckupDataSyncEnvelopeLm.authLogin.token | |
| Definition | data.token - Token gọi API nghiệp vụ (response) |
| Short | data.token - Token gọi API nghiệp vụ (response) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 104. vnHealthCheckupDataSyncEnvelopeLm.authLogin.refreshToken | |
| Definition | data.refresh_token - Cấp lại token khi hết hiệu lực |
| Short | data.refresh_token - Cấp lại token khi hết hiệu lực |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 106. vnHealthCheckupDataSyncEnvelopeLm.authLogin.duration | |
| Definition | data.duration - Thời gian hiệu lực token, đơn vị giây (VĂN BẢN GỐC kiểu Long) |
| Short | data.duration - Thời gian hiệu lực token, đơn vị giây (VĂN BẢN GỐC kiểu Long) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 108. vnHealthCheckupDataSyncEnvelopeLm.authLogin.role | |
| Definition | data.role - Phân quyền: facility (Cơ sở KCB) | doh (Sở Y tế) |
| Short | data.role - Phân quyền: facility (Cơ sở KCB) | doh (Sở Y tế) |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 110. vnHealthCheckupDataSyncEnvelopeLm.authLogin.resCode | |
| Definition | header.res_code - CM_SUCCESS | CM_AUTH_ACCOUNT_FAIL |
| Short | header.res_code - CM_SUCCESS | CM_AUTH_ACCOUNT_FAIL |
| Control | 0..1 |
| Type | string |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |