This
page
is
part
of
the
FHIR
Specification
(v4.0.1:
R4
(v4.3.0:
R4B
-
Mixed
Normative
and
STU
)
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
R4B
R4
R3
R2
Patient
Administration
Work
Group
|
Maturity Level : 3 | Trial Use | Security Category : Patient | Compartments : Device , Patient , Practitioner , RelatedPerson |
A booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time. This may result in one or more Encounter(s).
Appointment resources are used to provide information about a planned meeting that may be in the future or past. The resource only describes a single meeting, a series of repeating visits would require multiple appointment resources to be created for each instance. Examples include a scheduled surgery, a follow-up for a clinical visit, a scheduled conference call between clinicians to discuss a case, the reservation of a piece of diagnostic equipment for a particular use, etc. The visit scheduled by an appointment may be in person or remote (by phone, video conference, etc.) All that matters is that the time and usage of one or more individuals, locations and/or pieces of equipment is being fully or partially reserved for a designated period of time.
This definition takes the concepts of appointments in a clinical setting and also extends them to be relevant in the community healthcare space, and to ease exposure to other appointment / calendar standards widely used outside of healthcare.
Before an appointment can be made, the address/endpoint details of the resource that we want to schedule an appointment with must be determined. This is often based on the healthcare service type and any formatting information which indicates how to make the request. This is typically handled via the Schedule resource.
This optional step permits the checking of any existing available times ( Slot resources associated with a selected Schedule ) that can be booked against. Just because a time is indicated as available doesn't guarantee that an appointment can be made. The booking system that is going to process the request may make other qualifying decisions to determine if the appointment can be made, such as permissions, assessments, availability of other resources, etc.
This step is optional, as the creation of the appointment is never a guaranteed action. But by performing this availability check, you can increase the chances of making a successful booking.
When
an
appointment
is
required,
a
requester
creates
new
Appointment
resource
with
the
Appointment.status="proposed".
All
included
participants
(optional
or
mandatory)
should
have
the
status="needs-action"
to
allow
filtering
and
displaying
appointments
to
user-participants
for
accepting
or
rejecting
new
and
updated
requests.
Based
on
internal
system
business
rules,
certain
statuses
may
be
automatically
updated,
for
example:
"reject
because
the
requested
participant
is
on
vacation"
or
"this
type
of
user
is
not
allowed
to
request
those
specific
appointments".
The reply process is simply performed by the person/system handing the requests, updating the participant statuses on the appointment as needed. If there are multiple systems involved, then these will create AppointmentResponse entries with the desired statuses.
Once all participants have their participation status created/updated (and the main system marking the appointment participant records with the AppointmentResponse statuses) then the overall status of the Appointment is updated.
The requester (organizer) of the appointment checks for the overall status of the appointment (and appointment responses, where applicable) using FHIR pub-sub techniques.
Where the participant statuses indicate that a re-scheduling is required, then the process may start again, with other systems replying to a new set of times.
This optional step permits creating a waitlisted appointment. This could occur if an appointment needs to be booked into a time that is not ideal for the patient due to lack of available time slots. In this workflow, there would be two appointments, the booked appointment in the time slot that is currently available, and the waitlisted appointment with a requestedPeriod spanning the time that the patient would prefer if new slots become available.
If new time slots become available during the requestedPeriod, the scheduling system, or staff at the scheduling organization, can notify the patient that a new time slot is available. If the patient chooses, the waitlisted appointment would then be booked into that specific slot, and the previously booked appointment would be canceled. The specific business process for notifying patients of new availability is not specified, and is up to the implementing system to determine.
These types of requests are typically handled by selecting a specific time from a list of available slots, then making the request for that timeslot.
Clinical scheduling is often far more complex in its requirements and processing. Often this involves checking multiple availabilities across multiple systems and timing with other internal systems, not just those exposed by the Slot resources.
Consideration should be given to situations where scheduling needs to be handled in more of a queue-like process.
Implementation Note: Note: This type of clinical appointment scheduling has not been specifically covered with this definition of the Appointment resource (and other related resources), however if you would like to contribute to the modification of this resource to cover these use cases, please contact the HL7 Patient Administration work-group.
When
using
a
request-response
style
of
appointment
this
is
done
using
Appointment
and
AppointmentResponse
resources.
The
request
is
made
in
the
form
of
an
Appointment
with
a
proposed
or
pending
status,
and
the
list
of
actors
with
a
participation
status
of
"needs-action".
Participants
in
the
appointment
respond
with
their
acceptance
(or
not)
to
the
appointment
by
creating
AppointmentResponse
resources.
Once
all
the
participants
have
replied,
then
the
Appointment
resource
is
able
to
be
updated
with
an
overall
status
which
collates
the
results
of
all
the
participants
and
presents
the
approved
details
of
the
appointment.
The
participant
type
property
can
be
used
to
represent
a
specific
role
that
a
practitioner
is
required
to
perform
for
the
appointment.
This
could
be
specified
without
an
actor
when
the
actual
practitioner
is
not
known,
and
will
be
filled
in
closer
to
the
scheduled
time.
This
property
must
be
the
same
between
the
Appointment-participant
and
the
AppointmentResponse
so
that
the
appropriate
values
can
be
allocated.
If
you
need
multiple
actors
of
a
specific
type,
then
multiple
participants
with
that
type
value
are
included
on
the
appointment.
Appointments can be considered as Administrative only, and the Encounter is expected to have clinical implications.
In general, it is expected that appointments will result in the creation of an Encounter. The encounter is typically created when the service starts, not when the patient arrives. When the patient arrives, an appointment can be marked with a status of Arrived.
In an Emergency Room context, the appointment Resource is probably not appropriate to be used. In these cases, an Encounter should be created.
The
Appointment
request
pattern
used
is
different
from
the
order-response
pattern
used
elsewhere
in
FHIR.
This
is
due
to
the
close
relationship
to
the
iCal
standard.
Many
non-clinical
systems
use
generic
non-health
appointment
systems
which
implement
this
standard,
and
the
desire
to
integrate
with
the
consumer
who
has
no
access
to
health
based
software
is
highly
desirable.
The
mappings
to
the
iCal
standard
have
been
provided
to
guide
implementation
of
gateways
between
FHIR
servers
and
iCal
systems.
The
location
of
the
appointment
is
to
be
defined
by
using
a
participant
that
references
a
Location
or
HealthcareService
resource.
This
permits
the
location
to
also
have
its
availability
checked
via
a
schedule
and
any
conflicts
more
easily
managed.
This resource is referenced by AppointmentResponse , CarePlan , Encounter and ImagingStudy .
This resource implements the Request pattern.
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
|
DomainResource |
A
booking
of
a
healthcare
event
among
patient(s),
practitioner(s),
related
person(s)
and/or
device(s)
for
a
specific
date/time.
This
may
result
in
one
or
more
Encounter(s)
+ Rule: Either start and end are specified, or neither + Rule: Only proposed or cancelled appointments can be missing start/end dates + Rule: Cancelation reason is only used for appointments that have been cancelled, or no-show Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension |
|
|
Σ | 0..* | Identifier |
External
Ids
for
this
item
|
|
?! Σ | 1..1 | code |
proposed
|
pending
|
booked
|
arrived
|
fulfilled
|
cancelled
|
noshow
|
entered-in-error
|
checked-in
|
waitlist
AppointmentStatus ( Required ) |
|
Σ | 0..1 | CodeableConcept |
The
coded
reason
for
the
appointment
being
cancelled
|
|
Σ | 0..* | CodeableConcept |
A
broad
categorization
of
the
service
that
is
to
be
performed
during
this
appointment
|
|
Σ | 0..* | CodeableConcept |
The
specific
service
that
is
to
be
performed
during
this
appointment
|
|
Σ | 0..* | CodeableConcept |
The
specialty
of
a
practitioner
that
would
be
required
to
perform
the
service
requested
in
this
appointment
Practice Setting Code Value Set ( Preferred ) |
|
Σ | 0..1 | CodeableConcept |
The
style
of
appointment
or
patient
that
has
been
booked
in
the
slot
(not
service
type)
(
Preferred
)
|
|
Σ | 0..* | CodeableConcept |
Coded
reason
this
appointment
is
scheduled
Encounter Reason Codes ( Preferred ) |
|
0..* | Reference ( Condition | Procedure | Observation | ImmunizationRecommendation ) |
Reason
the
appointment
is
to
take
place
(resource)
|
|
|
0..1 | unsignedInt | Used to make informed decisions if needing to re-prioritize | |
|
0..1 | string | Shown on a subject line in a meeting request, or appointment list | |
|
0..* | Reference ( Any ) |
Additional
information
to
support
the
appointment
|
|
|
Σ | 0..1 | instant | When appointment is to take place |
|
Σ | 0..1 | instant | When appointment is to conclude |
|
0..1 | positiveInt | Can be less than start/end (e.g. estimate) | |
|
0..* | Reference ( Slot ) |
The
slots
that
this
appointment
is
filling
|
|
|
0..1 | dateTime | The date that this appointment was initially created | |
|
0..1 | string | Additional comments | |
|
0..1 | string | Detailed information and instructions for the patient | |
|
0..* | Reference ( ServiceRequest ) |
The
service
request
this
appointment
is
allocated
to
assess
|
|
|
I | 1..* | BackboneElement |
Participants
involved
in
appointment
+ Rule: Either the type or actor on the participant SHALL be specified |
|
Σ | 0..* | CodeableConcept |
Role
of
participant
in
the
appointment
|
|
Σ | 0..1 | Reference ( Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location ) | Person, Location/HealthcareService or Device |
|
Σ | 0..1 | code |
required
|
optional
|
information-only
ParticipantRequired ( Required ) |
|
Σ | 1..1 | code |
accepted
|
declined
|
tentative
|
needs-action
ParticipationStatus ( Required ) |
|
0..1 | Period | Participation period of the actor | |
|
0..* | Period |
Potential
date/time
interval(s)
requested
to
allocate
the
appointment
within
|
|
Documentation
for
this
format
|
||||
UML Diagram ( Legend )
XML Template
<Appointment xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <identifier><!-- 0..* Identifier External Ids for this item --></identifier> <status value="[code]"/><!-- 1..1 proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist --> <cancelationReason><!-- 0..1 CodeableConcept The coded reason for the appointment being cancelled --></cancelationReason> <serviceCategory><!-- 0..* CodeableConcept A broad categorization of the service that is to be performed during this appointment --></serviceCategory> <serviceType><!-- 0..* CodeableConcept The specific service that is to be performed during this appointment --></serviceType> <specialty><!-- 0..* CodeableConcept The specialty of a practitioner that would be required to perform the service requested in this appointment --></specialty>
<</appointmentType><appointmentType><!-- 0..1 CodeableConcept The style of appointment or patient that has been booked in the slot (not service type)--></appointmentType> <reasonCode><!-- 0..* CodeableConcept Coded reason this appointment is scheduled --></reasonCode>
<| </reasonReference><reasonReference><!-- 0..* Reference(Condition|ImmunizationRecommendation| Observation|Procedure) Reason the appointment is to take place (resource) --></reasonReference> <priority value="[unsignedInt]"/><!-- 0..1 Used to make informed decisions if needing to re-prioritize --> <description value="[string]"/><!-- 0..1 Shown on a subject line in a meeting request, or appointment list --> <supportingInformation><!-- 0..* Reference(Any) Additional information to support the appointment --></supportingInformation> <start value="[instant]"/><!-- 0..1 When appointment is to take place --> <end value="[instant]"/><!-- 0..1 When appointment is to conclude --> <minutesDuration value="[positiveInt]"/><!-- 0..1 Can be less than start/end (e.g. estimate) --> <slot><!-- 0..* Reference(Slot) The slots that this appointment is filling --></slot> <created value="[dateTime]"/><!-- 0..1 The date that this appointment was initially created --> <comment value="[string]"/><!-- 0..1 Additional comments --> <patientInstruction value="[string]"/><!-- 0..1 Detailed information and instructions for the patient --> <basedOn><!-- 0..* Reference(ServiceRequest) The service request this appointment is allocated to assess --></basedOn> <participant> <!-- 1..* Participants involved in appointment --> <type><!-- 0..* CodeableConcept Role of participant in the appointment --></type><| </actor><actor><!-- 0..1 Reference(Device|HealthcareService|Location|Patient| Practitioner|PractitionerRole|RelatedPerson) Person, Location/HealthcareService or Device --></actor> <required value="[code]"/><!-- 0..1 required | optional | information-only --> <status value="[code]"/><!-- 1..1 accepted | declined | tentative | needs-action --> <period><!-- 0..1 Period Participation period of the actor --></period> </participant> <requestedPeriod><!-- 0..* Period Potential date/time interval(s) requested to allocate the appointment within --></requestedPeriod> </Appointment>
JSON Template
{
"resourceType" : "Appointment",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"identifier" : [{ Identifier }], // External Ids for this item
"status" : "<code>", // R! proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist
"cancelationReason" : { CodeableConcept }, // The coded reason for the appointment being cancelled
"serviceCategory" : [{ CodeableConcept }], // A broad categorization of the service that is to be performed during this appointment
"serviceType" : [{ CodeableConcept }], // The specific service that is to be performed during this appointment
"specialty" : [{ CodeableConcept }], // The specialty of a practitioner that would be required to perform the service requested in this appointment
"
"appointmentType" : { CodeableConcept }, // The style of appointment or patient that has been booked in the slot (not service type)
"reasonCode" : [{ CodeableConcept }], // Coded reason this appointment is scheduled
"|
"reasonReference" : [{ Reference(Condition|ImmunizationRecommendation|
Observation|Procedure) }], // Reason the appointment is to take place (resource)
"priority" : "<unsignedInt>", // Used to make informed decisions if needing to re-prioritize
"description" : "<string>", // Shown on a subject line in a meeting request, or appointment list
"supportingInformation" : [{ Reference(Any) }], // Additional information to support the appointment
"start" : "<instant>", // When appointment is to take place
"end" : "<instant>", // When appointment is to conclude
"minutesDuration" : "<positiveInt>", // Can be less than start/end (e.g. estimate)
"slot" : [{ Reference(Slot) }], // The slots that this appointment is filling
"created" : "<dateTime>", // The date that this appointment was initially created
"comment" : "<string>", // Additional comments
"patientInstruction" : "<string>", // Detailed information and instructions for the patient
"basedOn" : [{ Reference(ServiceRequest) }], // The service request this appointment is allocated to assess
"participant" : [{ // R! Participants involved in appointment
"type" : [{ CodeableConcept }], // Role of participant in the appointment
"|
"actor" : { Reference(Device|HealthcareService|Location|Patient|
Practitioner|PractitionerRole|RelatedPerson) }, // Person, Location/HealthcareService or Device
"required" : "<code>", // required | optional | information-only
"status" : "<code>", // R! accepted | declined | tentative | needs-action
"period" : { Period } // Participation period of the actor
}],
"requestedPeriod" : [{ Period }] // Potential date/time interval(s) requested to allocate the appointment within
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .[ a fhir:Appointment; 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:Appointment.identifier [ Identifier ], ... ; # 0..* External Ids for this item fhir:Appointment.status [ code ]; # 1..1 proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist fhir:Appointment.cancelationReason [ CodeableConcept ]; # 0..1 The coded reason for the appointment being cancelled fhir:Appointment.serviceCategory [ CodeableConcept ], ... ; # 0..* A broad categorization of the service that is to be performed during this appointment fhir:Appointment.serviceType [ CodeableConcept ], ... ; # 0..* The specific service that is to be performed during this appointment fhir:Appointment.specialty [ CodeableConcept ], ... ; # 0..* The specialty of a practitioner that would be required to perform the service requested in this appointment fhir:Appointment.appointmentType [ CodeableConcept ]; # 0..1 The style of appointment or patient that has been booked in the slot (not service type) fhir:Appointment.reasonCode [ CodeableConcept ], ... ; # 0..* Coded reason this appointment is scheduled
fhir:fhir:Appointment.reasonReference [ Reference(Condition|ImmunizationRecommendation|Observation|Procedure) ], ... ; # 0..* Reason the appointment is to take place (resource) fhir:Appointment.priority [ unsignedInt ]; # 0..1 Used to make informed decisions if needing to re-prioritize fhir:Appointment.description [ string ]; # 0..1 Shown on a subject line in a meeting request, or appointment list fhir:Appointment.supportingInformation [ Reference(Any) ], ... ; # 0..* Additional information to support the appointment fhir:Appointment.start [ instant ]; # 0..1 When appointment is to take place fhir:Appointment.end [ instant ]; # 0..1 When appointment is to conclude fhir:Appointment.minutesDuration [ positiveInt ]; # 0..1 Can be less than start/end (e.g. estimate) fhir:Appointment.slot [ Reference(Slot) ], ... ; # 0..* The slots that this appointment is filling fhir:Appointment.created [ dateTime ]; # 0..1 The date that this appointment was initially created fhir:Appointment.comment [ string ]; # 0..1 Additional comments fhir:Appointment.patientInstruction [ string ]; # 0..1 Detailed information and instructions for the patient fhir:Appointment.basedOn [ Reference(ServiceRequest) ], ... ; # 0..* The service request this appointment is allocated to assess fhir:Appointment.participant [ # 1..* Participants involved in appointment fhir:Appointment.participant.type [ CodeableConcept ], ... ; # 0..* Role of participant in the appointmentfhir:|fhir:Appointment.participant.actor [ Reference(Device|HealthcareService|Location|Patient|Practitioner|PractitionerRole| RelatedPerson) ]; # 0..1 Person, Location/HealthcareService or Device fhir:Appointment.participant.required [ code ]; # 0..1 required | optional | information-only fhir:Appointment.participant.status [ code ]; # 1..1 accepted | declined | tentative | needs-action fhir:Appointment.participant.period [ Period ]; # 0..1 Participation period of the actor ], ...; fhir:Appointment.requestedPeriod [ Period ], ... ; # 0..* Potential date/time interval(s) requested to allocate the appointment within ]
Changes
since
R3
R4
| Appointment |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
Conversions between R3 and R4
See R3 <--> R4 Conversion Maps (status = 3 tests that all execute ok. All tests pass round-trip testing and all r3 resources are valid.)
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
|
DomainResource |
A
booking
of
a
healthcare
event
among
patient(s),
practitioner(s),
related
person(s)
and/or
device(s)
for
a
specific
date/time.
This
may
result
in
one
or
more
Encounter(s)
+ Rule: Either start and end are specified, or neither + Rule: Only proposed or cancelled appointments can be missing start/end dates + Rule: Cancelation reason is only used for appointments that have been cancelled, or no-show Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension |
|
|
Σ | 0..* | Identifier |
External
Ids
for
this
item
|
|
?! Σ | 1..1 | code |
proposed
|
pending
|
booked
|
arrived
|
fulfilled
|
cancelled
|
noshow
|
entered-in-error
|
checked-in
|
waitlist
AppointmentStatus ( Required ) |
|
Σ | 0..1 | CodeableConcept |
The
coded
reason
for
the
appointment
being
cancelled
|
|
Σ | 0..* | CodeableConcept |
A
broad
categorization
of
the
service
that
is
to
be
performed
during
this
appointment
|
|
Σ | 0..* | CodeableConcept |
The
specific
service
that
is
to
be
performed
during
this
appointment
|
|
Σ | 0..* | CodeableConcept |
The
specialty
of
a
practitioner
that
would
be
required
to
perform
the
service
requested
in
this
appointment
Practice Setting Code Value Set ( Preferred ) |
|
Σ | 0..1 | CodeableConcept |
The
style
of
appointment
or
patient
that
has
been
booked
in
the
slot
(not
service
type)
(
Preferred
)
|
|
Σ | 0..* | CodeableConcept |
Coded
reason
this
appointment
is
scheduled
Encounter Reason Codes ( Preferred ) |
|
0..* | Reference ( Condition | Procedure | Observation | ImmunizationRecommendation ) |
Reason
the
appointment
is
to
take
place
(resource)
|
|
|
0..1 | unsignedInt | Used to make informed decisions if needing to re-prioritize | |
|
0..1 | string | Shown on a subject line in a meeting request, or appointment list | |
|
0..* | Reference ( Any ) |
Additional
information
to
support
the
appointment
|
|
|
Σ | 0..1 | instant | When appointment is to take place |
|
Σ | 0..1 | instant | When appointment is to conclude |
|
0..1 | positiveInt | Can be less than start/end (e.g. estimate) | |
|
0..* | Reference ( Slot ) |
The
slots
that
this
appointment
is
filling
|
|
|
0..1 | dateTime | The date that this appointment was initially created | |
|
0..1 | string | Additional comments | |
|
0..1 | string | Detailed information and instructions for the patient | |
|
0..* | Reference ( ServiceRequest ) |
The
service
request
this
appointment
is
allocated
to
assess
|
|
|
I | 1..* | BackboneElement |
Participants
involved
in
appointment
+ Rule: Either the type or actor on the participant SHALL be specified |
|
Σ | 0..* | CodeableConcept |
Role
of
participant
in
the
appointment
|
|
Σ | 0..1 | Reference ( Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location ) | Person, Location/HealthcareService or Device |
|
Σ | 0..1 | code |
required
|
optional
|
information-only
ParticipantRequired ( Required ) |
|
Σ | 1..1 | code |
accepted
|
declined
|
tentative
|
needs-action
ParticipationStatus ( Required ) |
|
0..1 | Period | Participation period of the actor | |
|
0..* | Period |
Potential
date/time
interval(s)
requested
to
allocate
the
appointment
within
|
|
Documentation
for
this
format
|
||||
XML Template
<Appointment xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <identifier><!-- 0..* Identifier External Ids for this item --></identifier> <status value="[code]"/><!-- 1..1 proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist --> <cancelationReason><!-- 0..1 CodeableConcept The coded reason for the appointment being cancelled --></cancelationReason> <serviceCategory><!-- 0..* CodeableConcept A broad categorization of the service that is to be performed during this appointment --></serviceCategory> <serviceType><!-- 0..* CodeableConcept The specific service that is to be performed during this appointment --></serviceType> <specialty><!-- 0..* CodeableConcept The specialty of a practitioner that would be required to perform the service requested in this appointment --></specialty>
<</appointmentType><appointmentType><!-- 0..1 CodeableConcept The style of appointment or patient that has been booked in the slot (not service type)--></appointmentType> <reasonCode><!-- 0..* CodeableConcept Coded reason this appointment is scheduled --></reasonCode>
<| </reasonReference><reasonReference><!-- 0..* Reference(Condition|ImmunizationRecommendation| Observation|Procedure) Reason the appointment is to take place (resource) --></reasonReference> <priority value="[unsignedInt]"/><!-- 0..1 Used to make informed decisions if needing to re-prioritize --> <description value="[string]"/><!-- 0..1 Shown on a subject line in a meeting request, or appointment list --> <supportingInformation><!-- 0..* Reference(Any) Additional information to support the appointment --></supportingInformation> <start value="[instant]"/><!-- 0..1 When appointment is to take place --> <end value="[instant]"/><!-- 0..1 When appointment is to conclude --> <minutesDuration value="[positiveInt]"/><!-- 0..1 Can be less than start/end (e.g. estimate) --> <slot><!-- 0..* Reference(Slot) The slots that this appointment is filling --></slot> <created value="[dateTime]"/><!-- 0..1 The date that this appointment was initially created --> <comment value="[string]"/><!-- 0..1 Additional comments --> <patientInstruction value="[string]"/><!-- 0..1 Detailed information and instructions for the patient --> <basedOn><!-- 0..* Reference(ServiceRequest) The service request this appointment is allocated to assess --></basedOn> <participant> <!-- 1..* Participants involved in appointment --> <type><!-- 0..* CodeableConcept Role of participant in the appointment --></type><| </actor><actor><!-- 0..1 Reference(Device|HealthcareService|Location|Patient| Practitioner|PractitionerRole|RelatedPerson) Person, Location/HealthcareService or Device --></actor> <required value="[code]"/><!-- 0..1 required | optional | information-only --> <status value="[code]"/><!-- 1..1 accepted | declined | tentative | needs-action --> <period><!-- 0..1 Period Participation period of the actor --></period> </participant> <requestedPeriod><!-- 0..* Period Potential date/time interval(s) requested to allocate the appointment within --></requestedPeriod> </Appointment>
JSON Template
{
"resourceType" : "Appointment",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"identifier" : [{ Identifier }], // External Ids for this item
"status" : "<code>", // R! proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist
"cancelationReason" : { CodeableConcept }, // The coded reason for the appointment being cancelled
"serviceCategory" : [{ CodeableConcept }], // A broad categorization of the service that is to be performed during this appointment
"serviceType" : [{ CodeableConcept }], // The specific service that is to be performed during this appointment
"specialty" : [{ CodeableConcept }], // The specialty of a practitioner that would be required to perform the service requested in this appointment
"
"appointmentType" : { CodeableConcept }, // The style of appointment or patient that has been booked in the slot (not service type)
"reasonCode" : [{ CodeableConcept }], // Coded reason this appointment is scheduled
"|
"reasonReference" : [{ Reference(Condition|ImmunizationRecommendation|
Observation|Procedure) }], // Reason the appointment is to take place (resource)
"priority" : "<unsignedInt>", // Used to make informed decisions if needing to re-prioritize
"description" : "<string>", // Shown on a subject line in a meeting request, or appointment list
"supportingInformation" : [{ Reference(Any) }], // Additional information to support the appointment
"start" : "<instant>", // When appointment is to take place
"end" : "<instant>", // When appointment is to conclude
"minutesDuration" : "<positiveInt>", // Can be less than start/end (e.g. estimate)
"slot" : [{ Reference(Slot) }], // The slots that this appointment is filling
"created" : "<dateTime>", // The date that this appointment was initially created
"comment" : "<string>", // Additional comments
"patientInstruction" : "<string>", // Detailed information and instructions for the patient
"basedOn" : [{ Reference(ServiceRequest) }], // The service request this appointment is allocated to assess
"participant" : [{ // R! Participants involved in appointment
"type" : [{ CodeableConcept }], // Role of participant in the appointment
"|
"actor" : { Reference(Device|HealthcareService|Location|Patient|
Practitioner|PractitionerRole|RelatedPerson) }, // Person, Location/HealthcareService or Device
"required" : "<code>", // required | optional | information-only
"status" : "<code>", // R! accepted | declined | tentative | needs-action
"period" : { Period } // Participation period of the actor
}],
"requestedPeriod" : [{ Period }] // Potential date/time interval(s) requested to allocate the appointment within
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .[ a fhir:Appointment; 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:Appointment.identifier [ Identifier ], ... ; # 0..* External Ids for this item fhir:Appointment.status [ code ]; # 1..1 proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist fhir:Appointment.cancelationReason [ CodeableConcept ]; # 0..1 The coded reason for the appointment being cancelled fhir:Appointment.serviceCategory [ CodeableConcept ], ... ; # 0..* A broad categorization of the service that is to be performed during this appointment fhir:Appointment.serviceType [ CodeableConcept ], ... ; # 0..* The specific service that is to be performed during this appointment fhir:Appointment.specialty [ CodeableConcept ], ... ; # 0..* The specialty of a practitioner that would be required to perform the service requested in this appointment fhir:Appointment.appointmentType [ CodeableConcept ]; # 0..1 The style of appointment or patient that has been booked in the slot (not service type) fhir:Appointment.reasonCode [ CodeableConcept ], ... ; # 0..* Coded reason this appointment is scheduled
fhir:fhir:Appointment.reasonReference [ Reference(Condition|ImmunizationRecommendation|Observation|Procedure) ], ... ; # 0..* Reason the appointment is to take place (resource) fhir:Appointment.priority [ unsignedInt ]; # 0..1 Used to make informed decisions if needing to re-prioritize fhir:Appointment.description [ string ]; # 0..1 Shown on a subject line in a meeting request, or appointment list fhir:Appointment.supportingInformation [ Reference(Any) ], ... ; # 0..* Additional information to support the appointment fhir:Appointment.start [ instant ]; # 0..1 When appointment is to take place fhir:Appointment.end [ instant ]; # 0..1 When appointment is to conclude fhir:Appointment.minutesDuration [ positiveInt ]; # 0..1 Can be less than start/end (e.g. estimate) fhir:Appointment.slot [ Reference(Slot) ], ... ; # 0..* The slots that this appointment is filling fhir:Appointment.created [ dateTime ]; # 0..1 The date that this appointment was initially created fhir:Appointment.comment [ string ]; # 0..1 Additional comments fhir:Appointment.patientInstruction [ string ]; # 0..1 Detailed information and instructions for the patient fhir:Appointment.basedOn [ Reference(ServiceRequest) ], ... ; # 0..* The service request this appointment is allocated to assess fhir:Appointment.participant [ # 1..* Participants involved in appointment fhir:Appointment.participant.type [ CodeableConcept ], ... ; # 0..* Role of participant in the appointmentfhir:|fhir:Appointment.participant.actor [ Reference(Device|HealthcareService|Location|Patient|Practitioner|PractitionerRole| RelatedPerson) ]; # 0..1 Person, Location/HealthcareService or Device fhir:Appointment.participant.required [ code ]; # 0..1 required | optional | information-only fhir:Appointment.participant.status [ code ]; # 1..1 accepted | declined | tentative | needs-action fhir:Appointment.participant.period [ Period ]; # 0..1 Participation period of the actor ], ...; fhir:Appointment.requestedPeriod [ Period ], ... ; # 0..* Potential date/time interval(s) requested to allocate the appointment within ]
Changes
since
Release
3
4
| Appointment |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
Conversions between R3 and R4
See R3 <--> R4 Conversion Maps (status = 3 tests that all execute ok. All tests pass round-trip testing and all r3 resources are valid.)
See the Profiles & Extensions and the alternate definitions: Master Definition XML + JSON , XML Schema / Schematron + JSON Schema , ShEx (for Turtle ) + see the extensions & the dependency analysis
| Path | Definition | Type | Reference |
|---|---|---|---|
| Appointment.status |
|
Required | AppointmentStatus |
| Appointment.cancelationReason | Example | AppointmentCancellationReason | |
| Appointment.serviceCategory | Example | ServiceCategory | |
| Appointment.serviceType | Example | ServiceType | |
| Appointment.specialty | Preferred | PracticeSettingCodeValueSet | |
| Appointment.appointmentType | Preferred |
|
|
| Appointment.reasonCode |
|
Preferred | EncounterReasonCodes |
| Appointment.participant.type |
|
Extensible | ParticipantType |
| Appointment.participant.required |
|
Required | ParticipantRequired |
| Appointment.participant.status |
|
Required | ParticipationStatus |
| id | Level | Location | Description | Expression |
| app-1 | Rule | Appointment.participant | Either the type or actor on the participant SHALL be specified | type.exists() or actor.exists() |
| app-2 | Rule | (base) | Either start and end are specified, or neither | start.exists() = end.exists() |
| app-3 | Rule | (base) | Only proposed or cancelled appointments can be missing start/end dates | (start.exists() and end.exists()) or (status in ('proposed' | 'cancelled' | 'waitlist')) |
| app-4 | Rule | (base) | Cancelation reason is only used for appointments that have been cancelled, or no-show | Appointment.cancelationReason.exists() implies (Appointment.status='no-show' or Appointment.status='cancelled') |
| Activity Description | Slot | Appointment | Appointment Response | Encounter |
|---|---|---|---|---|
|
The
schedule
is
created/published
(Role: Scheduler) |
freeBusyType = FREE | |||
|
An
appointment
request
is
created
after
locating
an
available
slot
(Role: Requester) |
status
=
pending
participant.status = needs-action |
|||
|
The
appointment
request
is
processed
and
the
slot
status
updated
(Role: Scheduler) |
freeBusyType = BUSY-TENTATIVE | |||
|
The
appointment
is
accepted
as
described
–
by
all
participants
(Role: Participant(s)) |
participantStatus = accepted | |||
|
The
appointment
is
confirmed
as
accepted
by
all
participants
(Role: Scheduler) |
freeBusyType = BUSY |
status
=
booked
participant.status = accepted |
||
|
Optional:
Preparation
for
the
appointment
begins
–
could
be
preparing
a
room
for
the
appointment,
etc.
(Role: Participants/Admin) |
status
=
planned
(optional)
location.status = planned |
|||
|
The
patient
arrives
for
the
appointment,
often
sitting
in
a
waiting
room
(Role: Admin) |
status = arrived |
status
=
arrived
location.status = present |
||
|
The
practitioner
and
the
patient
meet
and
the
provision
of
the
service
begins
(Role: Scheduler/Participant(s)/Admin) |
status = fulfilled | status = in-progress | ||
|
The
encounter
concludes
(Role: Scheduler/Participant(s)/Admin) |
status = finished |
| Activity Description | Slot | Appointment | Appointment Response |
|---|---|---|---|
|
The
schedule
is
created/published
(Role: Scheduler) |
freeBusyType = FREE | ||
|
An
appointment
request
is
created
(Role: Requester) |
status
=
pending
participant.status = needs-action |
||
|
The
appointment
request
is
processed
and
the
slot
status
updated
(Role: Scheduler) |
freeBusyType = BUSY-TENTATIVE | ||
|
Participant
declines
the
Appointment
(Role: Participant) |
participantStatus = declined | ||
|
The
appointment
is
cancelled
(Role: Scheduler) |
freeBusyType = FREE |
status
=
cancelled
participant.status = declined |
| Activity Description | Slot | Appointment | Appointment Response |
|---|---|---|---|
|
The
schedule
is
created/published
(Role: Scheduler) |
freeBusyType = FREE | ||
|
An
appointment
is
requested
(e.g.
with
Brian
and
Peter)
(Role: Requester) |
status
=
proposed
participant(Brian).status = needs-action participant(Peter).status = needs-action |
||
|
The
schedule
is
updated
to
inform
others
of
interest
in
the
slot
(Role: Scheduler) |
freeBusyType = BUSY-TENTATIVE | ||
|
Brian
accepts
the
appointment
(Role: Participant-Brian) |
(Brian).participantStatus = accepted | ||
|
Appointment
is
updated
with
Brian's
status
(Role: Scheduler) |
status
=
pending
participant(Brian).status = accepted |
||
|
Peter
suggests
a
new
time
(Role: Participant-Peter) |
(Peter).participantStatus
=
tentative
(with new time) |
||
|
Appointment
is
updated
with
new
time,
and
indicates
that
action
is
needed
by
both
participants
(Role: Scheduler) |
(new
time
details
updated)
participant(Brian).status = needs-action participant(Peter).status = needs-action |
||
|
Brian
accepts
the
appointment
(Role: Participant-Brian) |
(Brian).participantStatus = accepted | ||
|
Appointment
updated
(Role: Scheduler) |
participant(Brian).status = accepted | ||
|
(Role: Participant-Peter) |
(Peter).participantStatus = accepted | ||
|
Appointment
updated
(Role: Scheduler) |
freeBusyType = BUSY |
status
=
booked
participant(Peter).status = accepted |
| Activity Description | Slot | Appointment | Appointment Response | Encounter |
|---|---|---|---|---|
| (from typical status flow) | freeBusyType = BUSY |
status
=
booked
participant.status = accepted |
||
|
Appointment
is
updated
as
a
noshow
(Role: Scheduler/Admin) |
status = noshow | (no encounter created) |
| Activity Description | Appointment (inconvenient) | Appointment (preferred) |
|---|---|---|
| An appointment is booked for an inconvenient time using a typical status flow |
status
=
booked
participant.status = accepted |
|
| Waitlist appointment created |
status
=
booked
participant.status = accepted |
status
=
waitlist
requestedPeriod = (more convenient time period) |
| Patient notified of availability of a better slot | status = booked |
status
=
proposed
participant.status = needs-action |
| Patient accepts better slot | status = cancelled |
status
=
booked
participant.status = accepted |
)
.
Trial-Use Note: Implementer feedback is sought on the values for Appointment.priority and how interoperable they are. Using an extension to record a CodeableConcept for named values may be tested at a future Connectathon.
Implementer feedback is also sought to clarify desired relationship linkages between ServiceCategory, ServiceType and Specialty, along with how they have approached the definition.Feedback here
.
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 |
| actor | reference | Any one of the individuals participating in the appointment |
Appointment.participant.actor
( Practitioner , Device , Patient , HealthcareService , PractitionerRole , RelatedPerson , Location ) |
|
| appointment-type | token | The style of appointment or patient that has been booked in the slot (not service type) | Appointment.appointmentType | |
| based-on | reference | The service request this appointment is allocated to assess |
Appointment.basedOn
( ServiceRequest ) |
|
| date | date | Appointment date/time. | Appointment.start | |
| identifier | token | An Identifier of the Appointment | Appointment.identifier | |
| location | reference | This location is listed in the participants of the appointment |
Appointment.participant.actor.where(resolve()
is
Location)
( Location ) |
|
| part-status | token | The Participation status of the subject, or other participant on the appointment. Can be used to locate participants that have not responded to meeting requests. | Appointment.participant.status | |
| patient | reference | One of the individuals of the appointment is this patient |
Appointment.participant.actor.where(resolve()
is
Patient)
( Patient ) |
|
| practitioner | reference | One of the individuals of the appointment is this practitioner |
Appointment.participant.actor.where(resolve()
is
Practitioner)
( Practitioner ) |
|
| reason-code | token | Coded reason this appointment is scheduled | Appointment.reasonCode | |
| reason-reference | reference | Reason the appointment is to take place (resource) |
Appointment.reasonReference
( Condition , Observation , Procedure , ImmunizationRecommendation ) |
|
| service-category | token | A broad categorization of the service that is to be performed during this appointment | Appointment.serviceCategory | |
| service-type | token | The specific service that is to be performed during this appointment | Appointment.serviceType | |
| slot | reference | The slots that this appointment is filling |
Appointment.slot
( Slot ) |
|
| specialty | token | The specialty of a practitioner that would be required to perform the service requested in this appointment | Appointment.specialty | |
| status | token | The overall status of the appointment | Appointment.status | |
| supporting-info | reference | Additional information to support the appointment |
Appointment.supportingInformation
(Any) |