CH ORF (R4)
0.10.0 - STU 1 Ballot
This page is part of the CH ORF (R4) (v0.10.0: STU 1) based on FHIR (HL7® FHIR® Standard) R4. The current version which supersedes this version is 3.0.2. For a full list of available versions, see the Directory of published versions
map "http://fhir.ch/ig/ch-orf/StructureMap/OrfBundleToQr" = "OrfBundleToQr"
// ORF Bundle To QuestionnaireResonse
// Bundle: http://build.fhir.org/ig/hl7ch/ch-orf/StructureDefinition-ch-orf-document.html
// QRF Questionnaire Response: http://build.fhir.org/ig/hl7ch/ch-orf/QuestionnaireResponse-referral-min.xml.html
uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as source
uses "http://hl7.org/fhir/StructureDefinition/Composition" alias Composition as source
uses "http://hl7.org/fhir/StructureDefinition/Patient" alias Patient as source
uses "http://hl7.org/fhir/StructureDefinition/Organization" alias Organization as source
uses "http://hl7.org/fhir/StructureDefinition/Practitioner" alias Practitioner as source
uses "http://hl7.org/fhir/StructureDefinition/PractitionerRole" alias PractitionerRole as source
uses "http://hl7.org/fhir/StructureDefinition/ServiceRequest" alias ServiceRequest as source
uses "http://hl7.org/fhir/StructureDefinition/BackboneElement" alias BackboneElement as source
uses "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse" alias QuestionnaireResponse as target
group OrfBundleToQr(source bundle : Bundle, target qr : QuestionnaireResponse) {
bundle -> qr.questionnaire = 'http://fhir.ch/ig/ch-orf/Questionnaire/order-referral-form' "questionnaire";
bundle -> qr.status = 'completed' "status";
bundle.entry first as entry then {
entry.resource as composition then {
composition.section as section then {
bundle.entry as entry then {
entry.fullUrl where ($this in %section.entry.reference) and $this.startsWith('urn:uuid') then {
entry.resource : ServiceRequest as serviceRequest then CompositionToQr(bundle, composition, serviceRequest, qr) "servicerequest";
} "fullUrlAsUuid";
entry.resource : ServiceRequest as serviceRequest where ('ServiceRequest' + '/' + $this.id) in %section.entry.reference then CompositionToQr(bundle, composition, serviceRequest, qr) "servicerequest";
};
};
};
};
}
group CompositionToQr(source bundle : Bundle, source composition : Composition, source serviceRequest : ServiceRequest, target qr : QuestionnaireResponse) {
composition -> qr.item as item, item.linkId = 'order' then OrderToQr(bundle, composition, serviceRequest, item) "order";
composition.extension as ext where url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-receiver' -> qr.item as item, item.linkId = 'receiver' then ReceiverToQr(bundle, serviceRequest, ext, item) "receiver";
composition.subject -> qr.item as item, item.linkId = 'patient' then PatientToQr(bundle, composition, serviceRequest, item) "patient";
serviceRequest.extension as ext where url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-requestedencounterdetails' -> qr.item as item, item.linkId = 'requestedEncounter' then RequestedEncounterDetailsToQr(bundle, ext, item) "requestedEncounter";
serviceRequest.insurance first as insurance -> qr.item as item, item.linkId = 'coverage' then CoverageToQr(bundle, composition, serviceRequest, item) "requestedEncounter";
composition.author -> qr.item as item, item.linkId = 'sender' then SenderToQr(bundle, composition, serviceRequest, item) "sender";
composition.extension first as extension where (url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-copyreceiver') -> qr.item as item, item.linkId = 'receiverCopies' then ReceiverCopyToQr(bundle, composition, serviceRequest, item) "receiverCopies";
serviceRequest.extension as ext where url = 'ch-orf-locationandtime' -> qr.item as item, item.linkId = 'appointment' then AppointmentDetailsToQr(bundle, ext, item) "apopintments";
serviceRequest.note first as note -> qr.item as item, item.linkId = 'note' then NoteToQr(serviceRequest, item);
}
group OrderToQr(source bundle : Bundle, source composition : Composition, source serviceRequest : ServiceRequest, target item : BackboneElement) {
// <linkId value="order.title" />
composition.title as title -> item.item as itemfirst, itemfirst.linkId = 'order.title', itemfirst.answer as answer, answer.value = title;
// <linkId value="order.type" />
composition.type as comptype then {
comptype.coding as coding -> item.item as itemfirst, itemfirst.linkId = 'order.type', itemfirst.answer as answer, answer.value = coding "type";
} "CodeableConceptType";
// <linkId value="order.category" />
composition.category as compcat then {
compcat.coding as coding -> item.item as itemfirst, itemfirst.linkId = 'order.category', itemfirst.answer as answer, answer.value = coding "category";
} "CodeableConceptType";
// <linkId value="order.placerOrderIdentifierDomain" />
serviceRequest.identifier as identifier where (type.coding.where((system.value = 'http://terminology.hl7.org/CodeSystem/v2-0203') and (code.value = 'PLAC'))) -> item.item as itemfirst, itemfirst.linkId = 'order.placerOrderIdentifier', itemfirst.answer as answer, answer.value = (identifier.value) then {
identifier.system as system -> item.item as itemsecond, itemsecond.linkId = 'order.placerOrderIdentifierDomain', itemsecond.answer as answer, answer.value = cast(system, 'string') "placerOrderIdentifierDomain";
} "placerOrderIdentifierDomain";
// <linkId value="order.fillerOrderIdentifier" />
serviceRequest.identifier as identifier where (type.coding.where((system.value = 'http://terminology.hl7.org/CodeSystem/v2-0203') and (code.value = 'FILL'))) -> item.item as itemfirst, itemfirst.linkId = 'order.fillerOrderIdentifier', itemfirst.answer as answer, answer.value = (identifier.value) then {
identifier.system as system -> item.item as itemsecond, itemsecond.linkId = 'order.fillerOrderIdentifierDomain', itemsecond.answer as answer, answer.value = cast(system, 'string') "fillerOrderIdentifier";
} "fillerOrderIdentifierDomain";
// <linkId value="order.precedentDocumentIdentifier" />
composition.extension as extension where url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-precedentdocument' then {
extension.value as value where value.startsWith('urn:uuid:') -> item.item as item, item.linkId = 'order.precedentDocumentIdentifier', item.answer as answer, answer.value = (value.value.substring(9)) "precedentDocumentIdentifier";
} "composition";
// 'order.dateTime'- currently not mapped in qr response
composition.extension as extension where url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-urgentnoficationcontactforthisdocument' then {
extension.value as value then {
bundle.entry as entry then {
entry.fullUrl where ($this in %value.reference) and $this.startsWith('urn:uuid') then {
entry.resource : PractitionerRole as practitionerRole then UrgentNotificationToQr(bundle, composition, practitionerRole, item) "practitionerRole";
} "fullUrlAsUuid";
entry.resource : PractitionerRole as practitionerRole where ('PractitionerRole' + '/' + $this.id) in %value.reference then UrgentNotificationToQr(bundle, composition, practitionerRole, item) "practitionerRole";
};
};
} "composition";
// Urgent Notification Contact for the Response to this document
composition.extension as extension where url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-urgentnoficationcontactfortheresponsetothisdocument' then {
extension.value as value then {
bundle.entry as entry then {
entry.fullUrl where ($this in %value.reference) and $this.startsWith('urn:uuid') then {
entry.resource : PractitionerRole as practitionerRole then UrgentNotificationResponseToQr(bundle, composition, practitionerRole, item) "practitionerRole";
} "fullUrlAsUuid";
entry.resource : PractitionerRole as practitionerRole where ('PractitionerRole' + '/' + $this.id) in %value.reference then UrgentNotificationResponseToQr(bundle, composition, practitionerRole, item) "practitionerRole";
};
};
} "composition";
// order.priority
serviceRequest.priority as priority -> item.item as item, item.linkId = 'order.priority', item.answer as answer, answer.value = create('Coding') as coding, coding.system = 'http://hl7.org/fhir/request-priority', coding.code = priority;
}
group UrgentNotificationToQr(source bundle : Bundle, source composition : Composition, source practitionerRole : PractitionerRole, target item : BackboneElement) {
composition -> item.item as itemgroup, itemgroup.linkId = 'order.notificationContactDocument', itemgroup.item as item, item.linkId = 'order.notificationContactDocument.practitioner' then {
practitionerRole.practitioner as practitioner then {
bundle.entry as entry then {
entry.fullUrl where ($this in %practitioner.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Practitioner as practitioner then UrgentNotificationPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : Practitioner as practitioner where ('Practitioner' + '/' + $this.id) in %practitioner.reference then UrgentNotificationPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
};
};
} "urgentnotification";
}
group UrgentNotificationPractitionerToQr(source bundle : Bundle, source composition : Composition, source practitioner : Practitioner, target item : BackboneElement) {
practitioner.name as name then {
// order.notificationContactDocument.practitioner.title
name.prefix as prefix where (extension.where((url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier') and (valueCode = 'AC'))) -> item.item as item, item.linkId = 'order.notificationContactDocument.practitioner.title', item.answer as answer, answer.value = prefix;
// order.notificationContactDocument.practitioner.familyName
name.family as family -> item.item as item, item.linkId = 'order.notificationContactDocument.practitioner.familyName', item.answer as answer, answer.value = family;
// order.notificationContactDocument.practitioner.givenName
name.given as given -> item.item as item, item.linkId = 'order.notificationContactDocument.practitioner.givenName', item.answer as answer, answer.value = given;
};
// order.notificationContactDocument.practitioner.phone
practitioner.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'order.notificationContactDocument.practitioner.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// order.notificationContactDocument.practitioner.memaol
practitioner.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'order.notificationContactDocument.practitioner.email', item.answer as answer, answer.value = (telecom.value) "email";
}
group UrgentNotificationResponseToQr(source bundle : Bundle, source composition : Composition, source practitionerRole : PractitionerRole, target item : BackboneElement) {
// order.notificationContactDocumentResponse
composition -> item.item as itemgroup, itemgroup.linkId = 'order.notificationContactDocumentResponse', itemgroup.item as item, item.linkId = 'order.notificationContactDocumentResponse.practitioner' then {
practitionerRole.practitioner as practitioner then {
bundle.entry as entry then {
entry.fullUrl where ($this in %practitioner.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Practitioner as practitioner then UrgentNotificationResponsePractitionerToQr(bundle, composition, practitioner, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : Practitioner as practitioner where ('Practitioner' + '/' + $this.id) in %practitioner.reference then UrgentNotificationResponsePractitionerToQr(bundle, composition, practitioner, item) "practitioner";
};
};
} "urgentnotification";
}
group UrgentNotificationResponsePractitionerToQr(source bundle : Bundle, source composition : Composition, source practitioner : Practitioner, target item : BackboneElement) {
practitioner.name as name then {
// order.notificationContactDocumentResponse.practitioner.title
name.prefix as prefix where (extension.where((url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier') and (valueCode = 'AC'))) -> item.item as item, item.linkId = 'order.notificationContactDocumentResponse.practitioner.title', item.answer as answer, answer.value = prefix;
// order.notificationContactDocumentResponse.practitioner.familyName
name.family as family -> item.item as item, item.linkId = 'order.notificationContactDocumentResponse.practitioner.familyName', item.answer as answer, answer.value = family;
// order.notificationContactDocumentResponse.practitioner.givenName
name.given as given -> item.item as item, item.linkId = 'order.notificationContactDocumentResponse.practitioner.givenName', item.answer as answer, answer.value = given;
};
// order.notificationContactDocumentResponse.practitioner.phone
practitioner.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'order.notificationContactDocumentResponse.practitioner.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// order.notificationContactDocumentResponse.practitioner.memaol
practitioner.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'order.notificationContactDocumentResponse.practitioner.email', item.answer as answer, answer.value = (telecom.value) "email";
}
group ReceiverToQr(source bundle : Bundle, source composition : Composition, source ext : Extension, target item : BackboneElement) {
bundle.entry as entry then {
entry.fullUrl where ($this in %ext.valueReference.reference) and $this.startsWith('urn:uuid') then {
entry.resource : PractitionerRole as practitionerRole then ReceiverPractitionerRoleToQr(bundle, composition, practitionerRole, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : PractitionerRoler as practitionerRole where ('PractitionerRole' + '/' + $this.id) in %ext.valueReference.reference then ReceiverPractitionerRoleToQr(bundle, composition, practitionerRole, item) "practitioner";
};
}
group ReceiverPractitionerRoleToQr(source bundle : Bundle, source composition : Composition, source practitionerRole : PractitionerRole, target itemgroup : BackboneElement) {
practitionerRole.practitioner as practitioner -> itemgroup.item as item, item.linkId = 'receiver.practitioner' then {
bundle.entry as entry then {
entry.fullUrl where ($this in %practitioner.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Practitioner as practitioner then ReceiverPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : Practitioner as practitioner where ('Practitioner' + '/' + $this.id) in %practitioner.reference then ReceiverPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
};
};
practitionerRole.organization as organization -> itemgroup.item as item, item.linkId = 'receiver.organization' then {
bundle.entry as entry then {
entry.fullUrl where ($this in %organization.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Organization as organization then ReceiverOrganizationToQr(bundle, composition, organization, item) "organization";
} "fullUrlAsUuid";
entry.resource : Organization as organization where ('Organization' + '/' + $this.id) in %organization.reference then ReceiverOrganizationToQr(bundle, composition, practitioner, item) "organization";
};
};
}
group ReceiverPractitionerToQr(source bundle : Bundle, source composition : Composition, source practitioner : Practitioner, target item : BackboneElement) {
practitioner.name as name then {
// receiver.practitioner.title
name.prefix as prefix where (extension.where((url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier') and (valueCode = 'AC'))) -> item.item as item, item.linkId = 'receiver.practitioner.title', item.answer as answer, answer.value = prefix;
// receiver.practitioner.familyName
name.family as family -> item.item as item, item.linkId = 'receiver.practitioner.familyName', item.answer as answer, answer.value = family;
// receiver.practitioner.givenName
name.given as given -> item.item as item, item.linkId = 'receiver.practitioner.givenName', item.answer as answer, answer.value = given;
};
// receiver.practitioner.gln
practitioner.identifier as identifier where (system = 'urn:oid:2.51.1.3') then {
identifier.value as value -> item.item as item, item.linkId = 'receiver.practitioner.gln', item.answer as answer, answer.value = cast(value, 'string') "gln";
};
// receiver.practitioner.phone
practitioner.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'receiver.practitioner.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// receiver.practitioneremail
practitioner.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'receiver.practitioner.email', item.answer as answer, answer.value = (telecom.value) "email";
}
group ReceiverOrganizationToQr(source bundle : Bundle, source composition : Composition, source organization : Organization, target item : BackboneElement) {
// receiver.organization.name
organization.name as name -> item.item as item, item.linkId = 'receiver.organization.name', item.answer as answer, answer.value = name;
// receiver.organization.streetAddressLine
organization.address as addr then {
addr.line first as line1 -> item.item as item, item.linkId = 'receiver.organization.streetAddressLine' then {
addr.line as line -> item.answer as answer, answer.value = line;
} "addrlinefirst";
// receiver.organization.postalCode
addr.postalCode as postalCode -> item.item as item, item.linkId = 'receiver.organization.postalCode', item.answer as answer, answer.value = postalCode;
// receiver.organization.city
addr.city as city -> item.item as item, item.linkId = 'receiver.organization.city', item.answer as answer, answer.value = city;
// receiver.organization.country
addr.country as country -> item.item as item, item.linkId = 'receiver.organization.country', item.answer as answer, answer.value = country;
} "addr";
}
group PatientToQr(source bundle : Bundle, source composition : Composition, source serviceRequest : ServiceRequest, target item : BackboneElement) {
composition.subject as subject then {
bundle.entry as entry then {
entry.fullUrl where ($this in %subject.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Patient as patient then PatientDetailsToQr(bundle, composition, patient, item) "patient";
} "fullUrlAsUuid";
entry.resource : Patient as patient where ('Patient' + '/' + $this.id) in %subject.reference then PatientDetailsToQr(bundle, composition, patient, item) "patient";
};
} "practitioner";
}
group PatientDetailsToQr(source bundle : Bundle, source composition : Composition, source patient : Patient, target item : BackboneElement) {
// patient.familyName
patient.name as name where (use.empty() or (use = 'official')) then {
name.family as family -> item.item as item, item.linkId = 'patient.familyName', item.answer as answer, answer.value = family;
} "familyName";
patient.name as name where use = 'maiden' then {
name.family as family -> item.item as item, item.linkId = 'patient.maidenName', item.answer as answer, answer.value = family "maidenName";
} "maidenName";
patient.name as name where (use.empty() or (use = 'official')) then {
// patient.givenName
name.given as given -> item.item as item, item.linkId = 'patient.givenName', item.answer as answer, answer.value = given;
} "givenName";
// patient.localPid
patient.identifier as identifier where (type.coding.where((system.value = 'http://terminology.hl7.org/CodeSystem/v2-0203') and (code.value = 'MR'))) -> item.item as item1, item1.linkId = 'patient.localPid', item1.answer as answer, answer.value = (identifier.value) then {
identifier.system as system -> item.item as item2, item2.linkId = 'patient.localPidDomain', item2.answer as answer, answer.value = cast(system, 'string') "placerOrderIdentifierDomain";
} "localPid";
// patient.birthDate
patient.birthDate as birthDate -> item.item as item, item.linkId = 'patient.birthDate', item.answer as answer, answer.value = birthDate;
// patient.gender
patient.gender as gender -> item.item as item, item.linkId = 'patient.gender', item.answer as answer, answer.value = create('Coding') as coding, coding.system = 'http://hl7.org/fhir/administrative-gender', coding.code = gender;
// patient.phone
patient.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'patient.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// patient.email
patient.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'patient.email', item.answer as answer, answer.value = (telecom.value) "email";
patient.address as addr then {
addr.line first as line1 -> item.item as item, item.linkId = 'patient.streetAddressLine' then {
addr.line as line -> item.answer as answer, answer.value = line;
} "addrlinefirst";
// patient.postalCode
addr.postalCode as postalCode -> item.item as item, item.linkId = 'patient.postalCode', item.answer as answer, answer.value = postalCode;
// patient.city
addr.city as city -> item.item as item, item.linkId = 'patient.city', item.answer as answer, answer.value = city;
// patient.country
addr.country as country -> item.item as item, item.linkId = 'patient.country', item.answer as answer, answer.value = country;
} "addr";
// patient.contactperson
patient.contact as contact -> item.item as item, item.linkId = 'patient.contactperson' then {
// patient.contactperson.relationship
contact.relationship as relationship then {
relationship.text as text -> item.item as item, item.linkId = 'patient.contactperson.relationship', item.answer as answer, answer.value = text "relationship";
};
contact.name as name then {
// patient.contactperson.familyName
name.family as family -> item.item as item, item.linkId = 'patient.contactperson.familyName', item.answer as answer, answer.value = family "familyName";
// patient.contactperson.givenName
name.given as given -> item.item as item, item.linkId = 'patient.contactperson.givenName', item.answer as answer, answer.value = given "givenName";
};
// patient.contactperson.phone
contact.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'patient.contactperson.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// patient.contactperson.email
contact.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'patient.contactperson.email', item.answer as answer, answer.value = (telecom.value) "email";
};
}
group RequestedEncounterDetailsToQr(source bundle : Bundle, source ext : Extension, target item : BackboneElement) {
bundle.entry as entry then {
entry.fullUrl where ($this in %ext.valueReference.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Encounter as encounter then EncounterToQr(encounter, item) "encounter";
} "fullUrlAsUuid";
entry.resource : Encounter as encounter where ('Encounter' + '/' + $this.id) in %ext.valueReference.reference then EncounterToQr(encounter, item) "encounter";
};
}
group EncounterToQr(source encounter : Encounter, target item : BackboneElement) {
// requestedEncounter.class
encounter.class as class -> item.item as item, item.linkId = 'requestedEncounter.class', item.answer as answer, answer.value = class;
// requestedEncounter.desiredAccommodation
encounter.extension as extension where url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-desiredaccommodation' then {
extension.value as value -> item.item as item, item.linkId = 'requestedEncounter.desiredAccommodation', item.answer as answer, answer.value = value "desiredAccommodation";
} "desiredAccommodation";
}
group AppointmentDetailsToQr(source bundle : Bundle, source ext : Extension, target item : BackboneElement) {
bundle.entry as entry then {
entry.fullUrl where ($this in %ext.valueReference.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Appointment as appointment then AppointmentToQr(appointment, item) "appointment";
} "fullUrlAsUuid";
entry.resource : Appointment as appointment where ('Appointment' + '/' + $this.id) in %ext.valueReference.reference then AppointmentToQr(appointment, item) "encounter";
};
}
group LocationToQr(source loc : Locaton, target item : BackboneElement) {
loc -> item.item as item, item.linkId = 'appointment.location' then {
// appointment.location.name
location.name as name -> item.item as itemloc, itemloc.linkId = 'appointment.location.name', answer.value = name;
// appointment.location.phone
location.telecom as telecom where system = 'phone' -> item.item as itemloc, itemloc.linkId = 'appointment.location.phone', answer.value = (%telecom.value) "phone";
// appointment.location.email
location.telecom as telecom where system = 'email' -> item.item as itemloc, itemloc.linkId = 'appointment.location.email', answer.value = (%telecom.value) "email";
location.addr as addr then {
// appointment.location.streetAddressLine
addr.streetAddressLine as line -> item.item as itemloc, itemloc.linkId = 'appointment.location.streetAddressLine', answer.value = line;
// appointment.location.postalCode
addr.postalCode as postalCode -> item.item as itemloc, itemloc.linkId = 'appointment.location.postalCode', answer.value = postalCode;
// appointment.location.city
addr.city as city -> item.item as itemloc, itemloc.linkId = 'appointment.location.city', answer.value = city;
// appointment.location.country
addr.country as country -> item.item as itemloc, itemloc.linkId = 'appointment.location.country', answer.value = country;
};
} "location";
}
group AppointmentToQr(source app : Appointment, target item : BackboneElement) {
// appointment.location
app.participant as particiapnt then {
bundle.entry as entry then {
entry.fullUrl where ($this in %participant.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Location as location then LocationToQr(location, item) "location";
} "fullUrlAsUuid";
entry.resource : Location as location where ('Location' + '/' + $this.id) in %participant.reference then LocationToQr(location, item) "location";
};
};
// appointment.requestedPeriod
app.requestedPeriod as requestedPeriod -> item.item as item, item.linkId = 'appointment.requestedPeriod' then {
// appointment.requestedPeriod.start
requestedPeriod.start as start -> item.item as itemloc, itemloc.linkId = 'appointment.requestedPeriod.start', answer.value = start;
// appointment.requestedPeriod.end
requestedPeriod.end as end -> item.item as itemloc, itemloc.linkId = 'appointment.requestedPeriod.end', answer.value = end;
};
// appointment.status
app.status as status -> item.item as itemloc, itemloc.linkId = 'appointment.requestedPeriod.status', answer.value = status;
// appointment.patientInstruction
app.patientInstruction as patientInstruction -> item.item as itemloc, itemloc.linkId = 'appointment.patientInstruction', answer.value = patientInstruction;
}
group CoverageBeneficiary(source patient : Patient, target item : BackboneElement) {
patient.identifier as identifier where system = 'urn:oid:2.16.756.5.32' -> item.item as itemkvg, itemkvg.linkId = 'coverage.beneficiary', itemkvg.item as itemname, itemname.linkId = 'coverage.beneficiary.ahvn13', itemname.answer as answer, answer.value = (%identifier.value) "ahvn13";
}
group CoverageKvg(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.kvg', itemkvg.item as itemname, itemname.linkId = 'coverage.kvg.name', itemname.answer as answer, answer.value = (%coverage.contained.name), itemkvg.item as itemno, itemno.linkId = 'coverage.kvg.insuranceCardNumber', itemno.answer as answer, answer.value = (%coverage.identifier.value) "kvg";
}
group CoverageUvg(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.uvg', itemkvg.item as itemname, itemname.linkId = 'coverage.uvg.name', itemname.answer as answer, answer.value = (%coverage.contained.name), itemkvg.item as itemno, itemno.linkId = 'coverage.uvg.claimNumber', itemno.answer as answer, answer.value = (%coverage.identifier.value) "uvg";
}
group CoverageVvg(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.vvg', itemkvg.item as itemname, itemname.linkId = 'coverage.vvg.name', itemname.answer as answer, answer.value = (%coverage.contained.name), itemkvg.item as itemno, itemno.linkId = 'coverage.vvg.insuranceCardNumber', itemno.answer as answer, answer.value = (%coverage.identifier.value) "vvg";
}
group CoverageIvg(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.iv', itemkvg.item as itemno, itemno.linkId = 'coverage.iv.verfuegungsnummer', itemno.answer as answer, answer.value = (%coverage.identifier.value) "iv";
}
group CoverageMvg(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.mv', itemkvg.item as itemno, itemno.linkId = 'coverage.mv.versichertennummer', itemno.answer as answer, answer.value = (%coverage.identifier.value) "mv";
}
group CoverageSelf(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.self', itemkvg.item as itemname, itemname.linkId = 'coverage.self.familyName', itemname.answer as answer, answer.value = (%coverage.contained.name.family), itemkvg.item as itemno, itemno.linkId = 'coverage.self.givenName', itemno.answer as answer, answer.value = (%coverage.contained.name.given) "uvg";
}
group CoverageOther(source coverage : Coverage, target item : BackboneElement) {
coverage -> item.item as itemkvg, itemkvg.linkId = 'coverage.other', itemkvg.item as itemname, itemname.linkId = 'coverage.other.name', itemname.answer as answer, answer.value = (%coverage.contained.name), itemkvg.item as itemno, itemno.linkId = 'coverage.other.id', itemno.answer as answer, answer.value = (%coverage.identifier.value) "uvg";
}
group CoverageToQr(source bundle : Bundle, source composition : Composition, source serviceRequest : ServiceRequest, target item : BackboneElement) {
composition.subject as subject then {
bundle.entry as entry then {
entry.fullUrl where ($this in %subject.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Patient as patient then CoverageBeneficiary(patient, item) "patient";
} "fullUrlAsUuid";
entry.resource : Patient as patient where ('Patient' + '/' + $this.id) in %subject.reference then CoverageBeneficiary(patient, item) "patient";
};
} "practitioner";
bundle.entry as entry then {
entry.fullUrl where ($this in %serviceRequest.insurance.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Coverage as coverage where (type.coding.code = 'KVG') then CoverageKvg(coverage, item) "coveragekvg";
entry.resource : Coverage as coverage where (type.coding.code = 'UVG') then CoverageUvg(coverage, item) "coverageuvg";
entry.resource : Coverage as coverage where (type.coding.code = 'VVG') then CoverageVvg(coverage, item) "coverageVvg";
entry.resource : Coverage as coverage where (type.coding.code = 'IVG') then CoverageIvg(coverage, item) "coverageVvg";
entry.resource : Coverage as coverage where (type.coding.code = 'MVG') then CoverageMvg(coverage, item) "coverageVvg";
entry.resource : Coverage as coverage where (type.coding.code = 'Self') then CoverageSelf(coverage, item) "coverageSelf";
entry.resource : Coverage as coverage where (type.coding.code = 'Other') then CoverageOther(coverage, item) "coverageOth4r";
} "fullUrlAsUuid";
entry.resource : Coverage as coverage where (type.coding.code = 'KVG') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageKvg(coverage, item) "coveragekvg";
entry.resource : Coverage as coverage where (type.coding.code = 'UVG') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageUvg(coverage, item) "coverageuvg";
entry.resource : Coverage as coverage where (type.coding.code = 'VVG') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageVvg(coverage, item) "coverageuvg";
entry.resource : Coverage as coverage where (type.coding.code = 'IVG') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageIvg(coverage, item) "coverageivg";
entry.resource : Coverage as coverage where (type.coding.code = 'MVG') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageMvg(coverage, item) "coveragemvg";
entry.resource : Coverage as coverage where (type.coding.code = 'Self') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageSelf(coverage, item) "coverageself";
entry.resource : Coverage as coverage where (type.coding.code = 'Other') and (('Coverage' + '/' + $this.id) in %serviceRequest.insurance.reference) then CoverageOther(coverage, item) "coverageother";
};
}
group SenderToQr(source bundle : Bundle, source composition : Composition, source serviceRequest : ServiceRequest, target item : BackboneElement) {
composition.author as author then {
bundle.entry as entry then {
entry.fullUrl where ($this in %author.reference) and $this.startsWith('urn:uuid') then {
entry.resource : PractitionerRole as practitionerRole then SenderPractitionerRoleToQr(bundle, composition, practitionerRole, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : PractitionerRoler as practitionerRole where ('PractitionerRole' + '/' + $this.id) in %author.reference then SenderPractitionerRoleToQr(bundle, composition, practitionerRole, item) "practitioner";
};
};
composition.extension as ext where (url = 'http://fhir.ch/ig/ch-core/StructureDefinition/ch-ext-epr-dataenterer') then {
ext.extension as extension where (url = 'enterer') then {
extension.value as value then {
bundle.entry as entry then {
entry.fullUrl where ($this in %value.reference) and $this.startsWith('urn:uuid') then {
entry.resource : PractitionerRole as practitionerRole then DataEntererPractitionerRoleToQr(bundle, composition, practitionerRole, item) "practitionerRole";
} "fullUrlAsUuid";
entry.resource : PractitionerRole as practitionerRole where ('PractitionerRole' + '/' + $this.id) in %value.reference then DataEntererPractitionerRoleToQr(bundle, composition, practitionerRole, item) "practitionerRole";
};
};
} "enterer";
} "dataenterer";
}
group SenderPractitionerRoleToQr(source bundle : Bundle, source composition : Composition, source practitionerRole : PractitionerRole, target itemsender : BackboneElement) {
composition -> itemsender.item as itemgroup, itemgroup.linkId = 'sender.author' then {
practitionerRole.practitioner as practitioner -> itemgroup.item as item, item.linkId = 'sender.author.practitioner' then {
bundle.entry as entry then {
entry.fullUrl where ($this in %practitioner.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Practitioner as practitioner then SenderPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : Practitioner as practitioner where ('Practitioner' + '/' + $this.id) in %practitioner.reference then SenderPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
};
};
practitionerRole.organization as organization -> itemgroup.item as item, item.linkId = 'sender.author.organization' then {
bundle.entry as entry then {
entry.fullUrl where ($this in %organization.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Organization as organization then SenderOrganizationToQr(bundle, composition, organization, item) "organization";
} "fullUrlAsUuid";
entry.resource : Organization as organization where ('Organization' + '/' + $this.id) in %organization.reference then SenderOrganizationToQr(bundle, composition, practitioner, item) "organization";
};
};
} "author";
}
group SenderPractitionerToQr(source bundle : Bundle, source composition : Composition, source practitioner : Practitioner, target item : BackboneElement) {
practitioner.name as name then {
// sender.author.practitioner.title
name.prefix as prefix where (extension.where((url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier') and (valueCode = 'AC'))) -> item.item as item, item.linkId = 'sender.author.practitioner.title', item.answer as answer, answer.value = prefix;
// sender.author.practitioner.familyName
name.family as family -> item.item as item, item.linkId = 'sender.author.practitioner.familyName', item.answer as answer, answer.value = family;
// sender.author.practitioner.givenName
name.given as given -> item.item as item, item.linkId = 'sender.author.practitioner.givenName', item.answer as answer, answer.value = given;
};
// sender.author.practitioner.gln
practitioner.identifier as identifier where (system = 'urn:oid:2.51.1.3') then {
identifier.value as value -> item.item as item, item.linkId = 'sender.author.practitioner.gln', item.answer as answer, answer.value = cast(value, 'string') "gln";
};
// sender.author.practitioner.phone
practitioner.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'sender.author.practitioner.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// sender.author.practitioneremila
practitioner.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'sender.author.practitioner.email', item.answer as answer, answer.value = (telecom.value) "email";
}
group SenderOrganizationToQr(source bundle : Bundle, source composition : Composition, source organization : Organization, target item : BackboneElement) {
// sender.author.organization.name
organization.name as name -> item.item as item, item.linkId = 'sender.author.organization.name', item.answer as answer, answer.value = name;
// sender.author.organization.streetAddressLine
organization.address as addr then {
addr.line first as line1 -> item.item as item, item.linkId = 'sender.author.organization.streetAddressLine' then {
addr.line as line -> item.answer as answer, answer.value = line;
} "addrlinefirst";
// sender.author.organization.postalCode
addr.postalCode as postalCode -> item.item as item, item.linkId = 'sender.author.organization.postalCode', item.answer as answer, answer.value = postalCode;
// sender.author.organization.city
addr.city as city -> item.item as item, item.linkId = 'sender.author.organization.city', item.answer as answer, answer.value = city;
// sender.author.organization.country
addr.country as country -> item.item as item, item.linkId = 'sender.author.organization.country', item.answer as answer, answer.value = country;
} "addr";
}
group DataEntererPractitionerRoleToQr(source bundle : Bundle, source composition : Composition, source practitionerRole : PractitionerRole, target itemsender : BackboneElement) {
composition -> itemsender.item as itemgroup, itemgroup.linkId = 'sender.dataenterer' then {
practitionerRole.practitioner as practitioner -> itemgroup.item as item, item.linkId = 'sender.dataenterer.practitioner' then {
bundle.entry as entry then {
entry.fullUrl where ($this in %practitioner.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Practitioner as practitioner then DataEntererPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
} "fullUrlAsUuid";
entry.resource : Practitioner as practitioner where ('Practitioner' + '/' + $this.id) in %practitioner.reference then DataEntererPractitionerToQr(bundle, composition, practitioner, item) "practitioner";
};
};
} "dataenterer";
}
group DataEntererPractitionerToQr(source bundle : Bundle, source composition : Composition, source practitioner : Practitioner, target item : BackboneElement) {
// sender.dataenterer.practitioner.familyName
practitioner.name as name then {
name.family as family -> item.item as item, item.linkId = 'sender.dataenterer.practitioner.familyName', item.answer as answer, answer.value = family;
// sender.dataenterer.practitioner.givenName
name.given as given -> item.item as item, item.linkId = 'sender.dataenterer.practitioner.givenName', item.answer as answer, answer.value = given;
};
// sender.dataenterer.practitioner.phone
practitioner.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'sender.dataenterer.practitioner.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// sender.dataenterer.practitioner.email
practitioner.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'sender.dataenterer.practitioner.email', item.answer as answer, answer.value = (telecom.value) "email";
}
group ReceiverCopyToQr(source bundle : Bundle, source composition : Composition, source serviceRequest : ServiceRequest, target item : BackboneElement) {
composition.extension as extension where (url = 'http://fhir.ch/ig/ch-orf/StructureDefinition/ch-orf-copyreceiver') then {
extension.value as value then {
bundle.entry as entry then {
entry.fullUrl where ($this in %value.reference) and $this.startsWith('urn:uuid') then {
entry.resource : Organization as organization then ReceiverCopyOrganizationToQr(bundle, composition, organization, item) "organization";
entry.resource : Patient as patient then ReceiverCopyPatientToQr(bundle, composition, patient, item) "patient";
} "fullUrlAsUuid";
entry.resource : Organization as organization where ('Organization' + '/' + $this.id) in %value.reference then ReceiverCopyOrganizationToQr(bundle, composition, organization, item) "organization";
entry.resource : Patient as patient where ('Patient' + '/' + $this.id) in %value.reference then ReceiverCopyPatientToQr(bundle, composition, patient, item) "patient";
};
};
};
}
group ReceiverCopyOrganizationToQr(source bundle : Bundle, source composition : Composition, source organization : Organization, target itemsender : BackboneElement) {
organization -> itemsender.item as item, item.linkId = 'receiverCopy' then {
// receiverCopy.organization.name
organization.name as name -> item.item as item, item.linkId = 'receiverCopy.organization.name', item.answer as answer, answer.value = name;
organization.contact as contact then {
contact.name as name then {
// receiverCopy.title
name.prefix as prefix where (extension.where((url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier') and (valueCode = 'AC'))) -> item.item as item, item.linkId = 'receiverCopy.title', item.answer as answer, answer.value = prefix;
// receiverCopy.familyName
name.family as family -> item.item as item, item.linkId = 'receiverCopy.familyName', item.answer as answer, answer.value = family;
// receiverCopy.givenName
name.given as given -> item.item as item, item.linkId = 'receiverCopy.givenName', item.answer as answer, answer.value = given;
};
};
// receiverCopy.phone
organization.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'receiverCopy.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// receiverCopy.email
organization.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'receiverCopy.email', item.answer as answer, answer.value = (telecom.value) "email";
// receiverCopy.organization.streetAddressLine
organization.address as addr then {
addr.line first as line1 -> item.item as item, item.linkId = 'receiverCopy.streetAddressLine' then {
addr.line as line -> item.answer as answer, answer.value = line;
} "addrlinefirst";
// receiverCopy.postalCode
addr.postalCode as postalCode -> item.item as item, item.linkId = 'receiverCopy.postalCode', item.answer as answer, answer.value = postalCode;
// receiverCopy.city
addr.city as city -> item.item as item, item.linkId = 'receiverCopy.city', item.answer as answer, answer.value = city;
// receiverCopy.country
addr.country as country -> item.item as item, item.linkId = 'receiverCopy.country', item.answer as answer, answer.value = country;
} "addr";
} "organization";
}
group ReceiverCopyPatientToQr(source bundle : Bundle, source composition : Composition, source patient : Patient, target itemsender : BackboneElement) {
patient -> itemsender.item as item, item.linkId = 'receiverCopy' then {
patient.name as name then {
// receiverCopy.familyName
name.family as family -> item.item as item, item.linkId = 'receiverCopy.familyName', item.answer as answer, answer.value = family;
// receiverCopy.givenName
name.given as given -> item.item as item, item.linkId = 'receiverCopy.givenName', item.answer as answer, answer.value = given;
// receiverCopy.title
name.prefix as prefix where (extension.where((url = 'http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier') and (valueCode = 'AC'))) -> item.item as item, item.linkId = 'receiverCopy.title', item.answer as answer, answer.value = prefix;
};
// receiverCopy.phone
patient.telecom as telecom where (system = 'phone') -> item.item as item, item.linkId = 'receiverCopy.phone', item.answer as answer, answer.value = (telecom.value) "phone";
// receiverCopy.email
patient.telecom as telecom where (system = 'email') -> item.item as item, item.linkId = 'receiverCopy.email', item.answer as answer, answer.value = (telecom.value) "email";
// receiverCopy.organization.streetAddressLine
patient.address as addr then {
addr.line first as line1 -> item.item as item, item.linkId = 'receiverCopy.streetAddressLine' then {
addr.line as line -> item.answer as answer, answer.value = line;
} "addrlinefirst";
// receiverCopy.postalCode
addr.postalCode as postalCode -> item.item as item, item.linkId = 'receiverCopy.postalCode', item.answer as answer, answer.value = postalCode;
// receiverCopy.city
addr.city as city -> item.item as item, item.linkId = 'receiverCopy.city', item.answer as answer, answer.value = city;
// receiverCopy.country
addr.country as country -> item.item as item, item.linkId = 'receiverCopy.country', item.answer as answer, answer.value = country;
} "addr";
} "patient";
}
group NoteToQr(source serviceRequest : ServiceRequest, target item : BackboneElement) {
serviceRequest.note as note then {
note.text as text -> item.item as item, item.linkId = 'note.text', item.answer as answer, answer.value = cast(text, 'string');
};
}