-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
[Compliance] Current Address Resource does not allow European VAT Tax calculation or eInvoicing compliance #6110
Comments
CompanyA First name and last name
Furthermore, EU legislation requires all formats to be interoperable. I'm pretty sure that interoperability requirement will already require anyone using the standards with concatenated first name and last name to split names, leading many invoices in Spains We've already moved forward with concatenating first name and last name, and the stores I work with really like the simplicity and reduced friction in the (already complicated) address forms. I am not willing to move them back to a separate first name / last name situation, especially because that would mean a data migration that's quite prone to errors, and that will take days of work to get right. If separated first name and last name become a reality, this MUST be behind a configuration flag for store owners to decide. The VAT IDThis is the most complex of all the requirements. I think it should be its own resource, and should not be tied to all addresses at the schema level. They have separate validation needs, as you indicate above. In the US, tax exemption works by state, so users need more than one tax exemption as well (there, however, the exemption is a piece of paper that needs to scanned, not an ID, and it's - as you write - far less systematic). Hoping for a better suggestion here. |
We had some thoughts about it internally and took a look at the PRs Thomas once made and we would like to make the changes as upstream compatible as any possible. Ideally the choice can be made upon installation as it's a relatively boolean step (Am I in Europe and do I want this). Walking through the old PRs we saw that First_Name and Last_name are not entirely exstinct from solidus. So we came up with a couple of questions:
I kindly ask you also to be as specific as any possible. We will try to make a PR as close to what you expect as possible but we need help here to define the scope precisely. |
The only thing that is concerning to me here is the will to throw the vat id (and other billing fields) into the addresses. If I need to add a different address (maybe my company has multiple locations), do I need to enter the vat id multiple times? This just feels wrong, so I'd like to map the information in a way that makes more sense and are not redundant. On the other hand, we need to store the info on the order to have a historical record of the vat id used at checkout (in case someone changes the vat id after placing the order), and the address is incredibly tempting for solving this. I think we'll need the extra email field (we have the PEC here in Italy, which can be used instead of the vat id as an identifier if I recall correctly). What about having a concept similar to the address book, but called billing info, which is tied to the user. The final address will be the address + billing info, but those entities can be combined in different ways. For example a user might have multiple addresses and just one billing info, which they use in the checkout if/when needed. |
hey I mostly agree, the vat ID in the address seams a compromise to me,
The thing is, the billing address covers really all cases, while admittedly asking some customers to maybe add the same vat id to multiple addresses, but this seems like a super small price to pay for a streamlined solution. |
My 2 cents on the topic of first/last name. Back in 2023 we did extensive customer interviews and the two topics that came up over and over were the admin UI (that's how So I would really love to see that change rolled back to the point where the default is reversed and maybe a configuration is kept around as a legitimate citizen for those who endured the migration. Besides, lowering the barrier of entry is the best thing we can do to lift up a small business. As further proof of how frequently this issue was raised this repo exists: https://github.com/nebulab/solidus_address_name. |
@jarednorman you have some more american insight and I know names are often structured differently there, do you have an oppinion on this one? |
TL;DRFirst Name and Last Name needs to be taken in consideration as separate values in many countries to comply with fiscal requirements and regulations, it's easier to unmerge than merging this fields as we can simply write First_Name and Last_Name in together in name for the forseeable future to not break anything. Let's do it 🔥 ProposalIntroAfter having had brief initial discussion with @kennyadsl @tvdeyen I'd like to formally request a public discussion about this. I would like to underline that I don't request this easily, I am well aware of the process that has been made in 3 PRs to migrate away from separated fields for first_name and Last_name. The decision was made, when eInvoicing was not as prevalent as it became over the past 4 years in Europe. The fact that many countries (while sharing a standard) do not necessarily use the same schema and moved at different speeds (Italy very early on einvoicing, Germany very late) posed an additional barrier in researching this topic properly during the conception of single name fields in Solidus. Some more legal information about fiscal requirements can be read at the top of this thread or here. The issue of a merged field nevertheless seems to be a problem for some time given that extensions for this purpose have been build and are updated frequently:
The question is now, how do we softly weasel out of this situation. Some things to know about billing addresses for companies and consumers
ConsiderationsVarious address schemes are used around the world. These consist primary of 3 large families:
While the merger of two separated names into one united output is as we all know relatively painless, the separation of two stored values is challenging, several issues come to mind:
The problem hereby is that while it can be decided to support or non support certain private standards in the name scheme (for example address schemes of shipping companies), in many countries you are or will be in the close future required to issue xml invoices on every order that will require a split field for first name and last name. SolutionWhile the change seems to be dramatic given also the many PRs it took to remove first name and last name, there's a large benefit it split fields: we can always join them. The process could be to not even deprecate Name and just fill it up with a joined First_name Last_name value.
In addition the initial extension of the address form would not be technically to challenging. In addition a joined field allows to ease many additional functions such as:
It should be possible to do this without killing anybody. The final address scheme should like this:
|
Concerns: #3852 #3234 solidus_braintree #226 #6112
Realted to: Solidus Address Name Extension
Overview (TL;DR)
The current default address scheme of Solidus does not possess sufficient information to
While it can be assumed that all companies have some kind of bookkeeping software to issue the invoice, currently the data required to calculate taxes and issue a correct invoice are not present.
To suffice to all standards (NAFTA / European Union) the address model should be extended to following scheme. Hereby it should be noted that while the American tax calculations, require less customer data. It is also worth mentioning that both models are not incompatible for vat calculation. In the US more burden is shifted on state and state level requiring more formulas but less validation (, while the European Model requires more data from the customer to apply correct taxes. Both models can coexist.
First_Name
(Required in several European Countries to generate eInvoices reliably)Last_Name
(Required in several European Countries to generate eInvoices reliably)Company_Name
(Required in several European Countries to generate eInvoices reliably)Values with * need to be either added or modified.
Incremental Breakdown of Reasons
VAT_ID
,First_Name
,Last_Name
andCompany_Name
are required to generate eInvoices accross all jurisdictionsThe European Union is, on different levels varying country by country, right now rolling out mandatory electronic invoices for B2B transactions.
The electronic invoice hereby consists of a signed xml file according to different national validation schemes.
Hereby several combinations of first name, last name and company name are used, depending on the country of fiscal residence of the seller.
While a concatenation can always be achieved, a joint name field makes it in many cases impossible to render reliably the data needed to emit an invoice.
The VAT-ID is required to correctly apply VAT domestic or cross border transactions inside the European Union
Why we need VAT-ID
VAT in European Union cross border transactions between businesses varies according to multiple factors:
Otherwise you risk having to backpay VAT (if the national fiscal authority doesn't reject your invoice straight away depending on the country of fiscal residence of the seller) if you didn't charge it. The registration of VAT IDs to participate in VAT exemption became practically universal within Europe;
In all cases the eligibility of the applicable tax rate needs to be confirmed through VAT-ID and country of shipping and / or billing. Therefor if we do want to render Solidus compliant with the European market both these fields need to be present.
Why can't the VAT-ID be stored on the customer resource?
There are multiple cases in which a customer might need more than one VAT-ID and cases in which the seller needs more than one VAT-ID.
The reasons are plenty and vary from country to country.
Solidus Version:
All versions
The text was updated successfully, but these errors were encountered: