📖 User Documentation
📖

DATEV <> Odoo integration : User documentation


Product description can be found on the page above

The following documentation will provide you with the information you need to use the much. DATEV <> Odoo integration. The objective is to get you familiarised with the integration by providing relevant information as to the main business processes it covers, and how you can configure it to best suits your needs.

Some of Odoo's standard features may be included in this documentation. For Odoo’s standard functionalities and instructions, we recommend you check out Odoo’s official tutorials. The same applies to DATEV itself, where we recommend you to check out the official website of DATEV and it's help center.


Pre-requisites


Services subscription (only for API)


DATEV Services

To be able to send transaction data, master data and PDF documents to DATEV data center, you must first subscribe to the following data services : 

You also need a way to authenticate to DATEV, such as DATEV SmartCard / DATEV mIDentity or DATEV SmartLogin.

much. Subscription 

When you purchase the DATEV API module from much. you'll receive an API key by email (1 by Odoo instance used)
Store this key securely, as it will be needed during the integration setup.


Odoo dependencies


To use the much. Odoo to DATEV Integration please make sure that in your database you have the following Odoo standard modules : 


  • Accounting - account_accountant
  • Germany Accountingl10n_de


Please note that the datev export must be used with the tax rounding per line. Global tax rounding is not supported.



Install the modules


Install the integration modules


From the Apps, install the following modules :

  • much_account_datev_base
  • much_account_datev_csv_export
  • much_account_datev_csv_import
  • much_account_datev_xml_export
  • much-integration-hub (*)
  • much-datev-integration (*)

(*)Only if you purchased the API export.

Not sure how to install modules in your Odoo database? Please check out the article on How to install modules.

Activate the integration (Only for API)



  • Go to Integration Hub > Settings and make sure the following settings are enabled : 
    • iHub Logs
    • iHub Jobs 
    • iHub Queue

much. Integration Hub is the base for all much. integrations. Make sure to check out the complete Integration Hub documentation here.


  • Go to DATEV Export, scroll to the bottom of the page and add the Subscription key received by email for the related Odoo instance.

  • Back to the Integrations tab, click New
  • Add an integration name.
  • In the Integration Type field, select DATEV.
  • In the Company field, select the Odoo company that this integration will be applied to. 

If you need to use the DATEV integration for multiple companies or branches, you need to create a new integration for each.

  • Click Save.


Configuration

The much. Odoo to DATEV Integration allows you to export master data, transaction data and PDF documents. The export can be configured to match your accounting needs.

Consultant & Client number


To start using the integration, as well as export DATEV compliant files, you must fill in your DATEV consultant and client number. To do so : 

  • Go to Settings > Users & Companies > Companies.
  • In the company form, fill out the L10N De Datev Consultant Number and L10N De Datev Client Number fields.

You can find your DATEV Consultant & Client numbers in your DATEV account, or by asking your tax advisor.

  • Click Save.


 DATEV Settings


To configure the structure of the file that will be sent to DATEV via API or manually exported, please navigate to Settings > DATEV Export.

General Accounts

  • Length General Accounts : configure the length of the account codes. The length must match the one used in DATEV by your tax accountant.  If the code length has more digits than in Odoo, the account code will be extended by 0 in the end.

Settings for account length in Odoo

Settings for account length in DATEV




Example of export with length 4 

Example of export with length 5 


Personal Accounts 

  • Direct bookings : exports entries booked directly on receivable/ payable accounts instead of the partner account.
  • Receivable format : range at which the generation of debtor numbers should start.
  • Payable format : range at which the generation of creditor numbers should start.

                                Example of DATEV partner identifiers for ranges 10,000 and 70,000

  • DATEV partner number generation : select if you want the number automatically generated on posting of first entry (default) or during the first export.

The generation will automatically set the number to the lowest available number within the range.


You can also generate this numbers on a given partner by going to the contact actions and clicking "Generate Customer Identifier" (debtor number) or "Generate Supplier Identifier" (creditor number)  : 

 



Column Configuration

The module allows you to edit the columns that will be exported in the accounting entries and master data files.

  • List of columns in the DATEV export for accounting entries.

By default, all the field supported by DATEV are present as headers. The integration currently assign values to the following fields : 

