SupplyDelivery
Introduction
Scope and Usage
[%stu-note dstu%] This resource can represent different stages of supply delivery. After a request to create two separate resources to address dispatch vs. reception, current discussion concluded that one resource with multiple, extensible stages provided a better approach to support the variety of needs to document the different steps. HL7 seeks specific feedback on the implementability of one resource type with multiple stages (likely represented in a future IG with specific profiles to determine specific attributes/value sets applicable to each stage - see valueset-supplydelivery-stage), or whether two (or more) resource types would be more adequate. [%end-note%]
This resource is an event resource from a FHIR workflow perspective - see Workflow. It is the intent of the Orders and Observation Workgroup to align this resource with the workflow pattern for event resources.
The SupplyDelivery is used to document the dispatch (e.g., time of dispatch, content) and/or receipt (e.g., time or receipt, content) of, e.g., supplies, people, devices, patients, biologically derived products. This includes delivery of supplies within or across institution such as transport a set of supplies from materials management to a service unit, e.g., nurse station, or biologically derived products from the supplier to the hospital. This resource does not include the provisioning of transportation services. The SupplyDelivery does not imply that this supply has already been dispensed to the that patient or person, while it could be reserved for that patient or person. Those associations are done in dedicated resources such as the MedicationDispense and DeviceDispense.
Sample use cases include:
- Movement of bulk supplies between locations
- Receipt of bulk supplies
- Rejection of a delivery due to item condition
- Noting the loss of a delivery due to transportation failure
The SupplyDelivery enables the documentation of the one or more relevant stages, such as dispatch of and reception of a shipment. One may opt to document multiple stages given a particular use case, e.g., shipments of biologically derived products in a tightly controlled process, or only use a singular stage to summarize the shipment. Examples would include the dispatch and reception stages that in certain use cases need to be documented separately using two or more instances.
Boundaries and Relationships
The DeviceDispense and MedicationDispense resources are used to associate the device or medication with the specific patient for their use, while SupplyDelivery is solely focused on location and movement where the targeted patient or other person (e.g., devices used by a clinician), if included, are for delivery context only.
To determine the purchase date, a search of DeviceRequest, SupplyRequest, DeviceDispense, or SupplyDelivery as defined in an implementation guide can be done, as the context of the use case actually determines which date of either resource is considered the purchase date.
The Transport resource documents the movement of the supplies, people, patients, etc. between dispatch and receipt including, e.g., time of movement, transporter, average temperature during transport.
Notes
Workflow Considerations
The SupplyDelivery resource captures events associated with the movement of bulk supplies. It is used to document supply chain events including dispatch and reception.
The SupplyDelivery.stage element shall be used to indicate which workflow stage is being represented.
Returns are handled in a similar way as a dispatch and reception events.
For some SupplyDelivery instances there is a specific need to articulate if the event represents a dispatch or receipt, due to unique traceability requirements inherent to some transported products. This is particularly true when dispatch and receipt occurs across organizational boundaries with each party only having their "half" of the conversation. SupplyDelivery can be used for these events through the use of the SupplyDelivery.stage element.
It is intended that a delivery and subsequent return would be documented as two different instances of the SupplyDelivery resource. In workflow terms a SupplyDelivery is the response to a SupplyRequest, and in the case of a return, you would still have a SupplyRequest initiating that return. The SupplyDelivery instances represent one or more distinct stages of the response to a SupplyRequest from beginning to end, and receiving the product (even if you will ultimately ship it back) is a terminal event.
Some connected systems would see both instances of the SupplyDelivery events while others would only see the portion their organization is responsible for.
Examples:
Blood stock replenishment:
- A hospital transfusion laboratory places a SupplyRequest order for blood stock replenishment. The order is for 40 x O+ red blood cells, 35 x A+ red cells, 10 x O- red cells and 10 x A- red cells.
- The community blood bank receives the order and prepares the consignment. A SupplyDelivery representing a dispatch event is created that corresponds to the physical dispatch advice note.
- On receipt of the consignment the transfusion laboratory inspects and scans each received unit, and a SupplyDelivery representing the receipt event is created.
Hospital consumables:
- A service unit (hospital ward) needs to re-stock a number of consumables - 5 packs disposable hand towels, 200 disposable cups, and 100 disposable plates.
- A request is issued from the ward manager to materials management (SupplyRequest). The SupplyRequest has identifier MM278145.
- Materials management select the items and prepare them for delivery along with a dispatch document (SupplyDelivery stage=dispatch).
- The delivery is transported from materials management to the ward.
- Ward staff receive the delivery, check the physical items against the dispatch record and document the receipt (SupplyDelivery stage=reception).
StructureDefinition
Elements (Simplified)
- SupplyDelivery [0..*]: - Record of movement of supplies from one location to another
- SupplyDelivery.identifier [0..*]: Identifier External identifier
- SupplyDelivery.basedOn [0..*]: Reference(SupplyRequest) Fulfills plan, proposal or order
- SupplyDelivery.partOf [0..*]: [Reference(SupplyDelivery](/Reference(SupplyDelivery), Contract)) Part of referenced event
- SupplyDelivery.status [1..1]: code required:supplydelivery-status in-progress | completed | abandoned | entered-in-error
- SupplyDelivery.subject [0..1]: [Reference(Patient](/Reference(Patient), Group, Organization)) Individual(s) or organization for whom the item is supplied
- SupplyDelivery.type [0..1]: CodeableConcept extensible:supplydelivery-supplyitemtype Category of supply event
- SupplyDelivery.stage [1..1]: CodeableConcept extensible:supplydelivery-stage Stage or event of delivery
- SupplyDelivery.suppliedItem [0..*]: BackboneElement The item that is delivered or supplied
- SupplyDelivery.suppliedItem.quantity [0..1]: Quantity(SimpleQuantity) Amount supplied
- SupplyDelivery.suppliedItem.condition [0..1]: CodeableConcept example:supplydelivery-supplyitemcondition A description of the supplied item's condition (e.g., box is damaged)
- SupplyDelivery.suppliedItem.item[x] [0..1]: CodeableConcept, [Reference(Medication](/Reference(Medication), Substance, Device, BiologicallyDerivedProduct, NutritionProduct)) example:supplydelivery-supplyitemtype Medication, Substance, Device or Biologically Derived Product supplied
- SupplyDelivery.occurrence[x] [0..1]: dateTime, Period, Timing When event occurred
- SupplyDelivery.supplier [0..1]: [Reference(Practitioner](/Reference(Practitioner), PractitionerRole, Organization)) The item supplier
- SupplyDelivery.destination [0..1]: [Reference(Location](/Reference(Location), Practitioner, PractitionerRole, Organization)) Where the delivery was sent
- SupplyDelivery.receiver [0..*]: [Reference(Practitioner](/Reference(Practitioner), PractitionerRole, Organization, Group)) Who received the delivery
Mappings
- SupplyDelivery Mappings — 30 mapping entries
Implementation Guide
implementationguide-SupplyDelivery-core.xml
<?xml version="1.0" encoding="UTF-8"?>
<ImplementationGuide xmlns="http://hl7.org/fhir">
<id value="SupplyDelivery-core"/>
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm">
<valueInteger value="5"/>
</extension>
<identifier>
<system value="urn:ietf:rfc:3986"/>
<value value="urn:oid:2.16.840.1.113883.4.642.30.4"/>
</identifier>
<version value="0.01"/>
<name value="SupplyDeliveryStages"/>
<title value="SupplyDelivery Profiles"/>
<status value="draft"/>
<date value="2018-08-11T08:17:46.560"/>
<publisher value="Health Level Seven International (Orders and Observations Workgroup)"/>
<description value="Defines constraints and extensions on the SupplyDelivery resource."/>
</ImplementationGuide>
Resource Packs
list-SupplyDelivery-packs.xml
<?xml version="1.0" encoding="UTF-8"?>
<List xmlns="http://hl7.org/fhir">
<id value="SupplyDelivery-packs"/>
<status value="current"/>
<mode value="working"/>
<entry>
<item>
<reference value="ImplementationGuide/SupplyDelivery-core"/>
</item>
</entry>
</List>
Search Parameters
- identifier — token — External identifier —
SupplyDelivery.identifier - patient — reference — Patient for whom the item is supplied —
SupplyDelivery.subject.where(resolve() is Patient) - subject — reference — Individual(s) or organization for whom the item is supplied —
SupplyDelivery.subject - receiver — reference — Who collected the Supply —
SupplyDelivery.receiver - status — token — in-progress | completed | abandoned | entered-in-error —
SupplyDelivery.status - supplier — reference — Dispenser —
SupplyDelivery.supplier
Examples
- ISBT128 — supplydelivery-example-ISBT128 — ISBT 128 Supply Delivery
- mphodelivery — supplydelivery-example-mphodelivery — MPHO Supply Delivery
- pumpdelivery — supplydelivery-example-pumpdelivery — Delivery of an insulin pump
- simpledelivery — supplydelivery-example — Simple delivery for resupply
- supplydelivery-example — supplydelivery-example
- supplydelivery-example-ISBT128 — supplydelivery-example-ISBT128
- supplydelivery-example-mphodelivery — supplydelivery-example-mphodelivery
- supplydelivery-example-pumpdelivery — supplydelivery-example-pumpdelivery
- supplydelivery-examples-header — supplydelivery-examples-header
Mapping Exceptions
supplydelivery-event-mapping-exceptions.xml
Divergent Elements
- Event.identifier → SupplyDelivery.identifier
- summary | reason=Unknown | pattern=true
- shortUnmatched | reason=Unknown | pattern=Business identifier for supply delivery | resource=External identifier
- definitionUnmatched | reason=Unknown | pattern=Business identifiers assigned to this supply delivery by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server. | resource=Identifier for the supply delivery event that is used to identify it across multiple disparate systems.
- commentsUnmatched | reason=Unknown | pattern=Note: This is a business identifier, not a resource identifier (see discussion). It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types. For example, multiple Patient and a Person resource instance might share the same social insurance number. | resource=This identifier is typically assigned by the supplier, and may be used to reference the delivery when exchanging information about it with other systems.
- requirementsUnmatched | reason=Unknown | pattern=Allows identification of the supply delivery as it is known by various participating systems and in a way that remains consistent across servers.
- Event.basedOn → SupplyDelivery.basedOn
- missingTypes | reason=Unknown | pattern=Reference(Request)
- extraTypes | reason=Unknown
- definitionUnmatched | reason=Unknown | pattern=A plan, proposal or order that is fulfilled in whole or in part by this supply delivery. | resource=A plan, proposal or order that is fulfilled in whole or in part by this event.
- requirementsUnmatched | reason=Unknown | pattern=Allows tracing of authorization for the supply delivery and tracking whether proposals/recommendations were acted upon. | resource=Allows tracing of authorization for the event and tracking whether proposals/recommendations were acted upon.
- Event.partOf → SupplyDelivery.partOf
- missingTypes | reason=Unknown | pattern=Reference(Event)
- extraTypes | reason=Unknown
- definitionUnmatched | reason=Unknown | pattern=A larger event of which this particular supply delivery is a component or step. | resource=A larger event of which this particular event is a component or step.
- commentsUnmatched | reason=Unknown | pattern=Not to be used to link an supply delivery to an Encounter - use 'context' for that. | resource=Not to be used to link an event to an Encounter - use Event.context for that.
[The allowed reference resources may be adjusted as appropriate for the event resource].
- Event.status → SupplyDelivery.status
- shortUnmatched | reason=Unknown | pattern=preparation | in-progress | not-done | suspended | aborted | completed | entered-in-error | unknown | resource=in-progress | completed | abandoned | entered-in-error
- definitionUnmatched | reason=Unknown | pattern=The current state of the supply delivery. | resource=A code specifying the state of the dispense event.
- commentsUnmatched | reason=Unknown | pattern=A nominal state-transition diagram can be found in the (Event pattern documentation
Unknown does not represent "other" - one of the defined statuses must apply. Unknown is used when the authoring system is not sure what the current status is. | resource=This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
- Event.category → SupplyDelivery.type
- summary | reason=Unknown | pattern=true
- shortUnmatched | reason=Unknown | pattern=High level categorization of supply delivery | resource=Category of supply event
- definitionUnmatched | reason=Unknown | pattern=Partitions the supply delivery into one or more categories that can be used to filter searching, to govern access control and/or to guide system behavior. | resource=Indicates the type of supply being provided. Examples include: Medication, Device, Biologically Derived Product.
- commentsUnmatched | reason=Unknown | pattern=Categorization might be done automatically (inferred by code) or manually by user assertion. The absence of a category may limit the ability to determine when the element should be handled, so strong consideration should be given to how systems will be able to determine category values for legacy data and how data that cannot be categorized will be handled. As well, some categories might not be mutually exclusive, so systems should prepare for multiple declared categories - even within a single category 'axis'. In general, there should not be a 'strong' binding ('required' or 'extensible') on the category element overall. Instead, the element can be sliced and bindings can be asserted that apply to particular repetitions.
- Event.product → SupplyDelivery.suppliedItem
- missingTypes | reason=Unknown | pattern=CodeableReference(BiologicallyDerivedProduct, Device, DeviceDefinition, Medication, NutritionProduct, Substance)
- extraTypes | reason=Unknown
- summary | reason=Unknown | pattern=true
- shortUnmatched | reason=Unknown | pattern=Product used/provided | resource=The item that is delivered or supplied
- definitionUnmatched | reason=Unknown | pattern=Indicates the product supplied or manipulated by this supply delivery. | resource=The item that is being delivered or has been supplied.
- Event.subject → SupplyDelivery.subject
- extraTypes | reason=Unknown
- summary | reason=Unknown | pattern=true
- shortUnmatched | reason=Unknown | pattern=Individual service was done for/to | resource=Individual(s) or organization for whom the item is supplied
- definitionUnmatched | reason=Unknown | pattern=The individual or set of individuals the action is being or was performed on. | resource=A link to a resource representing the person whom the delivered item is for.
- requirementsUnmatched | reason=Unknown | pattern=Links the supply delivery to the Patient context. May also affect access control.
- Event.occurrence[x] → SupplyDelivery.occurrence[x]
- shortUnmatched | reason=Unknown | pattern=When supply delivery occurred/is occurring | resource=When event occurred
- definitionUnmatched | reason=Unknown | pattern=The date, period or timing when the supply delivery did occur or is occurring. | resource=The date or time(s) the activity occurred.
- commentsUnmatched | reason=Unknown | pattern=This indicates when the activity actually occurred or is occurring, not when it was asked/requested/ordered to occur. For the latter, look at the occurence element of the Request this {{event}} is "basedOn". The status code allows differentiation of whether the timing reflects a historic event or an ongoing event. Ongoing events should not include an upper bound in the Period or Timing.bounds. . | resource=[The list of types may be constrained as appropriate for the type of event].
- Event.performer → SupplyDelivery.supplier
- extraTypes | reason=Unknown
- summary | reason=Unknown | pattern=true
- shortUnmatched | reason=Unknown | pattern=Who performed supply delivery and what they did | resource=The item supplier
- definitionUnmatched | reason=Unknown | pattern=Indicates who or what performed the supply delivery and how they were involved. | resource=The individual or organization responsible for supplying the delivery.
- Event.location → SupplyDelivery.destination
- extraTypes | reason=Unknown
- summary | reason=Unknown | pattern=true
- shortUnmatched | reason=Unknown | pattern=Where supply delivery occurred | resource=Where the delivery was sent
- definitionUnmatched | reason=Unknown | pattern=The principal physical location where the supply delivery was performed. | resource=Identification of the facility, location or person where the delivery is shipped to.
- requirementsUnmatched | reason=Unknown | pattern=Ties the event to where the records are likely kept and provides context around the event occurrence (e.g. if it occurred inside or outside a dedicated healthcare setting).
Unmapped Elements
- Event.reported — Unknown
- Event.reason — Unknown
- Event.relevantHistory — Unknown
- Event.code — Unknown
- Event.performer.actor — Unknown
- Event.performer.function — Unknown
- Event.note — Unknown
- Event.encounter — Unknown
- Event.recorded — Unknown
supplydelivery-fivews-mapping-exceptions.xml
Unmapped Elements
- FiveWs.what — Unknown
- FiveWs.recorded — Unknown
- FiveWs.author — Unknown
- FiveWs.actor — Unknown
- FiveWs.cause — Unknown
- FiveWs.version — Unknown
- FiveWs.witness — Unknown
- FiveWs.class — Unknown
- FiveWs.where — Unknown
- FiveWs.context — Unknown
- FiveWs.init — Unknown
- FiveWs.why — Unknown
- FiveWs.identifier — Unknown
- FiveWs.source — Unknown
- FiveWs.who — Unknown
- FiveWs.grade — Unknown
- FiveWs.status — Unknown
- FiveWs.planned — Unknown
- FiveWs.subject — Unknown