Skip to main content
The final amount of an order is built up in several layers. At the bottom is the question of whether prices are net or gross prices and which VAT rate applies to which product and which delivery country. Above that is the presentation, meaning decimal places, separators, and currency. At the top are the amounts that subtract or add something, from vouchers and bonus points to climate-neutral production. This page follows the same layers. First VAT, then currency and price formatting, then deductions and surcharges. Reference: Shop configuration shop.config, overview of all sections

VAT

Defines how VAT is handled. This is the central section for all tax matters in the shop.

Net or gross

A price type stored in the customer account overrides this setting for the logged-in buyer. This lets a shop be a net shop for business customers and a gross shop for private customers. This is not described in the previous documentation.

Texts in the order data

At least one of the three name texts must be filled in. If NameGross-Txt and NameNet-Txt are empty, Name-Txt must be filled in. Otherwise no VAT calculation at all takes place.

VAT index for costs

Products don’t carry a fixed tax rate but an index between 1 and 10. For everything that isn’t a product, this section defines which index applies and whether it’s fixed or derived from the basket. static means that the specified index is used. dynamic means that the VAT rate with the highest total in the basket determines the rate.
With dynamic, the associated index parameter must not contain a value.
Two peculiarities of the evaluation are not documented and are added here.If DefaultVATRate is missing entirely, the kernel uses the value from DeliveryVATRate as the default index. An empty DefaultVATRate, on the other hand, results in 1.An index above the maximum is silently set to the maximum, and the value 0 becomes 1. No error message appears.
Gift wrapping, bonus points, vouchers, subsidies, and climate-neutral production have their own VATType parameters in their respective sections.

Country-dependent tax liability

As a rule, these are all countries of the EU territory in each case.
If TaxCountries is missing or empty, no country-dependent tax collection takes place. VAT is then charged for all countries.If TaxIDCountries is missing or empty, no tax exemption via the VAT ID takes place.
The former parameter name Countries is still read as a fallback if TaxCountries is missing or empty.

Tax exemption via the delivery address

Normally, the VAT ID of the billing address determines the exemption. The following two parameters shift this to the delivery address. The value test only takes effect in the shop’s general test mode. In production, the VAT ID of the billing address is then used.

Source of the tax rates

Standard reads the tax rates from the VATRates sections of this shop.config. ByDelivCountry-Managed takes them from the global WEBSALE VAT rate file. ByDelivCountry-Individual takes them from a file of your own, which must then be specified in VATRateDefinition-ByDelivCountry-DefinitionFile.
VATRateDefinition-TestMode only takes effect if the shop is actually running in test mode. In this case, the file from VATRateDefinition-ByDelivCountry-TestDefinitionFile is also used instead of the production file.If VATRateDefinition-ByDelivCountry-ISOForVATDiscount is empty, the kernel uses the value from VATRateDefinition-ByDelivCountry-StandardISO. This is not documented and is added here.

Undocumented parameters

The kernel reads additional parameters in this section that are not described in the previous documentation.
These parameters affect the tax calculation. Only set them after consulting WEBSALE AG. The release status is still to be clarified.

VATRates

Assigns a specific rate to each VAT index. Products carry only the index, not the rate. If the statutory VAT changes, you only need to adjust this one section instead of every single product.
This method is deprecated but still supported. WEBSALE instead recommends the global WEBSALE VAT rate file or a custom file, both via VATRateDefinition-Mode in the VAT section.
The VATRates sections are only read if VATRateDefinition-Mode is set to Standard. In the other two modes they have no effect.
In addition to VATRates, you can use either country-dependent or date-dependent sections, never both and no combination of them. For a time-controlled changeover in specific countries, use campaign control.

Country-dependent tax rates

For each delivery country, you can create a separate section whose name ends with the 3-letter ISO code.
When the buyer selects a delivery country, the shop first looks for the matching country-dependent section. If it’s found, its values apply. If it isn’t found, the values from VATRates apply.
The VATRates section without a suffix is always required. Countries without different rates don’t need their own section.Which delivery country applies depends on the order path. In the normal ordering process, it’s the delivery country selected by the buyer. With PayPal Express Checkout, Klarna Express Checkout, and PayPal Checkout, the respective service provides the delivery country. This is not documented and is added here.

Date-dependent tax rates

For a cutoff date, you can create a section whose name ends with the date in the format JJJJMMTT (YYYYMMDD). The number represents the last day on which these rates apply.
The order matters, similar to overriding a CSS class.The VATRates section without a date must always come first and contain the rates that apply again after all cutoff dates.The dated sections follow, with the latest cutoff date first.

Currency-Txt

Defines the base currency of the shop. This is the currency in which the product prices are stored.

AlternativeCurrency

Additionally displays prices in other currencies. WEBSALE AG keeps the exchange rates up to date unless you provide your own file.
The values of SelectBoxMode correspond to the parameter names of the +Entry sections. In the source documentation, the first value was listed as Text instead of Txt. This is corrected here so that parameter and value match.
One +Entry subsection per offered currency.

PriceFormat

