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

# Fragebogen-Integration

> RxScale-Fragebögen in Ihren Onlineshop einbetten und Einreichungen verarbeiten

# Fragebogen-Integration

RxScale bietet einbettbare medizinische Fragebögen, die Patienteninformationen für ärztliche Konsultationen erfassen. Diese Fragebögen können über das RxScale Admin Tool erstellt und angepasst werden.

## Installation

Auf der Detailseite des Fragebogens im Admin Tool finden Sie ein Installationsskript. Fragebogen-Releases sind versioniert, sodass Sie neue Versionen sicher testen können.

Fügen Sie Folgendes zu Ihrer Seite hinzu:

```html theme={null}
<!-- Placeholder for the questionnaire -->
<div id="rxscale_questionnaire"></div>

<!-- Assign your questionnaire UID -->
<script>
  window.rxscale_questionnaire_uid = "YOUR_QUESTIONNAIRE_UID";
</script>

<!-- Main JS for rendering -->
<script defer src="https://snippets.rxscale.com/v2.7/index.js"></script>

<!-- Default styling -->
<link href="https://snippets.rxscale.com/v2.7/index.css" rel="stylesheet" />

<!-- Optional: Custom styling -->
<link href="https://customizations.rxscale.com/YOUR_QUESTIONNAIRE_UID/css/customization.css" rel="stylesheet" />
```

<Note>
  Ersetzen Sie `YOUR_QUESTIONNAIRE_UID` durch die UID von der Detailseite Ihres Fragebogens im Admin Tool.
</Note>

RxScale rendert den Fragebogen automatisch und reagiert auf den konfigurierten Typ:

* **Product Recommender** — Zeigt einen Empfehlungsablauf basierend auf den Antworten des Patienten an
* **Direct To Cart** — Leitet den Benutzer nach Abschluss zum Warenkorb weiter (sofern nicht anders konfiguriert)

## Event Hooks

RxScale unterstützt optionale JavaScript-Hooks, die bei bestimmten Ereignissen ausgelöst werden. Diese Hooks sind unabhängig und modular.

### Window Event Handler

Nach einer erfolgreichen Fragebogen-Einreichung ruft RxScale einen Callback namens `rxscaleQuestionnaireCompleted` auf:

```javascript theme={null}
window.rxscaleQuestionnaireCompleted = ({ submissionId }) => {
  // Custom logic, e.g., redirect or analytics
};
```

### DataLayer (Google Tag Manager)

RxScale überträgt strukturierte Events in das `dataLayer`-Objekt für die Google Tag Manager-Integration. Events werden bei Seitenübergängen und nach Abschluss des Fragebogens ausgelöst.

Verfügbare Variablen:

* `nextStep` — Kennung des nächsten Schritts
* `previousStep` — Kennung des vorherigen Schritts
* `stepName` — Name des aktuellen Schritts
* `questionnaireVersion` — Fragebogen-Version
* `questionnaireName` — Fragebogen-Name
* `questionnaireId` — Fragebogen-UID

### Klaviyo-Integration

<Note>
  Das Klaviyo-Snippet muss auf Ihrer Webseite installiert sein, damit diese Integration funktioniert.
</Note>

Wenn ein Benutzer einen Fragebogen beantwortet, können seine Antwortdaten ein Klaviyo-Profil identifizieren oder ein Event über das vorhandene Klaviyo-SDK auf Ihrer Seite auslösen.

### Helium-Integration

<Note>
  Das Helium-Snippet muss auf Ihrer Webseite installiert sein, damit diese Integration funktioniert.
</Note>

Benutzerantworten können ein Helium-Konto identifizieren oder erstellen und Funktionen wie das Vorausfüllen von Anmeldefeldern basierend auf zuvor eingereichten Antworten ermöglichen.

## Einreichungen mit Bestellungen verknüpfen

Um eine Fragebogen-Einreichung mit einer Shopify-Bestellung zu verknüpfen, fügen Sie identifizierende Metadaten in die Bestellung ein. Die erforderlichen Informationen können auf Bestellebene, auf einer Bestellposition oder — bei Bundles — auf der Shopify-Line-Item-Gruppe dieser Position gespeichert werden.

### Erforderliche Eigenschaften

| Eigenschaft                       | Erforderlich für   | Beschreibung                                 |
| --------------------------------- | ------------------ | -------------------------------------------- |
| `_anamnesis_uid`                  | RxScale-Fragebögen | Verknüpft die Einreichung mit der Bestellung |
| `_external_submission_identifier` | Externe Anbieter   | Ihre externe Einreichungs-ID                 |
| `_external_provider_uid`          | Externe Anbieter   | Ihre externe Anbieter-UID                    |

