> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rxscale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Terminplanung

> Termine, Termintypen, Erinnerungen und Arztverfügbarkeiten über die Management-API verwalten

# Terminplanung

Verwalten Sie die Terminplanungs-Konfiguration Ihrer Organisation per API-Schlüssel
statt über die Admin-Oberfläche. Sie können geplante Termine auflisten und stornieren,
Termintypen und deren Erinnerungen verwalten sowie die wiederkehrenden
Verfügbarkeitsregeln jedes Arztes konfigurieren.

Alle Endpunkte sind auf die Organisation beschränkt, der der API-Schlüssel gehört.
UIDs, die zu einer anderen Organisation gehören, werden als nicht gefunden behandelt.

## Berechtigungen

Die Terminplanungs-Endpunkte werden durch zwei Berechtigungen gesteuert:

* `scheduling:read` — erforderlich für alle Lese-Endpunkte (`GET`).
* `scheduling:admin` — erforderlich für alle Schreib-Endpunkte (`POST`, `PATCH`, `DELETE`).

Ein Schlüssel mit `scheduling:admin` erhält nicht automatisch `scheduling:read`;
fügen Sie beide hinzu, wenn Sie lesen und schreiben müssen. Wenden Sie sich an Ihren
RxScale-Ansprechpartner, um Berechtigungen anzupassen.

Alle Anfragen authentifizieren sich über den Header `X-API-Key`. Details finden Sie
unter [Authentifizierung](/authentication).

## Termine

### Termine auflisten

```bash theme={null}
GET /v1/management/scheduling/appointments
```

Gibt eine paginierte Liste der geplanten Termine der Organisation zurück.

**Erforderliche Berechtigung:** `scheduling:read`

<ParamField query="page" type="integer" default="0">
  Seitenzahl (0-basiert)
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Anzahl der Termine pro Seite
</ParamField>

<ParamField query="doctor_uid" type="string">
  Termine nach Arzt-UID filtern
</ParamField>

<ParamField query="patient_uid" type="string">
  Termine nach Patienten-UID filtern
</ParamField>

<ParamField query="status" type="string">
  Nach Terminstatus filtern. Einer von `held`, `confirmed`, `cancelled`,
  `expired`, `completed`, `no_show` oder `all`. Wird der Wert weggelassen,
  gilt die serverseitige Standardfilterung.
</ParamField>

<ParamField query="from" type="integer">
  Termine ab diesem Unix-Zeitstempel (einschließlich) filtern
</ParamField>

<ParamField query="to" type="integer">
  Termine bis zu diesem Unix-Zeitstempel (einschließlich) filtern. Muss größer
  als `from` sein, wenn beide angegeben werden.
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/scheduling/appointments?page=0&limit=25&status=confirmed" \
  -H "X-API-Key: your-api-key-here"
