Jump to content
  • 0

Handling Vat As A German Company


henning

Question

We are currently using a 30 days trial of blesta. We are almost ready to buy. Only one small issue left. Tax laws are a bit complicated. After a long discussion with our lawyer we have to meet to following minimum requirements:

1. We *must* to put VAT on invoices to our German customers.
2. We *must* put the VAT number of customers from the European Union on invoices. But no VAT for this customers.
3. We *must* put the statement 'VAT reverse-charged' on every invoice without tax.


Requirement 1 (VAT for German customers) is perfectly possible I think.

To meet requirement 2 (VAT number of customers from the European Union) it would be good to make the 'Tax ID/VATIN' field on the registration form mandatory if certain countries are chosen. To start, we could manually take care of this numbers.

Requirement 3 (statement VAT 'reverse-charged')  blesta has to check if tax is invoiced on invoice creation and if not add the statement.


Can this be done?

Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

Do note that you are supposed to actually verify the VAT number entered if you wish to issue 0% VAT invoices to companies in other EU countries. (which Blesta currently does not do)

 

The EU does provide a SOAP webservice to automate that.

It also allows you to retrieve the company's name and address information given a VAT number (although not all EU countries support that), which could be used to fill that in automatically on the order form after the customer entered its VAT number.

 

Some sample code to check the number from one of our own older projects.

(for illustrative purposes only. it uses ereg() which was acceptable when the code was written, but is deprecated nowadays)

 

 

/*
 * Checks if VAT number entered is valid
 *
 * Returns array with company name and address (if member state provides that)
 * Throws exception if VAT number is not valid 
 */
function vat2contact($vat)
{
    if (!extension_loaded('soap')) 
      die('Missing SOAP extension'); 
    
    $vat = str_replace('.', '', strtoupper($vat));
    $contact['vat'] = $vat;
    if (!ereg('^([A-Z][A-Z])([0-9A-Z]+)$', $vat, $regs)) 
      throw new Exception(ERR_INVALID_VAT);
  
    $params = new stdClass; 
    $params->countryCode = $regs[1]; 
    $params->vatNumber   = $regs[2];
 
    /* You can optionally enter your own VAT number here, so that it is registered that you 
     * performed the check and fulfilled your legal obligations.
     */
    $params->requesterCountryCode = "";
    $params->requesterVatNumber   = "";
  
    try
    {
        $client = new SoapClient('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl');
        $result = $client->checkVatApprox($params);
                
        if (!$result->valid)
            throw new Exception(ERR_INVALID_VAT); /* VAT number does not exist */
            
        if (!empty($result->traderName))
            $contact['company'] = ereg_replace("[[:space:]]+", " ", $result->traderName);
        
        if (!empty($result->traderAddress))
        {
            $addr = $result->traderAddress;
            if ( strpos($addr, "\n") )
            {
                list($addr, $pc)  = explode("\n", $addr, 2);
                list($zip, $city) = explode(' ', $pc, 2);
                $contact['address'] = $addr;
                $contact['zip'] = $zip; 
                $contact['city'] = trim($city);
                $contact['country'] = $params->countryCode;
            }
        }
    }
    catch (SoapFault $e)
    {
        if ( $e->getMessage() == "{ 'INVALID_INPUT' }" )
            throw new Exception(ERR_INVALID_VAT); /* VAT number is not well formed */
 
        /* Silently continue on other errors. Do not prevent registration if VIES service is down */ 
    }
    
    return $contact;
}
Link to comment
Share on other sites

  • 0

Could you please tell me where to put the code an where/how to call the function. I'm not a developer but I can do a bit of PHP.

 

Do not recommend that if you are not a developer, as it would involve making changes to Blesta's own models code, and doing that again on each Blesta update.

 

Not aware of a way of adding additional validation rules in a less intrusive way e.g. through a plugin.

While there do is a Clients.create event one can listen to, it is called after the fact, and cannot prevent the client being created if the information does not pass checks.

Link to comment
Share on other sites

  • 0

Guys, I need two simple things:

 

1. Information where to put the code posted above.

2. Code that generates the statement 'VAT reverse-charged' on every invoice without VAT.

 

Would you please help me out.

 

1. Note that the code is generic code to demonstrate how one can check the validatity of a VAT number, and retrieve company information. It is not specifically written for Blesta and will not magically work if you cut & paste it in a file. 

 

2. Not every invoice without VAT is a "VAT reserve-charged" invoice.

E.g. if the customer is located outside the EU, he doesn't have to pay VAT either, but you shouldn't put that message on the invoice.

 

 

Also note that you must be able to generate a list of the customer VAT numbers and amounts for which a reverse charge was made, as you will have to send that information to your tax authority at the end of each accounting period.

As well as take care of the other things that need to be done to make Blesta EU complaint (e.g. prevent that invoices can be changed after being issued, and be able to correct them properly with credit notes)

 

So it is a little more work than those two simple things.

Link to comment
Share on other sites

  • 0

 

1. Note that the code is generic code to demonstrate how one can check the validatity of a VAT number, and retrieve company information. It is not specifically written for Blesta and will not magically work if you cut & paste it in a file.

Oh I didn't know that. Thought you were using this code in blesta.

 

I just called a tax expert and discussed the other points you mentioned. He confirmed what you were saiing. I wonder how others from the EU are doing it.

 

Is there a way to use blesta as a company from the EU today? Or would you just advise against it.

Link to comment
Share on other sites

  • 0

Oh I didn't know that. Thought you were using this code in blesta.

 

 

 

I just called a tax expert and discussed the other points you mentioned. He confirmed what you were saiing. I wonder how others from the EU are doing it.

 

Is there a way to use blesta as a company from the EU today? Or would you just advise against it.

 

