Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide
0.10.0 - Draft for Community Review
Hướng dẫn triển khai FHIR cốt lõi Việt Nam — VN Core FHIR Implementation Guide - Draft for Community Review (v0.10.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
| URL chính thức: http://fhir.hl7.org.vn/core/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)
Consent
Usage info
Usages:
You can also check for usages in the FHIR IG Statistics
Mô tả profile, differential, snapshot và các biểu diễn liên quan.
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | Extension | Nội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension | |
![]() ![]() |
5..* | Extension | Extension | |
![]() ![]() |
Content/Rules for all slices | |||
![]() ![]() ![]() |
S | 1..* | Extension | Loại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "dataCategory" | |
![]() ![]() ![]() ![]() |
0..1 | CodeableConcept | Value of extension Binding: Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controller" | |
![]() ![]() ![]() ![]() |
0..1 | Reference(Cơ sở y tế VN Core — VN Core Organization Profile) | Value of extension | |
![]() ![]() ![]() |
S | 1..1 | Extension | Vai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lý |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controllerRole" | |
![]() ![]() ![]() ![]() |
0..1 | Coding | Value of extension Binding: Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bản thông báo quyền và nghĩa vụ đã trình cho chủ thể (Điều 9 khoản 2 điểm c) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "rightsNotice" | |
![]() ![]() ![]() ![]() |
0..1 | Value of extension | ||
![]() ![]() ![]() ![]() ![]() |
url | |||
![]() ![]() ![]() ![]() ![]() |
Reference(DocumentReference) | |||
![]() ![]() ![]() |
S | 1..1 | Extension | Đã thông báo dữ liệu cần xử lý là DLCN nhạy cảm (NĐ 356/2025/NĐ-CP Điều 6 khoản 4) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "sensitiveDataNotice" | |
![]() ![]() ![]() ![]() |
0..1 | boolean | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Thời điểm trình nội dung thông báo cho chủ thể |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "disclosedAt" | |
![]() ![]() ![]() ![]() |
0..1 | dateTime | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Nơi lưu bằng chứng đồng ý khi không nằm trong FHIR (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "evidenceLocator" | |
![]() ![]() ![]() ![]() |
0..1 | string | Value of extension | |
![]() ![]() |
1..1 | uri | "http://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure" | |
![]() ![]() |
0..0 | Value of extension | ||
Documentation for this format | ||||
| 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 |
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | Extension | Nội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension | |
![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() |
5..* | Extension | Extension Slice: Unordered, Open by value:url | |
![]() ![]() ![]() |
S | 1..* | Extension | Loại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "dataCategory" | |
![]() ![]() ![]() ![]() |
0..1 | CodeableConcept | Value of extension Binding: Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controller" | |
![]() ![]() ![]() ![]() |
0..1 | Reference(Cơ sở y tế VN Core — VN Core Organization Profile) | Value of extension | |
![]() ![]() ![]() |
S | 1..1 | Extension | Vai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lý |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controllerRole" | |
![]() ![]() ![]() ![]() |
0..1 | Coding | Value of extension Binding: Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bản thông báo quyền và nghĩa vụ đã trình cho chủ thể (Điều 9 khoản 2 điểm c) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "rightsNotice" | |
![]() ![]() ![]() ![]() |
0..1 | Value of extension | ||
![]() ![]() ![]() ![]() ![]() |
url | |||
![]() ![]() ![]() ![]() ![]() |
Reference(DocumentReference) | |||
![]() ![]() ![]() |
S | 1..1 | Extension | Đã thông báo dữ liệu cần xử lý là DLCN nhạy cảm (NĐ 356/2025/NĐ-CP Điều 6 khoản 4) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "sensitiveDataNotice" | |
![]() ![]() ![]() ![]() |
0..1 | boolean | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Thời điểm trình nội dung thông báo cho chủ thể |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "disclosedAt" | |
![]() ![]() ![]() ![]() |
0..1 | dateTime | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Nơi lưu bằng chứng đồng ý khi không nằm trong FHIR (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "evidenceLocator" | |
![]() ![]() ![]() ![]() |
0..1 | string | Value of extension | |
![]() ![]() |
1..1 | uri | "http://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure" | |
Documentation for this format | ||||
| 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 |
| 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 |
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.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.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.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.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ể.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.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 đã đủ.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
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | Extension | Nội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension | |
![]() ![]() |
5..* | Extension | Extension | |
![]() ![]() |
Content/Rules for all slices | |||
![]() ![]() ![]() |
S | 1..* | Extension | Loại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "dataCategory" | |
![]() ![]() ![]() ![]() |
0..1 | CodeableConcept | Value of extension Binding: Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controller" | |
![]() ![]() ![]() ![]() |
0..1 | Reference(Cơ sở y tế VN Core — VN Core Organization Profile) | Value of extension | |
![]() ![]() ![]() |
S | 1..1 | Extension | Vai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lý |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controllerRole" | |
![]() ![]() ![]() ![]() |
0..1 | Coding | Value of extension Binding: Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bản thông báo quyền và nghĩa vụ đã trình cho chủ thể (Điều 9 khoản 2 điểm c) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "rightsNotice" | |
![]() ![]() ![]() ![]() |
0..1 | Value of extension | ||
![]() ![]() ![]() ![]() ![]() |
url | |||
![]() ![]() ![]() ![]() ![]() |
Reference(DocumentReference) | |||
![]() ![]() ![]() |
S | 1..1 | Extension | Đã thông báo dữ liệu cần xử lý là DLCN nhạy cảm (NĐ 356/2025/NĐ-CP Điều 6 khoản 4) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "sensitiveDataNotice" | |
![]() ![]() ![]() ![]() |
0..1 | boolean | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Thời điểm trình nội dung thông báo cho chủ thể |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "disclosedAt" | |
![]() ![]() ![]() ![]() |
0..1 | dateTime | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Nơi lưu bằng chứng đồng ý khi không nằm trong FHIR (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) |
![]() ![]() ![]() ![]() |
0..0 | Extension | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "evidenceLocator" | |
![]() ![]() ![]() ![]() |
0..1 | string | Value of extension | |
![]() ![]() |
1..1 | uri | "http://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure" | |
![]() ![]() |
0..0 | Value of extension | ||
Documentation for this format | ||||
| 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
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | Extension | Nội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension | |
![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() |
5..* | Extension | Extension Slice: Unordered, Open by value:url | |
![]() ![]() ![]() |
S | 1..* | Extension | Loại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "dataCategory" | |
![]() ![]() ![]() ![]() |
0..1 | CodeableConcept | Value of extension Binding: Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controller" | |
![]() ![]() ![]() ![]() |
0..1 | Reference(Cơ sở y tế VN Core — VN Core Organization Profile) | Value of extension | |
![]() ![]() ![]() |
S | 1..1 | Extension | Vai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lý |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "controllerRole" | |
![]() ![]() ![]() ![]() |
0..1 | Coding | Value of extension Binding: Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet (required) | |
![]() ![]() ![]() |
S | 1..1 | Extension | Bản thông báo quyền và nghĩa vụ đã trình cho chủ thể (Điều 9 khoản 2 điểm c) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "rightsNotice" | |
![]() ![]() ![]() ![]() |
0..1 | Value of extension | ||
![]() ![]() ![]() ![]() ![]() |
url | |||
![]() ![]() ![]() ![]() ![]() |
Reference(DocumentReference) | |||
![]() ![]() ![]() |
S | 1..1 | Extension | Đã thông báo dữ liệu cần xử lý là DLCN nhạy cảm (NĐ 356/2025/NĐ-CP Điều 6 khoản 4) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "sensitiveDataNotice" | |
![]() ![]() ![]() ![]() |
0..1 | boolean | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Thời điểm trình nội dung thông báo cho chủ thể |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "disclosedAt" | |
![]() ![]() ![]() ![]() |
0..1 | dateTime | Value of extension | |
![]() ![]() ![]() |
S | 0..1 | Extension | Nơi lưu bằng chứng đồng ý khi không nằm trong FHIR (NĐ 356/2025/NĐ-CP Điều 6 khoản 2) |
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |
![]() ![]() ![]() ![]() |
0..0 | Extension Slice: Unordered, Open by value:url | ||
![]() ![]() ![]() ![]() |
1..1 | uri | "evidenceLocator" | |
![]() ![]() ![]() ![]() |
0..1 | string | Value of extension | |
![]() ![]() |
1..1 | uri | "http://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure" | |
Documentation for this format | ||||
| 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 |
| 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 |
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.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.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.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.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ể.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.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 đã đủ.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