FHIR © HL7.org  |  Server Home  |  XIG Home  |  XIG Stats  |  Server Source  |  FHIR  

FHIR IG Statistics: StructureMap/QuestionnairePopulationTransform

Packagehl7.fhir.uv.sdc
Resource TypeStructureMap
IdQuestionnairePopulationTransform
FHIR VersionR4
Sourcehttp://hl7.org/fhir/uv/sdc/https://build.fhir.org/ig/HL7/sdc/StructureMap-QuestionnairePopulationTransform.html
URLhttp://hl7.org/fhir/uv/sdc/StructureMap/QuestionnairePopulationTransform
Version4.0.0-ballot
Statusdraft
Date2025-07-14T18:38:59+00:00
NameQuestionnairePopulationTransform
Realmuv
Authorityhl7

Resources that use this resource

No resources found


Resources that this resource uses

No resources found


Narrative

Note: links and images are rebased to the (stated) source

/// name = "QuestionnairePopulationTransform"
/// status = "active"
/// title = "Questionnaire Population Transform Example"
/// description = "An example of a StructureMap used to support population of a QuestionnaireResponse from a search bundle"
/// experimental = "true"

map "http://hl7.org/fhir/uv/sdc/StructureMap/QuestionnairePopulationTransform" = "QuestionnairePopulationTransform"

uses 'http://hl7.org/fhir/StructureDefinition/Bundle' as source
uses 'http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse' as target
uses 'http://hl7.org/fhir/StructureDefinition/MedicationStatement' as source

// The input bundle is a search bundle that contains search bundles for patient, condition, and medication statement resources

group main(source src : Bundle, target qr : QuestionnaireResponse) {
  src -> qr.questionnaire = 'http://hl7.org/fhir/uv/sdc/Questionnaire/questionnaire-sdc-test-fhirpath-prepop-source-query' "questionnaire";
  src -> qr.status = 'in-progress' "status";
  src -> qr.authored = (now()) "authored";
  src.entry first as patient -> qr.subject as subject, subject.reference = (%patient.resource.entry.fullUrl.toString()) "subject";

  src -> qr.item as grp, grp.linkId = 'grp' then {
    src -> grp.item as partDetails, partDetails.linkId = 'part-details' then {
      src.entry first as patient then {
        patient.resource : Bundle as patientRes -> partDetails then populatePatientGroup(patientRes, partDetails) "partBundleDetails";
      } "patientDetails";
      src.entry as conditions where (resource.link.url.contains("/Condition?")) -> partDetails.item as conditionItem, conditionItem.linkId = 'condition-count' then {
        conditions -> conditionItem.answer as conditionCountAnswer, conditionCountAnswer.value = (%conditions.resource.entry.count()) "conditionCountAnswer";
      } "conditionCount";
    } "partDetails";

    // Scan the search bundle for a medication statement bunde
    src.entry as medications where (resource.link.url.contains("/MedicationStatement?")) -> grp then {
      medications.resource : Bundle as medRes then populateMedicationsGroup(medRes, grp) "medEntry";
    } "meds";
  } "grp";
}

group populatePatientGroup(source patientRes : Bundle, target partDetails) {
  patientRes -> partDetails.item as participantId, 
                    participantId.linkId = 'participant-id',
                    participantId.answer as participantIdAnswer,
                    participantIdAnswer.value = (%patientRes.entry.resource.id.toString()) "participantIdValue";

  patientRes -> partDetails.item as familyName,
                    familyName.linkId = 'family-name',
                    familyName.answer as familyNameAnswer,
                    familyNameAnswer.value = (%patientRes.entry.resource.name.first().family) "familyNameValue";

  patientRes -> partDetails.item as givenName,
                    givenName.linkId = 'given-names',
                    givenName.answer as givenNameAnswer,
                    givenNameAnswer.value = (%patientRes.entry.resource.name.first().given.join(', ')) "givenNameValue";
  patientRes -> partDetails.item as dob, 
                    dob.linkId = 'dob',
                    dob.answer as dobAnswer,
                    dobAnswer.value = (%patientRes.entry.resource.birthDate) "dobValue";
}

