Skip to Content
Menu
This question has been flagged

Here is a list of common request from German customer and to deal with it + an Accounting check list for German implementation

Avatar
Discard

Thanks a lot for all that.

Do you know how to import Datev Balance List and Posting Batch files into Odoo easily ?


Author Best Answer

​​What are the specificities of implementing a German project ?


Here is a list of important points to tackle while implementing a German company in Odoo. Germany, like many other countries, have their own way of doing business and have their own requirement that they come from legal features or from old habits.


     1) Accounting

A few German Specificities:

  • Chart of account (SKR03, SKR04)

German companies can choose between 2 kinds of charts of accounts. Still like any other country each company can adapt their account their own way

  • Tax report (Elster)

Companies need to send their tax report electronically to the Government. They have to send their tax report on the platform elster.de

  • Invoice, vendor bills and expenses information to send to the government (Datev)

German companies have to send their invoices (pdf), vendor bills (pdf), expenses (pdf), list of customers, list of suppliers and journal entries (invoices, vendor bills, expenses) to the government. 
Many years ago a company (Datev) created a software allowing companies to do all that and to connect directly with the German government. As they were the first one everybody started to use their software. For this reason now in Germany, Datev has some kind of monopoly and all companies are using their software. Nonetheless, using Datev is NOT a legal requirement.
Datev and Odoo differ a lot in the way journal entries are created. In Odoo one invoice has multiple journal items, one for the Balance Sheet, one for the Profit & Loss, and one for the tax while in Datev all that is registered in one line.

  • Cash discount (Skonto)

In Germany companies very often offer Cash discounts to customers. It means that the customer receives a discount on the full payment if they pay before a specific date.


​​ ​Accounting checklist for GO Live

This checklist is only to explain the German specificities ! You obviously need to go through the generic accounting checklist in order to be sure your accounting is fully implemented (here is one forum entry checklist)


  1. Select your chart of account (choose between SKR03 and SKR04)
    1. If some accounts that were created automatically by Odoo don’t have the correct name or number, don’t delete them as they might be used in some default configurations, just adapt the existing ones

  2. Define the size of the accounts 
    1. The accounts size must be of Min 4 and Max 8 
    2. The Datev number for customer and vendor is defined by the size of accounts. 
      See video for configurations and flow: Video for V16

    3. Customer Datev number : The starting number has to be between 1 and 6 ex: 1XXX or 2XXX or 6XXX
      /!\ This is hardcoded to start with the number 1 and cannot be changed (V16), the use of system parameters to define it is obsolete 

    4. Vendor Datev number : The starting number has to be between 7 and 9 ex: 7XXX or 9XXX
      /!\ This is hardcoded to start with the number 7 and cannot be changed(V16), the use of system parameters to define it is obsolete 

    5. The last number of the Datev Customer/Vendor number is the ID of the record

/!\ If you still want to define the starting number of the Customer/Vendor Datev number you will have to define it manually on all contacts or with an import. You therefore prevent Odoo from creating it automatically. 

 /!\ Beware /!\ When deciding to use the automatically generated numbers from Odoo that they should never be the same as existing ones from your previous software.

EX: 

  • Datev customer number from previous software = 100000156
  • In Odoo the 156 contact created will also be 100000156

=> This should not happen otherwise Datev cannot make the difference between the two contacts (No warning at the moment in Odoo to prevent this case).
The only solution is then to manually create the numbers or by import until the combination created by odoo will stop matching your existing ones.
If you only create contacts manually or by import and it has the same Datev number as an existing contact in the DB, a blocking warning will pop up.


   3. Check the list of taxes created automatically by odoo and see if they are correct

  • Check the tax computation
  • Check the label on the invoice
  • Check the tax grid number
  • Check the National taxes and the international taxes
  • Check the taxes for the sales of physical products, services, etc.


   4. Check the BU-Schlussel on tax created to be sure it is the correct one

