HL7 Vietnam VN Core FHIR Implementation Guide

Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide
0.10.0 - Draft for Community Review Viet Nam cờ

Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide - Draft for Community Review (v0.10.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Phần mở rộng: Nội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension

URL chính thức: http://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure Phiên bản: 0.10.0
Computable Name: VNCoreExtConsentDisclosure
Định danh khác: OID:2.25.161089673617632664299011809196868855799.42.130

Bản quyền/Pháp lý: Quốc hội Việt Nam và Chính phủ — Luật 91/2025/QH15 Điều 9; NĐ 356/2025/NĐ-CP Điều 6.

Bằng chứng về nội dung đã thông báo cho chủ thể dữ liệu tại thời điểm xin sự đồng ý, theo Luật 91/2025/QH15 Điều 9 khoản 2 và NĐ 356/2025/NĐ-CP Điều 6.

Vì sao cần. Luật đặt điều kiện hiệu lực cho sự đồng ý: chỉ có hiệu lực khi chủ thể biết rõ ba nhóm thông tin. Trước 0.10.0, VN Core chỉ có Consent.organization (tổ chức quản lý bản ghi — mà chính profile ghi rõ là KHÔNG suy ra được vai trò pháp lý), provision.purpose (mục đích) và source[x] (bản gốc tuỳ chọn). Không có chỗ nào mang loại dữ liệu đã thông báo, danh tính và vai trò của bên kiểm soát, hay bản thông báo quyền và nghĩa vụ. Khi tranh chấp, nghĩa vụ chứng minh thuộc về bên kiểm soát (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) — mà dữ liệu để chứng minh thì không tồn tại.

Bốn phần tử bắt buộc bám bốn yêu cầu của văn bản:

Căn cứ Yêu cầu của văn bản Phần tử
Luật 91/2025/QH15 Điều 9 khoản 2 điểm a Loại dữ liệu cá nhân được xử lý dataCategory
Luật 91/2025/QH15 Điều 9 khoản 2 điểm b Bên kiểm soát, hoặc bên kiểm soát và xử lý controller + controllerRole
Luật 91/2025/QH15 Điều 9 khoản 2 điểm c Các quyền, nghĩa vụ của chủ thể dữ liệu rightsNotice
NĐ 356/2025/NĐ-CP Điều 6 khoản 4 Thông báo dữ liệu cần xử lý là DLCN nhạy cảm sensitiveDataNotice

Mục đích xử lý — nửa còn lại của điểm a — vẫn nằm ở Consent.provision.provision.purpose, nơi FHIR đã có sẵn ngữ nghĩa và nơi sự đồng ý được thể hiện theo TỪNG mục đích (Điều 9 khoản 4 điểm a); VNCoreConsent ép mọi rule permit phải có purpose.

Khai báo, không phải phép màu. Extension này ghi lại hệ thống tuyên bố đã thông báo những gì. Nó không tự chứng minh rằng nội dung đó đã thực sự đến với chủ thể, cũng không thay cho bản gốc đồng ý. Giá trị của nó là biến nghĩa vụ chứng minh thành dữ liệu kiểm được: thiếu phần tử nào thì thấy ngay, và bản ghi nào thiếu thì không đạt profile.

Context of Use

    This extension may be used on the following element(s)

Usage info

Usages:

You can also check for usages in the FHIR IG Statistics

Các dạng xem hình thức của nội dung phần mở rộng

Mô tả profile, differential, snapshot và các biểu diễn liên quan.

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Extension.extension:dataCategory.​value[x] Base required Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet 📦0.10.0 This IG
Extension.extension:controllerRole.​value[x] Base required Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet 📦0.10.0 This IG

Terminology Bindings

Path Status Usage ValueSet Version Source
Extension.extension:dataCategory.​value[x] Base required Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet 📦0.10.0 This IG
Extension.extension:controllerRole.​value[x] Base required Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet 📦0.10.0 This IG

Constraints

Id Grade Path(s) Description Expression
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Summary

Complex Extension: Bằng chứng về nội dung đã thông báo cho chủ thể dữ liệu tại thời điểm xin sự đồng ý, theo Luật 91/2025/QH15 Điều 9 khoản 2 và NĐ 356/2025/NĐ-CP Điều 6. Vì sao cần. Luật đặt điều kiện hiệu lực cho sự đồng ý: chỉ có hiệu lực khi chủ thể biết rõ ba nhóm thông tin. Trước 0.10.0, VN Core chỉ có Consent.organization (tổ chức quản lý bản ghi — mà chính profile ghi rõ là KHÔNG suy ra được vai trò pháp lý), provision.purpose (mục đích) và source[x] (bản gốc tuỳ chọn). Không có chỗ nào mang loại dữ liệu đã thông báo, danh tính và vai trò của bên kiểm soát, hay bản thông báo quyền và nghĩa vụ. Khi tranh chấp, nghĩa vụ chứng minh thuộc về bên kiểm soát (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) — mà dữ liệu để chứng minh thì không tồn tại. Bốn phần tử bắt buộc bám bốn yêu cầu của văn bản:

Căn cứ Yêu cầu của văn bản Phần tử
Luật 91/2025/QH15 Điều 9 khoản 2 điểm a Loại dữ liệu cá nhân được xử lý dataCategory
Luật 91/2025/QH15 Điều 9 khoản 2 điểm b Bên kiểm soát, hoặc bên kiểm soát và xử lý controller + controllerRole
Luật 91/2025/QH15 Điều 9 khoản 2 điểm c Các quyền, nghĩa vụ của chủ thể dữ liệu rightsNotice
NĐ 356/2025/NĐ-CP Điều 6 khoản 4 Thông báo dữ liệu cần xử lý là DLCN nhạy cảm sensitiveDataNotice
Mục đích xử lý — nửa còn lại của điểm a — vẫn nằm ở Consent.provision.provision.purpose, nơi FHIR đã có sẵn ngữ nghĩa và nơi sự đồng ý được thể hiện theo TỪNG mục đích (Điều 9 khoản 4 điểm a); VNCoreConsent ép mọi rule permit phải có purpose. Khai báo, không phải phép màu. Extension này ghi lại hệ thống tuyên bố đã thông báo những gì. Nó không tự chứng minh rằng nội dung đó đã thực sự đến với chủ thể, cũng không thay cho bản gốc đồng ý. Giá trị của nó là biến nghĩa vụ chứng minh thành dữ liệu kiểm được: thiếu phần tử nào thì thấy ngay, và bản ghi nào thiếu thì không đạt profile.

  • dataCategory: CodeableConcept: Khai theo danh mục do NĐ 356/2025/NĐ-CP ban hành: Điều 3 (cơ bản) và Điều 4 khoản 1 (nhạy cảm). Nhiều nhóm thì lặp phần tử. Đây là phạm trù dữ liệu cá nhân theo luật, khác với Consent.provision.class là kiểu tài nguyên FHIR — một bản ghi có thể khai health-status ở đây và Observation, Condition ở provision.class.
  • controller: Reference: Tổ chức đã được nêu tên với chủ thể dữ liệu khi xin đồng ý. Thường trùng Consent.organization, nhưng KHÔNG mặc nhiên là một: Consent.organization là tổ chức quản lý bản ghi, còn phần tử này là bên mà chủ thể được cho biết sẽ quyết định mục đích và phương tiện xử lý. Khi hai bên khác nhau, phải khai riêng.
  • controllerRole: Coding: Vai trò theo Luật 91/2025/QH15 Điều 2. Điều 9 khoản 2 điểm b chỉ nêu hai vai trò được thông báo khi xin đồng ý: bên kiểm soát (khoản 7) hoặc bên kiểm soát và xử lý (khoản 9); invariant vn-consent-disclosed-controller-role trên VNCoreConsent chặn hai vai trò còn lại. ValueSet vẫn giữ đủ bốn mã vì taxonomy này còn dùng ở ngữ cảnh khác.
  • rightsNotice: url, Reference: Phải xác định được ĐÚNG bản đã trình, không phải một trang chính sách chung chung đổi nội dung theo thời gian: dùng DocumentReference có version/hash, hoặc URL trỏ tới một bản đã ghim phiên bản. Đây là điểm khác giữa rightsNotice và Consent.policy.uri — policy.uri trỏ tới VĂN BẢN PHÁP LUẬT làm căn cứ, còn phần tử này trỏ tới NỘI DUNG ĐÃ TRÌNH cho chủ thể.
  • sensitiveDataNotice: boolean: true khi chủ thể đã được thông báo rằng dữ liệu cần xử lý là dữ liệu cá nhân nhạy cảm. Phần tử bắt buộc khai chứ không bắt buộc true: khai false là một tuyên bố thật — rằng thông báo này KHÔNG được đưa ra — và khi nội dung đã thông báo có chạm danh mục nhạy cảm thì invariant vn-consent-sensitive-notice-required sẽ chặn. Bắt buộc khai để không tồn tại trạng thái im lặng, thứ khiến hồ sơ vừa không chứng minh được đã thông báo vừa không thừa nhận là chưa.
  • disclosedAt: dateTime: Nếu khai thì phải KHÔNG SAU Consent.dateTime (invariant vn-consent-disclosure-before-consent) — không thể thông báo sau khi người ta đã đồng ý. Để tuỳ chọn vì nhiều luồng thông báo và đồng ý diễn ra trong cùng một phiên, khi đó Consent.dateTime đã đủ.
  • evidenceLocator: string: Định danh hồ sơ/bản ghi lưu trữ bên ngoài: mã hồ sơ lưu trữ, mã bản ghi âm cuộc gọi, mã giao dịch của nền tảng ký điện tử. VNCoreConsent yêu cầu mỗi bản ghi có rule permit phải có source[x] HOẶC phần tử này (invariant vn-consent-permit-evidence-retained) — bằng chứng được phép nằm ngoài FHIR, nhưng không được phép không tồn tại.

Dạng xem DifferentialDifferential View

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Extension.extension:dataCategory.​value[x] Base required Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet 📦0.10.0 This IG
Extension.extension:controllerRole.​value[x] Base required Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet 📦0.10.0 This IG

Dạng xem Snapshot

Terminology Bindings

Path Status Usage ValueSet Version Source
Extension.extension:dataCategory.​value[x] Base required Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet 📦0.10.0 This IG
Extension.extension:controllerRole.​value[x] Base required Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet 📦0.10.0 This IG

Constraints

Id Grade Path(s) Description Expression
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Summary

Complex Extension: Bằng chứng về nội dung đã thông báo cho chủ thể dữ liệu tại thời điểm xin sự đồng ý, theo Luật 91/2025/QH15 Điều 9 khoản 2 và NĐ 356/2025/NĐ-CP Điều 6. Vì sao cần. Luật đặt điều kiện hiệu lực cho sự đồng ý: chỉ có hiệu lực khi chủ thể biết rõ ba nhóm thông tin. Trước 0.10.0, VN Core chỉ có Consent.organization (tổ chức quản lý bản ghi — mà chính profile ghi rõ là KHÔNG suy ra được vai trò pháp lý), provision.purpose (mục đích) và source[x] (bản gốc tuỳ chọn). Không có chỗ nào mang loại dữ liệu đã thông báo, danh tính và vai trò của bên kiểm soát, hay bản thông báo quyền và nghĩa vụ. Khi tranh chấp, nghĩa vụ chứng minh thuộc về bên kiểm soát (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) — mà dữ liệu để chứng minh thì không tồn tại. Bốn phần tử bắt buộc bám bốn yêu cầu của văn bản:

Căn cứ Yêu cầu của văn bản Phần tử
Luật 91/2025/QH15 Điều 9 khoản 2 điểm a Loại dữ liệu cá nhân được xử lý dataCategory
Luật 91/2025/QH15 Điều 9 khoản 2 điểm b Bên kiểm soát, hoặc bên kiểm soát và xử lý controller + controllerRole
Luật 91/2025/QH15 Điều 9 khoản 2 điểm c Các quyền, nghĩa vụ của chủ thể dữ liệu rightsNotice
NĐ 356/2025/NĐ-CP Điều 6 khoản 4 Thông báo dữ liệu cần xử lý là DLCN nhạy cảm sensitiveDataNotice
Mục đích xử lý — nửa còn lại của điểm a — vẫn nằm ở Consent.provision.provision.purpose, nơi FHIR đã có sẵn ngữ nghĩa và nơi sự đồng ý được thể hiện theo TỪNG mục đích (Điều 9 khoản 4 điểm a); VNCoreConsent ép mọi rule permit phải có purpose. Khai báo, không phải phép màu. Extension này ghi lại hệ thống tuyên bố đã thông báo những gì. Nó không tự chứng minh rằng nội dung đó đã thực sự đến với chủ thể, cũng không thay cho bản gốc đồng ý. Giá trị của nó là biến nghĩa vụ chứng minh thành dữ liệu kiểm được: thiếu phần tử nào thì thấy ngay, và bản ghi nào thiếu thì không đạt profile.

  • dataCategory: CodeableConcept: Khai theo danh mục do NĐ 356/2025/NĐ-CP ban hành: Điều 3 (cơ bản) và Điều 4 khoản 1 (nhạy cảm). Nhiều nhóm thì lặp phần tử. Đây là phạm trù dữ liệu cá nhân theo luật, khác với Consent.provision.class là kiểu tài nguyên FHIR — một bản ghi có thể khai health-status ở đây và Observation, Condition ở provision.class.
  • controller: Reference: Tổ chức đã được nêu tên với chủ thể dữ liệu khi xin đồng ý. Thường trùng Consent.organization, nhưng KHÔNG mặc nhiên là một: Consent.organization là tổ chức quản lý bản ghi, còn phần tử này là bên mà chủ thể được cho biết sẽ quyết định mục đích và phương tiện xử lý. Khi hai bên khác nhau, phải khai riêng.
  • controllerRole: Coding: Vai trò theo Luật 91/2025/QH15 Điều 2. Điều 9 khoản 2 điểm b chỉ nêu hai vai trò được thông báo khi xin đồng ý: bên kiểm soát (khoản 7) hoặc bên kiểm soát và xử lý (khoản 9); invariant vn-consent-disclosed-controller-role trên VNCoreConsent chặn hai vai trò còn lại. ValueSet vẫn giữ đủ bốn mã vì taxonomy này còn dùng ở ngữ cảnh khác.
  • rightsNotice: url, Reference: Phải xác định được ĐÚNG bản đã trình, không phải một trang chính sách chung chung đổi nội dung theo thời gian: dùng DocumentReference có version/hash, hoặc URL trỏ tới một bản đã ghim phiên bản. Đây là điểm khác giữa rightsNotice và Consent.policy.uri — policy.uri trỏ tới VĂN BẢN PHÁP LUẬT làm căn cứ, còn phần tử này trỏ tới NỘI DUNG ĐÃ TRÌNH cho chủ thể.
  • sensitiveDataNotice: boolean: true khi chủ thể đã được thông báo rằng dữ liệu cần xử lý là dữ liệu cá nhân nhạy cảm. Phần tử bắt buộc khai chứ không bắt buộc true: khai false là một tuyên bố thật — rằng thông báo này KHÔNG được đưa ra — và khi nội dung đã thông báo có chạm danh mục nhạy cảm thì invariant vn-consent-sensitive-notice-required sẽ chặn. Bắt buộc khai để không tồn tại trạng thái im lặng, thứ khiến hồ sơ vừa không chứng minh được đã thông báo vừa không thừa nhận là chưa.
  • disclosedAt: dateTime: Nếu khai thì phải KHÔNG SAU Consent.dateTime (invariant vn-consent-disclosure-before-consent) — không thể thông báo sau khi người ta đã đồng ý. Để tuỳ chọn vì nhiều luồng thông báo và đồng ý diễn ra trong cùng một phiên, khi đó Consent.dateTime đã đủ.
  • evidenceLocator: string: Định danh hồ sơ/bản ghi lưu trữ bên ngoài: mã hồ sơ lưu trữ, mã bản ghi âm cuộc gọi, mã giao dịch của nền tảng ký điện tử. VNCoreConsent yêu cầu mỗi bản ghi có rule permit phải có source[x] HOẶC phần tử này (invariant vn-consent-permit-evidence-retained) — bằng chứng được phép nằm ngoài FHIR, nhưng không được phép không tồn tại.

 

Biểu diễn khác của hồ sơ: CSV, Excel, Schematron