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

# TAC- (display of payment and shipping methods)

> Build a separate information page on payment methods and shipping costs: loop over all configured methods, output cost scales and list the permitted billing and delivery countries.

Every shop needs a page on which payment methods and shipping costs are fully explained once. Legally it is mandatory, and in practice buyers look there before they order. This page should show all details, regardless of what is currently in the basket and where the delivery is going.

This is exactly what the `TAC-` tags do. The name stands for "terms and conditions". They read the payment and shipping methods directly from the shop configuration and output them without a single check against the current process. Two families share the work: `TAC-P-` for payment methods and `TAC-D-` for shipping methods.

Guide: Global display of payment and shipping methods

> [!NOTE]
>
> All tags on this page are permitted on all templates. A separate template that is included via a content page is common. Every tag except the two loop tags `TAC-P-Data` and `TAC-D-Data` requires the respective loop around it; outside it, it is an invalid tag.

> [!WARNING]
>
> These tags describe the **configuration**, not the selection in the current order process. For the payment methods a buyer can actually choose right now, there are the `PAY-` tags, and for the shipping methods the `DELIV-` tags. A payment method that appears here may still be excluded in the order process, for example because of the delivery country or the value of the goods.

* Reference: PAY- (payment methods)
* Reference: DELIV- (shipping methods)

## What is displayed at all

Neither loop iterates over all configured entries, only over those intended for list display. This is a separate switch for each payment or shipping method in the shop configuration.

> [!WARNING]
>
> If a payment method is missing on the finished page, this is almost always due to this switch and not the template. The previous documentation does not mention it and gives the impression that the loops iterate over all configured entries.

> [!NOTE]
>
> The order of the payment methods follows the position assigned in the shop configuration, not the order of the entries in the file. The shipping methods, on the other hand, appear in the order of their entries.

> [!WARNING]
>
> Assign each position only once. If two payment methods have the same position, the loop shows only the first of them; the second silently drops out of the list. The same applies to a payment method without a position. The previous documentation does not state this.

## The payment methods

### The loop

`TAC-P-Data` can do all three: output the number as a single tag, check as a bracketing whether there are any entries at all, and loop over them.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!TAC-P-Data}
   <p>Es sind derzeit keine Informationen über die Zahlungsarten verfügbar.</p>
{/!TAC-P-Data}

{TAC-P-Data}
   {@TAC-P-Data}
      ...
   {/@TAC-P-Data}
{/TAC-P-Data}
```

### The details per payment method

| Tag | Returns |
| - | - |
| `TAC-P-Name` | the name of the payment method |
| `TAC-P-Code` | the technical index of the payment method |
| `TAC-P-Img` | the path to the graphic |
| `TAC-P-Dependencies` | the body text on other conditions |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@TAC-P-Data}
   {TAC-P-Img}<img src="~TAC-P-Img~" alt="">{/TAC-P-Img}
   <h2>~TAC-P-Name~</h2>
   {TAC-P-Dependencies}<p>~TAC-P-Dependencies~</p>{/TAC-P-Dependencies}
{/@TAC-P-Data}
```

> [!NOTE]
>
> `TAC-P-Img` returns a complete path, because the shop system prepends the directory of the navigation graphics. Bracket the output anyway, because not every payment method has a graphic stored, and an `img` element with an empty `src` reloads the page itself.

> [!WARNING]
>
> `TAC-P-Code` is the internal index of the payment method, not its position in the list. The numbers therefore do not run in display order. For sequential numbering, count in the template yourself.

### The cost scale

