> ## 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.

# Prüf-Links

> Erstellen Sie einmalig verwendbare, ablaufende Links, über die ein Apotheker eine Apothekenbestellung prüfen und deren Rezept annehmen oder ablehnen kann

# Prüf-Links

Mit Prüf-Links können Sie eine einzelne Apothekenbestellung mit einem Apotheker teilen, der **keinen** Portal-Login besitzt. Sie erstellen einen Link über eine Apothekenbestellung und senden die resultierende URL an den Apotheker. Wenn er sie öffnet, sieht er den Shop, dessen Icon und die Items der Bestellung und kann das signierte Rezept-PDF entweder **annehmen und herunterladen** oder die Bestellung **ablehnen**.

Jeder Link ist:

* **Einmalig verwendbar** -- sobald der Apotheker annimmt oder ablehnt, wird der Link verbraucht und kann nicht erneut geöffnet werden.
* **Ablaufend** -- Links laufen nach einer konfigurierbaren Anzahl von Tagen ab (standardmäßig 7).
* **Widerrufbar** -- Sie können einen unbenutzten Link jederzeit widerrufen.

<Note>
  Der Klartext-Token (und die daraus gebaute, versandfertige `url`) wird **nur einmal** zurückgegeben, in der Antwort auf den Erstellungsaufruf. Er wird gehasht gespeichert und kann nicht erneut abgerufen werden. Wenn Sie ihn verlieren, widerrufen Sie den Link und erstellen einen neuen.
</Note>

## Prüf-Link erstellen

Erstellen Sie einen einmalig verwendbaren Prüf-Link über eine Apothekenbestellung.

```bash theme={null}
POST /v1/management/review-links
```

**Erforderliche Berechtigung:** `review_link:write`

### Anfragekörper

```json theme={null}
{
  "pharmacy_order_uid": "po-abc123",
  "expires_in_days": 7,
  "note": "Please review before end of day"
}
```

| Feld                 | Typ     | Erforderlich | Beschreibung                                                                                        |
| -------------------- | ------- | ------------ | --------------------------------------------------------------------------------------------------- |
| `pharmacy_order_uid` | string  | Ja           | UID der Apothekenbestellung, über die der Link erstellt wird                                        |
| `expires_in_days`    | integer | Nein         | Tage bis zum Ablauf des Links. Muss zwischen `1` und `90` liegen. Standardwert `7`                  |
| `note`               | string  | Nein         | Freitext-Notiz, die am Link gespeichert wird (max. 255 Zeichen). Wird dem Apotheker nicht angezeigt |

### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/review-links" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "pharmacy_order_uid": "po-abc123",
    "expires_in_days": 7,
    "note": "Please review before end of day"
  }'
```

### Antwort (201 Created)

```json theme={null}
{
  "uid": "rl-def456",
  "token": "kQ8mZ3nR7wF1sT9vB2xY6pJ4hL0aD5cG8eN...",
  "url": "https://api.rxscale.com/v1/pharmacy-api-v1/review/kQ8mZ3nR7wF1sT9vB2xY6pJ4hL0aD5cG8eN...",
  "expires_at": 1735689600
}
```

### Antwortfelder

| Feld         | Typ     | Beschreibung                                                                                  |
| ------------ | ------- | --------------------------------------------------------------------------------------------- |
| `uid`        | string  | Eindeutiger Bezeichner für den Prüf-Link. Verwenden Sie ihn, um den Link später zu widerrufen |
| `token`      | string  | Der Klartext-Link-Token. **Wird nur einmal zurückgegeben**                                    |
| `url`        | string  | Die versandfertige URL, die ein Apotheker öffnet. **Wird nur einmal zurückgegeben**           |
| `expires_at` | integer | Unix-Zeitstempel (Sekunden), zu dem der Link abläuft                                          |

<Warning>
  Speichern Sie `token` und `url` aus dieser Antwort sofort. Sie können nicht erneut abgerufen werden -- beim Auflisten von Links wird der Token niemals zurückgegeben.
</Warning>

### Fehlerantworten

| Statuscode | Beschreibung                                                                                  |
| ---------- | --------------------------------------------------------------------------------------------- |
| `400`      | Die Apothekenbestellung hat kein herunterladbares Rezept, oder der Anfragekörper ist ungültig |
| `401`      | Fehlender oder ungültiger API-Key                                                             |
| `403`      | Fehlende Berechtigung `review_link:write`                                                     |
| `404`      | Apothekenbestellung für diese Organisation nicht gefunden                                     |

## Prüf-Links auflisten

Listen Sie die Prüf-Links Ihrer Organisation auf, optional gefiltert auf eine einzelne Apothekenbestellung. Die Antwort enthält **widerrufene** Links und deren abgeleiteten Status, aber **niemals** den Token.

```bash theme={null}
GET /v1/management/review-links
```

**Erforderliche Berechtigung:** `review_link:read`

### Abfrageparameter

<ParamField query="pharmacy_order_uid" type="string">
  Beschränkt die Ergebnisse auf eine einzelne Apothekenbestellung. Wird er weggelassen, werden alle Prüf-Links der Organisation zurückgegeben.
</ParamField>

### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/review-links?pharmacy_order_uid=po-abc123" \
  -H "X-API-Key: your-api-key-here"
```

### Antwort (200 OK)

```json theme={null}
{
  "data": [
    {
      "uid": "rl-def456",
      "pharmacy_order_uid": "po-abc123",
      "status": "consumed",
      "expires_at": 1735689600,
      "consumed_at": 1735600000,
      "decision": "accept",
      "note": "Please review before end of day",
      "created_at": 1735084800,
      "visit_count": 2
    },
    {
      "uid": "rl-ghi789",
      "pharmacy_order_uid": "po-abc123",
      "status": "active",
      "expires_at": 1736294400,
      "consumed_at": null,
      "decision": null,
      "note": null,
      "created_at": 1735689600,
      "visit_count": 0
    }
  ]
}
```

