# Peppol Alerts, Attachments and Copy Guard

> Know when a Peppol invoice fails, is rejected or sits unconfirmed; send the invoice's own files inside the e-invoice; keep a copied database off the Access Point.

- **What it is:** Know when a Peppol invoice fails, is rejected or sits unconfirmed; send the invoice's own files inside the e-invoice; keep a copied database off the Access Point.
- **For:** Accounting/Accounting
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 79 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_peppol_plus
- **Not for:** It does not send invoices itself, and it does not change your Peppol registration.; It does not send to a contact's own Peppol address: Odoo always sends to the customer company.; It does not repair a connection a copy has already broken; it keeps copies from breaking it.
- **Manual:** https://docs.bambooforge.dev/bambooforge_peppol_plus/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_peppol_plus.action_bf_peppol_health_open
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_peppol_plus
- **Manual last updated:** 2026-10-18

---
# Peppol Alerts, Attachments and Copy Guard

Odoo sends invoices over Peppol for free, with its own `account_peppol`. What it
does not do is tell anyone when an invoice fails, is rejected or is never
confirmed; send the files already attached to the invoice along with it; or keep
a copy of the database from breaking the live connection. This app does those
three things, on top of Odoo's Peppol and without changing how Odoo sends.

This page is the complete manual.

## Install

1. Odoo's Peppol (`account_peppol`) must be installed and the company
   registered; this app needs nothing else.
2. Install **Peppol Alerts, Attachments and Copy Guard**.
3. Accounting administrators find **Peppol Health** under
   *Accounting > Configuration*.

## Alerts

Every 30 minutes the app looks at the customer invoices and credit notes of each
company whose Peppol connection can send, and turns what needs someone into a
**Peppol issue** activity on the invoice:

- **Not delivered**: Odoo marked the document in error. Its chatter says why;
  correct it and send it again.
- **Rejected by the customer**: the customer's system answered with a
  rejection. Odoo writes their reasons in the chatter.
- **Still in the send queue**: Odoo has not sent it after *Queued too long
  after* hours (default 6). The send queue may be stopped, or failing on
  something every time it runs.
- **No delivery confirmation**: the Access Point took the document but has not
  confirmed its delivery after *Unconfirmed too long after* hours (default 48).
  Odoo asks the Access Point for confirmations once a day.

The activity goes to *Peppol issues go to* or, when that is empty, to the
invoice's salesperson, else to the administrator. Odoo tells them the way it
tells anyone about a new activity: in Odoo, or by email if that is what they
chose. Each invoice gets one: the next run does not repeat it. When the invoice
recovers, the activity is marked done with what it is now; a different problem
replaces it.

While one of Odoo's three Peppol jobs (new documents, message status,
participant status) is switched off, a **Peppol issue** activity sits on the
company's contact, naming the jobs. Since 18.0 Odoo switches a job off by itself after it has failed five times over a week. It is marked done when they run again.

For invoices already waiting when the app is installed, the hours count from
their last change.

## Files inside the e-invoice

*Customer invoice > Peppol files*

Upload files there, or click **Add the files already attached to this invoice**
to take every file of the invoice that Peppol carries. They are embedded in the
e-invoice next to Odoo's own PDF every time it is sent: one invoice at a time, several together, or from Odoo's send queue.

- Peppol carries PDF, xlsx, ods, CSV, JPEG and PNG. Any other file stays out and
  the chatter says which.
- *Files inside the e-invoice, at most (MB)* caps the total (default 10). Files
  beyond it stay out, in the order they were added, and the chatter names them.
- A file already in the e-invoice is not embedded twice.
- Odoo embeds files in the formats it lets carry attachments (Peppol BIS Billing 3); for any other format the chatter says the format does not carry attachments.

## Copy guard

A copy of the database carries the live connection's credentials, and the
Access Point renews them about once a day. Whichever database calls it next
with the old ones gets "invalid signature" - usually production, the morning
after someone restored a backup to try something.

When the app is installed with a live Peppol connection, or within half an
hour of one being connected, it records the database's identity. A copy (duplicated, or
restored as a copy) gets a new identity; as long as it is not neutralised, every
live Peppol call from it is refused with a message that says why, and nothing in
the registration is changed. A neutralised copy is left alone: Odoo has already
put its Peppol in demo mode.

When a copy really becomes production (a move to a new server restored as a
copy), an accounting administrator clicks **This is the production database** on
*Peppol Health*. From then on the original can no longer send through Peppol
without errors. If the original database already reports "invalid signature", Odoo's own **Reconnect this database** in the Peppol settings renews its connection.

## Peppol Health

*Accounting > Configuration > Peppol Health*

- **Connection**: the company's Peppol status and mode (live, test or demo).
- **Documents that need someone**: how many invoices are in each of the alerts
  above, each with a button that opens them.
- **Odoo's Peppol jobs**: whether each job is on, and when it runs next.
- **Alerts and files**: the settings below.
- **Check now** runs the checks without waiting for the next half hour.

## Settings

On *Peppol Health*, per company:

- **Peppol issues go to**: who gets the activities. Empty: the salesperson.
- **Queued too long after (hours)**: default 6; 0 turns the check off.
- **Unconfirmed too long after (hours)**: default 48; 0 turns the check off.
- **Files inside the e-invoice, at most (MB)**: default 10.

## What it does not do

- It does not send invoices itself, and it does not change your Peppol
  registration.
- It does not send to a contact's own Peppol address: Odoo always sends to the
  customer company.
- It does not repair a connection a copy has already broken; it keeps copies
  from breaking it.

## How we make sure it works

Before every release, **11 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- The live database is recorded and a neutralized one is not.
- A copy does not contact the access point.
- A document left in the send queue is reported.
- A failed document becomes an activity until it recovers.
- A switched off job is reported on the company.

The complete list is in the source you receive.

## Support

[support@bambooforge.dev](mailto:support@bambooforge.dev) - questions, bug reports and feature requests are
answered by the developers who wrote the module.

## Changelog

### 20.0.1.0.0

- First release: alerts, the invoice's files inside its e-invoice, the copy
  guard and the Peppol Health page.