<Warning>
  Die Eigenschaftsnamen müssen **exakt** übereinstimmen. RxScale vergleicht sie Zeichen für Zeichen und unterscheidet zwischen Groß- und Kleinschreibung. `_anamnesis_uid` (und jeder andere Schlüssel oben) muss daher genau wie angegeben geschrieben werden — keine Tippfehler, keine abweichende Groß-/Kleinschreibung, keine führenden oder nachfolgenden Leerzeichen und kein fehlender oder zusätzlicher Unterstrich. Stimmt ein Name nicht exakt überein, ignoriert RxScale ihn stillschweigend und die Einreichung wird **nicht** mit der Bestellung verknüpft.
</Warning>

<Warning>
  RxScale löst diese Eigenschaften mit einer dreistufigen Rückfalllogik auf: Zuerst zählt die **eigene Eigenschaft der Bestellposition**, sofern vorhanden. Fehlt sie dort, prüft RxScale die Eigenschaft auf der **Shopify-Line-Item-Gruppe** der Position — der Gruppierung, die Shopify für Bundles verwendet, bei der sich mehrere Bestellpositionen eine Gruppe teilen und eine Eigenschaft auf Gruppenebene für alle gilt. Ist auch dort nichts gesetzt, greift RxScale auf die **Eigenschaft auf Bestellebene** zurück.
</Warning>

### Beispiel: RxScale-Fragebogen

```javascript theme={null}
fetch('/cart/update.js', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    attributes: {
      _anamnesis_uid: "SUBMISSION_UID"
    }
  })
});
```

### Beispiel: Externer Fragebogen-Anbieter

```javascript theme={null}
fetch('/cart/update.js', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    attributes: {
      _external_submission_identifier: "YOUR_EXTERNAL_ID",
      _external_provider_uid: "YOUR_PROVIDER_UID"
    }
  })
});
```

<Tip>
  Das Speichern von `_anamnesis_uid` auf Bestellebene ermöglicht es Shopify, Bestellungen bei Bedarf zu duplizieren (z. B. über die Nachbestellfunktion).
</Tip>

## Apothekenauswahl

Um eine ausgewählte Apotheke mit einer Einreichung zu verknüpfen, senden Sie die Apothekeninformationen an die RxScale-API:

```javascript theme={null}
fetch(`https://api.rxscale.com/api/v3-1/anamnesis/${anamnesis_uid}/attributes/pharmacy`, {
  method: 'PUT',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    key: "pharmacy_email",
    value: pharmacyEmail,    // empty string if pharmacy uses API integration
    pharmacy_uid: pharmacyUid
  })
});
```

<Note>
  Wenn die ausgewählte Apotheke Daten über eine API-Integration erhält (keine E-Mail), übergeben Sie einen leeren String für das Feld `value`.
</Note>

## Patientenstatus-Prüfung

Prüfen Sie nach dem Shopify-Login, wann ein Patient zuletzt eine Anamnese unterzeichnet hat, anhand seiner Kunden-ID:

```javascript theme={null}
const response = await fetch(
  "https://api.rxscale.com/api/v0/patient/intent" +
  "?shop_customer_id=CUSTOMER_ID" +
  "&shop_identifier=YOUR_SHOP" +
  "&intent=INTENT_NAME"
);
const data = await response.json();
console.log(data.return_code);
```

<Note>
  Der Fragebogen muss im Admin Tool mit dem Intent getaggt sein, damit dies funktioniert.
</Note>

### Rückgabecodes

| Code  | Bedeutung                                                                               |
| ----- | --------------------------------------------------------------------------------------- |
| `100` | Keine vorherige Einreichung, oder letzte unterzeichnete Einreichung älter als 24 Monate |
| `200` | Letzte unterzeichnete Einreichung liegt zwischen 12 und 24 Monaten zurück               |
| `300` | Letzte unterzeichnete Einreichung liegt innerhalb der letzten 12 Monate                 |

Beispielantwort:

```json theme={null}
{
  "return_code": 300
}
```

## Akquise-Funnel-Auswertung

Das Admin-Tool stellt einen Fragebogen-**Akquise-Funnel** bereit — eingereicht → Bestellung aufgegeben → Bestellung abgeschlossen —, der misst, wie anonyme Fragebogeneinreichungen zu Bestellungen konvertieren. Eine Einreichung wird über die daraus entstandene Bestellposition mit einer Bestellung verknüpft.

<Warning>
  Fragebogeneinreichungen, die bereits einem Patienten zugeordnet sind, werden vom Funnel **ausgeschlossen**. Sie stellen bestehende Patienten und keine Neuakquise dar; ihre Einbeziehung würde die Konversionsraten verfälschen. Es werden nur anonyme Akquise-Einreichungen gezählt, und der Funnel wird auf Organisationsebene ausgewiesen (Akquise-Einreichungen sind erst nach Aufgabe einer Bestellung an einen einzelnen Shop gebunden).
</Warning>
