Developer forum

Forum » Ecommerce - Standard features » Live Integration and VAT calculation

Live Integration and VAT calculation

Andrejs Zavorotnijs
Reply

Hello

 

DW version 9.18.2

We're encountering an issue with incorrect rounding of VAT prices on orders. It's currently unclear whether the root cause lies in the Settings > Ecommerce > Advanced Configuration Settings or within the DW plugin.

In BC, all prices calculated correctly. However, when the data is received in DW, the VAT amounts appear to be rounded incorrectly.

Explanation


price with VAT from total should be, same like in BC

14550.3 * 1.25 = 18187.875                           should be 18187.88

VAT = 18187.875 - 14550.3 = 3637.575         should be 3637.58

 

 

 

And if calculating every line

328257412TH -10% discount

Without VAT 5579 - 557.9 = 5021.1

With VAT 6973.75 - 697.375 = 6276.375

VAT 1394.75 - 139.475 = 1255.275

328257812TV -10% discount

Without VAT 5579 - 557.9 = 5021.1

With VAT 6973.75 - 697.375 = 6276.375

VAT 1394.75 - 139.475 = 1255.275

327857412 -10% discount

Without VAT 5509- 550.9 = 4508.1

With VAT 6261.25 - 626.125= 5635.125

VAT 1252.25- 125.225 = 1127.025

Total

Without VAT 5021.1 + 5021.1 + 4508.1 = 14550.3    correct same as in DW

With VAT 6276.375 + 6276.375 + 5635.125 = 18187.875    should be 18187.88

VAT 1255.275 + 1255.275 +  1127.025 = 3637.575             should be 3637.58

 

Original response from BC

