{
  "resourceType": "OperationDefinition",
  "id": "ISiKAppointmentBookOperation",
  "status": "active",
  "experimental": false,
  "version": "2.0.6",
  "publisher": "gematik GmbH",
  "date": "2024-11-12",
  "name": "book",
  "url": "https://gematik.de/fhir/isik/v2/Terminplanung/OperationDefinition/AppointmentBook",
  "kind": "operation",
  "code": "book",
  "resource": [
    "Appointment"
  ],
  "system": false,
  "type": true,
  "instance": false,
  "affectsState": true,
  "description": "OperationDefinition für die Buchung eines Termins. Die Operation überprüft ob der Termin noch verfügbar ist im Termin-Repository.",
  "parameter": [
    {
      "name": "appt-resource",
      "use": "in",
      "min": 1,
      "max": "1",
      "documentation": "Eine Appointment-Ressource entsprechend dem dazugehörigen ISiK-Profil MUSS übergeben werden. Falls das Parameter-Element 'Appointment' als einziges Parameter-Element verwendet wird, SOLL die Appointment-Ressource direkt im HTTP Body übergeben werden, alternativ zu einer Parameter-Ressource inklusive dem eingebetteten Appointment-Element. Invalide Ressourcen MÜSSEN abgelehnt werden durch das Termin Repository (zur Form der Ablehnung s.u.). Das Appointment MUSS den Status 'proposed' enthalten.",
      "type": "Appointment"
    },
    {
      "name": "cancelled-appt-id",
      "use": "in",
      "min": 0,
      "max": "1",
      "documentation": "Für die vorliegende Spezifikation ist die Verschiebung eines Termin eins zwei-stufiger Prozess, bei dem ein Termin storniert und ein neuer Termin neu gebucht wird. Dieser Parameter repräsentiert die Ressourcen-Id des stornierten Appointments. Der uri-Parameter kann eine absoulte URL enthalten, Server SOLLEN jedoch nur Termine für ihre eigene Domäne verwalten. Im neu-angelegten Appointment MUSS eine Reference auf den abgesagten Termin hinterlegt werden (vgl. Appointment.extension:replaces). Der Status der abgesagten Ressource MUSS durch den Server angepasst werden.",
      "type": "uri"
    },
    {
      "name": "schedule",
      "use": "in",
      "min": 0,
      "max": "1",
      "type": "Reference",
      "documentation": "Im Falle dass ein Appointment keine Referenz auf ein oder mehrere Slots enthält, MUSS der Server die benötigten Slots auf Basis der Referenz auf Schedule, sowie dem Start- und Endzeitpunkt im Appointment ermitteln.",
      "targetProfile": [
        "https://gematik.de/fhir/isik/v2/Terminplanung/StructureDefinition/ISiKKalender"
      ]
    },
    {
      "name": "return",
      "use": "out",
      "min": 0,
      "max": "1",
      "documentation": "Als Return-Parameter MUSS ein Bundle vom Typ 'searchset' zurückgegeben werden, welches eine aktualisierte Appointment- oder eine OperationOutcome-Ressource enthält. Falls die Terminbuchung akzeptiert wird, MUSS das Appointment persistiert werden. Das id-Element der Ressource MUSS korrekt gefüllt werden. Der Status der Appointment-Ressource MUSS auf 'booked' geändert werden. Der Server MUSS die verwendeten Slot-Ressourcen als Referenz im Appointment angeben.",
      "type": "Bundle"
    }
  ]
}