ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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

FieldTypeCardinalityRole
identifierIdentifier[]0..*External identifiers.
basedOnReference(CarePlan | ServiceRequest)[]0..*Request that triggered the entry.
partOfReference(Observation | Procedure)[]0..*Parent clinical act.
questionnairecanonical(Questionnaire)0..1Referenced Questionnaire.
statuscode1..1Mandatory. See list.
subjectReference(Any)0..1Subject (typically Patient).
encounterReference(Encounter)0..1Encounter during which the entry happened.
authoreddateTime0..1Entry date.
authorReference(Device | Practitioner | PractitionerRole | Patient | RelatedPerson | Organization)0..1Entry author.
sourceReference(Patient | Practitioner | PractitionerRole | RelatedPerson)0..1Source of information (may differ from author).
itemBackboneElement[]0..*Answer items (recursive).
item.linkIdstring1..1Mandatory. References Questionnaire item.
item.answerBackboneElement[]0..*Answer(s) to the item.
item.answer.value[x]boolean | decimal | integer | date | dateTime | time | string | uri | Attachment | Coding | Quantity | Reference0..1Typed answer value.
item.itemBackboneElement[]0..*Sub-items (mirror of Q hierarchy).

Statuses

CodeMeaning
in-progressEntry in progress.
completedEntry complete, submitted.
amendedModified post-completion.
entered-in-errorErroneous entry.
stoppedEntry interrupted.

JSON example

Patient submission of the PHQ-9 above: 2 items answered, score 3 (minimal depression):

json questionnaireresponse-phq9.json
{
  "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 — a valueString answer on a Q item typed integer is invalid.
  • No questionnaire — without canonical, no way to validate linkId consistency.
  • Required item unanswered but status=completed — SDC $extract validation will reject.
  • Coding answer without system — ambiguous code, receiver cannot resolve the value.