```

#### Antwort

```json theme={null}
{
  "data": [
    {
      "uid": "mtg-abc123",
      "status": "confirmed",
      "doctor_uid": "doc-456",
      "doctor_display_name": "Dr. Schmidt",
      "patient_uid": "pat-789",
      "patient_display_name": "Jane Doe",
      "appointment_type_uid": "apt-001",
      "appointment_type_name": "Initial consultation",
      "visit_reason": "Medikationsreview vor Dosisanpassung",
      "meeting_type": "CONSULTATION",
      "meeting_format": "DIGITAL",
      "start_date": 1712300000,
      "end_date": 1712301800,
      "created_at": 1712200000,
      "cancelled_at": null,
      "cancellation_reason": null
    }
  ],
  "totalRegistries": 42,
  "totalPages": 2
}
```

#### Antwortfelder

| Feld                           | Typ             | Beschreibung                                                                                                                      |
| ------------------------------ | --------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `data[].uid`                   | string          | UID des geplanten Termins                                                                                                         |
| `data[].status`                | string          | Terminstatus (`held`, `confirmed`, `cancelled`, `expired`, `completed`, `no_show`)                                                |
| `data[].doctor_uid`            | string          | Arzt-UID                                                                                                                          |
| `data[].doctor_display_name`   | string          | Anzeigename des Arztes                                                                                                            |
| `data[].patient_uid`           | string          | Patienten-UID                                                                                                                     |
| `data[].patient_display_name`  | string          | Anzeigename des Patienten                                                                                                         |
| `data[].appointment_type_uid`  | string \| null  | UID des Termintyps, falls vorhanden                                                                                               |
| `data[].appointment_type_name` | string \| null  | Name des Termintyps, falls vorhanden                                                                                              |
| `data[].visit_reason`          | string \| null  | Optionaler bei der Buchung angegebener Termingrund. Kann auch in Erinnerungen und synchronisierten Kalendereinladungen erscheinen |
| `data[].meeting_type`          | string          | Terminart (z. B. `CONSULTATION`, `FOLLOW_UP`, `INITIAL`, `REVIEW`, `ON_DEMAND`)                                                   |
| `data[].meeting_format`        | string          | Terminformat (`DIGITAL`, `IN_PERSON`)                                                                                             |
| `data[].start_date`            | integer         | Startzeit (Unix-Zeitstempel)                                                                                                      |
| `data[].end_date`              | integer         | Endzeit (Unix-Zeitstempel)                                                                                                        |
| `data[].created_at`            | integer         | Erstellungszeitpunkt (Unix)                                                                                                       |
| `data[].cancelled_at`          | integer \| null | Stornierungszeitpunkt (Unix), falls storniert                                                                                     |
| `data[].cancellation_reason`   | string \| null  | Bei der Stornierung angegebener Grund, falls storniert                                                                            |
| `totalRegistries`              | integer         | Gesamtzahl der Termine, die dem Filter entsprechen                                                                                |
| `totalPages`                   | integer         | Gesamtzahl der Seiten                                                                                                             |

### Einen Termin stornieren

```bash theme={null}
POST /v1/management/scheduling/appointments/{meeting_uid}/cancel
```

Storniert einen geplanten Termin und erfasst den angegebenen Grund.

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="meeting_uid" type="string" required>
  Die UID des geplanten Termins
</ParamField>

<ParamField body="reason" type="string" required>
  Grund für die Stornierung des Termins (darf nicht leer sein)
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/scheduling/appointments/mtg-abc123/cancel" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Patient requested cancellation"
  }'
```

#### Antwort

```json theme={null}
{
  "appointment_uid": "mtg-abc123",
  "status": "cancelled",
  "cancelled_at": 1712250000,
  "cancellation_reason": "Patient requested cancellation"
}
```

## Termintypen

Ein Termintyp definiert eine buchbare Art von Termin (Dauer, Reservierungsverhalten,
Raum- und Umbuchungsstrategie).

### Termintypen auflisten

```bash theme={null}
GET /v1/management/scheduling/appointment-types
```

**Erforderliche Berechtigung:** `scheduling:read`

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/scheduling/appointment-types" \
  -H "X-API-Key: your-api-key-here"
```

#### Antwort

```json theme={null}
{
  "data": [
    {
      "uid": "apt-001",
      "organisation_uid": "org-123",
      "name": "Initial consultation",
      "meeting_type": "CONSULTATION",
      "duration_minutes": 30,
      "hold_ttl_seconds": 900,
      "booking_min_notice_minutes": 10,
      "cancellation_min_notice_minutes": 60,
      "rebooking_min_notice_minutes": 120,
      "room_strategy": "persistent_per_provider",
      "rebooking_mode": "same_doctor_only",
      "doctor_assignment_mode": "all_available_doctors",
      "allow_patient_rebooking": true,
      "active": true,
      "created_at": 1712100000,
      "updated_at": 1712100000
    }
  ]
}
```

### Einen Termintyp erstellen

```bash theme={null}
POST /v1/management/scheduling/appointment-types
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField body="name" type="string" required>
  Anzeigename (1–255 Zeichen)
