This
page
is
part
of
the
FHIR
Specification
(v3.0.2:
STU
3).
The
current
version
which
supercedes
this
version
is
5.0.0
.
For
a
full
list
Continuous
Integration
Build
of
available
versions,
see
FHIR
(will
be
incorrect/inconsistent
at
times).
See
the
Directory
of
published
versions
.
Page
versions:
R5
R4B
R4
R3
R2
Responsible
Owner:
FHIR
Infrastructure
Work
Group
|
Normative
|
|
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.)
In addition to its use as a means for capturing data, Questionnaires can also be useful as a mechanism of defining a standardized 'presentation' of data that might already exist. For example, a peri-natal form or diabetes management form. In this use, the benefit is to expose a large volume of data in a predictable way that can be defined outside the user-interface design of the relevant system. The form might allow data to be edited or might be read-only. In some cases, the QuestionnaireResponse might not be intended to be persisted.
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
implementation
guides,
in
particular
the
Structured
Data
Capture
Questionnaire
profile
IG
may
provide
guidance,
extensions
and
operations
that
support
additional
capabilities
for
defining
and
allow
the
definition
of
more
sophisticated
questionnaires
and
forms.
their
corresponding
responses.
Questionnaires are intrinsically bound to QuestionnaireResponses in that a Questionnaire defines the questions and rules for answering them that are used in completing the QuestionnaireResponse. The main difference between them is that Questionnaires define 'permitted' answers and are subject and time-independent, while QuestionnaireResponses define a specific user's answers to a Questionnaire at a particular time-point and are focused on a specific subject. As well, the QuestionnaireResponse doesn't convey any of the rules or 'potential' answers the way Questionnaire does. It only conveys the answers selected by the user.
Questionnaires
differ
from
Lists
because
Lists
group
existing
resources,
while
Questionnaires
group
arbitrary
questions.
In
theory,
a
Questionnaire
could
be
expressed
as
a
List
or
Composition
containing
DataElement
resources.
However,
the
former
would
disregard
the
"wholeness"
associated
with
a
questionnaire
where
questions
must
generally
be
maintained
as
a
single
structure.
The
latter
would
focus
on
rendering
of
the
data
elements
rather
than
organizing
the
capture
of
information.
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
how
data
is
interoperably
compared,
analyzed
or
computed
upon
(typically
managed
using
Observation,
DiagnosticReport
as
well
as
other
resources).
Questionnaires
are
similar
to
ObservationDefinitions
in
that
both
are
about
defining
structures
for
capturing
certain
information
collected.
Observation
and
DiagnosticReport
standardize
setting
constraints
on
what
information
allowed
answers
are.
They
can
also
define
hierarchical
constructs
containing
multiple
layers
of
'arbitrary'
nested
data
elements.
However,
ObservationDefinitions
are
instantiated
by
Observations
and
are
intended
to
be
limited
to
only
those
data
elements
typically
captured
as
Observations,
while
Questionnaires
can
describe
any
element
at
all
and
are
instantiated
by
QuestionnaireResponses.
Questionnaires
also
have
significantly
more
power
to
identify
rules
around
what
data
can
be
captured
and
when,
as
well
as
allowed
answers.
While
both
support
nesting,
ObservationDefinition
nesting
is
actually
captured,
focused
on
panels
and
is
limited
to
a
single
level
within
the
resource,
while
Questionnaire
can
define
nesting
of
arbitrary
depth
for
any
purpose.
Questionnaires
are
similar
to
Compositions
in
that
both
organize
collections
of
items
and
can
have
a
hierarchical
structure.
They're
also
intended
to
help
guide
'human'
presentation
of
data.
However,
Compositions
organize
resources,
while
Questionnaires
organize
specific
elements.
Also,
a
Questionnaire
represents
data
'to
be
gathered'
and
is
subject-independent,
while
Compositions
represent
collections
of
data
that
are
complete
and
are
about
a
particular
subject.
It
is
possible
for
StructureDefinitions
or
GraphDefinitions
to
act
as
'templates'
for
FHIR
documents
that
guide
what
data
is
collected
for
a
particular
purpose
(e.g.
a
referral),
but
not
how
this
differs
from
the
gathering
process
that
a
Questionnaire
provides
where
there
are
specific
questions
that
must
be
asked
and
answered
and
rules
that
guide
which
questions
are
enabled
in
which
circumstances.
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
gathered.
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
typically
managed
using
PlanDefinition
and
Task
or
using
other
mechanisms
such
as
CDSHooks.
Questionnaires
are
similar
to
the
notion
of
"logical
models"
"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.
Questionnaires are excellent tools for data capture. They allow tight control over what data is gathered and ensure information is gathered consistently across multiple users. However, data gathered using different questionnaires - or even different versions of the same questionnaire - is often not comparable. It is also not very searchable or easily integrated with discrete data sources. Because of this, the general recommendation in FHIR is to use questionnaires for raw data capture but then to convert the resulting QuestionnaireResponse instances into other FHIR resources - Observations, MedicationStatements, FamilyMemberHistories, etc. This allows the data gathered to then be easily combined with other data into FHIR documents and messages and exposed over FHIR REST interfaces.
Groups
and
questions
that
make
up
a
Questionnaire
can
use
the
definition
element
to
refer
to
data
elements
in
external
code
systems,
DataElements
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
ReferralRequest
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.
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
Filter:
|
|---|---|---|---|---|
|
|
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 Interfaces Implemented: MetadataResource |
|
|
Σ C | 0..1 | uri |
Canonical
identifier
for
this
+ Warning: URL should not contain | or # - these characters make processing canonical references problematic |
|
Σ | 0..* | Identifier |
Business
identifier
for
|
|
Σ | 0..1 | string |
Business
version
of
the
questionnaire
|
|
Σ | 0..1 |
How
to
compare
versions
Binding: Version Algorithm ( Extensible ) | |
![]() ![]() ![]() |
|
string | ||
| Coding | |||
![]() ![]() | Σ C | 0..1 | string |
Name
for
this
questionnaire
(computer
friendly)
|
|
Σ T | 0..1 | string |
Name
for
this
questionnaire
(human
friendly)
|
| Σ | 0..* | canonical ( Questionnaire ) |
Based
on
Questionnaire
|
|
?! Σ C | 1..1 | code |
draft
|
active
|
retired
|
unknown
Binding: PublicationStatus ( Required ) |
|
|
0..1 | boolean |
For
testing
|
|
Σ | 0..* |
code
|
Resource
that
can
be
subject
of
QuestionnaireResponse
Binding: Resource Types ( Required ) |
| Σ | 0..1 | dateTime |
Date
|
|
Σ T | 0..1 | string |
Name
of
the
|
|
Σ
|
0..* |
|
Contact
details
for
the
|
|
Σ T | 0..1 | markdown |
Natural
language
description
of
the
questionnaire
|
|
Σ
|
0..* |
|
The
context
that
the
|
|
Σ
|
0..* |
|
Jurisdiction
of
the
authority
that
maintains
the
questionnaire
Binding: Jurisdiction ValueSet
(
Extensible
)
|
|
|
0..1 |
|
Why
this
questionnaire
is
|
|
|
0..1 |
|
Notice
about
intellectual
property
ownership,
can
include
restrictions
on
use
|
|
|
0..1 |
|
Copyright
holder
and
year(s)
|
|
0..1 |
|
When
the
questionnaire
was
approved
by
publisher
|
|
|
0..1 |
|
When
the
questionnaire
was
last
reviewed
by
the
publisher
|
|
|
Σ | 0..1 |
|
When
the
|
|
Σ | 0..* |
|
Concept
that
|
|
|
0..* | BackboneElement |
Questions
and
sections
within
the
Questionnaire
+ + Rule: The types of any specified + + Rule: Group items must have nested items when Questionanire is active + + + Rule: Display items cannot have a "code" asserted + Rule: A question cannot have both + + Rule: Only coding, decimal, integer, date, dateTime, time, string or quantity items can have answerOption + Rule: Required and repeat aren't permitted for display items + Rule: Initial values can't be specified for groups or display items + Rule: Read-only can't be specified for "display" items + Rule: Maximum length can only be declared for simple question types + + Rule: Can only have + Warning: Can only have answerConstraint if answerOption or answerValueSet are present. (This is a warning because extensions may serve the same purpose) + Rule: If question is non-repeating, cannot have |
|
C | 1..1 | string |
Unique
id
for
item
in
questionnaire
+ Warning: Link ids should be 255 characters or less + Rule: LinkId cannot have leading or trailing spaces or intevening whitespace other than single space characters |
|
|
0..* | uri |
ElementDefinition
-
details
for
the
item
|
|
|
0..* | Coding |
Corresponding
concept
for
this
item
in
a
terminology
Binding: Questionnaire Question Codes ( Example ) |
|
0..1 | string |
E.g.
|
|
|
|
0..1 | string |
Primary
text
for
the
item
|
|
C | 1..1 | code |
group
|
display
|
boolean
|
decimal
|
integer
|
date
|
dateTime
+
|
|
?!
|
0..* | BackboneElement |
Only
allow
data
when
+ + Warning: Referenced questions SHOULD exist in the Questionnaire (unless still in draft, working with modular forms, etc.) |
|
C | 1..1 | string |
The
linkId
of
question
that
determines
whether
item
is
|
|
|
1..1 |
|
exists
|
=
|
!=
|
>
|
<
|
>=
|
<=
Binding: Questionnaire Item Operator ( Required ) |
|
T
|
1..1 |
Value
for
question
Binding: Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
|
|||
| SimpleQuantity |
|
||
| Reference ( Any ) | |||
|
|
|||
|
|
|||
|
C | 0..1 |
code
|
all
|
any
Binding: Enable When Behavior ( |
|
0..1 |
|
hidden
|
protected
Binding: Questionnaire Item Disabled Display ( Required ) |
|
|
C | 0..1 | boolean |
Whether
the
item
must
be
included
in
data
results
|
|
|
0..1 | boolean |
Whether
the
item
may
repeat
|
|
|
0..1 | boolean |
Don't
allow
human
editing
|
|
|
0..1 | integer |
No
more
than
|
|
C
|
0..1 | code |
optionsOnly
|
optionsOrType
|
optionsOrString
Binding: Questionnaire answer constraints value set ( Required ) |
| C | 0..1 | canonical ( ValueSet ) |
ValueSet
containing
permitted
answers
|
|
|
0..* | BackboneElement |
Permitted
answer
|
|
T C | 1..1 |
Answer
value
Binding: Questionnaire Answer Codes ( Example ) |
|
| decimal | |||
|
integer | |||
|
date | |||
| dateTime | |||
![]() ![]() ![]() ![]() ![]() |
time | |||
|
string | |||
| uri | |||
|
Coding | |||
| SimpleQuantity | |||
| Reference ( Any ) | |||
|
C | 0..1 |
boolean
|
Whether
option
is
selected
by
default
|
![]() ![]() ![]() | C | 0..* | BackboneElement |
Initial
value(s)
when
item
is
first
rendered
|
| T C | 1..1 |
Actual
value
for
initializing
the
question
Binding: Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
uri | |||
|
Attachment | |||
|
Coding | |||
|
|
|||
|
Reference ( Any ) | |||
|
0..* | see item |
Nested
questionnaire
items
|
|
Documentation
for
this
format
|
||||
See the Extensions for this resource
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 -->
< <</identifier> < < < < < < < < < < < <</effectivePeriod> <</useContext> <</jurisdiction><url value="[uri]"/><!-- 0..1 Canonical identifier for this questionnaire, represented as an absolute URI (globally unique) --> <identifier><!-- 0..* Identifier Business identifier for questionnaire --></identifier> <version value="[string]"/><!-- 0..1 Business version of the questionnaire --> <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]> <name value="[string]"/><!-- I 0..1 Name for this questionnaire (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this questionnaire (human friendly) --> <derivedFrom><!-- 0..* canonical(Questionnaire) Based on Questionnaire --></derivedFrom> <status value="[code]"/><!-- I 1..1 draft | active | retired | unknown --> <experimental value="[boolean]"/><!-- 0..1 For testing only - never for 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/steward (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact>< <</code> < < < <<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 inferred from the definition: * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict"> <</code> < < < < < < <| </answer[x]><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 Jurisdiction of the authority that maintains the questionnaire (if applicable)--></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this questionnaire is defined --> <copyright value="[markdown]"/><!-- 0..1 Notice about intellectual property ownership, can include restrictions on use --> <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) --> <approvalDate value="[date]"/><!-- 0..1 When the questionnaire was approved by publisher --> <lastReviewDate value="[date]"/><!-- 0..1 When the questionnaire was last reviewed by the publisher --> <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]"/><!-- I 1..1 Unique id for item in questionnaire --> <definition value="[uri]"/><!-- 0..* ElementDefinition - details for the item --> <code><!-- I 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]"/><!-- I 1..1 group | display | boolean | decimal | integer | date | dateTime + --> <enableWhen> <!-- I 0..* Only allow data when --> <question value="[string]"/><!-- I 1..1 The linkId of question that determines whether item is enabled/disabled --> <operator value="[code]"/><!-- I 1..1 exists | = | != | > | < | >= | <= --> <answer[x]><!-- I 1..1 boolean|decimal|integer|date|dateTime|time|string|Coding| Quantity(SimpleQuantity)|Reference(Any)|uri|Attachment Value for question comparison based on operator --></answer[x]> </enableWhen>
< < < < <</options> < <</value[x]> </option> <| </initial[x]> <</item><enableBehavior value="[code]"/><!-- I 0..1 all | any --> <disabledDisplay value="[code]"/><!-- 0..1 hidden | protected --> <required value="[boolean]"/><!-- I 0..1 Whether the item must be included in data results --> <repeats value="[boolean]"/><!-- I 0..1 Whether the item may repeat --> <readOnly value="[boolean]"/><!-- I 0..1 Don't allow human editing --> <maxLength value="[integer]"/><!-- I 0..1 No more than these many characters --> <answerConstraint value="[code]"/><!-- I 0..1 optionsOnly | optionsOrType | optionsOrString --> <answerValueSet><!-- I 0..1 canonical(ValueSet) ValueSet containing permitted answers --></answerValueSet> <answerOption> <!-- I 0..* Permitted answer --> <value[x]><!-- I 1..1 decimal|integer|date|dateTime|time|string|uri|Coding| Quantity(SimpleQuantity)|Reference(Any) Answer value --></value[x]> <initialSelected value="[boolean]"/><!-- I 0..1 Whether option is selected by default --> </answerOption> <initial> <!-- I 0..* Initial value(s) when item is first rendered --> <value[x]><!-- I 1..1 boolean|decimal|integer|date|dateTime|time|string|uri| Attachment|Coding|Quantity(SimpleQuantity)|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" : "",
"resourceType" : "Questionnaire",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"<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 inferred from the definition:
* code (ElementDefinition.code)
* type (ElementDefinition.type)
* required (ElementDefinition.min)
* repeats (ElementDefinition.max)
* maxLength (ElementDefinition.maxLength)
* options (ElementDefinition.binding)
Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">definition
"
"
"
"
"
"
"
">
">
">
">"
">"
">"
">"
">"
" }
" }
" }
" }
"url" : "<uri>", // Canonical identifier for this questionnaire, represented as an absolute URI (globally unique)
"identifier" : [{ Identifier }], // Business identifier for questionnaire
"version" : "<string>", // Business version of the questionnaire
// versionAlgorithm[x]: How to compare versions. One of these 2:
"versionAlgorithmString" : "<string>",
"versionAlgorithmCoding" : { Coding },
"name" : "<string>", // I Name for this questionnaire (computer friendly)
"title" : "<string>", // Name for this questionnaire (human friendly)
"derivedFrom" : ["<canonical(Questionnaire)>"], // Based on Questionnaire
"status" : "<code>", // I R! draft | active | retired | unknown
"experimental" : <boolean>, // For testing only - never for real usage
"subjectType" : ["<code>"], // Resource that can be subject of QuestionnaireResponse
"date" : "<dateTime>", // Date last changed
"publisher" : "<string>", // Name of the publisher/steward (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 }], // Jurisdiction of the authority that maintains the questionnaire (if applicable)
"purpose" : "<markdown>", // Why this questionnaire is defined
"copyright" : "<markdown>", // Notice about intellectual property ownership, can include restrictions on use
"copyrightLabel" : "<string>", // Copyright holder and year(s)
"approvalDate" : "<date>", // When the questionnaire was approved by publisher
"lastReviewDate" : "<date>", // When the questionnaire was last reviewed by the publisher
"effectivePeriod" : { Period }, // When the questionnaire is expected to be used
"code" : [{ Coding }], // Concept that represents the overall questionnaire
"item" : [{ // Questions and sections within the Questionnaire
"linkId" : "<string>", // I R! Unique id for item in questionnaire
"definition" : ["<uri>"], // ElementDefinition - details for the item
"code" : [{ Coding }], // I 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>", // I R! group | display | boolean | decimal | integer | date | dateTime +
"enableWhen" : [{ // I Only allow data when
"question" : "<string>", // I R! The linkId of question that determines whether item is enabled/disabled
"operator" : "<code>", // I R! exists | = | != | > | < | >= | <=
// answer[x]: Value for question comparison based on operator. One of these 12:
"answerBoolean" : <boolean>,
"answerDecimal" : <decimal>,
"answerInteger" : <integer>,
"answerDate" : "<date>",
"answerDateTime" : "<dateTime>",
"answerTime" : "<time>",
"answerString" : "<string>",
"answerCoding" : { Coding },
"answerQuantity" : { Quantity(SimpleQuantity) },
"answerReference" : { Reference(Any) },
"answerUri" : "<uri>",
"answerAttachment" : { Attachment }
}],
"
"
"
"
"
"
">
">"
">"
">"
" }
"enableBehavior" : "<code>", // I all | any
"disabledDisplay" : "<code>", // hidden | protected
"required" : <boolean>, // I Whether the item must be included in data results
"repeats" : <boolean>, // I Whether the item may repeat
"readOnly" : <boolean>, // I Don't allow human editing
"maxLength" : <integer>, // I No more than these many characters
"answerConstraint" : "<code>", // I optionsOnly | optionsOrType | optionsOrString
"answerValueSet" : "<canonical(ValueSet)>", // I ValueSet containing permitted answers
"answerOption" : [{ // I Permitted answer
// value[x]: Answer value. One of these 10:
"valueDecimal" : <decimal>,
"valueInteger" : <integer>,
"valueDate" : "<date>",
"valueDateTime" : "<dateTime>",
"valueTime" : "<time>",
"valueString" : "<string>",
"valueUri" : "<uri>",
"valueCoding" : { Coding },
"valueQuantity" : { Quantity(SimpleQuantity) },
"valueReference" : { Reference(Any) },
"initialSelected" : <boolean> // I Whether option is selected by default
}],
">,
">,
">,
">",
">",
">",
">",
">",
" },
" },
" },
" },
"
"initial" : [{ // I 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(SimpleQuantity) },
"valueReference" : { Reference(Any) }
}],
"item" : [{ Content as for Questionnaire.item }] // 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 # from fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir:<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 inferred from the definition: * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">Questionnaire.item.definition fhir: fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ] ], ...; fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 5 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] ], ...; # . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ] fhir: ], ...;# from Resource: fhir:id, fhir:meta, fhir:implicitRules, and fhir:language # from DomainResource: fhir:text, fhir:contained, fhir:extension, and fhir:modifierExtension fhir:url [ uri ] ; # 0..1 Canonical identifier for this questionnaire, represented as an absolute URI (globally unique) fhir:identifier ( [ Identifier ] ... ) ; # 0..* Business identifier for questionnaire fhir:version [ string ] ; # 0..1 Business version of the questionnaire # versionAlgorithm[x] : 0..1 How to compare versions. One of these 2 fhir:versionAlgorithm [ a fhir:String ; string ] fhir:versionAlgorithm [ a fhir:Coding ; Coding ] fhir:name [ string ] ; # 0..1 I Name for this questionnaire (computer friendly) fhir:title [ string ] ; # 0..1 Name for this questionnaire (human friendly) fhir:derivedFrom ( [ canonical(Questionnaire) ] ... ) ; # 0..* Based on Questionnaire fhir:status [ code ] ; # 1..1 I draft | active | retired | unknown fhir:experimental [ boolean ] ; # 0..1 For testing only - never for real usage fhir:subjectType ( [ code ] ... ) ; # 0..* Resource that can be subject of QuestionnaireResponse fhir:date [ dateTime ] ; # 0..1 Date last changed fhir:publisher [ string ] ; # 0..1 Name of the publisher/steward (organization or individual) fhir:contact ( [ ContactDetail ] ... ) ; # 0..* Contact details for the publisher fhir:description [ markdown ] ; # 0..1 Natural language description of the questionnaire fhir:useContext ( [ UsageContext ] ... ) ; # 0..* The context that the content is intended to support fhir:jurisdiction ( [ CodeableConcept ] ... ) ; # 0..* Jurisdiction of the authority that maintains the questionnaire (if applicable) fhir:purpose [ markdown ] ; # 0..1 Why this questionnaire is defined fhir:copyright [ markdown ] ; # 0..1 Notice about intellectual property ownership, can include restrictions on use fhir:copyrightLabel [ string ] ; # 0..1 Copyright holder and year(s) fhir:approvalDate [ date ] ; # 0..1 When the questionnaire was approved by publisher fhir:lastReviewDate [ date ] ; # 0..1 When the questionnaire was last reviewed by the publisher fhir:effectivePeriod [ Period ] ; # 0..1 When the questionnaire is expected to be used fhir:code ( [ Coding ] ... ) ; # 0..* Concept that represents the overall questionnaire fhir:item ( [ # 0..* Questions and sections within the Questionnaire fhir:linkId [ string ] ; # 1..1 I Unique id for item in questionnaire fhir:definition ( [ uri ] ... ) ; # 0..* ElementDefinition - details for the item fhir:code ( [ Coding ] ... ) ; # 0..* I Corresponding concept for this item in a terminology fhir:prefix [ string ] ; # 0..1 E.g. "1(a)", "2.5.3" fhir:text [ string ] ; # 0..1 Primary text for the item fhir:type [ code ] ; # 1..1 I group | display | boolean | decimal | integer | date | dateTime + fhir:enableWhen ( [ # 0..* I Only allow data when fhir:question [ string ] ; # 1..1 I The linkId of question that determines whether item is enabled/disabled fhir:operator [ code ] ; # 1..1 I exists | = | != | > | < | >= | <= # answer[x] : 1..1 I Value for question comparison based on operator. One of these 12 fhir:answer [ a fhir:Boolean ; boolean ] fhir:answer [ a fhir:Decimal ; decimal ] fhir:answer [ a fhir:Integer ; integer ] fhir:answer [ a fhir:Date ; date ] fhir:answer [ a fhir:DateTime ; dateTime ] fhir:answer [ a fhir:Time ; time ] fhir:answer [ a fhir:String ; string ] fhir:answer [ a fhir:Coding ; Coding ] fhir:answer [ a fhir:SimpleQuantity ; Quantity(SimpleQuantity) ] fhir:answer [ a fhir:Reference ; Reference(Any) ] fhir:answer [ a fhir:Uri ; uri ] fhir:answer [ a fhir:Attachment ; Attachment ] ] ... ) ; fhir:enableBehavior [ code ] ; # 0..1 I all | any fhir:disabledDisplay [ code ] ; # 0..1 hidden | protected fhir:required [ boolean ] ; # 0..1 I Whether the item must be included in data results fhir:repeats [ boolean ] ; # 0..1 I Whether the item may repeat fhir:readOnly [ boolean ] ; # 0..1 I Don't allow human editing fhir:maxLength [ integer ] ; # 0..1 I No more than these many characters fhir:answerConstraint [ code ] ; # 0..1 I optionsOnly | optionsOrType | optionsOrString fhir:answerValueSet [ canonical(ValueSet) ] ; # 0..1 I ValueSet containing permitted answers fhir:answerOption ( [ # 0..* I Permitted answer # value[x] : 1..1 I Answer value. One of these 10 fhir:value [ a fhir:Decimal ; decimal ] fhir:value [ a fhir:Integer ; integer ] fhir:value [ a fhir:Date ; date ] fhir:value [ a fhir:DateTime ; dateTime ] fhir:value [ a fhir:Time ; time ] fhir:value [ a fhir:String ; string ] fhir:value [ a fhir:Uri ; uri ] fhir:value [ a fhir:Coding ; Coding ] fhir:value [ a fhir:SimpleQuantity ; Quantity(SimpleQuantity) ] fhir:value [ a fhir:Reference ; Reference(Any) ] fhir:initialSelected [ boolean ] ; # 0..1 I Whether option is selected by default ] ... ) ; fhir:initial ( [ # 0..* I Initial value(s) when item is first rendered # value[x] : 1..1 I Actual value for initializing the question. One of these 12 fhir:value [ a fhir:Boolean ; boolean ] fhir:value [ a fhir:Decimal ; decimal ] fhir:value [ a fhir:Integer ; integer ] fhir:value [ a fhir:Date ; date ] fhir:value [ a fhir:DateTime ; dateTime ] fhir:value [ a fhir:Time ; time ] fhir:value [ a fhir:String ; string ] fhir:value [ a fhir:Uri ; uri ] fhir:value [ a fhir:Attachment ; Attachment ] fhir:value [ a fhir:Coding ; Coding ] fhir:value [ a fhir:SimpleQuantity ; Quantity(SimpleQuantity) ] fhir:value [ a fhir:Reference ; Reference(Any) ] ] ... ) ; fhir:item ( [ See Questionnaire.item ] ... ) ; # 0..* Nested questionnaire items ] ... ) ; ]
Changes
since
DSTU2
from
both
R4
and
R4B
| Questionnaire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Questionnaire.item.enableWhen.answer[x] |
|
|
|
|
|
|
|
|
|
|
|
|
|
See the Full Difference for further information
This
analysis
is
available
for
R4
as
XML
or
JSON
.
See
R2
<-->
R3
Conversion
Maps
(status
=
6
tests
that
all
execute
ok.
4
fail
round-trip
testing
and
5
r3
resources
are
invalid
(109
errors).
).
for
R4B
as
XML
or
JSON
.
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
Filter:
|
|---|---|---|---|---|
|
|
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 Interfaces Implemented: MetadataResource |
|
|
Σ C | 0..1 | uri |
Canonical
identifier
for
this
+ Warning: URL should not contain | or # - these characters make processing canonical references problematic |
|
Σ | 0..* | Identifier |
Business
identifier
for
|
|
Σ | 0..1 | string |
Business
version
of
the
questionnaire
|
|
Σ | 0..1 |
How
to
compare
versions
Binding: Version Algorithm ( Extensible ) | |
![]() ![]() ![]() |
|
string | ||
| Coding | |||
![]() ![]() | Σ C | 0..1 | string |
Name
for
this
questionnaire
(computer
friendly)
|
|
Σ T | 0..1 | string |
Name
for
this
questionnaire
(human
friendly)
|
| Σ | 0..* | canonical ( Questionnaire ) |
Based
on
Questionnaire
|
|
?! Σ C | 1..1 | code |
draft
|
active
|
retired
|
unknown
Binding: PublicationStatus ( Required ) |
|
|
0..1 | boolean |
For
testing
|
|
Σ | 0..* | code |
Resource
that
can
be
subject
of
QuestionnaireResponse
Binding: Resource Types ( Required ) |
| Σ | 0..1 | dateTime |
Date
|
|
Σ T | 0..1 | string |
Name
of
the
|
|
Σ
|
0..* |
|
Contact
details
for
the
|
|
Σ T | 0..1 | markdown |
Natural
language
description
of
the
questionnaire
|
|
Σ
|
0..* |
|
The
context
that
the
|
|
Σ
|
0..* |
|
Jurisdiction
of
the
authority
that
maintains
the
questionnaire
Binding: Jurisdiction ValueSet
(
Extensible
)
|
|
|
0..1 |
|
Why
this
questionnaire
is
|
|
|
0..1 |
|
Notice
about
intellectual
property
ownership,
can
include
restrictions
on
use
|
|
|
0..1 |
|
Copyright
holder
and
year(s)
|
|
0..1 |
|
When
the
questionnaire
was
approved
by
publisher
|
|
|
0..1 |
|
When
the
questionnaire
was
last
reviewed
by
the
publisher
|
|
|
Σ | 0..1 |
|
When
the
|
|
Σ | 0..* |
|
Concept
that
|
|
|
0..* | BackboneElement |
Questions
and
sections
within
the
Questionnaire
+ + Rule: The types of any specified + + Rule: Group items must have nested items when Questionanire is active + + + Rule: Display items cannot have a "code" asserted + Rule: A question cannot have both + + Rule: Only coding, decimal, integer, date, dateTime, time, string or quantity items can have answerOption + Rule: Required and repeat aren't permitted for display items + Rule: Initial values can't be specified for groups or display items + Rule: Read-only can't be specified for "display" items + Rule: Maximum length can only be declared for simple question types + + Rule: Can only have + Warning: Can only have answerConstraint if answerOption or answerValueSet are present. (This is a warning because extensions may serve the same purpose) + Rule: If question is non-repeating, cannot have |
|
C | 1..1 | string |
Unique
id
for
item
in
questionnaire
+ Warning: Link ids should be 255 characters or less + Rule: LinkId cannot have leading or trailing spaces or intevening whitespace other than single space characters |
|
|
0..* | uri |
ElementDefinition
-
details
for
the
item
|
|
|
0..* | Coding |
Corresponding
concept
for
this
item
in
a
terminology
Binding: Questionnaire Question Codes ( Example ) |
|
0..1 | string |
E.g.
|
|
|
|
0..1 | string |
Primary
text
for
the
item
|
|
C | 1..1 | code |
group
|
display
|
boolean
|
decimal
|
integer
|
date
|
dateTime
+
|
|
?!
|
0..* | BackboneElement |
Only
allow
data
when
+ + Warning: Referenced questions SHOULD exist in the Questionnaire (unless still in draft, working with modular forms, etc.) |
|
C | 1..1 | string |
The
linkId
of
question
that
determines
whether
item
is
|
|
|
1..1 |
|
exists
|
=
|
!=
|
>
|
<
|
>=
|
<=
Binding: Questionnaire Item Operator ( Required ) |
|
T
|
1..1 |
Value
for
question
Binding: Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
|
|||
| SimpleQuantity |
|
||
| Reference ( Any ) | |||
|
|
|||
|
|
|||
|
C | 0..1 |
code
|
all
|
any
Binding: Enable When Behavior ( |
|
0..1 |
|
hidden
|
protected
Binding: Questionnaire Item Disabled Display ( Required ) |
|
|
C | 0..1 | boolean |
Whether
the
item
must
be
included
in
data
results
|
|
|
0..1 | boolean |
Whether
the
item
may
repeat
|
|
|
0..1 | boolean |
Don't
allow
human
editing
|
|
|
0..1 | integer |
No
more
than
|
|
C
|
0..1 | code |
optionsOnly
|
optionsOrType
|
optionsOrString
Binding: Questionnaire answer constraints value set ( Required ) |
| C | 0..1 | canonical ( ValueSet ) |
ValueSet
containing
permitted
answers
|
|
|
0..* | BackboneElement |
Permitted
answer
|
|
T C | 1..1 |
Answer
value
Binding: Questionnaire Answer Codes ( Example ) |
|
| decimal | |||
|
integer | |||
|
date | |||
| dateTime | |||
![]() ![]() ![]() ![]() ![]() |
time | |||
|
string | |||
| uri | |||
|
Coding | |||
| SimpleQuantity | |||
| Reference ( Any ) | |||
|
C | 0..1 |
boolean
|
Whether
option
is
selected
by
default
|
![]() ![]() ![]() | C | 0..* | BackboneElement |
Initial
value(s)
when
item
is
first
rendered
|
| T C | 1..1 |
Actual
value
for
initializing
the
question
Binding: Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
uri | |||
|
Attachment | |||
|
Coding | |||
|
|
|||
|
Reference ( Any ) | |||
|
0..* | see item |
Nested
questionnaire
items
|
|
Documentation
for
this
format
|
||||
See the Extensions for this resource
XML Template
<<Questionnaire xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension -->
< <</identifier> < < < < < < < < < < < <</effectivePeriod> <</useContext> <</jurisdiction><url value="[uri]"/><!-- 0..1 Canonical identifier for this questionnaire, represented as an absolute URI (globally unique) --> <identifier><!-- 0..* Identifier Business identifier for questionnaire --></identifier> <version value="[string]"/><!-- 0..1 Business version of the questionnaire --> <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]> <name value="[string]"/><!-- I 0..1 Name for this questionnaire (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this questionnaire (human friendly) --> <derivedFrom><!-- 0..* canonical(Questionnaire) Based on Questionnaire --></derivedFrom> <status value="[code]"/><!-- I 1..1 draft | active | retired | unknown --> <experimental value="[boolean]"/><!-- 0..1 For testing only - never for 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/steward (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact>< <</code> < < < <<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 inferred from the definition: * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict"> <</code> < < < < < < <| </answer[x]><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 Jurisdiction of the authority that maintains the questionnaire (if applicable)--></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this questionnaire is defined --> <copyright value="[markdown]"/><!-- 0..1 Notice about intellectual property ownership, can include restrictions on use --> <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) --> <approvalDate value="[date]"/><!-- 0..1 When the questionnaire was approved by publisher --> <lastReviewDate value="[date]"/><!-- 0..1 When the questionnaire was last reviewed by the publisher --> <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]"/><!-- I 1..1 Unique id for item in questionnaire --> <definition value="[uri]"/><!-- 0..* ElementDefinition - details for the item --> <code><!-- I 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]"/><!-- I 1..1 group | display | boolean | decimal | integer | date | dateTime + --> <enableWhen> <!-- I 0..* Only allow data when --> <question value="[string]"/><!-- I 1..1 The linkId of question that determines whether item is enabled/disabled --> <operator value="[code]"/><!-- I 1..1 exists | = | != | > | < | >= | <= --> <answer[x]><!-- I 1..1 boolean|decimal|integer|date|dateTime|time|string|Coding| Quantity(SimpleQuantity)|Reference(Any)|uri|Attachment Value for question comparison based on operator --></answer[x]> </enableWhen>
< < < < <</options> < <</value[x]> </option> <| </initial[x]> <</item><enableBehavior value="[code]"/><!-- I 0..1 all | any --> <disabledDisplay value="[code]"/><!-- 0..1 hidden | protected --> <required value="[boolean]"/><!-- I 0..1 Whether the item must be included in data results --> <repeats value="[boolean]"/><!-- I 0..1 Whether the item may repeat --> <readOnly value="[boolean]"/><!-- I 0..1 Don't allow human editing --> <maxLength value="[integer]"/><!-- I 0..1 No more than these many characters --> <answerConstraint value="[code]"/><!-- I 0..1 optionsOnly | optionsOrType | optionsOrString --> <answerValueSet><!-- I 0..1 canonical(ValueSet) ValueSet containing permitted answers --></answerValueSet> <answerOption> <!-- I 0..* Permitted answer --> <value[x]><!-- I 1..1 decimal|integer|date|dateTime|time|string|uri|Coding| Quantity(SimpleQuantity)|Reference(Any) Answer value --></value[x]> <initialSelected value="[boolean]"/><!-- I 0..1 Whether option is selected by default --> </answerOption> <initial> <!-- I 0..* Initial value(s) when item is first rendered --> <value[x]><!-- I 1..1 boolean|decimal|integer|date|dateTime|time|string|uri| Attachment|Coding|Quantity(SimpleQuantity)|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" : "",
"resourceType" : "Questionnaire",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"<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 inferred from the definition:
* code (ElementDefinition.code)
* type (ElementDefinition.type)
* required (ElementDefinition.min)
* repeats (ElementDefinition.max)
* maxLength (ElementDefinition.maxLength)
* options (ElementDefinition.binding)
Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">definition
"
"
"
"
"
"
"
">
">
">
">"
">"
">"
">"
">"
" }
" }
" }
" }
"url" : "<uri>", // Canonical identifier for this questionnaire, represented as an absolute URI (globally unique)
"identifier" : [{ Identifier }], // Business identifier for questionnaire
"version" : "<string>", // Business version of the questionnaire
// versionAlgorithm[x]: How to compare versions. One of these 2:
"versionAlgorithmString" : "<string>",
"versionAlgorithmCoding" : { Coding },
"name" : "<string>", // I Name for this questionnaire (computer friendly)
"title" : "<string>", // Name for this questionnaire (human friendly)
"derivedFrom" : ["<canonical(Questionnaire)>"], // Based on Questionnaire
"status" : "<code>", // I R! draft | active | retired | unknown
"experimental" : <boolean>, // For testing only - never for real usage
"subjectType" : ["<code>"], // Resource that can be subject of QuestionnaireResponse
"date" : "<dateTime>", // Date last changed
"publisher" : "<string>", // Name of the publisher/steward (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 }], // Jurisdiction of the authority that maintains the questionnaire (if applicable)
"purpose" : "<markdown>", // Why this questionnaire is defined
"copyright" : "<markdown>", // Notice about intellectual property ownership, can include restrictions on use
"copyrightLabel" : "<string>", // Copyright holder and year(s)
"approvalDate" : "<date>", // When the questionnaire was approved by publisher
"lastReviewDate" : "<date>", // When the questionnaire was last reviewed by the publisher
"effectivePeriod" : { Period }, // When the questionnaire is expected to be used
"code" : [{ Coding }], // Concept that represents the overall questionnaire
"item" : [{ // Questions and sections within the Questionnaire
"linkId" : "<string>", // I R! Unique id for item in questionnaire
"definition" : ["<uri>"], // ElementDefinition - details for the item
"code" : [{ Coding }], // I 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>", // I R! group | display | boolean | decimal | integer | date | dateTime +
"enableWhen" : [{ // I Only allow data when
"question" : "<string>", // I R! The linkId of question that determines whether item is enabled/disabled
"operator" : "<code>", // I R! exists | = | != | > | < | >= | <=
// answer[x]: Value for question comparison based on operator. One of these 12:
"answerBoolean" : <boolean>,
"answerDecimal" : <decimal>,
"answerInteger" : <integer>,
"answerDate" : "<date>",
"answerDateTime" : "<dateTime>",
"answerTime" : "<time>",
"answerString" : "<string>",
"answerCoding" : { Coding },
"answerQuantity" : { Quantity(SimpleQuantity) },
"answerReference" : { Reference(Any) },
"answerUri" : "<uri>",
"answerAttachment" : { Attachment }
}],
"
"
"
"
"
"
">
">"
">"
">"
" }
"enableBehavior" : "<code>", // I all | any
"disabledDisplay" : "<code>", // hidden | protected
"required" : <boolean>, // I Whether the item must be included in data results
"repeats" : <boolean>, // I Whether the item may repeat
"readOnly" : <boolean>, // I Don't allow human editing
"maxLength" : <integer>, // I No more than these many characters
"answerConstraint" : "<code>", // I optionsOnly | optionsOrType | optionsOrString
"answerValueSet" : "<canonical(ValueSet)>", // I ValueSet containing permitted answers
"answerOption" : [{ // I Permitted answer
// value[x]: Answer value. One of these 10:
"valueDecimal" : <decimal>,
"valueInteger" : <integer>,
"valueDate" : "<date>",
"valueDateTime" : "<dateTime>",
"valueTime" : "<time>",
"valueString" : "<string>",
"valueUri" : "<uri>",
"valueCoding" : { Coding },
"valueQuantity" : { Quantity(SimpleQuantity) },
"valueReference" : { Reference(Any) },
"initialSelected" : <boolean> // I Whether option is selected by default
}],
">,
">,
">,
">",
">",
">",
">",
">",
" },
" },
" },
" },
"
"initial" : [{ // I 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(SimpleQuantity) },
"valueReference" : { Reference(Any) }
}],
"item" : [{ Content as for Questionnaire.item }] // 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 # from fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir:<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 inferred from the definition: * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding) Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">Questionnaire.item.definition fhir: fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ] ], ...; fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 5 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] ], ...; # . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ] fhir: ], ...;# from Resource: fhir:id, fhir:meta, fhir:implicitRules, and fhir:language # from DomainResource: fhir:text, fhir:contained, fhir:extension, and fhir:modifierExtension fhir:url [ uri ] ; # 0..1 Canonical identifier for this questionnaire, represented as an absolute URI (globally unique) fhir:identifier ( [ Identifier ] ... ) ; # 0..* Business identifier for questionnaire fhir:version [ string ] ; # 0..1 Business version of the questionnaire # versionAlgorithm[x] : 0..1 How to compare versions. One of these 2 fhir:versionAlgorithm [ a fhir:String ; string ] fhir:versionAlgorithm [ a fhir:Coding ; Coding ] fhir:name [ string ] ; # 0..1 I Name for this questionnaire (computer friendly) fhir:title [ string ] ; # 0..1 Name for this questionnaire (human friendly) fhir:derivedFrom ( [ canonical(Questionnaire) ] ... ) ; # 0..* Based on Questionnaire fhir:status [ code ] ; # 1..1 I draft | active | retired | unknown fhir:experimental [ boolean ] ; # 0..1 For testing only - never for real usage fhir:subjectType ( [ code ] ... ) ; # 0..* Resource that can be subject of QuestionnaireResponse fhir:date [ dateTime ] ; # 0..1 Date last changed fhir:publisher [ string ] ; # 0..1 Name of the publisher/steward (organization or individual) fhir:contact ( [ ContactDetail ] ... ) ; # 0..* Contact details for the publisher fhir:description [ markdown ] ; # 0..1 Natural language description of the questionnaire fhir:useContext ( [ UsageContext ] ... ) ; # 0..* The context that the content is intended to support fhir:jurisdiction ( [ CodeableConcept ] ... ) ; # 0..* Jurisdiction of the authority that maintains the questionnaire (if applicable) fhir:purpose [ markdown ] ; # 0..1 Why this questionnaire is defined fhir:copyright [ markdown ] ; # 0..1 Notice about intellectual property ownership, can include restrictions on use fhir:copyrightLabel [ string ] ; # 0..1 Copyright holder and year(s) fhir:approvalDate [ date ] ; # 0..1 When the questionnaire was approved by publisher fhir:lastReviewDate [ date ] ; # 0..1 When the questionnaire was last reviewed by the publisher fhir:effectivePeriod [ Period ] ; # 0..1 When the questionnaire is expected to be used fhir:code ( [ Coding ] ... ) ; # 0..* Concept that represents the overall questionnaire fhir:item ( [ # 0..* Questions and sections within the Questionnaire fhir:linkId [ string ] ; # 1..1 I Unique id for item in questionnaire fhir:definition ( [ uri ] ... ) ; # 0..* ElementDefinition - details for the item fhir:code ( [ Coding ] ... ) ; # 0..* I Corresponding concept for this item in a terminology fhir:prefix [ string ] ; # 0..1 E.g. "1(a)", "2.5.3" fhir:text [ string ] ; # 0..1 Primary text for the item fhir:type [ code ] ; # 1..1 I group | display | boolean | decimal | integer | date | dateTime + fhir:enableWhen ( [ # 0..* I Only allow data when fhir:question [ string ] ; # 1..1 I The linkId of question that determines whether item is enabled/disabled fhir:operator [ code ] ; # 1..1 I exists | = | != | > | < | >= | <= # answer[x] : 1..1 I Value for question comparison based on operator. One of these 12 fhir:answer [ a fhir:Boolean ; boolean ] fhir:answer [ a fhir:Decimal ; decimal ] fhir:answer [ a fhir:Integer ; integer ] fhir:answer [ a fhir:Date ; date ] fhir:answer [ a fhir:DateTime ; dateTime ] fhir:answer [ a fhir:Time ; time ] fhir:answer [ a fhir:String ; string ] fhir:answer [ a fhir:Coding ; Coding ] fhir:answer [ a fhir:SimpleQuantity ; Quantity(SimpleQuantity) ] fhir:answer [ a fhir:Reference ; Reference(Any) ] fhir:answer [ a fhir:Uri ; uri ] fhir:answer [ a fhir:Attachment ; Attachment ] ] ... ) ; fhir:enableBehavior [ code ] ; # 0..1 I all | any fhir:disabledDisplay [ code ] ; # 0..1 hidden | protected fhir:required [ boolean ] ; # 0..1 I Whether the item must be included in data results fhir:repeats [ boolean ] ; # 0..1 I Whether the item may repeat fhir:readOnly [ boolean ] ; # 0..1 I Don't allow human editing fhir:maxLength [ integer ] ; # 0..1 I No more than these many characters fhir:answerConstraint [ code ] ; # 0..1 I optionsOnly | optionsOrType | optionsOrString fhir:answerValueSet [ canonical(ValueSet) ] ; # 0..1 I ValueSet containing permitted answers fhir:answerOption ( [ # 0..* I Permitted answer # value[x] : 1..1 I Answer value. One of these 10 fhir:value [ a fhir:Decimal ; decimal ] fhir:value [ a fhir:Integer ; integer ] fhir:value [ a fhir:Date ; date ] fhir:value [ a fhir:DateTime ; dateTime ] fhir:value [ a fhir:Time ; time ] fhir:value [ a fhir:String ; string ] fhir:value [ a fhir:Uri ; uri ] fhir:value [ a fhir:Coding ; Coding ] fhir:value [ a fhir:SimpleQuantity ; Quantity(SimpleQuantity) ] fhir:value [ a fhir:Reference ; Reference(Any) ] fhir:initialSelected [ boolean ] ; # 0..1 I Whether option is selected by default ] ... ) ; fhir:initial ( [ # 0..* I Initial value(s) when item is first rendered # value[x] : 1..1 I Actual value for initializing the question. One of these 12 fhir:value [ a fhir:Boolean ; boolean ] fhir:value [ a fhir:Decimal ; decimal ] fhir:value [ a fhir:Integer ; integer ] fhir:value [ a fhir:Date ; date ] fhir:value [ a fhir:DateTime ; dateTime ] fhir:value [ a fhir:Time ; time ] fhir:value [ a fhir:String ; string ] fhir:value [ a fhir:Uri ; uri ] fhir:value [ a fhir:Attachment ; Attachment ] fhir:value [ a fhir:Coding ; Coding ] fhir:value [ a fhir:SimpleQuantity ; Quantity(SimpleQuantity) ] fhir:value [ a fhir:Reference ; Reference(Any) ] ] ... ) ; fhir:item ( [ See Questionnaire.item ] ... ) ; # 0..* Nested questionnaire items ] ... ) ; ]
Changes
since
DSTU2
from
both
R4
and
R4B
| Questionnaire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Questionnaire.item.enableWhen.answer[x] |
|
|
|
|
|
|
|
|
|
|
|
|
|
See the Full Difference for further information
This
analysis
is
available
for
R4
as
XML
or
JSON
.
See
R2
<-->
R3
Conversion
Maps
(status
=
6
tests
that
all
execute
ok.
4
fail
round-trip
testing
and
5
r3
resources
are
invalid
(109
errors).
).
for
R4B
as
XML
or
JSON
.
Alternate
Additional
definitions:
Master
Definition
(
XML
,
+
JSON
),
,
XML
Schema
/
Schematron
(for
)
+
JSON
Schema
,
ShEx
(for
Turtle
)
,
the
spreadsheet
version
&
the
dependency
analysis
| Path |
|
Type |
|
|---|---|---|---|
| Questionnaire.versionAlgorithm[x] | VersionAlgorithm | Extensible | Indicates the mechanism used to compare versions to determine which is more current. |
| Questionnaire.status | PublicationStatus | Required |
The
lifecycle
status
of
|
| Questionnaire.subjectType | ResourceType | Required |
Concrete FHIR Resource Types |
| Questionnaire.jurisdiction |
![]() |
Extensible |
This value set defines a base set of codes for country, country subdivision and region for indicating where a resource is intended to be used.
Note:
The
codes
for
countries
and
country
subdivisions
are
taken
from
ISO
3166
|
|
Questionnaire.code
|
)
|
Example |
Example list of codes for questions and groups of questions. (Not necessarily complete or appropriate.) |
| Questionnaire.item.code |
QuestionnaireQuestionCodes
(a
valid
code
from
LOINC
)
| Example |
Example
list
of
|
| Questionnaire.item.type | QuestionnaireItemTypeUsable | Required |
Item types allowed to appear on Questionnaire.type (excludes the abstract 'questionnaire' code. |
| Questionnaire.item.enableWhen.operator |
| Required |
The criteria by which a question is enabled. |
| Questionnaire.item.enableWhen.answer[x] |
)
| Example |
Example
list
of
codes
for
|
| Questionnaire.item.enableBehavior | EnableWhenBehavior | Required |
Controls how multiple enableWhen values are interpreted - whether all or any must be true. |
| Questionnaire.item.disabledDisplay |
| Required |
Codes that guide the display of disabled questionnaire items |
| Questionnaire.item.answerConstraint |
|
|
Codes that describe the types of constraints possible on a question item that has a list of permitted answers |
|
|
QuestionnaireAnswerCodes
(a
valid
code
from
SNOMED
CT
)
| Example |
Example
list
of
codes
for
answers
to
|
| Questionnaire.item.initial.value[x] |
QuestionnaireAnswerCodes
(a
valid
code
from
SNOMED
CT
)
|
Example |
Example list of codes for answers to questions. (Not complete or necessarily appropriate.) |
| UniqueKey | Level | Location | Description | Expression |
cnl-0
| Warning | (base) | Name should be usable as an identifier for the module by machine processing applications such as code generation | name.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$') |
cnl-1
| Warning | Questionnaire.url | URL should not contain | or # - these characters make processing canonical references problematic | exists() implies matches('^[^|# ]+$') |
que-18a
| Rule | Questionnaire.item | The types of any specified answerOptions must align with the item type | answerOption.value.exists() implies defineVariable('type', type).trace('type', %type).answerOption.value.type().name.distinct().select(iif($this='simplequantity', 'quantity', $this.lower())).where(%type!=$this and (%type='text' and $this='string').not() and (%type='url' and $this='uri').not()).trace('Unmatched answerOption type(s)').empty() |
que-18b
| Rule | Questionnaire.item | The types of any specified initial values must align with the item type | initial.value.exists() implies defineVariable('type', type).trace('type', %type).initial.value.type().name.distinct().select(iif($this='simplequantity', 'quantity', $this.lower())).where(%type!=$this and (%type='text' and $this='string').not() and (%type='url' and $this='uri').not()).trace('Unmatched initial value type(s)').empty() |
que-1a
| Rule | Questionnaire.item |
Group
items
must
have
nested
|
|
que-1b
|
Warning
|
Questionnaire.item | Groups should have items |
|
que-1c
| Rule | Questionnaire.item | Display items cannot have child items | type='display' implies item.empty() |
que-2
| 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
|
|
que-4
| Rule | Questionnaire.item |
A
question
cannot
have
both
|
|
que-5
| Rule | Questionnaire.item |
Only
|
|
que-5b
| Rule | Questionnaire.item |
Only
coding,
decimal,
integer,
date,
dateTime,
time,
string
or
|
(('coding'
|
'string'
|
'uri')
contains
type)
or
answerValueSet.empty()
|
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
|
|
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
|
|
que-10
| Rule | Questionnaire.item | Maximum length can only be declared for simple question types | (type in ('string' | 'decimal' | 'integer' | 'text' | 'date' | 'dateTime' | 'time' | 'url')) or answerConstraint='optionOrString' or maxLength.empty() |
que-11
| Rule | Questionnaire.item | If one or more answerOption is present, initial cannot be present. Use answerOption.initialSelected instead | answerOption.empty() or initial.empty() |
que-12
| Rule | Questionnaire.item | If there are more than one enableWhen, enableBehavior must be specified | enableWhen.count() > 1 implies enableBehavior.exists() |
que-13
| Rule | Questionnaire.item | Can only have multiple initial values for repeating items | repeats=true or initial.count() <= 1 |
que-14
| Warning | Questionnaire.item | Can only have answerConstraint if answerOption or answerValueSet are present. (This is a warning because extensions may serve the same purpose) | answerConstraint.exists() implies answerOption.exists() or answerValueSet.exists() |
que-15
| Warning | Questionnaire.item.linkId | Link ids should be 255 characters or less | $this.length() <= 255 |
que-16
| Rule | Questionnaire.item.linkId | LinkId cannot have leading or trailing spaces or intevening whitespace other than single space characters | $this.matches('[^\\s]+( [^\\s]+)*') |
que-17
| Rule | Questionnaire.item | If question is non-repeating, cannot have more than one initialSelected answer option | repeats.not() implies answerOption.where(initialSelected=true).count() <= 1 |
que-18
| Warning | Questionnaire.item.enableWhen | Referenced questions SHOULD exist in the Questionnaire (unless still in draft, working with modular forms, etc.) | question.exists() implies (%resource.repeat(item).linkId contains question) |
,
CDA
Documents
frequently
used
named
sections
with
Observations
to
model
Questionnaires.
Such
use
cases
should
now
use
the
Questionnaire
Resource
instead.
The
base
questionnaire
resource
is
aimed
at
the
capabilities
of
"most"
healthcare
systems
that
deal
with
forms
and
questionnaires.
While
the
resource
structure
supports
a
reasonable
degree
of
complexity,
it
doesn't
provide
the
degree
of
control
over
rendering,
question
flow
and
data
management
needed
by
some
portions
of
the
healthcare
space.
Many
of
these
more
sophisticated
requirements
are
addressed
by
a
supplemental
implementation
guide
called
Structured
Data
Capture
(SDC)
.
This
implementation
guide
covers
the
following
capabilities,
plus
several
others:
Some questionnaires might not provide a full listing of questions, instead relying on a service to interactively send 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. Further guidance on the use of such forms, can be found in the SDC implementation guide.
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
may
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
and/or
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
"what
is
your
weight",
weight",
an
Observation
with
the
appropriate
Observation.code
and
the
specified
answer
as
the
Observation.valueQuantity
can
be
created.
Profiling can be used to define the constraints of a set of Questionnaires - for example that a particular system only supports Questionnaires where answers have certain data types, only recognizes certain extensions, mandates the presence of certain metadata, etc. However, profiling should NOT be used to define the content of a specific Questionnaire instance. To define a Questionnaire instance, simply create an instance of Questionnaire as you would any other resource.
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
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 properties defined at the 'group' level will impact the behavior of everything within the group. For example, if a 'group' item is marked as readOnly=true, then all items within that group are automatically treated as readOnly - even if they explicitly declare readOnly=false. The same holds for enableWhen. If a group is 'disabled' based on its enableWhen settings, then all child items are automatically disabled - regardless of whether they have enableWhen declared or how those enableWhen conditions might resolve. Some extensions (e.g. the SDC 'hidden' extension) behave in the same manner. Systems MAY choose to raise errors or warnings if questionnaires have conflicting settings. E.g. if a group is marked as readOnly=true and a descendant item explicitly declares readOnly=false. This wouldn't be because the behavior is unclear, but more to draw the author's attention to the fact that their desired behavior for the child will not be realized due to the setting of the ancestor group.
Behavior of parent 'question' items (i.e. questions with child groups or questions) can also influence descendant elements, but not as strongly. If a question is readOnly, that doesn't mean that child items are also readOnly. However, if a question is disabled, all descendant items are also disabled. Similarly, a 'hidden' question, would hide child elements as well.
LinkIds are globally unique in a Questionnaire and are how items in a QuestionnaireResponse are tied to their corresponding Questionnaire item. The QuestionnaireResponse page includes a diagram showing how response items are linked to their corresponding Questionnaire items. Questions and their responses are tied together by their linkIds. LinkIds are unique across all items in a Questionnaire, but can sometimes appear multiple times within a QuestionnaireResponse . The diagram on the right shows a Questionnaire with a hierarchy of group and question items, some marked as 'repeats'=true, and others false and with similar variation in 'required'=true and false. It also shows a hypothetical QuestionnaireResponse that is valid against that questionnaire with appropriate nesting of items and answers and linkIds showing the alignment between the Questionnaire and QuestionnaireResponse items.
There
are
three
different
"identifying"
"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.
The
SDC
guide
has
defined
an
assembly
process
to
support
retrieving
and
injecting
information
from
definitions
into
a
Questionnaire.
In
most
cases,
systems
rendering
forms
can't
be
expected
to
do
this
automatically
as
part
of
form
display
without
a
separate
workflow
step.
If
a
definition
is
provided,
then
the
following
element
values
can
be
derived
from
the
definition:
QuestionnaireResponse.item.type corresponds to ElementDefinition.type, however item.type is mandatory in Questionnaire, so it can't be 'populated' because it must exist for the item to exist at all. However, the values specified for item.type and ElementDefinition.type do need to correspond. Complex types such as Address or anything based on BackboneElement would correspond to 'group', while simple types would normally map directly.
In addition, extensions and elements that have corresponding extensions should also propagate. Specifically:
Any
information
provided
in
these
elements
overrides
the
information
from
the
definition.
definition,
and
some
are
always
required
to
be
populated
so
that
invariants
can
be
enforced,
etc.
The
url
refers
to
a
an
ElementDefinition
in
either
a
StructureDefinition
or
a
DataElement
,
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.effectiveDateTime
|
A
reference
to
the
standard
Observation
element
effectiveDateTime
|
http://example.org/definitions/xxx
|
A
reference
to
the
logical
model
|
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
that
LOINC
codes
implicitly
define
logical
models
whose
elements
can
be
considered
question
definitions.
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
may
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
may
might
not
be
able
to
render
or
use
the
Questionnaire.
The
questionnaire-definitionBased
extension
can
be
used
to
flag
that
a
questionnaire
requires
the
ability
to
resolve
and
use
item.definition
information
to
fully
understand
the
Questionnaire.
Systems
that
validate,
render
or
otherwise
process
the
questionnaire
SHOULD
check
for
this
extension.
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"
"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 |
|
|
Coding |
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 a questionnaire response, a question of type 'boolean' can have 3 possible states - unanswered, answered true, and answered false. Users will generally need to be able to toggle through all three states. If a default value is specified and the element is mandatory, a simple control with only true and false options (e.g. traditional check-box) will suffice. However, if a three-state selection is required, the typical controls used in HTML and other rendering technologies for booleans might not be appropriate. E.g. a checkbox that can only convey 'true' or 'false' will not be able to differentiate 'unanswered' and thus is generally not appropriate. If a tri-state control is available, that would work well. Alternatively, a set of radio buttons allow choices of true, false or "no answer" could also work.
As well, when enableWhen expressions are used that reference boolean elements, designers should consider whether "non-answered" is a possible value for boolean questions and design their enableWhen logic accordingly.
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")
"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
itemweight
extension
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
usings
using
expressions.
For
more
information,
see
the
Using
Expressions
and
Documentation
Template
topics
in
the
Clinical
Reasoning
module.
Once a Questionnaire is defined, there's often a need to 'assign' a Questionnaire to a particular individual to request them to complete it. This is not done using the Questionnaire resource directly. Instead, the Questionnaire is referenced as an 'input' or argument using one of FHIR's workflow patterns . The most common mechanism is by defining a stand-alone Task that references the Questionnaire and seeks completion. The SDC implementation guide defines profiles and guidance for using this mechanism.
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. See also the full list of search parameters for this resource , and check the Extensions registry for search parameters on extensions related to 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 |
|
combo-code
|
token | A code that corresponds to one of its items in the questionnaire | Questionnaire.code | Questionnaire.repeat(item).code | |
| context | token |
| (Questionnaire.useContext.value.ofType(CodeableConcept)) | 25 Resources |
| context-quantity | quantity | A quantity- or range-valued use context assigned to the questionnaire | (Questionnaire.useContext.value.ofType(Quantity)) | (Questionnaire.useContext.value.ofType(Range)) | 25 Resources |
| context-type | token | A type of use context assigned to the questionnaire | Questionnaire.useContext.code | 25 Resources |
| 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.ofType(Quantity) | value.ofType(Range) | 25 Resources |
| context-type-value | composite | A use context type and value assigned to the questionnaire |
On
Questionnaire.useContext:
context-type: code context: value.ofType(CodeableConcept) | 25 Resources |
| date | date | The questionnaire publication date | Questionnaire.date | 26 Resources |
| definition | uri | ElementDefinition - details for the item | Questionnaire.repeat(item).definition | |
| description | string | The description of the questionnaire | Questionnaire.description | 24 Resources |
| effective | date | The time during which the questionnaire is intended to be in use | Questionnaire.effectivePeriod | 10 Resources |
| experimental | token | Whether the Questionnaire is experimental | Questionnaire.experimental | |
| identifier | token | External identifier for the questionnaire | Questionnaire.identifier | 30 Resources |
| item-code | token | A code that corresponds to one of the items in the questionnaire | Questionnaire.repeat(item).code | |
| jurisdiction | token |
|
Questionnaire.jurisdiction | 22 Resources |
| name | string | Computationally friendly name of the questionnaire | Questionnaire.name | 24 Resources |
| publisher | string | Name of the publisher of the questionnaire | Questionnaire.publisher | 26 Resources |
| questionnaire-code | token | A code that matches one of the Questionnaire.code codings | Questionnaire.code | |
| status | token | The current status of the questionnaire | Questionnaire.status | 30 Resources |
| subject-type | token | Resource that can be subject of QuestionnaireResponse | Questionnaire.subjectType | |
| title | string | The human-friendly name of the questionnaire | Questionnaire.title | 24 Resources |
| url | uri | The uri that identifies the questionnaire | Questionnaire.url | 30 Resources |
| version | token | The business version of the questionnaire | Questionnaire.version | 27 Resources |