<?xml version="1.0" encoding="utf-8"?>
<tables version="1.2.0.47_NAV25.2.32308.0">
  <table tableName="EcomOrderLines">
    <item table="EcomOrderLines">
      <column columnName="OrderLineProductNumber"><![CDATA[328257412TH]]></column>
      <column columnName="OrderLineProductVariantId"><![CDATA[]]></column>
      <column columnName="OrderLineUnitId"><![CDATA[Unit_STK]]></column>
      <column columnName="OrderLineId"><![CDATA[10000]]></column>
      <column columnName="OrderLineQuantity"><![CDATA[1]]></column>
      <column columnName="OrderLineType"><![CDATA[0]]></column>
      <column columnName="OrderLinePriceWithoutVat"><![CDATA[5,579.00]]></column>
      <column columnName="OrderLineUnitPriceWithoutVat"><![CDATA[5,579.00]]></column>
      <column columnName="OrderLinePriceWithVat"><![CDATA[6,973.75]]></column>
      <column columnName="OrderLineUnitPriceWithVat"><![CDATA[6,973.75]]></column>
      <column columnName="OrderLinePriceVat"><![CDATA[1,394.75]]></column>
      <column columnName="OrderLineUnitPriceVat"><![CDATA[1,394.75]]></column>
      <column columnName="OrderLinePriceVatPercent"><![CDATA[25]]></column>
      <column columnName="OrderLineUnitPriceVatPercent"><![CDATA[25]]></column>
    </item>
    <item table="EcomOrderLines">
      <column columnName="OrderLineProductNumber"><![CDATA[328257412TH]]></column>
      <column columnName="OrderLineProductVariantId"><![CDATA[]]></column>
      <column columnName="OrderLineUnitId"><![CDATA[Unit_STK]]></column>
      <column columnName="OrderLineParentLineId"><![CDATA[10000]]></column>
      <column columnName="OrderLineType"><![CDATA[3]]></column>
      <column columnName="OrderLineQuantity"><![CDATA[1]]></column>
      <column columnName="OrderLinePriceWithoutVat"><![CDATA[557.90]]></column>
      <column columnName="OrderLineUnitPriceWithoutVat"><![CDATA[557.90]]></column>
      <column columnName="OrderLinePriceWithVat"><![CDATA[697.38]]></column>
      <column columnName="OrderLineUnitPriceWithVat"><![CDATA[697.38]]></column>
      <column columnName="OrderLineDiscountPercentage"><![CDATA[10]]></column>
      <column columnName="OrderLinePriceVat"><![CDATA[139.48]]></column>
      <column columnName="OrderLineUnitPriceVat"><![CDATA[139.48]]></column>
      <column columnName="OrderLinePriceVatPercent"><![CDATA[25]]></column>
      <column columnName="OrderLineUnitPriceVatPercent"><![CDATA[25]]></column>
    </item>
    <item table="EcomOrderLines">
      <column columnName="OrderLineProductNumber"><![CDATA[328257812TV]]></column>
      <column columnName="OrderLineProductVariantId"><![CDATA[]]></column>
      <column columnName="OrderLineUnitId"><![CDATA[Unit_STK.]]></column>
      <column columnName="OrderLineId"><![CDATA[20000]]></column>
      <column columnName="OrderLineQuantity"><![CDATA[1]]></column>
      <column columnName="OrderLineType"><![CDATA[0]]></column>
      <column columnName="OrderLinePriceWithoutVat"><![CDATA[5,579.00]]></column>
      <column columnName="OrderLineUnitPriceWithoutVat"><![CDATA[5,579.00]]></column>
      <column columnName="OrderLinePriceWithVat"><![CDATA[6,973.75]]></column>
      <column columnName="OrderLineUnitPriceWithVat"><![CDATA[6,973.75]]></column>
      <column columnName="OrderLinePriceVat"><![CDATA[1,394.75]]></column>
      <column columnName="OrderLineUnitPriceVat"><![CDATA[1,394.75]]></column>
      <column columnName="OrderLinePriceVatPercent"><![CDATA[25]]></column>
      <column columnName="OrderLineUnitPriceVatPercent"><![CDATA[25]]></column>
    </item>
    <item table="EcomOrderLines">
      <column columnName="OrderLineProductNumber"><![CDATA[328257812TV]]></column>
      <column columnName="OrderLineProductVariantId"><![CDATA[]]></column>
      <column columnName="OrderLineUnitId"><![CDATA[Unit_STK.]]></column>
      <column columnName="OrderLineParentLineId"><![CDATA[20000]]></column>
      <column columnName="OrderLineType"><![CDATA[3]]></column>
      <column columnName="OrderLineQuantity"><![CDATA[1]]></column>
      <column columnName="OrderLinePriceWithoutVat"><![CDATA[557.90]]></column>
      <column columnName="OrderLineUnitPriceWithoutVat"><![CDATA[557.90]]></column>
      <column columnName="OrderLinePriceWithVat"><![CDATA[697.38]]></column>
      <column columnName="OrderLineUnitPriceWithVat"><![CDATA[697.38]]></column>
      <column columnName="OrderLineDiscountPercentage"><![CDATA[10]]></column>
      <column columnName="OrderLinePriceVat"><![CDATA[139.48]]></column>
      <column columnName="OrderLineUnitPriceVat"><![CDATA[139.48]]></column>
      <column columnName="OrderLinePriceVatPercent"><![CDATA[25]]></column>
      <column columnName="OrderLineUnitPriceVatPercent"><![CDATA[25]]></column>
    </item>
    <item table="EcomOrderLines">
      <column columnName="OrderLineProductNumber"><![CDATA[327857412]]></column>
      <column columnName="OrderLineProductVariantId"><![CDATA[]]></column>
      <column columnName="OrderLineUnitId"><![CDATA[Unit_STK.]]></column>
      <column columnName="OrderLineId"><![CDATA[30000]]></column>
      <column columnName="OrderLineQuantity"><![CDATA[1]]></column>
      <column columnName="OrderLineType"><![CDATA[0]]></column>
      <column columnName="OrderLinePriceWithoutVat"><![CDATA[5,009.00]]></column>
      <column columnName="OrderLineUnitPriceWithoutVat"><![CDATA[5,009.00]]></column>
      <column columnName="OrderLinePriceWithVat"><![CDATA[6,261.25]]></column>
      <column columnName="OrderLineUnitPriceWithVat"><![CDATA[6,261.25]]></column>
      <column columnName="OrderLinePriceVat"><![CDATA[1,252.25]]></column>
      <column columnName="OrderLineUnitPriceVat"><![CDATA[1,252.25]]></column>
      <column columnName="OrderLinePriceVatPercent"><![CDATA[25]]></column>
      <column columnName="OrderLineUnitPriceVatPercent"><![CDATA[25]]></column>
    </item>
    <item table="EcomOrderLines">
      <column columnName="OrderLineProductNumber"><![CDATA[327857412]]></column>
      <column columnName="OrderLineProductVariantId"><![CDATA[]]></column>
      <column columnName="OrderLineUnitId"><![CDATA[Unit_STK.]]></column>
      <column columnName="OrderLineParentLineId"><![CDATA[30000]]></column>
      <column columnName="OrderLineType"><![CDATA[3]]></column>
      <column columnName="OrderLineQuantity"><![CDATA[1]]></column>
      <column columnName="OrderLinePriceWithoutVat"><![CDATA[500.90]]></column>
      <column columnName="OrderLineUnitPriceWithoutVat"><![CDATA[500.90]]></column>
      <column columnName="OrderLinePriceWithVat"><![CDATA[626.13]]></column>
      <column columnName="OrderLineUnitPriceWithVat"><![CDATA[626.13]]></column>
      <column columnName="OrderLineDiscountPercentage"><![CDATA[10]]></column>
      <column columnName="OrderLinePriceVat"><![CDATA[125.23]]></column>
      <column columnName="OrderLineUnitPriceVat"><![CDATA[125.23]]></column>
      <column columnName="OrderLinePriceVatPercent"><![CDATA[25]]></column>
      <column columnName="OrderLineUnitPriceVatPercent"><![CDATA[25]]></column>
    </item>
  </table>
  <table tableName="EcomOrders">
    <item table="EcomOrders">
      <column columnName="OrderShippingMethodName"><![CDATA[Levering]]></column>
      <column columnName="OrderShippingMethodId"><![CDATA[SHIP18]]></column>
      <column columnName="OrderShippingFee"><![CDATA[0]]></column>
      <column columnName="OrderCreated"><![CDATA[TRUE]]></column>
      <column columnName="OrderId"><![CDATA[]]></column>
      <column columnName="OrderCurrencyCode"><![CDATA[]]></column>
      <column columnName="OrderDate"><![CDATA[]]></column>
      <column columnName="OrderPaymentMethodName"><![CDATA[]]></column>
      <column columnName="OrderCustomerName"><![CDATA[Martin Vilstrup]]></column>
      <column columnName="OrderCustomerAddress"><![CDATA[Hovedtestvej 999]]></column>
      <column columnName="OrderCustomerAddress2"><![CDATA[]]></column>
      <column columnName="OrderCustomerCity"><![CDATA[Charlottenlund]]></column>
      <column columnName="OrderCustomerCountryCode"><![CDATA[DK]]></column>
      <column columnName="OrderCustomerEmail"><![CDATA[]]></column>
      <column columnName="OrderCustomerFax"><![CDATA[]]></column>
      <column columnName="OrderCustomerPhone"><![CDATA[]]></column>
      <column columnName="OrderCustomerZip"><![CDATA[]]></column>
      <column columnName="OrderDeliveryName"><![CDATA[Martin Vilstrup]]></column>
      <column columnName="OrderDeliveryAddress"><![CDATA[]]></column>
      <column columnName="OrderDeliveryAddress2"><![CDATA[]]></column>
      <column columnName="OrderDeliveryCity"><![CDATA[]]></column>
      <column columnName="OrderDeliveryCountryCode"><![CDATA[DK]]></column>
      <column columnName="OrderDeliveryEmail"><![CDATA[]]></column>
      <column columnName="OrderDeliveryFax"><![CDATA[]]></column>
      <column columnName="OrderDeliveryPhone"><![CDATA[]]></column>
      <column columnName="OrderDeliveryZip"><![CDATA[]]></column>
      <column columnName="OrderPriceWithVat"><![CDATA[18,187.86]]></column>
      <column columnName="OrderPriceWithoutVat"><![CDATA[14,550.30]]></column>
      <column columnName="OrderPriceVat"><![CDATA[3,637.56]]></column>
      <column columnName="OrderSalesDiscount"><![CDATA[1,616.70]]></column>
    </item>
  </table>