Video for V16


   5. Register the accountant “Consultant Number” (Beraternummer) and the “Client Number” (Kundennummer) for the Datev export

Video for V16


   6. Register the information for the Elster export (St.-Nr. = Steuernummer)

Elster is a software created by the German government in order to allow companies to digitally send their tax report and all companies HAVE to post their tax report on Elster.
In Odoo we have an XML file that can be imported into Elster by connecting with your credentials. 

There are 2 numbers that exist, one that people see in their official documents and one that is one used in the “backend” between softwares to communicate. 
The second one is actually the first one but going through some modifications.
In odoo you need to register your first number and not the second one because when you export the XML file, Odoo converts that number into the second one.

/!\ If the XML generated by Odoo is not correct and that you are using a tax adviser using Datev, you can always send all GL information (export from Odoo, see below) to your tax advisor and in Datev they have an automated connection with Elster. 

Video for V16

   7. Register the Tax Identification number “Tax ID” (USt-IdNr. = Steueridentifikationsnummer)

Goes in the footer of the PDF as “VAT:...”

   8. Register the Company taxpayer identification number “W-IdNR.” (W-IdNr. = Wirtschafts-Identifikationsnummer)

   9. Register the “Company ID” (Unternehmens-ID)

Goes in the footer of the PDF as ”HRB Nr:...”

   10. Import your existing contact

In Datev you need to differentiate between a customer and a vendor, this is done with a specific number. Therefore in Odoo that difference is made on the contact form. If you have existing contact in your previous software you already have those numbers. You therefore need to import those values in Odoo when importing the contacts.

    1. Get the Datev customer and/or vendor number from your previous software and import it in odoo

=> Refer to point 2 for more information

           b. Import the nominals on the contacts if the default ones are not correct

=> Before changing the default nominal from the contact you need to:

        • Activate debug mode
        • Go to Settings > Technical > System Parameters
        • Add a new parameter
        • key: l10n_de.force_datev_id
        • value: 1

This is to make sure the Datev number is correctly computed (this will be pushed as part of the German localization for the future so this is for V16 for the moment)

   11. Import your initial accounting balance

Just like any other Go Live you need to import your initial accounting balance but when you will do your first Datev export from Odoo there will be information missing as you don’t have the previous invoices in Odoo.

Here are the steps for your first Datev Export:

        • Export your Datev zip file from the General ledger in Odoo
        • Export your Datev file from your previous software for the same period
        • In the excel exported from Odoo you need to remove manually the lines that are coming from the initial balance import
        • You copy the lines from the excel export from your previous software and paste them in the excel exported from Odoo.
        • Your Datev file can now be imported in the Datev platform (if there is any concern about not being allowed to modify the export, you can just copy the data in a completely new excel file and therefore no change have been recorded in the metadata of the excel and then no risk to be flagged as a modified document)

   12.If you use the Cash discount (Skonto) (From V16)

Cash discount is an incentive proposed to a customer to pay the Invoice before the due date. The seller will give a discount if the customer pays the invoice in advance.

    1. Go in the settings of the accounting app => Cash Discount Tax Reduction and select “Never” (From 16.2 Accounting app => Payment term)
        • Never = Tax is always due (e.g: Germany, Netherlands)
        • On early payment = The tax of the discount should be deducted (e.g.: France , Luxembourg)
        • Always (upon invoice) = The tax of the discount is deducted at the invoice creation (e.g: Belgium)

           b. Go in accounting app => Payment Terms 

        • There is an already created example of 30 days, 2% discount if early payment under 7 days
        • The column “Discount %” is the percentage offered
        • The column ‘Discount Days” is the number of days to get the discount

          c. Go in accounting settings => Default Accounts

Select the default account you want for the early payment discount ( see screenshot: last one on the right)


Video on how it works in V16 (From 16.2 you can configure it directly on the Payment terms)


   13. How to deal with the German accounting report (Datev & Elster)

    1. Get the Elster reports

