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

# checkout - Bestellablauf

> Der Konfigurationsknoten checkout steuert den Bestellprozess der Storefront: Gast- und Schnellbestellung, Zusatzfelder, Rundung, Gutscheinlogik, Versandarten und -gruppen, Paketverfolgung sowie Fehleranzeige.

export const KonfigDeeplink = ({node}) => <>
    Die Einstellung kann über folgenden Link direkt im Admin-Interface geöffnet werden:{" "}
    <code>{`https://<shop-domain>/admin/config/${node}`}</code>{" "}
    (<a href="/konfiguration/konfigurations-deeplinks">Deeplink-Übersicht</a>)
  </>;

Der Abschnitt `checkout` umfasst alles, was den Bestellprozess in der Storefront steuert: von der einfachen Gast- oder Schnellbestellung über eigene Eingabefelder bis zur Rundung von Zwischensummen. Er ermöglicht zudem eine schnelle Artikelerfassung per Artikelnummer, prüft bei Bedarf Warenkorbinhalte gegen Regeln (z. B. Pflichtzubehör), verwaltet Versandarten inklusive Preislogik und bindet Paketverfolgung an.

## `checkout*` - Grundstruktur

Nachfolgend der Grundaufbau des Knotens `checkout`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "checkout": {
      "checkout": {...},
      "voucher": {...},
      "directOrder": {...},
      "productDependency": {...},
      "bankInfoField": {...},
      "shippingMethod": {...},
      "shippingMethodGroup": {...},
      "shipTrack": {...},
      "fieldErrorVisibility": {...}
    }
}
```

#### Parameterübersicht

| **Parameter**          | **Beschreibung**                                              |
| ---------------------- | ------------------------------------------------------------- |
| `checkout`             | Übergreifende Checkout-Einstellungen für den Bestellprozess.  |
| `voucher`              | Einstellungen für die Gutscheinverwendung im Bestellprozess.  |
| `directOrder`          | Konfiguration für Direktbestellungen.                         |
| `productDependency`    | Regeln für Produktabhängigkeiten im Checkout.                 |
| `bankInfoField`        | Steuerung von Bankdatenfeldern.                               |
| `shippingMethod`       | Einstellungen zu Versandarten.                                |
| `shippingMethodGroup`  | Gruppen, zu denen Versandarten zusammengefasst werden können. |
| `shipTrack`            | Optionen für die Sendungsverfolgung.                          |
| `fieldErrorVisibility` | Steuert, wann Feldfehler im Checkout angezeigt werden.        |

## `checkout.checkout` - Bestellablauf

Dieser Abschnitt bündelt die Einstellungen für den Checkout. Hier wird festgelegt, wie der Bestellprozess abläuft, welche Zusatzfelder angezeigt werden und wie beispielsweise Versandoptionen standardmäßig gewählt werden. Zudem lassen sich Regeln für Gutschein-Berechnungen, länderspezifische Versandfreiheit und optional für die Paketverfolgung definieren.

#### Beispielkonfiguration `checkout.checkout`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "allowFastOrder": true,
  "allowGuestAccounts": true,
  "allowGuestOrderWithRegisteredEmail": true,
  "allowShipTrack": false,
  "defaults": {
    "defaultBillCountry": null,
    "defaultShippingCountry": null,
    "defaultPaymentMethod": null,
    "defaultShippingMethod": null,
    "autoSelectSingleOption": true,
    "prevSelectionInvalidAutoSelect": "disabled"
  },
  "defaultFreeShippingMethod": null,
  "deliveryRequiredForOrder": true,
  "freeFields": [...],
  "freeShippingCountries": null,
  "subtotalRounding": {
    "active": true,
    "decimalPlaces": 2
  },
  "voucherAppliesPerItem": true,
  "minOrderValueCalculation": "max",
  "minOrderValueIgnoreVoucherReduction": true
}
```

#### Parameterübersicht

