This
page
is
part
of
the
FHIR
Specification
(v0.0.82:
(v1.0.2:
DSTU
1).
2).
The
current
version
which
supercedes
this
version
is
5.0.0
.
For
a
full
list
of
available
versions,
see
the
Directory
of
published
versions
.
Page
versions:
R5
R4B
R4
R3
R2
This specification defines a series of different types of resource that can be used to exchange and/or store data in order to solve a wide range of healthcare related problems, both clinical and administrative. In addition, this specification defines several different ways of exchanging the resources.
A resource is an entity that:
Resources have multiple representations .
All
resources
have
the
The
following
optional
or
mandatory
elements
and
properties:
properties
are
defined
for
all
resources:
Most resources are derived from Domain Resources - so they also can contain text, contained resources, extensions, and data elements specific to the particular domain of the resource. There is a special type of resource called Bundle for collections of resources.
Note: there is documentation for the Structure , UML , XML , and JSON representations of the resource structure.
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
n/a | Base Resource | ||
|
Σ | 0..1 | id |
Logical
id
of
this
|
|
Σ | 0..1 | Meta | Metadata about the resource |
|
?! Σ | 0..1 | uri | A set of rules under which this content was created |
|
0..1 | code |
Language
of
the
resource
content
Language
(
Required
)
|
|
Documentation
for
this
format
| ||||
UML Diagram
XML Template
<<[name] xmlns="http://hl7.org/fhir"><!-- from Element: extension -->
< <</meta> < <<id value="[id]"/><!-- 0..1 Logical id of this artifact --> <meta><!-- 0..1 Meta Metadata about the resource --></meta> <implicitRules value="[uri]"/><!-- 0..1 A set of rules under which this content was created --> <language value="[code]"/><!-- 0..1 Language of the resource content--> </[name]>
JSON Template
{
"resourceType" : "",
"
"
"
"
"resourceType" : "[name]",
"id" : "<id>", // Logical id of this artifact
"meta" : { Meta }, // Metadata about the resource
"implicitRules" : "<uri>", // A set of rules under which this content was created
"language" : "<code>" // Language of the resource content
}
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
n/a | Base Resource | ||
|
Σ | 0..1 | id |
Logical
id
of
this
|
|
Σ | 0..1 | Meta | Metadata about the resource |
|
?! Σ | 0..1 | uri | A set of rules under which this content was created |
|
0..1 | code |
Language
of
the
resource
content
Language
(
Required
)
|
|
Documentation
for
this
format
| ||||
XML Template
<<[name] xmlns="http://hl7.org/fhir"><!-- from Element: extension -->
< <</meta> < <<id value="[id]"/><!-- 0..1 Logical id of this artifact --> <meta><!-- 0..1 Meta Metadata about the resource --></meta> <implicitRules value="[uri]"/><!-- 0..1 A set of rules under which this content was created --> <language value="[code]"/><!-- 0..1 Language of the resource content--> </[name]>
JSON Template
{
"resourceType" : "",
"
"
"
"
"resourceType" : "[name]",
"id" : "<id>", // Logical id of this artifact
"meta" : { Meta }, // Metadata about the resource
"implicitRules" : "<uri>", // A set of rules under which this content was created
"language" : "<code>" // Language of the resource content
}
| Path | Definition | Type | Reference |
|---|---|---|---|
| Resource.language |
A
human
|
Required |
IETF
language
tag
|
Each
resource
has
an
"id"
element
which
contains
the
logical
identity
of
the
resource
assigned
by
the
server
responsible
for
storing
it.
Resources
always
have
a
known
identity
except
for
the
special
case
when
a
new
resources
is
being
sent
to
a
server
to
assign
an
identity
(
create
interaction
).
The
logical
identity
is
unique
within
the
space
of
all
resources
of
the
same
type
on
the
same
server.
Once
assigned,
the
identity
is
never
changed,
though
copies
of
changed.
Note
that
if
the
same
resource
made
elsewhere
may
is
copied
to
another
server,
the
copy
might
not
be
able
to
retain
the
same
logical
identity.
The
full
literal
identity
of
a
resource
-
the
actual
HTTP
address
it
which
it
can
be
accessed
-
is
an
absolute
URL
constructed
from
the
server
base
address
at
which
it
is
found,
the
resource
type,
and
the
Logical
Id,
such
as
http://test.fhir.org/rest/Patient/123
(where
123
is
the
Logical
Id).
Note
that
implementations
SHOULD
NOT
assume
that
the
identity
of
a
resource
is
always
resolvable
to
a
literal
server
-
it
may
be
temporarily
unavailable,
or
not
available
by
policy
(e.g.
firewalls)
or
in
some
cases,
it
may
not
actually
exist
(e.g.
use
of
resource
outside
a
RESTful
environment).
Resources
reference
each
other
by
their
identity.
These
references
are
allowed
to
be
absolute
or
relative
(see
Resource
References
for
further
discussion).
Copying
or
moving
resources
from
one
server
to
another
means
that
resources
acquire
a
new
identity.
For
further
details,
see
Managing
Resource
Identity
.
Logical
ids
(and
therefore
literal
identities)
are
case
sensitive.
Logical
Ids
are
always
opaque,
and
external
systems
need
not
and
should
not
attempt
to
determine
their
internal
structure.
An
A
logical
id
SHALL
always
be
represented
in
the
same
way
in
resource
references
and
URLs.
Ids
can
be
up
to
64
characters
long,
and
contain
any
combination
of
upper
and
lowercase
ASCII
letters,
numerals,
"-"
and
".".
In
addition
to
the
Resource
logical
id
and
literal
identity
element
"id",
discussed
above,
many
resources
contain
an
element
named
"identifier",
which,
if
populated,
contains
a
different
kind
of
identifier.
The
resource
identity
is
a
direct
("literal")
reference
that
is
intended
to
be
accessed
via
http
for
a
resource
to
be
returned.
As
a
resource
is
resources
are
copied
from
server
to
server,
the
resource
their
literal
identity
will
change
as
the
servers
assign
identities
to
the
resource.
change,
and
their
logical
id
may
change.
However
However,
all
copies
of
the
reosurce
resource
refer
to
the
same
underlying
concept,
and
this
concept
may
also
be
represented
in
other
formats
(variously,
v2,
CDA,
HL7
v2
,
CDA
,
XDS,
and
many
more).
Each
representation
carries
the
same
identifier
that
identifies
it
consistently
across
all
contexts
of
use.
This
is
known
as
the
business
identifier,
and
is
found
in
the
identifier
element.
In
a
few
resources,
there
is
a
url
element
that
serves
a
similar
purpose,
but
is
constrained
to
be
a
literal
URL.
URL
for
implementation
reasons.
All
resources
that
have
an
identifier
element
support
searching
by
the
identifier,
so
that
records
can
located
by
that
method.
So
if
an
HL7
v2
message
has
the
following
OBR:
OBR|1|845439^GHH OE|1045813^GHH LAB|1554-5^GLUCOSE^LN|||200202150730|...
Then the DiagnosticReport it represents can be located using the following query:
GET [base]/DiagnosticReport?identifier=1045813
If a FHIR server is a stable server that is the canonical master source for the definition of a concept, the business identifier for all systems may be the same as the literal identity of the resource on the master server.
Each resource contains an element "meta", of type "Meta", which is a set of metadata that provides technical and workflow context to the resource. The metadata items are all optional, though some of all of them may be required in particular implementations or contexts of use.
| Metadata Item | Type | Usage |
|---|---|---|
| versionId (0..1) | id |
Changes
each
time
the
content
of
the
resource
changes.
Can
be
referenced
in
a
resource
reference
.
Can
be
used
to
ensure
that
updates
are
based
on
the
latest
version
of
the
resource.
The version can be globally unique, or scoped by the Logical Id of the resource. Version identifiers are generally either a serially incrementing id scoped by the logical id, or a uuid, though neither of these approaches is required. There is no fixed order for version ids - clients cannot assume that a versionId that comes after another one either numerically or alphabetically represents a later version. The same versionId can never be used for more than one version of the same resource. Note that servers SHOULD support versions, but some are unable to |
| lastUpdated (0..1) | instant | If populated, this value changes each time the content of the resource changes. it can be used by a system or a human to judge the currency of the resource content. Note that version aware updates do not use this element |
| profile (0..*) | uri |
An
assertion
that
the
content
conforms
to
a
resource
profile
(a
StructureDefinition
|
| security (0..*) | Coding | Security labels applied to this resource. These tags connect resources in specific ways to the overall security policy and infrastructure. Security tags can be updated when the resource changes, or whenever the security sub-system chooses to |
| tag (0..*) | Coding | Tags applied to this resource. Tags are used to relate resources to process and workflow. Applications are not required to consider the tags when interpreting the meaning of a resource. |
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
Σ | Element | Metadata about a resource | |
|
Σ | 0..1 | id | Version specific identifier |
|
Σ | 0..1 | instant | When the resource version last changed |
|
Σ | 0..* | uri | Profiles this resource claims to conform to |
|
Σ | 0..* | Coding |
Security
Labels
applied
to
this
resource
All Security Labels ( Extensible ) |
|
Σ | 0..* | Coding | Tags applied to this resource |
Documentation
for
this
format
| ||||
UML Diagram
XML Template
<meta xmlns="http://hl7.org/fhir"><!-- from Element: extension -->
< < < <</security> <</tag><versionId value="[id]"/><!-- 0..1 Version specific identifier --> <lastUpdated value="[instant]"/><!-- 0..1 When the resource version last changed --> <profile value="[uri]"/><!-- 0..* Profiles this resource claims to conform to --> <security><!-- 0..* Coding Security Labels applied to this resource --></security> <tag><!-- 0..* Coding Tags applied to this resource --></tag> </meta>
JSON Template
{
// from Element: extension
"
"
"
"
"
"versionId" : "<id>", // Version specific identifier
"lastUpdated" : "<instant>", // When the resource version last changed
"profile" : ["<uri>"], // Profiles this resource claims to conform to
"security" : [{ Coding }], // Security Labels applied to this resource
"tag" : [{ Coding }] // Tags applied to this resource
}
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
Σ | Element | Metadata about a resource | |
|
Σ | 0..1 | id | Version specific identifier |
|
Σ | 0..1 | instant | When the resource version last changed |
|
Σ | 0..* | uri | Profiles this resource claims to conform to |
|
Σ | 0..* | Coding |
Security
Labels
applied
to
this
resource
All Security Labels ( Extensible ) |
|
Σ | 0..* | Coding | Tags applied to this resource |
Documentation
for
this
format
|
||||
XML Template
<meta xmlns="http://hl7.org/fhir"><!-- from Element: extension -->
< < < <</security> <</tag><versionId value="[id]"/><!-- 0..1 Version specific identifier --> <lastUpdated value="[instant]"/><!-- 0..1 When the resource version last changed --> <profile value="[uri]"/><!-- 0..* Profiles this resource claims to conform to --> <security><!-- 0..* Coding Security Labels applied to this resource --></security> <tag><!-- 0..* Coding Tags applied to this resource --></tag> </meta>
JSON Template
{
// from Element: extension
"
"
"
"
"
"versionId" : "<id>", // Version specific identifier
"lastUpdated" : "<instant>", // When the resource version last changed
"profile" : ["<uri>"], // Profiles this resource claims to conform to
"security" : [{ Coding }], // Security Labels applied to this resource
"tag" : [{ Coding }] // Tags applied to this resource
}
Meta
is
used
in
the
following
places:
Resource
Note
that
the
RESTful
API
defines
some
Operations
that
provide
direct
read
and
write
access
to
the
meta
element.
All
resources
are
conceptually
versioned,
and
each
resource
sits
at
the
head
of
a
linear
list
of
past
versions.
The
past
versions
are
superceded
superseded
by
the
current
version,
and
only
available
for
audit/integrity
purposes.
The
current
version
is
e.g.
http://acme.org/fhir/ResourceType/id123,
and
a
past
version
would
be
http://acme.org/fhir/ResourceType/id123/_history/v2.
Note
that
there's
no
requirement
for
servers
to
keep
a
history.
The
history
interaction
is
provided
for
where
this
is
an
appropriate
service
to
provide.
However,
Whether
whether
a
server
keeps
them
or
not,
past
versions
are
dead
and
gone.
The
current
version
of
the
resource
is
in
the
Resource.meta.versionId
.
For
a
value
set
this
would
be:
<ValueSet>
<meta>
<versionId value="v2"/>
</meta>
</ValueSet>
That version changes every time the server updates the resource and writes a new version over the top of an existing one.
Some resources have another version marker in them. For instance, ValueSet has another version in it:
<ValueSet> <url value="http://acme.com/fhir/ValueSet/example"/> <version value="2.0"/> </ValueSet>
This says that this is version 2.0 of the 'example' value set. This is the business version of the value set, the one that humans get involved with. These 2 versions elements have quite different lifecycles. To illustrate, take these cases:
A reference to a custom agreement about how the resources are used that was followed when the resource was constructed, and which must be understood when processing the content.
Asserting
this
rule
set
restricts
the
content
to
be
only
understood
by
a
limited
set
of
trading
partners.
This
inherently
limits
the
usefulness
of
the
data
in
the
long
term,
and
should
be
avoided
where
possible.
However
However,
the
existing
health
eco-system
is
highly
fractured,
and
not
yet
ready
to
define,
collect,
and
exchange
data
in
a
generally
exchangeable
sense.
Note that resources are almost always constructed following some custom agreement. Best practice is that such agreements make all knowledge about the content of the resource explicit; if custom agreements do this, and declare their extensions as required, then it is not necessary to understand the agreement when processing the resource content.
Each
resource
may
have
a
language
element
that
specifies
the
base
language
of
the
content
using
a
code
defined
in
BCP
47
.
The
language
element
is
provided
to
support
indexing
and
accessibility
(e.g.
text-to-speech
use
the
language
tag).
There is no default language, though one may be inferred from the context of use. Not all of the content of the resource has to be in the specified language.
If
a
language
is
specified,
it
should
also
be
specified
on
the
Narrative
Text
.
The
html
language
tag
in
the
narrative
is
used
when
processing
the
narrative.
The
language
tag
on
the
resource
is
provided
for
use
to
so
that
applications
processing
the
data
in
the
resource
can
specify
the
language
of
any
alternate
presentations
generated
from
the
data
in
the
resource
data.
These 3 metadata attributes are part of the resource, but are never used to keep information that needs to be understood when interpreting the content of a resource; their function is limited to finding and controlling access to the resource, and connecting resources to technical or clinical workflow.
Tags are used to associate additional operational information with the Resources, including such as workflow management. A typical use of tagging would be to maintain an informal list of resources that need review.
In
a
general
tag,
the
coded
concept
may
be
a
reference
to
a
healthcare
vocabulary,
including
ones
defined
in
this
specification,
or
vocabularies
such
as
those
defined
by
HL7
for
other
purposes
(e.g.
HL7
v2
and
v3/CDA),
HL7
v3
/
CDA
),
LOINC,
or
SNOMED
CT.
Alternatively,
the
concept
may
be
one
defined
by
the
implementation
in
the
local
context.
The
list
of
tags
on
a
resource
is
a
set,
where
each
tag
is
unique
based
on
the
system
+
code
combination.
A
profile
assertion
represents
a
claim
that
the
resource
conforms
to
the
identified
StructureDefinition
,
which
makes
rules
about
what
content
is
allowed
to
be
in
a
resource.
In
a
profile
tag,
the
term
is
a
URL
that
references
a
the
an
identified
StructureDefinition
resource.
It's always possible to determine whether a resource conforms to any profile simply by testing it against the profile (the validation tools provide the functionality to perform this test in a variety of contexts). However there are several circumstances where simply examining whether a resource conforms to a particular profile as needed is impractical:
Profile Tags serve these use cases - a client/creator of a resource can tag the resource with an assertion that the resource conforms to a particular structure definition. The server/receiver of the resource can choose to take this assertion at face value, or to assist in locating the correct StructureDefinition against which to validate the resource.
Note:
resources
can
conform
to
multiple
profiles
at
once.
A
resource
can
conform
to
a
profile
without
ever
being
labelled
labeled
that
it
does,
or
a
resource
may
falsely
claim
to
conform
to
a
profile.
For
this
reason,
applications
processing
resources
SHOULD
always
depend
on
the
contents
of
the
resource
when
processing
them,
and/or
check
resources
against
the
StructureDefinition
s
directly
rather
than
relying
the
existence
of
profile
tags
for
meaning.
Profile
Tags
are
provided
as
a
method
of
finding
resources
that
conform
to
a
particular
StructureDefinition
,
not
statements
of
meaning
about
the
resource.
Many trading partner agreements will make rules about what claims can be made and when they must be tested, which will make the profile assertion more reliable.
The
list
of
profiles
on
a
resource
is
a
set,
where
each
profile
is
unique
based
the
value
of
the
URI.
A security label is attached to a resource to provide specific security metadata about the information in the resource. For further information, see Security Labels .
The
list
of
security
on
a
resource
is
a
set,
where
each
tag
is
unique
based
on
the
system
+
code
combination.