### Antwortfelder

Jedes Objekt im Array `data` besitzt die folgenden Felder:

| Feld                 | Typ             | Beschreibung                                                                                   |
| -------------------- | --------------- | ---------------------------------------------------------------------------------------------- |
| `uid`                | string          | Eindeutiger Bezeichner für den Prüf-Link                                                       |
| `pharmacy_order_uid` | string          | UID der Apothekenbestellung, über die der Link erstellt wurde                                  |
| `status`             | string          | Aktueller Status: `active`, `consumed`, `expired` oder `revoked`                               |
| `expires_at`         | integer         | Unix-Zeitstempel (Sekunden), zu dem der Link abläuft                                           |
| `consumed_at`        | integer \| null | Unix-Zeitstempel (Sekunden), zu dem der Link verwendet wurde, oder `null`, wenn noch unbenutzt |
| `decision`           | string \| null  | Die Entscheidung des Apothekers: `accept`, `decline` oder `null`, wenn noch nicht verwendet    |
| `note`               | string \| null  | Die am Link gespeicherte Notiz oder `null`                                                     |
| `created_at`         | integer         | Unix-Zeitstempel (Sekunden), zu dem der Link erstellt wurde                                    |
| `visit_count`        | integer         | Anzahl der Aufrufe der Link-Seite                                                              |

Das Feld `status` wird abgeleitet und nimmt die folgenden Werte an:

| Status     | Bedeutung                                                                                             |
| ---------- | ----------------------------------------------------------------------------------------------------- |
| `active`   | Der Link wurde nicht verwendet und ist weder abgelaufen noch widerrufen. Er kann noch geöffnet werden |
| `consumed` | Der Apotheker hat angenommen oder abgelehnt. Der Link kann nicht mehr geöffnet werden                 |
| `expired`  | Der Link hat seinen Zeitpunkt `expires_at` überschritten, ohne verwendet zu werden                    |
| `revoked`  | Der Link wurde über die API widerrufen, bevor er verwendet wurde                                      |

### Fehlerantworten

| Statuscode | Beschreibung                             |
| ---------- | ---------------------------------------- |
| `401`      | Fehlender oder ungültiger API-Key        |
| `403`      | Fehlende Berechtigung `review_link:read` |

## Prüf-Link widerrufen

Widerrufen Sie einen aktiven Prüf-Link, damit er nicht mehr geöffnet werden kann. Nur Links, die noch `active` sind, können widerrufen werden -- das Widerrufen eines bereits verwendeten, abgelaufenen oder widerrufenen Links gibt `404` zurück.

```bash theme={null}
DELETE /v1/management/review-links/{uid}
```

<ParamField path="uid" type="string" required>
  Die UID des zu widerrufenden Prüf-Links
</ParamField>

**Erforderliche Berechtigung:** `review_link:write`

### Beispielanfrage

```bash theme={null}
curl -X DELETE "https://api.rxscale.com/v1/management/review-links/rl-def456" \
  -H "X-API-Key: your-api-key-here"
```

### Antwort

Gibt bei Erfolg `204 No Content` mit leerem Körper zurück.

### Fehlerantworten

| Statuscode | Beschreibung                                                                   |
| ---------- | ------------------------------------------------------------------------------ |
| `401`      | Fehlender oder ungültiger API-Key                                              |
| `403`      | Fehlende Berechtigung `review_link:write`                                      |
| `404`      | Prüf-Link für diese Organisation nicht gefunden oder nicht im Zustand `active` |

## Die Ansicht des Apothekers

Wenn ein Apotheker den Link öffnet, muss er sich nicht anmelden. Die Seite führt ihn durch einen kurzen, geführten Ablauf:

<Steps>
  <Step title="Link öffnen">
    Der Apotheker öffnet die von Ihnen geteilte URL. Die Seite zeigt den Namen des Shops, dessen Icon und die Liste der Items in der Bestellung -- genug, um zu erkennen, was geprüft werden muss.
  </Step>

  <Step title="Ergebnis wählen">
    Der Apotheker wählt eine von zwei Aktionen:

    * **Annehmen & herunterladen** -- lädt das signierte Rezept-PDF herunter und markiert die Bestellung als angenommen.
    * **Ablehnen** -- markiert die Bestellung als abgelehnt, ohne etwas herunterzuladen.
  </Step>

  <Step title="Link wird geschlossen">
    Sobald eine Entscheidung getroffen wurde, wird der Link verbraucht. Ein erneutes Öffnen zeigt eine Seite „nicht mehr gültig".
  </Step>
</Steps>

<Note>
  Auf der Prüf-Seite selbst werden keine patientenidentifizierenden Informationen angezeigt. Das vollständige Rezept -- einschließlich der Patientendaten -- befindet sich nur im heruntergeladenen PDF, das ausschließlich über die Aktion **Annehmen & herunterladen** verfügbar ist.
</Note>

Wenn der Apotheker einen Link öffnet, der bereits verwendet wurde, abgelaufen ist oder widerrufen wurde, sieht er statt der Bestelldetails eine Seite, die erklärt, dass der Link nicht mehr gültig ist oder bereits verwendet wurde.

Sie können über den Endpoint [Prüf-Links auflisten](#pr%C3%BCf-links-auflisten) nachverfolgen, wie ein Link verwendet wurde: Die Felder `status`, `decision`, `consumed_at` und `visit_count` zeigen Ihnen, ob ein Apotheker den Link geöffnet und wie er sich entschieden hat.