In Odoo to send your Tax report to Elster you need to download an XML file from the tax report in Odoo, here is a video on how to do it.

Video V16 

           b. Get the Datev export (Video V16)

      • Export the journal entries
      • Export the PDF of the invoices

When you export the Datev + Atch (ZIP) odoo will export all attachments from the invoices. Before exporting your zip, you need to clean your list of attachments otherwise you will also export attachments that are not needed.

Here a video on how to clean your attachments export: Video V16

      • Get the list of customers and vendors
      • Export the expenses attachments (Not possible at the moment, a task as been created internally in odoo to make it possible, no deadline yet)

   14. EU Intra-community Distance selling (OSS)

If you sell (e-commerce, other electronic services) across the border of your country in Europe for an amount of more than 10.000 EUR (net) to private individuals (B2C), the sales tax is due to the country you delivered the product or it was consumed. You basically need to use the tax of the country you are selling to and not the one of your country anymore.
You therefore need to declare your taxes to the correct country and pay them. In order to do so, instead of contacting each country separately to declare your taxes, the EU invented the One-Stop-Shop (OSS). 
The OSS allows you to declare your taxes to only one single point of contact. Pay attention ! You either declare individually to each country or you use the OSS, mixing both is not permitted.
In Germany you can publish your OSS directly on Elster.de, here is a guide for it.

Here is a video on how it works in Odoo: V16

   15. If you use POS 

In Germany you need to send directly to the government information from the sales you did in your Point of Sales. There is information from the receipt and what was sold in order to make sure that people are not doing tax avoidance.

At Odoo we connect to the German Government through another software called Fiskaly.

Here is a video on how it works in Odoo: V16

BEWARE !!  When you connect with Fiskaly as you connect with your company's information you can connect only once. This means you cannot try to connect on a test DB otherwise you cannot use your information on the production DB !


   16. Storno (Credit Note)

It is a specific German and Austrian mechanism that is used when "Canceling" an invoice. In all companies you might do an invoice with mistake partially or totally so you need to be able to correct that by creating a credit note. Normally when you create a credit note you create a journal entry that is reversing your initial invoice by balancing the amount in active by the same amount in passive and vice and versa.

With Storno you also reverse your initial invoice but by balancing the amount by writing a negative amount instead.


Here is a video of the difference of using Storno or not and how to configure it : V16


   17. Xrechnung (Electronic Invoice)

XRechnung is a standard defined by the German Government in order to standardize business document (invoice, credit notes, etc.) across all software so that software can communicate seamlessly together. The file is an XML file that is created at the moment of the creation of the invoice.

In Odoo you also have that feature, Go in Accounting => Journals (invoice) =>Advanced setting Tab => Electronic Data Interchange.


Once you checked the box of the Xrechnung, every time you click on "Confirm" on an invoice, the XML file is created and can be found in the attachment of the invoice. If you send your invoice in Odoo (clicking on button "send"), Odoo will automatically send the PDF and the XML file.


     2) PDF

German specificities:

      • DIN5008

In Germany they have standardized the layout of documents that are exchanged between businesses in order to facilitate the communication. 
One of the main differences between the DIN and Belgium for example is that the customer address is on the left of the document because the envelope in Germany has their window on the left while in Belgium it is on the right.

In Odoo by default when you install the German accounting you have the DIN installed as well. 

To select the template you need to go in the app “Settings” => Document layout => configure Document layout.

Beware that some information is fixed on the PDF and cannot be modified without going into the code. Video V16

      • Performance Date on invoice

We need to show on an invoice the date of the delivery of the product or of the service. However there is some flexibility as the customer needs to be able from an invoice to find the information to which delivery it is linked to and therefore the date of delivery.

    • Service delivery

