Argo-Scheduling Implementation Guide CI Build

Appointment_Hold

OPERATION: Appointment_Hold

The official URL for this operation definition is:

http://fhir.org/guides/argonaut-scheduling/OperationDefinition/appointment-hold

Request for a hold on a selected Appointment in order for the user to complete entering data for booking an appointment. This operation precedes the booking and follows the appointment availability interaction. The server determines if the nominated appointment is still available (i.e., all the required actors and physical assets needed for the appointment are still available) and either accepts or rejects the hold request and updates the resource status accordingly. See the Appointment State Diagram for further details on statuses.

URL: [base]/Appointment/$hold

URL: [base]/Appointment/[id]/$hold

Parameters

Use Name Cardinality Type Binding Documentation
IN appt-id 0..1 uri

A resource id for one of proposed Appointments returned by a prior $find operation (e.g., Resource/1234). References can be to an absolute URL, but servers only perform this operation on their own appointments.

IN appt-resource 0..1 Appointment (Argonaut Appointment Profile)

When prefetching open Slots, an Argonaut Appointment Profile resource is created by the Client Application and is exchanged with the FHIR Scheduler (EHR). This parameter represents this profile and is the same as used for the $book operation.

OUT return 0..1 Bundle (Argonaut Appointment Bundle Profile)

An Argonaut Appointment Bundle Profile of type searchset of requested held Appointment resource and may also contain an OperationOutcome with errors, warnings or information as a result of processing the operation. The Appointment resource will have an updated status of "pending" if the hold is approved or "cancelled" if the hold is rejected.

  • This operation is not idempotent and may only be invoked by performing an HTTP POST.

  • The length of an appointment hold is determined by the scheduling service‚Äôs business rules, after which the status of the Appointment may change. An Expires header Should be included in the response to successful hold request to indicate its expiration. The Client should cancel a hold on an appointment before it expires.

  • When using the appt-resource as an input parameter, the payload can be either the Appointment resource or use the Parameters format as shown in the examples below

The operation can be invoked as follows:

  1. POST [base]/Appointment/[id]/$hold when using appt-id as an input parameter
  2. POST [base]/Appointment/$hold when using appt-resource as an input parameter

Examples

1) Using appt-id as an input parameter

Request

POST [base]/Appointment/proposed-appt1a-1/$hold

Request body

    {
      "resourceType": "Parameters",
      "parameter": [
        {
          "name": "appt-id",
          "valueUrl" : "Appointment/proposed-appt1a-1"
        }
      ]
    }

Response

HTTP/1.1 200 OK
Expires: Wed, 21 March 2018 07:28:00 GMT
[other headers]

Response body

    {
      "resourceType": "Bundle",
      "id": "hal-dr-y-held",
      "type": "searchset",
      "total": 2,
      "entry": [{
        "fullUrl": "http://server/path/Appointment/booked-appt1a",
        "resource": {
          "resourceType": "Appointment",
          "id": "held-appt1a",
          ...snip...
            "status" : "pending",
            "serviceType" : [
          ...snip...
        "fullUrl": "http://server/path/OperationOutcome/oo-held-appt1a",
        "resource": {
          "resourceType": "OperationOutcome",
          "id": "oo-held-appt1a-appt1a",
          .. snip ...
        }
      ]
    }
2) Using appt-resource as an input parameter

Request

POST [base]/Appointment/$hold

Appointment resource as request body

{
  "resourceType" : "Appointment",
...snip...
  "status" : "proposed",
  "serviceType" : [
...snip...
  "start" : "2017-07-17T01:00:00Z",
  "end" : "2017-07-17T01:15:00Z",
  "participant" : [
    {
      "actor" : {
        "reference" : "Practitioner/dr-y",
        "display" : "Dr Y"
...snip...
}

Parameter format as request body

      {
        "resourceType": "Parameters",
        "parameter": [
          {
            "name": "appt-resource",
            "resource":{
                        "resourceType" : "Appointment",
                        "id" : "proposed-appt2",
                      ...snip...
                        "status" : "proposed",
                        "serviceType" : [
                      ...snip...
                        "start" : "2017-07-17T01:00:00Z",
                        "end" : "2017-07-17T01:15:00Z",
                        "participant" : [
                          {
                            "actor" : {
                              "reference" : "Practitioner/dr-y",
                              "display" : "Dr Y"
                      ...snip...
            }

          }
        ]
      }

Response

HTTP/1.1 201 Created
Location: [base]/Appointment/argo-appt-1/_history/1
Expires: Wed, 21 March 2018 07:28:00 GMT
[other headers]

Response body

    {
      "resourceType": "Bundle",
      "id": "argo-appt-1",
      "type": "searchset",
      "total": 2,
      "entry": [{
        "fullUrl": "http://server/path/Appointment/scheduled-appt2a",
        "resource": {
          "resourceType": "Appointment",
          "id": "held-appt2a",
          ...snip ...
          "status" : "pending",
          "serviceType" : [
        ...snip...
        "fullUrl": "http://server/path/OperationOutcome/oo-held-appt1a",
        "resource": {
          "resourceType": "OperationOutcome",
          "id": "oo-held-appt1a-appt1a",
          .. snip ...
        }
      ]
    }