Col.Header (DE)Value Name (UI Display)Technical Value NameOdoo Field & Export Logic
AUmsatz (ohne Soll/Haben-Kz)Bruttowertgross_valueThe line's gross amount (total with tax), formatted as a German decimal (e.g., "119,00").
BSoll/Haben-KennzeichenSoll/Haben Kennzeichensoll_habenA letter indicating debit/credit: 'S' (Soll/Debit) or 'H' (Haben/Credit).
CWKZ UmsatzWährungcurrencyThe 3-letter currency code (e.g., "EUR") from the journal entry line.
DKursKursrateThe exchange rate, formatted as a German decimal. Only filled if the line's currency is different from the company's currency.
EBasis-UmsatzBasisumsatzamount_currencyThe line's amount converted to the company's base currency. Only filled for foreign currency lines.
FWKZ Basis-UmsatzFremdwährungforeign_currencyThe company's currency code (e.g., "EUR"). Only filled if the line's currency is not the company currency.
GKontoKontoaccountThe account code for the journal item line (e.g., "4400").
HGegenkonto (ohne BU-Schlüssel)GegenkontocounteraccountThe counter-account code (Gegenkonto), which is the move's main balancing account (e.g., the partner's AR/AP account).
IBU-SchlüsselBuchungsschlüsselbookingkeyThe DATEV Tax Key (BU-Schlüssel). This is automatically calculated based on the line's tax configuration.
JBelegdatumDatum (DDMM)date_ddmmThe Belegdatum (document date) from the journal move, formatted as DDMM (e.g., "2810").
KBelegfeld 1Rechnungsnummer für Auszifferungreconciled_entry_numberThe reference for clearing/reconciliation. For bank entries, it's the reconciled invoice number. For purchase bills, it's the Vendor Reference (ref).
LBelegfeld 2DatumdateThe line's Due Date (date_maturity). It's only filled if the account and counteraccount are the same.
MSkontoSkontodiscount_amount_currencyThe discount amount on the line (discount_amount_currency), formatted as a German decimal.
NBuchungstextRechnungszeilennameaccount_move_line_nameThe Label from the journal item line. If multiple lines are grouped (e.g., same product and tax), their labels are joined.
O-S...(empty)Not set by default.
TBeleglinkGUIDdatev_guidThe Beleglink. This is the unique GUID from the invoice's datev_guid field, formatted as BEDI "...".
U-AJ...(empty)Not set by default.
AKKOST1 - KostenstelleKOST1datev_analytic_plan_acc_1The analytic account code mapped to KOST1 in the DATEV settings.
ALKOST2 - KostenstelleKOST2datev_analytic_plan_acc_2The analytic account code mapped to KOST2 in the DATEV settings.
AMKost-Menge(empty)Not set by default.
ANEU-Mitgliedstaat u. UStIDEU-Mitgliedstaat u. UStIDpartner_vatThe partner's VAT number. Only filled if the partner is in a non-German EU country.
AOEU-SteuersatzEU-Steuersatzaml_tax_idsThe tax rate (e.g., "19,00"). Only filled if the partner is in a non-German EU country.
AP-CR...(empty)Not set by default.
DKLeistungsdatumLeistungsdatumservice_dateOptional: Not implemented by default (provides an empty string).
DLDatum Zuord. SteuerperiodeDatum Zuord. Steuerperiodetax_report_dateOptional: Not implemented by default (provides an empty string).
DMFälligkeit(empty)Not set by default.
DNGeneralumkehrGeneralumkehrgeneral_reversalGeneral Reversal flag. '1' if it's a reversal move with a matching total, '0' otherwise.
DO-DR...(empty)Not set by default.
DSEU-Mitgliedstaat u. UStIDEU-Mitgliedstaat u. UStID (Company)company_vatThe company's VAT number. Only filled if the partner is in a non-German EU country.
DTU-Steuersatz (Ursprung)U-Steuersatz (Ursprung)fiscal_taxThe original tax rate (as a German decimal) before any fiscal position mapping was applied.
DUAbw. Skontokonto(empty)Not set by default.

Additional Accounting Entry Fields

These are the fields available in the module that are not included in the default export setup. You can add them to your export configuration.