| **Parameter**                                                                                                   | **Typ**       | **Beschreibung**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `allowGuestAccounts`                                                                                            | bool          | Erlaubt Bestellungen ohne Kundenkonto (Gastbestellung).  <br />Default: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `allowGuestOrderWithRegisteredEmail`                                                                            | bool          | Legt fest, ob eine Gastbestellung mit einer bereits registrierten E-Mail-Adresse erlaubt ist.   <br />Default: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `subtotalRounding`                                                                                              | object        | Rundung der Zwischensumme vor weiteren Berechnungen (z.B. vor Versand / Gutscheinen).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `active`                                                                                                        | bool          | Aktiviert die Rundungslogik.  Default: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `decimalPlaces`                                                                                                 | uint          | Anzahl der Nachkommastellen für die Rundung.      <br />Default: `2`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `voucherAppliesPerItem`                                                                                         | bool          | Steuert, ob Gutscheine pro Position (statt auf den Gesamtwarenkorb) angewendet werden.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `minOrderValueCalculation`                                                                                      | enum          | Legt fest, wie der Mindestbestellwert berechnet wird, ab dem ein Gutschein angewendet werden kann.<br />Mögliche Werte:<br />`sum` - die Mindestbestellwerte aller verwendeten Gutscheine werden addiert. Hat z.B. Gutschein A einen Mindestbestellwert von 20€ und Gutschein B von 30€, muss der Warenkorb mindestens 50€ erreichen. <br />`max` - es gilt nur der höchste Mindestbestellwert aller verwendeter Gutscheine. Bei Gutschein A (20€) und Gutschein B (30€) reichen 30€ im Warenkorb aus.                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `minOrderValueIgnoreVoucherReduction`                                                                           | bool          | Bestimmt, welcher Warenwert für die Prüfung des Mindestbestellwertes herangezogen wird.<br />Mögliche Werte:<br />`true` - nur der reine Warenwert zählt.<br />`false` - der Warenwert abzüglich bereits angewandter Gutscheine wird verwendet.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `freeShippingCountries`<br />(**zukünftiges Feature,**<br />**noch nicht vollständig**<br />**implementiert!**) | multiAssoc    | Länder, in denen versandkostenfrei geliefert wird.  <br />Target: `general.country`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `allowFastOrder`                                                                                                | bool          | Erlaubt die Bestellung per Express-Checkout.  Default: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `defaultFreeShippingMethod`                                                                                     | singleAssoc   | Legt die Standard-Versandart fest, die für Berechnungen zu “kostenlosem Versand” verwendet wird (z.B. Anzeige “noch 45€ bis zum kostenlosen Versand”).  Target: `checkout.shippingMethod`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `deliveryRequiredForOrder`                                                                                      | bool          | Gibt vor, ob eine Versandart ausgewählt sein muss, damit die Bestellung abgeschlossen werden kann.  <br />`true` - Checkout nur mit gewählter Versandart möglich.   <br />`false` - Bestellung ohne Auswahl einer Versandart zulässig.  <br />Default: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `freeFields`                                                                                                    | list (object) | Konfigurierbare Zusatzfelder im Checkout (z.B. Hinweise, Kundennotizen). Jedes Objekt beschreibt ein Feld.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `id`                                                                                                            | string        | Eindeutige Kennung des Zusatzfeldes.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `name`                                                                                                          | string        | Anzeigename / Label im Checkout                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `required`                                                                                                      | string        | Markiert das Feld als Pflichtfeld.      <br />Default: `false`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `type`                                                                                                          | oneOf         | Feldtyp und Detailkonfiguration.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `text`                                                                                                          | object        | Textfeld-Konfiguration.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `checkbox`                                                                                                      | object        | Checkbox-Konfiguration.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `defaults`                                                                                                      | object        | Definiert Standardwerte für Felder im Checkout.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `defaultBillCountry`                                                                                            | singleAssoc   | Standardland für die Rechnungsadresse. Wird beim Anlegen einer neuen Adresse im Checkout vorausgefüllt - bei Nutzung der Draft-Adresse ([draftBillAddress](/frontend/referenz/aktionen/checkout)) sowie bei Gastbestellungen.      <br />Target: `general.country`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `defaultShippingCountry`                                                                                        | singleAssoc   | Standardland für die Lieferadresse. Wird beim Anlegen einer neuen Adresse im Checkout vorausgefüllt - bei Nutzung der Draft-Adresse ([draftShippingAddress](/frontend/referenz/aktionen/checkout)) sowie bei Gastbestellungen.     <br />Target: `general.country`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `defaultPaymentMethod`                                                                                          | singleAssoc   | Zahlungsart, die im Checkout standardmäßig vorausgewählt wird.  <br />Target: `payment.payment`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `defaultShippingMethod`                                                                                         | singleAssoc   | Liefermethode, die im Checkout standardmäßig vorausgewählt wird.  <br />Target: `checkout.shippingMethod`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `autoSelectSingleOption`                                                                                        | bool          | Wenn aktiviert, wird automatisch eine Versandmethode oder Zahlungsart ausgewählt, sofern nur eine gültige Option verfügbar ist.  <br />Default: `true`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `prevSelectionInvalidAutoSelect`                                                                                | enum          | Steuert, ob eine bereits gewählte Versand- oder Zahlungsart automatisch ersetzt wird, wenn sie durch eine Änderung des Bestellkontexts (z.B. Wechsel des Lieferlandes) ungültig wird. Gilt für Versand- und Zahlungsarten (keine getrennte Option je Art).<br />Mögliche Werte:<br />`disabled` - keine automatische Neuauswahl durch diese Option; die Auswahl wird als ungültig markiert und der Kunde wählt neu (`autoSelectSingleOption` greift weiterhin).<br />`ifSingleOption` - bleibt genau eine gültige Art übrig, wird diese automatisch gewählt (auch wenn `autoSelectSingleOption` deaktiviert ist); bleiben mehrere gültig, erfolgt keine automatische Auswahl.<br />`always` - es wird immer eine gültige Ersatz-Art gewählt: bevorzugt die konfigurierte Standard-Art (`defaultShippingMethod` bzw. `defaultPaymentMethod`), sofern gültig; andernfalls die einzige verbleibende gültige Art.<br />Default: `disabled` |

