QuestionnaireResponse — Answers to a form
Once a patient or clinician fills out a Questionnaire, their answers are stored in
a QuestionnaireResponse. Strict link via linkId to the definition.
Purpose
QuestionnaireResponse holds the answers provided to a given Questionnaire. Its item
structure is parallel to that of the Questionnaire: each QR item maps
to a Q item via linkId.
QR can be: patient-entered (PRO), clinician-entered (admission form), or auto-generated (export from an EHR into a research eCRF).
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | External identifiers. |
basedOn | Reference(CarePlan | ServiceRequest)[] | 0..* | Request that triggered the entry. |
partOf | Reference(Observation | Procedure)[] | 0..* | Parent clinical act. |
questionnaire | canonical(Questionnaire) | 0..1 | Referenced Questionnaire. |
status | code | 1..1 | Mandatory. See list. |
subject | Reference(Any) | 0..1 | Subject (typically Patient). |
encounter | Reference(Encounter) | 0..1 | Encounter during which the entry happened. |
authored | dateTime | 0..1 | Entry date. |
author | Reference(Device | Practitioner | PractitionerRole | Patient | RelatedPerson | Organization) | 0..1 | Entry author. |
source | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson) | 0..1 | Source of information (may differ from author). |
item | BackboneElement[] | 0..* | Answer items (recursive). |
item.linkId | string | 1..1 | Mandatory. References Questionnaire item. |
item.answer | BackboneElement[] | 0..* | Answer(s) to the item. |
item.answer.value[x] | boolean | decimal | integer | date | dateTime | time | string | uri | Attachment | Coding | Quantity | Reference | 0..1 | Typed answer value. |
item.item | BackboneElement[] | 0..* | Sub-items (mirror of Q hierarchy). |
Statuses
| Code | Meaning |
|---|---|
in-progress | Entry in progress. |
completed | Entry complete, submitted. |
amended | Modified post-completion. |
entered-in-error | Erroneous entry. |
stopped | Entry interrupted. |
JSON example
Patient submission of the PHQ-9 above: 2 items answered, score 3 (minimal depression):
{
"resourceType": "QuestionnaireResponse",
"id": "phq9-response-example",
"questionnaire": "http://example.org/Questionnaire/phq9",
"status": "completed",
"subject": { "reference": "Patient/example" },
"encounter": { "reference": "Encounter/example" },
"authored": "2026-05-14T11:30:00+02:00",
"author": { "reference": "Patient/example" },
"source": { "reference": "Patient/example" },
"item": [
{
"linkId": "1",
"text": "Over the last 2 weeks, how often have you had little interest or pleasure in doing things?",
"answer": [{
"valueCoding": {
"system": "http://loinc.org/LL358-3",
"code": "LA6569-3",
"display": "Several days"
}
}]
},
{
"linkId": "2",
"text": "Over the last 2 weeks, how often have you felt down, depressed, or hopeless?",
"answer": [{
"valueCoding": {
"system": "http://loinc.org/LL358-3",
"code": "LA6568-5",
"display": "Not at all"
}
}]
},
{
"linkId": "10",
"text": "PHQ-9 total score",
"answer": [{ "valueInteger": 3 }]
}
]
} Common pitfalls
- Orphan
linkId— a QR item with a linkId that does not exist in the Questionnaire: orphan data. - Incompatible
value[x]type — avalueStringanswer on a Q item typedintegeris invalid. - No
questionnaire— without canonical, no way to validate linkId consistency. - Required item unanswered but
status=completed— SDC$extractvalidation will reject. - Coding answer without
system— ambiguous code, receiver cannot resolve the value.
Related resources
- Questionnaire — source definition.
- Observation — data extracted via SDC
$extract. - Composition — may embed a QR in a narrative section.
- Encounter — entry context.