The costs of a payment method depend on the value of the goods and are stored as a scale. `TAC-P-CostData` loops over it.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAC-P-CostData}
   <h3>Kosten dieser Zahlungsart</h3>
   {@TAC-P-CostData}
      <p>
         ab ~TAC-P-CostData_amount(2)~ ~WS-CurrencySymbol~ Warenwert:
         {TAC-P-CostData_percentageValue}~TAC-P-CostData_value~ %{/TAC-P-CostData_percentageValue}
         {!TAC-P-CostData_percentageValue}~TAC-P-CostData_value~ ~WS-CurrencySymbol~{/!TAC-P-CostData_percentageValue}
      </p>
   {/@TAC-P-CostData}
{/TAC-P-CostData}
```

| Tag | Returns |
| - | - |
| `TAC-P-CostData` | the loop over the scale; as a single tag, its length |
| `TAC-P-CostData_amount()` | the value of goods from which this level applies |
| `TAC-P-CostData_value` | the amount or percentage of this level |
| `TAC-P-CostData_percentageValue` | bracketing: the value is a percentage |

> [!WARNING]
>
> Depending on the configuration, `TAC-P-CostData_value` returns an amount or a percentage, without a unit. Only `TAC-P-CostData_percentageValue` tells you which of the two it is. Therefore, always write the currency symbol and the percent sign via the two bracketings and never hard-code them in the template.

> [!NOTE]
>
> `TAC-P-CostData_amount()` takes up to two parameters, namely the number of decimal places and the decimal separator. Without parameters, the tag outputs the value unformatted. For amounts, `(2)` is the usual setting.

> [!NOTE]
>
> If a payment method has no costs stored, `TAC-P-CostData` does not apply as a bracketing. The negative bracketing is therefore suitable for a notice that this payment method is free of charge.

### The country lists

For each payment method, you can define which countries may be delivered to and for which countries the invoice may be issued. Both work the same way and consist of two steps: first, a bracketing tells you what kind of list it is, and within it a loop iterates over the countries.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAC-P-BillCountryData}
   <h3>Rechnungsländer</h3>

   {TAC-P-BillCountries_completeAllow}
      <h4>Nur für diese Länder:</h4>
      {@TAC-P-BillCountryData}
         ~TAC-P-BillCountryData_Name~<br>
      {/@TAC-P-BillCountryData}
   {/TAC-P-BillCountries_completeAllow}

   {TAC-P-BillCountries_completeDeny}
      <h4>Für alle Länder außer:</h4>
      {@TAC-P-BillCountryData}
         ~TAC-P-BillCountryData_Name~<br>
      {/@TAC-P-BillCountryData}
   {/TAC-P-BillCountries_completeDeny}
{/TAC-P-BillCountryData}
```

| Tag | Returns |
| - | - |
| `TAC-P-BillCountries_completeAllow` | bracketing: list of permitted billing countries |
| `TAC-P-BillCountries_completeDeny` | bracketing: list of excluded billing countries |
| `TAC-P-BillCountryData` | the loop over the prepared country list |
| `TAC-P-BillCountryData_Code` | the ISO country code |
| `TAC-P-BillCountryData_Name` | the name of the country |

For the delivery countries, there are the same five tags with `DeliveryCountries` or `DeliveryCountryData` in the name.

> [!NOTE]
>
> The two `complete` bracketings exist in the shop system but are not described in the previous documentation. The supplied sample templates use them nevertheless, and rightly so, because they answer the question a buyer asks.

> [!WARNING]
>
> The difference from the documented `_allow` and `_deny` is significant. `TAC-P-BillCountries_allow` only applies if the configuration is **written as an allowlist**, and then shows exactly this list. If it is written as a denylist, it does not apply at all. The `complete` version, by contrast, builds the inverse list from the country file in this case and thus answers the actual question. For a customer-facing page, use the `complete` version; the plain `_allow` and `_deny` are better suited for checking the configuration.

> [!NOTE]
>
> Which countries are in the inverse list comes from the shop's country files. For billing countries, this is the general country list; for delivery countries, the list of countries that can be delivered to. The two can differ.

> [!WARNING]
>
> The order matters. The bracketing builds the country list, and only then can the associated loop iterate over it. Therefore, always place the loop within the bracketing. Conversely: within a running country loop, the bracketings return nothing; they cannot be nested there.

> [!NOTE]
>
> As a single tag, the two `CountryData` tags output the entire list as a comma-separated sequence of ISO codes. This is not described in the previous documentation and is suitable for passing to your own scripts.

> [!NOTE]
>
> If no country restriction at all is stored for a payment method, all bracketings remain silent. The outer bracketing `TAC-P-BillCountryData` is therefore suitable as a frame around the entire country block, as in the example above.

## The shipping methods

The shipping methods work just like the payment methods. Three things are added: a second cost scale by weight, an additional country field and three checks for special order types.

