Book an appointment

When booking a new appointment, the appointment resource is posted without an ID. The ID of the created Appointment is returned in response to the request.

POST [base]/Appointment
Content-Type: application/fhir+json
{
  "resourceType": "Appointment",
  "status": "booked",
  "serviceCategory": [
    {
      "coding": [
        {
          "system": "urn:oid:1.2.246.537.6.50.201801",
          "code": "SOTE19",
          "display": "Perheoikeudelliset palvelut"
        }
      ]
    }
  ],
  "serviceType": [
    {
      "coding": [
        {
          "system": "urn:oid:1.2.246.537.6.49.201501",
          "code": "NC",
          "display": "Isyyden selvittämispalvelu"
        }
      ]
    }
  ],
  "appointmentType": {
    "coding": [
      {
        "system": "urn:oid:1.2.246.537.6.884.2015",
        "code": "10",
        "display": "Kertakäynti toimipaikassa"
      }
    ]
  },
  "start": "2020-01-01T12:00:00+02:00",
  "end": "2020-01-01T12:30:00+02:00",
  "slot": [
    {
      "reference": "Slot/123456789"
    }
  ],
  "comment": "Äidillä ei ole virallista henkilöllisyystodistusta",
  "participant": [
    {
      "actor": {
        "identifier": {
          "value": "010101-123N",
          "system": "urn:oid:1.2.246.21"
        },
        "display": "Pentti Potilas"
      },
      "status": "accepted",
      "type": [
        {
          "coding": [
            {
              "system": "http://terminology.hl7.org/CodeSystem/v3-ParticipationType",
              "code": "SBJ",
              "display": "subject"
            }
          ]
        }
      ]
    },
    {
      "actor": {
        "identifier": {
          "value": "1.2.246.10.10303777.10.777"
        },
        "display": "Vastaanotto"
      },
      "status": "accepted",
      "type": [
        {
          "coding": [
            {
              "system": "http://terminology.hl7.org/CodeSystem/v3-ParticipationType",
              "code": "LOC",
              "display": "location"
            }
          ]
        }
      ]
    },
    {
      "actor": {
        "reference": "HealthcareService/234567890",
        "display": "Lastenvalvojan vastaanotto"
      },
      "status": "accepted"
    }
  ],
  "extension": [
    {
      "url": "http://hl7.fi/fhir/StructureDefinition/NotificationInfoExtension",
      "valueContactPoint": {
        "system": "sms",
        "value": "+3581234567"
      }
    }
  ]
}

Response

If the appointment is created successfully, the server responds with a 201 Created and a Location header with the id of the appointment, e.g. Location: [base]/Appointment/605790.

The full resource can also be returned. See more: http://www.hl7.org/fhir/http.html#ops

Implementation example

Example client call when using HAPI FHIR

    public void bookAppointment() {
        Appointment appointment = new Appointment();
        appointment.addSlot(new Reference(new IdDt(ResourceTypes.SLOT.toCode(), "123456789")));
        appointment.setStart(Date.from(Instant.parse("2020-01-01T12:00:00+02:00")));
        appointment.setEnd(Date.from(Instant.parse("2020-01-01T12:30:00+02:00")));
        appointment.setStatus(Appointment.AppointmentStatus.BOOKED);
        // fill in rest of contents

        String baseUrl = "http://example.com/fhir";
        FhirContext fhirContext = FhirContext.forR4();
        IGenericClient client = fhirContext.newRestfulGenericClient(baseUrl);

        client
                .create()
                .resource(appointment)
                .execute();
    }

Error handling

The create should be rejected with a 400 Bad Request if the resource cannot be created (syntax error etc.) or with a 422 Unprocessable Entity if the resource will not be created (business logic reasons).

See more: http://www.hl7.org/fhir/http.html#create