Value Name (UI Display)Technical Value NameOdoo Field & Export Logic
Auftragsnummerorder_numberThe Sales Order name (invoice_origin) associated with the line.
BuchungssatzreferenzbookingreferenceThe Belegfeld 1 value. For purchase bills, this is the ref (Vendor Reference). For all others, it's the Odoo invoice/move name.
ZahlungsreferenzpaymentreferenceThe Payment Reference (payment_reference) field from the invoice.
Journal IDjournal_idThe database ID of the Odoo Journal (e.g., 7).
Journalnamejournal_nameThe user-facing name of the Odoo Journal (e.g., "Customer Invoices").
Kontonameaccount_nameThe user-facing name of the line's account (e.g., "Product Sales").
Lieferadresse (Land)shipping_address_countryThe 2-letter country code of the partner's shipping address.
Partnernamepartner_nameThe name of the partner on the journal move line.
Rechnungsaddresse (Land)invoice_address_countryThe 2-letter country code of the partner's invoice address.
Rechnungsnameaccount_move_nameThe Display Name (display_name) of the journal move (e.g., "INV/2024/00001").
Rechnungsnummerinv_numberThe Invoice Name (name) of the journal move, with spaces removed.
Kostenstelle 1 (Code)cost_centre_1Deprecated. Provides an empty string.
Kostenstelle 2 (Code)cost_centre_2Deprecated. Provides an empty string.
Kostenstelle 1 (Name)cost_centre_1_nameDeprecated. Provides an empty string.
Kostenstelle 2 (Name)cost_centre_2_nameDeprecated. Provides an empty string.
DateinamefilenameThe filename of the system-generated PDF attachment for the invoice (invoice_pdf_report_id).
Rechnungsdatuminvoice_dateThe Invoice Date (invoice_date) from the move, formatted as DDMM.
Buchungstypbooking_typeThe booking type. "AA" (down payment), "SR" (customer invoice), or "SO" (other).
  • List of columns in the DATEV export for master data.

By default, all the field supported by DATEV are present as headers. The integration currently assign values to the following fields : 

Col.Header (DE)Value Name (UI Display)Technical Value NameOdoo Field & Export Logic
AKontoKontocodeThe partner's DATEV Identifier (e.g., 10001 or 70001) from l10n_de_datev_identifier_customer or l10n_de_datev_identifier.
BName (AdressatentypUnternehmen)Name (Firma)company_nameThe partner's Name, but only if the partner is a Company.
CUnternehmensgegenstand(empty)(N/A)Not set by default.
DName (Adressatentyp natürl. Person)Name (Person)person_nameThe partner's Name, but only if the partner is an Individual.
EVorname (Adressatentyp natürl. Person)Vornamefirstname_personThe partner's First Name (assumes "Firstname Lastname" format). Only for Individuals.
FName (Adressattyp keine Angabe)(empty)(N/A)Not set by default.
GAdressatentypAddressatentypnaturalThe partner type: '1' for Individual (person) or '2' for Company.
HKurzbezeichnung(empty)(N/A)Not set by default.
IEU-LandEU-Landcompany_country_codeThe partner's 2-letter Country Code. Only for Companies.
JEU-USt-IdNr.EU-USt-IdNr.company_vatThe partner's VAT number without the country prefix. Only for Companies.
KAnredeAnredepartner_titleThe partner's Title (e.g., "Mr.", "Mrs.").
L-N...(empty)(N/A)Not set by default.
OAdressartAdressart (STR)hardcoded_strA hardcoded value that always exports the string "STR".
PStraßeStraßestreetThe Street from the partner's address.
QPostfach(empty)(N/A)Not set by default.
RPostleitzahlPLZzipThe Zip/Postal Code from the partner's address.
SOrtOrtcityThe City from the partner's address.
TLandLandcountryThe 2-letter Country Code from the partner's address (e.g., "DE").
U-Y...(empty)(N/A)Not set by default.
ZKennz. KorrespondenzadresseKennz. Korrespondenzadressehardcoded_1A hardcoded value that always exports the number '1'.
AA-IT...(empty)(N/A)All other columns up to "Letzte Frist" are not set by default.

Additional Partner Data Fields

These are the fields available in the module that are not included in the default export setup. You can add them to your export configuration.

Value Name (UI Display)Technical Value NameOdoo Field & Export Logic
EmailemailThe partner's Email (email).
Nachnamelastname_personThe partner's Last Name (assumes "Firstname Lastname" format). Only for Individuals.
SteuerIDvatThe partner's VAT number (vat).
TelefonphoneThe partner's Phone number (phone).
WebsitewebsiteThe partner's Website (website).
IBAN 1...10iban_1...iban_10The IBAN (acc_number) from one of the partner's saved Bank Accounts (up to 10).
BIC 1...10bank_1...bank_10The BIC/SWIFT code (bank_id.bic) from one of the partner's saved Bank Accounts (up to 10).
Lastschrift IBAN 1...10dd_iban_1...dd_iban_10The IBAN (partner_bank_id.acc_number) from one of the partner's active SEPA Direct Debit Mandates (up to 10).
Lastschrift ID 1...10dd_identifier_1...dd_identifier_10The Mandate Reference (name) from an active SEPA Mandate.
Lastschrift Startdatum 1...10dd_start_date_1...dd_start_date_10The Start Date (start_date) from an active SEPA Mandate.
Lastschrift Enddatum 1...10dd_end_date_1...dd_end_date_10The End Date (end_date) from an active SEPA Mandate.


