This
page
is
part
of
the
FHIR
Specification
(v3.3.0:
(v3.5.0:
R4
Ballot
2).
#2).
The
current
version
which
supercedes
this
version
is
5.0.0
.
For
a
full
list
of
available
versions,
see
the
Directory
of
published
versions
.
Page
versions:
R5
R4B
R4
R3
R2
FHIR
Infrastructure
Work
Group
|
Maturity Level : 3 | Trial Use | Compartments : Not linked to any defined compartments |
A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.
A Questionnaire is an organized collection of questions intended to solicit information from patients, providers or other individuals involved in the healthcare domain. They may be simple flat lists of questions or can be hierarchically organized in groups and sub-groups, each containing questions. The Questionnaire defines the questions to be asked, how they are ordered and grouped, any intervening instructional text and what the constraints are on the allowed answers. The results of a Questionnaire can be communicated using the QuestionnaireResponse resource.
Questionnaires
cover
the
need
to
communicate
data
originating
from
forms
used
in
medical
history
examinations,
research
questionnaires
and
sometimes
full
clinical
specialty
records.
In
many
systems
this
data
is
collected
using
user-defined
screens
and
forms.
Questionnaires
define
specifics
about
data
capture
-
exactly
what
questions
were
asked,
in
what
order,
what
choices
for
answers
were,
etc.
Each
of
these
questions
is
part
of
the
Questionnaire,
and
as
such
the
Questionnaire
is
a
separately
identifiable
Resource,
whereas
the
individual
questions
are
not.
(Questionnaire
questions
can
be
linked
to
shared
data
elements
using
the
Questionnaire.item.definition
element.)
Examples of Questionnaires include:
This resource is limited in scope to support the characteristics of simple questionnaires. However, common extensions have been defined to allow more sophisticated behavior. This includes:
Additional
profiles
such
as
the
Structured
Data
Capture
Questionnaire
profile
may
provide
additional
capabilities
for
defining
more
sophisticated
questionnaires
and
forms.
Questionnaires
differ
from
Lists
because
Lists
group
existing
resources,
while
Questionnaires
group
arbitrary
questions.
Questionnaires
are
distinct
from
Observations
and
DiagnosticReports
in
that
both
of
these
resources
are
intended
to
capture
only
certain
types
of
information
(lab,
imaging,
vitals,
etc.)
and
should
not
be
used
to
capture
the
full
breadth
of
healthcare
information
(allergies,
medications,
care
plans,
etc.),
while
Questionnaires
are
able
to
capture
any
information
at
all.
More
importantly,
Observation
and
DiagnosticReport
focus
on
capturing
the
discrete
information
in
a
standardized
form
so
that
the
information
can
be
used
consistently
regardless
of
where
or
how
it
is
captured.
Questionnaire
focuses
on
information
capture.
The
same
information
can
be
captured
using
a
wide
variety
of
questionnaires
with
differently
phrased
questions
organized
in
different
manners.
As
such,
the
Questionnaire
resource
provides
a
means
to
standardize
the
information
gathering
process
(how
information
is
captured),
but
not
the
actual
information
collected.
Observation
and
how
data
is
interoperably
compared,
analyzed
or
computed
upon
(typically
managed
using
Observation,
DiagnosticReport
standardize
what
as
well
as
other
resources).
Questionnaire
supports
data-collection
workflow
to
a
limited
extent,
in
that
-
once
triggered
-
a
Questionnaire
can
guide
a
user
through
a
data
collection
process
that
ensures
appropriate
information
is
actually
captured,
but
not
how
the
collected
based
on
answers
to
particular
questions.
However,
Questionnaire
doesn't
provide
support
for
capturing
sets
of
information
at
different
times
or
highly
interactive
data
capture.
Broader
workflow
is
gathered.
typically
managed
using
PlanDefinition
and
Task
or
using
other
mechanisms
such
as
CDSHooks.
Questionnaires are similar to the notion of "logical models" supported by the StructureDefinition resource. Both support the representation of a collection of data points with labels, data types and hierarchy. It will be common to find the two of them mapped together. The primary difference is that Questionnaire is focused on user-facing data collection. It describes specific questions and includes information such as what number/label should be displayed beside each question, conditions in which questions should be displayed (or not), what instructions should be provided to the user, etc. StructureDefinition, on the other hand, merely defines a data structure with no guidance on display or rules around capture mechanism, only what data should exist in the end. As well, logical models are not intended to capture data directly. Rather, they provide a basis for mapping between data capture structures.
Groups
and
questions
that
make
up
a
Questionnaire
can
use
the
definition
element
to
refer
to
data
elements
in
external
code
systems
and
StructureDefinitions
.
In
this
way,
it's
possible
to
leverage
standard
definitions
of
questions
and
their
associated
data
types
and
answer
sets
across
questionnaires.
This
also
allows
extraction
of
the
data
from
a
questionnaire
response
into
other
data
structures
(e.g.
populating
a
ServiceRequest
or
CarePlan
from
information
in
a
completed
questionnaire
response.
It
can
also
support
other
sorts
of
post-processing
of
the
data
contained
in
a
questionnaire
response.
However,
use
of
the
definition
element
is
not
required
and
Questionnaires
may
be
quite
loosely
defined.
The
section
Questionnaire
versus
Resources
below
discusses
the
issues
of
collecting
data
in
such
loosely
defined
Questionnaires
versus
collecting
data
as
well-defined
separate
Resources.
This resource is referenced by CarePlan , Communication , Contract , FamilyMemberHistory , PlanDefinition , Procedure , itself and QuestionnaireResponse
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
I TU | DomainResource |
A
structured
set
of
questions
+ Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation + Rule: The link ids for groups and questions must be unique within the questionnaire Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension |
|
|
Σ | 0..1 | uri | Canonical identifier for this questionnaire, represented as a URI (globally unique) |
|
Σ | 0..* | Identifier |
Additional
identifier
for
the
questionnaire
|
|
Σ | 0..1 | string | Business version of the questionnaire |
|
Σ I | 0..1 | string | Name for this questionnaire (computer friendly) |
|
Σ | 0..1 | string | Name for this questionnaire (human friendly) |
|
0..* | canonical ( Questionnaire ) |
Instantiates
protocol
or
definition
|
|
|
?! Σ | 1..1 | code |
draft
|
active
|
retired
|
unknown
PublicationStatus ( Required ) |
|
|
0..1 | boolean | For testing purposes, not real usage |
|
Σ | 0..* | code |
Resource
that
can
be
subject
of
QuestionnaireResponse
ResourceType ( Required ) |
|
Σ | 0..1 | dateTime | Date last changed |
|
Σ | 0..1 | string | Name of the publisher (organization or individual) |
|
Σ | 0..* | ContactDetail |
Contact
details
for
the
publisher
|
|
0..1 | markdown | Natural language description of the questionnaire | |
|
Σ | 0..* | UsageContext |
The
context
that
the
content
is
intended
to
support
|
|
Σ | 0..* | CodeableConcept |
Intended
jurisdiction
for
questionnaire
(if
applicable)
Jurisdiction |
|
0..1 | markdown | Why this questionnaire is defined | |
|
0..1 | markdown | Use and/or publishing restrictions | |
|
0..1 | date | When the questionnaire was approved by publisher | |
|
0..1 | date | When the questionnaire was last reviewed | |
|
Σ | 0..1 | Period | When the questionnaire is expected to be used |
|
Σ | 0..* | Coding |
Concept
that
represents
the
overall
questionnaire
Questionnaire Question Codes ( Example ) |
|
I | 0..* | BackboneElement |
Questions
and
sections
within
the
Questionnaire
+ + + + Rule: Only 'choice' items can have + + + Rule: Read-only can't be specified for "display" items + Rule: Maximum length can only be declared for simple question types + Rule: If there are more than one enableWhen, enableBehavior must be specified + Rule: Can only have multiple initial values for repeating items |
|
1..1 | string | Unique id for item in questionnaire | |
|
0..1 | uri | ElementDefinition - details for the item | |
|
I | 0..* | Coding |
Corresponding
concept
for
this
item
in
a
terminology
Questionnaire Question Codes ( Example ) |
|
0..1 | string | E.g. "1(a)", "2.5.3" | |
|
0..1 | string | Primary text for the item | |
|
1..1 | code |
group
|
display
|
boolean
|
decimal
|
integer
|
date
|
dateTime
+
QuestionnaireItemType ( Required ) |
|
|
?! I | 0..* | BackboneElement |
Only
allow
data
when
+ Rule: If the operator is 'exists', the value must be a boolean |
|
1..1 | string | Question that determines whether item is enabled | |
|
1..1 | code |
exists
|
=
|
!=
|
>
|
<
|
>=
|
<=
QuestionnaireItemOperator ( Required ) |
|
|
I | 1..1 |
Value
for
question
comparison
based
on
operator
Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
Coding | |||
|
Quantity | |||
|
Reference ( Any ) | |||
|
I | 0..1 | code |
all
|
any
EnableWhenBehavior ( Required ) |
|
I | 0..1 | boolean | Whether the item must be included in data results |
|
I | 0..1 | boolean | Whether the item may repeat |
|
I | 0..1 | boolean | Don't allow human editing |
|
I | 0..1 | integer | No more than this many characters |
|
I | 0..1 | canonical ( ValueSet ) | Valueset containing permitted answers |
|
I | 0..* | BackboneElement |
Permitted
answer
|
|
1..1 |
Answer
value
Questionnaire Answer Codes ( Example ) |
||
|
integer | |||
|
date | |||
|
time | |||
|
string | |||
|
Coding | |||
| Reference ( Any ) | |||
|
0..1 | boolean | Whether option is selected by default | |
|
I | 0..* | BackboneElement |
Initial
value(s)
when
item
is
first
rendered
|
|
1..1 |
Actual
value
for
initializing
the
question
Questionnaire Answer Codes ( Example ) |
||
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
uri | |||
|
Attachment | |||
|
Coding | |||
|
Quantity | |||
|
Reference ( Any ) | |||
|
I | 0..* | see item |
Nested
questionnaire
items
|
Documentation
for
this
format
|
||||
UML Diagram ( Legend )
XML Template
<Questionnaire xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension -->
<<url value="[uri]"/><!-- 0..1 Canonical identifier for this questionnaire, represented as a URI (globally unique) --> <identifier><!-- 0..* Identifier Additional identifier for the questionnaire --></identifier> <version value="[string]"/><!-- 0..1 Business version of the questionnaire --><<name value="[string]"/><!--0..1 Name for this questionnaire (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this questionnaire (human friendly) --> <derivedFrom><!-- 0..* canonical(Questionnaire) Instantiates protocol or definition --></derivedFrom> <status value="[code]"/><!-- 1..1 draft | active | retired | unknown -->
<<experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage --> <subjectType value="[code]"/><!-- 0..* Resource that can be subject of QuestionnaireResponse --> <date value="[dateTime]"/><!-- 0..1 Date last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the questionnaire --> <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for questionnaire (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this questionnaire is defined --> <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions --> <approvalDate value="[date]"/><!-- 0..1 When the questionnaire was approved by publisher --> <lastReviewDate value="[date]"/><!-- 0..1 When the questionnaire was last reviewed --> <effectivePeriod><!-- 0..1 Period When the questionnaire is expected to be used --></effectivePeriod> <code><!-- 0..* Coding Concept that represents the overall questionnaire --></code> <item> <!--0..* Questions and sections within the Questionnaire --> <linkId value="[string]"/><!-- 1..1 Unique id for item in questionnaire -->
<<a href="questionnaire-definitions.html#Questionnaire.item.definition" title="A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be derived from the definition:<* options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition, and some are require for efficient implementation (e.g. enforcing invariants)." class="dict"> * answerValueSet (ElementDefinition.binding) * options (ElementDefinition.binding)." class="dict">definition value="[uri]"/><!-- 0..1 ElementDefinition - details for the item --> <code><!--0..* Coding Corresponding concept for this item in a terminology --></code> <prefix value="[string]"/><!-- 0..1 E.g. "1(a)", "2.5.3" --> <text value="[string]"/><!-- 0..1 Primary text for the item --> <type value="[code]"/><!-- 1..1 group | display | boolean | decimal | integer | date | dateTime + --> <enableWhen> <!-- 0..* Only allow data when --> <question value="[string]"/><!-- 1..1 Question that determines whether item is enabled --> <operator value="[code]"/><!-- 1..1 exists | = | != | > | < | >= | <= --> <answer[x]><!--
1..1 boolean|decimal|integer|date|dateTime|time|string|Coding| Quantity|Reference(Any) Value for question comparison based on operator --></answer[x]> </enableWhen> <enableBehavior value="[code]"/><!--
0..1 all | any --> <required value="[boolean]"/><!--
0..1 Whether the item must be included in data results -->
<<repeats value="[boolean]"/><!--0..1 Whether the item may repeat --> <readOnly value="[boolean]"/><!--
0..1 Don't allow human editing --> <maxLength value="[integer]"/><!--
0..1 No more than this many characters -->
<</options> < <</value[x]> < </option> <<answerValueSet><!--0..1 canonical(ValueSet) Valueset containing permitted answers --></answerValueSet> <answerOption> <!--
0..* Permitted answer --> <value[x]><!-- 1..1 integer|date|time|string|Coding|Reference(Any) Answer value --></value[x]> <initialSelected value="[boolean]"/><!-- 0..1 Whether option is selected by default --> </answerOption> <initial> <!--
0..* Initial value(s) when item is first rendered --> <value[x]><!-- 1..1 boolean|decimal|integer|date|dateTime|time|string|uri| Attachment|Coding|Quantity|Reference(Any) Actual value for initializing the question --></value[x]> </initial> <item><!--
0..* Content as for Questionnaire.item Nested questionnaire items --></item> </item> </Questionnaire>
JSON Template
{
"resourceType" : "Questionnaire",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"
"url" : "<uri>", // Canonical identifier for this questionnaire, represented as a URI (globally unique)
"identifier" : [{ Identifier }], // Additional identifier for the questionnaire
"version" : "<string>", // Business version of the questionnaire
"
"name" : "<string>", // C? Name for this questionnaire (computer friendly)
"title" : "<string>", // Name for this questionnaire (human friendly)
"
"derivedFrom" : [{ canonical(Questionnaire) }], // Instantiates protocol or definition
"status" : "<code>", // R! draft | active | retired | unknown
"
"experimental" : <boolean>, // For testing purposes, not real usage
"subjectType" : ["<code>"], // Resource that can be subject of QuestionnaireResponse
"date" : "<dateTime>", // Date last changed
"publisher" : "<string>", // Name of the publisher (organization or individual)
"contact" : [{ ContactDetail }], // Contact details for the publisher
"description" : "<markdown>", // Natural language description of the questionnaire
"useContext" : [{ UsageContext }], // The context that the content is intended to support
"jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for questionnaire (if applicable)
"purpose" : "<markdown>", // Why this questionnaire is defined
"copyright" : "<markdown>", // Use and/or publishing restrictions
"approvalDate" : "<date>", // When the questionnaire was approved by publisher
"lastReviewDate" : "<date>", // When the questionnaire was last reviewed
"effectivePeriod" : { Period }, // When the questionnaire is expected to be used
"code" : [{ Coding }], // Concept that represents the overall questionnaire
"item" : [{ // C? Questions and sections within the Questionnaire
"linkId" : "<string>", // R! Unique id for item in questionnaire
"<a href="questionnaire-definitions.html#Questionnaire.item.definition" title="A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be derived from the definition:
"* options (ElementDefinition.binding)
Any information provided in these elements on a Questionnaire Item overrides the information from the definition, and some are require for efficient implementation (e.g. enforcing invariants)." class="dict">definition
* answerValueSet (ElementDefinition.binding)
* options (ElementDefinition.binding)." class="dict">definition" : "<uri>", // ElementDefinition - details for the item
"code" : [{ Coding }], // C? Corresponding concept for this item in a terminology
"prefix" : "<string>", // E.g. "1(a)", "2.5.3"
"text" : "<string>", // Primary text for the item
"type" : "<code>", // R! group | display | boolean | decimal | integer | date | dateTime +
"enableWhen" : [{ // Only allow data when
"question" : "<string>", // R! Question that determines whether item is enabled
"operator" : "<code>", // R! exists | = | != | > | < | >= | <=
// answer[x]: Value for question comparison based on operator. One of these 10:
"answerBoolean" : <boolean>
"answerDecimal" : <decimal>
"answerInteger" : <integer>
"answerDate" : "<date>"
"answerDateTime" : "<dateTime>"
"answerTime" : "<time>"
"answerString" : "<string>"
"answerCoding" : { Coding }
"answerQuantity" : { Quantity }
"answerReference" : { Reference(Any) }
}],
"enableBehavior" : "<code>", // C? all | any
"required" : <boolean>, // C? Whether the item must be included in data results
"
"repeats" : <boolean>, // C? Whether the item may repeat
"readOnly" : <boolean>, // C? Don't allow human editing
"maxLength" : <integer>, // C? No more than this many characters
"
"
">,
">",
">",
">",
" },
"
"answerValueSet" : { canonical(ValueSet) }, // C? Valueset containing permitted answers
"answerOption" : [{ // C? Permitted answer
// value[x]: Answer value. One of these 6:
"valueInteger" : <integer>,
"valueDate" : "<date>",
"valueTime" : "<time>",
"valueString" : "<string>",
"valueCoding" : { Coding },
"valueReference" : { Reference(Any) },
"initialSelected" : <boolean> // Whether option is selected by default
}],
"
"initial" : [{ // C? Initial value(s) when item is first rendered
// value[x]: Actual value for initializing the question. One of these 12:
"valueBoolean" : <boolean>
"valueDecimal" : <decimal>
"valueInteger" : <integer>
"valueDate" : "<date>"
"valueDateTime" : "<dateTime>"
"valueTime" : "<time>"
"valueString" : "<string>"
"valueUri" : "<uri>"
"valueAttachment" : { Attachment }
"valueCoding" : { Coding }
"valueQuantity" : { Quantity }
"valueReference" : { Reference(Any) }
}],
"item" : [{ Content as for Questionnaire.item }] // C? Nested questionnaire items
}]
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .[ a fhir:Questionnaire; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension
fhir:fhir:Questionnaire.url [ uri ]; # 0..1 Canonical identifier for this questionnaire, represented as a URI (globally unique) fhir:Questionnaire.identifier [ Identifier ], ... ; # 0..* Additional identifier for the questionnaire fhir:Questionnaire.version [ string ]; # 0..1 Business version of the questionnaire fhir:Questionnaire.name [ string ]; # 0..1 Name for this questionnaire (computer friendly) fhir:Questionnaire.title [ string ]; # 0..1 Name for this questionnaire (human friendly) fhir:Questionnaire.derivedFrom [ canonical(Questionnaire) ], ... ; # 0..* Instantiates protocol or definition fhir:Questionnaire.status [ code ]; # 1..1 draft | active | retired | unknownfhir:fhir:Questionnaire.experimental [ boolean ]; # 0..1 For testing purposes, not real usage fhir:Questionnaire.subjectType [ code ], ... ; # 0..* Resource that can be subject of QuestionnaireResponse fhir:Questionnaire.date [ dateTime ]; # 0..1 Date last changed fhir:Questionnaire.publisher [ string ]; # 0..1 Name of the publisher (organization or individual) fhir:Questionnaire.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher fhir:Questionnaire.description [ markdown ]; # 0..1 Natural language description of the questionnaire fhir:Questionnaire.useContext [ UsageContext ], ... ; # 0..* The context that the content is intended to support fhir:Questionnaire.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for questionnaire (if applicable) fhir:Questionnaire.purpose [ markdown ]; # 0..1 Why this questionnaire is defined fhir:Questionnaire.copyright [ markdown ]; # 0..1 Use and/or publishing restrictions fhir:Questionnaire.approvalDate [ date ]; # 0..1 When the questionnaire was approved by publisher fhir:Questionnaire.lastReviewDate [ date ]; # 0..1 When the questionnaire was last reviewed fhir:Questionnaire.effectivePeriod [ Period ]; # 0..1 When the questionnaire is expected to be used fhir:Questionnaire.code [ Coding ], ... ; # 0..* Concept that represents the overall questionnaire fhir:Questionnaire.item [ # 0..* Questions and sections within the Questionnaire fhir:Questionnaire.item.linkId [ string ]; # 1..1 Unique id for item in questionnairefhir:<a href="questionnaire-definitions.html#Questionnaire.item.definition" title="A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be derived from the definition:fhir:* options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition, and some are require for efficient implementation (e.g. enforcing invariants)." class="dict">Questionnaire.item.definition * answerValueSet (ElementDefinition.binding) * options (ElementDefinition.binding)." class="dict">Questionnaire.item.definition [ uri ]; # 0..1 ElementDefinition - details for the item fhir:Questionnaire.item.code [ Coding ], ... ; # 0..* Corresponding concept for this item in a terminology fhir:Questionnaire.item.prefix [ string ]; # 0..1 E.g. "1(a)", "2.5.3" fhir:Questionnaire.item.text [ string ]; # 0..1 Primary text for the item fhir:Questionnaire.item.type [ code ]; # 1..1 group | display | boolean | decimal | integer | date | dateTime + fhir:Questionnaire.item.enableWhen [ # 0..* Only allow data when fhir:Questionnaire.item.enableWhen.question [ string ]; # 1..1 Question that determines whether item is enabled fhir:Questionnaire.item.enableWhen.operator [ code ]; # 1..1 exists | = | != | > | < | >= | <= # Questionnaire.item.enableWhen.answer[x] : 1..1 Value for question comparison based on operator. One of these 10 fhir:Questionnaire.item.enableWhen.answerBoolean [ boolean ] fhir:Questionnaire.item.enableWhen.answerDecimal [ decimal ] fhir:Questionnaire.item.enableWhen.answerInteger [ integer ] fhir:Questionnaire.item.enableWhen.answerDate [ date ] fhir:Questionnaire.item.enableWhen.answerDateTime [ dateTime ] fhir:Questionnaire.item.enableWhen.answerTime [ time ] fhir:Questionnaire.item.enableWhen.answerString [ string ] fhir:Questionnaire.item.enableWhen.answerCoding [ Coding ] fhir:Questionnaire.item.enableWhen.answerQuantity [ Quantity ] fhir:Questionnaire.item.enableWhen.answerReference [ Reference(Any) ] ], ...; fhir:Questionnaire.item.enableBehavior [ code ]; # 0..1 all | any fhir:Questionnaire.item.required [ boolean ]; # 0..1 Whether the item must be included in data resultsfhir:fhir:Questionnaire.item.repeats [ boolean ]; # 0..1 Whether the item may repeat fhir:Questionnaire.item.readOnly [ boolean ]; # 0..1 Don't allow human editing fhir:Questionnaire.item.maxLength [ integer ]; # 0..1 No more than this many charactersfhir: fhir: # . One of these 5 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:fhir:Questionnaire.item.answerValueSet [ canonical(ValueSet) ]; # 0..1 Valueset containing permitted answers fhir:Questionnaire.item.answerOption [ # 0..* Permitted answer # Questionnaire.item.answerOption.value[x] : 1..1 Answer value. One of these 6 fhir:Questionnaire.item.answerOption.valueInteger [ integer ] fhir:Questionnaire.item.answerOption.valueDate [ date ] fhir:Questionnaire.item.answerOption.valueTime [ time ] fhir:Questionnaire.item.answerOption.valueString [ string ] fhir:Questionnaire.item.answerOption.valueCoding [ Coding ] fhir:Questionnaire.item.answerOption.valueReference [ Reference(Any) ] fhir:Questionnaire.item.answerOption.initialSelected [ boolean ]; # 0..1 Whether option is selected by default ], ...; fhir:Questionnaire.item.initial [ # 0..* Initial value(s) when item is first rendered # Questionnaire.item.initial.value[x] : 1..1 Actual value for initializing the question. One of these 12 fhir:Questionnaire.item.initial.valueBoolean [ boolean ] fhir:Questionnaire.item.initial.valueDecimal [ decimal ] fhir:Questionnaire.item.initial.valueInteger [ integer ] fhir:Questionnaire.item.initial.valueDate [ date ] fhir:Questionnaire.item.initial.valueDateTime [ dateTime ] fhir:Questionnaire.item.initial.valueTime [ time ] fhir:Questionnaire.item.initial.valueString [ string ] fhir:Questionnaire.item.initial.valueUri [ uri ] fhir:Questionnaire.item.initial.valueAttachment [ Attachment ] fhir:Questionnaire.item.initial.valueCoding [ Coding ] fhir:Questionnaire.item.initial.valueQuantity [ Quantity ] fhir:Questionnaire.item.initial.valueReference [ Reference(Any) ] ], ...; fhir:Questionnaire.item.item [ See Questionnaire.item ], ... ; # 0..* Nested questionnaire items ], ...; ]
Changes since R3
| Questionnaire | |
| Questionnaire.derivedFrom |
|
| Questionnaire.experimental |
|
| Questionnaire.item.enableWhen.operator |
|
| Questionnaire.item.enableWhen.answer[x] |
|
| Questionnaire.item.enableBehavior |
|
| Questionnaire.item.required |
|
| Questionnaire.item.repeats |
|
|
|
|
|
|
|
| Questionnaire.item.answerOption.value[x] |
|
| Questionnaire.item.answerOption.initialSelected |
|
| Questionnaire.item.initial |
|
| Questionnaire.item.initial.value[x] |
|
| Questionnaire.item.enableWhen.hasAnswer |
|
| Questionnaire.item.options |
|
| Questionnaire.item.option |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
See
R2
<-->
R3
<-->
R4
Conversion
Maps
(status
=
6
tests
that
all
execute
ok.
4
of
which
6
fail
round-trip
testing
and
5
r3
resources
are
invalid
(109
errors).
).
Note:
these
have
note
yet
been
updated
to
be
R3
to
R4
execute
.)
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
I TU | DomainResource |
A
structured
set
of
questions
+ Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation + Rule: The link ids for groups and questions must be unique within the questionnaire Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension |
|
|
Σ | 0..1 | uri | Canonical identifier for this questionnaire, represented as a URI (globally unique) |
|
Σ | 0..* | Identifier |
Additional
identifier
for
the
questionnaire
|
|
Σ | 0..1 | string | Business version of the questionnaire |
|
Σ I | 0..1 | string | Name for this questionnaire (computer friendly) |
|
Σ | 0..1 | string | Name for this questionnaire (human friendly) |
|
0..* | canonical ( Questionnaire ) |
Instantiates
protocol
or
definition
|
|
|
?! Σ | 1..1 | code |
draft
|
active
|
retired
|
unknown
PublicationStatus ( Required ) |
|
|
0..1 | boolean | For testing purposes, not real usage |
|
Σ | 0..* | code |
Resource
that
can
be
subject
of
QuestionnaireResponse
ResourceType ( Required ) |
|
Σ | 0..1 | dateTime | Date last changed |
|
Σ | 0..1 | string | Name of the publisher (organization or individual) |
|
Σ | 0..* | ContactDetail |
Contact
details
for
the
publisher
|
|
0..1 | markdown | Natural language description of the questionnaire | |
|
Σ | 0..* | UsageContext |
The
context
that
the
content
is
intended
to
support
|
|
Σ | 0..* | CodeableConcept |
Intended
jurisdiction
for
questionnaire
(if
applicable)
Jurisdiction |
|
0..1 | markdown | Why this questionnaire is defined | |
|
0..1 | markdown | Use and/or publishing restrictions | |
|
0..1 | date | When the questionnaire was approved by publisher | |
|
0..1 | date | When the questionnaire was last reviewed | |
|
Σ | 0..1 | Period | When the questionnaire is expected to be used |
|
Σ | 0..* | Coding |
Concept
that
represents
the
overall
questionnaire
Questionnaire Question Codes ( Example ) |
|
I | 0..* | BackboneElement |
Questions
and
sections
within
the
Questionnaire
+ + + + Rule: Only 'choice' items can have + + + Rule: Read-only can't be specified for "display" items + Rule: Maximum length can only be declared for simple question types + Rule: If there are more than one enableWhen, enableBehavior must be specified + Rule: Can only have multiple initial values for repeating items |
|
1..1 | string | Unique id for item in questionnaire | |
|
0..1 | uri | ElementDefinition - details for the item | |
|
I | 0..* | Coding |
Corresponding
concept
for
this
item
in
a
terminology
Questionnaire Question Codes ( Example ) |
|
0..1 | string | E.g. "1(a)", "2.5.3" | |
|
0..1 | string | Primary text for the item | |
|
1..1 | code |
group
|
display
|
boolean
|
decimal
|
integer
|
date
|
dateTime
+
QuestionnaireItemType ( Required ) |
|
|
?! I | 0..* | BackboneElement |
Only
allow
data
when
+ Rule: If the operator is 'exists', the value must be a boolean |
|
1..1 | string | Question that determines whether item is enabled | |
|
1..1 | code |
exists
|
=
|
!=
|
>
|
<
|
>=
|
<=
QuestionnaireItemOperator ( Required ) |
|
|
I | 1..1 |
Value
for
question
comparison
based
on
operator
Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
Coding | |||
|
Quantity | |||
|
Reference ( Any ) | |||
|
I | 0..1 | code |
all
|
any
EnableWhenBehavior ( Required ) |
|
I | 0..1 | boolean | Whether the item must be included in data results |
|
I | 0..1 | boolean | Whether the item may repeat |
|
I | 0..1 | boolean | Don't allow human editing |
|
I | 0..1 | integer | No more than this many characters |
|
I | 0..1 | canonical ( ValueSet ) | Valueset containing permitted answers |
|
I | 0..* | BackboneElement |
Permitted
answer
|
|
1..1 |
Answer
value
Questionnaire Answer Codes ( Example ) |
||
|
integer | |||
|
date | |||
|
time | |||
|
string | |||
|
Coding | |||
| Reference ( Any ) | |||
|
0..1 | boolean | Whether option is selected by default | |
|
I | 0..* | BackboneElement |
Initial
value(s)
when
item
is
first
rendered
|
|
1..1 |
Actual
value
for
initializing
the
question
Questionnaire Answer Codes ( Example ) |
||
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
uri | |||
|
Attachment | |||
|
Coding | |||
|
Quantity | |||
|
Reference ( Any ) | |||
|
I | 0..* | see item |
Nested
questionnaire
items
|
Documentation
for
this
format
|
||||
XML Template
<Questionnaire xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension -->
<<url value="[uri]"/><!-- 0..1 Canonical identifier for this questionnaire, represented as a URI (globally unique) --> <identifier><!-- 0..* Identifier Additional identifier for the questionnaire --></identifier> <version value="[string]"/><!-- 0..1 Business version of the questionnaire --><<name value="[string]"/><!--0..1 Name for this questionnaire (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this questionnaire (human friendly) --> <derivedFrom><!-- 0..* canonical(Questionnaire) Instantiates protocol or definition --></derivedFrom> <status value="[code]"/><!-- 1..1 draft | active | retired | unknown -->
<<experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage --> <subjectType value="[code]"/><!-- 0..* Resource that can be subject of QuestionnaireResponse --> <date value="[dateTime]"/><!-- 0..1 Date last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the questionnaire --> <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for questionnaire (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this questionnaire is defined --> <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions --> <approvalDate value="[date]"/><!-- 0..1 When the questionnaire was approved by publisher --> <lastReviewDate value="[date]"/><!-- 0..1 When the questionnaire was last reviewed --> <effectivePeriod><!-- 0..1 Period When the questionnaire is expected to be used --></effectivePeriod> <code><!-- 0..* Coding Concept that represents the overall questionnaire --></code> <item> <!--0..* Questions and sections within the Questionnaire --> <linkId value="[string]"/><!-- 1..1 Unique id for item in questionnaire -->
<<a href="questionnaire-definitions.html#Questionnaire.item.definition" title="A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be derived from the definition:<* options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition, and some are require for efficient implementation (e.g. enforcing invariants)." class="dict"> * answerValueSet (ElementDefinition.binding) * options (ElementDefinition.binding)." class="dict">definition value="[uri]"/><!-- 0..1 ElementDefinition - details for the item --> <code><!--0..* Coding Corresponding concept for this item in a terminology --></code> <prefix value="[string]"/><!-- 0..1 E.g. "1(a)", "2.5.3" --> <text value="[string]"/><!-- 0..1 Primary text for the item --> <type value="[code]"/><!-- 1..1 group | display | boolean | decimal | integer | date | dateTime + --> <enableWhen> <!-- 0..* Only allow data when --> <question value="[string]"/><!-- 1..1 Question that determines whether item is enabled --> <operator value="[code]"/><!-- 1..1 exists | = | != | > | < | >= | <= --> <answer[x]><!--
1..1 boolean|decimal|integer|date|dateTime|time|string|Coding| Quantity|Reference(Any) Value for question comparison based on operator --></answer[x]> </enableWhen> <enableBehavior value="[code]"/><!--
0..1 all | any --> <required value="[boolean]"/><!--
0..1 Whether the item must be included in data results -->
<<repeats value="[boolean]"/><!--0..1 Whether the item may repeat --> <readOnly value="[boolean]"/><!--
0..1 Don't allow human editing --> <maxLength value="[integer]"/><!--
0..1 No more than this many characters -->
<</options> < <</value[x]> < </option> <<answerValueSet><!--0..1 canonical(ValueSet) Valueset containing permitted answers --></answerValueSet> <answerOption> <!--
0..* Permitted answer --> <value[x]><!-- 1..1 integer|date|time|string|Coding|Reference(Any) Answer value --></value[x]> <initialSelected value="[boolean]"/><!-- 0..1 Whether option is selected by default --> </answerOption> <initial> <!--
0..* Initial value(s) when item is first rendered --> <value[x]><!-- 1..1 boolean|decimal|integer|date|dateTime|time|string|uri| Attachment|Coding|Quantity|Reference(Any) Actual value for initializing the question --></value[x]> </initial> <item><!--
0..* Content as for Questionnaire.item Nested questionnaire items --></item> </item> </Questionnaire>
JSON Template
{
"resourceType" : "Questionnaire",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"
"url" : "<uri>", // Canonical identifier for this questionnaire, represented as a URI (globally unique)
"identifier" : [{ Identifier }], // Additional identifier for the questionnaire
"version" : "<string>", // Business version of the questionnaire
"
"name" : "<string>", // C? Name for this questionnaire (computer friendly)
"title" : "<string>", // Name for this questionnaire (human friendly)
"
"derivedFrom" : [{ canonical(Questionnaire) }], // Instantiates protocol or definition
"status" : "<code>", // R! draft | active | retired | unknown
"
"experimental" : <boolean>, // For testing purposes, not real usage
"subjectType" : ["<code>"], // Resource that can be subject of QuestionnaireResponse
"date" : "<dateTime>", // Date last changed
"publisher" : "<string>", // Name of the publisher (organization or individual)
"contact" : [{ ContactDetail }], // Contact details for the publisher
"description" : "<markdown>", // Natural language description of the questionnaire
"useContext" : [{ UsageContext }], // The context that the content is intended to support
"jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for questionnaire (if applicable)
"purpose" : "<markdown>", // Why this questionnaire is defined
"copyright" : "<markdown>", // Use and/or publishing restrictions
"approvalDate" : "<date>", // When the questionnaire was approved by publisher
"lastReviewDate" : "<date>", // When the questionnaire was last reviewed
"effectivePeriod" : { Period }, // When the questionnaire is expected to be used
"code" : [{ Coding }], // Concept that represents the overall questionnaire
"item" : [{ // C? Questions and sections within the Questionnaire
"linkId" : "<string>", // R! Unique id for item in questionnaire
"<a href="questionnaire-definitions.html#Questionnaire.item.definition" title="A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be derived from the definition:
"* options (ElementDefinition.binding)
Any information provided in these elements on a Questionnaire Item overrides the information from the definition, and some are require for efficient implementation (e.g. enforcing invariants)." class="dict">definition
* answerValueSet (ElementDefinition.binding)
* options (ElementDefinition.binding)." class="dict">definition" : "<uri>", // ElementDefinition - details for the item
"code" : [{ Coding }], // C? Corresponding concept for this item in a terminology
"prefix" : "<string>", // E.g. "1(a)", "2.5.3"
"text" : "<string>", // Primary text for the item
"type" : "<code>", // R! group | display | boolean | decimal | integer | date | dateTime +
"enableWhen" : [{ // Only allow data when
"question" : "<string>", // R! Question that determines whether item is enabled
"operator" : "<code>", // R! exists | = | != | > | < | >= | <=
// answer[x]: Value for question comparison based on operator. One of these 10:
"answerBoolean" : <boolean>
"answerDecimal" : <decimal>
"answerInteger" : <integer>
"answerDate" : "<date>"
"answerDateTime" : "<dateTime>"
"answerTime" : "<time>"
"answerString" : "<string>"
"answerCoding" : { Coding }
"answerQuantity" : { Quantity }
"answerReference" : { Reference(Any) }
}],
"enableBehavior" : "<code>", // C? all | any
"required" : <boolean>, // C? Whether the item must be included in data results
"
"repeats" : <boolean>, // C? Whether the item may repeat
"readOnly" : <boolean>, // C? Don't allow human editing
"maxLength" : <integer>, // C? No more than this many characters
"
"
">,
">",
">",
">",
" },
"
"answerValueSet" : { canonical(ValueSet) }, // C? Valueset containing permitted answers
"answerOption" : [{ // C? Permitted answer
// value[x]: Answer value. One of these 6:
"valueInteger" : <integer>,
"valueDate" : "<date>",
"valueTime" : "<time>",
"valueString" : "<string>",
"valueCoding" : { Coding },
"valueReference" : { Reference(Any) },
"initialSelected" : <boolean> // Whether option is selected by default
}],
"
"initial" : [{ // C? Initial value(s) when item is first rendered
// value[x]: Actual value for initializing the question. One of these 12:
"valueBoolean" : <boolean>
"valueDecimal" : <decimal>
"valueInteger" : <integer>
"valueDate" : "<date>"
"valueDateTime" : "<dateTime>"
"valueTime" : "<time>"
"valueString" : "<string>"
"valueUri" : "<uri>"
"valueAttachment" : { Attachment }
"valueCoding" : { Coding }
"valueQuantity" : { Quantity }
"valueReference" : { Reference(Any) }
}],
"item" : [{ Content as for Questionnaire.item }] // C? Nested questionnaire items
}]
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .[ a fhir:Questionnaire; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension
fhir:fhir:Questionnaire.url [ uri ]; # 0..1 Canonical identifier for this questionnaire, represented as a URI (globally unique) fhir:Questionnaire.identifier [ Identifier ], ... ; # 0..* Additional identifier for the questionnaire fhir:Questionnaire.version [ string ]; # 0..1 Business version of the questionnaire fhir:Questionnaire.name [ string ]; # 0..1 Name for this questionnaire (computer friendly) fhir:Questionnaire.title [ string ]; # 0..1 Name for this questionnaire (human friendly) fhir:Questionnaire.derivedFrom [ canonical(Questionnaire) ], ... ; # 0..* Instantiates protocol or definition fhir:Questionnaire.status [ code ]; # 1..1 draft | active | retired | unknownfhir:fhir:Questionnaire.experimental [ boolean ]; # 0..1 For testing purposes, not real usage fhir:Questionnaire.subjectType [ code ], ... ; # 0..* Resource that can be subject of QuestionnaireResponse fhir:Questionnaire.date [ dateTime ]; # 0..1 Date last changed fhir:Questionnaire.publisher [ string ]; # 0..1 Name of the publisher (organization or individual) fhir:Questionnaire.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher fhir:Questionnaire.description [ markdown ]; # 0..1 Natural language description of the questionnaire fhir:Questionnaire.useContext [ UsageContext ], ... ; # 0..* The context that the content is intended to support fhir:Questionnaire.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for questionnaire (if applicable) fhir:Questionnaire.purpose [ markdown ]; # 0..1 Why this questionnaire is defined fhir:Questionnaire.copyright [ markdown ]; # 0..1 Use and/or publishing restrictions fhir:Questionnaire.approvalDate [ date ]; # 0..1 When the questionnaire was approved by publisher fhir:Questionnaire.lastReviewDate [ date ]; # 0..1 When the questionnaire was last reviewed fhir:Questionnaire.effectivePeriod [ Period ]; # 0..1 When the questionnaire is expected to be used fhir:Questionnaire.code [ Coding ], ... ; # 0..* Concept that represents the overall questionnaire fhir:Questionnaire.item [ # 0..* Questions and sections within the Questionnaire fhir:Questionnaire.item.linkId [ string ]; # 1..1 Unique id for item in questionnairefhir:<a href="questionnaire-definitions.html#Questionnaire.item.definition" title="A reference to an [[[ElementDefinition]]] that provides the details for the item. If a definition is provided, then the following element values can be derived from the definition:fhir:* options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition, and some are require for efficient implementation (e.g. enforcing invariants)." class="dict">Questionnaire.item.definition * answerValueSet (ElementDefinition.binding) * options (ElementDefinition.binding)." class="dict">Questionnaire.item.definition [ uri ]; # 0..1 ElementDefinition - details for the item fhir:Questionnaire.item.code [ Coding ], ... ; # 0..* Corresponding concept for this item in a terminology fhir:Questionnaire.item.prefix [ string ]; # 0..1 E.g. "1(a)", "2.5.3" fhir:Questionnaire.item.text [ string ]; # 0..1 Primary text for the item fhir:Questionnaire.item.type [ code ]; # 1..1 group | display | boolean | decimal | integer | date | dateTime + fhir:Questionnaire.item.enableWhen [ # 0..* Only allow data when fhir:Questionnaire.item.enableWhen.question [ string ]; # 1..1 Question that determines whether item is enabled fhir:Questionnaire.item.enableWhen.operator [ code ]; # 1..1 exists | = | != | > | < | >= | <= # Questionnaire.item.enableWhen.answer[x] : 1..1 Value for question comparison based on operator. One of these 10 fhir:Questionnaire.item.enableWhen.answerBoolean [ boolean ] fhir:Questionnaire.item.enableWhen.answerDecimal [ decimal ] fhir:Questionnaire.item.enableWhen.answerInteger [ integer ] fhir:Questionnaire.item.enableWhen.answerDate [ date ] fhir:Questionnaire.item.enableWhen.answerDateTime [ dateTime ] fhir:Questionnaire.item.enableWhen.answerTime [ time ] fhir:Questionnaire.item.enableWhen.answerString [ string ] fhir:Questionnaire.item.enableWhen.answerCoding [ Coding ] fhir:Questionnaire.item.enableWhen.answerQuantity [ Quantity ] fhir:Questionnaire.item.enableWhen.answerReference [ Reference(Any) ] ], ...; fhir:Questionnaire.item.enableBehavior [ code ]; # 0..1 all | any fhir:Questionnaire.item.required [ boolean ]; # 0..1 Whether the item must be included in data resultsfhir:fhir:Questionnaire.item.repeats [ boolean ]; # 0..1 Whether the item may repeat fhir:Questionnaire.item.readOnly [ boolean ]; # 0..1 Don't allow human editing fhir:Questionnaire.item.maxLength [ integer ]; # 0..1 No more than this many charactersfhir: fhir: # . One of these 5 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:fhir:Questionnaire.item.answerValueSet [ canonical(ValueSet) ]; # 0..1 Valueset containing permitted answers fhir:Questionnaire.item.answerOption [ # 0..* Permitted answer # Questionnaire.item.answerOption.value[x] : 1..1 Answer value. One of these 6 fhir:Questionnaire.item.answerOption.valueInteger [ integer ] fhir:Questionnaire.item.answerOption.valueDate [ date ] fhir:Questionnaire.item.answerOption.valueTime [ time ] fhir:Questionnaire.item.answerOption.valueString [ string ] fhir:Questionnaire.item.answerOption.valueCoding [ Coding ] fhir:Questionnaire.item.answerOption.valueReference [ Reference(Any) ] fhir:Questionnaire.item.answerOption.initialSelected [ boolean ]; # 0..1 Whether option is selected by default ], ...; fhir:Questionnaire.item.initial [ # 0..* Initial value(s) when item is first rendered # Questionnaire.item.initial.value[x] : 1..1 Actual value for initializing the question. One of these 12 fhir:Questionnaire.item.initial.valueBoolean [ boolean ] fhir:Questionnaire.item.initial.valueDecimal [ decimal ] fhir:Questionnaire.item.initial.valueInteger [ integer ] fhir:Questionnaire.item.initial.valueDate [ date ] fhir:Questionnaire.item.initial.valueDateTime [ dateTime ] fhir:Questionnaire.item.initial.valueTime [ time ] fhir:Questionnaire.item.initial.valueString [ string ] fhir:Questionnaire.item.initial.valueUri [ uri ] fhir:Questionnaire.item.initial.valueAttachment [ Attachment ] fhir:Questionnaire.item.initial.valueCoding [ Coding ] fhir:Questionnaire.item.initial.valueQuantity [ Quantity ] fhir:Questionnaire.item.initial.valueReference [ Reference(Any) ] ], ...; fhir:Questionnaire.item.item [ See Questionnaire.item ], ... ; # 0..* Nested questionnaire items ], ...; ]
Changes
since
DSTU2
Release
3
| Questionnaire | |
| Questionnaire.derivedFrom |
|
| Questionnaire.experimental |
|
| Questionnaire.item.enableWhen.operator |
|
| Questionnaire.item.enableWhen.answer[x] |
|
| Questionnaire.item.enableBehavior |
|
| Questionnaire.item.required |
|
| Questionnaire.item.repeats |
|
|
|
|
|
|
|
| Questionnaire.item.answerOption.value[x] |
|
| Questionnaire.item.answerOption.initialSelected |
|
| Questionnaire.item.initial |
|
| Questionnaire.item.initial.value[x] |
|
| Questionnaire.item.enableWhen.hasAnswer |
|
| Questionnaire.item.options |
|
| Questionnaire.item.option |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
See
R2
<-->
R3
<-->
R4
Conversion
Maps
(status
=
6
tests
that
all
execute
ok.
4
of
which
6
fail
round-trip
testing
and
5
r3
resources
are
invalid
(109
errors).
).
Note:
these
have
note
yet
been
updated
to
be
R3
to
R4
execute
.)
Alternate
See
the
Profiles
&
Extensions
and
the
alternate
definitions:
Master
Definition
XML
+
JSON
,
XML
Schema
/
Schematron
+
JSON
Schema
,
ShEx
(for
Turtle
)
+
see
the
extensions
&
the
dependency
analysis
| Path | Definition | Type | Reference |
|---|---|---|---|
| Questionnaire.status | The lifecycle status of an artifact. | Required | PublicationStatus |
| Questionnaire.subjectType | One of the resource types defined as part of this version of FHIR. | Required | Resource Types |
| Questionnaire.jurisdiction |
Countries
and
regions
within
which
this
artifact
is
targeted
for
|
Extensible | Jurisdiction ValueSet |
|
Questionnaire.code
Questionnaire.item.code |
Codes
for
questionnaires,
groups
and
individual
|
Example |
|
| Questionnaire.item.type |
Distinguishes
groups
from
questions
and
display
text
and
indicates
data
type
for
|
Required | QuestionnaireItemType |
| Questionnaire.item.enableWhen.operator |
The
criteria
by
which
a
question
is
|
Required | QuestionnaireItemOperator |
| Questionnaire.item.enableWhen.answer[x] | Allowed values to answer questions. | Example |
|
| Questionnaire.item.enableBehavior |
Controls
how
multiple
enableWhen
values
are
interpreted
-
whether
all
or
any
must
be
|
Required | EnableWhenBehavior |
|
|
Allowed values to answer questions. | Example |
|
| Questionnaire.item.initial.value[x] | Allowed values to answer questions. | Example |
|
| id | Level | Location | Description | Expression |
| que-0 | Warning | (base) | Name should be usable as an identifier for the module by machine processing applications such as code generation | name.matches('[A-Z]([A-Za-z0-9_]){0,254}') |
|
que-1
|
Rule | Questionnaire.item |
Group
items
must
have
nested
items,
display
items
cannot
have
nested
items
|
|
|
|
Rule
|
(base) |
The
link
ids
for
groups
and
questions
must
be
unique
within
the
questionnaire
|
|
|
que-3
|
Rule | Questionnaire.item |
Display
items
cannot
have
a
"code"
asserted
|
|
|
que-4
|
Rule | Questionnaire.item |
A
question
cannot
have
both
|
|
|
que-5
|
Rule | Questionnaire.item |
Only
'choice'
items
can
have
|
|
|
que-6
|
Rule | Questionnaire.item |
Required
and
repeat
aren't
permitted
for
display
items
|
|
|
que-7
|
Rule | Questionnaire.item.enableWhen |
If
the
operator
is
'exists',
the
value
must
be
a
boolean
|
|
|
que-8
|
Rule | Questionnaire.item |
Initial
values
can't
be
specified
for
groups
or
display
items
|
|
|
que-9
|
Rule | Questionnaire.item |
Read-only
can't
be
specified
for
"display"
items
|
|
| que-10 | Rule | Questionnaire.item | Maximum length can only be declared for simple question types | (type in ('boolean' | 'decimal' | 'integer' | 'string' | 'text' | 'url' | 'open-choice')) or maxLength.empty() |
| que-11 | Rule | Questionnaire.item | If one or more answerOption is present, initial[x] must be missing | answerOption.empty() or initial.empty() |
| que-12 | Rule | Questionnaire.item | If there are more than one enableWhen, enableBehavior must be specified | enableWhen.count() > 2 implies enableBehavior.exists() |
| que-13 | Rule | Questionnaire.item | Can only have multiple initial values for repeating items | repeats=true or initial.count() <= 1 |
,
CDA
Documents
frequently
used
named
sections
with
Observations
to
model
Questionnaires.
Such
use
cases
should
now
use
the
Questionnaire
Resource
instead.
There is considerable overlap between the information covered by Questionnaires and other Resources (especially FamilyMemberHistory , MedicationStatement , Observation , Procedure , etc.). Questionnaire's flexible structure can easily be misused to capture any data, even data that should be captured as separate Resources. The choice between using Questionnaires or separate Resources may be dictated by the procedure of collection and recording; e.g. if the data is captured as a physician-agreed (electronic) form, it might be impossible or undesirable to distill separate resources from it and capturing the data in a Questionnaire would be most appropriate.
However, data captured only in Questionnaires can be difficult to query after-the-fact. Queries against other Resources will not return data captured only in Questionnaires and querying against Questionnaires directly might not find all desired data, depending on how the questions may have been phrased or encoded over time or by different clinicians. Moreover, interoperability of such Questionnaires is limited, as interpretation of its contents is only known to the circle of parties that were involved in its definition: encoding data from such Questionnaires using more specific resources increases the availability of the information they contain.
It
is
entirely
possible
for
data
to
exist
in
both
QuestionnaireResponse
and
in
other
resources.
For
example,
data
may
be
captured
in
QuestionnaireResponse
as
part
of
an
intake
questionnaire.
That
data
may
then
be
propagated
into
the
Patient
resource
(demographics),
FamilyMemberHistory
,
AllergyIntolerance
,
MedicationStatement
and
Observation
resources
to
allow
the
data
to
be
queried
and
analyzed.
The
original
QuestionnaireResponse
instance
can
be
retained
for
traceability
purposes.
If
desired,
a
Provenance
resource
can
be
used
to
identify
the
Questionnaire
as
the
data
source
for
the
other
resources.
For
example,
if
a
questionnaire
question
asks
"what
is
your
weight",
an
Observation
with
the
appropriate
Observation.code
and
the
specified
answer
as
the
Observation.valueQuantity
can
be
created.
A Questionnaire is built out of two components, Questionnaire and item:
type
element:
type
for
question
items.
Instead,
the
type
conveys
the
data
type
of
the
answer
for
the
question.
If
an
item
isn't
a
'display'
or
a
'group',
then
it's
a
question
which
allows
a
particular
type
of
answer
to
be
gathered.
Questions
may
also
have
nested
content
-
groups
and/or
other
questions.
This
way,
one
can
model
"panels"
of
questions
which
would
only
be
relevant
(and
thus
would
only
be
displayed)
depending
on
the
answers
of
a
parent
question;
e.g.
a
question
"Did
the
patient
receive
treatment
in
the
past
six
months?"
would
contain
a
nested
group
of
questions
asking
for
further
details
about
the
treatment.
See
an
example
from
the
Australian
New
South
Wales
blue
book
Specific controls on dynamic display of groups, questions, etc. based on the answers to other questions is outside the scope of the base resource and are handled using extensions.
Group text is intended to provide a "label" for a collection of nested items. The text will often be rendered in a "heading" style. As such, it should be kept relatively short. Detailed instructions should be conveyed by a nested "display" item. It's not necessary to create groups in order to relate an instruction to a collection of questions - you can simply intermix display items and questions or groups, with the expectation that users will see the display text before encountering the following questions.
Some questionnaires might not provide a full listing of questions, instead relying on a service to interactively sending partially completed forms to a server which generates the next set of questions. As such, some questionnaires might be 'active' but have either no questions or an insufficient set of questions for their purpose. Additional capabilities relating to adaptive questionnaires, including how to clearly distingish such forms from other forms.
Feedback on how best to handle adaptive questionnaires - and how to discover the services that support completing such questionnaires - is welcome.
There
are
three
different
"identifying"
elements
within
Questionnaire:
identifier
,
id
and
linkId
.
Each
serves
very
distinct
purposes:
Questionnaires
can
be
crafted
using
any
questions
the
author
can
conceive
and
can
be
phrased
in
whatever
manner
is
appropriate
or
convenient.
However,
standardization
of
questions
and
the
constraints
enforced
on
the
accompanying
answers
increases
the
ability
to
compare
data
gathered
across
questionnaires.
Items
can
be
directly
linked
to
an
ElementDefinition
using
Questionnaire.item.definition
which
provides
details
for
the
item.
If
a
definition
is
provided,
then
the
following
element
values
can
be
derived
from
the
definition:
Any information provided in these elements overrides the information from the definition, and some are always required to be populated so that invariants can be enforced, etc. The url refers to a an ElementDefinition in StructureDefinition , and always starts with the canonical URL for the target resource. When referring to a StructureDefinition, a fragment identifier is used to specify the element definition by its id (Element.id). E.g. http://hl7.org/fhir/StructureDefinition/Observation#Observation.value[x]. In the absence of a fragment identifier, the first/root element definition in the target is the matching element definition. Examples:
| Value of definition | Explanation |
http://hl7.org/fhir/StructureDefinition/Observation#Observation.comment
|
A
reference
to
the
standard
Observation
element
comment
|
http://example.org/definitions/xxx
| A reference to the logical model "xxx" that represents a data element |
http://example.org/StructureDefinition/Oedema#Observation.category:XXX
|
A
reference
to
slice
XXX
on
the
Observation
category
element
on
an
Oedema
Scale
profile
|
http://example.org/StructureDefinition/Oedema|2.0#Observation.category:XXX
|
A
reference
to
slice
XXX
on
the
Observation
category
element
on
an
Oedema
Scale
profile,
specifying
version
2.0
|
The definitions may also be used to automatically pre-populate answers, or extract data from a corresponding pre-existing QuestionnaireResponse resource.
NOTE: Even if a standard question definition is provided , information such as the question text, data type and value set SHOULD still be declared for the question. Systems processing the questionnaire might not have access to or support the ability to look up the question definitions from external sources. If the information is not included in-line within the questionnaire, other systems might not be able to render or use the Questionnaire.
If an external definition is included along with question information such as question text, data type or value set, it is expected that the content for the question and the referenced definition would be in alignment. However, FHIR does not dictate what degree of alignment is required; e.g. Does the question text need to match exactly? Is it legitimate for a question to constrain the allowed value set of possible answers? These rules will need to be established within implementation environments.
The codes for the data type for each question are slightly different than the data types allowed in the QuestionnaireResponse resource. Where the names are the same (ignoring case), the "answer" must use the specified type. Where the names are different, the mappings are as follows:
| Questionnaire AnswerFormat code | QuestionnaireResponse data type |
|---|---|
| text | string |
| url | uri |
| choice | Coding |
| open-choice | Coding (if choosing from one of the listed choices) or string (if a different value is provided) |
Many
questionnaires
place
constraints
on
the
allowed
list
of
values
for
a
given
question.
FHIR
supports
this
notion
through
the
or
the
item.options
item.answerValueSet
element.
item.option
item.answerOption
The
"option"
"answerOption"
mechanism
is
simplest
-
all
options
possible
answers
are
listed
in-line
with
the
question
using
the
element.
Maintenance
of
the
set
of
permitted
question
answers
involves
maintenance
of
the
questionnaire
itself.
item.option
item.answerOption
The
"options"
"answerValueSet"
mechanism
is
more
sophisticated.
Rather
than
listing
the
options
possible
answers
directly,
the
element
item.options
item.answerValueSet
points
refers
to
a
ValueSet
resource.
This
approach
adds
complexity
for
questionnaires
having
a
simple
list
of
strings
as
choices
for
a
question,
but
provides
several
benefits,
including:
In
many
cases,
the
set
of
code
choices
will
be
specific
to
a
given
questionnaire
and
should
be
maintained
as
part
of
the
questionnaire.
In
this
case,
the
referenced
ValueSet
can
be
included
as
a
contained
resource.
All
contained
ValueSets
are
listed
together
and
then
are
referenced
by
the
individual
questions
as
necessary.
Alternatively,
the
element
can
reference
the
value
set
in
a
version-specific
manner.
This
ensures
that
the
Questionnaire
will
not
adopt
a
new
version
of
the
referenced
value
set
without
revising
the
Questionnaire
to
point
to
that
new
version
-
putting
the
author
of
the
Questionnaire
in
control
of
any
changes.
item.options
item.answerValueSet
Many questions have a common set of possible codes for their answer. These value sets may be useful to help, and when referenced by full URL, do not need to be provided as part of the questionnaire:
In some questionnaires, it may be possible to respond to a question with multiple types of answers. For example, capturing a coded answer plus free text, capturing a coded value plus a numeric priority, etc. In FHIR, this is handled through nested questions. Each question has a single data type. However, each question can have nested child questions. These nested child questions can have text (e.g. "Please specify") or can have no text at all if the appropriate guidance is provided by the parent question or group.
Many
questionnaires
involve
computations
on
questionnaire
answers,
e.g.
tabulating
scores.
To
help
with
associating
numeric
values
to
coded
answers,
there
are
two
extensions
defined
-
one
for
defining
the
extension
iso21090-ordinal-value
can
be
used
to
define
the
numeric
weighting
of
a
code
defined
in
a
value
set
-
valueset-ordinalValue
and
or
in
the
other
for
defining
a
code
that
can
appear
within
a
Coding
itself
-
iso21090-CO-value
.
questionnaire
itself.
In addition, there are extensions for defining the dynamic value of an element using expressions. For more information, see the Using Expressions and Documentation Template topics in the Clinical Reasoning module.
The capabilities of the Questionnaire resource are fairly simple and try to adhere to what most systems that deal with questionnaires would be capable of. However, there are lots of systems that require more sophisticated capabilities, such as:
Extensions
have
been
defined
for
all
of
these
purposes
and
many
more.
(Questionnaire
has
the
most
'core'
extensions
of
any
resource
to-date.)
A
list
of
these
extensions
can
be
found
here
.
However,
some
of
the
extensions
are
complex
and
work
together
in
particular
ways.
To
support
more
advanced
questionnaire
implementation,
the
Structured
Data
Capture
(SDC)
implementation
guide
has
been
created
to
provide
non-country-specific
guidance
on
the
use
of
most
of
these
extensions
and
sets
expectations
for
systems
wishing
to
support
more
complex
forms.
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
| Name | Type | Description | Expression | In Common |
| code | token | A code that corresponds to one of its items in the questionnaire | Questionnaire.item.code | |
| context | token | A use context assigned to the questionnaire | (Questionnaire.useContext.value as CodeableConcept) | |
| context-quantity | quantity | A quantity- or range-valued use context assigned to the questionnaire | (Questionnaire.useContext.value as Quantity) | (Questionnaire.useContext.value as Range) | |
| context-type | token | A type of use context assigned to the questionnaire | Questionnaire.useContext.code | |
| context-type-quantity | composite | A use context type and quantity- or range-based value assigned to the questionnaire |
On
Questionnaire.useContext:
context-type: code context-quantity: value.as(Quantity) | value.as(Range) | |
| context-type-value | composite | A use context type and value assigned to the questionnaire |
On
Questionnaire.useContext:
context-type: code context: value.as(CodeableConcept) | |
| date | date | The questionnaire publication date | Questionnaire.date | |
| definition | uri | ElementDefinition - details for the item | Questionnaire.item.definition | |
| description | string | The description of the questionnaire | Questionnaire.description | |
| effective | date | The time during which the questionnaire is intended to be in use | Questionnaire.effectivePeriod | |
| identifier | token | External identifier for the questionnaire | Questionnaire.identifier | |
| jurisdiction | token | Intended jurisdiction for the questionnaire | Questionnaire.jurisdiction | |
| name | string | Computationally friendly name of the questionnaire | Questionnaire.name | |
| publisher | string | Name of the publisher of the questionnaire | Questionnaire.publisher | |
| status | token | The current status of the questionnaire | Questionnaire.status | |
| subject-type | token | Resource that can be subject of QuestionnaireResponse | Questionnaire.subjectType | |
| title | string | The human-friendly name of the questionnaire | Questionnaire.title | |
| url | uri | The uri that identifies the questionnaire | Questionnaire.url | |
| version | token | The business version of the questionnaire | Questionnaire.version |