StructureMap-OrfQrToBundle

Sourcech.fhir.ig.ch-orf#current:CH ORF (R4) (v4.0.1)
resourceTypeStructureMap
idOrfQrToBundle
canonicalhttp://fhir.ch/ig/ch-orf/StructureMap/OrfQrToBundle
version2.0.0-ballot
statusdraft
publisherHL7 Switzerland
nameOrfQrToBundle
date2023-06-29T19:28:25+00:00
copyrightCC0-1.0
jurisdictionsch
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