**Prioritätslogik für** `defaults`:

Wenn mehrere Quellen (z.B. Benutzerauswahl oder Kundenpräferenzen) einen Wert für ein Feld in `defaults` liefern, gilt folgende Rangfolge der Priorisierung:

1. Aktive Benutzerauswahl in der aktuellen Sitzung - wird niemals automatisch überschrieben.
2. Gespeicherte Kundenpräferenzen eines eingeloggten Kunden (sofern unterstützt).
3. Händler-Konfiguration - die hier definierten `defaults`-Werte.
4. System-Fallback - z.B. automatische Auswahl bei nur einer verfügbaren Option oder erste gültige Option nach Sortierung (siehe `autoSelectSingleOption`).

<Info>
  Neuauswahl, wenn eine gewählte Art nachträglich ungültig wird:

  Die Prioritätslogik oben gilt für die Erstauswahl. Wird dagegen eine bereits getroffene, aber inzwischen ungültige Auswahl behandelt - etwa weil der Kunde das Lieferland wechselt und die gewählte Versandart dort nicht angeboten wird -, steuert `prevSelectionInvalidAutoSelect`, wie der Shop reagiert (siehe Tabelle oben). `autoSelectSingleOption` bleibt dabei in allen Modi als Rückfallebene aktiv.
</Info>

<Info>
  Hinweis zum Rundungsverhalten bei positionsbasierter Gutschein-Berechnung:<br />Wenn „`voucherAppliesPerItem`” auf „`true`” gesetzt ist und ein prozentualer Gutschein mit einem konfigurierten Maximalbetrag verwendet wird, kann der gewährte Rabatt diesen Maximalbetrag um bis zu 0,01 € überschreiten. Grund dafür ist, dass der Rabatt pro Position einzeln gerundet wird und die Summe dieser Rundungen minimal vom erwarteten Gesamtbetrag abweichen kann.
</Info>

## `checkout.voucher` - Einstellungen für Gutscheine

In diesem Abschnitt werden die Einstellungen für die Verwendung von Gutscheinen im Bestellprozess gebündelt. Hier wird unter anderem festgelegt, wie viele Gutscheine ein Kunde gleichzeitig einlösen kann und wie Rabattbeträge bei prozentualen Gutscheinen rechnerisch gerundet werden.