​a) If the service is done before or at the time of the invoice

        • If your invoice date is the same as the performance date, you can simply add by default a text saying : “The delivery date corresponds to the invoice date”
        • You mention the performance date on the invoice but you don’t need to be accurate to the day, if you write the month of the delivery date it is enough. 

A feedback task has been created at Odoo but in the meantime here is a valid workaround V16

​b) If the service is done after the time of the invoice

As you didn’t provide the service at the moment of the invoice, you cannot have the date of performance of the service therefore you don’t need to add it on the invoice.

​c) If we invoice partially the service (down payment)

As you normally invoice a down payment before delivering the service, you cannot have the date of delivery therefore you don’t need to put the performance date on the invoice.

    • Physical product delivery

​a) If the delivery is done before or at the time of the invoice

        • You mention clearly the reference number of the delivery order where the delivery date is clearly mentioned : “ The delivery note date corresponds to the the service date”
        • If your invoice date is the same as the delivery date, you can simply add by default a text saying : “The delivery date corresponds to the invoice date”
        • You mention the delivery date on the invoice but you don’t need to be accurate to the day, if you write the month of the delivery date it is enough.

Here is a valid workaround for V16

In V17 you now have the delivery date directly on the invoice (it is in the other info tab on the invoice form view).


The drawback of this solution is that you have only one delivery date even if you delivered more than one time for the same invoice. 

Nonetheless, there is a manual workaround that could help.

​You can create a M2M to the stock.picking in order to allow you to select manually the deliveries you want to show on your invoice. In order to ease your life when selecting manualy the deliveries within the M2M, you can add a dynamic domain so that you see only the deliveries from the same SO as the invoice. 

Here is the code for the dynamic domain to add to the M2M field: 

​domain="[("origin", "=", invoice_origin)]"

​b) If the delivery is done after the time of the invoice

As you didn’t deliver the product at the moment of the invoice, you cannot have the date of delivery therefore you don’t need to add it on the invoice.

​c) If we invoice partially the delivery (down payment)

As you normally invoice a down payment before delivering the service, you cannot have the date of delivery therefore you don’t need to put the performance date on the invoice.


     3) Translation

Odoo is coded in English therefore other languages are translated, by default Odoo has German as translation. Nonetheless it happens that with new versions translations need to be adapted or customers want to change some terms by something more related to their sector.

/!\ Beware in the V16 some terms in German, mainly the upper part of your PDF (see example in video about PDF in section above), are not translatable because they are actually hard coded with python (computed fields). This means that being able to change the translation specifically for a customer is going to require development and most probably the need to move to Odoo.sh which is not really worth the cost.

(/!\ In V17 this should be changed)


How do the translations work in Odoo (V16) ?

  • Transifex

Transifex is a software that is used by Odoo in order to manage the standard translations for all Databases. This is accessible by people from Odoo of course but also from anyone else. This means that anyone can contribute to translations even though we have translators for the German language at Odoo. 
By creating an account on Transifex you can propose new translations that will then be reviewed by our translators and every Monday the new translations are pushed on all databases (you need to update your language in your own DB)

    1. You can create an account on Transifex : https://explore.transifex.com/odoo
    2. Here a video on how to do it Video
  • PO file

If you want to change specific translations for your DB you need to do an export/import of the PO file which contains the translations of most terms.

This kind of files are not so easy to read so you can use a software to help you such as Poedit

Here is a video on how to do it : Video V16

  • Fields label translations 

Video V16

  • Views Translation

Video V16

  • Field value translation (Product name translations for example)

Video V16

     4) Certification GOBD

Odoo is on the way to be certified for the V16, it is currently audited.

     5) Website

      • Google font and being GDPR compliant 

In Germany they went further in the application of the GDPR compliance which means that google fonts on the website can be used but only without the link to the US server. Indeed the goal is to prevent websites from using fonts that could send information to the US.

In order to prevent Odoo from being connected with the google server in the US here are the configurations:

Video V16 