Defines how prices are displayed. All settings are optional.
JoinCurrency and JoinCurrencySymbol were missing from the sample code in the source documentation, although they appear in the parameter table. They are added here.
ZeroIntegralPart only affects the PR-IPart() tag, and ZeroFractionalPart only affects PR-FPart(). With ZeroIntegralPart = -, 0,95 becomes the output -,95. With ZeroFractionalPart = --, 2,00 becomes the output 2,--. The two join parameters only affect elements that WEBSALE V8s generates automatically, for example the order data format. If you positioned the currency manually in templates, you also need to adjust those templates.
The shop passes prices to technical systems unformatted, but only to systems it knows. External systems embedded in templates, for example via tracking pixels or JavaScript, receive the tags BASKET-ValueOfGoods, BASKET-OrderTotal, and BASKET-SubTotalNet in your configured formatting.Check in advance whether these systems correctly read your decimal and thousands separators. If not, you need to stick with the defaults in the shop, meaning a period as the decimal separator and no thousands separator.

Voucher-Txt

Enables voucher redemption and holds the related texts.

Basic settings

NewCustomerDefinition = NoOrder allows the voucher as long as the buyer hasn’t completed an order yet, even if a customer number already exists. NoCustomerNumber requires that no customer number exists yet.
VoucherInputLocation is a comma-separated list, not a single value. Allowed values are Basket, PlaceOrder, and PayDeliv. The value PlaceOrderAndBasket still exists for compatibility reasons and corresponds to Basket,PlaceOrder. If no entry matches, Basket is set.The list capability and the value PayDeliv for the payment and shipping method page are not described in the previous documentation and are added here.

Multiple vouchers

With two vouchers with minimum order values of 20 and 30 euros, UseSum requires a basket over 50 euros, while UseMax only requires one over 30 euros. UseRoundedPercentalMultiVoucherDiscount = yes rounds each voucher individually and then adds them up. With no, the values are added first and then rounded.
MultiVoucher-MinOrderBehavior was missing from the sample code in the source documentation, although the parameter appears in the table. It is added here.The value test only takes effect in the shop’s general test mode. In addition, a change from yes to no only takes effect if no second voucher has been entered in the current session yet. This is not documented and is added here.

META vouchers

A META voucher is a collective code that combines several individual voucher codes. When the buyer enters the META code, all associated sub-vouchers are redeemed. Only one META voucher can be redeemed at a time.

Applicability to the basket

In the kernel, the parameter is named SpecialSetting1-Allow, meaning Setting in the singular. The previous documentation wrote SpecialSettings1-Allow with an s. Under the wrong name, the parameter has no effect and no message appears. This is corrected here.
AllowToRedeemVoucherWithoutMatchingCatProdFilter is not described in the previous documentation and is added here.
With UnresolvedVoucherProducts-Allow = yes, a base product without a preselected variant can be stored as a voucher product. The buyer then selects the variant in the basket.

Texts

BonusPoints

Configures the merchant’s own bonus points system.
An AmountPerPoint of 0 or a missing value silently results in 1. This is not documented and is added here.

Texts in the order data

PriceTypeNet-UseBonusPointsOnTotalNetSum also reduces the VAT assessment basis by the redeemed amount. Note two restrictions.Products can then no longer be excluded from redemption, and the corresponding product property is ignored.If products with different tax rates are in the basket and the redeemed amount is smaller than the net total, the assessment basis is reduced in ascending order starting from the first tax index.

CustomerSubvention

Lets you grant each customer a subsidy.

BuyXPayY

Defines a promotion following the pattern “buy 3, pay for 2”. WEBSALE V8s currently supports only one promotion, so the +Entry subsection may only occur once.
BuyX must be greater than PayY, and PayY must be greater than 0. If either condition is violated, the entire entry is silently discarded.The same applies to an entry without Allow = yes or without ID.The two dates are only evaluated if they are exactly ten characters long. A notation such as 1.11.2026 is ignored, and the promotion then applies without this limit.In the source documentation, the description of PayY referred to a parameter BuyY. BuyX is meant. This is corrected here.

ClimateNeutral

Configures the climate-neutral production service via ClimatePartner.

Calculation

You get the value for CO2Factor from ClimatePartner.
The tiers are based on the certificate costs of the external provider, not on the value of goods. Certificate costs plus surcharge make up the total costs. All amounts are net prices. Up to 50 tiers are supported.
In the source documentation, the format specification of this parameter was labeled (Warenwert:Kosten) (value of goods:costs), while the explanatory text refers to certificate costs. This page consistently refers to certificate costs.

VAT

If the VAT can’t be calculated validly, climate-neutral production isn’t offered at all.

Certificate

In CertificateClient, you can use all tags of the billing address, for example like this:
In CertificateOrderDescr, the local tag OrderNumber is available. With CertificateRetrieval-Mode = PerBasketPosition, ProductNumber and ProductName are also available.
If ordering the certificate from ClimatePartner fails, the order in the shop is already completed and the certificate has been paid for. Manual follow-up with ClimatePartner is then required. For this reason, make sure to specify a NotificationAddress.

Display of the emission quantity

BestPrice order module

The BestPrice order module is spread across four sections. One for the templates, one for the messages, and two for emails.

BestPrice

PaymentCode must be set to 6 and must not be changed.

BestPrice-Txt

The module’s messages.

BestPrice-PreorderMail

Confirmation email to the buyer.
In the source documentation, SenderAddress was described as the “email address of the recipient”. It is the sender address. This is corrected here. The recipient is the buyer and is determined from the order.

BestPrice-OrderErrorMail

Email to the shop administrator if the final order generation fails.