#### Beispielkonfiguration `checkout.voucher` :

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "maxNumberVouchersPerOrder": 1,
  "roundPercentalVoucherInBasketItem": "single"
}
```

#### Parameterübersicht

| Parameter                           | Typ  | Beschreibung                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------------------- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `maxNumberVouchersPerOrder`         | uint | Maximale Anzahl an Gutscheinen, die pro Bestellung angewandt werden können.<br />Mögliche Werte: `1` - `20`<br />Default: `1`                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `roundPercentalVoucherInBasketItem` | enum | Legt fest, wie Rabattbeträge aus prozentualen Gutscheinen pro Artikel gerundet werden, wenn mehrere Gutscheine gleichzeitig aktiv sind.<br />Mögliche Werte:<br />`sum` - Der Rabatt jedes einzelnen Gutscheins wird pro Artikel zunächst ungerundet berechnet. Alle Rabattbeträge werden addiert und das Ergebnis erst am Ende gerundet.<br />`single` - Der Rabattbetrag jedes Gutscheins wird pro Artikel sofort einzeln gerundet. Weil jede Rundung einen kleinen Fehler einführen kann, weicht die Gesamtersparnis je nach Artikelpreis und Gutscheinhöhe um wenige Cent vom `sum`-Ergebnis ab. |

## `checkout.directOrder` - Onlinebestellschein

Ermöglicht eine schnelle Erfassung von Artikeln per Artikelnummer - beispielsweise für große oder wiederkehrende Bestellungen. Festgelegt wird, welche Spalten pro Zeile sichtbar sind (z.B. Artikelnummer, Menge). Auf Wunsch merkt sich das System die zuletzt verwendete Zeilenanzahl über `saveCountInSession`.

#### Beispielkonfiguration `checkout.directOrder`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "fields": [
    "content.productField.id",
    "content.productField.itemNumber"
  ],
  "initialNumber": 5,
  "itemNumberFields": [],
  "maximalNumber": 1000,
  "refreshedNumber": 1,
  "saveCountInSession": true
}
```

#### Parameterübersicht

| **Parameter**        | **Typ**       | **Beschreibung**                                                                                                                                                                                                                                                                                                                                              |
| -------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fields`             | multiAssoc    | Legt fest, in welchen Produktfeldern gesucht wird, um ein Produkt zu finden (z.B. `content.productField.id, content.productField.itemnumber).`<br />Beispiel: Wenn `id` oder `itemNumber` konfiguriert sind, kann der Nutzer entweder die Produkt-ID oder die Artikelnummer eingeben.    <br />Target: `[content.productField], [content.customProductField]` |
| `initialNumber`      | int           | Anzahl der Zeilen, die beim ersten Laden sichtbar sind.  <br />Default: **5**                                                                                                                                                                                                                                                                                 |
| `itemNumberFields`   | list (object) | Eingabefelder pro Zeile für die Artikelnummer-Erfassung - definiert Spalten / Felder und Beschriftungen (z.B. Reihenfolge, Label, Platzhalter).                                                                                                                                                                                                               |
| `maximalNumber`      | int           | Obergrenze der insgesamt zulässigen Eingabezeilen.      <br />Default: **1000**                                                                                                                                                                                                                                                                               |
| `refreshedNumber`    | int           | Anzahl der verfügbaren Zeilen, die bei Klick auf den Button “Zeilen hinzufügen” hinzugefügt werden.  <br />Default: **5**                                                                                                                                                                                                                                     |
| `saveCountInSession` | bool          | Speichert die aktuelle Zeilenanzahl in der Session, damit sie beim nächsten Aufruf wiederhergestellt wird.  <br />default: **true**                                                                                                                                                                                                                           |

## `checkout.productDependency` - Produktabhängigkeiten

Dieser Abschnitt legt fest, wann bestimmte Schritte oder Optionen im Checkout erlaubt sind. Er prüft dazu die Inhalte des Warenkorbs - etwa Eigenschaften wie Größe, Farbe oder ob ein Zusatzfeld ausgefüllt ist - und kann bei Nichterfüllung einen Hinweis anzeigen oder die Aktion sperren. Typische Einsatzfälle sind beispielsweise Pflichtzubehör oder das Verhindern verbotener Kombinationen im Checkout.

#### Beispielkonfiguration `checkout.productDependency`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "id": "",
  "disabledText": "",
  "dependencyGroups": [
    {
      "dependencies": [
        {
          "target": { "field": "content.productField:color" },
          "type": "value",
          "input": { "text": { "value": "camel" } },
          "basketBehavior": "matchOnce"
        },
        {
          "target": { "freeField": "engraving" },
          "type": "empty",
          "input": { "text": { "value": "" } },
          "basketBehavior": "matchOnce"
        }
      ]
    },
    {
      "dependencies": [
        {
          "target": { "field": "content.customProductField:size" },
          "type": "inlist",
          "input": { "list": { "value": ["S", "M", "L"] } },
          "basketBehavior": "matchOnce"
        }
      ]
    }
  ]
}
```