You can use this website to test your own website compliance with the google font use: https://www.e-recht24.de/google-fonts-scanner

     6) ​Newsletter registration confirmation

A lot of German customers are asking to have a validation by the recipient of a newsletter that he really wants to be added to the mailing list.

We have 2 options to do this:

Video V16 (1)

Video V16 (2)

A feedback has been made to the R&D and a marketing automation action should be created and added in standard in the future


Avatar
Discard

Thank you for your very detailed answer!

Great work! I am evaluating Odoo at the moment and wondering about how 'Company ID' (Nr. 9) is being handled for German companies.
When inputting the 'Company ID' Odoo assumes that the company would be handled by 'Handelsregister Abteilung B' (HRB). In my case, I need to set up a 'UG (haftungsbeschränkt) & Co. KG' which is listed in 'Handelsregister Abteilung A' (HRA). That way it seems not possible to use a 'Kommanditgesellschaft' in Odoo.

But even more severe: The Company ID should never be sufficient regardless of the type of company, because the registration court (→ 'Registergericht') will always be necessary.

Of course, in my case, the 'UG (haftungebschränkt) & Co. KG' needs a lot more mandatory information. Which could of course be added in the footer. But this does not seem to be the right place.

Are other Odooers here, who are using a partnership (→ 'Personengesellschaft') with a corporation (→ 'Kapitalgesellschaft') as complementary (→ 'Komplementär')? How are you handling proper company details in letters and emails?

Author

Hello Lukas, you could add the information in the footer like you mention but also you could just change the translation of the HRB so that is becomes UG.
You mention that the some information to be placed in the footer doesn't seem to be the correct place, why not ?

Thank you so much for creating this post and adding all the supplementary videos. A must read for anyone using Odoo in Germany!

Hello Damien, what I meant by the footer not appearing to be 'the right place' is the fact that Odoo asks for a 'Company ID' but does this in a way, that is not sufficient (because any registered company would require at least the registration court) nor feature complete (because different companies require different mandatory information).

In my opinion the field 'Company ID' should be either removed or should include all the fields being necessary as structured data.
Putting that responsibility to the user by recommending to use the footer, is also fine; but then, asking for the 'Company ID' does not make much sense.

Is there a GitHub issue about that? I may be able to contribute some knowledge about this topic.

Author

I totally agree with you Lukas and feedback have been made to change it but it takes a bit of time to adapt it as we need to be sure we have all info and thereore take the best decision.
There is a task in the R&D at the moment to change this for future version, I cannot guarantee that it will be released for odoo 17

Best Answer

Nice to read that odoo is on the way to certificate v16 GoBD. Are there any updates on this?

Avatar
Discard
Author

It is still ongoing it should be done for the end of the year

Thank you for your answer Damien, that sounds wonderful. I still have three questions:
- Will every new version of Odoo be certified or does the certification also be applied for v17?
- Is the certification valid regardless of deployment (Saas, SH, Onpremise)
- Understandably, the certification will not be part of the community version, right?

Author

The certification needs to be done for each version. This means that every year they will need to analyse the new version as each version might have changes so for now we are going through the certification for the V16.
As it is the first time we go through the process of being certified it takes more time because they need to check everything.
For the next version it should go faster but so far we are only going through the certification for the V16
- The certification will be valid for Saas, sh and I guess for On premise also as they validate the features and the features remain the same whatever the platform
- I cannot answer for sure but I guess indeed that the certification will only be valid for the enterprise version as it is a costly process that analyse features in the software and that the community version has less features...at least for the moment

Thank you for your information, we will be very happy if Odoo is certified and is more accepted by the auditors.

Best Answer

Hey Damien, first: Thanks!

Is there any updated Version for V17?

Avatar
Discard
Related Posts Replies Views Activity
1
Jul 25
3993
0
Feb 24
1927
1
Feb 24
4497
0
Feb 24
2298
1
Aug 23
21524