<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="ext-capacity" />
  <url value="https://vitalhub.com/fhir/StructureDefinition/ext-capacity" />
  <name value="CapacityExtension" />
  <title value="Capacity Status Extension" />
  <status value="active" />
  <publisher value="VitalHub" />
  <description value="Extension to capture incapacity flags for PHI, property, and treatment decisions, each optionally linked to a consent document ID." />
  <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="Capacity status" />
      <definition value="Complex extension with three slices: IncapablePHI, IncapableProperty, IncapableTreatment." />
      <constraint>
        <key value="inv-incapableOnlyWhenCapacityTrue" />
        <severity value="error" />
        <human value="Capacity sub-extensions may only be present if capacity = true" />
        <expression value="extension.where(url='capacity').valueBoolean = true or extension.where(url='IncapablePHI' or url='IncapableProperty' or url='IncapableTreatment').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-capacity" />
    </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="*" />
    </element>
    <element id="Extension.extension:Capacity">
      <path value="Extension.extension" />
      <sliceName value="Capacity" />
      <short value="Capacity" />
      <definition value="Boolean flag for Capacity consent status." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:Capacity.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="https://vitalhub.com/fhir/StructureDefinition/ext-capacity#Capacity" />
    </element>
    <element id="Extension.extension:Capacity.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:IncapablePHI">
      <path value="Extension.extension" />
      <sliceName value="IncapablePHI" />
      <short value="Indicates incapacity for PHI" />
      <definition value="Boolean flag for incapacity regarding PHI." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:IncapablePHI.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="https://vitalhub.com/fhir/StructureDefinition/ext-capacity#IncapablePHI" />
    </element>
    <element id="Extension.extension:IncapablePHI.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:IncapablePHI.extension:ConsentDocumentID">
      <path value="Extension.extension.extension" />
      <sliceName value="ConsentDocumentID" />
      <short value="Supporting consent document ID" />
      <definition value="Identifier of the consent document supporting incapacity determination." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:IncapablePHI.extension:ConsentDocumentID.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="ConsentDocumentID" />
    </element>
    <element id="Extension.extension:IncapablePHI.extension:ConsentDocumentID.valueString">
      <path value="Extension.extension.extension.valueString" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:IncapableProperty">
      <path value="Extension.extension" />
      <sliceName value="IncapableProperty" />
      <short value="Indicates incapacity for property decisions" />
      <definition value="Boolean flag for incapacity regarding property decisions." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:IncapableProperty.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="https://vitalhub.com/fhir/StructureDefinition/ext-capacity#IncapableProperty" />
    </element>
    <element id="Extension.extension:IncapableProperty.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:IncapableProperty.extension:ConsentDocumentID">
      <path value="Extension.extension.extension" />
      <sliceName value="ConsentDocumentID" />
      <short value="Supporting consent document ID" />
      <definition value="Identifier of the consent document supporting incapacity determination." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:IncapableProperty.extension:ConsentDocumentID.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="ConsentDocumentID" />
    </element>
    <element id="Extension.extension:IncapableProperty.extension:ConsentDocumentID.valueString">
      <path value="Extension.extension.extension.valueString" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:IncapableTreatment">
      <path value="Extension.extension" />
      <sliceName value="IncapableTreatment" />
      <short value="Indicates incapacity for treatment decisions" />
      <definition value="Boolean flag for incapacity regarding treatment decisions." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:IncapableTreatment.url">
      <path value="Extension.extension.url" />
      <min value="1" />
      <max value="1" />
      <fixedUri value="https://vitalhub.com/fhir/StructureDefinition/ext-capacity#IncapableTreatment" />
    </element>
    <element id="Extension.extension:IncapableTreatment.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:IncapableTreatment.extension:ConsentDocumentID">
      <path value="Extension.extension.extension" />
      <sliceName value="ConsentDocumentID" />
      <short value="Supporting consent document ID" />
      <definition value="Identifier of the consent document supporting incapacity determination." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:IncapableTreatment.extension:ConsentDocumentID.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="ConsentDocumentID" />
    </element>
    <element id="Extension.extension:IncapableTreatment.extension:ConsentDocumentID.valueString">
      <path value="Extension.extension.extension.valueString" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="string" />
      </type>
    </element>
  </differential>
</StructureDefinition>