{
  "resourceType": "StructureDefinition",
  "id": "mii-pr-icu-score",
  "url": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score",
  "version": "2026.0.0",
  "name": "MII_PR_ICU_Score",
  "title": "MII PR ICU Score",
  "status": "draft",
  "publisher": "Medizininformatik Initiative",
  "contact": [
    {
      "telecom": [
        {
          "system": "url",
          "value": "https://www.medizininformatik-initiative.de"
        }
      ]
    }
  ],
  "description": "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": "4.0.1",
  "kind": "resource",
  "abstract": true,
  "type": "Observation",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Observation",
        "path": "Observation",
        "constraint": [
          {
            "key": "mii-icu-val-xor-dar",
            "human": "Resource must have either value or dataAbsentReason.",
            "source": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score",
            "severity": "error",
            "expression": "value.exists() xor dataAbsentReason.exists()"
          },
          {
            "key": "mii-icu-enc-or-sub",
            "human": "Either subject OR encounter exists",
            "source": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score",
            "severity": "error",
            "expression": "$this.encounter.exists() or $this.subject.exists()"
          },
          {
            "key": "mii-icu-comp-xor-val",
            "human": "If there is no component or hasMember element then either a value[x] or a data absent reason must be present",
            "source": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score",
            "severity": "error",
            "expression": "(component.empty() and hasMember.empty()) implies (dataAbsentReason.exists() xor value.exists())"
          }
        ]
      },
      {
        "id": "Observation.status",
        "path": "Observation.status",
        "comment": "Typically 'final' for completed scores, 'preliminary' for incomplete assessments"
      },
      {
        "id": "Observation.category",
        "path": "Observation.category",
        "slicing": {
          "discriminator": [
            {
              "type": "pattern",
              "path": "$this"
            }
          ],
          "rules": "open"
        },
        "min": 2,
        "mustSupport": true
      },
      {
        "id": "Observation.category:survey",
        "path": "Observation.category",
        "sliceName": "survey",
        "short": "Survey category",
        "min": 1,
        "max": "1",
        "patternCodeableConcept": {
          "coding": [
            {
              "code": "survey",
              "system": "http://terminology.hl7.org/CodeSystem/observation-category",
              "display": "Survey"
            }
          ]
        },
        "mustSupport": true
      },
      {
        "id": "Observation.category:survey.coding",
        "path": "Observation.category.coding",
        "min": 1,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Observation.category:assessment-scale",
        "path": "Observation.category",
        "sliceName": "assessment-scale",
        "min": 1,
        "max": "1",
        "patternCodeableConcept": {
          "coding": [
            {
              "code": "273249006",
              "system": "http://snomed.info/sct",
              "display": "Assessment scales (assessment scale)"
            }
          ]
        },
        "mustSupport": true
      },
      {
        "id": "Observation.category:assessment-scale.coding",
        "path": "Observation.category.coding",
        "min": 1,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Observation.code",
        "path": "Observation.code",
        "definition": "Identifies which score/scale is being represented",
        "constraint": [
          {
            "key": "mii-icu-loinc-sct-dgai-ieee11073",
            "human": "Es muss mindestens ein LOINC, SnomedCT, IEEE-11073 oder DGAI Code vorhanden sein",
            "source": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score",
            "severity": "error",
            "expression": "coding.where(system= $loinc ).exists() or coding.where(system= $sct ).exists() or coding.where(system= $dgai).exists() or coding.where(system= $ieee-11073).exists()"
          }
        ]
      },
      {
        "id": "Observation.code.coding",
        "path": "Observation.code.coding",
        "slicing": {
          "discriminator": [
            {
              "type": "pattern",
              "path": "$this"
            }
          ],
          "rules": "open"
        },
        "mustSupport": true
      },
      {
        "id": "Observation.code.coding:loinc",
        "path": "Observation.code.coding",
        "sliceName": "loinc",
        "min": 0,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Observation.code.coding:loinc.system",
        "path": "Observation.code.coding.system",
        "min": 1,
        "patternUri": "http://loinc.org"
      },
      {
        "id": "Observation.code.coding:loinc.code",
        "path": "Observation.code.coding.code",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Observation.code.coding:sct",
        "path": "Observation.code.coding",
        "sliceName": "sct",
        "min": 0,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Observation.code.coding:sct.system",
        "path": "Observation.code.coding.system",
        "min": 1,
        "patternUri": "http://snomed.info/sct"
      },
      {
        "id": "Observation.code.coding:sct.version",
        "path": "Observation.code.coding.version",
        "patternString": "http://snomed.info/sct/900000000000207008/version/20260301",
        "mustSupport": true
      },
      {
        "id": "Observation.code.coding:sct.code",
        "path": "Observation.code.coding.code",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Observation.subject",
        "path": "Observation.subject",
        "short": "Patient being assessed",
        "min": 1,
        "type": [
          {
            "code": "Reference",
            "targetProfile": [
              "http://hl7.org/fhir/StructureDefinition/Patient"
            ]
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Observation.encounter",
        "path": "Observation.encounter",
        "mustSupport": true
      },
      {
        "id": "Observation.effective[x]",
        "path": "Observation.effective[x]",
        "min": 1,
        "type": [
          {
            "code": "dateTime"
          },
          {
            "code": "Period"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Observation.issued",
        "path": "Observation.issued",
        "mustSupport": true
      },
      {
        "id": "Observation.performer",
        "path": "Observation.performer",
        "mustSupport": true
      },
      {
        "id": "Observation.value[x]",
        "path": "Observation.value[x]",
        "type": [
          {
            "code": "Quantity"
          },
          {
            "code": "CodeableConcept"
          },
          {
            "code": "integer"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Observation.dataAbsentReason",
        "path": "Observation.dataAbsentReason",
        "mustSupport": true
      },
      {
        "id": "Observation.interpretation",
        "path": "Observation.interpretation",
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Observation.specimen",
        "path": "Observation.specimen",
        "max": "0"
      },
      {
        "id": "Observation.device",
        "path": "Observation.device",
        "mustSupport": true
      },
      {
        "id": "Observation.hasMember",
        "path": "Observation.hasMember",
        "mustSupport": true
      },
      {
        "id": "Observation.derivedFrom",
        "path": "Observation.derivedFrom",
        "comment": "Source observations used to calculate score",
        "mustSupport": true
      },
      {
        "id": "Observation.component",
        "path": "Observation.component",
        "constraint": [
          {
            "key": "mii-icu-val-xor-dar",
            "human": "Resource must have either value or dataAbsentReason.",
            "source": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mii-pr-icu-score",
            "severity": "error",
            "expression": "value.exists() xor dataAbsentReason.exists()"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Observation.component.code",
        "path": "Observation.component.code",
        "slicing": {
          "discriminator": [
            {
              "type": "pattern",
              "path": "$this"
            }
          ],
          "rules": "open"
        },
        "mustSupport": true
      },
      {
        "id": "Observation.component.value[x]",
        "path": "Observation.component.value[x]",
        "type": [
          {
            "code": "Quantity"
          },
          {
            "code": "CodeableConcept"
          },
          {
            "code": "integer"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Observation.component.dataAbsentReason",
        "path": "Observation.component.dataAbsentReason",
        "mustSupport": true
      }
    ]
  }
}