</ParamField>

<ParamField body="meeting_type" type="string" required>
  Terminart. Einer von `CONSULTATION`, `FOLLOW_UP`, `INITIAL`, `REVIEW`,
  `ON_DEMAND`.
</ParamField>

<ParamField body="duration_minutes" type="integer" required>
  Termindauer in Minuten (1–1440)
</ParamField>

<ParamField body="hold_ttl_seconds" type="integer" required>
  Wie lange eine vorläufige Reservierung gilt, bevor sie abläuft, in Sekunden
  (1–86400)
</ParamField>

<ParamField body="booking_min_notice_minutes" type="integer" default="0">
  Standard-Mindestvorlauf, bevor Patienten diese Terminart buchen können, in
  Minuten. Arztspezifische Einstellungen können diesen Wert überschreiben.
</ParamField>

<ParamField body="cancellation_min_notice_minutes" type="integer" default="0">
  Mindestvorlaufzeit für eine Stornierung, in Minuten (≥ 0)
</ParamField>

<ParamField body="rebooking_min_notice_minutes" type="integer" default="0">
  Mindestvorlaufzeit für eine Umbuchung, in Minuten (≥ 0)
</ParamField>

<ParamField body="room_strategy" type="string" required>
  Strategie zur Raumzuweisung. Einer von `persistent_per_provider`,
  `per_appointment`.
</ParamField>

<ParamField body="rebooking_mode" type="string" required>
  Umbuchungsmodus. Einer von `same_doctor_only`,
  `any_doctor_same_organisation`.
</ParamField>

<ParamField body="doctor_assignment_mode" type="string" default="all_available_doctors">
  Steuert, welche Ärzte diese Terminart anbieten können. Nutzen Sie
  `all_available_doctors` für alle Ärzte mit Verfügbarkeit oder
  `selected_doctors_only`, wenn eine aktive arztspezifische Einstellung
  erforderlich sein soll.
</ParamField>

<ParamField body="allow_patient_rebooking" type="boolean" default="false">
  Ob Patienten ihre eigenen Termine dieses Typs umbuchen dürfen
</ParamField>

<ParamField body="active" type="boolean" default="true">
  Ob der Termintyp buchbar ist
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/scheduling/appointment-types" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Initial consultation",
    "meeting_type": "CONSULTATION",
    "duration_minutes": 30,
    "hold_ttl_seconds": 900,
    "booking_min_notice_minutes": 10,
    "cancellation_min_notice_minutes": 60,
    "rebooking_min_notice_minutes": 120,
    "room_strategy": "persistent_per_provider",
    "rebooking_mode": "same_doctor_only",
    "doctor_assignment_mode": "all_available_doctors",
    "allow_patient_rebooking": true,
    "active": true
  }'