Analytic Account - Export

In the accounting entries export file, you can use columns AK (KOST 1 - Kostenstelle) and AL (KOST 2 - Kostenstelle) to assign cost centers to your entries.

Since DATEV only allows the configuration of 2 cost centers, we allow to configure the corresponding Analytic Plans in Odoo. 

Configuration of cost centers in the DATEV export settings

Cost assignment on a vendor bill

Code of the analytic account in the DATEV export

  • After choosing the corresponding Odoo plans, you can't edit the configuration

  • DATEV only allows a 100% cost distribution, which means that if you have more than 1 analytic plan assigned to an entry, you must split the entry in multiple lines according to the analytic % to reflect the correct distribution in DATEV


✅ 




Disable Automation

By default, if you manually remove taxes on an entry booked on an automated account, we will add 40 as value in column I (BU-Schlüssel). This will prevent that it will be added au in DATEV again, due to the automated nature of the account.


 

Integration Settings (Only for API)


Now that the DATEV structure has been configured, you can configure the integration, by going to Integration Hub > DATEV Integration > Integration Settings.


Connection Settings

  • Make sure that your consultant and client number are correct. If not, you can click on Company Settings to adjust them.

Export Settings

  • Export Frequency : choose at what frequency the automated action that will send your accounting entries and master data will run.
  • Journals to Export : choose which journals should be exported to DATEV.
  •  Data Selection for Export: Within the integration settings (Integration Hub -> Integrations -> DATEV -> Export Settings), you can precisely select which types of data to include in the API export:
    • Export Master Data (Partners)

    • Export Accounting Entries (Journal Entries)

    • Export PDF Documents (Invoice/Bill PDFs)

Note: If no data type is selected, the integration will be automatically disabled.

  • Configurable Export Start Date:
    • A new Export Start Date field has been added under Integration Hub -> Integrations -> DATEV -> Export Settings.

    • This date defines the earliest point from which automated (scheduled) exports will gather data. 

  • The PDF Export option (Optional/Mandatory) determines if the entire export job fails when a required PDF is missing.

  • A PDF Size Limit can be set to prevent attempting to upload excessively large files.

  • When Export PDF Documents is enabled, you can now configure the Category, Folder, and Register used when uploading PDFs to DATEV Unternehmen Online (Belegverwaltung) via the API. These settings are found under Integration Hub -> Integrations -> DATEV -> Export Settings.



Authenticate to DATEV (Only for API)


As a last step to enable the integration to run, you must authenticate to DATEV.  

Get your access token

  • Go to Integration Hub > DATEV > Integration Settings
  • Click Get Access Token.


  • Login to DATEV with your preferred login method.

  • Once login is successful, the token status will be green

  • You can revoke the access to DATEV anytime by clicking "Revoke Tokens".

Enable the integration

  • Once you are connected to DATEV, simply click Enable Integration. The integration status will go from Inactive to Active.
  • You can turn off the integration at any time, either by clicking Disable Integration or by clicking Revoke Tokens. 

The integration will not get enabled if you have not subscribed to the correct DATEV services as stated in the Pre-requisites part of the documentation.

Integration installed, configured and enabled!


Usage


Automated DATEV API Export


Scheduled Exports

As mentioned before, the integration will automatically send your financial data and related PDFs on the configured frequency and journals. 
If needed, you can also trigger the API export manually

  • Go to Integration Hub > DATEV and click Export via API (you have to be authenticated to see the action) 

  • Select the journals and timeframe you want to export to DATEV.

  • Click Export.

  • After a few seconds (or minutes if you have a lot of data), you can go to the logs to see the status of your export : 


Error Handling


  • Email Notification for Critical Errors
The DATEV Integration module includes robust error handling to ensure you are promptly notified of critical issues. This is primarily managed through automated email notifications.

Configuration for Receiving Notifications

  1. User rights 