#### Auswertungslogik

Die Regelgruppen und Bedingungen werden nach einem festen Schema ausgewertet:

* **`dependencyGroups` sind ODER-verknüpft**: Es genügt, wenn **eine** der Gruppen vollständig erfüllt ist.
* **`dependencies` innerhalb einer Gruppe sind UND-verknüpft**: Innerhalb einer Gruppe müssen **alle** Bedingungen erfüllt sein.
* Ob eine einzelne Bedingung als erfüllt gilt, steuert zusätzlich `basketBehavior`: Bei `matchOnce` muss mindestens eine Warenkorb-Position die Bedingung erfüllen, bei `matchAll` alle Positionen, bei denen das geprüfte Feld einen Wert liefert.

Im Beispiel oben gilt die Abhängigkeit also als erfüllt, wenn entweder die erste Gruppe zutrifft (eine Position mit der Farbe `camel` **und** eine Position mit leerem Freifeld `engraving` im Warenkorb) **oder** die zweite Gruppe (eine Position mit Größe `S`, `M` oder `L`).

#### Parameterübersicht

| **Parameter**      | **Typ**       | **Beschreibung**                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`               | string        | Eindeutige Kennung der Produktabhängigkeit, die selbst gewählt werden kann. <br />Die `id` wird in den Validierungen `shippingMethodValidation.productDependency` (Versandarten) und `paymentValidation.productDependency` (Zahlungsarten) angegeben.      <br />Mehr dazu unter: [Validierungs- und Prüfservices](/konfiguration/validierungs-und-prufservices#4-shippingmethodvalidation-versandarten-validierung) |
| `disabledText`     | string        | Hinweis-/Fehlermeldung, die angezeigt wird, wenn Bedingungen nicht erfüllt sind. <br />Bei Versandarten wird der Text im Frontend über [`$wsCheckout.getShippingMethodDisabledErrors()`](/frontend/referenz/module/wscheckout#wscheckout-getshippingmethoddisablederrors) ausgegeben.                                                                                                                                |
| `dependencyGroups` | list (object) | Enthält eine oder mehrere Regelgruppen. Die Gruppen sind ODER-verknüpft (siehe Auswertungslogik oben).                                                                                                                                                                                                                                                                                                               |
| `dependencies`     | list (object) | Liste einzelner Bedingungen innerhalb einer Gruppe. Die Bedingungen sind UND-verknüpft. <br />Jede Bedingung legt fest, welches Feld geprüft wird, wie geprüft wird und welcher Vergleichswert ggf. nötig ist.                                                                                                                                                                                                       |
| `target`           | oneOf         | Definiert, welches Feld geprüft wird. (**Pflichtfeld**)                                                                                                                                                                                                                                                                                                                                                              |
| `field`            | singleAssoc   | Referenz auf ein Produktfeld, das geprüft wird.      <br />Target: `content.productField, content.customProductField`                                                                                                                                                                                                                                                                                                |
| `freeField`        | string        | Name eines freien Feldes (z.B. Freifeld am Produkt/Warenkorb), das geprüft wird. (Alternativ zu `field`)                                                                                                                                                                                                                                                                                                             |
| `type`             | enum          | **Pflichtfeld**   Vergleichsart der Bedingung. <br />Die möglichen Werte sind in der Tabelle „Prüfarten" unten beschrieben.                                                                                                                                                                                                                                                                                          |
| `input`            | oneOf         | Vergleichswert der Bedingung. (nur erforderlich, wenn der `type` einen Vergleichswert benötigt). <br />Z.b. nicht erforderlich bei `filled` / `empty.`                                                                                                                                                                                                                                                               |
| `text`             | object        | Textbasierter Vergleichswert.                                                                                                                                                                                                                                                                                                                                                                                        |
| `value`            | string        | Wert für textbasierte Vergleiche. (z. B. bei `value`, `prefix`, `matchsimplewildcard`)                                                                                                                                                                                                                                                                                                                               |
| `list`             | object        | Werteliste für Listenvergleiche (z. B. bei `inlist`, `includedinlist`).                                                                                                                                                                                                                                                                                                                                              |
| `value`            | list (string) | Werteliste für den Vergleich.                                                                                                                                                                                                                                                                                                                                                                                        |
| `basketBehavior`   | enum          | Legt fest, wie viele Warenkorb-Positionen die Bedingung erfüllen müssen:  <br />`matchOnce` = mind. eine Position <br />`matchAll` = alle Positionen, bei denen das geprüfte Feld einen Wert liefert. <br />**Default:**`matchOnce`                                                                                                                                                                                  |

#### Prüfarten (`type`)

| **Wert**                 | **Beschreibung**                                                                                                                                                                                                                                                 |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `filled`                 | Das Feld ist gefüllt. Kein `input` erforderlich.                                                                                                                                                                                                                 |
| `empty`                  | Das Feld ist leer. Kein `input` erforderlich.                                                                                                                                                                                                                    |
| `value`                  | Der Wert des Feldes entspricht dem in `input` angegebenen Wert.                                                                                                                                                                                                  |
| `notvalue`               | Der Wert des Feldes entspricht nicht dem in `input` angegebenen Wert.                                                                                                                                                                                            |
| `inlist`                 | Der Wert des Feldes ist in der in `input` angegebenen Liste enthalten.                                                                                                                                                                                           |
| `notinlist`              | Der Wert des Feldes ist nicht in der in `input` angegebenen Liste enthalten.                                                                                                                                                                                     |
| `prefix`                 | Der Wert des Feldes beginnt mit dem in `input` angegebenen Präfix.                                                                                                                                                                                               |
| `notprefix`              | Der Wert des Feldes beginnt nicht mit dem in `input` angegebenen Präfix.                                                                                                                                                                                         |
| `greater`                | Der Wert des Feldes ist (numerisch) größer als der in `input` angegebene Wert.                                                                                                                                                                                   |
| `smaller`                | Der Wert des Feldes ist (numerisch) kleiner als der in `input` angegebene Wert.                                                                                                                                                                                  |
| `includedinlist`         | Der in `input` angegebene Wert ist in der Werte-Liste des Produktdatenfeldes enthalten (für Felder, die mehrere Werte enthalten).                                                                                                                                |
| `notincludedinlist`      | Der in `input` angegebene Wert ist nicht in der Werte-Liste des Produktdatenfeldes enthalten.                                                                                                                                                                    |
| `matchsimplewildcard`    | Der Wert des Feldes stimmt mit dem in `input` angegebenen Muster überein. Als Platzhalter stehen `?` (genau ein beliebiges Zeichen) und `*` (beliebig viele beliebige Zeichen) zur Verfügung; beide können mehrfach und an beliebiger Position verwendet werden. |
| `notmatchsimplewildcard` | Der Wert des Feldes stimmt nicht mit dem in `input` angegebenen Muster überein.                                                                                                                                                                                  |

## `checkout.shippingMethod` - Versandarten

Definiert verfügbare Versandarten und deren Verhalten im Checkout. Neben Aktivierung, Name und Bestellhinweisen lassen sich **Preisstaffeln nach Gewicht** (`weightCost`) und **nach Warenkorb-Zwischensumme** (`basicCost`) konfigurieren. Über **Validierungen** (`validations`) können Bedingungen wie **zulässige Länder**, **nur physische Produkte** oder weitere Regeln hinterlegt werden. Ergänzend sind **Beschreibung**, **Bild/Icon** und **externer Link** (z. B. Carrier-Info) möglich. Über das Feld `group` lässt sich eine Versandart zudem einer [Versandarten-Gruppe](#checkout-shippingmethodgroup-versandarten-gruppen) zuordnen. So entstehen klar benannte, regelkonforme Versandoptionen mit transparenter Preislogik und optionalen Einschränkungen.

#### Beispielkonfiguration `checkout.shippingMethod`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "active": true,
  "id": "checkout.shippingMethod.dhl_standard",
  "name": "DHL Standard",
  "orderText": "Versand mit DHL, Lieferzeit 2–3 Werktage.",
  "weightCost": [
    { "weight": 0.0,  "cost": 4.90 },
    { "weight": 5.0,  "cost": 6.90 },
    { "weight": 31.5, "cost": 12.90 }
  ],
  "basicCost": [
    { "subtotal": 0.0,  "cost": 4.90 },
    { "subtotal": 50.0, "cost": 0.0 }
  ],
  "validations": [
    {
      "service": "shippingMethodValidation.shippingCountry",
      "options": { "countries": ["DE", "AT"] }
    },
    {
      "service": "shippingMethodValidation.onlyPhysicalProducts",
      "options": { "enabled": true }
    }
  ],
  "link": "https://www.dhl.de/de/privatkunden/pakete-versenden.html",
  "description": "Zuverlässiger Standardversand innerhalb DE/AT.",
  "image": "https://cdn.example.com/shipping/dhl.png",
  "type": "standard",
  "group": "checkout.shippingMethodGroup.standard"
}
```