</tables>

 

 

 

 


Replies

 
Dmitriy Benyuk Dynamicweb Employee
Dmitriy Benyuk
Reply

Hi Andrejs,
can you try to change the BC roundings settings as described here?
The default settings values are usually set to the 0.01 value for the options in the BC Currency/GL LCY settings for:
Amount rounding precision
Unit-amount rounding precision

So try to change the 0.01 value to 0.001 instead.

BR, Dmitrij

 
Nicolai Pedersen Dynamicweb Employee
Nicolai Pedersen
Reply

There are several ways of rounding - there is not a right or wrong way - just different ways.

You can round the unit price, the line totals or order totals.

You have these options in DW - did you test them out?

Another technicality that affects this is that BC has one orderline with a unit price and a discount - in one line - so rounding rules will apply once.

DW has 2 orderlines in the same scenario - one for the product line and one for the discount line causing rounding twice - one on each of the lines. That will in some cases mean that the sum of the product orderline and the discount orderline can differ by 0.01 compared to having it all in one line.

Also there is a difference if you are rounding the prices with or without VAT. In DW that is handled by the current user setting - so if you have ShowPricesWithVat = True, Dynamicweb will round the price including VAT otherwise the price without VAT.

So you can also try to Switch to a without VAT display mode in DW using ?PricesWithVAT=False or by setting it up on Ecommerce settings on website settings.

The 3 rounding rules and the PricesWithVAT switch will give you potentially 6 different outcomes. Test them out and see if one fits what your BC does. And still with the caveat that discounts are handled different and can cause other roundings in some cases.

BR Nicolai

 
Andrejs Zavorotnijs
Reply

Hello Nicolai

Yes of course before writing here, I test all possible rounding settings.

3 which you are mentioned, doesn't give any changes for cart calculation prices

The shop is configured to display prices without VAT as the main price, but the client also requested that VAT details be shown for customer reference.

 

Hello Dmitriy

Live intergation version 7.4.12, we are using DKK currency as default in both BC and DW

Our ERP partner answer with this

This is not a currency rounding issue. Client use only DKK, meaning this can only be changed in the “General ledger setup” which is the controlling table for the posting in general inside the application. 

 

 

 
Dmitriy Benyuk Dynamicweb Employee
Dmitriy Benyuk
Reply

Hi Andrejs,
you can at least try to change the mentioned settings in the General ledger and check if it helps.
Those options are used when calculating/rounding the price with/without VAT in our D365BC plugin unit.
BR, Dmitrij

 
Nicolai Pedersen Dynamicweb Employee
Nicolai Pedersen
Reply

It will not helpt to change in BC.

This particular case from the fact that DW has 6 lines - 3 products and 3 discounts, each of them rounding.

BC has 3 lines, using no line rounding, but rounding the sum of VAT withoput rounding

 

So this can 

 

You must be logged in to post in the forum