To ensure a user receives these critical error notifications:

    1. Navigate to Settings > Users & Companies > Users.

    2. Select the desired user.

    3. Under the "Access Rights" tab, ensure they are part of the Administration / Settings group.

    4. Verify that a valid email address is configured for the user.


2. Email scheduled action

Email sending is managed by a scheduled action called ' DATEV: Send Grouped Critical Error Emails' 
To find and manage this scheduled action, please navigate to your DATEV integration > Scheduled Actions : 



  • Fail safe for Token Failure

The connection to the DATEV API relies on OAuth 2.0 tokens that expire and need to be refreshed periodically. The system handles this automatically. However, if the token refresh process fails for any reason (e.g., a change in credentials, an issue on DATEV's side, or if the authorization was revoked), the following actions are triggered automatically:

  1. Email Notification: An email is sent to the system administrators, informing them of the token failure.

  2. Token Revocation: To maintain security, the module attempts to revoke the invalid token with the DATEV service.

  3. Integration Deactivation: The DATEV integration in Odoo is automatically set to an "Inactive" state. This prevents further failed attempts and makes it clear that user intervention is required.

  4. Scheduled Exports Deactivation: All scheduled exports are disabled. This prevents other integrations from failing if the same token error is occurring.

To resolve this, you will need to go back to the integration settings (Integration Hub > Integrations > Your DATEV Integration) and click Get Access Token again to re-authorize the connection and enable the integration. You then need to click "Re-activate Scheduled Exports" to enable the integration automated exports.



Manual DATEV Export


Our module also allows you to export DATEV data manually, either in CSV, CSV + PDFs, or XML. 

Single Record Export

You can export the DATEV file for a specific entry. To do so :

  • Go to Accounting, open the entry you want to export and click on Actions.

  • Click the Download DATEV File button, and in the pop up, select the desired format.

  • Click Download.

Single record export is available for all types of journal entries as well as master data!


General Ledger Export

You can also export all your entry for specific journals and timeframe. To do so: 

  • Go to Accounting > Reporting > General Ledger.
  • Use the filters to select your desired Journals and time period. By default, already exported entries will be excluded. If you want to include them, simply click the filter option and select Include Exported Entries

  • Once done with your filtering, click on the down arrow or testing wheel on the top left corner, and select Download DATEV File. 

  • In the wizard, select the desired format . 
  • The wizard shows the total move count and allows you to specify the range (e.g., 1 to 1000) for the current download batch.
  • A "Next Batch" button is provided in the wizard to easily proceed to the subsequent batch range after downloading the current one.
💡

Batch size can be configured from Settings >  DATEV Export Settings


Filtering Options (DATEV Export Fields)



Export Fields for Invoices & Journal Entries : 

- Export Date (`datev_export_date`): Shows when the record was last exported to CSV format

   ✅ Use this to filter records that haven't been exported yet

   📅 Helps track when exports occurred for auditing


- API Export Status (`exported_to_datev_api`): Indicates successful transfer via DATEV API

   ✅ Set to checked after successful API upload

   🔄 Prevents duplicate API transfers

  

- PDF Export Status (`pdf_exported_to_datev`): Tracks if invoice PDFs were uploaded

  📄 Only for documents with attachments

  ✅ Set after successful PDF upload to DATEV


- Transfer Attempted (`transfer_attempted`): Shows if an export was tried (even if failed)

   ⚠️ Useful for troubleshooting failed exports

  🔍 Helps identify records that need attention


- XML Export Status (`datev_xml_exported`): Marks completed XML exports

- XML Export Date (`datev_xml_export_date`): Timestamp of XML generation


Export Fields for Contacts (Partners):

- Export Status (`exported_to_datev`): Shows if contact master data was exported

- Export Date (`exported_to_datev_date`): When the contact was exported

- API Export Status (`exported_to_datev_api`): Indicates API transfer completion

DATEV Import


The module also gives you the ability to Import data that was previously exported from DATEV. This is useful for example when you first setup your Odoo, to register all your existing partners and their respective DATEV partner id. 

To import a DATEV file in Odoo : 

  • Go to Accounting > Accounting and click Import DATEV CSV. 

  • In the pop-up, fill the following information 

    • Counter-Account : Gegenkonto.
    • DATEV Import journal: If you don't have 1 created yet, you must create one and select the Is DATEV Import Journal option. 

    • Select the Year and Month of the Import.
    • Upload your file and click Import Files.