```

Gibt `201 Created` mit dem erstellten Termintyp zurück (gleiche Struktur wie ein
Listeneintrag).

### Einen Termintyp aktualisieren

```bash theme={null}
PATCH /v1/management/scheduling/appointment-types/{appointment_type_uid}
```

Teilaktualisierung — nur die gesendeten Felder werden geändert. Alle Body-Felder
sind optional und akzeptieren dieselben Werte und Bereiche wie beim Erstellen.

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="appointment_type_uid" type="string" required>
  Die UID des Termintyps
</ParamField>

<ParamField body="name" type="string">
  Anzeigename (1–255 Zeichen)
</ParamField>

<ParamField body="meeting_type" type="string">
  Einer von `CONSULTATION`, `FOLLOW_UP`, `INITIAL`, `REVIEW`, `ON_DEMAND`
</ParamField>

<ParamField body="duration_minutes" type="integer">
  Termindauer in Minuten (1–1440)
</ParamField>

<ParamField body="hold_ttl_seconds" type="integer">
  Lebensdauer der Reservierung in Sekunden (1–86400)
</ParamField>

<ParamField body="booking_min_notice_minutes" type="integer">
  Standard-Mindestvorlauf für Buchungen in Minuten (≥ 0)
</ParamField>

<ParamField body="cancellation_min_notice_minutes" type="integer">
  Mindestvorlaufzeit für eine Stornierung in Minuten (≥ 0)
</ParamField>

<ParamField body="rebooking_min_notice_minutes" type="integer">
  Mindestvorlaufzeit für eine Umbuchung in Minuten (≥ 0)
</ParamField>

<ParamField body="room_strategy" type="string">
  Einer von `persistent_per_provider`, `per_appointment`
</ParamField>

<ParamField body="rebooking_mode" type="string">
  Einer von `same_doctor_only`, `any_doctor_same_organisation`
</ParamField>

<ParamField body="doctor_assignment_mode" type="string">
  Einer von `all_available_doctors`, `selected_doctors_only`
</ParamField>

<ParamField body="allow_patient_rebooking" type="boolean">
  Ob Patienten ihre eigenen Termine dieses Typs umbuchen dürfen
</ParamField>

<ParamField body="active" type="boolean">
  Ob der Termintyp buchbar ist
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X PATCH "https://api.rxscale.com/v1/management/scheduling/appointment-types/apt-001" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "duration_minutes": 45,
    "active": false
  }'
```

Gibt `200 OK` mit dem aktualisierten Termintyp zurück.

### Einen Termintyp löschen

```bash theme={null}
DELETE /v1/management/scheduling/appointment-types/{appointment_type_uid}
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="appointment_type_uid" type="string" required>
  Die UID des Termintyps
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X DELETE "https://api.rxscale.com/v1/management/scheduling/appointment-types/apt-001" \
  -H "X-API-Key: your-api-key-here"
```

Gibt bei Erfolg `204 No Content` zurück.

## Erinnerungen

Erinnerungen werden pro Termintyp konfiguriert und benachrichtigen eine
Empfängerrolle eine feste Anzahl von Minuten vor Beginn des Termins.

### Erinnerungen auflisten

```bash theme={null}
GET /v1/management/scheduling/appointment-types/{appointment_type_uid}/reminders
```

**Erforderliche Berechtigung:** `scheduling:read`

<ParamField path="appointment_type_uid" type="string" required>
  Die UID des Termintyps
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/scheduling/appointment-types/apt-001/reminders" \
  -H "X-API-Key: your-api-key-here"
```

#### Antwort

```json theme={null}
{
  "data": [
    {
      "uid": "rem-001",
      "appointment_type_uid": "apt-001",
      "recipient_role": "patient",
      "minutes_before": 1440,
      "send_email": true,
      "send_sms": false,
      "active": true
    }
  ]
}
```

#### Antwortfelder

| Feld                          | Typ     | Beschreibung                                           |
| ----------------------------- | ------- | ------------------------------------------------------ |
| `data[].uid`                  | string  | UID der Erinnerung                                     |
| `data[].appointment_type_uid` | string  | UID des übergeordneten Termintyps                      |
| `data[].recipient_role`       | string  | Wer benachrichtigt wird (`patient`, `doctor`, `admin`) |
| `data[].minutes_before`       | integer | Minuten vor dem Termin zum Senden                      |
| `data[].send_email`           | boolean | Ob eine E-Mail gesendet wird                           |
| `data[].send_sms`             | boolean | Ob eine SMS gesendet wird                              |
| `data[].active`               | boolean | Ob die Erinnerung aktiv ist                            |

### Eine Erinnerung erstellen

```bash theme={null}
POST /v1/management/scheduling/appointment-types/{appointment_type_uid}/reminders
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="appointment_type_uid" type="string" required>
  Die UID des Termintyps
</ParamField>

<ParamField body="recipient_role" type="string" required>
  Wer benachrichtigt wird. Einer von `patient`, `doctor`, `admin`.
</ParamField>

<ParamField body="minutes_before" type="integer" required>
  Minuten vor dem Termin zum Senden der Erinnerung (1–86400, also bis zu 60
  Tage)