No, we are currently not using Blesta in any production environment.

We have our own custom billing system, although we want to replace it with a standard solution eventually, as our own code is old and suffers from bit rot.

Right now modifying Blesta -or any of its competitors- to match the features we currently have would take us more work than continue to maintain our own code though. Waiting for the gap to get smaller.  

 

>Is there a way to use blesta as a company from the EU today?

 

Depends who your customers are.

If you only were to sell locally to customers in your own country (then you do not need the reverse charge VAT diversion stuff), and write out credit notes manually outside of Blesta when invoices need correcting, it may be usable enough.

Link to comment
Share on other sites

  • 0

 

If you only were to sell locally to customers in your own country

That was not exactly our plan :)

 

In another thread I read about the upcoming feature to issue proforma invoices. Maybe that will help us?

 

Max, thank you very much for sharing your knowledge so far. Really appreciate it.

Link to comment
Share on other sites

  • 0

That was not exactly our plan :)

 

In another thread I read about the upcoming feature to issue proforma invoices. Maybe that will help us?

 

 

 

 

No, that is unrelated.

 

Pro-forma invoicing only prevents that you have to pay VAT prematurely for services that the customer may or may not renew, and services that you are uncertain of receiving payment for (e.g. new customer placing an order and selecting a manual bank transfer as payment method)

Link to comment
Share on other sites

  • 0

1. We *must* to put VAT on invoices to our German customers.

2. We *must* put the VAT number of customers from the European Union on invoices. But no VAT for this customers.

3. We *must* put the statement 'VAT reverse-charged' on every invoice without tax.

Requirement 1 (VAT for German customers) is perfectly possible I think.

To meet requirement 2 (VAT number of customers from the European Union) it would be good to make the 'Tax ID/VATIN' field on the registration form mandatory if certain countries are chosen. To start, we could manually take care of this numbers.

Requirement 3 (statement VAT 'reverse-charged')  blesta has to check if tax is invoiced on invoice creation and if not add the statement.

Can this be done?

 

These don't sound terribly difficult, and all these changes could likely be implemented pretty easily within the invoice with the exception of forcing a requirement on the VAT. That would take a little more work, but not much.

 

Is there an official document that describes these rules? If so, would you mind pointing us in the right direction?

Link to comment
Share on other sites

  • 0

 

Is there an official document that describes these rules? If so, would you mind pointing us in the right direction?

 

The official rules common to all EU countries can be found on the EU website.

However it may be hard to find your way around them if you don't know what you are looking for exactly.

 

 

VAT rules for electronically supplied services (e.g. hosting):

 

http://ec.europa.eu/taxation_customs/taxation/vat/how_vat_works/telecom/index_en.htm

 

Invoicing rules that say customer's VAT number must be on the invoice when a reverse charge is performed, as well as a statement indicating this is the case: 

 

http://ec.europa.eu/taxation_customs/taxation/vat/traders/invoicing_rules/article_1733_en.htm#item_1.4

 

Information on checking VAT numbers:

 

http://ec.europa.eu/taxation_customs/vies/faq.html

 

It also mentions briefly the "recupalative statement"

That is a list containing all the VAT numbers of your customers, and the amounts of the invoices for which a reverse charge was made, that you must submit to the government after each accounting period.

That is the reason it is important that the number the customer entered on the order form is actually checked.

 

 

Also note that the rules regarding selling services to private individuals (that do not have a VAT number) change next year.

Right now a German company selling to a Dutch consumer will charge the German VAT percentage.

But that is going to change, and you will need to charge the Dutch percentage instead in 2015.

So might want to prepare for having the option to configure a different VAT percentage depending on which country the customer is in, for customers that are not businesses.

Link to comment
Share on other sites

  • 0

To meet requirement 2 (VAT number of customers from the European Union) it would be good to make the 'Tax ID/VATIN' field on the registration form mandatory if certain countries are chosen. To start, we could manually take care of this numbers.

 

 

Problem with making VAT number mandatory is that not every customer is guaranteed to have one.

Besides private individuals not having one, in some EU countries (like the UK) small companies may be exempt from VAT registration as well.

Link to comment
Share on other sites

  • 0

I saw that blesta creates invoices every time you click view (both in the admin area and in the client area). So if a customer changes his address or any other information he will receive a changed invoice. I think this is a problem. In the EU we have to keep every issued invoice and document the process of correcting invoices that need to change.

Link to comment
Share on other sites

  • 0

I saw that blesta creates invoices every time you click view (both in the admin area and in the client area). So if a customer changes his address or any other information he will receive a changed invoice. I think this is a problem. In the EU we have to keep every issued invoice and document the process of correcting invoices that need to change.

 

Correct.

 

That's why I mentioned that Blesta is only useable in its current form if you create credit notes manually outside Blesta, if you need to do any correcting at some point.

Using the "edit" button will alter the existing invoice, and making changes to an invoice after it has already been issued to a customer is not allowed (considered a form of fraud) in a large part of the world.

 

Earlier threads about it:

 

http://www.blesta.com/forums/index.php?/topic/1622-information-on-issued-invoices-should-never-change/

http://www.blesta.com/forums/index.php?/topic/1519-billing-mudule-customization-regarding-to-hungarian-rules/

Link to comment
Share on other sites

  • 0

 

Problem with making VAT number mandatory is that not every customer is guaranteed to have one.

Besides private individuals not having one, in some EU countries (like the UK) small companies may be exempt from VAT registration as well.

Maybe this can be solved by asking the customer whether he is a private individual or a company during registration. If company is chosen the VAT field is mandatory. Customers from the EU without a VAT number (rare exceptions I think) would have to register as private individuals. I believe that for this companies the same rules apply as for private individuals.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...