### The loop and the details

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!TAC-D-Data}
   <p>Es sind derzeit keine Informationen über die Versandarten verfügbar.</p>
{/!TAC-D-Data}

{TAC-D-Data}
   {@TAC-D-Data}
      {TAC-D-Img}<img src="~TAC-D-Img~" alt="">{/TAC-D-Img}
      <h2>~TAC-D-Name~</h2>
      {TAC-D-Dependencies}<p>~TAC-D-Dependencies~</p>{/TAC-D-Dependencies}
   {/@TAC-D-Data}
{/TAC-D-Data}
```

| Tag | Returns |
| - | - |
| `TAC-D-Name` | the name of the shipping method |
| `TAC-D-ID` | the identifier of the shipping method |
| `TAC-D-Img` | the path to the graphic |
| `TAC-D-Dependencies` | the body text on other conditions |
| `TAC-D-Country` | the country field of the shipping method |

> [!WARNING]
>
> `TAC-D-Img` outputs the stored value unchanged, unlike `TAC-P-Img`, to which the shop system prepends the directory of the navigation graphics. Therefore, store the complete path for a shipping method, otherwise the browser will not find the graphic. The previous documentation describes both tags identically as "graphic for the shipping method (path)".

> [!NOTE]
>
> `TAC-D-Country` exists in the shop system but is not described in the previous documentation. It outputs the country field of the shipping method, that is, an additional value from the configuration, and should not be confused with the country list below.

### The two cost scales

Shipping costs can depend on the value of the goods, on the weight, or on both. There are two separate loops for this.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAC-D-BasicCostData}
   <h3>Versandkosten nach Warenwert</h3>
   {@TAC-D-BasicCostData}
      <p>
         ab ~TAC-D-BasicCostData_amount(2)~ ~WS-CurrencySymbol~:
         {TAC-D-BasicCostData_percentageValue}~TAC-D-BasicCostData_value~ %{/TAC-D-BasicCostData_percentageValue}
         {!TAC-D-BasicCostData_percentageValue}~TAC-D-BasicCostData_value~ ~WS-CurrencySymbol~{/!TAC-D-BasicCostData_percentageValue}
      </p>
   {/@TAC-D-BasicCostData}
{/TAC-D-BasicCostData}

{TAC-D-WeightCostData}
   <h3>Versandkosten nach Gewicht</h3>
   {@TAC-D-WeightCostData}
      <p>ab ~TAC-D-WeightCostData_amount(1)~ kg: ~TAC-D-WeightCostData_value~ ~WS-CurrencySymbol~</p>
   {/@TAC-D-WeightCostData}
{/TAC-D-WeightCostData}

{!TAC-D-BasicCostData}
   {!TAC-D-WeightCostData}
      <h3>Versandkostenfrei</h3>
   {/!TAC-D-WeightCostData}
{/!TAC-D-BasicCostData}
```

| Tag | Returns |
| - | - |
| `TAC-D-BasicCostData` | the loop over the scale by value of goods |
| `TAC-D-BasicCostData_amount()` | the value of goods from which this level applies |
| `TAC-D-BasicCostData_value` | the amount or the percentage |
| `TAC-D-BasicCostData_percentageValue` | bracketing: the value is a percentage |
| `TAC-D-WeightCostData` | the loop over the scale by weight |
| `TAC-D-WeightCostData_amount()` | the weight from which this level applies |
| `TAC-D-WeightCostData_value` | the amount |

> [!WARNING]
>
> The weight scale has no percentage. `TAC-D-WeightCostData_value` is always an amount and already comes in the shop's number format. There is no counterpart to `_percentageValue` here.

> [!NOTE]
>
> Both `_amount` tags take the number of decimal places and the decimal separator as parameters. For weights, `(1)` is usually appropriate; for amounts, `(2)`.

> [!NOTE]
>
> The "free shipping" notice line in the example needs both negative bracketings nested inside each other, because a shipping method is only free of charge if neither a value-of-goods scale nor a weight scale is stored.

### The delivery countries