#### Parameterübersicht

| **Parameter**                                                                    | **Typ**      | **Beschreibung**                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| -------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `active`                                                                         | bool         | Aktiviert / deaktiviert die Versandart im Shop.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `id`                                                                             | string       | Eindeutige Kennung der Versandart.                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `name`                                                                           | string       | Anzeigename der Versandart.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `orderText`<br />(**zukünftiges Feature / befindet sich noch in Entwicklung**)   | text         | Bestell- / Hinweistexte zur Versandart.                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `validations`                                                                    | multiService | Liste von Prüf- / Freigaberegeln (z.B. Länder - / Produktbeschränkungen).                                                                                                                                                                                                                                                                                                                                                                                                  |
| `link`<br />(**zukünftiges Feature / befindet sich noch in Entwicklung**)        | text         | Externer Link mit Zusatzinfos.                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `description`<br />(**zukünftiges Feature / befindet sich noch in Entwicklung**) | string       | Kurze Beschreibung der Versandart.                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `image`<br />(**zukünftiges Feature / befindet sich noch in Entwicklung**)       | string       | Bild- / Icon-URL der Versandart.                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `weightCost`                                                                     | object       | Staffelpreise nach Gewicht.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `basicCost`                                                                      | object       | Staffelpreise nach Warenkorb-Zwischensumme.                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `taxable`                                                                        | bool         | Legt fest, ob auf die Versandkosten Steuern berechnet werden. Bei `false` wird der Versandkosten-Steuersatz in der Bestellung mit `0` ausgewiesen.                                                                                                                                                                                                                                                                                                                         |
| `type`                                                                           | enum         | `standard` oder `pickup`.<br />Bei `standard` handelt es sich um einen “normalen” Versand über einen Versender wie DHL, UPS etc.  `pickup` kennzeichnet, dass es sich um “Click and Collect” und somit um eine Abholung in einem Store, Markt oder einer Filiale handelt.  <br />Für die Auswahl im Bestellablauf wird die Aktion `CheckoutStoreIdSelect` verwendet. <br />Wurde kein Markt ausgewählt wird Standardmäßig der Markt aus der allgemeinen Auswahl verwendet. |
| `group`                                                                          | singleAssoc  | Ordnet die Versandart einer Versandarten-Gruppe zu.  <br />Target: `checkout.shippingMethodGroup`                                                                                                                                                                                                                                                                                                                                                                          |

