This
page
is
part
of
the
FHIR
Specification
(v1.8.0:
STU
3
Draft).
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
12.1
Workflow
Description
Workflow
is
an
essential
part
of
healthcare
-
orders,
care
protocols,
referrals
are
the
drivers
of
most
activity
within
in-patient
settings
and
a
great
deal
of
activity
in
community
care
as
well.
FHIR
is
concerned
with
workflow
when
there's
a
need
to
share
information
about
workflow
state
or
relationships,
when
there's
a
need
to
coordinate
or
drive
the
execution
of
workflow
across
systems
and
when
there's
a
need
to
define
allowed
actions,
dependencies
and
conditions
on
behavior.
Workflow
state
&
relationships
FHIR
does
not
need
to
be
used
for
the
execution
of
workflow.
Orders,
care
plans,
lab
results,
hospital
admissions,
claim
payments
and
other
records
can
all
be
shared
using
FHIR
without
the
process
to
actually
solicit
fulfillment
of
those
orders
or
requesting
payment
of
those
claims
being
driven
by
a
FHIR
transaction.
Interoperable
support
for
workflow
execution
is
actually
a
more
advanced
FHIR
activity
because
it
requires
a
higher
degree
of
standardization.
Rather
than
merely
standardizing
the
data
to
exchange,
interoperable
workflow
execution
requires
standardization
of
the
processes,
roles
and
activities
of
the
different
systems.
However,
even
without
using
FHIR
for
workflow
execution,
there's
still
a
need
to
standardize
the
data
elements
related
to
workflow:
how
does
an
event
or
a
result
point
to
the
order
that
authorized
it?
How
do
parent
steps
and
child
steps
get
linked
together?
How
does
a
care
plan
identify
what
protocol
it's
adhering
to?
FHIR
defines
three
categories
of
resources
that
are
involved
in
activities
-
requests
,
events
and
definitions
.
Each
of
these
different
types
has
a
"pattern"
associated
with
it.
Resources
that
fall
into
that
type
are
encouraged
to
adhere
to
their
respective
pattern.
These
patterns
provide
standard
elements
that
are
typical
for
most
resources
of
each
type.
Strict
adherence
is
not
required
as
work
groups
are
expected
to
align
with
typical
domain
behavior
and
requirements
as
more
authoritative
than
"desired"
architectural
patterns.
In
some
cases,
capabilities
might
be
supported
with
extensions
rather
than
core
elements
where
a
pattern
capability
is
deemed
to
be
"not
common,
but
still
relevant"
for
a
given
resource.
A
full
description
of
the
patterns
and
their
interrelationships
can
be
found
in
the
Workflow
Resource
Patterns
section
of
this
page.
Workflow
execution
In
addition
to
defining
patterns
for
resources
used
in
workflow
processes,
FHIR
supports
the
execution
of
those
processes
as
well.
However,
FHIR
does
not
define
a
"one
size
fits
all"
solution
for
workflow
architecture.
FHIR
supports
a
variety
of
interoperability
paradigms
and
most
of
them
(
REST
,
Messaging
and
Services
)
provide
support
for
driving
workflow
execution.
(The
Document
paradigm
does
not
directly
support
driving
behavior,
though
it
can
be
combined
with
one
of
the
other
patterns
to
do
so.)
In
addition,
several
of
these
paradigms
allow
multiple
approaches
to
supporting
workflow,
depending
on
the
context
and
needs
of
the
workflow
process.
The
Workflow
Communication
Patterns
section
of
this
page
describes
a
number
of
options
for
workflow
execution,
summarizes
their
respective
pros
and
cons
and
makes
recommendations
for
the
circumstances
in
which
they
might
best
be
used.
Workflow
definition
The
definition
of
protocols,
order
sets,
guidelines
and
other
structures
that
define
what
sorts
of
activities
should
occur,
what
order
they
should
occur
on,
what
dependencies
they
have,
in
what
circumstances
they
should
start
or
end,
etc.
is
handled
by
a
pair
of
resources:
-
PlanDefinition
defines
the
interrelationships
of
steps
and
the
rules
around
their
execution
-
ActivityDefinition
defines
an
activity
to
be
performed
as
a
single
step
The
use
of
these
two
artifacts
is
documented
TODO.
12.1.1
Workflow
Resource
Patterns
Not
all
resources
in
FHIR
are
related
to
workflow
-
many
are
used
to
describe
entities
and
roles
(patients,
medications,
etc.)
or
infrastructure
(structure
definitions,
value
sets,
etc.).
However,
a
large
proportion
of
the
FHIR
resources
are
devoted
to
the
description
of
activities
in
one
fashion
or
another
and
almost
all
of
these
fall
into
the
realm
of
workflow
-
they
describe
things
that
can
be
done
(definitions),
are
desired
to
be
done
(requests)
or
that
have
been
done
(events).
The
table
below
summarizes
the
list
of
workflow-relevant
resources:
12.1.1.1
Workflow
resources
|
Requests
|
Resources
that
ask
for
or
express
a
desire/intention
for
something
to
be
done
|
|
|
|
|
|
|
Events
|
Resources
that
express
that
something
has
been
done
and
which
can
potentially
be
done
as
a
result
of
a
request
|
|
|
|
|
|
|
Definitions
|
Resources
that
define
something
that
can
potentially
happen
in
a
patient
and
time-independent
manner
|
|
|
|
|
|
|
*
|
The
Appointment
and
AppointmentResponse
resources
do
not
follow
the
same
sort
of
request/response
pattern
as
the
other
resources.
Their
design
is
based
on
iCal
conventions,
so
their
model
won't
reflect
the
same
alignment
as
most
other
resources.
They
are
included
here
for
completeness.
|
|
†
|
ProcessRequest
and
ProcessResponse
are
candidates
for
retirement
with
their
function
subsumed
by
Task
|
|
‡
|
The
Task
resource
takes
on
characteristics
of
both
"requests"
and
"events"
and
thus
shares
characteristics
from
both
patterns
|
Note
that
requests,
events
and
definitions
don't
exist
in
a
1:1:1
relationship.
Some
requests
and
events
have
obvious
pairings.
For
example,
a
SupplyRequest
will
generally
always
pair
with
a
SupplyDelivery
.
The
same
goes
for
EnrollmentRequest
/
EnrollmentResponse
,
etc.
On
the
other
hand,
for
other
resources
there
isn't
a
strict
pairing.
A
ReferralRequest
might
be
responded
to
by
an
Encounter
,
DiagnosticReport
,
Procedure
,
RiskAssessment
,
etc.
Similarly,
a
Procedure
might
be
triggered
by
a
DiagnosticRequest
,
ProcedureRequest
,
or
ReferralRequest
.
The
set
of
common
linkages
should
be
asserted
in
their
respective
resources.
The
specific
types
of
responses
for
a
given
request
will
be
governed
by
the
Request.code,
any
workflow
definitions/protocols
referenced
and
local
convention.
12.1.1.2
Workflow
Resource
Relationships
These
three
patterns
of
resources
have
a
standard
set
of
relationships,
both
with
themselves,
as
well
as
with
each
other.
Specifically:
-
both
requests
and
events
can
point
to
their
respective
definitions
-
events
and
requests
can
point
to
the
proposals,
plans
or
orders
they
are
based
on
-
events
and
definitions
can
be
organized
into
parent-child
relationships
of
parents
and
components
-
definitions
and
requests
can
both
replace
prior
versions
of
the
same
type
of
artifact
This
list
of
relationships
is
not
exhaustive,
but
covers
those
that
are
"standardized"
as
part
of
the
patterns.
Further
description
and
guidance
on
these
relationships
can
be
found
in
the
Request
,
Event
and
Definition
logical
models.
12.1.1.3
Request
Resource
Pattern
Requests
are
resources
that
represent
the
proposal,
plan
or
order
for
an
activity
to
occur.
A
Request
pattern
defines
the
common
elements
typically
present
on
all
request
resources.
The
amount
of
information
needed
for
a
Request
to
be
actionable
can
vary
by
circumstance.
Some
request
instances
may
not
be
"fully
specified"
-
additional
information
from
protocol,
patient
preference
and/or
professional
decision-making
may
be
necessary
before
the
authorized
action
can
occur.
For
example,
a
MedicationOrder
might
be
specified
without
indicating
a
strength
or
route
in
situations
where
the
pharmacy
(or
even
nursing
information)
has
the
authority
to
determine
those
parameters.
A
VisionPrescription
might
not
be
actionable
until
frames
have
been
chosen
and
the
necessary
measurements
of
the
patient's
face
have
been
taken
to
allow
the
lenses
to
be
positioned
appropriately
within
the
frames.
All
requests
with
an
intent
of
"order"
authorize
something.
Whether
what
is
authorized
is
sufficient
to
be
immediately
actionable
depends
on
who
is
fulfilling
the
order
and
the
context
in
which
the
fulfillment
request
is
made.
The
determination
of
whether
a
given
"request"
is
actionable
may
be
made
by
the
systems
involved
or
the
humans
being
asked
to
act.
As
well,
the
existence
of
a
"Request"
instance
doesn't
necessarily
imply
that
fufillment
will
be
requested
immediately
-
or
even
ever.
The
decision
to
request
fulfillment
may
be
delegated
to
the
patient
or
to
down-stream
practitioners.
Such
fufilling
practitioners
may
need
to
capture
additional
information
prior
to
executing
the
fufillment.
12.1.1.4
Event
Resource
Pattern
Events
are
resources
that
represent
the
ongoing
or
completed
execution
of
some
activity
or
observation.
For
example,
a
clinical
procedure,
a
financial
transaction,
the
recording
of
a
diagnosis,
etc.
An
Event
pattern
defines
the
common
elements
typically
present
on
all
event
resources.
12.1.1.5
Definition
Resource
Pattern
Definitions
are
resources
that
represent
activities
that
could
be
performed
in
a
time
and
subject-independent
manner
such
as
a
protocol,
order
set,
clinical
guideline,
etc.
A
Definition
pattern
defines
the
common
elements
typically
present
on
all
event
resources.
12.1.2
Workflow
Communication
Patterns
Workflow
execution
is
supported
in
FHIR
by
a
large
number
of
mechanisms.
In
considering
how
best
to
interoperate
around
workflow,
there
are
a
number
of
considerations:
-
Which
paradigm
do
you
want
to
use
(REST,
messaging
or
services)?
-
Is
there
infrastructure
in
place
to
support
polling,
push
notifications
via
subscriptions
or
both?
-
Is
there
a
need
for
confirmation
that
the
desired
performer
agrees
to
act,
or
can
that
be
presumed?
-
Is
there
a
need
to
negotiate
whether/how
the
requested
action
will
be
performed?
-
Can
the
requesting
and
performing
system
communicate
directly?
Are
they
able
to
post
to
each
other's
servers
(if
using
REST)?
-
Is
there
an
ability/need
to
have
a
queue
server
to
facilitate
workflow
execution?
-
How
many
potential
actors
are
involved?
-
Will
the
workflow
always
be
directed
or
is
there
a
pool
of
potential
performers
who
could
choose
to
perform
the
requested
action?
This
section
highlights
some
of
the
more
common
patterns
and
identifies
their
characteristics
and
limitations
and
provides
recommendations
on
when
each
approach
may
be
most
useful
or
relevant.
Please
note
that
this
list
of
patterns
is
not
exhaustive.
Patterns
can
be
combined
in
various
ways
and
there
are
likely
some
possibilities
we
haven't
thought
about
yet
(feel
free
to
submit
additional
patterns
using
the
'submit
a
change'
link
at
the
bottom
of
the
page).
As
well,
the
recommendations
given
here
are
just
that
-
recommendations.
Implementers
are
free
to
choose
which
patterns
they
wish
to
support.
Because
of
this,
tight
interoperability
around
workflow
execution
(as
with
any
other
tight
interoperability
using
FHIR)
will
depend
on
communicating
participants
doing
some
up-front
negotiation
around
how
they
plan
to
support
workflow
execution
or
all
communicating
partners
will
need
to
adhere
to
an
implementation
guide
that
sets
out
clear
interoperability
expectations.
Prior
to
reviewing
this
list
of
options,
readers
are
encouraged
to
be
familiar
with
the
following
pages
and
resources:
REST
,
messaging
,
operations
,
services
and
the
Subscription
resource.
The
scenarios
below
make
use
of
a
few
conventions:
-
The
focus
here
is
on
a
"request"
and
the
actioning
of
that
request.
Almost
all
workflows
can
be
broken
down
to
a
sequence
of
these
steps,
though
the
responsibilities
of
the
different
parties
may
shift
for
each
interaction
and
there
can
be
more
than
two
parties
involved
in
the
overall
workflow
-
The
request
could
be
as
simple
as
"please
look
at
this
information"
and
the
response
could
be
as
simple
as
an
implicit
"it's
been
looked
at"
or
the
request
could
be
for
some
more
involve
action
that
may
involve
reporting
back
multiple
interim
and
final
steps
-
The
requester
is
referred
to
as
the
"placer"
and
the
performer
is
referred
to
as
the
"filler",
which
are
often
seen
as
order-specific
terms.
However,
in
this
context,
the
terms
hold
whether
the
request
is
expressed
as
a
proposal,
plan
or
full-blown
order
-
Each
of
the
patterns
defines
the
set
of
steps
involved
in
processing
the
request,
lists
some
of
the
benefits
and
limitations
associated
with
the
approach
and
then
makes
recommendations
about
when
the
pattern
is
most
appropriate
-
The
descriptions
of
these
patterns
focuses
on
the
notion
of
requesting
fulfillment
of
a
request.
However
most
of
these
patterns
are
also
applicable
to
requests
for
status
change,
requests
for
information,
etc.
If
a
pattern
is
limited
in
the
types
of
execution
it
can
trigger,
this
will
be
noted
in
the
"limitations"
section.
12.1.2.1
Communication
Pattern
Overview
The
list
of
patterns
discussed
here
is
as
follows:
TODO:
Insert
Jose's
decision
tree
here?
12.1.2.2
Option
A:
Simple
RESTful
POST
or
PUT
12.1.2.2.1
Steps
-
The
placer
makes
a
RESTful
call
to
create
or
update
a
record
or
a
POST
to
invoke
an
operation
over
HTTP
-
The
receiver
responds
with
a
2xx
HTTP
response
indicating
whether
the
request
was
successfully
processed
or
not
and,
if
appropriate,
provides
the
response
to
the
request
in
the
payload
of
the
HTTP
response
12.1.2.2.2
Benefits
-
Simplest
of
all
the
possible
workflow
architectures
-
Placer
knows
whether
the
request
was
accepted
or
not
and
knows
when
the
task
has
been
done
12.1.2.2.3
Limitations
-
Only
works
for
automated
execution
where
the
decision
to
perform
the
request
and
the
execution
of
the
request
can
be
done
synchronously
within
the
HTTP
timeout
period
(generally
on
the
order
of
10s
of
seconds).
-
Requires
that
the
placer
have
authority
to
post
directly
to
the
placer's
system
-
Requires
that
the
"request"
be
expressible
as
a
simple
creation,
update
or
operation
invocation
-
Only
works
for
"fulfillment"
requests
for
Request
resources
-
can't
handle
request
for
state
changes
or
information
12.1.2.2.4
Usage
Recommendations
This
is
by
far
the
most
common
pattern
in
FHIR
for
simple
changes
as
it
requires
the
least
overhead.
However,
if
human
processing
is
involved
in
the
request
execution,
then
this
approach
won't
suffice.
This
approach
is
listed
here
to
make
sure
that
implementers
consider
whether
they
can
make
this
one
work
first
before
falling
back
to
one
of
the
more
sophisticated
patterns.
12.1.2.3
Option
B:
Direct
POST
of
request
to
fulfiller's
system
12.1.2.3.1
Steps
-
Placer
system
invokes
a
create
by
POSTing
a
'request'
resource
(e.g.
MedicationRequest
,
DiagnosticRequest
,
ReferralRequest
,
etc.)
to
the
appropriate
RESTful
resource
endpoint
(e.g.
[base]/MedicationRequest)
on
the
filler
system
and
places
an
actionable
tag
on
the
resource
that
indicates
the
request
is
intended
to
be
acted
upon,
not
merely
stored.
-
The
filler
synchronously
responds
with
a
"201"
indicating
that
that
they
have
received
and
stored
(created)
the
resource
on
their
system
-
At
some
later
point,
the
filler
POSTs
an
'event'
resource
(e.g.
MedicationDispense
,
DiagosticReport
,
Encounter
,
etc.)
to
the
appropriate
resource
endpoint
on
the
placer
system,
including
a
basedOn
link
to
the
'request'
resource
that
the
action
was
performed
in
fulfillment
of.
-
The
placer
system
synchronously
responds
with
a
"201"
indicating
they've
received
and
store
(created)
the
resource
on
their
system
12.1.2.3.2
Benefits
-
Lowest
amount
of
overhead.
No
need
for
Task
.
No
need
for
polling
or
subscriptions
-
Explicit
acknowledgement
that
filler
has
received
the
request
12.1.2.3.3
Limitations
-
Can
only
use
when
requesting
fulfillment
(can't
use
to
request
status
change
or
other
updates)
-
Placer
and
filler
must
be
able
to
communicate
directly
(i.e.
know
each
other's
respective
endpoints)
and
must
each
have
a
FHIR
server
and
must
have
"write"
permissions
to
each
other's
servers.
This
could
become
unmanageable
if
there
are
a
large
(or
dynamic)
number
of
placers
and
fillers
that
need
to
communicate
-
No
indication
of
agreement
to
act
on
the
request
-
There's
no
ability
to
negotiate
fulfillment
-
no
ability
to
say
"no"
12.1.2.3.4
Usage
Recommendations
Use
this
approach
when
there's
no
ability
to
have
queue
servers
and
no
support/need
for
complexity
of
Task,
polling
or
pub/sub
(and
no
need
for
negotiation
or
the
ability
for
the
filler
to
say
"no").
This
is
a
pseudo-messaging
architecture
that
doesn't
actually
use
messaging
architecture.
12.1.2.4
Option
C:
POST
of
request
to
placer/queue
server
system,
receiver
uses
polling
12.1.2.4.1
Steps
-
Placer
system
invokes
a
"create"
action
by
POSTing
a
'request'
resource
(e.g.
MedicationRequest,
DiagnosticOrder,
ReferralRequest,
etc.)
to
the
appropriate
RESTful
resource
endpoint
(e.g.
[base]/MedicationRequest)
on
either
its
own
system
or
a
third
party
queue
server
system
and
sets
a
"flag"
on
the
resource
that
indicates
the
request
is
"actionable".
The
request
explicitly
identifies
the
intended
fullfiller
-
The
filler
system,
at
some
agreed
frequency,
RESTfully
queries
the
placer
or
queue
server
system
to
see
if
there
are
any
"new"
requests
that:
are
tagged
as
"actionable",
have
the
filler
identified
as
the
intended
performer,
and
are
a
type
of
request
"of
interest"
to
the
filler.
(The
queries
could
be
initiated
by
the
filler
system
automatically
in
the
background
or
upon
triggering
by
user
of
the
filler
system.)
-
At
some
later
point,
the
filler
POSTs
an
'event'
resource
(e.g.
MedicationDispense,
DiagosticReport,
Encounter,
etc.)
to
the
appropriate
resource
endpoint
on
either
its
own
system,
the
same
queue
server
as
the
request
was
placed
on
or
some
alternate
queue
server,
including
a
link
to
the
'request'
resource
that
the
action
was
performed
in
fulfillment
of.
-
The
placer
system,
at
some
agreed
frequency,
RESTfully
queries
the
filler
or
queue
server
system
to
see
if
there
are
any
"new"
events
that
are
tied
to
any
outstanding
orders
the
placer
has
initiated.
(The
queries
could
be
initiated
by
the
placer
system
automatically
in
the
background
or
upon
triggering
by
user
of
the
placer
system.)
12.1.2.4.2
Benefits
-
Placer
&
Server
don't
have
to
communicate
directly
(can
act
through
queue
server).
This
can
reduce
the
number
of
point-to-point
interfaces
that
need
to
be
supported.
-
No
need
for
Task.
12.1.2.4.3
Limitations
-
Can
only
use
when
requesting
fulfillment
(can't
use
to
request
status
change
or
other
updates)
-
Placer
and
filler
must
regularly
poll
to
see
if
there's
anything
new.
(Can
represent
significant
communication
overhead)
-
Polling
by
the
placer
for
"anything
related
to
these
500
open
orders"
could
be
onerous,
especially
if
some
orders
never
get
closed.
-
Placer
and
fulfiller
must
know
where
to
poll
for
content
-
this
could
be
a
large
number
of
systems
-
No
indication
of
agreement
to
act
on
the
request
-
There's
no
ability
to
negotiate
fulfillment
-
no
ability
to
say
"no"
-
Placer
may
not
know
when
(or
if)
filler
system
has
retrieved
the
request
12.1.2.4.4
Usage
Recommendations
Use
this
when
there's
no
ability
to
have
queue
servers
and
no
support/need
for
complexity
of
Task
and
where
no
Subscription
infrastructure
exists.
This
is
a
more
typically
RESTful
approach
where
data
resides
on
the
server
"owned"
by
the
data
creator
and
is
accessed
by
other
systems.
12.1.2.5
Option
D:
POST
of
request
to
placer/queue
server
system,
receiver
uses
subscription
12.1.2.5.1
Steps
-
Same
as
Option
C
-
placer
posts
to
itself
or
to
queue
server
-
Filler
has
set
up
a
subscription
to
requests
of
interest
(same
criteria
as
for
B)
-
When
placer's
request
is
posted,
filler
receives
a
notification
that
a
new,
relevant
request
exists
and
queries
to
receive
it
-
Same
pattern
follows
for
transmission
of
response
from
filler
back
to
placer
12.1.2.5.2
Benefits
-
Placer
&
Server
don't
have
to
communicate
directly
(can
act
through
queue
server).
This
can
reduce
the
number
of
point-to-point
interfaces
that
need
to
be
supported.
-
No
need
for
Task
-
Lower
communication
overhead
than
polling
12.1.2.5.3
Limitations
-
Can
only
use
when
requesting
fulfillment
(can't
use
to
request
status
change
or
other
updates)
-
Additional
complexity
of
setting
up
and
maintaining
a
subscription
infrastructure
-
Placer
and
fulfiller
must
know
where
to
subscribe
for
content
-
this
could
be
a
large
number
of
systems
-
No
indication
of
agreement
to
act
on
the
request
-
There's
no
ability
to
negotiate
fulfillment
-
no
ability
to
say
"no"
-
Placer
may
not
know
when
(or
if)
filler
system
has
retrieved
the
request
12.1.2.5.4
Usage
Recommendations
Same
a
Option
C
,
but
in
an
environment
where
subscription
capability
does
exist.
12.1.2.6
Option
E:
POST
of
Task
to
filler
system
12.1.2.6.1
Steps
-
Placer
POSTs
the
request
to
its
own
system
or
to
a
queue
server
system
-
Placer
POSTs
a
Task
resource
to
the
filler
system,
pointing
to
the
request
resource
and
seeking
fulfillment
-
Fulfiller
system
queries
to
retrieve
the
referenced
request
-
Fulfiller
Updates
the
Task
to
indicate
acceptance
of
the
task
(and
possibly
interim
progress
notes)
-
Placer
either
polls
the
Task
to
note
acceptance
and
changes
or
uses
a
subscription
to
determine
the
same
-
Fulfiller
POSTs
an
event
resource
to
its
own
system
or
to
a
queue
server
system
-
Fulfiller
Updates
the
Task
resource
to
change
its
status
to
completed
and
to
point
to
the
event
resource
-
Placer
system
becomes
aware
of
the
update
via
polling
or
subscription
and
retrieves
the
referenced
event
resource
12.1.2.6.2
Benefits
-
Can
use
this
approach
for
request
other
than
just
when
requesting
fulfillment
(e.g.
to
request
status
change
or
other
updates)
-
There's
an
ability
to
negotiate
fulfillment
-
i.e.
the
ability
to
say
"no"
-
Explicit
acknowledgement
that
filler
has
received
and
agreed
to
act
on
the
request
12.1.2.6.3
Limitations
12.1.2.6.4
Usage
Recommendations
Not
clear
why
would
anyone
do
this
.
.
.
12.1.2.7
Option
F:
POST
of
"open"
Task
to
queue
server
system
12.1.2.7.1
Steps
-
Placer
POSTs
the
request
to
its
own
system
or
to
a
queue
server
system
-
Placer
POSTs
a
Task
resource
to
its
own
system
or
a
queue
server
system,
pointing
to
the
request
resource
and
seeking
fulfillment.
Task
does
not
have
a
specified
"performer"
(but
may
have
performer
type)
-
Fulfiller
system
uses
either
polling
or
pub/sub
to
become
aware
of
the
existence
of
the
task
-
Fulfiller
system
queries
to
retrieve
the
referenced
request
-
Fulfiller
system
updates
the
Task
to
indicate
"ownership"
and
agreement
to
fulfill
-
Fulfiller
may
update
the
Task
to
indicate
interim
progress
notes
-
Placer
either
polls
the
Task
to
note
acceptance
and
changes
or
uses
a
subscription
to
determine
the
same
-
Fulfiller
POSTs
an
event
resource
to
its
own
system
or
to
a
queue
server
system
-
Fulfiller
Updates
the
Task
resource
to
change
its
status
to
completed
and
to
point
to
the
event
resource
-
Placer
system
becomes
aware
of
the
update
via
polling
or
subscription
and
retrieves
the
referenced
event
resource
12.1.2.7.2
Benefits
-
No
need
for
placer
and
fulfiller
system
to
talk
to
each
other
directly
-
Can
use
this
approach
for
request
other
than
just
when
requesting
fulfillment
(e.g.
to
request
status
change
or
other
updates)
-
There's
an
ability
to
negotiate
fulfillment
-
i.e.
the
ability
to
say
"no"
-
Explicit
acknowledgement
that
filler
has
received
and
agreed
to
act
on
the
request
12.1.2.7.3
Limitations
12.1.2.7.4
Usage
Recommendations
Used
when
requests
are
not
(always)
directed
to
a
specific
filler
and
where
fillers
may
respond
to
tasks
from
multiple
placers.
This
creates
a
sort
of
"market"
where
fillers
choose
what
to
take
on
and
negotiate
what
work
they
perform.
12.1.2.8
Option
G:
POST
of
"request"
resource
for
filler
system,
response
via
Task
12.1.2.8.1
Steps
-
Placer
system
invokes
a
"create"
action
by
POSTing
a
'request'
resource
(e.g.
MedicationRequest,
DiagnosticOrder,
ReferralRequest,
etc.)
to
the
appropriate
RESTful
resource
endpoint
(e.g.
[base]/MedicationRequest)
on
the
filler,
placer
or
queue
server
system
and
sets
a
"tag"
on
the
resource
that
indicates
the
request
is
"actionable"
-
Filler
POSTs
a
Task
resource
to
its
own
system
or
a
queue
server
system,
pointing
to
the
request
resource
and
indicating
intent
to
fulfill
or
refusal
to
fulfill
-
Placer
system
uses
either
polling
or
pub/sub
to
become
aware
of
the
existence
of
the
task
and
fulfillment
intent
-
Fulfiller
may
update
the
Task
to
indicate
interim
progress
notes
-
Placer
either
polls
the
Task
to
note
acceptance
and
changes
or
uses
a
subscription
to
determine
the
same
-
Fulfiller
POSTs
an
event
resource
to
its
own
system
or
to
a
queue
server
system
-
Fulfiller
Updates
the
Task
resource
to
change
its
status
to
completed
and
to
point
to
the
event
resource
-
Placer
system
becomes
aware
of
the
update
via
polling
or
subscription
-
Placer
system
retrieves
the
event
-
Placer
system
marks
the
request
as
"complete"
12.1.2.8.2
Benefits
-
There's
an
ability
to
negotiate
fulfillment
-
i.e.
the
ability
to
say
"no"
-
Explicit
acknowledgement
that
filler
has
received
and
agreed
to
act
on
the
request
(though
no
need
for
the
placer
to
check)
12.1.2.8.3
Limitations
-
Can
only
use
when
requesting
fulfillment
(can't
use
to
request
status
change
or
other
updates)
-
Additional
complexity
of
setting
up
and
maintaining
a
subscription
or
polling
infrastructure
-
Additional
complexity
of
using
Task
-
Placer
and
filler
may
need
to
be
able
to
communicate
directly
(i.e.
know
each
other's
respective
endpoints)
and
have
a
FHIR
server
and
have
"write"
permissions
to
each
other's
servers
(if
no
queue
server
is
used)
-
Placer
and
fulfiller
must
know
where
to
subscribe
for
content
-
this
could
be
a
large
number
of
systems
12.1.2.8.4
Usage
Recommendations
Use
this
when
the
filler
needs
to
have
complete
ownership
over
the
task
and
there's
no
ability
for
both
placer
&
filler
to
manipulate
tasks
on
a
common
server
12.1.2.9
Option
H:
Workflow
broker
12.1.2.9.1
Steps
-
Placer
POSTs
the
request
to
its
own
system
or
to
a
queue
server
system
-
Broker
detects
that
new
un-assigned
request
(without
a
Task
yet
created
and
falling
within
the
scope
of
the
Broker
to
ensure
fulfillment)
via
polling
or
subscription
-
Broker
POSTs
a
Task
resource
to
its
own
system
or
a
queue
server
system,
pointing
to
the
request
resource
and
seeking
fulfillment
from
a
specific
filler
Task
does
not
have
a
specified
"performer"
(but
may
have
performer
type)
-
If
the
Task
is
rejected
by
one
potential
recipient,
the
broker
may
create
a
new
task
to
seek
fulfillment
from
others
-
Continue
as
per
Option
G
12.1.2.9.2
Benefits
-
Offloads
responsibility
for
seeking
fulfillment
from
the
placer
system,
but
more
actively
solicits
fulfillment
than
a
simple
"post
the
task
and
see
who
takes
it".
Also
allows
prioritized
assignment
of
tasks
(i.e.
some
fillers
may
be
preferred
over
others)
12.1.2.9.3
Limitations
-
Requires
a
broker
to
exist
-
Broker
must
know
all
available
fillers
and
their
capabilities
to
allow
appropriate
assignment
12.1.2.9.4
Usage
Recommendations
Appropriate
in
environments
that
have
a
workflow
engine
that
takes
on
responsibility
for
ensuring
fulfillment
12.1.2.10
Option
I:
Messaging
request
from
placer
to
filler
&
acknowledgment
12.1.2.10.1
Steps
-
Placer
sends
message
to
filler
system
including
Request
resource
(and
other
relevant
resources)
along
with
a
MessageHeader
with
an
"event"
code
saying
"please
fulfill"
and
"data"
element
pointing
to
the
Request
resource
as
the
item
to
fulfill.
Message
could
potentially
use
Task
instead
of
MessageHeader.event
to
convey
desired
action
(ongoing
discussion)
-
Filler
system
sends
a
response
indicating
receipt
of
the
message
and,
optionally
an
indication
of
their
intention
to
fulfill
the
request
-
Filler
system
may
send
incremental
messages
to
the
placer
showing
progress
(e.g.
specimen
collected,
preliminary
results,
final
results)
12.1.2.10.2
Benefits
-
Reduced
number
of
communications
-
All
relevant
data
sent
in
one
package
-
Responses
can
be
asynchronous
and
content
may
routed
-
There's
an
ability
to
negotiate
fulfillment
-
i.e.
the
ability
to
say
"no"
-
Can
request
things
other
than
just
fulfillment
(e.g.
please
suspend)
-
Explicit
acknowledgement
that
filler
has
received
and
agreed
to
act
on
the
request
(though
no
need
for
the
placer
to
check)
12.1.2.10.3
Limitations
-
Messaging
is
"heavy"
-
Need
to
negotiate
what
allowed
responses
are
and
what
data
can
be
present
in
request
and
response
messages
-
Additional
complexity
of
setting
up
and
maintaining
a
subscription
or
polling
infrastructure
-
Additional
complexity
of
using
Task
-
Need
message
delivery
infrastructure
in
place
12.1.2.10.4
Usage
Recommendations
Existing
messaging
infrastructure
(e.g.
v2
LTP,
MLTP,
WSI
Web
Services,
Direct,
VISA,
REST,
etc.)
and
a
need
to
stay
consistent
with
that
architecture
12.1.2.11
Option
J:
Services
request
from
placer
to
filler
&
acknowledgment
This
scenario
needs
work
-
there's
not
a
lot
of
experience
using
FHIR
services
to
manage
the
fulfillment
process
12.1.2.11.1
Steps
-
Placer
may
create
and
store
a
Request
resource
on
their
own
system
or
a
queue
server.
-
Placer
invokes
a
service
on
the
filler
system
saying
"please
fulfill
this
order",
including
the
content
or
a
reference
to
the
request
resource
and
any
other
relevant
data
-
Filler
system
responds
(synchronously
if
using
HTTP,
but
may
be
asynchronous
if
using
SOAP
or
other
transport
mechanisms)
with
conformation
of
receipt
and,
optionally
indication
of
intention
to
fulfill
and/or
results
12.1.2.11.2
Benefits
12.1.2.11.3
Limitations
12.1.2.11.4
Usage
Recommendations
TBD
12.1.2.12
Additional
Scenarios
12.1.2.12.1
Querying
the
status
of
a
workflow
using
REST
-
Placer
sends
query
for
Task(s)
that
have
a
focus
of
the
request
of
interest
to
a
system
(placer
system,
queue
server
or
filler)
that
holds
tasks
related
to
their
request.
-
System
returns
a
query
response
showing
all
related
tasks
(typically
just
one).
Task
shows
current
status.
12.1.2.12.2
Querying
the
status
of
a
workflow
using
services
-
Placer
invokes
a
"what's
the
status
of
this
order"
service,
passing
the
request
business
identifier
or
URL
of
the
request
-
Services
responds
with
a
Task
showing
the
current
state
of
the
fulfillment
of
the
request
12.1.2.12.3
Cancellation
of
a
Task
using
REST
-
placer
owns
-
Placer
sends
an
update
to
the
Task
setting
the
status
to
"cancelled"
-
Filler
receives
notification
of
the
update
(because
the
task
is
on
their
system
or
because
they
poll
it
or
are
subscribed
to
it)
and
ceases
work
if
they
are
able
12.1.2.12.4
Cancellation
of
a
Task
using
REST
-
filler
owns
-
Placer
creates
a
new
task
requesting
cancellation
of
the
original
fulfillment
task
Fulfillment
of
the
"cancellation
task"
can
be
requested
using
any
of
the
mechanisms
above
-
Filler
decides
whether
they
are
able
to
cancel
the
task
and
update
the
"cancellation"
task
to
indicate
either
cancellation
is
complete
or
has
been
refused
12.1.3
Open
Issues
STU
Notes:
-
It
is
possible
to
replace
some
portions
of
the
MessageHeader
with
a
reference
to
the
Task
resource.
Doing
so
would
mean
consistency
in
how
asynchronous
requests
are
represented
using
REST
and
messaging.
However,
it
introduces
an
additional
layer
of
complexity
and
formality
into
the
messaging
paradigm
that
may
be
unwelcome,
particularly
for
those
systems
that
do
not
currently
foresee
a
need
to
support
both
RESTful
and
messaging
invocations
of
workflow
-
The
OperationDefinition
resource
could
be
used
to
define
types
of
tasks
and
the
sets
of
parameters
that
are
allowed
to
go
with
them.
Is
this
an
appropriate
use
of
the
OperationDefinition
resource?
-
The
SupplyRequest
,
DeviceUseRequest
and
VisionPrescription
resources
have
a
significant
degree
of
overlap.
Should
they
remain
distinct
resources?