User Manual/Setup B2B shop

From Aimeos documentation

User Manual
Other languages:
English 100%


B2B only

Selling business to business (or B2B) usually requires prices without tax. By default, Aimeos shops are configured for selling to consumers so it's assumed that all prices already contain the tax. To change the configuration to assume net prices, you have to set the tax flag to 0 (zero):

mshop/price/taxflag = 0

The exact configuration setting depends on your environment.

If you've already entered prices including tax, you must change these to values without tax to prevent incorrect pricing! The tax rate in percent must be entered for each price. Don't set it to "0.00" if you need to pay taxes when selling products (in some situations) to the tax and revenue office.

By default, the entered tax rate is shown in the front-end ( e.g. "+ 20% VAT"). This usually only applies to your own country, while there's a different tax rate when shipping to other countries. It's normally not possible to display the exact tax rate for the country of the buying company because it's unknown until login or until the address is entered in the checkout process. You can at least change what's displayed by overwriting the translation for displaying the tax rate:

domain: client
string: + %1$s%% VAT
translation: + VAT

Please have a look at the documentation for your environment on where and how to overwrite translations.

Country specific B2B

In European and other countries, tax has to be collected and payed to the tax and revenue office of your country for B2B commerce within your own country. This is also the case if the buyer is located in another European country but doesn't have a VAT ID. In both cases, the invoice must contain the tax and it needs to be payed by the buyer so you can transfer it to the tax and revenue office afterwards.

When selling to businesses in other European countries that are able to enter a VAT ID along with their address, no tax is required on your side. Instead, the buyer is responsible for paying the tax to the tax and revenue office in his own country. If you are selling world wide (and outside of Europe), there's no tax required.

For local and EU-wide sales there are two things required:

  • Check the VAT ID entered by the buyer
  • Add tax if no VAT ID is entered to the buyer is located in the same country

For both, you need the "ai-vatcheck" extension offered by the Aimeos GmbH. It contains a decorator for the checkout process that can check world-wide VAT IDs and European VAT IDs against the VIES service. A basket plugin for adding taxes is also included.

To active the VAT ID check, add this configuration:

client/html/checkout/standard/address/decorators/global = array( 'VatCheck' )

For adding tax for buyers from your country and for buyers that don't have a VAT ID, you have to add the "AddVat" plugin in the administration interface (expert mode) using these settings:

Admin-aimeoscom-addvat.png

Left side:

  • Status: enabled
  • Type: Order
  • Provider: AddVat
  • Label: Add VAT
  • Position: 1000

Right side:

  • addvat.always: <your two letter ISO country code>
  • addvat.novatid: <list of two letter ISO country codes separated by comma>


Mixed B2B/B2C

Selling to consumers and businesses at the same time differs from B2B only commerce in the fact that the prices should already contain the tax if applicable (this is different in the US). It also means that the tax flag configuration should be the default value (1).

Instead, the tax must be subtracted from the price if the buyer is a business with VAT ID and it's located outside the own country. Here you will need the "ai-vatcheck" extension offered by the Aimeos GmbH as well. Besides checking the VAT ID via adding this configuration

client/html/checkout/standard/address/decorators/global = array( 'VatCheck' )

you have to add the "NoVat" plugin in the administration interface (expert mode) using these settings:

Admin-aimeoscom-novat.png

Left side:

  • Status: enabled
  • Type: Order
  • Provider: NoVat
  • Label: Subtract VAT
  • Position: 1000

Right side:

  • novat.always: <list of two letter ISO country codes separated by comma>
  • novat.withvatid: <list of two letter ISO country codes separated by comma>