The delivery countries of a shipping method work exactly like the country lists of the payment methods, including the difference between `_allow` and `completeAllow`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAC-D-DeliveryCountryData}
   {TAC-D-DeliveryCountries_completeAllow}
      <h3>Lieferbar nach:</h3>
      {@TAC-D-DeliveryCountryData}~TAC-D-DeliveryCountryData_Name~<br>{/@TAC-D-DeliveryCountryData}
   {/TAC-D-DeliveryCountries_completeAllow}

   {TAC-D-DeliveryCountries_completeDeny}
      <h3>Lieferbar in alle Länder außer:</h3>
      {@TAC-D-DeliveryCountryData}~TAC-D-DeliveryCountryData_Name~<br>{/@TAC-D-DeliveryCountryData}
   {/TAC-D-DeliveryCountries_completeDeny}
{/TAC-D-DeliveryCountryData}
```

> [!NOTE]
>
> Here, too, `TAC-D-DeliveryCountries_completeAllow` and `_completeDeny` exist in the shop system and are not described in the previous documentation. Everything about the order and the inverse list applies unchanged; see above under payment methods.

### Special order types

Three bracketings tell you for which type of order a shipping method is intended. All three strictly require a parameter.

| Tag | Checks |
| - | - |
| `TAC-D-PrimeState()` | the PrimeShopping setting |
| `TAC-D-SubSequentOrderState()` | the setting for subsequent orders |
| `TAC-D-SubscriptionOrderState()` | the setting for subscription orders |

| Parameter for | Values |
| - | - |
| `TAC-D-PrimeState()` | `use-for-all`, `only-for-prime`, `not-for-prime` |
| `TAC-D-SubSequentOrderState()` | `use-for-all`, `only-for-subsequentorder`, `not-for-subsequentorder` |
| `TAC-D-SubscriptionOrderState()` | `use-for-all`, `only-for-subscriptionorder`, `not-for-subscriptionorder` |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@TAC-D-Data}
   {TAC-D-SubscriptionOrderState(only-for-subscriptionorder)}
      <p>Diese Versandart steht ausschließlich für Abo-Lieferungen zur Verfügung.</p>
   {/TAC-D-SubscriptionOrderState(only-for-subscriptionorder)}
{/@TAC-D-Data}
```

> [!WARNING]
>
> All three tags are invalid without a parameter, and an unknown parameter also makes them invalid. They do not exist as single tags. The previous documentation mentions this condition only for `TAC-D-SubscriptionOrderState()`, but it applies equally to all three.

> [!NOTE]
>
> The three tags check for equality with exactly one setting. If you want to output something for all cases except one, use the negative bracketing, not a different parameter.

* Reference: PRIME- (PrimeShopping)
* Reference: SUBS- (taking out a subscription)

## Tags at a glance

### Payment methods

