Module Peppibar: Difference between revisions

Update until v1.0.10
m (Changelog)
Tag: 2017 source edit
(Update until v1.0.10)
Tag: 2017 source edit
 
Line 24: Line 24:


=Features=
=Features=
Peppibar provides complete '''PEPPOL''' (Pan-European Public Procurement OnLine) network integration for electronic invoicing in Dolibarr. It was developed specifically for compliance with the '''Belgian mandatory structured electronic invoicing law effective January 1, 2026''', which requires all VAT-registered Belgian companies to issue and receive structured electronic invoices.
Peppibar provides complete '''PEPPOL''' (Pan-European Public Procurement OnLine) network integration for electronic invoicing in Dolibarr. It was developed specifically for compliance with the '''Belgian mandatory structured electronic invoicing law effective January 1, 2026''', which requires all VAT-registered Belgian companies to issue and receive structured electronic invoices. Beyond Belgium, the module supports the PEPPOL identification schemes of the Netherlands, Luxembourg and France, so invoices can be exchanged with counterparts in those countries.


The module uses '''[https://peppyrus.be Peppyrus]''' as its PEPPOL Access Point, which is currently free for users.
The module uses '''[https://peppyrus.be Peppyrus]''' as its PEPPOL Access Point, which is currently free for users.


==Sending customer invoices==
==Sending customer invoices==
* Automatic '''UBL 2.1''' XML generation from Dolibarr invoices and credit notes, compliant with '''Peppol BIS Billing 3.0'''
* Automatic '''UBL 2.1''' XML generation from Dolibarr invoices and credit notes, compliant with '''Peppol BIS Billing 3.0.21'''
* Multi-level validation before sending (EN 16931, Peppol rules, UBL schema)
* Multi-level validation before sending (EN 16931, Peppol rules, UBL schema, EAS code list) — a document the network would reject is blocked locally, never sent
* Blocked sends come with a copyable diagnostic report, to correct the problem or forward it to support
* Secure transmission on the PEPPOL network with status tracking (sent, delivered, failed)
* Secure transmission on the PEPPOL network with status tracking (sent, delivered, failed)
* Optional automatic sending upon invoice validation
* Optional automatic sending upon invoice validation
Line 69: Line 70:
==Supported standards==
==Supported standards==
* '''UBL 2.1''' - Universal Business Language (Invoice and CreditNote)
* '''UBL 2.1''' - Universal Business Language (Invoice and CreditNote)
* '''Peppol BIS Billing 3.0''' - PEPPOL billing profile
* '''Peppol BIS Billing 3.0.21''' - PEPPOL billing profile (validation artefacts UBL/CII 1.3.16)
* '''EN 16931''' - European electronic invoicing standard
* '''EN 16931''' - European electronic invoicing standard
* '''PEPPOL Schemes supported''' (Benelux):
* '''PEPPOL Schemes supported''' (Benelux and France):
** Belgium: 9925 (VAT number), 0208 (BCE/KBO enterprise number)
** Belgium: 9925 (VAT number), 0208 (BCE/KBO enterprise number)
** Netherlands: 0106 (KvK), 0190 (OIN)
** Netherlands: 0106 (KvK), 0190 (OIN)
** Luxembourg: 9915 (VAT number), 0183 (Matricule RCS)
** Luxembourg: 9938 (LU:VAT) - the single scheme published by Luxembourg, carrying both the VAT number and the matricule
** France: 9957 (VAT number), 0002 (SIREN), 0009 (SIRET)
** International: 0088 (EAN), 0193 (UBL.BE), 0199 (LEI)
** International: 0088 (EAN), 0193 (UBL.BE), 0199 (LEI)


Line 112: Line 114:
** <code>9925</code> - Belgian VAT number (most common for Belgian companies)
** <code>9925</code> - Belgian VAT number (most common for Belgian companies)
** <code>0208</code> - BCE/KBO enterprise number
** <code>0208</code> - BCE/KBO enterprise number
** <code>0106</code> - Dutch KvK number
** <code>0190</code> - Dutch OIN
** <code>9938</code> - Luxembourg VAT number or matricule
** <code>9957</code> - French VAT number
** <code>0002</code> - French SIREN
** <code>0009</code> - French SIRET


3) Click '''Test API Connection''' to verify your configuration
3) Click '''Test API Connection''' to verify your configuration
Line 157: Line 165:
* '''Default PEPPOL ID''': The customer's PEPPOL participant identifier
* '''Default PEPPOL ID''': The customer's PEPPOL participant identifier
* '''Default PEPPOL Scheme''': The scheme code matching their identifier
* '''Default PEPPOL Scheme''': The scheme code matching their identifier
For a Luxembourg customer, use <code>9938</code>: it is the only scheme published by Luxembourg and covers both the VAT number (<code>9938:LU12345678</code>) and the matricule (<code>9938:12345678910</code>). Leave the '''PEPPOL identification scheme''' field empty for Luxembourg parties, as no ISO 6523 ICD code exists for the country.