</ParamField>

<ParamField body="send_email" type="boolean" default="false">
  Ob eine E-Mail gesendet wird
</ParamField>

<ParamField body="send_sms" type="boolean" default="false">
  Ob eine SMS gesendet wird
</ParamField>

<ParamField body="active" type="boolean" default="true">
  Ob die Erinnerung aktiv ist
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/scheduling/appointment-types/apt-001/reminders" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient_role": "patient",
    "minutes_before": 1440,
    "send_email": true,
    "send_sms": false,
    "active": true
  }'
```

Gibt `201 Created` mit der erstellten Erinnerung zurück (gleiche Struktur wie ein
Listeneintrag).

### Eine Erinnerung aktualisieren

```bash theme={null}
PATCH /v1/management/scheduling/appointment-types/{appointment_type_uid}/reminders/{reminder_uid}
```

Teilaktualisierung — nur die gesendeten Felder werden geändert.

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="appointment_type_uid" type="string" required>
  Die UID des Termintyps
</ParamField>

<ParamField path="reminder_uid" type="string" required>
  Die UID der Erinnerung
</ParamField>

<ParamField body="recipient_role" type="string">
  Einer von `patient`, `doctor`, `admin`
</ParamField>

<ParamField body="minutes_before" type="integer">
  Minuten vor dem Termin zum Senden der Erinnerung (1–86400)
</ParamField>

<ParamField body="send_email" type="boolean">
  Ob eine E-Mail gesendet wird
</ParamField>

<ParamField body="send_sms" type="boolean">
  Ob eine SMS gesendet wird
</ParamField>

<ParamField body="active" type="boolean">
  Ob die Erinnerung aktiv ist
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X PATCH "https://api.rxscale.com/v1/management/scheduling/appointment-types/apt-001/reminders/rem-001" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "minutes_before": 60,
    "send_sms": true
  }'
```

Gibt `200 OK` mit der aktualisierten Erinnerung zurück.

### Eine Erinnerung löschen

```bash theme={null}
DELETE /v1/management/scheduling/appointment-types/{appointment_type_uid}/reminders/{reminder_uid}
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="appointment_type_uid" type="string" required>
  Die UID des Termintyps
</ParamField>

<ParamField path="reminder_uid" type="string" required>
  Die UID der Erinnerung
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X DELETE "https://api.rxscale.com/v1/management/scheduling/appointment-types/apt-001/reminders/rem-001" \
  -H "X-API-Key: your-api-key-here"
```

Gibt bei Erfolg `204 No Content` zurück.

## Verfügbarkeitsregeln

Verfügbarkeitsregeln definieren die wiederkehrenden wöchentlichen Buchungsfenster
eines Arztes. Zeiten werden als Minuten ab Mitternacht angegeben (zum Beispiel
ist `540` 09:00 Uhr und `1020` 17:00 Uhr).

### Verfügbarkeitsregeln auflisten

```bash theme={null}
GET /v1/management/scheduling/doctors/{doctor_uid}/availability-rules
```

**Erforderliche Berechtigung:** `scheduling:read`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-rules" \
  -H "X-API-Key: your-api-key-here"
