From c7f8f265715abae72de71fb556dbbb6a72bbef94 Mon Sep 17 00:00:00 2001 From: Lucas Triefenbach Date: Fri, 30 May 2025 11:13:35 +0200 Subject: [PATCH] Change Consent Key Parsing To Enum --- .../torch/config/AppConfig.java | 3 +- .../torch/consent/ConsentCodeMapper.java | 52 +- .../torch/consent/ConsentFetcher.java | 3 +- .../torch/consent/ConsentHandler.java | 3 +- .../torch/model/crtdl/Crtdl.java | 18 +- .../model/crtdl/annotated/AnnotatedCrtdl.java | 28 +- .../torch/model/mapping/ConsentKey.java | 11 + .../torch/service/CrtdlValidatorService.java | 13 +- .../torch/ConsentFetcherIT.java | 7 +- .../torch/ConsentHandlerIT.java | 3 +- .../torch/ConsentHandlerTest.java | 9 +- .../torch/config/TestConfig.java | 3 +- .../management/ProcessedGroupFactoryTest.java | 3 +- .../torch/model/crtdl/CrtdlTest.java | 22 +- .../service/CrtdlProcessingServiceIT.java | 26 + .../service/CrtdlValidatorServiceTest.java | 103 +- .../torch/util/ConsentCodeMapperIT.java | 30 +- .../torch/util/ConsentCodeMapperTest.java | 79 +- .../torch/util/ConsentProcessorIT.java | 8 +- .../CRTDL/CRTDL_all_fields_consent.json | 7330 ----------------- .../CRTDL/CRTDL_diagnosis_basic_consent.json | 82 + 21 files changed, 321 insertions(+), 7515 deletions(-) delete mode 100644 src/test/resources/CRTDL/CRTDL_all_fields_consent.json create mode 100644 src/test/resources/CRTDL/CRTDL_diagnosis_basic_consent.json diff --git a/src/main/java/de/medizininformatikinitiative/torch/config/AppConfig.java b/src/main/java/de/medizininformatikinitiative/torch/config/AppConfig.java index 08f092a9..73461bb6 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/config/AppConfig.java +++ b/src/main/java/de/medizininformatikinitiative/torch/config/AppConfig.java @@ -11,6 +11,7 @@ import de.medizininformatikinitiative.torch.consent.ConsentValidator; import de.medizininformatikinitiative.torch.cql.CqlClient; import de.medizininformatikinitiative.torch.cql.FhirHelper; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; import de.medizininformatikinitiative.torch.management.CompartmentManager; import de.medizininformatikinitiative.torch.management.ProcessedGroupFactory; import de.medizininformatikinitiative.torch.management.StructureDefinitionHandler; @@ -257,7 +258,7 @@ public ObjectMapper objectMapper() { } @Bean - public ConsentCodeMapper consentCodeMapper(ObjectMapper objectMapper) throws IOException { + public ConsentCodeMapper consentCodeMapper(ObjectMapper objectMapper) throws IOException, ValidationException { return new ConsentCodeMapper(torchProperties.mapping().consent(), objectMapper); } diff --git a/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentCodeMapper.java b/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentCodeMapper.java index 62f6d737..3210bb4d 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentCodeMapper.java +++ b/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentCodeMapper.java @@ -2,35 +2,52 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; /** - * Provides a Map of all consent codes belonging to a consent key e.g. "yes-yes-yes-yes" + * Provides a Map of all consent codes belonging to a consent key e.g. "yes-yes-yes-yes" as + * defined in the mapping file. */ public class ConsentCodeMapper { - private final Map> consentMap; + private final Map> consentMap; private final ObjectMapper objectMapper; - public ConsentCodeMapper(String consentFilePath, ObjectMapper objectMapper) throws IOException { - this.consentMap = new HashMap<>(); + /** + * @param consentFilePath Path to the mapping file e.g. consent-mappings_fhir.json + * @param objectMapper Objectmapper for Json Processing + * @throws IOException + * @throws ValidationException + */ + public ConsentCodeMapper(String consentFilePath, ObjectMapper objectMapper) throws IOException, ValidationException { + this.consentMap = new EnumMap<>(ConsentKey.class); + Objects.requireNonNull(objectMapper); this.objectMapper = objectMapper; buildConsentMap(consentFilePath); } // Method to build the map based on the JSON file - private void buildConsentMap(String filePath) throws IOException { - //Class get Resource as Stream - //init method + private void buildConsentMap(String filePath) throws IOException, ValidationException { File file = new File(filePath); JsonNode consentMappingData = objectMapper.readTree(file.getAbsoluteFile()); for (JsonNode consent : consentMappingData) { - String keyCode = consent.get("key").get("code").asText(); + + ConsentKey keyCode = ConsentKey.fromString(consent.get("key").get("code").asText()); List relevantCodes = new ArrayList<>(); JsonNode fixedCriteria = consent.get("fixedCriteria"); @@ -43,12 +60,23 @@ private void buildConsentMap(String filePath) throws IOException { } } } - consentMap.put(keyCode, relevantCodes); } + if (consentMap.size() != ConsentKey.values().length) { + throw new ValidationException("Consent map size does not match ConsentKey enum size"); + } } - public Set getRelevantCodes(String key) { + /** + * @param key Consentkey to be handled + * @return All codes associated with that key + * e.g. for "no-no-no-no" in the current version of the codesystem + * "urn:oid:2.16.840.1.113883.3.1937.777.24.5.3" the codes + * "2.16.840.1.113883.3.1937.777.24.5.3.47" + * "2.16.840.1.113883.3.1937.777.24.5.3.49" + * "2.16.840.1.113883.3.1937.777.24.5.3.9" will be returned + */ + public Set getRelevantCodes(ConsentKey key) { return new HashSet<>(consentMap.getOrDefault(key, Collections.emptyList())); } -} \ No newline at end of file +} diff --git a/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentFetcher.java b/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentFetcher.java index 501f4a55..e8a34810 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentFetcher.java +++ b/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentFetcher.java @@ -8,6 +8,7 @@ import de.medizininformatikinitiative.torch.model.fhir.Query; import de.medizininformatikinitiative.torch.model.management.PatientBatch; import de.medizininformatikinitiative.torch.model.management.PatientResourceBundle; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import de.medizininformatikinitiative.torch.service.DataStore; import de.medizininformatikinitiative.torch.util.ResourceUtils; import org.hl7.fhir.r4.model.Consent; @@ -98,7 +99,7 @@ private static Map mergeAllProvisions(Map buildConsentInfo(String key, PatientBatch batch) { + public Mono buildConsentInfo(ConsentKey key, PatientBatch batch) { logger.debug("Starting to build consent info for key {} and {} patients", key, batch.ids().size()); Set codes = mapper.getRelevantCodes(key); diff --git a/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentHandler.java b/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentHandler.java index 7c3534c3..9b1a18d5 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentHandler.java +++ b/src/main/java/de/medizininformatikinitiative/torch/consent/ConsentHandler.java @@ -4,6 +4,7 @@ import de.medizininformatikinitiative.torch.model.consent.PatientBatchWithConsent; import de.medizininformatikinitiative.torch.model.fhir.Query; import de.medizininformatikinitiative.torch.model.management.PatientBatch; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import de.medizininformatikinitiative.torch.service.DataStore; import de.medizininformatikinitiative.torch.util.ResourceUtils; import org.hl7.fhir.r4.model.Encounter; @@ -73,7 +74,7 @@ private static Mono>> groupEncounterByPatient( * @param batch Batch of patient IDs. * @return {@link Mono} containing all required provisions by patient with valid times. */ - public Mono fetchAndBuildConsentInfo(String consentKey, PatientBatch batch) { + public Mono fetchAndBuildConsentInfo(ConsentKey consentKey, PatientBatch batch) { return consentFetcher.buildConsentInfo(consentKey, batch) .flatMap(this::adjustConsentPeriodsByPatientEncounters); } diff --git a/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/Crtdl.java b/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/Crtdl.java index 3dd223b1..e6d473a7 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/Crtdl.java +++ b/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/Crtdl.java @@ -3,8 +3,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.JsonNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import java.util.Optional; @@ -17,26 +17,23 @@ public record Crtdl( @JsonProperty(required = true) DataExtraction dataExtraction ) { - private static final Logger logger = LoggerFactory.getLogger(Crtdl.class); public Crtdl { requireNonNull(cohortDefinition); requireNonNull(dataExtraction); } - public Optional consentKey() { + public Optional consentKey() throws ValidationException { JsonNode inclusionCriteria = cohortDefinition.get("inclusionCriteria"); if (inclusionCriteria != null && inclusionCriteria.isArray()) { for (JsonNode criteriaGroup : inclusionCriteria) { for (JsonNode criteria : criteriaGroup) { JsonNode context = criteria.get("context"); if (context != null && "Einwilligung".equals(context.get("code").asText())) { - JsonNode termcodes = criteria.get("termCodes"); - if (termcodes != null && termcodes.isArray()) { - JsonNode firstTermcode = termcodes.get(0); - if (firstTermcode != null && firstTermcode.has("code")) { - return Optional.of(firstTermcode.get("code").asText()); - } + JsonNode firstTermcode = criteria.get("termCodes").get(0); + if (firstTermcode != null && firstTermcode.has("code")) { + String code = firstTermcode.get("code").asText(); + return Optional.of(ConsentKey.fromString(code)); } } } @@ -44,5 +41,4 @@ public Optional consentKey() { } return Optional.empty(); } - } diff --git a/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/annotated/AnnotatedCrtdl.java b/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/annotated/AnnotatedCrtdl.java index 1bb74679..b537a70d 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/annotated/AnnotatedCrtdl.java +++ b/src/main/java/de/medizininformatikinitiative/torch/model/crtdl/annotated/AnnotatedCrtdl.java @@ -1,38 +1,18 @@ package de.medizininformatikinitiative.torch.model.crtdl.annotated; import com.fasterxml.jackson.databind.JsonNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import java.util.Optional; import static java.util.Objects.requireNonNull; -public record AnnotatedCrtdl(JsonNode cohortDefinition, AnnotatedDataExtraction dataExtraction) { +public record AnnotatedCrtdl(JsonNode cohortDefinition, AnnotatedDataExtraction dataExtraction, + Optional consentKey) { public AnnotatedCrtdl { requireNonNull(cohortDefinition); requireNonNull(dataExtraction); - } - - public Optional consentKey() { - JsonNode inclusionCriteria = cohortDefinition.get("inclusionCriteria"); - if (inclusionCriteria != null && inclusionCriteria.isArray()) { - for (JsonNode criteriaGroup : inclusionCriteria) { - for (JsonNode criteria : criteriaGroup) { - JsonNode context = criteria.get("context"); - if (context != null && "Einwilligung".equals(context.get("code").asText())) { - JsonNode termcodes = criteria.get("termCodes"); - if (termcodes != null && termcodes.isArray()) { - JsonNode firstTermcode = termcodes.get(0); - if (firstTermcode != null && firstTermcode.has("code")) { - return Optional.of(firstTermcode.get("code").asText()); - } - } - } - } - } - } - return Optional.empty(); + requireNonNull(consentKey); } } diff --git a/src/main/java/de/medizininformatikinitiative/torch/model/mapping/ConsentKey.java b/src/main/java/de/medizininformatikinitiative/torch/model/mapping/ConsentKey.java index bd53a9dd..f235baf5 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/model/mapping/ConsentKey.java +++ b/src/main/java/de/medizininformatikinitiative/torch/model/mapping/ConsentKey.java @@ -1,5 +1,7 @@ package de.medizininformatikinitiative.torch.model.mapping; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; + import static java.util.Objects.requireNonNull; public enum ConsentKey { @@ -31,4 +33,13 @@ public enum ConsentKey { public String toString() { return s; } + + public static ConsentKey fromString(String value) throws ValidationException { + for (ConsentKey key : values()) { + if (key.toString().equalsIgnoreCase(value)) { + return key; + } + } + throw new ValidationException("Unknown consent key: " + value); + } } diff --git a/src/main/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorService.java b/src/main/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorService.java index 34150afc..7f7fe7e3 100644 --- a/src/main/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorService.java +++ b/src/main/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorService.java @@ -9,6 +9,7 @@ import de.medizininformatikinitiative.torch.model.crtdl.annotated.AnnotatedAttributeGroup; import de.medizininformatikinitiative.torch.model.crtdl.annotated.AnnotatedCrtdl; import de.medizininformatikinitiative.torch.model.crtdl.annotated.AnnotatedDataExtraction; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import de.medizininformatikinitiative.torch.util.CompiledStructureDefinition; import de.medizininformatikinitiative.torch.util.FhirPathBuilder; import org.hl7.fhir.r4.model.ElementDefinition; @@ -20,6 +21,7 @@ import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.function.Predicate; @@ -45,26 +47,27 @@ public CrtdlValidatorService(StructureDefinitionHandler profileHandler, Standard * @return the validated Crtdl or an error signal with ValidationException if a profile is unknown. */ public AnnotatedCrtdl validate(Crtdl crtdl) throws ValidationException { + Optional consentKey = crtdl.consentKey(); List annotatedAttributeGroups = new ArrayList<>(); Set linkedGroups = new HashSet<>(); Set successfullyAnnotatedGroups = new HashSet<>(); - boolean exactlyOnePatientGroup = false; + boolean patientGroupFound = false; String patientAttributeGroupId = ""; for (AttributeGroup attributeGroup : crtdl.dataExtraction().attributeGroups()) { CompiledStructureDefinition definition = profileHandler.getDefinition(attributeGroup.groupReference()) .orElseThrow(() -> new ValidationException("Unknown Profile: " + attributeGroup.groupReference())); if (Objects.equals(definition.type(), "Patient")) { - if (exactlyOnePatientGroup) { + if (patientGroupFound) { throw new ValidationException(" More than one Patient Attribute Group"); } else { - exactlyOnePatientGroup = true; + patientGroupFound = true; patientAttributeGroupId = attributeGroup.id(); logger.debug("Found Patient Attribute Group {}", patientAttributeGroupId); } } } - if (!exactlyOnePatientGroup) { + if (!patientGroupFound) { throw new ValidationException("No Patient Attribute Group"); } @@ -86,7 +89,7 @@ public AnnotatedCrtdl validate(Crtdl crtdl) throws ValidationException { } - return new AnnotatedCrtdl(crtdl.cohortDefinition(), new AnnotatedDataExtraction(annotatedAttributeGroups)); + return new AnnotatedCrtdl(crtdl.cohortDefinition(), new AnnotatedDataExtraction(annotatedAttributeGroups), consentKey); } private AnnotatedAttributeGroup annotateGroup(AttributeGroup attributeGroup, CompiledStructureDefinition diff --git a/src/test/java/de/medizininformatikinitiative/torch/ConsentFetcherIT.java b/src/test/java/de/medizininformatikinitiative/torch/ConsentFetcherIT.java index 45d849ff..feafb4a8 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/ConsentFetcherIT.java +++ b/src/test/java/de/medizininformatikinitiative/torch/ConsentFetcherIT.java @@ -5,6 +5,7 @@ import de.medizininformatikinitiative.torch.exceptions.ConsentViolatedException; import de.medizininformatikinitiative.torch.model.consent.PatientBatchWithConsent; import de.medizininformatikinitiative.torch.model.management.PatientBatch; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import org.hl7.fhir.r4.model.DateTimeType; import org.hl7.fhir.r4.model.Observation; import org.hl7.fhir.r4.model.Reference; @@ -69,7 +70,7 @@ private void assertConsentFalse(PatientBatchWithConsent batch, String patientId, @Test void failsOnNoPatientMatchesConsentKeyBuildingConsent() { - var resultBatch = consentFetcher.buildConsentInfo("yes-no-no-yes", BATCH); + var resultBatch = consentFetcher.buildConsentInfo(ConsentKey.YES_NO_NO_YES, BATCH); StepVerifier.create(resultBatch) .expectErrorSatisfies(error -> assertThat(error) @@ -80,7 +81,7 @@ void failsOnNoPatientMatchesConsentKeyBuildingConsent() { @Test void failsOnUnknownPatientBuildingConsent() { - var resultBatch = consentFetcher.buildConsentInfo("yes-yes-yes-yes", BATCH_UNKNOWN); + var resultBatch = consentFetcher.buildConsentInfo(ConsentKey.YES_YES_YES_YES, BATCH_UNKNOWN); StepVerifier.create(resultBatch) .expectErrorSatisfies(error -> assertThat(error) @@ -91,7 +92,7 @@ void failsOnUnknownPatientBuildingConsent() { @Test void successBuildingConsent() { - var resultBatch = consentFetcher.buildConsentInfo("yes-yes-yes-yes", BATCH); + var resultBatch = consentFetcher.buildConsentInfo(ConsentKey.YES_YES_YES_YES, BATCH); StepVerifier.create(resultBatch) .assertNext(batch -> { diff --git a/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerIT.java b/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerIT.java index 15dbc29a..2f196f20 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerIT.java +++ b/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerIT.java @@ -4,6 +4,7 @@ import de.medizininformatikinitiative.torch.consent.ConsentValidator; import de.medizininformatikinitiative.torch.model.consent.PatientBatchWithConsent; import de.medizininformatikinitiative.torch.model.management.PatientBatch; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import org.hl7.fhir.r4.model.DateTimeType; import org.hl7.fhir.r4.model.Observation; import org.hl7.fhir.r4.model.Reference; @@ -67,7 +68,7 @@ private void assertConsentFalse(PatientBatchWithConsent batch, String patientId, @Test void successAfterEncounterUpdatesProvisions() { - var resultBatch = consentHandler.fetchAndBuildConsentInfo("yes-yes-yes-yes", BATCH); + var resultBatch = consentHandler.fetchAndBuildConsentInfo(ConsentKey.YES_YES_YES_YES, BATCH); StepVerifier.create(resultBatch) .assertNext(batch -> { diff --git a/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerTest.java b/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerTest.java index 6646d561..54229d36 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerTest.java +++ b/src/test/java/de/medizininformatikinitiative/torch/ConsentHandlerTest.java @@ -4,6 +4,7 @@ import de.medizininformatikinitiative.torch.consent.ConsentHandler; import de.medizininformatikinitiative.torch.exceptions.ConsentViolatedException; import de.medizininformatikinitiative.torch.model.management.PatientBatch; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import de.medizininformatikinitiative.torch.service.DataStore; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -26,10 +27,10 @@ public class ConsentHandlerTest { @Test void failsOnNoPatientMatchesConsentKeyBuildingConsent() { - when(consentFetcher.buildConsentInfo("yes-no-no-yes", BATCH)) + when(consentFetcher.buildConsentInfo(ConsentKey.YES_NO_NO_YES, BATCH)) .thenReturn(Mono.error(new ConsentViolatedException("No valid provisions found for any patients in batch"))); - var resultBatch = consentHandler.fetchAndBuildConsentInfo("yes-no-no-yes", BATCH); + var resultBatch = consentHandler.fetchAndBuildConsentInfo(ConsentKey.YES_NO_NO_YES, BATCH); StepVerifier.create(resultBatch) .expectErrorSatisfies(error -> assertThat(error) @@ -40,10 +41,10 @@ void failsOnNoPatientMatchesConsentKeyBuildingConsent() { @Test void failsOnUnknownPatientBuildingConsent() { - when(consentFetcher.buildConsentInfo("yes-yes-yes-yes", BATCH_UNKNOWN)) + when(consentFetcher.buildConsentInfo(ConsentKey.YES_YES_YES_YES, BATCH_UNKNOWN)) .thenReturn(Mono.error(new ConsentViolatedException("No valid provisions found for any patients in batch"))); - var resultBatch = consentHandler.fetchAndBuildConsentInfo("yes-yes-yes-yes", BATCH_UNKNOWN); + var resultBatch = consentHandler.fetchAndBuildConsentInfo(ConsentKey.YES_YES_YES_YES, BATCH_UNKNOWN); StepVerifier.create(resultBatch) .expectErrorSatisfies(error -> assertThat(error) diff --git a/src/test/java/de/medizininformatikinitiative/torch/config/TestConfig.java b/src/test/java/de/medizininformatikinitiative/torch/config/TestConfig.java index 539afc66..ee2b031b 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/config/TestConfig.java +++ b/src/test/java/de/medizininformatikinitiative/torch/config/TestConfig.java @@ -11,6 +11,7 @@ import de.medizininformatikinitiative.torch.consent.ConsentValidator; import de.medizininformatikinitiative.torch.cql.CqlClient; import de.medizininformatikinitiative.torch.cql.FhirHelper; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; import de.medizininformatikinitiative.torch.management.CompartmentManager; import de.medizininformatikinitiative.torch.management.ProcessedGroupFactory; import de.medizininformatikinitiative.torch.management.StructureDefinitionHandler; @@ -229,7 +230,7 @@ public ObjectMapper objectMapper() { @Bean - public ConsentCodeMapper consentCodeMapper(ObjectMapper objectMapper) throws IOException { + public ConsentCodeMapper consentCodeMapper(ObjectMapper objectMapper) throws IOException, ValidationException { return new ConsentCodeMapper(torchProperties.mapping().consent(), objectMapper); } diff --git a/src/test/java/de/medizininformatikinitiative/torch/management/ProcessedGroupFactoryTest.java b/src/test/java/de/medizininformatikinitiative/torch/management/ProcessedGroupFactoryTest.java index 53557901..4ed06016 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/management/ProcessedGroupFactoryTest.java +++ b/src/test/java/de/medizininformatikinitiative/torch/management/ProcessedGroupFactoryTest.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; @@ -34,7 +35,7 @@ class ProcessedGroupFactoryTest { @Test void create() { - AnnotatedCrtdl crtdl = new AnnotatedCrtdl(node, new AnnotatedDataExtraction(List.of(group, group2, group3))); + AnnotatedCrtdl crtdl = new AnnotatedCrtdl(node, new AnnotatedDataExtraction(List.of(group, group2, group3)), Optional.empty()); GroupsToProcess result = processor.create(crtdl); diff --git a/src/test/java/de/medizininformatikinitiative/torch/model/crtdl/CrtdlTest.java b/src/test/java/de/medizininformatikinitiative/torch/model/crtdl/CrtdlTest.java index 31f88480..d90ea15b 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/model/crtdl/CrtdlTest.java +++ b/src/test/java/de/medizininformatikinitiative/torch/model/crtdl/CrtdlTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -10,7 +11,7 @@ import static org.assertj.core.api.Assertions.assertThat; -public class CrtdlTest { +class CrtdlTest { private ObjectMapper objectMapper; @@ -21,7 +22,7 @@ void setUp() { } @Test - public void testCondition() throws Exception { + void testCondition() throws Exception { try (FileInputStream fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_diagnosis_basic_date.json")) { Crtdl crtdl = objectMapper.readValue(fis, Crtdl.class); @@ -31,7 +32,7 @@ public void testCondition() throws Exception { } @Test - public void testObservation() throws Exception { + void testObservation() throws Exception { try (FileInputStream fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_observation.json")) { Crtdl crtdl = objectMapper.readValue(fis, Crtdl.class); @@ -43,21 +44,22 @@ public void testObservation() throws Exception { } @Test - public void consentKeyEmpty() throws Exception { + void consentKeyEmpty() throws Exception { try (FileInputStream fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_observation.json")) { Crtdl crtdl = objectMapper.readValue(fis, Crtdl.class); - assertThat(crtdl.consentKey()).isEqualTo(Optional.empty()); + assertThat(crtdl.consentKey()).isNotPresent(); } } -/* + @Test - public void consentKeyPopulated() throws Exception { - try (FileInputStream fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_all_fields_consent.json")) { + void consentKeyPopulated() throws Exception { + try (FileInputStream fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_diagnosis_basic_consent.json")) { Crtdl crtdl = objectMapper.readValue(fis, Crtdl.class); - assertThat(crtdl.consentKey()).isEqualTo(Optional.of("yes-yes-no-yes")); + assertThat(crtdl.consentKey()).isEqualTo(Optional.of(ConsentKey.YES_YES_NO_YES)); } } -*/ + + } diff --git a/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlProcessingServiceIT.java b/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlProcessingServiceIT.java index bbf7c7fe..dabddedd 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlProcessingServiceIT.java +++ b/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlProcessingServiceIT.java @@ -66,6 +66,7 @@ class CrtdlProcessingServiceIT { private AnnotatedCrtdl crtdlNoPatients; private AnnotatedCrtdl crtdlObservationLinked; private AnnotatedCrtdl crtdlObservationMedicationLinked; + private AnnotatedCrtdl crtdlWithConsent; @BeforeAll void init() throws IOException, ValidationException { @@ -82,6 +83,9 @@ void init() throws IOException, ValidationException { fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_MedicationAdministraion_linked_encounter_linked_medication.json"); crtdlObservationMedicationLinked = validator.validate(INTEGRATION_TEST_SETUP.objectMapper().readValue(fis, Crtdl.class)); fis.close(); + fis = new FileInputStream("src/test/resources/CRTDL/CRTDL_diagnosis_basic_consent.json"); + crtdlWithConsent = validator.validate(INTEGRATION_TEST_SETUP.objectMapper().readValue(fis, Crtdl.class)); + fis.close(); webClient.post() .bodyValue(Files.readString(Path.of(testPopulationPath))) @@ -98,6 +102,7 @@ void cleanup() throws IOException { clearDirectory("processwithrefs"); clearDirectory("processwithoutrefs"); clearDirectory("processWithRefsCoreAndPatient"); + clearDirectory("processWithConsent"); } @@ -145,6 +150,27 @@ void processReferences() { } } + @Test + void processConsent() { + String jobId = "processWithConsent"; + Path jobDir = resultFileManager.initJobDir(jobId).block(); + + Mono result = service.process(crtdlWithConsent, jobId, List.of()); + + + Assertions.assertDoesNotThrow(() -> result.block()); + try { + Assertions.assertNotNull(jobDir); + try (DirectoryStream stream = Files.newDirectoryStream(jobDir)) { + boolean filesExist = stream.iterator().hasNext(); + assertTrue(filesExist, "Job directory should contain files."); + } + } catch (IOException e) { + logger.trace(e.getMessage()); + throw new RuntimeException("Failed to read job directory."); + } + } + @Test void processReferencesOutsidePatientBundle() { String jobId = "processWithRefsCoreAndPatient"; diff --git a/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorServiceTest.java b/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorServiceTest.java index 9f79d18d..cbd06d88 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorServiceTest.java +++ b/src/test/java/de/medizininformatikinitiative/torch/service/CrtdlValidatorServiceTest.java @@ -1,25 +1,84 @@ package de.medizininformatikinitiative.torch.service; import ca.uhn.fhir.context.FhirContext; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import de.medizininformatikinitiative.torch.exceptions.ValidationException; import de.medizininformatikinitiative.torch.management.CompartmentManager; -import de.medizininformatikinitiative.torch.model.crtdl.*; +import de.medizininformatikinitiative.torch.model.crtdl.Attribute; +import de.medizininformatikinitiative.torch.model.crtdl.AttributeGroup; +import de.medizininformatikinitiative.torch.model.crtdl.Code; +import de.medizininformatikinitiative.torch.model.crtdl.Crtdl; +import de.medizininformatikinitiative.torch.model.crtdl.DataExtraction; +import de.medizininformatikinitiative.torch.model.crtdl.Filter; import de.medizininformatikinitiative.torch.model.crtdl.annotated.AnnotatedAttribute; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import de.medizininformatikinitiative.torch.setup.IntegrationTestSetup; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import java.io.IOException; -import java.time.LocalDate; import java.util.List; +import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; class CrtdlValidatorServiceTest { + + String invalidConsentKeyJson = """ + { + "version": "http://to_be_decided.com/draft-1/schema#", + "display": "", + "inclusionCriteria": [ + [ + { + "context": { + "code": "Einwilligung", + "display": "Einwilligung", + "system": "fdpg.mii.cds", + "version": "1.0.0" + }, + "termCodes": [ + { + "code": "invalid", + "display": "Verteilte, EU-DSGVO konforme Analyse, ohne Krankenassendaten, und mit Rekontaktierung", + "system": "fdpg.consent.combined" + } + ] + } + ] + ] + } + """; + + String validConsentKeyJson = """ + { + "inclusionCriteria": [ + [ + { + "context": { + "code": "Einwilligung", + "display": "Einwilligung", + "system": "fdpg.mii.cds", + "version": "1.0.0" + }, + "termCodes": [ + { + "code": "yes-yes-no-yes", + "display": "Verteilte, EU-DSGVO konforme Analyse, ohne Krankenassendaten, und mit Rekontaktierung", + "system": "fdpg.consent.combined" + } + ] + } + ] + ] + } + """; + private final IntegrationTestSetup itSetup = new IntegrationTestSetup(); private static final FilterService filterService = new FilterService(FhirContext.forR4(), "search-parameters.json"); private final CrtdlValidatorService validatorService = new CrtdlValidatorService(itSetup.structureDefinitionHandler(), @@ -37,42 +96,49 @@ static void init() { } @Test - void unknownProfile() throws ValidationException { + void unknownConsentKey() throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode root = objectMapper.readTree(invalidConsentKeyJson); + Crtdl crtdl = new Crtdl(root, new DataExtraction(List.of(patientGroup, new AttributeGroup("test", "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab", List.of(), List.of())))); + assertThatThrownBy(() -> validatorService.validate(crtdl)).isInstanceOf(ValidationException.class) + .hasMessageContaining("Unknown consent key:"); + + } + + + @Test + void unknownProfile() { Crtdl crtdl = new Crtdl(node, new DataExtraction(List.of(patientGroup, new AttributeGroup("test", "unknown.test", List.of(), List.of())))); - assertThatThrownBy(() -> { - validatorService.validate(crtdl); - }).isInstanceOf(ValidationException.class) + assertThatThrownBy(() -> validatorService.validate(crtdl)).isInstanceOf(ValidationException.class) .hasMessageContaining("Unknown Profile: unknown.test"); } @Test - void unknownAttribute() throws ValidationException { + void unknownAttribute() { Crtdl crtdl = new Crtdl(node, new DataExtraction(List.of(patientGroup, new AttributeGroup("test", "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab", List.of(new Attribute("Condition.unknown", false)), List.of())))); - assertThatThrownBy(() -> { - validatorService.validate(crtdl); - }).isInstanceOf(ValidationException.class) + assertThatThrownBy(() -> validatorService.validate(crtdl)).isInstanceOf(ValidationException.class) .hasMessageContaining("Unknown Attribute Condition.unknown in group test"); } @Test - void referenceWithoutLinkedGroups() throws ValidationException { + void referenceWithoutLinkedGroups() { Crtdl crtdl = new Crtdl(node, new DataExtraction(List.of(patientGroup, new AttributeGroup("test", "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab", List.of(new Attribute("Observation.subject", false)), List.of())))); - assertThatThrownBy(() -> { - validatorService.validate(crtdl); - }).isInstanceOf(ValidationException.class) + assertThatThrownBy(() -> validatorService.validate(crtdl)).isInstanceOf(ValidationException.class) .hasMessageContaining("Reference Attribute Observation.subject without linked Groups in group test"); } @Test - void validInput_withoutFilter() throws ValidationException { - Crtdl crtdl = new Crtdl(node, new DataExtraction(List.of(patientGroup))); + void validInput_withoutFilter() throws ValidationException, JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode root = objectMapper.readTree(validConsentKeyJson); + Crtdl crtdl = new Crtdl(root, new DataExtraction(List.of(patientGroup, new AttributeGroup("test", "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab", List.of(), List.of(new Filter("token", "code", List.of(new Code("some-system", "some-code")))))))); var validatedCrtdl = validatorService.validate(crtdl); @@ -83,6 +149,7 @@ void validInput_withoutFilter() throws ValidationException { new AnnotatedAttribute("Patient.id", "Patient.id", "Patient.id", false), new AnnotatedAttribute("Patient.meta.profile", "Patient.meta.profile", "Patient.meta.profile", false) )); + assertThat(validatedCrtdl.consentKey()).isEqualTo(Optional.of(ConsentKey.YES_YES_NO_YES)); } @Test @@ -101,8 +168,8 @@ void validInput_withFilter() throws ValidationException { new AnnotatedAttribute("Observation.meta.profile", "Observation.meta.profile", "Observation.meta.profile", false), new AnnotatedAttribute("Observation.subject", "Observation.subject", "Observation.subject", false, List.of("patientGroupId")) )); + assertThat(validatedCrtdl.consentKey()).isEqualTo(Optional.empty()); } - -} \ No newline at end of file +} diff --git a/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperIT.java b/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperIT.java index a1382fd7..5cda07b2 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperIT.java +++ b/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperIT.java @@ -2,47 +2,31 @@ import com.fasterxml.jackson.databind.ObjectMapper; import de.medizininformatikinitiative.torch.consent.ConsentCodeMapper; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; import java.util.Set; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class ConsentCodeMapperIT { private ConsentCodeMapper consentCodeMapper; @BeforeEach - public void setUp() throws IOException { + public void setUp() throws IOException, ValidationException { // Use the real JSON file path or load a test JSON file String consentFilePath = "src/test/resources/mappings/consent-mappings.json"; consentCodeMapper = new ConsentCodeMapper(consentFilePath, new ObjectMapper()); } @Test - public void testGetRelevantCodes_withValidKey() { - // Test that codes are returned for the key "yes-yes-yes-yes" - Set relevantCodes = consentCodeMapper.getRelevantCodes("yes-yes-yes-yes"); - assertNotNull(relevantCodes); - assertFalse(relevantCodes.isEmpty(), "Relevant codes should not be isEmpty"); - assertTrue(relevantCodes.contains("2.16.840.1.113883.3.1937.777.24.5.3.8"), "Should contain code 2.16.840.1.113883.3.1937.777.24.5.3.8"); - assertTrue(relevantCodes.contains("2.16.840.1.113883.3.1937.777.24.5.3.46"), "Should contain code 2.16.840.1.113883.3.1937.777.24.5.3.46"); - } + public void testGetRelevantCodesWithValidKey() { + Set relevantCodes = consentCodeMapper.getRelevantCodes(ConsentKey.YES_YES_YES_YES); - @Test - public void testGetRelevantCodes_withInvalidKey() { - // Test that an isEmpty list is returned for an invalid key - Set relevantCodes = consentCodeMapper.getRelevantCodes("invalid-key"); - assertNotNull(relevantCodes); - assertTrue(relevantCodes.isEmpty(), "Relevant codes should be isEmpty for an invalid key"); - } - - @Test - public void testConsentMappingLoadedCorrectly() { - // Ensure that the map is loaded correctly with a valid key - Set relevantCodes = consentCodeMapper.getRelevantCodes("yes-yes-yes-yes"); - assertEquals(10, relevantCodes.size(), "Should contain 10 relevant codes for key 'yes-yes-yes-yes'"); + assertThat(relevantCodes).hasSize(10).contains("2.16.840.1.113883.3.1937.777.24.5.3.8", "2.16.840.1.113883.3.1937.777.24.5.3.46"); } } diff --git a/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperTest.java b/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperTest.java index dd20dd49..eb7d9c54 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperTest.java +++ b/src/test/java/de/medizininformatikinitiative/torch/util/ConsentCodeMapperTest.java @@ -3,100 +3,47 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import de.medizininformatikinitiative.torch.consent.ConsentCodeMapper; -import org.junit.jupiter.api.BeforeEach; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.io.File; import java.io.IOException; import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class ConsentCodeMapperTest { + @Mock private ObjectMapper objectMapperMock; - private ConsentCodeMapper consentCodeMapper; - private static final String EXAMPLE_JSON = """ - [ - { - "key": { "code": "CONSENT_KEY_1" }, - "fixedCriteria": [ - { - "value": [ - { "code": "CODE_1" }, - { "code": "CODE_2" } - ] - } - ] - } - ] - """; - - @BeforeEach - public void setUp() throws IOException { - - - // Mock ObjectMapper behavior to read JSON string instead of a file - objectMapperMock = mock(ObjectMapper.class); - JsonNode rootNode = new ObjectMapper().readTree(EXAMPLE_JSON); - when(objectMapperMock.readTree(any(File.class))).thenReturn(rootNode); - - - consentCodeMapper = new ConsentCodeMapper("/dummy/path", objectMapperMock); - } - - // Positive Tests - @Test - @DisplayName("Test getRelevantCodes returns expected codes for valid key") - public void testGetRelevantCodes() { - Set relevantCodes = consentCodeMapper.getRelevantCodes("CONSENT_KEY_1"); - Set expectedCodes = new HashSet<>(List.of("CODE_1", "CODE_2")); - - assertEquals(expectedCodes, relevantCodes); - } - - // Negative Tests - @Test - @DisplayName("Test getRelevantCodes returns isEmpty set for non-existent key") - public void testGetRelevantCodesForNonExistentKey() { - Set relevantCodes = consentCodeMapper.getRelevantCodes("NON_EXISTENT_KEY"); - - assertTrue(relevantCodes.isEmpty(), "Expected an isEmpty set for a non-existent key"); - } @Test @DisplayName("Test IOException is thrown during file reading") public void testIOExceptionThrown() throws IOException { - // Simulate an IOException when(objectMapperMock.readTree(any(File.class))).thenThrow(new IOException("Test exception")); - IOException thrown = assertThrows(IOException.class, () -> { - new ConsentCodeMapper("/invalid/path", objectMapperMock); - }); - - assertEquals("Test exception", thrown.getMessage(), "Expected IOException message to match"); + assertThatExceptionOfType(IOException.class).isThrownBy(() -> new ConsentCodeMapper("/invalid/path", objectMapperMock)); } @Test - @DisplayName("Test invalid JSON structure returns isEmpty set") + @DisplayName("Test invalid JSON structure throws IllegalStateException") public void testInvalidJsonStructure() throws IOException { - // Simulate an invalid JSON by returning an isEmpty root node JsonNode invalidNode = mock(JsonNode.class); when(objectMapperMock.readTree(any(File.class))).thenReturn(invalidNode); when(invalidNode.iterator()).thenReturn(Collections.emptyIterator()); - // Reinitialize with the mocked ObjectMapper - consentCodeMapper = new ConsentCodeMapper("/dummy/path", objectMapperMock); - - assertTrue(consentCodeMapper.getRelevantCodes("ANY_KEY").isEmpty(), "Expected isEmpty set for invalid JSON structure"); + assertThatExceptionOfType(ValidationException.class) + .isThrownBy(() -> new ConsentCodeMapper("/dummy/path", objectMapperMock)) + .withMessageContaining("Consent map size does not match"); } + } diff --git a/src/test/java/de/medizininformatikinitiative/torch/util/ConsentProcessorIT.java b/src/test/java/de/medizininformatikinitiative/torch/util/ConsentProcessorIT.java index 5412fab7..a5223351 100644 --- a/src/test/java/de/medizininformatikinitiative/torch/util/ConsentProcessorIT.java +++ b/src/test/java/de/medizininformatikinitiative/torch/util/ConsentProcessorIT.java @@ -4,7 +4,9 @@ import de.medizininformatikinitiative.torch.consent.ConsentCodeMapper; import de.medizininformatikinitiative.torch.consent.ConsentProcessor; import de.medizininformatikinitiative.torch.exceptions.ConsentViolatedException; +import de.medizininformatikinitiative.torch.exceptions.ValidationException; import de.medizininformatikinitiative.torch.model.consent.Provisions; +import de.medizininformatikinitiative.torch.model.mapping.ConsentKey; import de.medizininformatikinitiative.torch.setup.IntegrationTestSetup; import org.hl7.fhir.r4.model.Consent; import org.junit.jupiter.api.Test; @@ -26,7 +28,7 @@ public class ConsentProcessorIT { private final IntegrationTestSetup integrationTestSetup = new IntegrationTestSetup(); private final ConsentCodeMapper consentCodeMapper; - public ConsentProcessorIT() throws IOException { + public ConsentProcessorIT() throws IOException, ValidationException { // Initialize the ConsentCodeMapper as before consentCodeMapper = new ConsentCodeMapper("src/test/resources/mappings/consent-mappings.json", new ObjectMapper()); } @@ -41,7 +43,7 @@ public void testConsentProcessorFail() throws IOException { assertThrows(ConsentViolatedException.class, () -> { try { Consent resourceSrc = (Consent) integrationTestSetup.readResource("src/test/resources/InputResources/Consent/" + resource); - Provisions provisions = processor.transformToConsentPeriodByCode(resourceSrc, consentCodeMapper.getRelevantCodes("yes-yes-yes-yes")); // Adjusted to include provisions + Provisions provisions = processor.transformToConsentPeriodByCode(resourceSrc, consentCodeMapper.getRelevantCodes(ConsentKey.YES_YES_YES_YES)); // Adjusted to include provisions logger.debug("map size {}", provisions.periods().entrySet()); assertThat(provisions.periods().get("2.16.840.1.113883.3.1937.777.24.5.3.10").isEmpty()).isFalse(); } catch (IOException e) { @@ -58,7 +60,7 @@ public void testConsentProcessor(String resource) throws IOException, ConsentVio ConsentProcessor processor = new ConsentProcessor(integrationTestSetup.fhirContext()); Consent resourceSrc = (Consent) integrationTestSetup.readResource("src/test/resources/InputResources/Consent/" + resource); Provisions provisions = processor.transformToConsentPeriodByCode( - resourceSrc, consentCodeMapper.getRelevantCodes("yes-yes-yes-yes") + resourceSrc, consentCodeMapper.getRelevantCodes(ConsentKey.YES_YES_YES_YES) ); assertThat(provisions.periods().get("2.16.840.1.113883.3.1937.777.24.5.3.10").isEmpty()).isFalse(); } diff --git a/src/test/resources/CRTDL/CRTDL_all_fields_consent.json b/src/test/resources/CRTDL/CRTDL_all_fields_consent.json deleted file mode 100644 index 4886ee7c..00000000 --- a/src/test/resources/CRTDL/CRTDL_all_fields_consent.json +++ /dev/null @@ -1,7330 +0,0 @@ -{ - "version": "http://json-schema.org/to-be-done/schema#", - "display": "", - "cohortDefinition": { - "version": "http://to_be_decided.com/draft-1/schema#", - "display": "", - "inclusionCriteria": [ - [ - { - "context": { - "code": "Einwilligung", - "display": "Einwilligung", - "system": "fdpg.mii.cds", - "version": "1.0.0" - }, - "termCodes": [ - { - "code": "yes-yes-no-yes", - "display": "Verteilte, EU-DSGVO konforme Analyse, ohne Krankenassendaten, und mit Rekontaktierung", - "system": "fdpg.consent.combined" - } - ] - } - ] - ] - }, - "dataExtraction": { - "attributeGroups": [ - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationStatement", - "attributes": [ - { - "attributeRef": "MedicationStatement.identifier", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.basedOn", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.partOf", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.status", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.category", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.medication[x]", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.context", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.effective[x]", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.dateAsserted", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.informationSource", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.reasonCode", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.reasonReference", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.note", - "mustHave": false - }, - { - "attributeRef": "MedicationStatement.dosage", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/medikationsliste", - "attributes": [ - { - "attributeRef": "List.identifier", - "mustHave": false - }, - { - "attributeRef": "List.status", - "mustHave": false - }, - { - "attributeRef": "List.mode", - "mustHave": false - }, - { - "attributeRef": "List.code", - "mustHave": false - }, - { - "attributeRef": "List.encounter", - "mustHave": false - }, - { - "attributeRef": "List.date", - "mustHave": false - }, - { - "attributeRef": "List.entry", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationRequest", - "attributes": [ - { - "attributeRef": "MedicationRequest.identifier", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.status", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.intent", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.medication[x]", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.encounter", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.authoredOn", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.requester", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.recorder", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.reasonCode", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.reasonReference", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.basedOn", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.note", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.dosageInstruction", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.substitution", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.priorPrescription", - "mustHave": false - }, - { - "attributeRef": "MedicationRequest.detectedIssue", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/Medication", - "attributes": [ - { - "attributeRef": "Medication.code", - "mustHave": false - }, - { - "attributeRef": "Medication.form", - "mustHave": false - }, - { - "attributeRef": "Medication.ingredient", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationAdministration", - "attributes": [ - { - "attributeRef": "MedicationAdministration.identifier", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.partOf", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.status", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.category", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.medication[x]", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.context", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.effective[x]", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.performer", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.reasonCode", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.reasonReference", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.request", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.note", - "mustHave": false - }, - { - "attributeRef": "MedicationAdministration.dosage", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-provenance", - "attributes": [ - { - "attributeRef": "Provenance.target", - "mustHave": false - }, - { - "attributeRef": "Provenance.recorded", - "mustHave": false - }, - { - "attributeRef": "Provenance.agent", - "mustHave": false - }, - { - "attributeRef": "Provenance.entity", - "mustHave": false - }, - { - "attributeRef": "Provenance.signature", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-einwilligung", - "attributes": [ - { - "attributeRef": "Consent.extension:domainReference", - "mustHave": false - }, - { - "attributeRef": "Consent.status", - "mustHave": false - }, - { - "attributeRef": "Consent.category", - "mustHave": false - }, - { - "attributeRef": "Consent.patient", - "mustHave": false - }, - { - "attributeRef": "Consent.dateTime", - "mustHave": false - }, - { - "attributeRef": "Consent.organization", - "mustHave": false - }, - { - "attributeRef": "Consent.source[x]", - "mustHave": false - }, - { - "attributeRef": "Consent.policy", - "mustHave": false - }, - { - "attributeRef": "Consent.policyRule", - "mustHave": false - }, - { - "attributeRef": "Consent.provision", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-documentreference", - "attributes": [ - { - "attributeRef": "DocumentReference.status", - "mustHave": false - }, - { - "attributeRef": "DocumentReference.content", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-biobank/StructureDefinition/Substance", - "attributes": [ - { - "attributeRef": "Substance.category", - "mustHave": false - }, - { - "attributeRef": "Substance.code", - "mustHave": false - }, - { - "attributeRef": "Substance.ingredient", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-biobank/StructureDefinition/Organization", - "attributes": [ - { - "attributeRef": "Organization.extension:beschreibung", - "mustHave": false - }, - { - "attributeRef": "Organization.identifier", - "mustHave": false - }, - { - "attributeRef": "Organization.type", - "mustHave": false - }, - { - "attributeRef": "Organization.name", - "mustHave": false - }, - { - "attributeRef": "Organization.alias", - "mustHave": false - }, - { - "attributeRef": "Organization.partOf", - "mustHave": false - }, - { - "attributeRef": "Organization.contact", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-biobank/StructureDefinition/Specimen", - "attributes": [ - { - "attributeRef": "Specimen.extension:festgestellteDiagnose", - "mustHave": false - }, - { - "attributeRef": "Specimen.extension:gehoertZu", - "mustHave": false - }, - { - "attributeRef": "Specimen.identifier", - "mustHave": false - }, - { - "attributeRef": "Specimen.status", - "mustHave": false - }, - { - "attributeRef": "Specimen.type", - "mustHave": false - }, - { - "attributeRef": "Specimen.parent", - "mustHave": false - }, - { - "attributeRef": "Specimen.request", - "mustHave": false - }, - { - "attributeRef": "Specimen.collection", - "mustHave": false - }, - { - "attributeRef": "Specimen.processing", - "mustHave": false - }, - { - "attributeRef": "Specimen.container", - "mustHave": false - }, - { - "attributeRef": "Specimen.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-biobank/StructureDefinition/SpecimenCore", - "attributes": [ - { - "attributeRef": "Specimen.identifier", - "mustHave": false - }, - { - "attributeRef": "Specimen.status", - "mustHave": false - }, - { - "attributeRef": "Specimen.type", - "mustHave": false - }, - { - "attributeRef": "Specimen.parent", - "mustHave": false - }, - { - "attributeRef": "Specimen.request", - "mustHave": false - }, - { - "attributeRef": "Specimen.collection", - "mustHave": false - }, - { - "attributeRef": "Specimen.processing", - "mustHave": false - }, - { - "attributeRef": "Specimen.container", - "mustHave": false - }, - { - "attributeRef": "Specimen.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-prozedur/StructureDefinition/Procedure", - "attributes": [ - { - "attributeRef": "Procedure.extension:Dokumentationsdatum", - "mustHave": false - }, - { - "attributeRef": "Procedure.extension:durchfuehrungsabsicht", - "mustHave": false - }, - { - "attributeRef": "Procedure.status", - "mustHave": false - }, - { - "attributeRef": "Procedure.category", - "mustHave": false - }, - { - "attributeRef": "Procedure.code", - "mustHave": false - }, - { - "attributeRef": "Procedure.performed[x]", - "mustHave": false - }, - { - "attributeRef": "Procedure.bodySite", - "mustHave": false - }, - { - "attributeRef": "Procedure.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Vitalstatus", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/PatientPseudonymisiert", - "attributes": [ - { - "attributeRef": "Patient.identifier", - "mustHave": false - }, - { - "attributeRef": "Patient.gender", - "mustHave": false - }, - { - "attributeRef": "Patient.birthDate", - "mustHave": false - }, - { - "attributeRef": "Patient.deceased[x]", - "mustHave": false - }, - { - "attributeRef": "Patient.address", - "mustHave": false - }, - { - "attributeRef": "Patient.link", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/ResearchSubject", - "attributes": [ - { - "attributeRef": "ResearchSubject.identifier", - "mustHave": false - }, - { - "attributeRef": "ResearchSubject.status", - "mustHave": false - }, - { - "attributeRef": "ResearchSubject.period", - "mustHave": false - }, - { - "attributeRef": "ResearchSubject.study", - "mustHave": false - }, - { - "attributeRef": "ResearchSubject.individual", - "mustHave": false - }, - { - "attributeRef": "ResearchSubject.consent", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Patient", - "attributes": [ - { - "attributeRef": "Patient.identifier", - "mustHave": false - }, - { - "attributeRef": "Patient.name", - "mustHave": false - }, - { - "attributeRef": "Patient.gender", - "mustHave": false - }, - { - "attributeRef": "Patient.birthDate", - "mustHave": false - }, - { - "attributeRef": "Patient.deceased[x]", - "mustHave": false - }, - { - "attributeRef": "Patient.address", - "mustHave": false - }, - { - "attributeRef": "Patient.link", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Todesursache", - "attributes": [ - { - "attributeRef": "Condition.clinicalStatus", - "mustHave": false - }, - { - "attributeRef": "Condition.verificationStatus", - "mustHave": false - }, - { - "attributeRef": "Condition.category", - "mustHave": false - }, - { - "attributeRef": "Condition.code", - "mustHave": false - }, - { - "attributeRef": "Condition.encounter", - "mustHave": false - }, - { - "attributeRef": "Condition.recordedDate", - "mustHave": false - }, - { - "attributeRef": "Condition.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose", - "attributes": [ - { - "attributeRef": "Condition.extension:ReferenzPrimaerdiagnose", - "mustHave": false - }, - { - "attributeRef": "Condition.extension:Feststellungsdatum", - "mustHave": false - }, - { - "attributeRef": "Condition.clinicalStatus", - "mustHave": false - }, - { - "attributeRef": "Condition.code", - "mustHave": false - }, - { - "attributeRef": "Condition.bodySite", - "mustHave": false - }, - { - "attributeRef": "Condition.encounter", - "mustHave": false - }, - { - "attributeRef": "Condition.onset[x]", - "mustHave": false - }, - { - "attributeRef": "Condition.recordedDate", - "mustHave": false - }, - { - "attributeRef": "Condition.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-fall/StructureDefinition/KontaktGesundheitseinrichtung", - "attributes": [ - { - "attributeRef": "Encounter.extension:Aufnahmegrund", - "mustHave": false - }, - { - "attributeRef": "Encounter.identifier", - "mustHave": false - }, - { - "attributeRef": "Encounter.status", - "mustHave": false - }, - { - "attributeRef": "Encounter.class", - "mustHave": false - }, - { - "attributeRef": "Encounter.type", - "mustHave": false - }, - { - "attributeRef": "Encounter.serviceType", - "mustHave": false - }, - { - "attributeRef": "Encounter.period", - "mustHave": false - }, - { - "attributeRef": "Encounter.diagnosis", - "mustHave": false - }, - { - "attributeRef": "Encounter.hospitalization", - "mustHave": false - }, - { - "attributeRef": "Encounter.location", - "mustHave": false - }, - { - "attributeRef": "Encounter.serviceProvider", - "mustHave": false - }, - { - "attributeRef": "Encounter.partOf", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/devicemetric-eingestellte-gemessene-parameter-beatmung", - "attributes": [ - { - "attributeRef": "DeviceMetric.type", - "mustHave": false - }, - { - "attributeRef": "DeviceMetric.source", - "mustHave": false - }, - { - "attributeRef": "DeviceMetric.category", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaeres-herzzeitvolumen-durch-indikatorverduennung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaerer-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/sauerstoffsaettigung-im-blut-preduktal-durch-pulsoxymetrie", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/maximaler-beatmungsdruck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/beatmungszeit-hohem-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-brust", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/atemzugvolumen-einstellung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaeres-schlagvolumenindex", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/einstellung-einatmungszeit-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-nasal", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/inspiratorischer-gasfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/spontane-atemfrequenz-beatmet", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaerer-herzindex", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mittlerer-beatmungsdruck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/atemwegsdruck-bei-mittlerem-expiratorischem-gasfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/venoeser-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/zeitverhaeltnis-ein-ausatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/substituatvolumen", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/pulmonalarterieller-wedge-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/sauerstoffsaettigung-im-arteriellen-blut-durch-pulsoxymetrie", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/spontanes-atemzugvolumen", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-generisch", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/sauerstoffsaettigung-im-blut-postduktal-durch-pulsoxymetrie", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/beatmungszeit-niedrigem-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaerer-herzindex-durch-indikatorverduennung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-rektal", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaerer-schlagvolumenindex-durch-indikatorverduennung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/sonstige-pulsatile-druecke-generisch", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-vaginal", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-lendenwirbelsaeule", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/sauerstoffgasfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-trommelfell", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-unter-der-zunge", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/dauer-extrakorporaler-gasaustausch", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/atemzugvolumen-waehrend-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/herzfrequenz", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/eingestellter-inspiratorischer-gasfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/druckdifferenz-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/systemischer-vaskulaerer-widerstandsindex", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/blutfluss-extrakorporaler-gasaustausch", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/puls", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/icu-device", - "attributes": [ - { - "attributeRef": "Device.identifier", - "mustHave": false - }, - { - "attributeRef": "Device.status", - "mustHave": false - }, - { - "attributeRef": "Device.deviceName", - "mustHave": false - }, - { - "attributeRef": "Device.type", - "mustHave": false - }, - { - "attributeRef": "Device.version", - "mustHave": false - }, - { - "attributeRef": "Device.property", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/haemodialyse-blutfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/parameter-von-extrakorporalen-verfahren", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/endexpiratorischer-kohlendioxidpartialdruck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaeres-schlagvolumen-durch-indikatorverduennung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/inspiratorische-sauerstofffraktion-gemessen", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/beatmungsvolumen-pro-minute-maschineller-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-leiste", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-nasen-rachen-raum", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/herzzeitvolumen", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-speiseroehre", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/spontane-mechanische-atemfrequenz-beatmet", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-stirn", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/intrakranieller-druck-icp", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/inspiratorische-sauerstofffraktion-eingestellt", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-achsel", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpergewicht-percentil-altersabhaengig", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-halswirbelsaeule", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/horowitz-in-arteriellem-blut", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/zentralvenoeser-blutdruck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/ideales-koerpergewicht", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksatrialer-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/rechtsatrialer-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/blutfluss-cardiovasculaeres-geraet", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/exspiratorischer-gasfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-kern", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/mechanische-atemfrequenz-beatmet", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpergroesse-percentil", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/rechtsventrikulaerer-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-atemwege", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-blut", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/ionisiertes-kalzium-nierenersatzverfahren", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/monitoring-und-vitaldaten", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/parameter-von-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/exspiratorischer-sauerstoffpartialdruck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/einstellung-ausatmungszeit-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/pulmonalvaskulaerer-widerstandsindex", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/devicemetric-eingestellte-gemessene-parameter-extrakorporale-verfahren", - "attributes": [ - { - "attributeRef": "DeviceMetric.type", - "mustHave": false - }, - { - "attributeRef": "DeviceMetric.source", - "mustHave": false - }, - { - "attributeRef": "DeviceMetric.category", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-brustwirbelsaeule", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/atemwegsdruck-bei-null-expiratorischem-gasfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/pulmonalarterieller-blutdruck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/koerpertemperatur-harnblase", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/positiv-endexpiratorischer-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/dauer-haemodialysesitzung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/arterieller-druck", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/blutflussindex-extrakorporaler-gasaustausch", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/linksventrikulaeres-schlagvolumen", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.bodySite", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/spontanes-mechanisches-atemzugvolumen-waehrend-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/substituatfluss", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-icu/StructureDefinition/unterstuetzungsdruck-beatmung", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.partOf", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/genotyp", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.derivedFrom", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/medikationsempfehlung", - "attributes": [ - { - "attributeRef": "Task.status", - "mustHave": false - }, - { - "attributeRef": "Task.intent", - "mustHave": false - }, - { - "attributeRef": "Task.code", - "mustHave": false - }, - { - "attributeRef": "Task.for", - "mustHave": false - }, - { - "attributeRef": "Task.encounter", - "mustHave": false - }, - { - "attributeRef": "Task.reasonCode", - "mustHave": false - }, - { - "attributeRef": "Task.reasonReference", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/empfohlene-folgemassnahme", - "attributes": [ - { - "attributeRef": "Task.status", - "mustHave": false - }, - { - "attributeRef": "Task.intent", - "mustHave": false - }, - { - "attributeRef": "Task.code", - "mustHave": false - }, - { - "attributeRef": "Task.for", - "mustHave": false - }, - { - "attributeRef": "Task.encounter", - "mustHave": false - }, - { - "attributeRef": "Task.reasonCode", - "mustHave": false - }, - { - "attributeRef": "Task.reasonReference", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/familienanamnese", - "attributes": [ - { - "attributeRef": "FamilyMemberHistory.status", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.patient", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.date", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.relationship", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.sex", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.reasonCode", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.reasonReference", - "mustHave": false - }, - { - "attributeRef": "FamilyMemberHistory.condition", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/ergebnis-zusammenfassung", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.component:conclusion-string", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/molekulargenetischer-befundbericht", - "attributes": [ - { - "attributeRef": "DiagnosticReport.extension:genomics-artifact", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.extension:genomics-file", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.extension:recommended-action", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.extension:genomics-risk-assessment", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.extension:coded-note", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.extension:supporting-info", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.status", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.encounter", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.issued", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.performer", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.resultsInterpreter", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.specimen", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.result", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.media", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.conclusion", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.conclusionCode", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/diagnostische-implikation", - "attributes": [ - { - "attributeRef": "Observation.extension:related-artifact", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.derivedFrom", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/anforderung-genetischer-test", - "attributes": [ - { - "attributeRef": "ServiceRequest.basedOn", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.code", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.encounter", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.authoredOn", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.requester", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.reasonCode", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.reasonReference", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.supportingInfo", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.note", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/mikrosatelliteninstabilitaet", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.component:conclusion-string", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/mutationslast", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.specimen", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/variante", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.specimen", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.component:conclusion-string", - "mustHave": false - }, - { - "attributeRef": "Observation.component:gene-studied", - "mustHave": false - }, - { - "attributeRef": "Observation.component:cytogenetic-location", - "mustHave": false - }, - { - "attributeRef": "Observation.component:reference-sequence-assembly", - "mustHave": false - }, - { - "attributeRef": "Observation.component:coding-hgvs", - "mustHave": false - }, - { - "attributeRef": "Observation.component:genomic-hgvs", - "mustHave": false - }, - { - "attributeRef": "Observation.component:genomic-ref-seq", - "mustHave": false - }, - { - "attributeRef": "Observation.component:transcript-ref-seq", - "mustHave": false - }, - { - "attributeRef": "Observation.component:exact-start-end", - "mustHave": false - }, - { - "attributeRef": "Observation.component:inner-start-end", - "mustHave": false - }, - { - "attributeRef": "Observation.component:outer-start-end", - "mustHave": false - }, - { - "attributeRef": "Observation.component:ref-allele", - "mustHave": false - }, - { - "attributeRef": "Observation.component:alt-allele", - "mustHave": false - }, - { - "attributeRef": "Observation.component:coding-change-type", - "mustHave": false - }, - { - "attributeRef": "Observation.component:genomic-source-class", - "mustHave": false - }, - { - "attributeRef": "Observation.component:sample-allelic-frequency", - "mustHave": false - }, - { - "attributeRef": "Observation.component:allelic-read-depth", - "mustHave": false - }, - { - "attributeRef": "Observation.component:allelic-state", - "mustHave": false - }, - { - "attributeRef": "Observation.component:variant-inheritance", - "mustHave": false - }, - { - "attributeRef": "Observation.component:variation-code", - "mustHave": false - }, - { - "attributeRef": "Observation.component:chromosome-identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.component:protein-hgvs", - "mustHave": false - }, - { - "attributeRef": "Observation.component:amino-acid-change-type", - "mustHave": false - }, - { - "attributeRef": "Observation.component:molecular-consequence", - "mustHave": false - }, - { - "attributeRef": "Observation.component:copy-number", - "mustHave": false - }, - { - "attributeRef": "Observation.component:variant-confidence-status", - "mustHave": false - }, - { - "attributeRef": "Observation.component:dna-region", - "mustHave": false - }, - { - "attributeRef": "Observation.component:gene-fusion", - "mustHave": false - }, - { - "attributeRef": "Observation.component:detection-limit", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "id": "Implikation", - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/therapeutische-implikation", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.derivedFrom", - "mustHave": false - }, - { - "attributeRef": "Observation.component", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "id": "ObservationComponent", - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/untersuchte-region", - "attributes": [ - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.component:conclusion-string", - "mustHave": false - }, - { - "attributeRef": "Observation.component:gene-studied", - "mustHave": false - }, - { - "attributeRef": "Observation.component:gene-mutations", - "mustHave": false - }, - { - "attributeRef": "Observation.component:region-description", - "mustHave": false - }, - { - "attributeRef": "Observation.component:region-coverage", - "mustHave": false - }, - { - "attributeRef": "Observation.component:ranges-examined", - "mustHave": false - }, - { - "attributeRef": "Observation.component:genomic-ref-seq", - "mustHave": false - }, - { - "attributeRef": "Observation.component:uncallable-regions", - "mustHave": false - }, - { - "attributeRef": "Observation.component:transcript-ref-seq", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "id": "RiskAssessment", - "groupReference": "https://www.medizininformatik-initiative.de/fhir/ext/modul-molgen/StructureDefinition/polygener-risiko-score", - "attributes": [ - { - "attributeRef": "RiskAssessment.identifier", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.status", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.code", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.encounter", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.occurrence[x]", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.condition", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.basis", - "mustHave": false - }, - { - "attributeRef": "RiskAssessment.prediction", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "id": "Observation", - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab", - "attributes": [ - { - "attributeRef": "Observation.identifier", - "mustHave": false - }, - { - "attributeRef": "Observation.status", - "mustHave": false - }, - { - "attributeRef": "Observation.category", - "mustHave": false - }, - { - "attributeRef": "Observation.code", - "mustHave": false - }, - { - "attributeRef": "Observation.encounter", - "mustHave": false - }, - { - "attributeRef": "Observation.effective[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.issued", - "mustHave": false - }, - { - "attributeRef": "Observation.value[x]", - "mustHave": false - }, - { - "attributeRef": "Observation.dataAbsentReason", - "mustHave": false - }, - { - "attributeRef": "Observation.interpretation", - "mustHave": false - }, - { - "attributeRef": "Observation.note", - "mustHave": false - }, - { - "attributeRef": "Observation.method", - "mustHave": false - }, - { - "attributeRef": "Observation.specimen", - "mustHave": false - }, - { - "attributeRef": "Observation.device", - "mustHave": false - }, - { - "attributeRef": "Observation.referenceRange", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "id": "ServiceRequestLab", - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ServiceRequestLab", - "attributes": [ - { - "attributeRef": "ServiceRequest.identifier", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.status", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.intent", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.category", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.code", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.encounter", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.authoredOn", - "mustHave": false - }, - { - "attributeRef": "ServiceRequest.specimen", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - }, - { - "id": "diagnosticReport", - "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/DiagnosticReportLab", - "attributes": [ - { - "attributeRef": "DiagnosticReport.identifier", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.basedOn", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.status", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.category", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.code", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.encounter", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.effective[x]", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.issued", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.performer", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.specimen", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.result", - "mustHave": false - }, - { - "attributeRef": "DiagnosticReport.conclusion", - "mustHave": false - } - ], - "filter": [ - { - "type": "date", - "name": "date", - "start": "2020-01-01", - "end": "2025-01-01" - } - ] - } - ] - } -} diff --git a/src/test/resources/CRTDL/CRTDL_diagnosis_basic_consent.json b/src/test/resources/CRTDL/CRTDL_diagnosis_basic_consent.json new file mode 100644 index 00000000..b82d856e --- /dev/null +++ b/src/test/resources/CRTDL/CRTDL_diagnosis_basic_consent.json @@ -0,0 +1,82 @@ +{ + "version": "http://json-schema.org/to-be-done/schema#", + "display": "", + "cohortDefinition": { + "version": "http://to_be_decided.com/draft-1/schema#", + "display": "", + "inclusionCriteria": [ + [ + { + "context": { + "code": "Einwilligung", + "display": "Einwilligung", + "system": "fdpg.mii.cds", + "version": "1.0.0" + }, + "termCodes": [ + { + "code": "yes-yes-no-yes", + "display": "Verteilte, EU-DSGVO konforme Analyse, ohne Krankenassendaten, und mit Rekontaktierung", + "system": "fdpg.consent.combined" + } + ] + }, + { + "termCodes": [ + { + "code": "263495000", + "system": "http://snomed.info/sct", + "display": "Geschlecht" + } + ], + "context": { + "code": "Patient", + "system": "fdpg.mii.cds", + "version": "1.0.0", + "display": "Patient" + }, + "valueFilter": { + "selectedConcepts": [ + { + "code": "female", + "display": "Female", + "system": "http://hl7.org/fhir/administrative-gender" + }, + { + "code": "male", + "display": "Male", + "system": "http://hl7.org/fhir/administrative-gender" + } + ], + "type": "concept" + } + } + ] + ] + }, + "dataExtraction": { + "attributeGroups": [ + { + "id": "diagnosis basic", + "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose", + "attributes": [ + { + "attributeRef": "Condition.code", + "mustHave": false + } + ] + }, + { + "id": "Patient", + "includeReferenceOnly": true, + "groupReference": "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Patient", + "attributes": [ + ], + "filter": [ + ] + } + ] + } +} + +