Source | ch.fhir.ig.ch-orf#current:CH ORF (R4) (v4.0.1) |
resourceType | StructureMap |
id | OrfQrToBundle |
canonical | http://fhir.ch/ig/ch-orf/StructureMap/OrfQrToBundle |
version | 2.0.0-ballot |
status | draft |
publisher | HL7 Switzerland |
name | OrfQrToBundle |
date | 2023-06-29T19:28:25+00:00 |
copyright | CC0-1.0 |
jurisdictions | ch |
Usages | (none) |
/// url = 'http://fhir.ch/ig/ch-orf/StructureMap/OrfQrToBundle' /// name = 'OrfQrToBundle' /// status = 'draft' uses " http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse " alias QuestionnaireResponse as source uses " http://hl7.org/fhir/StructureDefinition/BackboneElement " alias BackboneElement as source uses " http://hl7.org/fhir/StructureDefinition/Bundle " alias Bundle as target uses " http://hl7.org/fhir/StructureDefinition/Composition " alias Composition as target uses " http://hl7.org/fhir/StructureDefinition/Patient " alias Patient as target uses " http://hl7.org/fhir/StructureDefinition/RelatedPerson " alias RelatedPerson as target uses " http://hl7.org/fhir/StructureDefinition/Organization " alias Organization as target uses " http://hl7.org/fhir/StructureDefinition/Practitioner " alias Practitioner as target uses " http://hl7.org/fhir/StructureDefinition/PractitionerRole " alias PractitionerRole as target uses " http://hl7.org/fhir/StructureDefinition/ServiceRequest " alias ServiceRequest as target uses " http://hl7.org/fhir/StructureDefinition/Extension " alias Extension as target uses " http://hl7.org/fhir/StructureDefinition/EpisodeOfCare " alias EpisodeOfCare as target uses " http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse " alias QuestionnaireResponseTarget as target group OrfQrToBundle ( source qr : QuestionnaireResponse, target bundle : Bundle ) { qr -> bundle.identifier as documentIdentifier , documentIdentifier.system = 'urn:ietf:rfc:3986' , uuid ( ) as uuidDoc , documentIdentifier.value = append ( 'urn:uuid:' , uuidDoc ) "documentIdentifier" ; qr as qrcp -> bundle.entry as e , e.resource = create ( 'Composition' ) as composition , composition.id = uuid ( ) as uuid , e.fullUrl = append ( 'urn:uuid:' , uuid ) , bundle.entry as e2 , bundle.timestamp = ( now() ) as timestamp , composition.date = timestamp , composition.title = 'Order and Referral by Form' , composition.type as type , type.coding as coding , coding.code = '419891008' , coding.system = 'http://snomed.info/sct' , composition.category as category , category.coding as coding , coding.code = '721963009' , coding.system = 'http://snomed.info/sct' , e2.resource = create ( 'Patient' ) as patient , patient.id = uuid ( ) as uuid2 , e2.fullUrl = append ( 'urn:uuid:' , uuid2 ) , bundle.entry as e4 , e4.resource = qrcp as questionnaireresp , questionnaireresp.id = uuid ( ) as uuid4 , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) , bundle.entry as e5 , e5.resource = create ( 'ServiceRequest' ) as servicerequest , servicerequest.id = uuid ( ) as uuid5 , e5.fullUrl = append ( 'urn:uuid:' , uuid5 ) then { qr.questionnaire as can -> bundle.entry as e6 , e6.resource = ( can.resolve() ) as q , q.id = uuid ( ) as uuid6 , e6.fullUrl = append ( 'urn:uuid:' , uuid6 ) then QrToBundle ( qr , q , patient , questionnaireresp , servicerequest , composition , bundle ) "orfbundle" ; } "orfbundle" ; } group QrToGroups ( source qr : QuestionnaireResponse, target patient : Patient, target bundle : Bundle, target composition : Composition, target serviceRequest : ServiceRequest ) { qr.item as grp where linkId = 'order' then OrderItems ( grp , bundle , composition , serviceRequest ) "grporder" ; qr.item as grp where linkId = 'receiver' then ReceiverInit ( grp , bundle , composition , serviceRequest ) "receiver" ; qr.item as grp where linkId = 'initiator' then InitiatorInit ( grp , bundle , patient , composition , serviceRequest ) "grpinitiator" ; qr.item as grp where linkId = 'patient' then PatientItems ( grp , bundle , patient , composition , serviceRequest ) "grppatient" ; qr.item as grp where linkId = 'requestedEncounter' then RequestedEncounterItems ( grp , bundle , patient , serviceRequest ) "grprequestedencounter" ; qr.item as grp where linkId = 'coverage' then Coverage ( grp , bundle , patient , serviceRequest ) "grprequestedencounter" ; qr.item as grp where linkId = 'sender' then SenderAuthorInit ( grp , bundle , composition , serviceRequest ) "grpsender" ; qr.item as grp where linkId = 'receiverCopy' then ReceiverCopy ( grp , bundle , patient , composition , serviceRequest ) "receiverCopy" ; qr.item as grp where linkId = 'appointment' then Appointment ( grp , bundle , composition , serviceRequest ) "appointment" ; qr.item as grp where linkId = 'previousResults' then PreviousResults ( grp , bundle , serviceRequest ) "previousResults" ; qr.item as grp where linkId = 'antecedentEpisodeOfCare' then AntecedentEpisodeOfCareInit ( grp , bundle , patient , composition ) "AntecedentEpisodeOfCareInit" ; qr.item as grp where linkId = 'consent' then Consent ( grp , bundle , composition ) "consent" ; qr.item as grp where linkId = 'note' then Note ( grp , serviceRequest ) "note" ; } group OrderItems ( source src : BackboneElement, target bundle : Bundle, target composition , target serviceRequest : ServiceRequest ) { src.item as item where ((linkId.value = 'order.precedentDocumentIdentifier') and answer.exists()) -> composition.extension as ext , ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-precedentdocument' , ext.value = create ( 'Identifier' ) as value , value.system = 'urn:ietf:rfc:3986' , value.value = ( 'urn:uuid:' + item.answer.valueString ) "precedentDocumentIdentifier" ; src.item as item where ((linkId.value = 'order.placerOrderIdentifier') and answer.exists()) -> serviceRequest.identifier as value share placer , value.type as type , type.coding as coding , coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' , coding.code = 'PLAC' , value.value = ( item.answer.valueString ) "placerOrderIdentifier" ; src.item as item where ((linkId.value = 'order.placerOrderIdentifierDomain') and answer.exists()) -> serviceRequest.identifier as value share placer , value.system = ( item.answer.valueString ) "placerOrderIdentifierDomain" ; src.item as item where ((linkId.value = 'order.fillerOrderIdentifier') and answer.exists()) -> serviceRequest.identifier as value share filler , value.type as type , type.coding as coding , coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' , coding.code = 'FILL' , value.value = ( item.answer.valueString ) "fillerOrderIdentifier" ; src.item as item where ((linkId.value = 'order.fillerOrderIdentifierDomain') and answer.exists()) -> serviceRequest.identifier as value share filler , value.system = ( item.answer.valueString ) "fillerOrderIdentifierDomain" ; src.item as item where ((linkId.value = 'order.dateTime') and answer.exists()) -> serviceRequest.authoredOn = ( item.answer.value ) ; src.item as item where ((linkId.value = 'order.priority') and answer.exists()) -> serviceRequest.priority = ( item.answer.value.code ) ; src.item as item where (linkId.value = 'order.notificationContactDocument') then { item -> bundle.entry as e4 , e4.resource = create ( 'PractitionerRole' ) as practitionerRoleDataEnterer , practitionerRoleDataEnterer.id = uuid ( ) as uuid4 , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) , composition.extension as extension , bundle.entry as e5 , e5.resource = create ( 'Practitioner' ) as practitionerDataEnterer , practitionerDataEnterer.id = uuid ( ) as uuid5 , e5.fullUrl = append ( 'urn:uuid:' , uuid5 ) , practitionerRoleDataEnterer.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid5 ) then { item then UrgentNotificationContactForRequestItems ( item , practitionerRoleDataEnterer , practitionerDataEnterer ) "data" ; item then ExtOrfUrgentNotificationContactForRequest ( item , practitionerRoleDataEnterer , extension ) "extension" ; } "items" ; } "notificationContactDocument" ; src.item as item where (linkId.value = 'order.notificationContactDocumentResponse') then { item -> bundle.entry as e4 , e4.resource = create ( 'PractitionerRole' ) as practitionerRoleDataEnterer , practitionerRoleDataEnterer.id = uuid ( ) as uuid4 , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) , composition.extension as extension , bundle.entry as e5 , e5.resource = create ( 'Practitioner' ) as practitionerDataEnterer , practitionerDataEnterer.id = uuid ( ) as uuid5 , e5.fullUrl = append ( 'urn:uuid:' , uuid5 ) , practitionerRoleDataEnterer.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid5 ) then { item then UrgentNotificationContactForResponseItems ( item , practitionerRoleDataEnterer , practitionerDataEnterer ) "data" ; item then ExtOrfUrgentNotificationContactForResponse ( item , practitionerRoleDataEnterer , extension ) "extension" ; } "items" ; } "notificationContactDocumentResponse" ; } group UrgentNotificationContactForRequestPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'order.notificationContactDocument.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'order.notificationContactDocument.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'order.notificationContactDocument.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'order.notificationContactDocument.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'order.notificationContactDocument.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group UrgentNotificationContactForRequestItems ( source src : BackboneElement, target practitionerRole : practitionerRole, target practitioner : Practitioner ) { src.item as item where (linkId.value = 'order.notificationContactDocument.practitioner') then UrgentNotificationContactForRequestPractitionerItems ( item , practitioner ) ; } group ExtOrfUrgentNotificationContactForRequest ( source src : BackboneElement, target practitionerRole : PractitionerRole, target ext : Extension ) { src -> ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-urgentnoficationcontactforthisdocument' "url" ; src -> ext.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %practitionerRole.id ) "practitionerRole" ; } group UrgentNotificationContactForResponsePractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'order.notificationContactDocumentResponse.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'order.notificationContactDocumentResponse.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'order.notificationContactDocumentResponse.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'order.notificationContactDocumentResponse.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'order.notificationContactDocumentResponse.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group UrgentNotificationContactForResponseItems ( source src : BackboneElement, target practitionerRole : practitionerRole, target practitioner : Practitioner ) { src.item as item where (linkId.value = 'order.notificationContactDocumentResponse.practitioner') then UrgentNotificationContactForResponsePractitionerItems ( item , practitioner ) ; } group ExtOrfUrgentNotificationContactForResponse ( source src : BackboneElement, target practitionerRole : PractitionerRole, target ext : Extension ) { src -> ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-urgentnoficationcontactfortheresponsetothisdocument' "url" ; src -> ext.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %practitionerRole.id ) "practitionerRole" ; } group ReceiverPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'receiver.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiver.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiver.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'receiver.practitioner.gln') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'receiver.practitioner.zsr') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; src.item as item where ((linkId.value = 'receiver.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'receiver.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group ReceiverOrganizationItems ( source src : BackboneElement, target organization : Organization ) { src.item as item where ((linkId.value = 'receiver.organization.name') and answer.exists()) -> organization.name = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiver.organization.gln') and answer.exists()) -> organization.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'receiver.organization.zsr') and answer.exists()) -> organization.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; src.item as item where ((linkId.value = 'receiver.organization.streetAddressLine') and answer.exists()) -> organization.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'receiver.organization.postalCode') and answer.exists()) -> organization.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'receiver.organization.city') and answer.exists()) -> organization.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'receiver.organization.country') and answer.exists()) -> organization.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group ReceiverItems ( source src : BackboneElement, target bundle : Bundle, target practitionerRole : practitionerRole ) { src.item as item where (linkId.value = 'receiver.practitioner') -> bundle.entry as e2 , e2.resource = create ( 'Practitioner' ) as practitioner , practitioner.id = uuid ( ) as uuid2 , practitionerRole.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid2 ) , e2.fullUrl = append ( 'urn:uuid:' , uuid2 ) then ReceiverPractitionerItems ( item , practitioner ) ; src.item as item where (linkId.value = 'receiver.organization') -> bundle.entry as e3 , e3.resource = create ( 'Organization' ) as organization , organization.id = uuid ( ) as uuid3 , practitionerRole.organization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) , e3.fullUrl = append ( 'urn:uuid:' , uuid3 ) then ReceiverOrganizationItems ( item , organization ) ; } group Consent ( source src : BackboneElement, target bundle : Bundle, target composition : Composition ) { src.item as item where ((linkId.value = 'consent.statement') and answer.exists()) -> bundle.entry as e , e.resource = create ( 'Consent' ) as consent , consent.status = 'active' , consent.scope as scope , scope.coding as coding , coding.code = 'treatment' , coding.system = 'http://terminology.hl7.org/CodeSystem/consentscope' , consent.category as category , category.coding as coding , coding.code = '59284-0' , coding.system = 'http://loinc.org' , consent.policyRule as policyRule , policyRule.coding as coding , coding.code = '385432009' , coding.system = 'http://snomed.info/sct' , consent.id = uuid ( ) as uuid , e.fullUrl = append ( 'urn:uuid:' , uuid ) , composition.extension as ext , ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-patientconsent' , ext.value = create ( 'Reference' ) as reference , consent.extension as extcode , extcode.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-consentcode' , extcode.value = create ( 'CodeableConcept' ) as cc , cc.coding = ( item.answer.value ) , reference.reference = append ( 'urn:uuid:' , uuid ) then { item.answer as answer then { answer.item as item where ((linkId.value = 'consent.statement.note') and answer.exists()) -> consent.extension as extnote , extnote.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-consentnote' , extnote.value = ( item.answer.value ) "note" ; } ; } "statement" ; } group ReceiverInit ( source src : BackboneElement, target bundle : Bundle, target composition : Composition, target serviceRequest : ServiceRequest ) { src -> bundle.entry as e , e.resource = create ( 'PractitionerRole' ) as practitionerRole , practitionerRole.id = uuid ( ) as uuid , e.fullUrl = append ( 'urn:uuid:' , uuid ) , composition.extension as ext , ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-receiver' , ext.value = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid ) then ReceiverItems ( src , bundle , practitionerRole ) "receiver" ; } group InitiatorItems ( source src : BackboneElement, target bundle : Bundle, target patient : Patient, target ext : Extension ) { src.item as item where ((linkId.value = 'initiator.personalrelation') and answer.exists()) -> ext.extension as extension , extension.url = 'ch-orf-personalrelation' , extension.value = ( item.answer.value ) "personalrelation" ; src.item as item where ((linkId.value = 'initiator.legalrelation') and answer.exists()) -> ext.extension as extension , extension.url = 'ch-orf-legalrelation' , extension.value = ( item.answer.value ) "legalrelation" ; src.item as item where (linkId = 'initiator.practitionerRole') -> bundle.entry as e4 , e4.resource = create ( 'PractitionerRole' ) as practitionerrole , ext.extension as extension , practitionerrole.id = uuid ( ) as uuid4 , extension.url = 'ch-orf-personorganization' , extension.value = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid4 ) , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) then { item then InitiatorPractitionerRoleItems ( item , bundle , practitionerrole ) "data" ; } "InitiatorPractitionerRoleItems" ; src.item as item where (linkId = 'initiator.relatedPerson') -> bundle.entry as e4 , e4.resource = create ( 'RelatedPerson' ) as relatedPerson , ext.extension as extension , extension.url = 'ch-orf-personorganization' , extension.value = create ( 'Reference' ) as reference , relatedPerson.id = uuid ( ) as uuid4 , reference.reference = append ( 'urn:uuid:' , uuid4 ) , relatedPerson.patient as reference , reference.reference = ( 'urn:uuid:' + %patient.id ) , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) then { item then InitiatorRelatedPersonItems ( item , relatedPerson ) "data" ; } "relatedPerson" ; } group InitiatorRelatedPersonItems ( source src : BackboneElement, target relatedPerson : RelatedPerson ) { src.item as item where ((linkId.value = 'initiator.relatedPerson.familyName') and answer.exists()) -> relatedPerson.name as name share name , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'initiator.relatedPerson.givenName') and answer.exists()) -> relatedPerson.name as name share name , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'initiator.relatedPerson.phone') and answer.exists()) then { item.answer as answer -> relatedPerson.telecom as value , value.system = 'phone' , value.value = ( answer.value ) "phone" ; } "phone" ; src.item as item where ((linkId.value = 'initiator.relatedPerson.email') and answer.exists()) -> relatedPerson.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; src.item as item where ((linkId.value = 'initiator.relatedPerson.streetAddressLine') and answer.exists()) -> relatedPerson.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'initiator.relatedPerson.postalCode') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'initiator.relatedPerson.city') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'initiator.relatedPerson.country') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group InitiatorPractitionerRoleItems ( source src : BackboneElement, target bundle : Bundle, target practitionerRole : practitionerRole ) { src.item as item where (linkId.value = 'initiator.practitionerRole.practitioner') -> bundle.entry as e2 , e2.resource = create ( 'Practitioner' ) as practitioner , practitioner.id = uuid ( ) as uuid2 , practitionerRole.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid2 ) , e2.fullUrl = append ( 'urn:uuid:' , uuid2 ) then InitiatorPractitionerItems ( item , practitioner ) ; src.item as item where (linkId.value = 'initiator.practitionerRole.organization') -> bundle.entry as e3 , e3.resource = create ( 'Organization' ) as organization , organization.id = uuid ( ) as uuid3 , practitionerRole.organization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) , e3.fullUrl = append ( 'urn:uuid:' , uuid3 ) then InitiatorOrganizationItems ( item , organization ) ; } group InitiatorPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.gln') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.practitioner.zsr') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; } group InitiatorOrganizationItems ( source src : BackboneElement, target organization : Organization ) { src.item as item where ((linkId.value = 'initiator.practitionerRole.organization.name') and answer.exists()) -> organization.name = ( item.answer.value ) ; src.item as item where ((linkId.value = 'initiator.practitionerRole.organization.streetAddressLine') and answer.exists()) -> organization.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.organization.postalCode') and answer.exists()) -> organization.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.organization.city') and answer.exists()) -> organization.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'initiator.practitionerRole.organization.country') and answer.exists()) -> organization.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group FamilyDoctorInit ( source src : BackboneElement, target bundle : Bundle, target patient : Patient, target composition : Composition, target serviceRequest : ServiceRequest ) { src -> bundle.entry as e4 , e4.resource = create ( 'PractitionerRole' ) as practitionerRole , practitionerRole.id = uuid ( ) as uuid4 , patient.generalPractitioner = create ( 'Reference' ) as gp , gp.reference = append ( 'urn:uuid:' , uuid4 ) , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) then { src.item as item where (linkId.value = 'familydoctor.practitioner') -> bundle.entry as e2 , e2.resource = create ( 'Practitioner' ) as practitioner , practitioner.id = uuid ( ) as uuid2 , practitionerRole.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid2 ) , e2.fullUrl = append ( 'urn:uuid:' , uuid2 ) then FamilyDoctorPractitionerItems ( item , practitioner ) ; src.item as item where (linkId.value = 'familydoctor.organization') -> bundle.entry as e3 , e3.resource = create ( 'Organization' ) as organization , organization.id = uuid ( ) as uuid3 , practitionerRole.organization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) , e3.fullUrl = append ( 'urn:uuid:' , uuid3 ) then FamilyDoctorOrganizationItems ( item , organization ) ; } "FamilyDoctorInit" ; } group FamilyDoctorPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'familydoctor.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'familydoctor.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'familydoctor.practitioner.gln') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'familydoctor.practitioner.zsr') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; src.item as item where ((linkId.value = 'familydoctor.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'familydoctor.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'familydoctor.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group FamilyDoctorOrganizationItems ( source src : BackboneElement, target organization : Organization ) { src.item as item where ((linkId.value = 'familydoctor.organization.name') and answer.exists()) -> organization.name = ( item.answer.value ) ; src.item as item where ((linkId.value = 'familydoctor.organization.streetAddressLine') and answer.exists()) -> organization.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'familydoctor.organization.postalCode') and answer.exists()) -> organization.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'familydoctor.organization.city') and answer.exists()) -> organization.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'familydoctor.organization.country') and answer.exists()) -> organization.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; src.item as item where ((linkId.value = 'familydoctor.organization.gln') and answer.exists()) -> organization.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'familydoctor.organization.zsr') and answer.exists()) -> organization.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; } group AntecedentEpisodeOfCareInit ( source src : BackboneElement, target bundle : Bundle, target patient : Patient, target composition : Composition ) { src -> composition.extension as ext , ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-antecedentepisodeofcare' , bundle.entry as e4 , e4.resource = create ( 'EpisodeOfCare' ) as episodeofcare , episodeofcare.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , episodeofcare.status = 'finished' , ext.value = create ( 'Reference' ) as ref , ref.reference = ( 'urn:uuid:' + %episodeofcare.id ) then AntecedentEpisodeOfCareItems ( src , bundle , patient , episodeofcare ) "AntecedentEpisodeOfCareItems" ; } group AntecedentEpisodeOfCareItems ( source src : BackboneElement, target bundle : Bundle, target tgt : Patient, target episodeofcare : EpisodeOfCare ) { src.item as item where ((linkId.value = 'antecedentEpisodeOfCare.start') and answer.exists()) -> episodeofcare.statusHistory as statusHistory , statusHistory.status = 'finished' , statusHistory.period as period , period.start = ( item.answer.value ) , period.end = ( item.answer.value ) then { src.item as iteme where ((linkId.value = 'antecedentEpisodeOfCare.end') and answer.exists()) -> period.end = ( iteme.answer.value ) "antecedentEpisodeOfCareEndNotSameAsStart" ; } "start" ; src.item as item where (linkId.value = 'antecedentEpisodeOfCare.managingOrganization') -> bundle.entry as e3 , e3.resource = create ( 'Organization' ) as organization , organization.id = uuid ( ) as uuid3 , e3.fullUrl = append ( 'urn:uuid:' , uuid3 ) , episodeofcare.patient = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %tgt.id ) , episodeofcare.managingOrganization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) then AntecedentEpisodeOfCareOrganizationItems ( item , organization ) "managingOrganization" ; } group AntecedentEpisodeOfCareOrganizationItems ( source src : BackboneElement, target organization : Organization ) { src.item as item where ((linkId.value = 'antecedentEpisodeOfCare.managingOrganization.name') and answer.exists()) -> organization.name = ( item.answer.value ) ; src.item as item where ((linkId.value = 'antecedentEpisodeOfCare.managingOrganization.streetAddressLine') and answer.exists()) -> organization.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'antecedentEpisodeOfCare.managingOrganization.postalCode') and answer.exists()) -> organization.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'antecedentEpisodeOfCare.managingOrganization.city') and answer.exists()) -> organization.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'antecedentEpisodeOfCare.managingOrganization.country') and answer.exists()) -> organization.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group InitiatorInit ( source src : BackboneElement, target bundle : Bundle, target patient : Patient, target composition : Composition, target serviceRequest : ServiceRequest ) { src -> composition.extension as ext , ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-initiator' then InitiatorItems ( src , bundle , patient , ext ) "receiver" ; } group PatientItems ( source src : BackboneElement, target bundle : Bundle, target tgt : Patient, target composition : Composition, target serviceRequest : ServiceRequest ) { src.item as grp where linkId = 'familydoctor' then FamilyDoctorInit ( grp , bundle , tgt , composition , serviceRequest ) "grpfamily" ; src.item as item then PatientItems ( item , bundle , tgt , composition , serviceRequest ) ; src.item as item where ((linkId.value = 'patient.familyName') and answer.exists()) -> tgt.name as name share patientName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'patient.maidenName') and answer.exists()) -> tgt.name as name , name.use = 'maiden' , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'patient.givenName') and answer.exists()) -> tgt.name as name share patientName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'patient.localPid') and answer.exists()) -> tgt.identifier as value share localpid , value.type as type , type.coding as coding , coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' , coding.code = 'MR' , value.value = ( item.answer.valueString ) "localPid" ; src.item as item where ((linkId.value = 'patient.localPidDomain') and answer.exists()) -> tgt.identifier as value share localpid , value.system = ( item.answer.valueString ) "localPidDomain" ; src.item as item where ((linkId.value = 'patient.birthDate') and answer.exists()) -> tgt.birthDate = ( item.answer.value ) ; src.item as item where ((linkId.value = 'patient.gender') and answer.exists()) -> tgt.gender = ( item.answer.value.code ) ; src.item as item where ((linkId.value = 'patient.maritalStatus') and answer.exists()) then { item.answer as answer then { answer.value : Coding as coding -> tgt.maritalStatus as maritalStatus , maritalStatus.coding = coding "maritalStatus" ; } ; } "maritalStatus" ; src.item as item where ((linkId.value = 'patient.phone') and answer.exists()) then { item.answer as answer -> tgt.telecom as value , value.system = 'phone' , value.value = ( answer.value ) "phone" ; } "phone" ; src.item as item where ((linkId.value = 'patient.email') and answer.exists()) -> tgt.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; src.item as item where ((linkId.value = 'patient.streetAddressLine') and answer.exists()) -> tgt.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'patient.postalCode') and answer.exists()) -> tgt.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'patient.city') and answer.exists()) -> tgt.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'patient.country') and answer.exists()) -> tgt.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; src.item as item where ((linkId.value = 'patient.languageOfCorrespondence') and answer.exists()) then { item.answer as answer then { answer.value : Coding as coding -> tgt.communication as communication , communication.preferred = true , communication.language as language , language.coding = coding "languageOfCorrespondence" ; } ; } "languageOfCorrespondence" ; src.item as item where (linkId.value = 'patient.contactperson') -> tgt.contact as contact then { item.item as item where ((linkId.value = 'patient.contactperson.familyName') and answer.exists()) -> contact.name as name share contactName , name.family = ( item.answer.value ) ; item.item as item where ((linkId.value = 'patient.contactperson.givenName') and answer.exists()) -> contact.name as name share contactName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'patient.contactperson.phone') and answer.exists()) then { item.answer as answer -> tgt.telecom as value , value.system = 'phone' , value.value = ( answer.value ) "phone" ; } "phone" ; item.item as item where ((linkId.value = 'patient.contactperson.email') and answer.exists()) -> contact.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; item.item as item where ((linkId.value = 'patient.contactperson.relationship') and answer.exists()) -> contact.relationship as relationship , relationship.text = ( item.answer.value ) "relationship" ; } "contact" ; } group RequestedEncounterItems ( source src : BackboneElement, target bundle : Bundle, target patient : Patient, target serviceRequest : ServiceRequest ) { src -> bundle.entry as e4 , e4.resource = create ( 'Encounter' ) as encounter , encounter.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , encounter.status = 'planned' , serviceRequest.extension as extension , encounter.subject = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , extension.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-requestedencounterdetails' , extension.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %uuid4 ) then { src.item as item where ((linkId.value = 'requestedEncounter.class') and answer.exists()) -> encounter.class = ( item.answer.value ) "class" ; src.item as item where ((linkId.value = 'requestedEncounter.desiredAccommodation') and answer.exists()) -> encounter.extension as extension , extension.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-desiredaccommodation' , extension.value = ( item.answer.value ) "desiredAccommodation" ; } "RequestedEncounterItems" ; } group Coverage ( source src : BackboneElement, target bundle : Bundle, target patient : Patient, target serviceRequest : ServiceRequest ) { src.item as item where where(linkId.value = 'coverage.beneficiary') then { item.item as item where ((linkId.value = 'coverage.beneficiary.ahvn13') and answer.exists()) -> patient.identifier as identifier , identifier.system = 'urn:oid:2.16.756.5.32' , identifier.value = ( item.answer.value ) "ahvn13" ; } "beneficiary" ; src.item as item where where(linkId.value = 'coverage.kvg') -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'KVG' then { item.item as item where ((linkId.value = 'coverage.kvg.name') and answer.exists()) -> coverage.payor as payor , payor.reference as refcontained , refcontained.value = '#org' , coverage.contained = create ( 'Organization' ) as organization , organization.id = 'org' , organization.name = ( item.answer.value ) "name" ; item.item as item where ((linkId.value = 'coverage.kvg.insuranceCardNumber') and answer.exists()) -> coverage.identifier as identifier , identifier.type as typeid , typeid.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coverageidentifiertype' , coding.code = 'VeKa' , identifier.value = ( item.answer.value ) "insuranceCardNumber" ; } "coveragekvg" ; src.item as item where where(linkId.value = 'coverage.uvg') -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'UVG' then { item.item as item where ((linkId.value = 'coverage.uvg.name') and answer.exists()) -> coverage.payor as payor , payor.reference as refcontained , refcontained.value = '#org' , coverage.contained = create ( 'Organization' ) as organization , organization.id = 'org' , organization.name = ( item.answer.value ) "name" ; item.item as item where ((linkId.value = 'coverage.uvg.claimNumber') and answer.exists()) -> coverage.identifier as identifier , identifier.type as typeid , typeid.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coverageidentifiertype' , coding.code = 'Claim' , identifier.value = ( item.answer.value ) "claimNumber" ; } "coverageuvg" ; src.item as item where where(linkId.value = 'coverage.vvg') -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'VVG' then { item.item as item where ((linkId.value = 'coverage.vvg.name') and answer.exists()) -> coverage.payor as payor , payor.reference as refcontained , refcontained.value = '#org' , coverage.contained = create ( 'Organization' ) as organization , organization.id = 'org' , organization.name = ( item.answer.value ) "name" ; item.item as item where ((linkId.value = 'coverage.vvg.insuranceCardNumber') and answer.exists()) -> coverage.identifier as identifier , identifier.type as typeid , typeid.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coverageidentifiertype' , coding.code = 'VeKa' , identifier.value = ( item.answer.value ) "insuranceCardNumber" ; } "coveragevvg" ; src.item as item where where(linkId.value = 'coverage.iv') -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'IVG' then { item.item as item where ((linkId.value = 'coverage.iv.verfuegungsnummer') and answer.exists()) -> coverage.identifier as identifier , identifier.type as typeid , typeid.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coverageidentifiertype' , coding.code = 'IV' , identifier.value = ( item.answer.value ) , coverage.payor as payor , payor.reference as refcontained , refcontained.value = '#org' , coverage.contained = create ( 'Organization' ) as organization , organization.id = 'org' , organization.name = 'IV' "verfuegungsnummer" ; } "coverageiv" ; src.item as item where where(linkId.value = 'coverage.mv') -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'MVG' then { item.item as item where ((linkId.value = 'coverage.mv.versichertennummer') and answer.exists()) -> coverage.identifier as identifier , identifier.type as typeid , typeid.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coverageidentifiertype' , coding.code = 'MV' , identifier.value = ( item.answer.value ) , coverage.payor as payor , payor.reference as refcontained , refcontained.value = '#org' , coverage.contained = create ( 'Organization' ) as organization , organization.id = 'org' , organization.name = 'MV' "versichertennummer" ; } "coveragemv" ; src.item as item where where(linkId.value = 'coverage.self') then { item.item as item where ((linkId.value = 'coverage.self.patient') and answer.exists() and answer.value) -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'Self' , coverage.payor as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) "payor" ; item.item as item2 where ((linkId.value = 'coverage.self.patientRelatedPerson') and answer.exists() and answer.value) then { item.item as item where (linkId.value = 'coverage.self.relatedPerson') -> bundle.entry as e5 , e5.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e5.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'Self' , bundle.entry as e6 , e6.resource = create ( 'RelatedPerson' ) as relatedPerson , relatedPerson.id = uuid ( ) as uuid6 , e6.fullUrl = append ( 'urn:uuid:' , uuid6 ) , coverage.payor as subject , subject.reference = ( 'urn:uuid:' + %relatedPerson.id ) , relatedPerson.patient as reference , reference.reference = ( 'urn:uuid:' + %patient.id ) then CoverageRelatedPersonItems ( item , relatedPerson ) "relatedPerson" ; } "" ; } "self" ; src.item as item where where(linkId.value = 'coverage.other') -> bundle.entry as e4 , e4.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.insurance as insurance , insurance.reference = ( 'urn:uuid:' + %uuid4 ) , coverage.status = 'active' , coverage.beneficiary = create ( 'Reference' ) as subject , subject.reference = ( 'urn:uuid:' + %patient.id ) , coverage.type as type , type.coding as coding , coding.system = 'http://fhir.ch/ig/ch-orf/CodeSystem/ch-orf-cs-coveragetype' , coding.code = 'Other' then { item.item as item where ((linkId.value = 'coverage.other.name') and answer.exists()) -> coverage.payor as payor , payor.reference as refcontained , refcontained.value = '#org' , coverage.contained = create ( 'Organization' ) as organization , organization.id = 'org' , organization.name = ( item.answer.value ) "name" ; item.item as item where ((linkId.value = 'coverage.other.id') and answer.exists()) -> coverage.identifier as identifier , identifier.value = ( item.answer.value ) "id" ; } "coveragevvg" ; } group CoverageRelatedPersonItems ( source src : BackboneElement, target relatedPerson : RelatedPerson ) { src.item as item where ((linkId.value = 'coverage.self.relatedPerson.familyName') and answer.exists()) -> relatedPerson.name as name share name , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.givenName') and answer.exists()) -> relatedPerson.name as name share name , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.phone') and answer.exists()) then { item.answer as answer -> relatedPerson.telecom as value , value.system = 'phone' , value.value = ( answer.value ) "phone" ; } "phone" ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.email') and answer.exists()) -> relatedPerson.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.streetAddressLine') and answer.exists()) -> relatedPerson.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.postalCode') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.city') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'coverage.self.relatedPerson.country') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group SenderAuthorPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'sender.author.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'sender.author.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'sender.author.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'sender.author.practitioner.gln') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'sender.author.practitioner.zsr') and answer.exists()) -> practitioner.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; src.item as item where ((linkId.value = 'sender.author.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'sender.author.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group SenderAuthorOrganizationItems ( source src : BackboneElement, target organization : Organization ) { src.item as item where ((linkId.value = 'sender.author.organization.name') and answer.exists()) -> organization.name = ( item.answer.value ) ; src.item as item where ((linkId.value = 'sender.author.organization.gln') and answer.exists()) -> organization.identifier as value , value.system = 'urn:oid:2.51.1.3' , value.value = ( item.answer.value ) "gln" ; src.item as item where ((linkId.value = 'sender.author.organization.zsr') and answer.exists()) -> organization.identifier as value , value.system = 'urn:oid:2.16.756.5.30.1.123.100.2.1.1' , value.value = ( item.answer.value ) "zsr" ; src.item as item where ((linkId.value = 'sender.author.organization.streetAddressLine') and answer.exists()) -> organization.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'sender.author.organization.postalCode') and answer.exists()) -> organization.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'sender.author.organization.city') and answer.exists()) -> organization.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'sender.author.organization.country') and answer.exists()) -> organization.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group SenderAuthorItems ( source src : BackboneElement, target practitionerRole : practitionerRole, target practitioner : Practitioner, target organization : Organization ) { src.item as item where (linkId.value = 'sender.author.practitioner') then SenderAuthorPractitionerItems ( item , practitioner ) ; src.item as item where (linkId.value = 'sender.author.organization') then SenderAuthorOrganizationItems ( item , organization ) ; } group SenderDataEntererPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'sender.dataenterer.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'sender.dataenterer.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'sender.dataenterer.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'sender.dataenterer.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group SenderDataEntererItems ( source src : BackboneElement, target practitionerRole : practitionerRole, target practitioner : Practitioner, target organization : Organization ) { src.item as item where (linkId.value = 'sender.dataenterer.practitioner') then SenderDataEntererPractitionerItems ( item , practitioner ) ; } group ChExtEprDataEnterer ( source src : BackboneElement, target practitionerRole : PractitionerRole, target ext : Extension ) { src -> ext.url = 'http://fhir.ch/ig/ch-core/StructureDefinition/ch-ext-epr-dataenterer' "url" ; src -> ext.extension as ext , ext.url = 'enterer' , ext.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %practitionerRole.id ) "practitionerRole" ; } group SenderAuthorInit ( source src : BackboneElement, target bundle : Bundle, target composition : Composition, target serviceRequest : ServiceRequest ) { src -> bundle.entry as e , e.resource = create ( 'PractitionerRole' ) as practitionerRole , practitionerRole.id = uuid ( ) as uuid , e.fullUrl = append ( 'urn:uuid:' , uuid ) , bundle.entry as e2 , e2.resource = create ( 'Practitioner' ) as practitioner , practitioner.id = uuid ( ) as uuid2 , e2.fullUrl = append ( 'urn:uuid:' , uuid2 ) , bundle.entry as e3 , e3.resource = create ( 'Organization' ) as organization , organization.id = uuid ( ) as uuid3 , e3.fullUrl = append ( 'urn:uuid:' , uuid3 ) , composition.author = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid ) , serviceRequest.requester = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid ) , practitionerRole.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid2 ) , practitionerRole.organization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) then { src.item as item where (linkId.value = 'sender.author') then SenderAuthorItems ( item , practitionerRole , practitioner , organization ) "author" ; src.item as item where (linkId.value = 'sender.dataenterer') then { item -> bundle.entry as e4 , e4.resource = create ( 'PractitionerRole' ) as practitionerRoleDataEnterer , practitionerRoleDataEnterer.id = uuid ( ) as uuid4 , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) , composition.extension as extension , bundle.entry as e5 , e5.resource = create ( 'Practitioner' ) as practitionerDataEnterer , practitionerDataEnterer.id = uuid ( ) as uuid5 , e5.fullUrl = append ( 'urn:uuid:' , uuid5 ) , practitionerRoleDataEnterer.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid5 ) , practitionerRoleDataEnterer.organization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) then { item then SenderDataEntererItems ( item , practitionerRoleDataEnterer , practitionerDataEnterer , organization ) "data" ; item then ChExtEprDataEnterer ( item , practitionerRoleDataEnterer , extension ) "extension" ; } "items" ; } "dataenterer" ; } "sender" ; } group ReceiverCopyRelatedPersonItems ( source src : BackboneElement, target relatedPerson : RelatedPerson ) { src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.familyName') and answer.exists()) -> relatedPerson.name as name share name , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.givenName') and answer.exists()) -> relatedPerson.name as name share name , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.phone') and answer.exists()) then { item.answer as answer -> relatedPerson.telecom as value , value.system = 'phone' , value.value = ( answer.value ) "phone" ; } "phone" ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.email') and answer.exists()) -> relatedPerson.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.streetAddressLine') and answer.exists()) -> relatedPerson.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.postalCode') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.city') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'receiverCopy.relatedPerson.country') and answer.exists()) -> relatedPerson.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group ReceiverCopyPractitionerItems ( source src : BackboneElement, target practitioner : Practitioner ) { src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.practitioner.familyName') and answer.exists()) -> practitioner.name as name share practitionerName , name.family = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.practitioner.givenName') and answer.exists()) -> practitioner.name as name share practitionerName , name.given = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.practitioner.title') and answer.exists()) -> practitioner.name as name share practitionerName , name.prefix = ( item.answer.value ) as prefix , prefix.extension as ext , ext.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier' , ext.value = create ( 'code' ) as value , value.value = 'AC' "title" ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.practitioner.phone') and answer.exists()) -> practitioner.telecom as value , value.system = 'phone' , value.value = ( item.answer.value ) "phone" ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.practitioner.email') and answer.exists()) -> practitioner.telecom as value , value.system = 'email' , value.value = ( item.answer.value ) "email" ; } group ReceiverCopyOrganizationItems ( source src : BackboneElement, target organization : Organization ) { src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.organization.name') and answer.exists()) -> organization.name = ( item.answer.value ) ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.organization.streetAddressLine') and answer.exists()) -> organization.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "streetAddressLine" ; } "answer" ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.organization.postalCode') and answer.exists()) -> organization.address as address share orgAddress , address.postalCode = ( item.answer.value ) "postalCode" ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.organization.city') and answer.exists()) -> organization.address as address share orgAddress , address.city = ( item.answer.value ) "city" ; src.item as item where ((linkId.value = 'receiverCopy.practitionerRole.organization.country') and answer.exists()) -> organization.address as address share orgAddress , address.country = ( item.answer.value ) "country" ; } group ReceiverCopyPractitionerRoleItems ( source src : BackboneElement, target bundle : Bundle, target practitionerRole : practitionerRole ) { src.item as item where (linkId.value = 'receiverCopy.practitionerRole.practitioner') -> bundle.entry as e2 , e2.resource = create ( 'Practitioner' ) as practitioner , practitioner.id = uuid ( ) as uuid2 , practitionerRole.practitioner = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid2 ) , e2.fullUrl = append ( 'urn:uuid:' , uuid2 ) then ReceiverCopyPractitionerItems ( item , practitioner ) ; src.item as item where (linkId.value = 'receiverCopy.practitionerRole.organization') -> bundle.entry as e3 , e3.resource = create ( 'Organization' ) as organization , organization.id = uuid ( ) as uuid3 , practitionerRole.organization = create ( 'Reference' ) as reference , reference.reference = append ( 'urn:uuid:' , uuid3 ) , e3.fullUrl = append ( 'urn:uuid:' , uuid3 ) then ReceiverCopyOrganizationItems ( item , organization ) ; } group ExtOrfCopyReceiverPatient ( source src : BackboneElement, target patient : Patient, target ext : Extension ) { src -> ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-copyreceiver' "url" ; src -> ext.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %patient.id ) "patient" ; } group ExtOrfCopyReceiver ( source src : BackboneElement, target res , target ext : Extension ) { src -> ext.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-copyreceiver' "url" ; src -> ext.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %res.id ) "organization" ; } group ReceiverCopy ( source grp : BackboneElement, target bundle : Bundle, target patient : Patient, target composition : Composition, target serviceRequest : ServiceRequest ) { grp.item as item where (linkId = 'receiverCopy.practitionerRole') -> bundle.entry as e4 , e4.resource = create ( 'PractitionerRole' ) as practitionerrole , composition.extension as extension , practitionerrole.id = uuid ( ) as uuid4 , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) then { item then ReceiverCopyPractitionerRoleItems ( item , bundle , practitionerrole ) "data" ; item then ExtOrfCopyReceiver ( item , practitionerrole , extension ) "extension" ; } "receiverCopyPractitionerRole1" ; grp.item as item where (linkId = 'receiverCopy.patient') -> composition.extension as extension then { item then ExtOrfCopyReceiver ( item , patient , extension ) "extension" ; } "receiverCopyPractitionerRole2" ; grp.item as item where (linkId = 'receiverCopy.relatedPerson') -> bundle.entry as e4 , e4.resource = create ( 'RelatedPerson' ) as relatedPerson , composition.extension as extension , relatedPerson.id = uuid ( ) as uuid4 , relatedPerson.patient as reference , reference.reference = ( 'urn:uuid:' + %patient.id ) , e4.fullUrl = append ( 'urn:uuid:' , uuid4 ) then { item then ReceiverCopyRelatedPersonItems ( item , relatedPerson ) "data" ; item then ExtOrfCopyReceiver ( item , relatedPerson , extension ) "extension" ; } "receiverCopyPractitionerRole3" ; } group Appointment ( source grp : BackboneElement, target bundle : Bundle, target composition : Composition, target serviceRequest : ServiceRequest ) { grp.item -> bundle.entry as e4 , e4.resource = create ( 'Appointment' ) as appointment , appointment.id = uuid ( ) as uuid4 , e4.fullUrl = ( 'urn:uuid:' + %uuid4 ) , serviceRequest.extension as extension , extension.url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-locationandtime' , extension.value = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %uuid4 ) then { grp.item as item where ((linkId.value = 'appointment.status') and (answer.value.code = 'proposed')) -> appointment.status = ( item.answer.value.code ) then { grp.item as itemp where (linkId.value = 'appointment.requestedPeriod') then { itemp.item as item2 where ((linkId.value = 'appointment.requestedPeriod.start') and answer.exists()) -> appointment.requestedPeriod as requestedPeriod , requestedPeriod.start = ( item2.answer.value ) , requestedPeriod.end = ( item2.answer.value ) then { itemp.item as item3 where ((linkId.value = 'appointment.requestedPeriod.end') and answer.exists()) -> requestedPeriod.end = ( item3.answer.value ) "start" ; } "start" ; } "requestedPeriod" ; } "proposed" ; grp.item as item where ((linkId.value = 'appointment.status') and ((answer.value.code = 'pending') or (answer.value.code = 'booked'))) -> appointment.status = ( item.answer.value.code ) then { grp.item as itemp where (linkId.value = 'appointment.requestedPeriod') then { itemp.item as item2 where ((linkId.value = 'appointment.requestedPeriod.start') and answer.exists()) -> appointment.start = ( item2.answer.value ) , appointment.end = ( item2.answer.value ) then { itemp.item as item3 where ((linkId.value = 'appointment.requestedPeriod.end') and answer.exists()) -> appointment.end = ( item3.answer.value ) "start" ; } "start" ; } "startend" ; } "pendingorbooked" ; grp.item as item where ((linkId.value = 'appointment.patientInstruction') and answer.exists()) -> appointment.patientInstruction = ( item.answer.value ) "patientInstruction" ; grp.item as item where (linkId.value = 'appointment.location') then { item -> bundle.entry as e5 , e5.resource = create ( 'Location' ) as location , location.id = uuid ( ) as uuid5 , e5.fullUrl = ( 'urn:uuid:' + %uuid5 ) , appointment.participant as participant , participant.status = 'tentative' , participant.actor = create ( 'Reference' ) as actor , actor.reference = ( 'urn:uuid:' + %location.id ) then { item.item as item3 where ((linkId.value = 'appointment.location.name') and answer.exists()) -> location.name = ( item3.answer.value ) ; item.item as item3 where ((linkId.value = 'appointment.location.phone') and answer.exists()) -> location.telecom as value , value.system = 'phone' , value.value = ( item3.answer.value ) "phone" ; item.item as item3 where ((linkId.value = 'appointment.location.email') and answer.exists()) -> location.telecom as value , value.system = 'email' , value.value = ( item3.answer.value ) "email" ; item.item as item3 where ((linkId.value = 'appointment.location.streetAddressLine') and answer.exists()) -> location.address as address share orgAddress then { item.answer as answer -> address.line = ( answer.value ) "line" ; } "streetAddressLine" ; item.item as item3 where ((linkId.value = 'appointment.location.postalCode') and answer.exists()) -> location.address as address share orgAddress , address.postalCode = ( item3.answer.value ) "postalCode" ; item.item as item3 where ((linkId.value = 'appointment.location.city') and answer.exists()) -> location.address as address share orgAddress , address.city = ( item3.answer.value ) "city" ; item.item as item3 where ((linkId.value = 'appointment.location.country') and answer.exists()) -> location.address as address share orgAddress , address.country = ( item3.answer.value ) "country" ; } "location" ; } "location" ; } "Appointment" ; } group PreviousResults ( source grp : BackboneElement, target bundle : Bundle, target serviceRequest : ServiceRequest ) { grp.item as item where ((linkId = 'previousResults.attachment') and answer.exists()) then { item.answer as answer then { answer.value : Attachment as attachment -> bundle.entry as e , e.resource = create ( 'Media' ) as media , media.id = uuid ( ) as uuid , media.status = 'completed' , e.fullUrl = append ( 'urn:uuid:' , uuid ) , media.content = attachment , serviceRequest.supportingInfo as supportingInfo , supportingInfo.reference = ( 'urn:uuid:' + uuid ) "media" ; } ; } ; } group Note ( source grp : BackboneElement, target serviceRequest : ServiceRequest ) { grp.item as item where ((linkId = 'note.text') and answer.exists()) -> serviceRequest.note as note , note.text = ( item.answer.value ) "text" ; } group QrToBundle ( source qr : QuestionnaireResponse, target q : Questionnaire, target patient : Patient, target questionnaireresp : QuestionnaireResponseTarget, target servicerequest : ServiceRequest, target composition : Composition, target bundle : Bundle ) { qr -> bundle.id = uuid ( ) "id" ; qr -> bundle.type = 'document' "type" ; qr then OrfComposition ( qr , q , composition , patient , questionnaireresp , servicerequest , bundle ) "composition" ; qr then QrToGroups ( qr , patient , bundle , composition , servicerequest ) "qrgroups" ; } group OrfComposition ( source qr : QuestionnaireResponse, target q : Questionnaire, target tgt : Composition, target patient : Patient, target questionnaireresp : QuestionnaireResponseTarget, target servicerequest : ServiceRequest, target bundle : Bundle ) { qr -> tgt.status = 'final' "status" ; qr -> tgt.subject = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %patient.id ) "subject" ; qr -> tgt.section as tgtSection , tgtSection.title = 'Order-Referral' , tgtSection.code as code , code.coding as coding , coding.system = 'http://loinc.org' , coding.code = '93037-0' , coding.display = 'Portable medical order form' , tgtSection.entry = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %questionnaireresp.id ) , tgtSection.entry = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %servicerequest.id ) , tgtSection.entry = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %q.id ) "sections" ; qr -> servicerequest.status = 'active' , servicerequest.intent = 'order' , servicerequest.subject = create ( 'Reference' ) as reference , reference.reference = ( 'urn:uuid:' + %patient.id ) "servicerequest" ; }
Produced 08 Sep 2023