<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="ext-voluntary" />
  <url value="https://vitalhub.com/fhir/StructureDefinition/ext-voluntary" />
  <name value="Voluntary" />
  <status value="active" />
  <publisher value="VitalHub" />
  <description value="Extension to capture voluntary consent status and related involuntary flags for PHI disclosure and treatment." />
  <fhirVersion value="4.0.1" />
  <kind value="complex-type" />
  <abstract value="false" />
  <context>
    <type value="element" />
    <expression value="Consent" />
  </context>
  <type value="Extension" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension" />
  <derivation value="constraint" />
  <differential>
    <element id="Extension">
      <path value="Extension" />
      <short value="Voluntary/Involuntary status" />
      <definition value="Complex extension with three boolean flags: voluntary, involuntaryPHI, involuntaryTreatment." />
      <constraint>
        <key value="inv-involuntaryOnlyWhenVoluntaryTrue" />
        <severity value="error" />
        <human value="Involuntary sub-extensions may only be present if voluntary = true" />
        <expression value="extension.where(url='voluntary').valueBoolean = true or extension.where(url='involuntaryPHI' or url='involuntaryTreatment').empty()" />
      </constraint>
    </element>
    <element id="Extension.url">
      <path value="Extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="https://vitalhub.com/fhir/StructureDefinition/ext-voluntary" />
    </element>
    <element id="Extension.extension">
      <path value="Extension.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
      <min value="0" />
      <max value="*" />
      <base>
        <path value="Extension.extension" />
        <min value="0" />
        <max value="*" />
      </base>
      <type>
        <code value="Extension" />
      </type>
    </element>
    <element id="Extension.extension:voluntary">
      <path value="Extension.extension" />
      <sliceName value="voluntary" />
      <short value="Indicates voluntary consent" />
      <definition value="Boolean flag for voluntary consent status." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:voluntary.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="voluntary" />
    </element>
    <element id="Extension.extension:voluntary.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:involuntaryPHI">
      <path value="Extension.extension" />
      <sliceName value="involuntaryPHI" />
      <short value="Indicates involuntary PHI disclosure" />
      <definition value="Boolean flag for involuntary PHI disclosure." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:involuntaryPHI.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="involuntaryPHI" />
    </element>
    <element id="Extension.extension:involuntaryPHI.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:involuntaryTreatment">
      <path value="Extension.extension" />
      <sliceName value="involuntaryTreatment" />
      <short value="Indicates involuntary treatment" />
      <definition value="Boolean flag for involuntary treatment." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:involuntaryTreatment.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="involuntaryTreatment" />
    </element>
    <element id="Extension.extension:involuntaryTreatment.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
  </differential>
</StructureDefinition>