```

#### Antwort

```json theme={null}
{
  "data": [
    {
      "uid": "rule-001",
      "doctor_uid": "doc-456",
      "weekday": 0,
      "start_time": 540,
      "end_time": 1020,
      "buffer_minutes": 10,
      "valid_from": null,
      "valid_until": null,
      "active": true
    }
  ]
}
```

#### Antwortfelder

| Feld                    | Typ             | Beschreibung                                            |
| ----------------------- | --------------- | ------------------------------------------------------- |
| `data[].uid`            | string          | UID der Verfügbarkeitsregel                             |
| `data[].doctor_uid`     | string          | Arzt-UID                                                |
| `data[].weekday`        | integer         | Wochentag (0 = Montag … 6 = Sonntag)                    |
| `data[].start_time`     | integer         | Beginn des Fensters, in Minuten ab Mitternacht (0–1440) |
| `data[].end_time`       | integer         | Ende des Fensters, in Minuten ab Mitternacht (0–1440)   |
| `data[].buffer_minutes` | integer         | Puffer zwischen Terminen, in Minuten                    |
| `data[].valid_from`     | integer \| null | Optionaler Gültigkeitsbeginn (Unix-Zeitstempel)         |
| `data[].valid_until`    | integer \| null | Optionales Gültigkeitsende (Unix-Zeitstempel)           |
| `data[].active`         | boolean         | Ob die Regel aktiv ist                                  |

### Eine Verfügbarkeitsregel erstellen

```bash theme={null}
POST /v1/management/scheduling/doctors/{doctor_uid}/availability-rules
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField body="weekday" type="integer" required>
  Wochentag (0 = Montag … 6 = Sonntag)
</ParamField>

<ParamField body="start_time" type="integer" required>
  Beginn des Fensters, in Minuten ab Mitternacht (0–1440)
</ParamField>

<ParamField body="end_time" type="integer" required>
  Ende des Fensters, in Minuten ab Mitternacht (0–1440)
</ParamField>

<ParamField body="buffer_minutes" type="integer" default="0">
  Puffer zwischen Terminen, in Minuten (≥ 0)
</ParamField>

<ParamField body="valid_from" type="integer">
  Optionaler Gültigkeitsbeginn (Unix-Zeitstempel)
</ParamField>

<ParamField body="valid_until" type="integer">
  Optionales Gültigkeitsende (Unix-Zeitstempel)
</ParamField>

<ParamField body="active" type="boolean" default="true">
  Ob die Regel aktiv ist
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-rules" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "weekday": 0,
    "start_time": 540,
    "end_time": 1020,
    "buffer_minutes": 10,
    "active": true
  }'
```

Gibt `201 Created` mit der erstellten Verfügbarkeitsregel zurück (gleiche Struktur
wie ein Listeneintrag).

### Eine Verfügbarkeitsregel aktualisieren

```bash theme={null}
PATCH /v1/management/scheduling/doctors/{doctor_uid}/availability-rules/{rule_uid}
```

Teilaktualisierung — nur die gesendeten Felder werden geändert. Um eine
vorhandene Gültigkeitsgrenze zu entfernen, senden Sie das entsprechende
`clear_*`-Flag anstelle eines Werts.

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField path="rule_uid" type="string" required>
  Die UID der Verfügbarkeitsregel
</ParamField>

<ParamField body="weekday" type="integer">
  Wochentag (0 = Montag … 6 = Sonntag)
</ParamField>

<ParamField body="start_time" type="integer">
  Beginn des Fensters, in Minuten ab Mitternacht (0–1440)
</ParamField>

<ParamField body="end_time" type="integer">
  Ende des Fensters, in Minuten ab Mitternacht (0–1440)
</ParamField>

<ParamField body="buffer_minutes" type="integer">
  Puffer zwischen Terminen, in Minuten (≥ 0)
</ParamField>

<ParamField body="valid_from" type="integer">
  Gültigkeitsbeginn setzen (Unix-Zeitstempel)
</ParamField>

<ParamField body="valid_until" type="integer">
  Gültigkeitsende setzen (Unix-Zeitstempel)
</ParamField>

<ParamField body="active" type="boolean">
  Ob die Regel aktiv ist
</ParamField>

<ParamField body="clear_valid_from" type="boolean" default="false">
  Vorhandene `valid_from`-Grenze entfernen (auf null setzen)
</ParamField>

<ParamField body="clear_valid_until" type="boolean" default="false">
  Vorhandene `valid_until`-Grenze entfernen (auf null setzen)
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X PATCH "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-rules/rule-001" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "end_time": 960,
    "clear_valid_until": true
  }'
```

Gibt `200 OK` mit der aktualisierten Verfügbarkeitsregel zurück.

### Eine Verfügbarkeitsregel löschen