When a resource is updated (e.g. on the RESTful interface), servers generally follow this pattern:
However, in some cases, an update may invalidate existing tags. Servers may update or remove previously existing recognized tags if this is known to be appropriate.

All
resources
in
this
specification
are
assigned
a
"Maturity
Level",
known
as
FMM
(after
the
well
known
CMM
grades).
The
FMM
level
can
be
used
by
implementers
to
judge
how
advanced
-
and
therefore
stable
-
a
resource
is.
The
following
FMM
levels
are
defined:
and
has
been
subject
to
a
round
of
formal
balloting
with
at
least
10
implementer
comments
drawn
from
at
least
3
organizations
resulting
in
at
least
one
substantive
change
The
Maturity
level
is
strongly
related
to
stability;
the
higher
the
maturity
level,
the
more
controls
are
enforced
to
restrict
breaking
changes
to
the
resource.
For
further
information,
and
discussion,
see
the
FHIR
Wiki
.
Common search parameters defined by this resource. See Searching for more information about searching in REST, messaging, and services.
| Name | Type | Description | Paths |
|
|
|
|
|
|
|
token |
|
|
| _lastUpdated | date | When the resource version last changed | Resource.meta.lastUpdated |
| _profile | uri | Profiles this resource claims to conform to | Resource.meta.profile |
| _query | token | A custom search profile that describes a specific defined query operation | |
| _security | token | Security Labels applied to this resource | Resource.meta.security |
| _tag | token | Tags applied to this resource | Resource.meta.tag |
| _text | string | Search on the narrative of the resource |