group populateMedicationsGroup(source medRes : Bundle, target grp) {
  medRes.entry as med where (resource is MedicationStatement) -> grp.item as medsItem, medsItem.linkId = 'meds' then {
    med.resource : MedicationStatement as medResource -> medsItem.item as medsName, 
                    medsName.linkId = 'med-name',
                    medsName.answer as medsNameAnswer, 
                    medsNameAnswer.value = (%medResource.medication.select(iif(text.exists(), text, coding.display.first()))) "medsNameAnswer";
/* Todo handle medicationReference once resolve is supported
        iif($this is Reference, iif($this.resolve().text.exists(), $this.resolve().text, $this.resolve().coding.display.first()), iif(text, text, coding.display.first())))) "medsNameAnswer";
*/
    
    med.resource : MedicationStatement as medResource -> medsItem.item as medsStatus, medsStatus.linkId = 'med-status' then {
      medResource.status as medsMedicationStatus -> medsStatus.answer as medsStatusAnswer, medsStatusAnswer.value = c('http://hl7.org/fhir/CodeSystem/medication-status', medsMedicationStatus) "medsStatusAnswer";
    } "medsStatus";
    
    med.resource as medResource where (category.coding.where(system='http://terminology.hl7.org/CodeSystem/medicationrequest-category').exists()) -> medsItem.item as medsCategory, medsCategory.linkId = 'meds-category' then {
      medResource -> medsCategory.answer as medsCategoryAnswer, medsCategoryAnswer.value = (%medResource.category.coding.where(system='http://terminology.hl7.org/CodeSystem/medicationrequest-category').code.join(' ')) "medsCategoryAnswer";
    } "medsCategory";
  } "medItem";
}

Source