```bash theme={null}
DELETE /v1/management/scheduling/doctors/{doctor_uid}/availability-rules/{rule_uid}
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField path="rule_uid" type="string" required>
  Die UID der Verfügbarkeitsregel
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X DELETE "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-rules/rule-001" \
  -H "X-API-Key: your-api-key-here"
```

Gibt bei Erfolg `204 No Content` zurück.

## Verfügbarkeits-Datumsausnahmen

Datumsausnahmen legen die Verfügbarkeit eines Arztes für ein **bestimmtes
Kalenderdatum** fest und ersetzen an diesem Datum seine wiederkehrenden
Wochenregeln. Jede Ausnahme ist entweder ein **Zeitfenster** (individuelle Zeiten
an diesem Tag) oder ein **freier Tag** (keine buchbaren Slots an diesem Tag). An
jedem Datum mit mindestens einer Ausnahme werden die wiederkehrenden Regeln des
Arztes unterdrückt und es gelten nur die Ausnahmen.

* `date` ist der **UTC-Mitternachts-Unix-Zeitstempel** des Kalenderdatums — ein
  Vielfaches von `86400` (zum Beispiel ist `1749427200` der 09.06.2025 00:00:00
  UTC).
* `start_time` / `end_time` sind Minuten ab Mitternacht (zum Beispiel ist `480`
  08:00 Uhr und `720` 12:00 Uhr). Für einen freien Tag sind beide `null`.

### Datumsausnahmen auflisten

```bash theme={null}
GET /v1/management/scheduling/doctors/{doctor_uid}/availability-date-overrides
```

**Erforderliche Berechtigung:** `scheduling:read`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField query="from" type="integer">
  Nur Ausnahmen an oder nach diesem UTC-Mitternachts-Zeitstempel zurückgeben
</ParamField>

<ParamField query="to" type="integer">
  Nur Ausnahmen an oder vor diesem UTC-Mitternachts-Zeitstempel zurückgeben
</ParamField>

<ParamField query="page" type="integer" default="0">
  Nullbasierte Seitennummer
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Seitengröße (maximal 200)
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-date-overrides?from=1749427200&limit=50" \
  -H "X-API-Key: your-api-key-here"
```

#### Antwort

Die Liste ist paginiert, und eine einzelne Anfrage darf **höchstens \~6 Monate**
umfassen. Lassen Sie `from` und `to` weg für „ab heute“; geben Sie einen Wert an,
um das Fenster zu verankern, oder beide für einen Bereich — eine Spanne von mehr
als \~6 Monaten wird am `to`-Ende gekürzt. `totalRegistries` ist die Anzahl der zum
(gekürzten) Fenster passenden Ausnahmen und `totalPages` ist
`ceil(totalRegistries / limit)`.

```json theme={null}
{
  "data": [
    {
      "uid": "ovr-001",
      "doctor_uid": "doc-456",
      "date": 1749427200,
      "start_time": 480,
      "end_time": 720,
      "buffer_minutes": 0
    },
    {
      "uid": "ovr-002",
      "doctor_uid": "doc-456",
      "date": 1749513600,
      "start_time": null,
      "end_time": null,
      "buffer_minutes": 0
    }
  ],
  "totalRegistries": 2,
  "totalPages": 1
}
```

#### Antwortfelder

| Feld                    | Typ             | Beschreibung                                                                   |
| ----------------------- | --------------- | ------------------------------------------------------------------------------ |
| `data[].uid`            | string          | UID der Datumsausnahme                                                         |
| `data[].doctor_uid`     | string          | Arzt-UID                                                                       |
| `data[].date`           | integer         | UTC-Mitternachts-Zeitstempel des Kalenderdatums (ein Vielfaches von 86400)     |
| `data[].start_time`     | integer \| null | Beginn des Fensters, in Minuten ab Mitternacht (0–1440); `null` bei freiem Tag |
| `data[].end_time`       | integer \| null | Ende des Fensters, in Minuten ab Mitternacht (0–1440); `null` bei freiem Tag   |
| `data[].buffer_minutes` | integer         | Puffer zwischen Terminen, in Minuten                                           |

### Eine Datumsausnahme erstellen

```bash theme={null}
POST /v1/management/scheduling/doctors/{doctor_uid}/availability-date-overrides
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField body="date" type="integer" required>
  UTC-Mitternachts-Zeitstempel des Kalenderdatums (ein Vielfaches von 86400)
