This
page
is
part
of
the
FHIR
Specification
(v3.0.2:
(v4.0.1:
R4
-
Mixed
Normative
and
STU
3).
)
in
it's
permanent
home
(it
will
always
be
available
at
this
URL).
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
R4
R3
R2
FHIR
Infrastructure
Work
Group
|
Maturity Level : 3 | Trial Use | Security Category : Business | 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
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
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
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"
"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,
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.
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
|
|
Σ | 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..* |
|
Resource
that
can
be
subject
of
QuestionnaireResponse
ResourceType ( Required ) |
|
Σ | 0..1 |
|
|
|
Σ | 0..1 |
|
Name of the publisher (organization or individual) |
|
|
|
|
|
|
0..1 |
|
Natural
language
description
of
the
questionnaire
|
|
|
Σ | 0..* | UsageContext |
|
|
Σ | 0..* | CodeableConcept |
Intended
jurisdiction
for
questionnaire
(if
applicable)
Jurisdiction |
|
|
|
|
|
|
0..1 | markdown | Use and/or publishing restrictions | |
|
|
|
|
|
|
0..1 | date | When the questionnaire was last reviewed | |
|
Σ |
|
|
|
![]() ![]() | Σ | 0..* | Coding |
Concept
that
represents
the
overall
questionnaire
|
|
I | 0..* | BackboneElement |
Questions
and
sections
within
the
Questionnaire
+ + + + Rule: Only 'choice' and 'open-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 |
|
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.
|
|
|
0..1 | string | Primary text for the item | |
|
1..1 | code |
group
|
display
|
boolean
|
decimal
|
integer
|
date
|
dateTime
+
QuestionnaireItemType ( Required ) |
|
|
?!
|
0..* | BackboneElement |
Only
allow
data
when
+ |
|
1..1 | string | Question that determines whether item is enabled | |
|
1..1 |
|
exists
|
=
|
!=
|
>
|
<
|
>=
|
<=
QuestionnaireItemOperator ( Required ) |
|
|
I |
|
Value
for
question
Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
|
Coding | ||
|
|
Quantity | ||
|
|
|||
|
I | 0..1 |
code
|
all
|
any
|
|
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 |
|
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 |
|
BackboneElement |
|
| 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>< < < < < < < < < < < <</effectivePeriod> <</useContext> <</jurisdiction><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 -->
< <<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)<linkId value="[string]"/><!-- 1..1 Unique id for item in questionnaire --> <Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict"> * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * 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 -->< < <| </answer[x]><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>
< < < < <</options> < <</value[x]> </option> <| </initial[x]><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 --> <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" : "",
"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)
"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
"Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">definition
"
"
"
"
"
"
"
">
">
">
">"
">"
">"
">"
">"
" }
" }
" }
" }
* code (ElementDefinition.code)
* type (ElementDefinition.type)
* required (ElementDefinition.min)
* repeats (ElementDefinition.max)
* maxLength (ElementDefinition.maxLength)
* 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: fhir: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 questionnairefhir: fhir: fhir: fhir: fhir: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: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 questionnairefhir: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 inferred from the definition: * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding)fhir:Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">Questionnaire.item.definition * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * 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 terminologyfhir: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 enabledfhir: # . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ]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: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) ] ], ...;# . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ]fhir:Questionnaire.item.item [ See Questionnaire.item ], ... ; # 0..* Nested questionnaire items ], ...; ]
Changes
since
DSTU2
R3
| Questionnaire |
|
|
|
|
| Questionnaire.status |
|
| Questionnaire.experimental |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
fail
All
tests
pass
round-trip
testing
and
5
r3
resources
are
invalid
(109
(0
errors).
).
)
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
|
|
Σ | 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..* |
|
Resource
that
can
be
subject
of
QuestionnaireResponse
ResourceType ( Required ) |
|
Σ | 0..1 |
|
|
|
Σ | 0..1 |
|
Name of the publisher (organization or individual) |
|
|
|
|
|
|
0..1 |
|
Natural
language
description
of
the
questionnaire
|
|
|
Σ | 0..* | UsageContext |
|
|
Σ | 0..* | CodeableConcept |
Intended
jurisdiction
for
questionnaire
(if
applicable)
Jurisdiction |
|
|
|
|
|
|
0..1 | markdown | Use and/or publishing restrictions | |
|
|
|
|
|
|
0..1 |
date
|
When the questionnaire was last reviewed | |
|
Σ |
|
|
|
![]() ![]() | Σ | 0..* | Coding |
Concept
that
represents
the
overall
questionnaire
|
|
I | 0..* | BackboneElement |
Questions
and
sections
within
the
Questionnaire
+ + + + Rule: Only 'choice' and 'open-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 |
|
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.
|
|
|
0..1 | string | Primary text for the item | |
|
1..1 | code |
group
|
display
|
boolean
|
decimal
|
integer
|
date
|
dateTime
+
QuestionnaireItemType ( Required ) |
|
|
?!
|
0..* | BackboneElement |
Only
allow
data
when
+ |
|
1..1 | string | Question that determines whether item is enabled | |
|
1..1 |
|
exists
|
=
|
!=
|
>
|
<
|
>=
|
<=
QuestionnaireItemOperator ( Required ) |
|
|
I |
|
Value
for
question
Questionnaire Answer Codes ( Example ) |
|
|
boolean | |||
|
decimal | |||
|
integer | |||
|
date | |||
|
dateTime | |||
|
time | |||
|
string | |||
|
|
Coding | ||
|
|
Quantity | ||
|
|
|||
|
I | 0..1 |
code
|
all
|
any
|
|
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 |
|
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 |
|
BackboneElement |
|
| 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>< < < < < < < < < < < <</effectivePeriod> <</useContext> <</jurisdiction><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 -->
< <<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)<linkId value="[string]"/><!-- 1..1 Unique id for item in questionnaire --> <Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict"> * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * 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 -->< < <| </answer[x]><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>
< < < < <</options> < <</value[x]> </option> <| </initial[x]><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 --> <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" : "",
"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)
"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
"Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">definition
"
"
"
"
"
"
"
">
">
">
">"
">"
">"
">"
">"
" }
" }
" }
" }
* code (ElementDefinition.code)
* type (ElementDefinition.type)
* required (ElementDefinition.min)
* repeats (ElementDefinition.max)
* maxLength (ElementDefinition.maxLength)
* 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: fhir: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 questionnairefhir: fhir: fhir: fhir: fhir: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: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 questionnairefhir: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 inferred from the definition: * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * options (ElementDefinition.binding)fhir:Any information provided in these elements on a Questionnaire Item overrides the information from the definition." class="dict">Questionnaire.item.definition * code (ElementDefinition.code) * type (ElementDefinition.type) * required (ElementDefinition.min) * repeats (ElementDefinition.max) * maxLength (ElementDefinition.maxLength) * 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 terminologyfhir: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 enabledfhir: # . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ]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: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) ] ], ...;# . One of these 12 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir:) ]fhir:Questionnaire.item.item [ See Questionnaire.item ], ... ; # 0..* Nested questionnaire items ], ...; ]
Changes
since
DSTU2
Release
3
| Questionnaire |
|
|
|
|
| Questionnaire.status |
|
| Questionnaire.experimental |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
fail
All
tests
pass
round-trip
testing
and
5
r3
resources
are
invalid
(109
(0
errors).
).
)
Alternate
See
the
Profiles
&
Extensions
and
the
alternate
definitions:
Master
Definition
(
XML
,
+
JSON
),
,
XML
Schema
/
Schematron
(for
)
+
JSON
Schema
,
ShEx
(for
Turtle
)
+
see
the
extensions
&
the
dependency
analysis
| Path | Definition | Type | Reference |
|---|---|---|---|
| Questionnaire.status |
The
lifecycle
status
of
|
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 |
|
Required |
|
| Questionnaire.item.enableWhen.operator |
|
Required |
|
|
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 true. | Required | EnableWhenBehavior |
|
|
Allowed values to answer questions. | Example |
|
| Questionnaire.item.initial.value[x] | Allowed values to answer questions. | Example | QuestionnaireAnswerCodes |
| 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
|
|
|
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
'choice'
and
'open-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
|
|
|
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 ('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.
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 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. 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
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.
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
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.
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.
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.
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.comment
|
A
reference
to
the
standard
Observation
element
comment
|
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.
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 |
| 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")
"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
ordinalValue
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.
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 |