{
  "resourceType": "StructureMap",
  "id": "QuestionnairePopulationTransform",
  "text": {
    "status": "additional",
    "div": "<!-- snip (see above) -->"
  },
  "extension": [
    {
      "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
      "valueCode": "fhir"
    }
  ],
  "url": "http://hl7.org/fhir/uv/sdc/StructureMap/QuestionnairePopulationTransform",
  "identifier": [
    {
      "system": "urn:ietf:rfc:3986",
      "value": "urn:oid:2.16.840.1.113883.4.642.40.17.43.4"
    }
  ],
  "version": "4.0.0-ballot",
  "name": "QuestionnairePopulationTransform",
  "status": "draft",
  "date": "2025-07-14T18:38:59+00:00",
  "publisher": "HL7 International / FHIR Infrastructure",
  "contact": [
    {
      "name": "HL7 International / FHIR Infrastructure",
      "telecom": [
        {
          "system": "url",
          "value": "http://www.hl7.org/Special/committees/fiwg"
        }
      ]
    },
    {
      "telecom": [
        {
          "system": "url",
          "value": "http://www.hl7.org/Special/committees/fiwg"
        }
      ]
    }
  ],
  "jurisdiction": [
    {
      "coding": [
        {
          "system": "http://unstats.un.org/unsd/methods/m49/m49.htm",
          "code": "001",
          "display": "World"
        }
      ]
    }
  ],
  "structure": [
    {
      "url": "http://hl7.org/fhir/StructureDefinition/Bundle",
      "mode": "source"
    },
    {
      "url": "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse",
      "mode": "target"
    },
    {
      "url": "http://hl7.org/fhir/StructureDefinition/MedicationStatement",
      "mode": "source"
    }
  ],
  "group": [
    {
      "name": "main",
      "typeMode": "none",
      "input": [
        {
          "name": "src",
          "type": "Bundle",
          "mode": "source"
        },
        {
          "name": "qr",
          "type": "QuestionnaireResponse",
          "mode": "target"
        }
      ],
      "rule": [
        {
          "name": "questionnaire",
          "source": [
            {
              "context": "src"
            }
          ],
          "target": [
            {
              "context": "qr",
              "contextType": "variable",
              "element": "questionnaire",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "http://hl7.org/fhir/uv/sdc/Questionnaire/questionnaire-sdc-test-fhirpath-prepop-source-query"
                }
              ]
            }
          ]
        },
        {
          "name": "status",
          "source": [
            {
              "context": "src"
            }
          ],
          "target": [
            {
              "context": "qr",
              "contextType": "variable",
              "element": "status",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "in-progress"
                }
              ]
            }
          ]
        },
        {
          "name": "authored",
          "source": [
            {
              "context": "src"
            }
          ],
          "target": [
            {
              "context": "qr",
              "contextType": "variable",
              "element": "authored",
              "transform": "evaluate",
              "parameter": [
                {
                  "valueString": "now()"
                }
              ]
            }
          ]
        },
        {
          "name": "subject",
          "source": [
            {
              "context": "src",
              "element": "entry",
              "listMode": "first",
              "variable": "patient"
            }
          ],
          "target": [
            {
              "context": "qr",
              "contextType": "variable",
              "element": "subject",
              "variable": "subject"
            },
            {
              "context": "subject",
              "contextType": "variable",
              "element": "reference",
              "transform": "evaluate",
              "parameter": [
                {
                  "valueString": "%patient.resource.entry.fullUrl.toString()"
                }
              ]
            }
          ]
        },
        {
          "name": "grp",
          "source": [
            {
              "context": "src"
            }
          ],
          "target": [
            {
              "context": "qr",
              "contextType": "variable",
              "element": "item",
              "variable": "grp"
            },
            {
              "context": "grp",
              "contextType": "variable",
              "element": "linkId",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "grp"
                }
              ]
            }
          ],
          "rule": [
            {
              "name": "partDetails",
              "source": [
                {
                  "context": "src"
                }
              ],
              "target": [
                {
                  "context": "grp",
                  "contextType": "variable",
                  "element": "item",
                  "variable": "partDetails"
                },
                {
                  "context": "partDetails",
                  "contextType": "variable",
                  "element": "linkId",
                  "transform": "copy",
                  "parameter": [
                    {
                      "valueString": "part-details"
                    }
                  ]
                }
              ],
              "rule": [
                {
                  "name": "patientDetails",
                  "source": [
                    {
                      "context": "src",
                      "element": "entry",
                      "listMode": "first",
                      "variable": "patient"
                    }
                  ],
                  "rule": [
                    {
                      "name": "partBundleDetails",
                      "source": [
                        {
                          "context": "patient",
                          "type": "Bundle",
                          "element": "resource",
                          "variable": "patientRes"
                        }
                      ],
                      "target": [
                        {
                          "contextType": "variable",
                          "transform": "copy",
                          "parameter": [
                            {
                              "valueId": "partDetails"
                            }
                          ]
                        }
                      ],
                      "dependent": [
                        {
                          "name": "populatePatientGroup",
                          "variable": [
                            "patientRes",
                            "partDetails"
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name": "conditionCount",
                  "source": [
                    {
                      "context": "src",
                      "element": "entry",
                      "variable": "conditions",
                      "condition": "(resource.link.url.contains('/Condition?'))"
                    }
                  ],
                  "target": [
                    {
                      "context": "partDetails",
                      "contextType": "variable",
                      "element": "item",
                      "variable": "conditionItem"
                    },
                    {
                      "context": "conditionItem",
                      "contextType": "variable",
                      "element": "linkId",
                      "transform": "copy",
                      "parameter": [
                        {
                          "valueString": "condition-count"
                        }
                      ]
                    }
                  ],
                  "rule": [
                    {
                      "name": "conditionCountAnswer",
                      "source": [
                        {
                          "context": "conditions"
                        }
                      ],
                      "target": [
                        {
                          "context": "conditionItem",
                          "contextType": "variable",
                          "element": "answer",
                          "variable": "conditionCountAnswer"
                        },
                        {
                          "context": "conditionCountAnswer",
                          "contextType": "variable",
                          "element": "value",
                          "transform": "evaluate",
                          "parameter": [
                            {
                              "valueString": "%conditions.resource.entry.count()"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "meds",
              "source": [
                {
                  "context": "src",
                  "element": "entry",
                  "variable": "medications",
                  "condition": "(resource.link.url.contains('/MedicationStatement?'))"
                }
              ],
              "target": [
                {
                  "contextType": "variable",
                  "transform": "copy",
                  "parameter": [
                    {
                      "valueId": "grp"
                    }
                  ]
                }
              ],
              "rule": [
                {
                  "name": "medEntry",
                  "source": [
                    {
                      "context": "medications",
                      "type": "Bundle",
                      "element": "resource",
                      "variable": "medRes"
                    }
                  ],
                  "dependent": [
                    {
                      "name": "populateMedicationsGroup",
                      "variable": [
                        "medRes",
                        "grp"
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "populatePatientGroup",
      "typeMode": "none",
      "input": [
        {
          "name": "patientRes",
          "type": "Bundle",
          "mode": "source"
        },
        {
          "name": "partDetails",
          "mode": "target"
        }
      ],
      "rule": [
        {
          "name": "participantIdValue",
          "source": [
            {
              "context": "patientRes"
            }
          ],
          "target": [
            {
              "context": "partDetails",
              "contextType": "variable",
              "element": "item",
              "variable": "participantId"
            },
            {
              "context": "participantId",
              "contextType": "variable",
              "element": "linkId",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "participant-id"
                }
              ]
            },
            {
              "context": "participantId",
              "contextType": "variable",
              "element": "answer",
              "variable": "participantIdAnswer"
            },
            {
              "context": "participantIdAnswer",
              "contextType": "variable",
              "element": "value",
              "transform": "evaluate",
              "parameter": [
                {
                  "valueString": "%patientRes.entry.resource.id.toString()"
                }
              ]
            }
          ]
        },
        {
          "name": "familyNameValue",
          "source": [
            {
              "context": "patientRes"
            }
          ],
          "target": [
            {
              "context": "partDetails",
              "contextType": "variable",
              "element": "item",
              "variable": "familyName"
            },
            {
              "context": "familyName",
              "contextType": "variable",
              "element": "linkId",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "family-name"
                }
              ]
            },
            {
              "context": "familyName",
              "contextType": "variable",
              "element": "answer",
              "variable": "familyNameAnswer"
            },
            {
              "context": "familyNameAnswer",
              "contextType": "variable",
              "element": "value",
              "transform": "evaluate",
              "parameter": [
                {
                  "valueString": "%patientRes.entry.resource.name.first().family"
                }
              ]
            }
          ]
        },
        {
          "name": "givenNameValue",
          "source": [
            {
              "context": "patientRes"
            }
          ],
          "target": [
            {
              "context": "partDetails",
              "contextType": "variable",
              "element": "item",
              "variable": "givenName"
            },
            {
              "context": "givenName",
              "contextType": "variable",
              "element": "linkId",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "given-names"
                }
              ]
            },
            {
              "context": "givenName",
              "contextType": "variable",
              "element": "answer",
              "variable": "givenNameAnswer"
            },
            {
              "context": "givenNameAnswer",
              "contextType": "variable",
              "element": "value",
              "transform": "evaluate",
              "parameter": [
                {
                  "valueString": "%patientRes.entry.resource.name.first().given.join(', ')"
                }
              ]
            }
          ]
        },
        {
          "name": "dobValue",
          "source": [
            {
              "context": "patientRes"
            }
          ],
          "target": [
            {
              "context": "partDetails",
              "contextType": "variable",
              "element": "item",
              "variable": "dob"
            },
            {
              "context": "dob",
              "contextType": "variable",
              "element": "linkId",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "dob"
                }
              ]
            },
            {
              "context": "dob",
              "contextType": "variable",
              "element": "answer",
              "variable": "dobAnswer"
            },
            {
              "context": "dobAnswer",
              "contextType": "variable",
              "element": "value",
              "transform": "evaluate",
              "parameter": [
                {
                  "valueString": "%patientRes.entry.resource.birthDate"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "populateMedicationsGroup",
      "typeMode": "none",
      "input": [
        {
          "name": "medRes",
          "type": "Bundle",
          "mode": "source"
        },
        {
          "name": "grp",
          "mode": "target"
        }
      ],
      "rule": [
        {
          "name": "medItem",
          "source": [
            {
              "context": "medRes",
              "element": "entry",
              "variable": "med",
              "condition": "(resource is MedicationStatement)"
            }
          ],
          "target": [
            {
              "context": "grp",
              "contextType": "variable",
              "element": "item",
              "variable": "medsItem"
            },
            {
              "context": "medsItem",
              "contextType": "variable",
              "element": "linkId",
              "transform": "copy",
              "parameter": [
                {
                  "valueString": "meds"
                }
              ]
            }
          ],
          "rule": [
            {
              "name": "medsNameAnswer",
              "source": [
                {
                  "context": "med",
                  "type": "MedicationStatement",
                  "element": "resource",
                  "variable": "medResource"
                }
              ],
              "target": [
                {
                  "context": "medsItem",
                  "contextType": "variable",
                  "element": "item",
                  "variable": "medsName"
                },
                {
                  "context": "medsName",
                  "contextType": "variable",
                  "element": "linkId",
                  "transform": "copy",
                  "parameter": [
                    {
                      "valueString": "med-name"
                    }
                  ]
                },
                {
                  "context": "medsName",
                  "contextType": "variable",
                  "element": "answer",
                  "variable": "medsNameAnswer"
                },
                {
                  "context": "medsNameAnswer",
                  "contextType": "variable",
                  "element": "value",
                  "transform": "evaluate",
                  "parameter": [
                    {
                      "valueString": "%medResource.medication.select(iif(text.exists(), text, coding.display.first()))"
                    }
                  ]
                }
              ]
            },
            {
              "name": "medsStatus",
              "source": [
                {
                  "context": "med",
                  "type": "MedicationStatement",
                  "element": "resource",
                  "variable": "medResource"
                }
              ],
              "target": [
                {
                  "context": "medsItem",
                  "contextType": "variable",
                  "element": "item",
                  "variable": "medsStatus"
                },
                {
                  "context": "medsStatus",
                  "contextType": "variable",
                  "element": "linkId",
                  "transform": "copy",
                  "parameter": [
                    {
                      "valueString": "med-status"
                    }
                  ]
                }
              ],
              "rule": [
                {
                  "name": "medsStatusAnswer",
                  "source": [
                    {
                      "context": "medResource",
                      "element": "status",
                      "variable": "medsMedicationStatus"
                    }
                  ],
                  "target": [
                    {
                      "context": "medsStatus",
                      "contextType": "variable",
                      "element": "answer",
                      "variable": "medsStatusAnswer"
                    },
                    {
                      "context": "medsStatusAnswer",
                      "contextType": "variable",
                      "element": "value",
                      "transform": "c",
                      "parameter": [
                        {
                          "valueString": "http://hl7.org/fhir/CodeSystem/medication-status"
                        },
                        {
                          "valueId": "medsMedicationStatus"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "medsCategory",
              "source": [
                {
                  "context": "med",
                  "element": "resource",
                  "variable": "medResource",
                  "condition": "(category.coding.where(system = 'http://terminology.hl7.org/CodeSystem/medicationrequest-category').exists())"
                }
              ],
              "target": [
                {
                  "context": "medsItem",
                  "contextType": "variable",
                  "element": "item",
                  "variable": "medsCategory"
                },
                {
                  "context": "medsCategory",
                  "contextType": "variable",
                  "element": "linkId",
                  "transform": "copy",
                  "parameter": [
                    {
                      "valueString": "meds-category"
                    }
                  ]
                }
              ],
              "rule": [
                {
                  "name": "medsCategoryAnswer",
                  "source": [
                    {
                      "context": "medResource"
                    }
                  ],
                  "target": [
                    {
                      "context": "medsCategory",
                      "contextType": "variable",
                      "element": "answer",
                      "variable": "medsCategoryAnswer"
                    },
                    {
                      "context": "medsCategoryAnswer",
                      "contextType": "variable",
                      "element": "value",
                      "transform": "evaluate",
                      "parameter": [
                        {
                          "valueString": "%medResource.category.coding.where(system = 'http://terminology.hl7.org/CodeSystem/medicationrequest-category').code.join(' ')"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}