</ParamField>

<ParamField body="day_off" type="boolean" default="false">
  Wenn true, ist das Datum vollständig nicht verfügbar — `start_time`/`end_time` weglassen
</ParamField>

<ParamField body="start_time" type="integer">
  Beginn des Fensters, in Minuten ab Mitternacht (0–1440). Erforderlich, sofern `day_off` nicht true ist
</ParamField>

<ParamField body="end_time" type="integer">
  Ende des Fensters, in Minuten ab Mitternacht (0–1440). Erforderlich, sofern `day_off` nicht true ist
</ParamField>

<ParamField body="buffer_minutes" type="integer" default="0">
  Puffer zwischen Terminen, in Minuten (≥ 0)
</ParamField>

#### Beispielanfrage — individuelle Zeiten

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-date-overrides" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "date": 1749427200,
    "start_time": 480,
    "end_time": 720
  }'
```

#### Beispielanfrage — freier Tag

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-date-overrides" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "date": 1749513600,
    "day_off": true
  }'
```

Gibt `201 Created` mit der erstellten Datumsausnahme zurück (gleiche Struktur wie
ein Listeneintrag). Das Hinzufügen eines freien Tags entfernt vorhandene Fenster
an diesem Datum, und das Hinzufügen eines Fensters entfernt eine vorhandene
Freier-Tag-Markierung.

### Eine Datumsausnahme aktualisieren

```bash theme={null}
PATCH /v1/management/scheduling/doctors/{doctor_uid}/availability-date-overrides/{override_uid}
```

Teilaktualisierung — nur die gesendeten Felder werden geändert. Senden Sie
`day_off: true`, um das Datum in einen freien Tag umzuwandeln (das Fenster wird
entfernt).

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField path="override_uid" type="string" required>
  Die UID der Datumsausnahme
</ParamField>

<ParamField body="date" type="integer">
  UTC-Mitternachts-Zeitstempel des Kalenderdatums (ein Vielfaches von 86400)
</ParamField>

<ParamField body="day_off" type="boolean" default="false">
  Wenn true, das Fenster entfernen und als freien Tag markieren
</ParamField>

<ParamField body="start_time" type="integer">
  Beginn des Fensters, in Minuten ab Mitternacht (0–1440)
</ParamField>

<ParamField body="end_time" type="integer">
  Ende des Fensters, in Minuten ab Mitternacht (0–1440)
</ParamField>

<ParamField body="buffer_minutes" type="integer">
  Puffer zwischen Terminen, in Minuten (≥ 0)
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X PATCH "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-date-overrides/ovr-001" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "start_time": 540,
    "end_time": 660
  }'
```

Gibt `200 OK` mit der aktualisierten Datumsausnahme zurück.

### Eine Datumsausnahme löschen

```bash theme={null}
DELETE /v1/management/scheduling/doctors/{doctor_uid}/availability-date-overrides/{override_uid}
```

**Erforderliche Berechtigung:** `scheduling:admin`

<ParamField path="doctor_uid" type="string" required>
  Die Arzt-UID
</ParamField>

<ParamField path="override_uid" type="string" required>
  Die UID der Datumsausnahme
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X DELETE "https://api.rxscale.com/v1/management/scheduling/doctors/doc-456/availability-date-overrides/ovr-001" \
  -H "X-API-Key: your-api-key-here"
```

Gibt bei Erfolg `204 No Content` zurück. Für das Datum gilt dann wieder die
wiederkehrende Verfügbarkeit des Arztes.
