Skip to main content

Generate invoices in PEPPOL 3.0 BIS dialect

Project description

Beta License: AGPL-3 OCA/edi Translate me on Weblate Try me on Runbot

With module Account Invoice UBL, invoices are generated according to generic UBL rules.

In Europe, some countries use the PEPPOL 3.0 BIS standard as a more strict subset of UBL.

With this module you can specify some or all of your invoices to be generated and validated according to this stricter standard.

Table of contents

Configuration

  • Go to menu Invoicing > Configuration > Settings > Invoicing, under Electronic Invoices.

  • Formulate a domain for which invoices the dialect should become PEPPOL. By default it is [], so all UBL invoices will be PEPPOL. If you want this only for Belgian partners, then you can fill here for example: [(‘partner_id.country_id.code’, ‘=’, ‘BE’)] Or you can choose to enable this only for selected partner ids.

  • You can configure a default tax to use in case an invoice line has no tax specified. This is necessary for example in case of an NGO to satisfy business rule BR-CO-18. Any tax you choose must also have a UNECE tax type (eg. VAT) and tax category (eg. “Services outside scope of tax”) defined.

  • You can configure a default unit of measure, of which the UNECE code will be used in case an invoice line has no unit or product unit. A typical default unit could be the Odoo ‘unit’, configured with a UNECE code of UN, XUN or C62. This is to satisfy rule BR-23.

  • Go to menu Contacts Fill the field coc_registration_number for your own company’s partner record and for those partners that you want to send e-invoices to.

  • Go to menu Contacts > Configuration > Localization > Countries On any country relevant for invoice traffic, configure the correct PEPPOL EAS id. For the Netherlands, this is for example 0106, which stands for Dutch chamber of commerce number.

  • Either: make sure that every invoice has a bank account filled in; Or: make sure that your payment modes have a fixed connection to a bank account. To do the latter: Go to menu Invoicing > Configuration > Management > Payment mode Per payment model, set the field bank_account_link to fixed

Usage

In the invoice form click on button Send & Print.

If the invoice matches the configured domain for PEPPOL, the invoice will be generated and validated according to the stricter PEPPOL 3.0 BIS standard.

The validator on https://test.peppolautoriteit.nl/validate can be used to test the validity of the generated XML file. There are other online validators around as well.

Known issues / Roadmap

  • Currently, the user needs to configure the PEPPOL EAS id for each country. For the Netherlands, this is for example 0106, which stands for Dutch chamber of commerce number. During review, it was noted that (defaults for) these codes could be mapped automatically upon installation of the module, using a post-init hook or a noupdate=1 XML file. This could still be done, saving the perhaps not so tech- or PEPPOL-savvy user some configuration.

  • Currently, this module defines allowed EAS codes from a CSV file. But, other modules could also benefit from this data. So the data could be moved to a separate module in the community-data-files repository.

  • When adding a delivery partner to an invoice, some PEPPOL warnings arise about DeliveryParty that should not be included. This is non blocking but it is nice if we could also add a clause in the module to remove this.

  • A unit test should be added that actually verifies against PEPPOL and not only against general UBL. This could consist of:

    • Choose a default tax and UoM for this module in res.config.settings

    • Create an outgoing invoice on the main company to some partner

    • On the main company’s partner record, choose any EU country, set a VAT number and a CoC number

    • On the partner record that is being invoiced, do the same.

    • On the res.country records that are being used by these partners, configure a valid PEPPOL EAS code.

    • On both involved partners, configure a bank account.

    • The payment mode that is selected on the invoice should have a fixed link to a bank journal.

    • On this bank journal, select a bank account of type IBAN.

    • Create a tax and selecting a UNECE tax category (eg. VAT) and a tax type (eg. S)

    • The invoice lines should have this tax defined.

    • Validate the invoice, generate the XML, and pass it through the validator.

  • This needs to be tested more thoroughly on credit/refund invoices, and purchase invoices.

  • Currently, the module fill in the due date under PaymentTerms, but we could prefer the Odoo payment terms field if it is filled.

  • Upon clicking Print and Send button on invoice, when an error is encountered, the popup will coincide with the mail.compose popup. Improve the UI experience to the user here.

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback.

Do not contact contributors directly about support or help with technical issues.

Credits

Authors

  • Sunflower IT

Contributors

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

This module is part of the OCA/edi project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

File details

Details for the file odoo13_addon_account_invoice_ubl_peppol-13.0.1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for odoo13_addon_account_invoice_ubl_peppol-13.0.1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dab5cfca15b930f513e77b182a0149dcef256b1550a79d15b5a7c7d41a490679
MD5 4cd94e7666704aa7b232bb9c08ce6942
BLAKE2b-256 4b1d6bb6a0f45a8654a611e1fca79fe8e73554eb47b650920b2ecd1b1d4ada77

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page