<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="mii-pr-icu-score" />
  <url value="https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score" />
  <version value="2026.0.0" />
  <name value="MII_PR_ICU_Score" />
  <title value="MII PR ICU Score" />
  <status value="draft" />
  <publisher value="Medizininformatik Initiative" />
  <contact>
    <telecom>
      <system value="url" />
      <value value="https://www.medizininformatik-initiative.de" />
    </telecom>
  </contact>
  <description value="Parent profile for ICU scoring systems. Scores are represented as Observations with the total score in value[x] and their respective items as components. If subitems of observations have independent medical applications or usage, hasMember can be used to implement these. This profile defines common constraints for all ICU scales and scores including sedation, pain, delirium both pediatric and adult as well as Assessments." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="true" />
  <type value="Observation" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Observation" />
  <derivation value="constraint" />
  <differential>
    <element id="Observation">
      <path value="Observation" />
      <constraint>
        <key value="mii-icu-val-xor-dar" />
        <severity value="error" />
        <human value="Resource must have either value or dataAbsentReason." />
        <expression value="value.exists() xor dataAbsentReason.exists()" />
        <source value="https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score" />
      </constraint>
      <constraint>
        <key value="mii-icu-enc-or-sub" />
        <severity value="error" />
        <human value="Either subject OR encounter exists" />
        <expression value="$this.encounter.exists() or $this.subject.exists()" />
        <source value="https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score" />
      </constraint>
      <constraint>
        <key value="mii-icu-comp-xor-val" />
        <severity value="error" />
        <human value="If there is no component or hasMember element then either a value[x] or a data absent reason must be present" />
        <expression value="(component.empty() and hasMember.empty()) implies (dataAbsentReason.exists() xor value.exists())" />
        <source value="https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score" />
      </constraint>
    </element>
    <element id="Observation.status">
      <path value="Observation.status" />
      <comment value="Typically 'final' for completed scores, 'preliminary' for incomplete assessments" />
    </element>
    <element id="Observation.category">
      <path value="Observation.category" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="$this" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="2" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.category:survey">
      <path value="Observation.category" />
      <sliceName value="survey" />
      <short value="Survey category" />
      <min value="1" />
      <max value="1" />
      <patternCodeableConcept>
        <coding>
          <system value="http://terminology.hl7.org/CodeSystem/observation-category" />
          <code value="survey" />
          <display value="Survey" />
        </coding>
      </patternCodeableConcept>
      <mustSupport value="true" />
    </element>
    <element id="Observation.category:survey.coding">
      <path value="Observation.category.coding" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.category:assessment-scale">
      <path value="Observation.category" />
      <sliceName value="assessment-scale" />
      <min value="1" />
      <max value="1" />
      <patternCodeableConcept>
        <coding>
          <system value="http://snomed.info/sct" />
          <code value="273249006" />
          <display value="Assessment scales (assessment scale)" />
        </coding>
      </patternCodeableConcept>
      <mustSupport value="true" />
    </element>
    <element id="Observation.category:assessment-scale.coding">
      <path value="Observation.category.coding" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.code">
      <path value="Observation.code" />
      <definition value="Identifies which score/scale is being represented" />
      <constraint>
        <key value="mii-icu-loinc-sct-dgai-ieee11073" />
        <severity value="error" />
        <human value="Es muss mindestens ein LOINC, SnomedCT, IEEE-11073 oder DGAI Code vorhanden sein" />
        <expression value="coding.where(system= $loinc ).exists() or coding.where(system= $sct ).exists() or coding.where(system= $dgai).exists() or coding.where(system= $ieee-11073).exists()" />
        <source value="https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score" />
      </constraint>
    </element>
    <element id="Observation.code.coding">
      <path value="Observation.code.coding" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="$this" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="Observation.code.coding:loinc">
      <path value="Observation.code.coding" />
      <sliceName value="loinc" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.code.coding:loinc.system">
      <path value="Observation.code.coding.system" />
      <min value="1" />
      <patternUri value="http://loinc.org" />
    </element>
    <element id="Observation.code.coding:loinc.code">
      <path value="Observation.code.coding.code" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.code.coding:sct">
      <path value="Observation.code.coding" />
      <sliceName value="sct" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.code.coding:sct.system">
      <path value="Observation.code.coding.system" />
      <min value="1" />
      <patternUri value="http://snomed.info/sct" />
    </element>
    <element id="Observation.code.coding:sct.version">
      <path value="Observation.code.coding.version" />
      <patternString value="http://snomed.info/sct/900000000000207008/version/20260301" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.code.coding:sct.code">
      <path value="Observation.code.coding.code" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.subject">
      <path value="Observation.subject" />
      <short value="Patient being assessed" />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Patient" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Observation.encounter">
      <path value="Observation.encounter" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.effective[x]">
      <path value="Observation.effective[x]" />
      <min value="1" />
      <type>
        <code value="dateTime" />
      </type>
      <type>
        <code value="Period" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Observation.issued">
      <path value="Observation.issued" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.performer">
      <path value="Observation.performer" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.value[x]">
      <path value="Observation.value[x]" />
      <type>
        <code value="Quantity" />
      </type>
      <type>
        <code value="CodeableConcept" />
      </type>
      <type>
        <code value="integer" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Observation.dataAbsentReason">
      <path value="Observation.dataAbsentReason" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.interpretation">
      <path value="Observation.interpretation" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.specimen">
      <path value="Observation.specimen" />
      <max value="0" />
    </element>
    <element id="Observation.device">
      <path value="Observation.device" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.hasMember">
      <path value="Observation.hasMember" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.derivedFrom">
      <path value="Observation.derivedFrom" />
      <comment value="Source observations used to calculate score" />
      <mustSupport value="true" />
    </element>
    <element id="Observation.component">
      <path value="Observation.component" />
      <constraint>
        <key value="mii-icu-val-xor-dar" />
        <severity value="error" />
        <human value="Resource must have either value or dataAbsentReason." />
        <expression value="value.exists() xor dataAbsentReason.exists()" />
        <source value="https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="Observation.component.code">
      <path value="Observation.component.code" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="$this" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="Observation.component.value[x]">
      <path value="Observation.component.value[x]" />
      <type>
        <code value="Quantity" />
      </type>
      <type>
        <code value="CodeableConcept" />
      </type>
      <type>
        <code value="integer" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Observation.component.dataAbsentReason">
      <path value="Observation.component.dataAbsentReason" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>