| Tag | Single tag | Area tag | Negative area tag | Loop tag | Applies in |
| - | - | - | - | - | - |
| `TAC-P-Data` | yes | yes | yes | yes | free |
| `TAC-P-Name` | yes | yes | yes | – | `TAC-P-Data` |
| `TAC-P-Code` | yes | yes | yes | – | `TAC-P-Data` |
| `TAC-P-Img` | yes | yes | yes | – | `TAC-P-Data` |
| `TAC-P-Dependencies` | yes | yes | yes | – | `TAC-P-Data` |
| `TAC-P-CostData` | yes | yes | yes | yes | `TAC-P-Data` |
| `TAC-P-CostData_amount()` | yes | yes | yes | – | `TAC-P-CostData` |
| `TAC-P-CostData_value` | yes | yes | yes | – | `TAC-P-CostData` |
| `TAC-P-CostData_percentageValue` | – | yes | yes | – | `TAC-P-CostData` |
| `TAC-P-BillCountries_allow` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-BillCountries_deny` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-BillCountries_completeAllow` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-BillCountries_completeDeny` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-BillCountryData` | yes | yes | yes | yes | `TAC-P-Data` |
| `TAC-P-BillCountryData_Code` | yes | yes | yes | – | `TAC-P-BillCountryData` |
| `TAC-P-BillCountryData_Name` | yes | yes | yes | – | `TAC-P-BillCountryData` |
| `TAC-P-DeliveryCountries_allow` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-DeliveryCountries_deny` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-DeliveryCountries_completeAllow` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-DeliveryCountries_completeDeny` | – | yes | yes | – | `TAC-P-Data` |
| `TAC-P-DeliveryCountryData` | yes | yes | yes | yes | `TAC-P-Data` |
| `TAC-P-DeliveryCountryData_Code` | yes | yes | yes | – | `TAC-P-DeliveryCountryData` |
| `TAC-P-DeliveryCountryData_Name` | yes | yes | yes | – | `TAC-P-DeliveryCountryData` |

### Shipping methods

| Tag | Single tag | Area tag | Negative area tag | Loop tag | Applies in |
| - | - | - | - | - | - |
| `TAC-D-Data` | yes | yes | yes | yes | free |
| `TAC-D-Name` | yes | yes | yes | – | `TAC-D-Data` |
| `TAC-D-ID` | yes | yes | yes | – | `TAC-D-Data` |
| `TAC-D-Img` | yes | yes | yes | – | `TAC-D-Data` |
| `TAC-D-Dependencies` | yes | yes | yes | – | `TAC-D-Data` |
| `TAC-D-Country` | yes | yes | yes | – | `TAC-D-Data` |
| `TAC-D-BasicCostData` | yes | yes | yes | yes | `TAC-D-Data` |
| `TAC-D-BasicCostData_amount()` | yes | yes | yes | – | `TAC-D-BasicCostData` |
| `TAC-D-BasicCostData_value` | yes | yes | yes | – | `TAC-D-BasicCostData` |
| `TAC-D-BasicCostData_percentageValue` | – | yes | yes | – | `TAC-D-BasicCostData` |
| `TAC-D-WeightCostData` | yes | yes | yes | yes | `TAC-D-Data` |
| `TAC-D-WeightCostData_amount()` | yes | yes | yes | – | `TAC-D-WeightCostData` |
| `TAC-D-WeightCostData_value` | yes | yes | yes | – | `TAC-D-WeightCostData` |
| `TAC-D-DeliveryCountries_allow` | – | yes | yes | – | `TAC-D-Data` |
| `TAC-D-DeliveryCountries_deny` | – | yes | yes | – | `TAC-D-Data` |
| `TAC-D-DeliveryCountries_completeAllow` | – | yes | yes | – | `TAC-D-Data` |
| `TAC-D-DeliveryCountries_completeDeny` | – | yes | yes | – | `TAC-D-Data` |
| `TAC-D-DeliveryCountryData` | yes | yes | yes | yes | `TAC-D-Data` |
| `TAC-D-DeliveryCountryData_Code` | yes | yes | yes | – | `TAC-D-DeliveryCountryData` |
| `TAC-D-DeliveryCountryData_Name` | yes | yes | yes | – | `TAC-D-DeliveryCountryData` |
| `TAC-D-PrimeState()` | – | yes | yes | – | `TAC-D-Data` |
| `TAC-D-SubSequentOrderState()` | – | yes | yes | – | `TAC-D-Data` |
| `TAC-D-SubscriptionOrderState()` | – | yes | yes | – | `TAC-D-Data` |

> [!NOTE]
>
> The "Applies in" column names the loop within which the tag must be placed. Outside it, it is an invalid tag. The two `CountryData` tags each belong in the loop of their own level, not in the data loop above it.

## Related topics

* Guide: Global display of payment and shipping methods
* Guide: Creating payment methods
* Guide: Creating shipping methods
* Reference: PAY- (payment methods)
* Reference: DELIV- (shipping methods)


## Related topics

- [Overview of payment and shipping methods](https://dokumentation.websale.de/en/v8s/informationsseiten/uebersicht-von-zahlungs-und-versandarten.md)
- [Validation and checking services](https://dokumentation.websale.de/en/konfiguration/validierungs-und-prufservices.md)
- [$wsCheckout - Checkout](https://dokumentation.websale.de/en/frontend/referenz/module/wscheckout.md)
- [Payment, shipping and order completion](https://dokumentation.websale.de/en/v8s/referenz/tags/ws/zahlung-versand-und-bestellabschluss.md)
- [Payment methods](https://dokumentation.websale.de/en/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/zahlungsarten.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.