You can also use the '''PEPPOL Participant Directory''' (accessible from the Peppibar menu) to search and automatically fill these fields.
You can also use the '''PEPPOL Participant Directory''' (accessible from the Peppibar menu) to search and automatically fill these fields.
Line 249: Line 259:


=Changelog=
=Changelog=
==Version 1.0.10 (2026-09-07)==
* Luxembourg (LU) support: scheme '''9938''' (LU:VAT) selectable as the sender scheme and usable as a third-party default. It is the only scheme published by Luxembourg and carries both the VAT number and the matricule
* A Luxembourg third party left on the Belgian 9925 default is resolved to 9938 for the UBL <code>EndpointID</code>, the Peppyrus routing address and the SMP lookup
* Luxembourg identifier validation: scheme must be 9938, identifier must be a VAT number (<code>LU</code> + 8 digits) or a matricule (11 or 13 digits), reported as warnings so a send is never blocked
* Fixed: Luxembourg was previously configured with schemes 9915 and 0183, which belong to Austria (AT:GOV) and Switzerland (CH:UIDB) respectively
* Fixed: Luxembourg has no ISO 6523 ICD code, so <code>PartyIdentification</code> (BT-29-1) and <code>PartyLegalEntity/CompanyID</code> (BT-30-1) are now issued without a <code>schemeID</code> attribute for Luxembourg parties
* Fixed: an identification scheme saved empty on a third party produced <code>schemeID=""</code> instead of falling back on the country default, and an empty identification number suppressed <code>PartyIdentification</code> and <code>PartyLegalEntity/CompanyID</code> entirely
* Automatic correction on module activation: Luxembourg third parties still carrying 9915 or 0183 are moved to 9938 and their identification scheme is cleared. The correction is restricted to third parties whose country is Luxembourg, 0183 being a legitimate Swiss identifier. Records with no country set are reported as a warning instead
* Blocking Peppol gate before transmission: endpoint schemes are checked against the Peppol EAS code list (rule PEPPOL-EN16931-CL008 is fatal) and the Peppol validator now runs on '''every''' send path, including auto-send on invoice validation. A document the network would reject no longer reaches the access point
* Every blocked send comes with a plain-text diagnostic report — module version, EAS code list release, invoice, third party, both Peppol addresses, environment, error codes and SMP status — to correct the problem or forward it to Peppibar support
* SMP lookup failures are told apart: only a participant formally absent from the network (HTTP 404) blocks a send; a network or directory outage is reported as a warning and never blocks a valid invoice
==Version 1.0.9 (2026-08-19)==
* Alignment on Peppol BIS Billing 3.0.21 (validation artefacts UBL/CII 1.3.16)
* Dutch identifier validation (PEPPOL-COMMON-R054 to R057): length check for schemes 0106 (8 digits), 0190 (20 digits) and 0217 (12 digits), and <code>NL123456789B12</code> format check for scheme 9944 and for VAT numbers starting with NL - checked on both sender and customer, reported as warnings to match the current schematron severity
* Dutch KvK numbers normalised and left-padded to 8 digits during UBL generation
* Document currency checked against the Peppol ISO4217 code list: warning for ANG and BGN, both removed in 3.0.21
* Fixed: the two temporary French profiles added to PEPPOL-EN16931-R007 in 3.0.21 no longer trigger a warning on inbound documents
==Version 1.0.8 (2026-06-15)==
* France (FR) support: PEPPOL invoicing to and from French counterparts
* Outbound: SIREN (0002) and SIRET (0009) identification schemes derived automatically for French customers, with French VAT (9957) selectable as the sender scheme
* Inbound: SIREN/SIRET supplier matching, SIREN extraction from French VAT numbers, and SIREN auto-population when importing French suppliers
* Validation: SIREN (9 digits) and SIRET (14 digits) format and Luhn checksum check for French customers
==Version 1.0.7 (2026-06-06)==
* New "INBOX synchronisation" debug tab comparing the Peppyrus INBOX against documents stored in Peppibar, to verify that every inbound message has been retrieved (read-only diagnostic with summary counters and a per-message table)
* Fixed: the "Refresh Peppol Listing Now" button now carries a CSRF token, preventing it from being blocked when <code>MAIN_SECURITY_CSRF_WITH_TOKEN</code> is hardened
* Fixed: a manual Peppol poll now resets the auto-poll throttle, avoiding a redundant INBOX poll on the following redirect


==Version 1.0.6 (2026-04-09)==
==Version 1.0.6 (2026-04-09)==
Line 265: Line 305:


==Version 1.0.4 (2026-03-28)==
==Version 1.0.4 (2026-03-28)==
* Benelux support: added Peppol schemes for Netherlands (0106 KvK, 0190 OIN) and Luxembourg (9915 VAT, 0183 Matricule RCS)
* Benelux support: added Peppol schemes for Netherlands (0106 KvK, 0190 OIN) and Luxembourg (9915 VAT, 0183 Matricule RCS - the Luxembourg codes were wrong and are corrected to 9938 in v1.0.10)


==Version 1.0.3 (2026-03-13)==
==Version 1.0.3 (2026-03-13)==
5

edits