## `checkout.shippingMethodGroup` - Versandarten-Gruppen

Definiert Gruppen, zu denen Versandarten zusammengefasst werden können (z. B. nach Anbieter oder Lieferart). Eine Versandart wird über ihr Feld `group` einer Gruppe zugeordnet. Je Gruppe lassen sich Name, Beschreibung, Bild und ein Link hinterlegen - etwa, um im Frontend mehrere Versandarten gebündelt und einheitlich darzustellen.

#### Beispielkonfiguration `checkout.shippingMethodGroup`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "id": "checkout.shippingMethodGroup.express",
  "name": "Express-Versand",
  "description": "Schnelle Lieferung innerhalb von 24 Stunden.",
  "image": "https://cdn.example.com/shipping/express.png",
  "link": "https://www.example.com/versand/express"
}
```

#### Parameterübersicht

| **Parameter** | **Typ** | **Beschreibung**                            |
| ------------- | ------- | ------------------------------------------- |
| `id`          | string  | Eindeutige Kennung der Versandarten-Gruppe. |
| `name`        | text    | Anzeigename der Gruppe.                     |
| `description` | text    | Beschreibung der Gruppe.                    |
| `image`       | string  | Bild- / Icon-URL der Gruppe.                |
| `link`        | string  | Externer Link mit Zusatzinfos zur Gruppe.   |

<Note>
  Im Template werden die Gruppen über `$wsConfig.shippingMethodGroups` gelesen. Die einer Versandart zugewiesene Gruppe steht dort im Feld `group` der Versandart.
</Note>

## `checkout.shipTrack` - Paketverfolgung

Konfiguriert die Anbindung an Versanddienstleister zur **Sendungsverfolgung**. Hinterlegt werden Provider-Kennung und **Zugangsdaten** (API-User/Token) sowie ein **Sprachcode** für Provider-Antworten und Labeling. Auf Basis dieser Daten lassen sich **Tracking-Links** und Statusinformationen im Checkout bzw. im Kundenkonto bereitstellen und automatisiert in Benachrichtigungen verwenden.

#### Beispielkonfiguration `checkout.shipTrack`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "id": "shiptrack.dhl",
  "provider": "DHL",
  "username": "api-user-123",
  "password": "s3cr3t-token",
  "languageCode": "de"
}
```

