-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC][Core][Taxation] Allow configuration of which address to use to match the tax zone #10946
Comments
This issue has been automatically marked as stale because it has not had any recent activity. It will be closed in a week if no further activity occurs. Thank you for your contributions. |
Hi guys, this issue is becoming a priority due to the "new" EU VAT regulations: https://ec.europa.eu/taxation_customs/business/vat/modernising-vat-cross-border-ecommerce_en As @vvasiloi proposed, it would be great to have a configuration on each tax rates, so that it's possible to choose if the match should be based on the shipping or the billing address. |
Firstly, I'd like to note that zone matching is for quite some time (since version 1.7) based on the billing address 💪🏼 But as @LucaGallinari has mentioned the new EU VAT regulations, I'd like to ask if adding a setting on the channel for taxes to be based either on shipping address or billing address, would help? |
The EU does not care where you pay (billing address). They will be interested in where you use the service or product (shipping address). Until July 1, the current law is for taxes as follows:
With the change from July 1, fees will be charged where the service/goods are used/sent (shipping(delivery) address) |
Now others will complain that it's based on the billing address and not the shipping address, that's why I proposed to make it configurable.
|
Agree, since at least for EU based shops selling physical goods to other EU countries, tax zone matching based on the shipping address is always preferred, with the current VAT rules, as well as with the upcoming rule changes. With the current regulation, if remote sales are under the VAT registration threshold for the target country - no separate tax rate is even necessary, VAT must be paid in the seller's country. E.g. a german shop selling goods to Luxembourg (based on the shipping address), but not more than 100 000 EUR a year, pays german VAT on sales. With the new regulation, the threshold drops down to 10 000 EUR (EU-wide, not for a single country), so more shops will be over that limit. Using the same example, a german shop selling goods to Luxembourg (based on the shipping address), more than 10 000 EUR a year, will have to pay 17% Luxembourg VAT. I'm not even sure what is the scenario, where tax zone matching based on the billing address is necessary, maybe when selling non-physical goods, or services? Could someone provide an example? Either way, configurable tax zone matching strategy would be sensible. At least for our use case, channel-level setting would be enough. |
@januzis The payment address is considered to be the address of use of the service / software. Because the service or software does not have a delivery address. |
Thanks, that makes sense. Again, seems like the proposed strategy pattern already used elsewhere in Sylius would be a sensible solution, covering 99% of use-cases with two default strategy implementations (billing address based and shipping address based matching), and creating a nice integration point for a custom strategy implementation for more advanced use cases (mixed software / physical goods shop, etc.). |
@januzis Yes. After 1-juli, sylius model is 100% correct for EU to EU trades. But in this moment big missing part is EU to GB strategy, for my case i just crate custom tax calculator. I crate simple plugin in my project, but not useful for standalone on this moment. |
It's not correct for physical goods, it's currently matching based on the billing address, when the EU VAT rules are based on the recipient's (shipping address) country. |
@januzis I agree with you. Current way is every tax in EU to get delivery address (shipping) . If you add only billing, address in checkout orders get this address for shipping. Current way is every tax to calculate only for shipping address after 1-july. From now correct way is tax for goods to calculate form channel country. |
This PR was merged into the 1.11-dev branch. Discussion ---------- | Q | A | --------------- | ----- | Branch? | master | Bug fix? | no | New feature? | no | BC breaks? | not sure | Related tickets | related to #10946 | License | MIT ![Zrzut ekranu 2021-06-18 o 08 33 40](https://user-images.githubusercontent.com/35863747/122517317-242e4b80-d010-11eb-83ea-0173209f8935.png) ![Zrzut ekranu 2021-06-18 o 08 33 50](https://user-images.githubusercontent.com/35863747/122517321-24c6e200-d010-11eb-9846-1143be126ab8.png) Commits ------- ff8d727 [POC] Add change of tax by address b05e446 Extract service 273c608 Minor fixes ae32ed2 Rebase and fixes d9b61b7 Add notes about new param
Fixed by #12718 |
Glad we've managed to help (last minute before July 1st 😅 ) 💪🏼 I will just leave a note here that we will be looking at this topic once more, in order to provide a more "UI" solution. As now, you can reconfigure the whole application with the introduced parameter, though it would be awesome to have it configurable at least per channel. |
I create very complex solution because every order in my project have two and more tax category.
|
The OrderTaxesProcessor uses the shipping address to match the tax zone
Sylius/src/Sylius/Component/Core/OrderProcessing/OrderTaxesProcessor.php
Lines 83 to 88 in 40b65d1
and falls back to the default tax zone
Sylius/src/Sylius/Component/Core/OrderProcessing/OrderTaxesProcessor.php
Line 90 in 40b65d1
In most cases it works well because usually the shipping and billing addresses yield the same tax zone.
There are situation though, when this creates issues, especially in markets like US or EU.
I'm not sure wherever it should always use the billing address, but it should at least be configurable.
Having a strategy pattern with at least two built-in implementations to handle the tax zone matching, one that uses the billing address and another that uses the shipping address, plus configuration at the channel level will bring more flexibility and will allow more specific customizations without overriding the OrderTaxesProcessor just because of a private method.
Looking forward to other thoughts on this matter.
The text was updated successfully, but these errors were encountered: