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 - Mô tả chi tiết

Draft tại thời điểm 2026-08-05

Các định nghĩa cho vn-ext-consent-disclosure phần mở rộng

Guidance on how to interpret the contents of this table can be foundhere

0. Extension
Definition

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.


Optional Extension Element - found in all resources.

ShortNội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence ExtensionOptional Extensions Element
Control0..*
This element is affected by the following invariants: ele-1
Is Modifierfalse
Invariantsele-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())
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
2. Extension.extension
Definition

An Extension


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.

ShortExtensionAdditional 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.

Control50..*
TypeExtension
Is Modifierfalse
Summaryfalse
Alternate Namesextensions, user content
Invariantsele-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())
SlicingThis element introduces a set of slices on Extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
  • value @ url
  • 4. Extension.extension:dataCategory
    Slice NamedataCategory
    Definition

    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.

    ShortLoại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a)Additional content defined by implementations
    Control10..*
    TypeExtension
    Is Modifierfalse
    Must Supporttrue
    Summaryfalse
    Invariantsele-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())
    6. Extension.extension:dataCategory.extension
    Definition

    An Extension


    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.

    ShortExtensionAdditional 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.

    Control0..0*
    TypeExtension
    Is Modifierfalse
    Summaryfalse
    Alternate Namesextensions, user content
    Invariantsele-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())
    SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
    • value @ url
    • 8. Extension.extension:dataCategory.url
      Definition

      Source of the definition for the extension code - a logical name or a URL.

      Shortidentifies the meaning of the extension
      Comments

      The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

      Control1..1
      Typeuri
      Is Modifierfalse
      XML FormatIn the XML format, this property is represented as an attribute.
      Summaryfalse
      Fixed ValuedataCategory
      10. Extension.extension:dataCategory.value[x]
      Definition

      Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

      ShortValue of extension
      Control0..1
      BindingThe codes SHALL be taken from For codes, see Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet
      (required to http://fhir.hl7.org.vn/core/ValueSet/vn-personal-data-category-vs)
      TypeCodeableConcept, date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, Coding, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, ParameterDefinition, dateTime, code, string, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, Reference, TriggerDefinition, Quantity, uri, url, Annotation, ContactDetail, boolean, Expression, Signature, unsignedInt, time
      [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
      Is Modifierfalse
      Summaryfalse
      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
      12. Extension.extension:controller
      Slice Namecontroller
      Definition

      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.

      ShortBên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b)Additional content defined by implementations
      Control10..1*
      TypeExtension
      Is Modifierfalse
      Must Supporttrue
      Summaryfalse
      Invariantsele-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())
      14. Extension.extension:controller.extension
      Definition

      An Extension


      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.

      ShortExtensionAdditional 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.

      Control0..0*
      TypeExtension
      Is Modifierfalse
      Summaryfalse
      Alternate Namesextensions, user content
      Invariantsele-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())
      SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
      • value @ url
      • 16. Extension.extension:controller.url
        Definition

        Source of the definition for the extension code - a logical name or a URL.

        Shortidentifies the meaning of the extension
        Comments

        The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

        Control1..1
        Typeuri
        Is Modifierfalse
        XML FormatIn the XML format, this property is represented as an attribute.
        Summaryfalse
        Fixed Valuecontroller
        18. Extension.extension:controller.value[x]
        Definition

        Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

        ShortValue of extension
        Control0..1
        TypeReference(Cơ sở y tế VN Core — VN Core Organization Profile), date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, Coding, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, CodeableConcept, ParameterDefinition, dateTime, code, string, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, TriggerDefinition, Quantity, uri, url, Annotation, ContactDetail, boolean, Expression, Signature, unsignedInt, time
        [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
        Is Modifierfalse
        Summaryfalse
        Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
        20. Extension.extension:controllerRole
        Slice NamecontrollerRole
        Definition

        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.

        ShortVai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lýAdditional content defined by implementations
        Control10..1*
        TypeExtension
        Is Modifierfalse
        Must Supporttrue
        Summaryfalse
        Invariantsele-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())
        22. Extension.extension:controllerRole.extension
        Definition

        An Extension


        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.

        ShortExtensionAdditional 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.

        Control0..0*
        TypeExtension
        Is Modifierfalse
        Summaryfalse
        Alternate Namesextensions, user content
        Invariantsele-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())
        SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
        • value @ url
        • 24. Extension.extension:controllerRole.url
          Definition

          Source of the definition for the extension code - a logical name or a URL.

          Shortidentifies the meaning of the extension
          Comments

          The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

          Control1..1
          Typeuri
          Is Modifierfalse
          XML FormatIn the XML format, this property is represented as an attribute.
          Summaryfalse
          Fixed ValuecontrollerRole
          26. Extension.extension:controllerRole.value[x]
          Definition

          Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

          ShortValue of extension
          Control0..1
          BindingThe codes SHALL be taken from For codes, see Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet
          (required to http://fhir.hl7.org.vn/core/ValueSet/vn-data-party-role-vs)
          TypeCoding, date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, CodeableConcept, ParameterDefinition, dateTime, code, string, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, Reference, TriggerDefinition, Quantity, uri, url, Annotation, ContactDetail, boolean, Expression, Signature, unsignedInt, time
          [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
          Is Modifierfalse
          Summaryfalse
          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
          28. Extension.extension:rightsNotice
          Slice NamerightsNotice
          Definition

          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ể.

          ShortBả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)Additional content defined by implementations
          Control10..1*
          TypeExtension
          Is Modifierfalse
          Must Supporttrue
          Summaryfalse
          Invariantsele-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())
          30. Extension.extension:rightsNotice.extension
          Definition

          An Extension


          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.

          ShortExtensionAdditional 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.

          Control0..0*
          TypeExtension
          Is Modifierfalse
          Summaryfalse
          Alternate Namesextensions, user content
          Invariantsele-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())
          SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
          • value @ url
          • 32. Extension.extension:rightsNotice.url
            Definition

            Source of the definition for the extension code - a logical name or a URL.

            Shortidentifies the meaning of the extension
            Comments

            The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

            Control1..1
            Typeuri
            Is Modifierfalse
            XML FormatIn the XML format, this property is represented as an attribute.
            Summaryfalse
            Fixed ValuerightsNotice
            34. Extension.extension:rightsNotice.value[x]
            Definition

            Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

            ShortValue of extension
            Control0..1
            TypeChoice of: url, Reference(DocumentReference), date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, Coding, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, CodeableConcept, ParameterDefinition, dateTime, code, string, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, TriggerDefinition, Quantity, uri, Annotation, ContactDetail, boolean, Expression, Signature, unsignedInt, time
            [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
            Is Modifierfalse
            Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            36. Extension.extension:sensitiveDataNotice
            Slice NamesensitiveDataNotice
            Definition

            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.

            ShortĐã 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)Additional content defined by implementations
            Control10..1*
            TypeExtension
            Is Modifierfalse
            Must Supporttrue
            Summaryfalse
            Invariantsele-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())
            38. Extension.extension:sensitiveDataNotice.extension
            Definition

            An Extension


            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.

            ShortExtensionAdditional 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.

            Control0..0*
            TypeExtension
            Is Modifierfalse
            Summaryfalse
            Alternate Namesextensions, user content
            Invariantsele-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())
            SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
            • value @ url
            • 40. Extension.extension:sensitiveDataNotice.url
              Definition

              Source of the definition for the extension code - a logical name or a URL.

              Shortidentifies the meaning of the extension
              Comments

              The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

              Control1..1
              Typeuri
              Is Modifierfalse
              XML FormatIn the XML format, this property is represented as an attribute.
              Summaryfalse
              Fixed ValuesensitiveDataNotice
              42. Extension.extension:sensitiveDataNotice.value[x]
              Definition

              Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

              ShortValue of extension
              Control0..1
              Typeboolean, date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, Coding, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, CodeableConcept, ParameterDefinition, dateTime, code, string, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, Reference, TriggerDefinition, Quantity, uri, url, Annotation, ContactDetail, Expression, Signature, unsignedInt, time
              [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
              Is Modifierfalse
              Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
              Summaryfalse
              Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
              44. Extension.extension:disclosedAt
              Slice NamedisclosedAt
              Definition

              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 đã đủ.

              ShortThời điểm trình nội dung thông báo cho chủ thểAdditional content defined by implementations
              Control0..1*
              TypeExtension
              Is Modifierfalse
              Must Supporttrue
              Summaryfalse
              Invariantsele-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())
              46. Extension.extension:disclosedAt.extension
              Definition

              An Extension


              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.

              ShortExtensionAdditional 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.

              Control0..0*
              TypeExtension
              Is Modifierfalse
              Summaryfalse
              Alternate Namesextensions, user content
              Invariantsele-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())
              SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
              • value @ url
              • 48. Extension.extension:disclosedAt.url
                Definition

                Source of the definition for the extension code - a logical name or a URL.

                Shortidentifies the meaning of the extension
                Comments

                The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                Control1..1
                Typeuri
                Is Modifierfalse
                XML FormatIn the XML format, this property is represented as an attribute.
                Summaryfalse
                Fixed ValuedisclosedAt
                50. Extension.extension:disclosedAt.value[x]
                Definition

                Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                ShortValue of extension
                Control0..1
                TypedateTime, date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, Coding, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, CodeableConcept, ParameterDefinition, code, string, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, Reference, TriggerDefinition, Quantity, uri, url, Annotation, ContactDetail, boolean, Expression, Signature, unsignedInt, time
                [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                Is Modifierfalse
                Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                Summaryfalse
                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                52. Extension.extension:evidenceLocator
                Slice NameevidenceLocator
                Definition

                Đị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.

                ShortNơ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)Additional content defined by implementations
                Control0..1*
                TypeExtension
                Is Modifierfalse
                Must Supporttrue
                Summaryfalse
                Invariantsele-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())
                54. Extension.extension:evidenceLocator.extension
                Definition

                An Extension


                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.

                ShortExtensionAdditional 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.

                Control0..0*
                TypeExtension
                Is Modifierfalse
                Summaryfalse
                Alternate Namesextensions, user content
                Invariantsele-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())
                SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                • value @ url
                • 56. Extension.extension:evidenceLocator.url
                  Definition

                  Source of the definition for the extension code - a logical name or a URL.

                  Shortidentifies the meaning of the extension
                  Comments

                  The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                  Control1..1
                  Typeuri
                  Is Modifierfalse
                  XML FormatIn the XML format, this property is represented as an attribute.
                  Summaryfalse
                  Fixed ValueevidenceLocator
                  58. Extension.extension:evidenceLocator.value[x]
                  Definition

                  Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                  ShortValue of extension
                  Control0..1
                  Typestring, date, Meta, Address, Attachment, integer, Count, DataRequirement, Dosage, uuid, Identifier, Coding, SampledData, id, positiveInt, Distance, Period, Duration, canonical, Range, RelatedArtifact, base64Binary, UsageContext, Timing, decimal, CodeableConcept, ParameterDefinition, dateTime, code, Contributor, oid, instant, ContactPoint, HumanName, Money, markdown, Ratio, Age, Reference, TriggerDefinition, Quantity, uri, url, Annotation, ContactDetail, boolean, Expression, Signature, unsignedInt, time
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  Is Modifierfalse
                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                  Summaryfalse
                  Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                  60. Extension.url
                  Definition

                  Source of the definition for the extension code - a logical name or a URL.

                  Shortidentifies the meaning of the extension
                  Comments

                  The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                  Control1..1
                  Typeuri
                  Is Modifierfalse
                  XML FormatIn the XML format, this property is represented as an attribute.
                  Summaryfalse
                  Fixed Valuehttp://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure
                  62. Extension.value[x]
                  Definition

                  Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                  ShortValue of extension
                  Control0..01
                  TypeChoice of: base64Binary, boolean, canonical, code, date, dateTime, decimal, id, instant, integer, markdown, oid, positiveInt, string, time, unsignedInt, uri, url, uuid, Address, Age, Annotation, Attachment, CodeableConcept, Coding, ContactPoint, Count, Distance, Duration, HumanName, Identifier, Money, Period, Quantity, Range, Ratio, Reference, SampledData, Signature, Timing, ContactDetail, Contributor, DataRequirement, Expression, ParameterDefinition, RelatedArtifact, TriggerDefinition, UsageContext, Dosage, Meta
                  Is Modifierfalse
                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                  Summaryfalse
                  Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))

                  Guidance on how to interpret the contents of this table can be foundhere

                  0. Extension
                  Definition

                  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.

                  ShortNội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension
                  2. Extension.extension
                  Control5..?
                  4. Extension.extension:dataCategory
                  Slice NamedataCategory
                  Definition

                  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.

                  ShortLoại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a)
                  Control1..*
                  Must Supporttrue
                  6. Extension.extension:dataCategory.extension
                  Control0..0
                  8. Extension.extension:dataCategory.url
                  Fixed ValuedataCategory
                  10. Extension.extension:dataCategory.value[x]
                  BindingThe codes SHALL be taken from Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet
                  (required to http://fhir.hl7.org.vn/core/ValueSet/vn-personal-data-category-vs)
                  TypeCodeableConcept
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  12. Extension.extension:controller
                  Slice Namecontroller
                  Definition

                  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.

                  ShortBên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b)
                  Control1..1
                  Must Supporttrue
                  14. Extension.extension:controller.extension
                  Control0..0
                  16. Extension.extension:controller.url
                  Fixed Valuecontroller
                  18. Extension.extension:controller.value[x]
                  TypeReference(Cơ sở y tế VN Core — VN Core Organization Profile)
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  20. Extension.extension:controllerRole
                  Slice NamecontrollerRole
                  Definition

                  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.

                  ShortVai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lý
                  Control1..1
                  Must Supporttrue
                  22. Extension.extension:controllerRole.extension
                  Control0..0
                  24. Extension.extension:controllerRole.url
                  Fixed ValuecontrollerRole
                  26. Extension.extension:controllerRole.value[x]
                  BindingThe codes SHALL be taken from Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet
                  (required to http://fhir.hl7.org.vn/core/ValueSet/vn-data-party-role-vs)
                  TypeCoding
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  28. Extension.extension:rightsNotice
                  Slice NamerightsNotice
                  Definition

                  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ể.

                  ShortBả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)
                  Control1..1
                  Must Supporttrue
                  30. Extension.extension:rightsNotice.extension
                  Control0..0
                  32. Extension.extension:rightsNotice.url
                  Fixed ValuerightsNotice
                  34. Extension.extension:rightsNotice.value[x]
                  TypeChoice of: url, Reference(DocumentReference)
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                  36. Extension.extension:sensitiveDataNotice
                  Slice NamesensitiveDataNotice
                  Definition

                  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.

                  ShortĐã 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)
                  Control1..1
                  Must Supporttrue
                  38. Extension.extension:sensitiveDataNotice.extension
                  Control0..0
                  40. Extension.extension:sensitiveDataNotice.url
                  Fixed ValuesensitiveDataNotice
                  42. Extension.extension:sensitiveDataNotice.value[x]
                  Typeboolean
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                  44. Extension.extension:disclosedAt
                  Slice NamedisclosedAt
                  Definition

                  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 đã đủ.

                  ShortThời điểm trình nội dung thông báo cho chủ thể
                  Control0..1
                  Must Supporttrue
                  46. Extension.extension:disclosedAt.extension
                  Control0..0
                  48. Extension.extension:disclosedAt.url
                  Fixed ValuedisclosedAt
                  50. Extension.extension:disclosedAt.value[x]
                  TypedateTime
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                  52. Extension.extension:evidenceLocator
                  Slice NameevidenceLocator
                  Definition

                  Đị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.

                  ShortNơ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)
                  Control0..1
                  Must Supporttrue
                  54. Extension.extension:evidenceLocator.extension
                  Control0..0
                  56. Extension.extension:evidenceLocator.url
                  Fixed ValueevidenceLocator
                  58. Extension.extension:evidenceLocator.value[x]
                  Typestring
                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                  60. Extension.url
                  Fixed Valuehttp://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure
                  62. Extension.value[x]
                  Control0..0

                  Guidance on how to interpret the contents of this table can be foundhere

                  0. Extension
                  Definition

                  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.

                  ShortNội dung đã thông báo khi xin đồng ý — Consent Disclosure Evidence Extension
                  Control0..*
                  This element is affected by the following invariants: ele-1
                  Is Modifierfalse
                  Invariantsele-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())
                  2. Extension.id
                  Definition

                  Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                  ShortUnique id for inter-element referencing
                  Control0..1
                  Typestring
                  Is Modifierfalse
                  XML FormatIn the XML format, this property is represented as an attribute.
                  Summaryfalse
                  4. Extension.extension
                  Definition

                  An Extension

                  ShortExtension
                  Control5..*
                  TypeExtension
                  Is Modifierfalse
                  Summaryfalse
                  Invariantsele-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())
                  SlicingThis element introduces a set of slices on Extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                  • value @ url
                  • 6. Extension.extension:dataCategory
                    Slice NamedataCategory
                    Definition

                    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.

                    ShortLoại dữ liệu cá nhân đã thông báo sẽ được xử lý (Điều 9 khoản 2 điểm a)
                    Control1..*
                    TypeExtension
                    Is Modifierfalse
                    Must Supporttrue
                    Summaryfalse
                    Invariantsele-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())
                    8. Extension.extension:dataCategory.id
                    Definition

                    Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                    ShortUnique id for inter-element referencing
                    Control0..1
                    Typestring
                    Is Modifierfalse
                    XML FormatIn the XML format, this property is represented as an attribute.
                    Summaryfalse
                    10. Extension.extension:dataCategory.extension
                    Definition

                    An Extension

                    ShortExtension
                    Control0..0
                    TypeExtension
                    Is Modifierfalse
                    Summaryfalse
                    Invariantsele-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())
                    SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                    • value @ url
                    • 12. Extension.extension:dataCategory.url
                      Definition

                      Source of the definition for the extension code - a logical name or a URL.

                      Shortidentifies the meaning of the extension
                      Comments

                      The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                      Control1..1
                      Typeuri
                      Is Modifierfalse
                      XML FormatIn the XML format, this property is represented as an attribute.
                      Summaryfalse
                      Fixed ValuedataCategory
                      14. Extension.extension:dataCategory.value[x]
                      Definition

                      Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                      ShortValue of extension
                      Control0..1
                      BindingThe codes SHALL be taken from Loại dữ liệu cá nhân được xử lý — Personal Data Category ValueSet
                      (required to http://fhir.hl7.org.vn/core/ValueSet/vn-personal-data-category-vs)
                      TypeCodeableConcept
                      [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                      Is Modifierfalse
                      Summaryfalse
                      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                      16. Extension.extension:controller
                      Slice Namecontroller
                      Definition

                      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.

                      ShortBên kiểm soát dữ liệu đã thông báo cho chủ thể (Điều 9 khoản 2 điểm b)
                      Control1..1
                      TypeExtension
                      Is Modifierfalse
                      Must Supporttrue
                      Summaryfalse
                      Invariantsele-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())
                      18. Extension.extension:controller.id
                      Definition

                      Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                      ShortUnique id for inter-element referencing
                      Control0..1
                      Typestring
                      Is Modifierfalse
                      XML FormatIn the XML format, this property is represented as an attribute.
                      Summaryfalse
                      20. Extension.extension:controller.extension
                      Definition

                      An Extension

                      ShortExtension
                      Control0..0
                      TypeExtension
                      Is Modifierfalse
                      Summaryfalse
                      Invariantsele-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())
                      SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                      • value @ url
                      • 22. Extension.extension:controller.url
                        Definition

                        Source of the definition for the extension code - a logical name or a URL.

                        Shortidentifies the meaning of the extension
                        Comments

                        The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                        Control1..1
                        Typeuri
                        Is Modifierfalse
                        XML FormatIn the XML format, this property is represented as an attribute.
                        Summaryfalse
                        Fixed Valuecontroller
                        24. Extension.extension:controller.value[x]
                        Definition

                        Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                        ShortValue of extension
                        Control0..1
                        TypeReference(Cơ sở y tế VN Core — VN Core Organization Profile)
                        [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                        Is Modifierfalse
                        Summaryfalse
                        Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                        26. Extension.extension:controllerRole
                        Slice NamecontrollerRole
                        Definition

                        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.

                        ShortVai trò pháp lý của bên đó — kiểm soát hay kiểm soát và xử lý
                        Control1..1
                        TypeExtension
                        Is Modifierfalse
                        Must Supporttrue
                        Summaryfalse
                        Invariantsele-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. Extension.extension:controllerRole.id
                        Definition

                        Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                        ShortUnique id for inter-element referencing
                        Control0..1
                        Typestring
                        Is Modifierfalse
                        XML FormatIn the XML format, this property is represented as an attribute.
                        Summaryfalse
                        30. Extension.extension:controllerRole.extension
                        Definition

                        An Extension

                        ShortExtension
                        Control0..0
                        TypeExtension
                        Is Modifierfalse
                        Summaryfalse
                        Invariantsele-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())
                        SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                        • value @ url
                        • 32. Extension.extension:controllerRole.url
                          Definition

                          Source of the definition for the extension code - a logical name or a URL.

                          Shortidentifies the meaning of the extension
                          Comments

                          The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                          Control1..1
                          Typeuri
                          Is Modifierfalse
                          XML FormatIn the XML format, this property is represented as an attribute.
                          Summaryfalse
                          Fixed ValuecontrollerRole
                          34. Extension.extension:controllerRole.value[x]
                          Definition

                          Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                          ShortValue of extension
                          Control0..1
                          BindingThe codes SHALL be taken from Vai trò các bên xử lý dữ liệu cá nhân — Personal Data Party Role ValueSet
                          (required to http://fhir.hl7.org.vn/core/ValueSet/vn-data-party-role-vs)
                          TypeCoding
                          [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                          Is Modifierfalse
                          Summaryfalse
                          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                          36. Extension.extension:rightsNotice
                          Slice NamerightsNotice
                          Definition

                          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ể.

                          ShortBả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)
                          Control1..1
                          TypeExtension
                          Is Modifierfalse
                          Must Supporttrue
                          Summaryfalse
                          Invariantsele-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())
                          38. Extension.extension:rightsNotice.id
                          Definition

                          Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                          ShortUnique id for inter-element referencing
                          Control0..1
                          Typestring
                          Is Modifierfalse
                          XML FormatIn the XML format, this property is represented as an attribute.
                          Summaryfalse
                          40. Extension.extension:rightsNotice.extension
                          Definition

                          An Extension

                          ShortExtension
                          Control0..0
                          TypeExtension
                          Is Modifierfalse
                          Summaryfalse
                          Invariantsele-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())
                          SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                          • value @ url
                          • 42. Extension.extension:rightsNotice.url
                            Definition

                            Source of the definition for the extension code - a logical name or a URL.

                            Shortidentifies the meaning of the extension
                            Comments

                            The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                            Control1..1
                            Typeuri
                            Is Modifierfalse
                            XML FormatIn the XML format, this property is represented as an attribute.
                            Summaryfalse
                            Fixed ValuerightsNotice
                            44. Extension.extension:rightsNotice.value[x]
                            Definition

                            Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                            ShortValue of extension
                            Control0..1
                            TypeChoice of: url, Reference(DocumentReference)
                            [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                            Is Modifierfalse
                            Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                            Summaryfalse
                            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                            46. Extension.extension:sensitiveDataNotice
                            Slice NamesensitiveDataNotice
                            Definition

                            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.

                            ShortĐã 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)
                            Control1..1
                            TypeExtension
                            Is Modifierfalse
                            Must Supporttrue
                            Summaryfalse
                            Invariantsele-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())
                            48. Extension.extension:sensitiveDataNotice.id
                            Definition

                            Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                            ShortUnique id for inter-element referencing
                            Control0..1
                            Typestring
                            Is Modifierfalse
                            XML FormatIn the XML format, this property is represented as an attribute.
                            Summaryfalse
                            50. Extension.extension:sensitiveDataNotice.extension
                            Definition

                            An Extension

                            ShortExtension
                            Control0..0
                            TypeExtension
                            Is Modifierfalse
                            Summaryfalse
                            Invariantsele-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())
                            SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                            • value @ url
                            • 52. Extension.extension:sensitiveDataNotice.url
                              Definition

                              Source of the definition for the extension code - a logical name or a URL.

                              Shortidentifies the meaning of the extension
                              Comments

                              The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                              Control1..1
                              Typeuri
                              Is Modifierfalse
                              XML FormatIn the XML format, this property is represented as an attribute.
                              Summaryfalse
                              Fixed ValuesensitiveDataNotice
                              54. Extension.extension:sensitiveDataNotice.value[x]
                              Definition

                              Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                              ShortValue of extension
                              Control0..1
                              Typeboolean
                              [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                              Is Modifierfalse
                              Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                              Summaryfalse
                              Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                              56. Extension.extension:disclosedAt
                              Slice NamedisclosedAt
                              Definition

                              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 đã đủ.

                              ShortThời điểm trình nội dung thông báo cho chủ thể
                              Control0..1
                              TypeExtension
                              Is Modifierfalse
                              Must Supporttrue
                              Summaryfalse
                              Invariantsele-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())
                              58. Extension.extension:disclosedAt.id
                              Definition

                              Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                              ShortUnique id for inter-element referencing
                              Control0..1
                              Typestring
                              Is Modifierfalse
                              XML FormatIn the XML format, this property is represented as an attribute.
                              Summaryfalse
                              60. Extension.extension:disclosedAt.extension
                              Definition

                              An Extension

                              ShortExtension
                              Control0..0
                              TypeExtension
                              Is Modifierfalse
                              Summaryfalse
                              Invariantsele-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())
                              SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                              • value @ url
                              • 62. Extension.extension:disclosedAt.url
                                Definition

                                Source of the definition for the extension code - a logical name or a URL.

                                Shortidentifies the meaning of the extension
                                Comments

                                The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                                Control1..1
                                Typeuri
                                Is Modifierfalse
                                XML FormatIn the XML format, this property is represented as an attribute.
                                Summaryfalse
                                Fixed ValuedisclosedAt
                                64. Extension.extension:disclosedAt.value[x]
                                Definition

                                Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                                ShortValue of extension
                                Control0..1
                                TypedateTime
                                [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                                Is Modifierfalse
                                Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                                Summaryfalse
                                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                                66. Extension.extension:evidenceLocator
                                Slice NameevidenceLocator
                                Definition

                                Đị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.

                                ShortNơ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)
                                Control0..1
                                TypeExtension
                                Is Modifierfalse
                                Must Supporttrue
                                Summaryfalse
                                Invariantsele-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())
                                68. Extension.extension:evidenceLocator.id
                                Definition

                                Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                                ShortUnique id for inter-element referencing
                                Control0..1
                                Typestring
                                Is Modifierfalse
                                XML FormatIn the XML format, this property is represented as an attribute.
                                Summaryfalse
                                70. Extension.extension:evidenceLocator.extension
                                Definition

                                An Extension

                                ShortExtension
                                Control0..0
                                TypeExtension
                                Is Modifierfalse
                                Summaryfalse
                                Invariantsele-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())
                                SlicingThis element introduces a set of slices on Extension.extension.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
                                • value @ url
                                • 72. Extension.extension:evidenceLocator.url
                                  Definition

                                  Source of the definition for the extension code - a logical name or a URL.

                                  Shortidentifies the meaning of the extension
                                  Comments

                                  The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                                  Control1..1
                                  Typeuri
                                  Is Modifierfalse
                                  XML FormatIn the XML format, this property is represented as an attribute.
                                  Summaryfalse
                                  Fixed ValueevidenceLocator
                                  74. Extension.extension:evidenceLocator.value[x]
                                  Definition

                                  Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                                  ShortValue of extension
                                  Control0..1
                                  Typestring
                                  [x] NoteSeeChoice of Data Typesfor further information about how to use [x]
                                  Is Modifierfalse
                                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                                  Summaryfalse
                                  Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                                  76. Extension.url
                                  Definition

                                  Source of the definition for the extension code - a logical name or a URL.

                                  Shortidentifies the meaning of the extension
                                  Comments

                                  The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.

                                  Control1..1
                                  Typeuri
                                  Is Modifierfalse
                                  XML FormatIn the XML format, this property is represented as an attribute.
                                  Summaryfalse
                                  Fixed Valuehttp://fhir.hl7.org.vn/core/StructureDefinition/vn-ext-consent-disclosure
                                  78. Extension.value[x]
                                  Definition

                                  Value of extension - must be one of a constrained set of the data types (see Extensibility for a list).

                                  ShortValue of extension
                                  Control0..0
                                  TypeChoice of: base64Binary, boolean, canonical, code, date, dateTime, decimal, id, instant, integer, markdown, oid, positiveInt, string, time, unsignedInt, uri, url, uuid, Address, Age, Annotation, Attachment, CodeableConcept, Coding, ContactPoint, Count, Distance, Duration, HumanName, Identifier, Money, Period, Quantity, Range, Ratio, Reference, SampledData, Signature, Timing, ContactDetail, Contributor, DataRequirement, Expression, ParameterDefinition, RelatedArtifact, TriggerDefinition, UsageContext, Dosage, Meta
                                  Is Modifierfalse
                                  Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                                  Summaryfalse
                                  Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))