#### Parameterübersicht

| **Parameter**  | **Typ** | **Beschreibung**                                                                                                                                                                                           |
| -------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`           | string  | Eindeutige Kennung der Versand-Tracking-Konfiguration.                                                                                                                                                     |
| `provider`     | string  | Anbieter-Kennung. Derzeit wird ausschließlich `DHL` unterstützt - der Wert muss exakt so geschrieben werden (Groß-/Kleinschreibung beachten), sonst kann die Tracking-Integration nicht zugeordnet werden. |
| `username`     | string  | API-Benutzername / Zugang für den Provider.                                                                                                                                                                |
| `password`     | string  | API-Passwort / Token für den Provider.                                                                                                                                                                     |
| `languageCode` | string  | Sprachcode für Labels / Antworten des Providers (ISO, z.B. de, en). <br />Leer = bei `DHL` wird `de` verwendet.                                                                                            |

## `checkout.fieldErrorVisibility` - Fehleranzeige

Legt fest, wann Fehlermeldungen im Checkout angezeigt werden, z.B. ob ein Hinweis auf ein fehlendes Pflichtfeld sofort erscheint, auch ohne dass der Kunde das Feld berührt hat, oder erst, wenn der Kunde auf “Kaufen” klickt.

#### Beispielkonfiguration `checkout.fieldErrorVisibility`

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "showMissingBeforeSubmit": false,
  "showInvalidBeforeSubmit": true,
  "showIncompatibleBeforeSubmit": true
}
```

#### Parameterübersicht

| **Parameter**                  | **Typ** | **Beschreibung**                                                                                                                                                                                 |
| ------------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `showMissingBeforeSubmit`      | bool    | Wenn `true`, werden “Pflichtfeld fehlt”-Felder bereits angezeigt, bevor der Kunde auf “Kaufen” klickt. <br />Wenn `false`, erscheinen diese erst nach dem Klick auf “Kaufen”.                    |
| `showInvalidBeforeSubmit`      | bool    | Wenn `true`, werden Validierungsfehler (z.B. ungültige PLZ, fehlerhaftes Datumsformat) sofort nach der Eingabe angezeigt. <br />Wenn `false`, erscheinen diese erst nach dem Klick auf “Kaufen”. |
| `showIncompatibleBeforeSubmit` | bool    | Wenn `true`, werden Inkompatibilitätsfehler (z.B. Zahlart für dieses Land nicht verfügbar) sofort angezeigt. <br />Wenn `false`, erscheinen diese erst nach dem Klick auf “Kaufen”.              |

<Info>
  Nach dem Klick auf “Kaufen” werden standardmäßig alle Fehler angezeigt, unabhängig von dieser Einstellung.

  Im Checkout gibt es grundsätzlich zwei Arten von Fehlern:

  * Fehler, die das System selbst erkennt (z.B. “Pflichtfeld leer”, “ungültige PLZ”):<br />Diese werden über [\$wsCheckout.problems.\*](/frontend/referenz/module/wscheckout) bereitgestellt und lassen sich vollständig über die `show*BeforeSubmit`-Parameter steuern.
  * Fehler, die der Server zurückmeldet (z.B. nach dem Klick auf “Kaufen”):<br />Hier greifen die Einstellungen der `show*BeforeSubmit`-Parameter nur teilweise. Bei Kundendaten und [Draft-Adressen](/frontend/referenz/aktionen/checkout) steht `$wsCheckout.problems.*` nicht zur Verfügung, deshalb werden die Serverfehler dort stattdessen über die `show*BeforeSubmit`-Parameter gefiltert. In allen anderen Bereichen des Checkouts (z.B. bei der Zahlungsart) werden Serverfehler immer sofort angezeigt, unabhängig von der Konfiguration.
</Info>
