From 2c7467668377504606cd7d677f789099384175f7 Mon Sep 17 00:00:00 2001 From: Omar Khan Date: Thu, 16 May 2024 16:32:44 +0100 Subject: [PATCH 1/3] GraphDefinition for Test order message --- .../GraphDefinition-Genomics-Test-Order.json | 333 ++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 GraphDefinition/GraphDefinition-Genomics-Test-Order.json diff --git a/GraphDefinition/GraphDefinition-Genomics-Test-Order.json b/GraphDefinition/GraphDefinition-Genomics-Test-Order.json new file mode 100644 index 00000000..4b2d8641 --- /dev/null +++ b/GraphDefinition/GraphDefinition-Genomics-Test-Order.json @@ -0,0 +1,333 @@ +{ + "resourceType": "GraphDefinition", + "id": "GraphDefinition-Genomics-Test-Order", + "url": "https://fhir.nhs.uk/GraphDefinition/genomics-test-order", + "name": "GenomicsTestOrder", + "status": "draft", + "date": "2024-05-16", + "publisher" : "NHS England", + "description": "GraphDefinition for defining and retrieving the full set of resources relevant to a Genomic Test Order", + "start": "ServiceRequest", + "link": [ + { + "path": "ServiceRequest.extension.valueReference", + "sliceName": "additionalContact", + "description": "Link to additional contacts for request", + "target": [ + { + "type": "PractitionerRole" + } + ] + }, + { + "path": "ServiceRequest.basedOn", + "description": "Link to parent request (it is expected that a separate call to the $graph=genomics-test-order would be required to retrieve resources referenced from the ServiceRequest", + "target": [ + { + "type": "ServiceRequest" + } + ] + }, + { + "path": "ServiceRequest.subject", + "description": "Link to patient the request is for", + "target": [ + { + "type": "Patient", + "link": [ + { + "description": "RelatedPersons linked to this Patient", + "target": [ + { + "type": "RelatedPerson", + "params": "patient={ref}" + } + ] + } + ] + } + ] + }, + { + "path": "ServiceRequest.requester", + "description": "Link to the requester of the genomic test order", + "target": [ + { + "type": "PractitionerRole" + } + ] + }, + { + "path": "ServiceRequest.reasonReference", + "description": "Optional link to the primary condition constituting the reason for testing", + "target": [ + { + "type": "Condition" + } + ] + }, + { + "path": "ServiceRequest.supportingInfo", + "description": "Link to additional clinical information to support processing/interpretation of the request", + "target": [ + { + "type": "RelatedPerson" + }, + { + "type": "Observation", + "link": [ + { + "path": "Observation.extension.valueReference", + "description": "Optional link to body structure related to the observation", + "target": [ + { + "type": "BodyStructure" + } + ] + }, + { + "path": "Observation.focus", + "description": "Optional link to specimen the observation is about, if relevant", + "target": [ + { + "type": "Specimen" + } + ] + }, + { + "path": "Observation.performer", + "description": "Optional link to actor who performed the observation (could be Patient, PractitionerRole or RelatedPerson)", + "target": [ + { + "type": "Resource" + } + ] + }, + { + "path": "Observation.hasMember", + "description": "Optional link to observation if parent observation is a panel", + "target": [ + { + "type": "Observation" + } + ] + } + ] + }, + { + "type": "Condition", + "link": [ + { + "path": "Condition.recorder", + "description": "Optional link to actor which recorded condition (could be Patient, PreactitionerRole or RelatedPerson)", + "target": [ + { + "type": "Resource" + } + ] + }, + { + "path": "Condition.asserter", + "description": "Optional link to actor which asserted condition (could be Patient, PreactitionerRole or RelatedPerson)", + "target": [ + { + "type": "Resource" + } + ] + } + ] + }, + { + "type": "Procedure" + }, + { + "type": "FamilyMemberHistory", + "link": [ + { + "path": "FamilyMemberHistory.extension.valueReference", + "sliceName": "family-member-history-genetics-observation", + "description": "Optional link to observations related to a FamilyMemberHistory", + "target": [ + { + "type": "Observation" + } + ] + }, + { + "path": "FamilyMemberHistory.extension.valueReference", + "sliceName": "familymemberhistory-patient-record", + "description": "Optional link to Patient resources for related family members", + "target": [ + { + "type": "Patient" + } + ] + } + ] + }, + { + "type": "DocumentReference" + }, + { + "type": "DiagnosticReport" + }, + { + "type": "Consent", + "link": [ + { + "path": "Consent.sourceReference", + "description": "Optional link to structured QuestionnaireResponse or DocumentReference for RoD/consent forms", + "target": [ + { + "type": "QuestionnaireResponse", + "link": [ + { + "path": "QuestionnaireResponse.author", + "description": "Author of the RoD, most likely a PractitionerRole resource (if a reference)", + "target": [ + { + "type": "PractitionerRole" + } + ] + }, + { + "path": "QuestionnaireResponse.source", + "description": "Source of the RoD (could be Patient, PractitionerRole or RelatedPerson)", + "target": [ + { + "type": "Resource" + } + ] + } + ] + }, + { + "type": "DocumentReference" + } + ] + }, + { + "path": "Consent.patient", + "description": "Link to Patient resource (for instances where the consent does not apply to the proband", + "target": [ + { + "type": "Patient" + } + ] + } + ] + }, + { + "type": "Specimen", + "link": [ + { + "path": "Specimen.subject", + "description": "Link to the patient the specimen is from", + "target": [ + { + "type": "Patient" + } + ] + }, + { + "path": "Specimen.parent", + "description": "Link to parent specimen resource", + "target": [ + { + "type": "Specimen" + } + ] + }, + { + "path": "Specimen.collection.collector", + "description": "Link to collector of the specimen", + "target": [ + { + "type": "PractitionerRole" + } + ] + }, + { + "path": "Specimen.collection.bodySite.extension.valueReference", + "sliceName": "bodySiteReference", + "description": "Link to the body structure detailing the morphology and topography of the specimen", + "target": [ + { + "type": "BodyStructure" + } + ] + } + ] + } + ] + }, + { + "path": "ServiceRequest.specimen", + "description": "Optional link to specimen where this has already been collected/ordered prior to request submission", + "target": [ + { + "type": "Specimen", + "link": [ + { + "path": "Specimen.subject", + "description": "Link to the patient the specimen is from", + "target": [ + { + "type": "Patient" + } + ] + }, + { + "path": "Specimen.parent", + "description": "Link to parent specimen resource", + "target": [ + { + "type": "Specimen" + } + ] + }, + { + "path": "Specimen.collection.collector", + "description": "Link to collector of the specimen", + "target": [ + { + "type": "PractitionerRole" + } + ] + }, + { + "path": "Specimen.collection.bodySite.extension.valueReference", + "sliceName": "bodySiteReference", + "description": "Link to the body structure detailing the morphology and topography of the specimen", + "target": [ + { + "type": "BodyStructure" + } + ] + } + ] + } + ] + }, + { + "path": "ServiceRequest.relevantHistory", + "description": "Optional link to provenance resources collating history of changes to the request", + "target": [ + { + "type": "Provenance", + "link": [ + { + "path": "Provenance.agent.who", + "description": "PractitionerRole that made the referenced change", + "target": [ + { + "type": "PractitionerRole" + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file From e305b9440796b9120c831cbe2cdd654a35bbfa92 Mon Sep 17 00:00:00 2001 From: Omar Khan Date: Fri, 17 May 2024 09:54:22 +0100 Subject: [PATCH 2/3] Addition of draft cardinalities --- .../GraphDefinition-Genomics-Test-Order.json | 62 ++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/GraphDefinition/GraphDefinition-Genomics-Test-Order.json b/GraphDefinition/GraphDefinition-Genomics-Test-Order.json index 4b2d8641..cc52ef27 100644 --- a/GraphDefinition/GraphDefinition-Genomics-Test-Order.json +++ b/GraphDefinition/GraphDefinition-Genomics-Test-Order.json @@ -13,6 +13,8 @@ "path": "ServiceRequest.extension.valueReference", "sliceName": "additionalContact", "description": "Link to additional contacts for request", + "min": 0, + "max": "*", "target": [ { "type": "PractitionerRole" @@ -22,6 +24,8 @@ { "path": "ServiceRequest.basedOn", "description": "Link to parent request (it is expected that a separate call to the $graph=genomics-test-order would be required to retrieve resources referenced from the ServiceRequest", + "min": 0, + "max": "1", "target": [ { "type": "ServiceRequest" @@ -31,12 +35,16 @@ { "path": "ServiceRequest.subject", "description": "Link to patient the request is for", + "min": 1, + "max": 1, "target": [ { "type": "Patient", "link": [ { "description": "RelatedPersons linked to this Patient", + "min": 0, + "max": "*", "target": [ { "type": "RelatedPerson", @@ -51,6 +59,8 @@ { "path": "ServiceRequest.requester", "description": "Link to the requester of the genomic test order", + "min": 1, + "max": 1, "target": [ { "type": "PractitionerRole" @@ -60,6 +70,8 @@ { "path": "ServiceRequest.reasonReference", "description": "Optional link to the primary condition constituting the reason for testing", + "min": 0, + "max": 1, "target": [ { "type": "Condition" @@ -69,6 +81,8 @@ { "path": "ServiceRequest.supportingInfo", "description": "Link to additional clinical information to support processing/interpretation of the request", + "min": 0, + "max": "*", "target": [ { "type": "RelatedPerson" @@ -79,6 +93,8 @@ { "path": "Observation.extension.valueReference", "description": "Optional link to body structure related to the observation", + "min": 0, + "max": 1, "target": [ { "type": "BodyStructure" @@ -88,6 +104,8 @@ { "path": "Observation.focus", "description": "Optional link to specimen the observation is about, if relevant", + "min": 0, + "max": 1, "target": [ { "type": "Specimen" @@ -97,6 +115,8 @@ { "path": "Observation.performer", "description": "Optional link to actor who performed the observation (could be Patient, PractitionerRole or RelatedPerson)", + "min": 0, + "max": 1, "target": [ { "type": "Resource" @@ -106,6 +126,8 @@ { "path": "Observation.hasMember", "description": "Optional link to observation if parent observation is a panel", + "min": 0, + "max": "*", "target": [ { "type": "Observation" @@ -120,6 +142,8 @@ { "path": "Condition.recorder", "description": "Optional link to actor which recorded condition (could be Patient, PreactitionerRole or RelatedPerson)", + "min": 0, + "max": 1, "target": [ { "type": "Resource" @@ -129,6 +153,8 @@ { "path": "Condition.asserter", "description": "Optional link to actor which asserted condition (could be Patient, PreactitionerRole or RelatedPerson)", + "min": 0, + "max": 1, "target": [ { "type": "Resource" @@ -147,6 +173,8 @@ "path": "FamilyMemberHistory.extension.valueReference", "sliceName": "family-member-history-genetics-observation", "description": "Optional link to observations related to a FamilyMemberHistory", + "min": 0, + "max": "*", "target": [ { "type": "Observation" @@ -157,6 +185,8 @@ "path": "FamilyMemberHistory.extension.valueReference", "sliceName": "familymemberhistory-patient-record", "description": "Optional link to Patient resources for related family members", + "min": 0, + "max": "*", "target": [ { "type": "Patient" @@ -177,6 +207,8 @@ { "path": "Consent.sourceReference", "description": "Optional link to structured QuestionnaireResponse or DocumentReference for RoD/consent forms", + "min": 0, + "max": 1, "target": [ { "type": "QuestionnaireResponse", @@ -184,6 +216,8 @@ { "path": "QuestionnaireResponse.author", "description": "Author of the RoD, most likely a PractitionerRole resource (if a reference)", + "min": 1, + "max": 1, "target": [ { "type": "PractitionerRole" @@ -193,6 +227,8 @@ { "path": "QuestionnaireResponse.source", "description": "Source of the RoD (could be Patient, PractitionerRole or RelatedPerson)", + "min": 1, + "max": 1, "target": [ { "type": "Resource" @@ -208,7 +244,9 @@ }, { "path": "Consent.patient", - "description": "Link to Patient resource (for instances where the consent does not apply to the proband", + "description": "Link to Patient resource (relevant for instances where the consent does not apply to the proband)", + "min": 1, + "max": 1, "target": [ { "type": "Patient" @@ -223,6 +261,8 @@ { "path": "Specimen.subject", "description": "Link to the patient the specimen is from", + "min": 1, + "max": 1, "target": [ { "type": "Patient" @@ -232,6 +272,8 @@ { "path": "Specimen.parent", "description": "Link to parent specimen resource", + "min": 0, + "max": 1, "target": [ { "type": "Specimen" @@ -241,6 +283,8 @@ { "path": "Specimen.collection.collector", "description": "Link to collector of the specimen", + "min": 0, + "max": 1, "target": [ { "type": "PractitionerRole" @@ -251,6 +295,8 @@ "path": "Specimen.collection.bodySite.extension.valueReference", "sliceName": "bodySiteReference", "description": "Link to the body structure detailing the morphology and topography of the specimen", + "min": 0, + "max": 1, "target": [ { "type": "BodyStructure" @@ -264,6 +310,8 @@ { "path": "ServiceRequest.specimen", "description": "Optional link to specimen where this has already been collected/ordered prior to request submission", + "min": 0, + "max": "*", "target": [ { "type": "Specimen", @@ -271,6 +319,8 @@ { "path": "Specimen.subject", "description": "Link to the patient the specimen is from", + "min": 1, + "max": 1, "target": [ { "type": "Patient" @@ -280,6 +330,8 @@ { "path": "Specimen.parent", "description": "Link to parent specimen resource", + "min": 0, + "max": 1, "target": [ { "type": "Specimen" @@ -289,6 +341,8 @@ { "path": "Specimen.collection.collector", "description": "Link to collector of the specimen", + "min": 0, + "max": 1, "target": [ { "type": "PractitionerRole" @@ -299,6 +353,8 @@ "path": "Specimen.collection.bodySite.extension.valueReference", "sliceName": "bodySiteReference", "description": "Link to the body structure detailing the morphology and topography of the specimen", + "min": 0, + "max": 1, "target": [ { "type": "BodyStructure" @@ -312,6 +368,8 @@ { "path": "ServiceRequest.relevantHistory", "description": "Optional link to provenance resources collating history of changes to the request", + "min": 0, + "max": "*", "target": [ { "type": "Provenance", @@ -319,6 +377,8 @@ { "path": "Provenance.agent.who", "description": "PractitionerRole that made the referenced change", + "min": 1, + "max": 1, "target": [ { "type": "PractitionerRole" From d347e5aa3b2a3ee40cf7768b5c202735d6ebf3af Mon Sep 17 00:00:00 2001 From: Omar Khan Date: Fri, 17 May 2024 10:06:54 +0100 Subject: [PATCH 3/3] Updates to CapabilityStatements to support GD --- ...abilityStatement-genomics-application.json | 23 +++++++++++++++++++ ...bilityStatement-genomics-requirements.json | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/CapabilityStatement/CapabilityStatement-genomics-application.json b/CapabilityStatement/CapabilityStatement-genomics-application.json index 4fcc5d60..c8730196 100644 --- a/CapabilityStatement/CapabilityStatement-genomics-application.json +++ b/CapabilityStatement/CapabilityStatement-genomics-application.json @@ -160,6 +160,29 @@ } ] }, + { + "type": "GraphDefinition", + "profile": "http://hl7.org/fhir/StructureDefinition/GraphDefinition", + "documentation": "For searching supported GraphDefinitions", + "interaction": [ + { + "code": "read" + }, + { + "code": "search-type" + } + ], + "searchParam": [ + { + "name": "name", + "type": "string" + }, + { + "name": "start", + "type": "token" + } + ] + }, { "type": "ConceptMap", "profile": "http://hl7.org/fhir/StructureDefinition/ConceptMap", diff --git a/CapabilityStatement/CapabilityStatement-genomics-requirements.json b/CapabilityStatement/CapabilityStatement-genomics-requirements.json index 917c142c..003bcabb 100644 --- a/CapabilityStatement/CapabilityStatement-genomics-requirements.json +++ b/CapabilityStatement/CapabilityStatement-genomics-requirements.json @@ -43,6 +43,10 @@ "type": "CodeSystem", "profile": "http://hl7.org/fhir/StructureDefinition/CodeSystem" }, + { + "type": "GraphDefinition", + "profile": "http://hl7.org/fhir/StructureDefinition/GraphDefinition" + }, { "type": "ConceptMap", "profile": "http://hl7.org/fhir/StructureDefinition/ConceptMap"