From 857d9357fa72aadc4a570c9649d7ed135e69e1be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Tue, 19 Nov 2024 16:50:39 +0100 Subject: [PATCH 1/7] add fhir data evaluator to triangle --- feasibility-portal/backend/docker-compose.yml | 1 - feasibility-triangle/.gitignore | 2 + .../fhir-data-evaluator/.env.default | 21 + .../fhir-data-evaluator/docker-compose.yml | 30 + .../measure/kds-measure.json | 2101 +++++++++++++++++ .../fhir-data-evaluator/output/README.md | 1 + 6 files changed, 2155 insertions(+), 1 deletion(-) create mode 100644 feasibility-triangle/fhir-data-evaluator/.env.default create mode 100644 feasibility-triangle/fhir-data-evaluator/docker-compose.yml create mode 100644 feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json create mode 100644 feasibility-triangle/fhir-data-evaluator/output/README.md diff --git a/feasibility-portal/backend/docker-compose.yml b/feasibility-portal/backend/docker-compose.yml index 657a0d8b..d5ee0cba 100644 --- a/feasibility-portal/backend/docker-compose.yml +++ b/feasibility-portal/backend/docker-compose.yml @@ -82,7 +82,6 @@ services: PRIVACY_THRESHOLD_SITES_RESULT: ${DATAPORTAL_BACKEND_PRIVACY_THRESHOLD_SITES_RESULT:-0} QUERYRESULT_DISABLE_LOG_FILE_ENCRYPTION: "true" # ---- Elastic Search - ELASTIC_SEARCH_ENABLED: ${DATAPORTAL_BACKEND_ELASTIC_SEARCH_ENABLED:-true} ELASTIC_SEARCH_HOST: ${DATAPORTAL_BACKEND_ELASTIC_SEARCH_HOST:-dataportal-elastic} ELASTIC_SEARCH_FILTER: ${DATAPORTAL_BACKEND_ELASTIC_SEARCH_FILTER:-context,terminology,kds_module} # ---- logging diff --git a/feasibility-triangle/.gitignore b/feasibility-triangle/.gitignore index 95ffcf1e..a2feb7b4 100644 --- a/feasibility-triangle/.gitignore +++ b/feasibility-triangle/.gitignore @@ -2,3 +2,5 @@ /testdata/*.json /testdata/*.zip troubleshooting/input-queries.json +fhir-data-evaluator/output/* +!fhir-data-evaluator/output/README.md diff --git a/feasibility-triangle/fhir-data-evaluator/.env.default b/feasibility-triangle/fhir-data-evaluator/.env.default new file mode 100644 index 00000000..9ad7e3e3 --- /dev/null +++ b/feasibility-triangle/fhir-data-evaluator/.env.default @@ -0,0 +1,21 @@ +FDE_CONVERT_TO_CSV=true +FDE_FHIR_SERVER=http://localhost:8080/fhir +FDE_FHIR_USER= +FDE_FHIR_PASSWORD= +FDE_FHIR_MAX_CONNECTIONS=4 +FDE_FHIR_MAX_QUEUE_SIZE=500 +FDE_FHIR_PAGE_COUNT=1000 +FDE_FHIR_BEARER_TOKEN= +FDE_FHIR_OAUTH_ISSUER_URI= +FDE_FHIR_OAUTH_CLIENT_ID= +FDE_FHIR_OAUTH_CLIENT_SECRET= +FDE_MAX_IN_MEMORY_SIZE_MIB=10 +FDE_INPUT_MEASURE=../Documentation/example-measures/example-measure-kds.json +FDE_OUTPUT_DIR=../output +FDE_TZ=Europe/Berlin +FDE_FHIR_REPORT_DESTINATION_SERVER=http://localhost:8080/fhir +FDE_SEND_REPORT_TO_SERVER=false +FDE_AUTHOR_IDENTIFIER_SYSTEM=http://dsf.dev/sid/organization-identifier +FDE_AUTHOR_IDENTIFIER_VALUE=fde-dic +FDE_PROJECT_IDENTIFIER_SYSTEM=http://medizininformatik-initiative.de/sid/project-identifier +FDE_PROJECT_IDENTIFIER_VALUE=fdpg-data-availability-report diff --git a/feasibility-triangle/fhir-data-evaluator/docker-compose.yml b/feasibility-triangle/fhir-data-evaluator/docker-compose.yml new file mode 100644 index 00000000..65ec032b --- /dev/null +++ b/feasibility-triangle/fhir-data-evaluator/docker-compose.yml @@ -0,0 +1,30 @@ +services: + fhir-data-evaluator: + image: ghcr.io/medizininformatik-initiative/fhir-data-evaluator:pr-48 + environment: + CONVERT_TO_CSV: ${FDE_CONVERT_TO_CSV:-true} + FHIR_SERVER: ${FDE_FHIR_SERVER:-http://localhost:8080/fhir} + FHIR_USER: ${FDE_FHIR_USER:-} + FHIR_PASSWORD: ${FDE_FHIR_PASSWORD:-} + FHIR_MAX_CONNECTIONS: ${FDE_FHIR_MAX_CONNECTIONS:-4} + FHIR_MAX_QUEUE_SIZE: ${FDE_FHIR_MAX_QUEUE_SIZE:-500} + FHIR_PAGE_COUNT: ${FDE_FHIR_PAGE_COUNT:-1000} + FHIR_BEARER_TOKEN: ${FDE_FHIR_BEARER_TOKEN:-} + FHIR_OAUTH_ISSUER_URI: ${FDE_FHIR_OAUTH_ISSUER_URI:-} + FHIR_OAUTH_CLIENT_ID: ${FDE_FHIR_OAUTH_CLIENT_ID:-} + FHIR_OAUTH_CLIENT_SECRET: ${FDE_FHIR_OAUTH_CLIENT_SECRET:-} + MAX_IN_MEMORY_SIZE_MIB: ${FDE_MAX_IN_MEMORY_SIZE_MIB:-10} + SEND_REPORT_TO_SERVER: ${FDE_SEND_REPORT_TO_SERVER:-false} + AUTHOR_IDENTIFIER_SYSTEM: ${FDE_AUTHOR_IDENTIFIER_SYSTEM:-http://dsf.dev/sid/organization-identifier} + AUTHOR_IDENTIFIER_VALUE: ${FDE_AUTHOR_IDENTIFIER_VALUE:-fde-dic} + PROJECT_IDENTIFIER_SYSTEM: ${FDE_PROJECT_IDENTIFIER_SYSTEM:-http://medizininformatik-initiative.de/sid/project-identifier} + PROJECT_IDENTIFIER_VALUE: ${FDE_PROJECT_IDENTIFIER_VALUE:-fdpg-data-availability-report} + FHIR_REPORT_DESTINATION_SERVER: ${FDE_FHIR_REPORT_DESTINATION_SERVER:-http://localhost:8080/fhir} + TZ: ${FDE_TZ:-Europe/Berlin} + extra_hosts: + - "auth.localhost:host-gateway" + - "localhost:host-gateway" + volumes: + - "${FDE_INPUT_MEASURE:-./measure/kds-measure.json}:/app/measure.json" + - "${FDE_OUTPUT_DIR:-./output}:/app/output" + - ../auth:/app/certs diff --git a/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json b/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json new file mode 100644 index 00000000..9ee1c45c --- /dev/null +++ b/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json @@ -0,0 +1,2101 @@ +{ + "resourceType": "Measure", + "meta": { + "profile": [ + "http://fhir-data-evaluator/StructureDefinition/FhirDataEvaluatorContinuousVariableMeasure" + ] + }, + "version": "1.0", + "url": "https://medizininformatik-initiative.de/fhir/fdpg/Measure/ExampleCdsCriteria", + "status": "active", + "experimental": false, + "publisher": "FDPG-Plus", + "name": "ExampleCdsCriteria", + "title": "Example Measure To Count CDS Criteria", + "description": "Example measure to count CDS criteria", + "group": [ + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Condition?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose" + }, + "id": "initial-population-identifier-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Condition" + }, + "id": "measure-population-identifier-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-1" + } + ], + "id": "measure-observation-identifier-1" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.code.coding.where(system='http://fhir.de/CodeSystem/bfarm/icd-10-gm')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "condition-icd10-code" + } + ] + }, + "id": "strat-1" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.code.coding.where(system='http://snomed.info/sct')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "condition-sct-code" + } + ] + }, + "id": "strat-2" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.code.coding.where(system='http://fhir.de/CodeSystem/bfarm/alpha-id')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "condition-alhpaid-code" + } + ] + }, + "id": "strat-3" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.code.coding.where(system='http://www.orpha.net')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "condition-orphanet-code" + } + ] + }, + "id": "strat-4" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.code.coding.where(system='http://terminology.hl7.org/CodeSystem/icd-o-3')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "condition-icdo3-code" + } + ] + }, + "id": "strat-5" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Observation?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab" + }, + "id": "initial-population-identifier-2" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Observation" + }, + "id": "measure-population-identifier-2" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Observation.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-2" + } + ], + "id": "measure-observation-identifier-2" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Observation.code.coding.where(system='http://loinc.org')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "observation-lab-loinc-code" + } + ] + }, + "id": "strat-7" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Observation.interpretation.coding.where(system='http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "observation-lab-interpretation" + } + ] + }, + "id": "strat-8" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Patient?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Patient" + }, + "id": "initial-population-identifier-3" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Patient" + }, + "id": "measure-population-identifier-3" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Patient.id.value" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-3" + } + ], + "id": "measure-observation-identifier-3" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Patient.birthDate.exists()" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "patient-birthdate-exists" + } + ] + }, + "id": "strat-9" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Patient.gender" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "patient-gender" + } + ] + }, + "id": "strat-10" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Patient?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/PatientPseudonymisiert" + }, + "id": "initial-population-identifier-3-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Patient" + }, + "id": "measure-population-identifier-3-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Patient.id.value" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-3-1" + } + ], + "id": "measure-observation-identifier-3-1" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Patient.birthDate.exists()" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "patient-pseudonymised-birthdate-exists" + } + ] + }, + "id": "strat-9-1" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Patient.gender" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "patient-pseudonymised-gender" + } + ] + }, + "id": "strat-10-1" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "MedicationAdministration?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationAdministration&_include=MedicationAdministration:medication" + }, + "id": "initial-population-identifier-4" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationAdministration" + }, + "id": "measure-population-identifier-4" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationAdministration.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-4" + } + ], + "id": "measure-observation-identifier-4" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationAdministration.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn').code" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "medicationadministration-medication-code-pzn" + } + ] + }, + "id": "strat-11" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationAdministration.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc').code" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "medicationadministration-medication-code-atc" + } + ] + }, + "id": "strat-12" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "MedicationStatement?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationStatement&_include=MedicationStatement:medication" + }, + "id": "initial-population-identifier-med-stat-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationStatement" + }, + "id": "measure-population-identifier-med-stat-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationStatement.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-med-stat-1" + } + ], + "id": "measure-observation-identifier-med-stat-1" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationStatement.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn').code" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "medication-statement-medication-code-pzn" + } + ] + }, + "id": "strat-med-stat-1" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationStatement.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc').code" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "medication-statement-medication-code-atc" + } + ] + }, + "id": "strat-med-stat-2" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "MedicationRequest?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationRequest&_include=MedicationRequest:medication" + }, + "id": "initial-population-identifier-med-req-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationStatement" + }, + "id": "measure-population-identifier-med-req-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationRequest.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-med-req-1" + } + ], + "id": "measure-observation-identifier-med-req-1" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationRequest.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn').code" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "medication-request-medication-code-pzn" + } + ] + }, + "id": "strat-med-req-1" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "MedicationRequest.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc').code" + }, + "code": { + "coding": [ + { + "system": "http://fhir-data-evaluator/strat/system", + "code": "medication-request-medication-code-atc" + } + ] + }, + "id": "strat-med-req-2" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Procedure?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-prozedur/StructureDefinition/Procedure" + }, + "id": "initial-population-identifier-5" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Procedure" + }, + "id": "measure-population-identifier-5" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Procedure.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-5" + } + ], + "id": "measure-observation-identifier-5" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Procedure.code.coding.where(system='http://fhir.de/CodeSystem/bfarm/ops')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "procedure-ops-code" + } + ] + }, + "id": "strat-13" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Procedure.code.coding.where(system='http://snomed.info/sct')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "procedure-sct-code" + } + ] + }, + "id": "strat-14" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Consent?_profile:below=https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-einwilligung" + }, + "id": "initial-population-identifier-6" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Consent" + }, + "id": "measure-population-identifier-6" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.patient.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-6" + } + ], + "id": "measure-observation-identifier-6" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.1')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-patientendaten-erheben,-speichern,-nutzen" + } + ] + }, + "id": "consent-strat-0" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.2')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-idat-erheben" + } + ] + }, + "id": "consent-strat-1" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.3')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-idat-speichern,-verarbeiten" + } + ] + }, + "id": "consent-strat-2" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.4')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-idat-zusammenfuehren-dritte" + } + ] + }, + "id": "consent-strat-3" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.5')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-idat-bereitstellen-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-4" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.6')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-erheben" + } + ] + }, + "id": "consent-strat-5" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.7')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-speichern,-verarbeiten" + } + ] + }, + "id": "consent-strat-6" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.8')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-wissenschaftlich-nutzen-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-7" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.9')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-zusammenfuehren-dritte" + } + ] + }, + "id": "consent-strat-8" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.37')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-ergebnisse-erheblicher-bedeutung" + } + ] + }, + "id": "consent-strat-9" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.44')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-patientendaten-retrospektiv-verarbeiten,-nutzen" + } + ] + }, + "id": "consent-strat-10" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.45')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-retrospektiv-speichern-verarbeiten" + } + ] + }, + "id": "consent-strat-11" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.46')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-retrospektiv-wissenschaftlich-nutzen-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-12" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.47')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-retrospektiv-zusammenfuehren-dritte" + } + ] + }, + "id": "consent-strat-13" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.48')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-patientendaten-weitergabe-non-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-14" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.49')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-bereitstellen-non-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-15" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.10')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-krankenkassendaten-retrospektiv-uebertragen,-speichern,-nutzen" + } + ] + }, + "id": "consent-strat-16" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.11')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-retrospektiv-uebertragen" + } + ] + }, + "id": "consent-strat-17" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.12')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-retrospektiv-speichern-verarbeiten" + } + ] + }, + "id": "consent-strat-18" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.13')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-retrospektiv-wissenschaftlich-nutzen" + } + ] + }, + "id": "consent-strat-19" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.38')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-retrospektiv-uebertragen-kvnr" + } + ] + }, + "id": "consent-strat-20" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.14')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-prospektiv-uebertragen-speichern-nutzen" + } + ] + }, + "id": "consent-strat-21" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.15')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-prospektiv-uebertragen" + } + ] + }, + "id": "consent-strat-22" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.16')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-prospektiv-speichern-verarbeiten" + } + ] + }, + "id": "consent-strat-23" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.17')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-prospektiv-wissenschaftlich-nutzen" + } + ] + }, + "id": "consent-strat-24" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.39')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-kkdat-5j-prospektiv-uebertragen-kvnr" + } + ] + }, + "id": "consent-strat-25" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.18')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomaterial-erheben,-lagern,-nutzen" + } + ] + }, + "id": "consent-strat-26" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.19')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-erheben" + } + ] + }, + "id": "consent-strat-27" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.20')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-lagern-verarbeiten" + } + ] + }, + "id": "consent-strat-28" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.21')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-eigentum-\u00fcbertragen" + } + ] + }, + "id": "consent-strat-29" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.22')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-wissenschaftlich-nutzen-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-30" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.23')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-analysedaten-zusammenfuehren-dritte" + } + ] + }, + "id": "consent-strat-31" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.24')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomaterial-zusatzentnahme" + } + ] + }, + "id": "consent-strat-32" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.25')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-zusatzmengen-entnehmen" + } + ] + }, + "id": "consent-strat-33" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.50')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomaterial-retrospektiv-speichern,-nutzen" + } + ] + }, + "id": "consent-strat-34" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.51')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-retrospektiv-lagern-verarbeiten" + } + ] + }, + "id": "consent-strat-35" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.52')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-retrospektiv-wissenschaftlich-nutzen-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-36" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.53')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-retrospektiv-analysedaten-zusammenfuehren-dritte" + } + ] + }, + "id": "consent-strat-37" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.54')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomaterial-weitergabe-non-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-38" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.55')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-biomat-bereitstellen-ohne-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-39" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.26')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-erg\u00e4nzungen" + } + ] + }, + "id": "consent-strat-40" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.27')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-verkn\u00fcpfung-datenbanken" + } + ] + }, + "id": "consent-strat-41" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.28')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-weitere-erhebung" + } + ] + }, + "id": "consent-strat-42" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.29')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-weitere-studien" + } + ] + }, + "id": "consent-strat-43" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.30')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-zusatzbefund" + } + ] + }, + "id": "consent-strat-44" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.31')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-rekontaktierung-zusatzbefund" + } + ] + }, + "id": "consent-strat-45" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.32')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-z1-gecco83-nutzung-num/codex" + } + ] + }, + "id": "consent-strat-46" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.40')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-komplettieren-einmalig" + } + ] + }, + "id": "consent-strat-47" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.43')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-erheben" + } + ] + }, + "id": "consent-strat-48" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.33')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-bereitstellen-num/codex" + } + ] + }, + "id": "consent-strat-49" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.34')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-speichern-verarbeiten-num/codex" + } + ] + }, + "id": "consent-strat-50" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.41')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-wissenschaftlich-nutzen-covid-19-forschung-eu-dsgvo-konform" + } + ] + }, + "id": "consent-strat-51" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.42')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-wissenschaftlich-nutzen-pandemie-forschung-eu-dsgvo-konform" + } + ] + }, + "id": "consent-strat-52" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.56')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-wissenschaftlich-nutzen-num/codex-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-53" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.35')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-z1-gecco83-weitergabe-num/codex-non-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-54" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Consent.provision.provision.code.coding.where(code='2.16.840.1.113883.3.1937.777.24.5.3.36')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "consent-mdat-gecco83-bereitstellen-num/codex-ohne-eu-dsgvo-niveau" + } + ] + }, + "id": "consent-strat-55" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Specimen?_profile:below=https://www.medizininformatik-initiative.de/fhir/ext/modul-biobank/StructureDefinition/Specimen" + }, + "id": "initial-population-identifier-7" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Specimen" + }, + "id": "measure-population-identifier-7" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Specimen.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-7" + } + ], + "id": "measure-observation-identifier-7" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Specimen.type.coding.where(system='http://snomed.info/sct')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "specimen-type-sct-code" + } + ] + }, + "id": "strat-16" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Specimen.collection.bodySite.coding.where(system='http://snomed.info/sct')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "specimen-bodysite-sct-code" + } + ] + }, + "id": "strat-17" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Specimen.collection.bodySite.coding.where(system='http://terminology.hl7.org/CodeSystem/icd-o-3')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "specimen-bodysite-icdo3-code" + } + ] + }, + "id": "strat-18" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Encounter?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-fall/StructureDefinition/KontaktGesundheitseinrichtung" + }, + "id": "initial-population-identifier-9" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter" + }, + "id": "measure-population-identifier-9" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-9" + } + ], + "id": "measure-observation-identifier-9" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter.type.coding.where(system='http://fhir.de/CodeSystem/Kontaktebene')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "encounter-type-contact-level" + } + ] + }, + "id": "strat-19" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter.type.coding.where(system='http://fhir.de/CodeSystem/kontaktart-de')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "encounter-type-contact-type" + } + ] + }, + "id": "strat-20" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter.class.coding" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "encounter-class-coding" + } + ] + }, + "id": "strat-21" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter.serviceType.coding.where(system='http://fhir.de/CodeSystem/dkgev/Fachabteilungsschluessel')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "encounter-servicetype-coding-fachabteilung" + } + ] + }, + "id": "strat-22" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Encounter.serviceType.coding.where(system='http://fhir.de/CodeSystem/dkgev/Fachabteilungsschluessel-erweitert')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "encounter-servicetype-coding-fachabteilung-erweitert" + } + ] + }, + "id": "strat-23" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Observation?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Vitalstatus" + }, + "id": "initial-population-identifier-vitalstatus-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Observation" + }, + "id": "measure-population-identifier-vitalstatus-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Observation.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-vitalstatus-1" + } + ], + "id": "measure-observation-identifier-vitalstatus-1" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Observation.code.coding.where(system='http://loinc.org')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "observation-vitalstatus-loinc-code" + } + ] + }, + "id": "strat-vitalstatus-1" + }, + { + "criteria": { + "language": "text/fhirpath", + "expression": "Observation.value.coding.where(system='https://www.medizininformatik-initiative.de/fhir/core/modul-person/CodeSystem/Vitalstatus')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "observation-vitalstatus-value" + } + ] + }, + "id": "strat-vitalstatus-2" + } + ] + }, + { + "population": [ + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "initial-population" + } + ] + }, + "criteria": { + "language": "text/x-fhir-query", + "expression": "Condition?_profile:below=https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Todesursache" + }, + "id": "initial-population-identifier-death-reason-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-population" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Condition" + }, + "id": "measure-population-identifier-death-reason-1" + }, + { + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/measure-population", + "code": "measure-observation" + } + ] + }, + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.subject.reference" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-aggregateMethod", + "valueCode": "unique-count" + }, + { + "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference", + "valueString": "measure-population-identifier-death-reason-1" + } + ], + "id": "measure-observation-identifier-death-reason-1" + } + ], + "stratifier": [ + { + "criteria": { + "language": "text/fhirpath", + "expression": "Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-10')" + }, + "code": { + "coding": [ + { + "system": "http://fhir-evaluator/strat/system", + "code": "condition-death-reason-icd10-code" + } + ] + }, + "id": "strat-death-reason-1" + } + ] + } + ] +} \ No newline at end of file diff --git a/feasibility-triangle/fhir-data-evaluator/output/README.md b/feasibility-triangle/fhir-data-evaluator/output/README.md new file mode 100644 index 00000000..0cf01676 --- /dev/null +++ b/feasibility-triangle/fhir-data-evaluator/output/README.md @@ -0,0 +1 @@ +# Folder for output measures and csv files prouced by the FDE \ No newline at end of file From 116694688dae6aea1209f06619c303ad5aeb2a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Wed, 20 Nov 2024 10:00:28 +0100 Subject: [PATCH 2/7] add fde, updat kds measure, fix env.default, add run .sh --- .../fhir-data-evaluator/.env.default | 8 ++++---- .../fhir-data-evaluator/measure/kds-measure.json | 12 ++++++------ feasibility-triangle/fhir-data-evaluator/run-fde.sh | 5 +++++ .../initialise-triangle-env-files.sh | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) create mode 100755 feasibility-triangle/fhir-data-evaluator/run-fde.sh diff --git a/feasibility-triangle/fhir-data-evaluator/.env.default b/feasibility-triangle/fhir-data-evaluator/.env.default index 9ad7e3e3..ed35ef5c 100644 --- a/feasibility-triangle/fhir-data-evaluator/.env.default +++ b/feasibility-triangle/fhir-data-evaluator/.env.default @@ -1,4 +1,4 @@ -FDE_CONVERT_TO_CSV=true +FDE_CONVERT_TO_CSV=false FDE_FHIR_SERVER=http://localhost:8080/fhir FDE_FHIR_USER= FDE_FHIR_PASSWORD= @@ -10,11 +10,11 @@ FDE_FHIR_OAUTH_ISSUER_URI= FDE_FHIR_OAUTH_CLIENT_ID= FDE_FHIR_OAUTH_CLIENT_SECRET= FDE_MAX_IN_MEMORY_SIZE_MIB=10 -FDE_INPUT_MEASURE=../Documentation/example-measures/example-measure-kds.json -FDE_OUTPUT_DIR=../output +FDE_INPUT_MEASURE=./measure/kds-measure.json +FDE_OUTPUT_DIR=./output FDE_TZ=Europe/Berlin FDE_FHIR_REPORT_DESTINATION_SERVER=http://localhost:8080/fhir -FDE_SEND_REPORT_TO_SERVER=false +FDE_SEND_REPORT_TO_SERVER=true FDE_AUTHOR_IDENTIFIER_SYSTEM=http://dsf.dev/sid/organization-identifier FDE_AUTHOR_IDENTIFIER_VALUE=fde-dic FDE_PROJECT_IDENTIFIER_SYSTEM=http://medizininformatik-initiative.de/sid/project-identifier diff --git a/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json b/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json index 9ee1c45c..b24eb4d9 100644 --- a/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json +++ b/feasibility-triangle/fhir-data-evaluator/measure/kds-measure.json @@ -485,7 +485,7 @@ { "criteria": { "language": "text/fhirpath", - "expression": "MedicationAdministration.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn').code" + "expression": "MedicationAdministration.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn')" }, "code": { "coding": [ @@ -500,7 +500,7 @@ { "criteria": { "language": "text/fhirpath", - "expression": "MedicationAdministration.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc').code" + "expression": "MedicationAdministration.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc')" }, "code": { "coding": [ @@ -576,7 +576,7 @@ { "criteria": { "language": "text/fhirpath", - "expression": "MedicationStatement.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn').code" + "expression": "MedicationStatement.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn')" }, "code": { "coding": [ @@ -591,7 +591,7 @@ { "criteria": { "language": "text/fhirpath", - "expression": "MedicationStatement.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc').code" + "expression": "MedicationStatement.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc')" }, "code": { "coding": [ @@ -667,7 +667,7 @@ { "criteria": { "language": "text/fhirpath", - "expression": "MedicationRequest.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn').code" + "expression": "MedicationRequest.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/ifa/pzn')" }, "code": { "coding": [ @@ -682,7 +682,7 @@ { "criteria": { "language": "text/fhirpath", - "expression": "MedicationRequest.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc').code" + "expression": "MedicationRequest.medication.resolve().ofType(Medication).code.coding.where(system='http://fhir.de/CodeSystem/bfarm/atc')" }, "code": { "coding": [ diff --git a/feasibility-triangle/fhir-data-evaluator/run-fde.sh b/feasibility-triangle/fhir-data-evaluator/run-fde.sh new file mode 100755 index 00000000..6c0fbb66 --- /dev/null +++ b/feasibility-triangle/fhir-data-evaluator/run-fde.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh + +COMPOSE_PROJECT=${FEASIBILITY_COMPOSE_PROJECT:-feasibility-deploy} + +COMPOSE_IGNORE_ORPHANS=True docker compose -p "$COMPOSE_PROJECT" up -d diff --git a/feasibility-triangle/initialise-triangle-env-files.sh b/feasibility-triangle/initialise-triangle-env-files.sh index b32415ac..74d2c5cb 100755 --- a/feasibility-triangle/initialise-triangle-env-files.sh +++ b/feasibility-triangle/initialise-triangle-env-files.sh @@ -1,7 +1,7 @@ #!/bin/bash BASE_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 || exit 1 ; pwd -P )" -envfiles=( "$BASE_DIR/fhir-server/.env" "$BASE_DIR/flare/.env" "$BASE_DIR/torch/.env" "$BASE_DIR/rev-proxy/.env") +envfiles=( "$BASE_DIR/fhir-server/.env" "$BASE_DIR/flare/.env" "$BASE_DIR/torch/.env" "$BASE_DIR/rev-proxy/.env" "$BASE_DIR/fhir-data-evaluator/.env") for file in "${envfiles[@]}" do From 108e147ab2eccc6d7e7cef7c2417b389030b703b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Wed, 20 Nov 2024 22:49:30 +0100 Subject: [PATCH 3/7] Update component versions --- feasibility-portal/backend/docker-compose.yml | 2 +- feasibility-portal/gui/docker-compose.yml | 2 +- feasibility-triangle/flare/docker-compose.yml | 2 +- feasibility-triangle/torch/execute-crtdl.sh | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/feasibility-portal/backend/docker-compose.yml b/feasibility-portal/backend/docker-compose.yml index d5ee0cba..88a36604 100644 --- a/feasibility-portal/backend/docker-compose.yml +++ b/feasibility-portal/backend/docker-compose.yml @@ -1,7 +1,7 @@ services: dataportal-backend: restart: unless-stopped - image: ghcr.io/medizininformatik-initiative/feasibility-backend:6.0.0-alpha.6 + image: ghcr.io/medizininformatik-initiative/feasibility-backend:6.0.0 ports: - ${DATAPORTAL_BACKEND_PORT:-127.0.0.1:8091}:8090 depends_on: diff --git a/feasibility-portal/gui/docker-compose.yml b/feasibility-portal/gui/docker-compose.yml index f2763e3f..cdc41fc8 100644 --- a/feasibility-portal/gui/docker-compose.yml +++ b/feasibility-portal/gui/docker-compose.yml @@ -1,6 +1,6 @@ services: dataportal-ui: - image: ghcr.io/medizininformatik-initiative/feasibility-gui:6.0.0-alpha.6 + image: ghcr.io/medizininformatik-initiative/feasibility-gui:6.0.1 restart: unless-stopped volumes: - ./deploy-config.json:/usr/share/nginx/html/assets/config/config.deploy.json diff --git a/feasibility-triangle/flare/docker-compose.yml b/feasibility-triangle/flare/docker-compose.yml index 4d19e28d..5f2a88c4 100644 --- a/feasibility-triangle/flare/docker-compose.yml +++ b/feasibility-triangle/flare/docker-compose.yml @@ -1,6 +1,6 @@ services: flare: - image: ghcr.io/medizininformatik-initiative/flare:2.4.0-alpha.3 + image: ghcr.io/medizininformatik-initiative/flare:2.4.0 ports: - ${FEASIBILITY_FLARE_PORT:-127.0.0.1:8084}:8080 environment: diff --git a/feasibility-triangle/torch/execute-crtdl.sh b/feasibility-triangle/torch/execute-crtdl.sh index 550c3873..da42a05a 100755 --- a/feasibility-triangle/torch/execute-crtdl.sh +++ b/feasibility-triangle/torch/execute-crtdl.sh @@ -10,7 +10,7 @@ if [ "$CURL_INSECURE" = "true" ]; then CURL_OPTIONS="-k" fi -TORCH_AUTHORIZATION=$(printf "%s:%s" "$TORCH_USERNAME" "$TORCH_PASSWORD" | base64) +TORCH_AUTHORIZATION=$(printf "%s:%s" "$TORCH_USERNAME" "$TORCH_PASSWORD" | base64 -w0) if [ "$#" -ne 1 ]; then printf "Usage: %s \n" "$0" @@ -20,7 +20,7 @@ fi json_file="$1" json_string=$(cat "$json_file") -base64_encoded=$(printf "%s" "$json_string" | base64) +base64_encoded=$(printf "%s" "$json_string" | base64 -w0) response=$(curl --location -i $CURL_OPTIONS "${TORCH_BASE_URL}/fhir/\$extract-data" \ --header 'Content-Type: application/fhir+json' \ From dcc01833fd6338936128558f63bde7e39eae6c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Wed, 20 Nov 2024 23:16:07 +0100 Subject: [PATCH 4/7] add readme for FDE --- .../fhir-data-evaluator/README.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 feasibility-triangle/fhir-data-evaluator/README.md diff --git a/feasibility-triangle/fhir-data-evaluator/README.md b/feasibility-triangle/fhir-data-evaluator/README.md new file mode 100644 index 00000000..029af682 --- /dev/null +++ b/feasibility-triangle/fhir-data-evaluator/README.md @@ -0,0 +1,41 @@ +# The Fhir-Data-Evaluator (FDE) + +The FDE is used as part of the feasibility triangle to collect metadata about available data on the local FHIR server. +This data can then be sent via the DSF to the central portal or loaded into the local portal to display the availability of single criteria in the fhir server. + +## Running the FDE + +To run the FDE copy the .env.default file to .env in the this folder and change the env variables according to your requirements. + +Run the FDE by executing the `run-fde` script provided here. + +You can as is configured by default send the metadata report back to your FHIR server which contains your patient data or +alternatively send the data to a different fhir server. + +Regardless of this choice, the FHIR server which contains the report should be accessible from your DSE BPE in order to send the report to the central fdpg DSF using the +data transfer plugin https://github.com/medizininformatik-initiative/mii-process-data-transfer. + + +| Env Variable | Description | Default | Possible Values | +|-------------------------------------------------|------------------------------------------------------------------------------------------------------|-----------------------------------------------|-------------------------------------------------| +| FDE_CONVERT_TO_CSV | Whether to convert the data to CSV format | false | true, false | +| FDE_FHIR_SERVER | Base URL of the FHIR server | http://localhost:8080/fhir | URL | +| FDE_FHIR_USER | Username for the FHIR server authentication | (empty) | String | +| FDE_FHIR_PASSWORD | Password for the FHIR server authentication | (empty) | String | +| FDE_FHIR_MAX_CONNECTIONS | Maximum number of simultaneous connections to the FHIR server | 4 | Integer | +| FDE_FHIR_MAX_QUEUE_SIZE | Maximum size of the FHIR server request queue | 500 | Integer | +| FDE_FHIR_PAGE_COUNT | Number of resources to fetch per page | 1000 | Integer | +| FDE_FHIR_BEARER_TOKEN | Bearer token for FHIR server authentication | (empty) | String | +| FDE_FHIR_OAUTH_ISSUER_URI | OAuth issuer URI for FHIR server | (empty) | URL | +| FDE_FHIR_OAUTH_CLIENT_ID | OAuth client ID for FHIR server | (empty) | String | +| FDE_FHIR_OAUTH_CLIENT_SECRET | OAuth client secret for FHIR server | (empty) | String | +| FDE_MAX_IN_MEMORY_SIZE_MIB | Maximum size (in MiB) of in-memory data storage | 10 | Integer | +| FDE_INPUT_MEASURE | Path to the input measure JSON file | ./measure/kds-measure.json | File path | +| FDE_OUTPUT_DIR | Directory to save output files | ./output | Directory path | +| FDE_TZ | Time zone to use for processing | Europe/Berlin | Time zone | +| FDE_FHIR_REPORT_DESTINATION_SERVER | FHIR server to send reports to | http://localhost:8080/fhir | URL | +| FDE_SEND_REPORT_TO_SERVER | Whether to send the generated report to the server | true | true, false | +| FDE_AUTHOR_IDENTIFIER_SYSTEM | System for the author's identifier | http://dsf.dev/sid/organization-identifier | URL | +| FDE_AUTHOR_IDENTIFIER_VALUE | Value for the author's identifier | fde-dic | String | +| FDE_PROJECT_IDENTIFIER_SYSTEM | System for the project's identifier | http://medizininformatik-initiative.de/sid/project-identifier | URL | +| FDE_PROJECT_IDENTIFIER_VALUE | Value for the project's identifier | fdpg-data-availability-report | String | From 5814031a7f3164544043bb173247f951b96428df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Wed, 20 Nov 2024 23:19:08 +0100 Subject: [PATCH 5/7] update backend default .env --- feasibility-portal/backend/.env.default | 1 - 1 file changed, 1 deletion(-) diff --git a/feasibility-portal/backend/.env.default b/feasibility-portal/backend/.env.default index 03d54f51..c059b81b 100644 --- a/feasibility-portal/backend/.env.default +++ b/feasibility-portal/backend/.env.default @@ -54,7 +54,6 @@ DATAPORTAL_BACKEND_QUERYRESULT_EXPIRY_MINUTES=5 DATAPORTAL_BACKEND_LOG_LEVEL_SQL=info DATAPORTAL_BACKEND_LOG_LEVEL=info # ---- Elastic Search -DATAPORTAL_BACKEND_ELASTIC_SEARCH_ENABLED=true DATAPORTAL_BACKEND_ELASTIC_SEARCH_HOST=dataportal-elastic DATAPORTAL_BACKEND_ELASTIC_SEARCH_FILTER=context,terminology,kds_module DATAPORTAL_ES_INIT_EXIT_ON_EXISTING_INDICES=false From 01fac9bc18dfae4646e5b4d29095ab3969314ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Thu, 21 Nov 2024 09:02:55 +0100 Subject: [PATCH 6/7] Update images --- feasibility-portal/keycloak/docker-compose.yml | 4 ++-- feasibility-triangle/fhir-server/keycloak.docker-compose.yml | 2 +- feasibility-triangle/rev-proxy/docker-compose.yml | 2 +- feasibility-triangle/torch/docker-compose.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/feasibility-portal/keycloak/docker-compose.yml b/feasibility-portal/keycloak/docker-compose.yml index 0aa53a8a..85bb53fd 100644 --- a/feasibility-portal/keycloak/docker-compose.yml +++ b/feasibility-portal/keycloak/docker-compose.yml @@ -1,7 +1,7 @@ services: auth-db: - image: postgres:15-alpine + image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_DB: ${FEASIBILITY_KC_DB:-keycloakdb} @@ -11,7 +11,7 @@ services: - "feasibility-auth-db:/var/lib/postgresql/data" auth: - image: keycloak/keycloak:25.0 + image: keycloak/keycloak:26.0 command: ["start", "--import-realm"] restart: unless-stopped environment: diff --git a/feasibility-triangle/fhir-server/keycloak.docker-compose.yml b/feasibility-triangle/fhir-server/keycloak.docker-compose.yml index bb5a032f..50091212 100644 --- a/feasibility-triangle/fhir-server/keycloak.docker-compose.yml +++ b/feasibility-triangle/fhir-server/keycloak.docker-compose.yml @@ -1,6 +1,6 @@ services: fhir-server-frontend-keycloak: - image: "keycloak/keycloak:25.0" + image: "keycloak/keycloak:26.0" command: ["start", "--import-realm"] healthcheck: test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e \"GET ${FHIR_SERVER_FRONTEND_KEYCLOAK_HTTP_RELATIVE_PATH}/health/ready HTTP/1.1\r\nhost: localhost\r\nConnection: close\r\n\r\n\" >&3;grep \"HTTP/1.1 200 OK\" <&3"] diff --git a/feasibility-triangle/rev-proxy/docker-compose.yml b/feasibility-triangle/rev-proxy/docker-compose.yml index 8e1bfa70..f3bf0ebf 100644 --- a/feasibility-triangle/rev-proxy/docker-compose.yml +++ b/feasibility-triangle/rev-proxy/docker-compose.yml @@ -1,7 +1,7 @@ services: rev-proxy: restart: unless-stopped - image: nginxinc/nginx-unprivileged:1.25.5-alpine + image: nginxinc/nginx-unprivileged:1.27-alpine environment: FHIR_SERVER_HOSTNAME: ${FHIR_SERVER_HOSTNAME:-fhir.localhost} KEYCLOAK_HOSTNAME: ${KEYCLOAK_HOSTNAME:-auth.localhost} diff --git a/feasibility-triangle/torch/docker-compose.yml b/feasibility-triangle/torch/docker-compose.yml index 588e965f..e8f8325f 100644 --- a/feasibility-triangle/torch/docker-compose.yml +++ b/feasibility-triangle/torch/docker-compose.yml @@ -1,7 +1,7 @@ services: torch-nginx: restart: unless-stopped - image: nginxinc/nginx-unprivileged:1.25.5-alpine + image: nginxinc/nginx-unprivileged:1.27-alpine ports: - ${TORCH_NGINX_PORT:-127.0.0.1:80}:8080 volumes: From c89d9cea29e51c5f5ac659c11e0bb8d63eabd204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gr=C3=BCndner?= Date: Thu, 21 Nov 2024 09:19:19 +0100 Subject: [PATCH 7/7] Release v5.0.0 --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1175dda..3a21283b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,33 @@ Please refer to the respective repositories for a more in depth changelog of sin |TORCH|| + +## [5.0.0] - 2024-11-21 + +### Ontology + +This Release is based on ontology Version [v3.0.0](https://github.com/medizininformatik-initiative/fhir-ontology-generator/releases/tag/v3.0.0) + + +### Overall + +- Updated all components to new versions +- Made FLARE execute-cohort endpoint only available on local docker network and new FLARE version makes enabling execute-cohort endpoint configurable +- Added Fhir-Data-Evaluator (FDE) to triangle + +### Features + +| Feature | Affected Components | +| -- | -- | +|UI Re-Design, Restructuring of Code|UI, Backend| +|Extended Criteria Search (Elastic Search)|UI, Backend, Ontology Generation| +|Add OAuth2 to triangle components|TORCH, FLARE| +|Added Dataselection and Extraction |UI, Backend, Ontology Generation, TORCH| +|Migrated from Mapping code system tree strcture to poly tree structure to support non strict hierarchical code systems like sct |UI, Backend, Ontology Generation, TORCH, FLARE| +|Loading and displaying of criteria availability |UI, Backend, Ontology Generation| +|Added new modules and Updated Ontology|UI, Backend, Ontology Generation, FLARE, sq2cq, TORCH| + + ## [5.0.0-alpha.1] - 2024-11-15 ### Overall