{
  "resourceType": "StructureDefinition",
  "id": "ISiKTerminblock",
  "url": "https://gematik.de/fhir/isik/StructureDefinition/ISiKTerminblock",
  "version": "6.0.0-rc",
  "name": "ISiKTerminblock",
  "status": "active",
  "experimental": false,
  "date": "2026-04-02",
  "publisher": "gematik GmbH",
  "description": "Die Slot-Ressource repräsentiert die Verbindung eines Termins (Appointment) und den dazugehörigen Ressourcen (z.B. HealthcareService, Device, Practitioner). Für diese Ressourcen können separate Kalender (Schedules) verwaltet werden. Der Slot agiert als Verbindungsstück zwischen diesen Ressourcen.",
  "fhirVersion": "4.0.1",
  "kind": "resource",
  "abstract": false,
  "type": "Slot",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Slot",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Slot",
        "path": "Slot",
        "constraint": [
          {
            "key": "ISiK-slot-1",
            "severity": "error",
            "human": "Der Endzeitpunkt eines Terminsblocks MUSS nach dem Startzeitpunkt liegen",
            "expression": "start <= end",
            "source": "https://gematik.de/fhir/isik/StructureDefinition/ISiKTerminblock"
          }
        ]
      },
      {
        "id": "Slot.id",
        "path": "Slot.id",
        "short": "serverseitige, interne ID des Datensatzes",
        "comment": "**bedingtes Pflichtfeld/bedingtes MS:** Alle von einem Server bereitgestellten Ressourcen MÜSSEN über eine `id` verfügen.\n  Von Clients erzeugte Ressourcen, die im Kontext einer CREATE-Interaktion übermittelt werden, MÜSSEN NICHT über eine `id`verfügen. ",
        "mustSupport": true
      },
      {
        "id": "Slot.meta.versionId",
        "path": "Slot.meta.versionId",
        "short": "Eindeutiger Name der serverseitigen Version des Datensatzes",
        "comment": "Alle von einem Server bereitgestellten Ressourcen SOLLEN über eine `versionID` verfügen.\n  Von Clients erzeugte Ressourcen, die im Kontext einer CREATE-Interaktion übermittelt werden, MÜSSEN NICHT über eine `versionID`verfügen. "
      },
      {
        "id": "Slot.meta.lastUpdated",
        "path": "Slot.meta.lastUpdated",
        "short": "Zeitpunkt der letzten Änderung",
        "comment": "Alle von einem Server bereitgestellten Ressourcen SOLLEN über ein `lastUpdate` verfügen.\n  Von Clients erzeugte Ressourcen, die im Kontext einer CREATE-Interaktion übermittelt werden, MÜSSEN NICHT über ein `lastUpdate`verfügen. "
      },
      {
        "id": "Slot.implicitRules",
        "path": "Slot.implicitRules",
        "short": "Verweis auf die Regeln, nach denen die Ressource erstellt wurde",
        "comment": "Begründung Constraint: In ISiK existiert kein Use-Case für dieses Element. Da es sich um ein Modifying Element handelt, wird es daher ausgeschlossen.\n  Darüber hinaus werden die Regeln als URI vorgehalten. Dies führt dazu, dass sich hinter der URI eine beliebige Menge an Regeln befinden kann; wodurch  nicht sichergestellt werden kann, dass alle Clients die Regeln korrekt interpretieren können.",
        "max": "0"
      },
      {
        "id": "Slot.schedule",
        "path": "Slot.schedule",
        "short": "Der Kalender dem dieser Terminblock zugeordnet ist",
        "comment": "Begründung Kardinalität und MS: Die Kardinalität der reference-Eigenschaft wird auf 1..* festgelegt, um sicherzustellen, dass ein Kalender eindeutig referenziert und identifiziert werden kann.",
        "mustSupport": true
      },
      {
        "id": "Slot.schedule.reference",
        "path": "Slot.schedule.reference",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Slot.status",
        "path": "Slot.status",
        "short": "Der Status des Terminblocks",
        "comment": "Begründung Must Support: Dies ist wichtig, um die Verfügbarkeit von Terminen zu gewährleisten, eine Überbuchung zu verhindern und zudem einem Termin-Requestor die Möglichkeit zu bieten nur freie Termine bei der Terminbuchung anzuzeigen.",
        "mustSupport": true
      },
      {
        "id": "Slot.start",
        "path": "Slot.start",
        "short": "Der Startzeitpunkt des Terminblocks",
        "comment": "Begründung Must Support: Dies ist wichtig, um den Zeitpunkt des Termins an einen Termin-Requestor / Termin-Consumer zu kommunizieren.",
        "mustSupport": true
      },
      {
        "id": "Slot.end",
        "path": "Slot.end",
        "short": "Der Endzeitpunkt des Terminblocks",
        "comment": "Begründung Must Support: Dies ist wichtig, um die Länge des Termins an einen Termin-Requestor / Termin-Consumer zu kommunizieren.",
        "mustSupport": true
      }
    ]
  }
}