This page is part of the FHIR Specification (v3.5.0: R4 Ballot #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
FHIR Infrastructure | Maturity Level: 1 | Informative |
A pattern to be followed by resources that represent a specific proposal, plan and/or order for some sort of action or service.
This is NOT a resource. It is not part of the FHIR schema and cannot appear directly in FHIR instances. It is a logical model that defines a pattern adhered to by other resources. This pattern serves two purposes:
The notion of "request" encompasses all types of orders (original orders, filler representations of orders, reflex orders, etc.) as well as proposals/recommendations for action to occur, plans, scheduling, etc. Any sort of description of an activity that is "desired" where the description is specific as to the subject of the activity and the approximate timing of the activity would be considered a "Request".
This logical model is one of three common workflow patterns. The other two patterns are Event and Definition. This pattern is followed by (or is intended to be followed by a number of other FHIR resources/
Requests are distinct from events in that an event is primarily focused on what has occurred or is occurring while requests deal with what is "desired" to occur. While creating a request or definition can be seen as a type of event, the focus of those other resources is not the "creation" but the desire/intention. Both requests and definitions deal with activities that "can" occur, but requests represent a specific intention for something to occur and are bound to a specific context of subject (e.g. patient) and time, while definitions represent mere "possibility" rather than intention and are independent of a specific subject or timeframe.
Requests are related to Task in that tasks can both request and track the fulfillment of a request. In some cases, fulfillment may also result in the creation of sub-tasks. Requests do not track their own fulfillment - i.e. requested/accepted/in-progress. This is managed through Task. The status of a request only reflects the status of the "authorization/intention", not how the request is being executed or not. It is possible for multiple tasks to be associated with the fulfillment of a single Request.
This model represents a pattern. It provides a standard list of data elements with cardinalities, data types, definitions, rationale and usage notes that will ideally be adhered to by resources that fall into the "request" workflow category. However, adherence to this pattern is not mandatory. Not all healthcare domains are the same. Concepts that may be generally applicable (and thus are included in this standard pattern) might still not be relevant everywhere or may be sufficiently uncommon that they are more appropriate to include as extensions than as core properties of the resource. Work groups are encouraged to adjust descriptions, usage notes and rationale to be specific to their resource (e.g. use the term "diagnostic test" or "prescription" rather than "request"). As well, design notes in the comments column marked with [square brackets] identifies areas where domain variation is expected and encouraged. Other variation, including differences in names, cardinalities, data types and the decision to omit an element outright are also possible, but should be discussed with the FHIR Infrastructure work group's Workflow project to ensure the rationale for non-alignment is understood, to confirm that the deviation is necessary and to identify whether any adjustments to the pattern are appropriate.
This pattern provides a linkage to the W5 list of standard data elements. Resources that adhere to this pattern should ensure their w5 mappings are consistent, as is their data element ordering.
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Request | I | Logical | Request Pattern | |
identifier | Σ | 0..* | Identifier | Business Identifier for {{title}} |
instantiatesCanonical | Σ | 0..* | canonical(Definition) | Instantiates FHIR protocol or definition |
instantiatesUri | Σ | 0..* | uri | Instantiates external protocol or definition |
basedOn | Σ | 0..* | Reference(Request) | Fulfills plan, proposal or order |
replaces | Σ | 0..* | Reference(Request) | Request(s) replaced by this {{title}} |
groupIdentifier | Σ | 0..1 | Identifier | Composite request this is part of |
status | ?!Σ | 1..1 | code | draft | active | suspended | cancelled | completed | entered-in-error | unknown RequestStatus (Required) |
statusReason | 0..1 | CodeableConcept | Reason for current status | |
intent | ?!Σ | 1..1 | code | proposal | plan | order (immutable) RequestIntent (Required) |
priority | Σ | 0..1 | code | routine | urgent | asap | stat RequestPriority (Required) |
doNotPerform | ?!Σ | 0..1 | boolean | true if request is prohibiting action |
code | Σ | 0..1 | CodeableConcept | What's being requested/ordered |
subject | Σ | 1..1 | Reference(Patient | Group) | Individual the service is ordered for |
context | Σ | 0..1 | Reference(Encounter | EpisodeOfCare) | Encounter / Episode associated with request |
occurrence[x] | Σ | 0..1 | When service should occur | |
occurrenceDateTime | dateTime | |||
occurrencePeriod | Period | |||
occurrenceTiming | Timing | |||
authoredOn | Σ | 0..1 | dateTime | When request transitioned to being actionable |
requester | Σ | 0..1 | Reference(Practitioner | PractitionerRole | Organization | Patient | RelatedPerson | Device) | Who/what is requesting service |
performerType | Σ | 0..1 | CodeableConcept | Desired kind of service performer |
performer | Σ | 0..1 | Reference(Practitioner | PractitionerRole | Organization | CareTeam | HealthcareService | Patient | Device | RelatedPerson) | Specific desired (non)performer |
reasonCode | Σ | 0..* | CodeableConcept | Why is service (not) needed? |
reasonReference | Σ | 0..* | Reference(Condition | Observation | DiagnosticReport | DocumentReference) | Why is service (not) needed? |
insurance | 0..* | Reference(Coverage | ClaimResponse) | Associated insurance coverage | |
supportingInfo | 0..* | Reference(Any) | Extra information to use in performing request | |
note | 0..* | Annotation | Comments made about {{title}} | |
relevantHistory | 0..* | Reference(Provenance) | Key events in history of {{title}} | |
Documentation for this format |
UML Diagram (Legend)
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Request | I | Logical | Request Pattern | |
identifier | Σ | 0..* | Identifier | Business Identifier for {{title}} |
instantiatesCanonical | Σ | 0..* | canonical(Definition) | Instantiates FHIR protocol or definition |
instantiatesUri | Σ | 0..* | uri | Instantiates external protocol or definition |
basedOn | Σ | 0..* | Reference(Request) | Fulfills plan, proposal or order |
replaces | Σ | 0..* | Reference(Request) | Request(s) replaced by this {{title}} |
groupIdentifier | Σ | 0..1 | Identifier | Composite request this is part of |
status | ?!Σ | 1..1 | code | draft | active | suspended | cancelled | completed | entered-in-error | unknown RequestStatus (Required) |
statusReason | 0..1 | CodeableConcept | Reason for current status | |
intent | ?!Σ | 1..1 | code | proposal | plan | order (immutable) RequestIntent (Required) |
priority | Σ | 0..1 | code | routine | urgent | asap | stat RequestPriority (Required) |
doNotPerform | ?!Σ | 0..1 | boolean | true if request is prohibiting action |
code | Σ | 0..1 | CodeableConcept | What's being requested/ordered |
subject | Σ | 1..1 | Reference(Patient | Group) | Individual the service is ordered for |
context | Σ | 0..1 | Reference(Encounter | EpisodeOfCare) | Encounter / Episode associated with request |
occurrence[x] | Σ | 0..1 | When service should occur | |
occurrenceDateTime | dateTime | |||
occurrencePeriod | Period | |||
occurrenceTiming | Timing | |||
authoredOn | Σ | 0..1 | dateTime | When request transitioned to being actionable |
requester | Σ | 0..1 | Reference(Practitioner | PractitionerRole | Organization | Patient | RelatedPerson | Device) | Who/what is requesting service |
performerType | Σ | 0..1 | CodeableConcept | Desired kind of service performer |
performer | Σ | 0..1 | Reference(Practitioner | PractitionerRole | Organization | CareTeam | HealthcareService | Patient | Device | RelatedPerson) | Specific desired (non)performer |
reasonCode | Σ | 0..* | CodeableConcept | Why is service (not) needed? |
reasonReference | Σ | 0..* | Reference(Condition | Observation | DiagnosticReport | DocumentReference) | Why is service (not) needed? |
insurance | 0..* | Reference(Coverage | ClaimResponse) | Associated insurance coverage | |
supportingInfo | 0..* | Reference(Any) | Extra information to use in performing request | |
note | 0..* | Annotation | Comments made about {{title}} | |
relevantHistory | 0..* | Reference(Provenance) | Key events in history of {{title}} | |
Documentation for this format |
Path | Definition | Type | Reference |
---|---|---|---|
Request.status | Codes identifying the lifecycle stage of a request. | Required | RequestStatus |
Request.statusReason | Codes identifying the reason for the current state of a request. | Unknown | No details provided yet |
Request.intent | Codes indicating the degree of authority/intentionality associated with a request. | Required | RequestIntent |
Request.priority | Identifies the level of importance to be assigned to actioning the request. | Required | RequestPriority |
Request.code | Codes indicating the details of what is being requested. These will vary significantly based on the type of request resource and will often be example/preferred rather than extensible/required. | Unknown | No details provided yet |
Request.performerType | Identifies types of practitioners, devices or other agents that should fulfill a request. While the detailed constraints of relevant agents will vary by resource, some degree of consistency around recommended codes across request and definition resources would be desirable. | Unknown | No details provided yet |
Request.reasonCode | Codes identifying why this request was necessary. These may be clinical reasons (e.g. diagnoses, symptoms) and/or administrative reasons. While the detailed constraints of relevant reasons will vary by resource, some degree of consistency across resources around recommended codes would be desirable. | Unknown | No details provided yet |
The following diagram shows the "typical" state machine diagram for resources following the Request pattern. Note that not all resources will support all states, some resources may choose different names for certain states and some resources may introduce sub-states to the listed states. As well, additional transitions may be supported, including from terminal nodes (e.g. from "completed" back to "active"). That said, most resources should align with this state machine fairly well.
Note that this state machine does not reflect the execution of the request. That state is managed either through the Event resources that are based on the request or via the Task resource.
Request resources describe what activity is desired/authorized. Requests do not track the execution/fulfillment
of the plan, proposal or order. I.e. the request resource will not indicate actual performer, actual performance
time, actual action performed, etc. Information about what action (if any) has occurred against the request is
tracked using the corresponding Event resource(s). Events that are associated with
the request should have a basedOn
link referencing the request. In addition, a linkage can be
established (and information about progress of execution) may be found in Task resources
that have a focus of this request.
FHIR does not impose any business rules on what sorts of changes may be made to a request. A generic FHIR server could support updating a completed request to change the subject, requester, authorized action, quantity, timing and any other such information. However, most business processes will impose significant constraints on what changes, if any, are allowed to request resources, particularly after they have transitioned to "active" or "completed". Servers are free to enforce whatever rules they deem appropriate - and to provide appropriate OperationOutcome responses detailing constraints if those rules are violated.
There are three different ways to define "compound" requests in FHIR:
The Request.requisitionId
element allows multiple requests to be linked as having been created as part
of the same "event" - generally by the same practitioner at the same time for the same subject. The
"requisitionId" represents the identifier of the prescription, lab requisition or other form that was
shared by all items. The common information (patient
/practitioner
/authoredOn
)
can be seen by examining
any of the Request instances that share that requisitionId
If there are common comments or notes that
span the entire requisition, they should be captured as Observation or
Communication instances linked to relevant Request instances using
Request.supportingInfo
.
Each "component" behaves as an independent request and has its own status that changes independently. In general the requisitionId, practitioner, authoredOn and subject for each will be immutable, but there may be situations where some workflows allow them to change. The shared requisitionId allows business processes dependent on "simultaneous/requisition-based ordering" such as payment rules to know that the requests were ordered at the same time.
In this case "components" of a parent request are not treated as components, but rather as separate orders that are
executed as part of the fulfillment process for the parent order. For example, a lab order might spawn child orders
to draw the specimen, treat the specimen, run several tests and to create the report. Each "child" Request would use
Request.basedOn
to reference the original Request. In this case, there's a relationship between the
statuses of the base Request and the fulfilling Requests, but they transition separately and might not transition in
the same manner. For example, if the original lab order were updated to "suspended", the initial blood draw request might
be complete. The other requests might change to either "suspended" or even "aborted" and a subsequent update of the
lab order back to active might require spawning additional fulfilling orders, perhaps to draw a new specimen.
basedOn
is distinct from the notion of replaces
. In a "based on" relationship both resources are
"active" and in force and the authority cascades from the initial request to the request that is based on that original request.
In a "replaces" relationship, the target resource is no longer in force and should have a status of
"completed" or "cancelled" or some other terminal state.
This approach makes use of the RequestGroup resource which allows the assertion of complex timing and other dependencies between a collection of requests. These effectively become one overall Request instance with a single status. All resources referenced by the RequestGroup must have an intent of "option", meaning that they cannot be interpretted independently - and that changes to them must take into account the impact on referencing resources. Typically these will either be contained resources or tightly controlled or immutable instances based on ActivityDefinitions that can safely be referenced without concern of them changing independent of referencing Requests.
The status of the parent request automatically cascades to the component "options". If there is a need for divergent statuses, these must be handled by creating "child" using the "basedOn" approach above. They should have a basedOn relationship with both the "parent" Request as well as the specific "option" Request they are tied to.
identifier | instantiatesCanonical | instantiatesUri | basedOn | replaces | groupIdentifier | status | statusReason | intent | priority | doNotPerform | code | subject | context | occurrence[x] | authoredOn | requester | performerType | performer | reasonCode | reasonReference | insurance | supportingInfo | note | relevantHistory | |
Appointment | 1 | 1 | 1 | 1 T | 1 NC | 4 NTC | 1 N | 1 NTC | 1 N | 1 N | 1 N | 1 NT | |||||||||||||
AppointmentResponse | 1 | 1 N | 1 N | 2 NT | 1 NC | 1 N | 1 NT | ||||||||||||||||||
CarePlan | 1 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 NT | 1 N | 1 N | 1 C | 1 | 2 N | 1 | 1 | |||||
Claim | 2 | 1 N | 1 C | 1 T | 1 NC | 1 NC | 1 N | 1 N | 1 N | 1 NT | 1 NT | ||||||||||||||
CommunicationRequest | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 C | 1 | 1 | 1 | 1 | 2 NC | 1 | 1 | 1 N | 2 NT | |||||||
Contract | 2 | 1 C | 2 N | 1 C | 2 N | 2 N | 1 N | 1 NT | 1 N | ||||||||||||||||
CoverageEligibilityRequest | 1 | 1 C | 1 T | 1 NC | 1 N | 2 N | 1 N | ||||||||||||||||||
DeviceRequest | 1 | 1 | 1 | 1 | 1 N | 1 | 1 C | 1 | 1 | 1 NT | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||
EnrollmentRequest | 1 | 1 C | 1 NC | 1 N | 1 N | 1 N | 1 N | ||||||||||||||||||
ImmunizationRecommendation | 1 | 1 NC | 1 N | 1 NTC | 1 N | 1 N | |||||||||||||||||||
MedicationRequest | 1 | 1 | 1 N | 1 | 1 | 1 | 1 | 1 | 1 NT | 1 | 1 | 1 NTC | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 N | 1 | 1 N | |||
NutritionOrder | 1 | 1 | 1 | 1 | 1 | 8 NC | 1 N | 1 | 3 NC | 1 N | 1 N | 3 NT | 1 | ||||||||||||
ProcessRequest | 1 | 1 N | 1 C | 1 N | 1 N | ||||||||||||||||||||
RequestGroup | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 C | 1 C | 1 | 1 NT | 1 | 1 N | 1 NC | 1 | 1 | 1 NT | 1 | |||||
ServiceRequest | 1 | 1 | 1 | 1 | 1 | 1 N | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 C | 1 | 1 | 1 | 1 | 1 | 1 | |
SupplyRequest | 1 | 1 C | 1 | 1 NT | 1 | 1 | 1 | 1 NC | 1 | 1 | |||||||||||||||
Task | 1 | 1 | 1 | E | 1 | 1 | 1 | 1 | 1 | 1 NC | 1 | 1 | 1 | 1 NT | 1 | 1 | 1 | 1 | |||||||
VisionPrescription | 1 | 1 C | 1 NC | 1 N | 1 N | 1 N |