New products

FacturX/ZUGFeRD/XRechnung 1.6.156 (V18 - V23)

c11070d20210928230604

Embed the Factur-X XML into your PDF invoices automatically, and exchange them through your accredited platform.

180.00 €
Excl. tax

  • Author CAP-REL
  • Module version 1.6.156
  • Release date 09/28/2021
  • Access to download and updates Lifetime access

More info...

Electronic invoicing is becoming mandatory in France and across Europe: an invoice now has to carry structured data a machine can read. Facturx automatically embeds the Factur-X XML (EN 16931 standard) into the PDF of your Dolibarr invoices. They become hybrid documents, readable by a human and by a machine alike, ready for Chorus Pro, for your B2B customers and for the accredited platforms.

Compliance without the effort

  • The XML is embedded into the PDF on every generation, validation or change of an invoice, with no manual step
  • The module runs after the PDF is produced, whatever the original template, including ODT templates converted to PDF
  • EN 16931 (standard), EXTENDED (CTC-FR), XRECHNUNG 3 (Germany, experimental) and MINIMUM profiles
  • Export of the XML as a separate file, or a suffixed PDF, when you would rather embed nothing
  • Linked PDFs (orders, delivery notes) merged before the XML is embedded
  • Legal mentions of the French reform (BR-FR-05) and invoicing mode (BT-23) issued according to your company country

Chorus Pro and public procurement

  • Service code (BT-10), contract reference (BT-12), purchase order reference (BT-13) and Chorus identifier fields, on invoices as well as on orders
  • Automatic warning on public-sector customers, with the matching invoicing framework
  • SIREN derived from the SIRET, and the VAT number derived from the SIREN, for French customers
  • Payer third party in the EXTENDED profile, when whoever pays is not the invoiced customer

Send and receive through your accredited platform

  • OAuth connection to the SuperPDP access point, to transmit your validated customer invoices
  • Automatic retrieval of supplier invoices by a scheduled job, disabled by default
  • Lookup of your customers' Peppol/Factur-X identifier (BT-49) in the official directory
  • Status tracking of every transmitted document

Data checked before it goes out

  • Mandatory information (VAT, address, SIREN/SIRET) checked before the XML is produced
  • VAT exemption codes (VATEX) and the EN 16931 VAT category derived for lines at 0 %
  • Legal identifiers per country: SIREN in France, BCE/KBO in Belgium, commercial register in Germany
  • A separate invoicing address and a delivery contact, through the contacts linked to the invoice
  • Invoicing period computed from the start and end dates of the lines
  • Recurring invoices, progress invoices and negative lines supported

Day to day

  • Factur-X generation over several invoices in one operation, with a ZIP export
  • One-off opt-out on an invoice that must not carry it

Requirements

  • Dolibarr 18.0 or above, PHP 7.4 or above
  • The GD and zlib PHP extensions
  • The Thirdparties and Invoices modules enabled

Every feature is documented online: doc.cap-rel.fr/facturx

Version history

1.6.156 -- 2026-10-05

  • fix: the VAT exemption reason no longer repeats on each line, where DATEV rejects it
  • fix: French legal mentions and the BT-23 billing mode now only go on a French seller invoice
  • fix: an invoice issued in a foreign currency keeps that currency and its amounts in the XML
  • fix: a summary invoice billed in a foreign currency keeps its amounts in that currency
  • State the VAT in your accounting currency on a foreign-currency invoice (BT-6 and BT-111)
  • Choose whether the French reform mentions apply, for an establishment outside France
  • Send the unit of your invoice lines in the XML, hours no longer leave as pieces
  • Have a unit you added yourself sent too, when its code is a UN/ECE Rec 20 one
  • fix: the Chorus and XRechnung fields really come back on a reactivation
  • fix: the setup page now names the extra fields Dolibarr hides instead of letting them vanish
  • fix: a field forced visible by hand is tied again to the "Disable chorus support" setting
  • fix: the ship-to identifier and the product summary group were out of reach of that repair
  • fix: one extra field failing to be created no longer cancels every field declared after it
  • fix: the activation now stops and says so when an extra field could not be created
  • fix: the status of a document sent to the access point is stored again, its table was missing
  • fix: two received invoices can no longer end up with the same reference
  • fix: a malformed XML received from the network now names the line that breaks it
  • fix: a failed merge of the attachments into the Factur-X PDF is reported, not only logged
  • fix: the billing contact notice is translated instead of being shown in English
  • fix: the OAuth2 callback url follows the installation, it was hardcoded under /custom/facturx
  • fix: an unknown access point driver is refused instead of being included blindly
  • fix: an import of a neighbour entity can no longer be read, edited, reset nor deleted
  • fix: the PDF of a received invoice is no longer reachable through a public share link
  • fix: a mass action on invoices now leaves out those of the entities you cannot see
  • fix: writing a Peppol identifier from the search page needs the thirdparty write right
  • fix: the routing migration no longer runs from a plain link, it needs the form of its page
  • fix: the inline script of the about page carries a nonce, so a strict CSP stops blocking it
  • new: the OAuth2 tokens and the client secret are stored encrypted instead of in clear text
  • new: FACTURX_DISABLE_VERSION_CHECK turns off the version check made at every activation
  • the leftover numbering and document model block is gone from the setup pages

1.6.152 -- 2026-09-23

  • fix: the buyer order number is no longer written inside the invoice lines, where the CII schematron warns about it once per line (CII-SR-108); it is emitted at document level instead, as BT-13 when free, otherwise as a referenced document
  • fix: title, subtotal and page break lines are left out of the XML again, whether they come from the ATM-Consulting subtotal module or from the Dolibarr core feature; they used to be emitted as 0 EUR positions and to open a VAT breakdown at rate 0, which made the invoice ask for an exemption code it did not need

1.6.150 -- 2026-09-17

  • fix: the payer trade party field now really lists customers only, its object descriptor was written in the wrong form and the filter was dropped
  • fix: the supplier import menu entry is no longer declared when the supplier invoice module is off, which filled dolibarr.log with "parent was not found"
  • fix: the VAT exemption code and the customer PDP identifier are visible again on Dolibarr 23, whose stricter condition evaluation rejected the expression that showed them
  • fix: the ship-to identifier and the product summary group no longer disappear along with the Chorus fields, a migration was tying them to the wrong setting
  • fix: the Peppol identifier lookup popup opens again when Dolibarr is installed in a sub-directory of the site

1.6.146 -- 2026-09-03

  • fix: a negative line is now a document allowance (BG-20) instead of a position with a negative price, which broke BR-27, BR-28 and BR-FR-DEC-03
  • fix: the delivery country (BT-80) falls back to the buyer country when an exempt VAT category requires it (BR-IC-12)
  • new: a 0% VAT line without an exemption code is now reported to the user, since the platform rejects the invoice for it (BR-IC-10)

1.6.144 -- 2026-09-03

  • better import files

1.6.142 -- 2026-09-01

  • new "Summary" invoice document model
  • new "Summary groups" dictionary and new "Summary group" extrafield on products
  • the XML carries the same aggregated positions as the PDF
  • new setup section for that model: fallback wordings for goods and services
  • fix: the freshest stamped PDF is now sent to the access point
  • fix: a PDF returned by the access point while the XML was requested is now stored under a .pdf name
  • fix: no more empty PDF frame on the import card when the invoice was received as a bare XML
  • fix: the "Download PDF" button of the import card now finds its file
  • an invoice received without a readable PDF is no longer logged as an error

1.6.140 -- 2026-08-28

  • better message for BR-FR-12 error
  • add tests on missing customer routing data

1.6.138 -- 2026-08-25

  • fix: no VAT number (BT-48) nor registration number (BT-47) warning anymore when the customer is a private individual
  • compliance warning about the missing VAT number now explains how to declare a private individual
  • new compliance warning when the buyer (BT-49, BR-FR-12) or the seller (BT-34, BR-FR-11) electronic address will be missing from the XML
  • the buyer warning only asks for an email when the customer is a private individual
  • a bare French SIREN or SIRET is now accepted in BT-34 and BT-49, the 0225 scheme code being added automatically
  • clearer wording for the malformed electronic address warning, both orders being valid

1.6.136 -- 2026-08-24

  • ship-to party (BG-13) now read from the delivery contact of the invoice
  • new extrafield on contacts for the delivery location identifier (BT-71)
  • delivery address no longer emitted without its country (BR-57)
  • fix: seller electronic address (BT-34) no longer dropped when the seller contact block is disabled
  • fix: no more empty URIUniversalCommunication element when neither identifier nor email is set

1.6.134 -- 2026-08-14

  • new option (setup module) to auto detect chorus target
  • better merge system: try first engine (with html links support) then the other in case of failure

1.6.132 -- 2026-08-05

  • add race condition for chorus pro

1.6.130 -- 2026-08-04

  • handle unit price less than 0.00 €
  • add extrafields on facrec

1.6.128 -- 2026-08-04

  • add migration tool and link for new community module
  • better messages in case of bad data on thirdpart or invoice card
  • add sender id field on setup even if pa/pdp is not set in that module
  • update user doc

1.6.126 -- 2026-08-03

  • fix price for .00+ decimals

1.6.124 -- 2026-07-17

  • add module version in headers to be more accurate on support / end user help

1.6.122 -- 2026-07-15

  • add LegalNotes setup

1.6.120 -- 2026-06-29

  • fix SuperPDP data exchange
  • import files from SuperPDP
  • search in directory

1.6.118 -- 2026-06-03

  • fix payment data
  • fix mass action xml build from rec invoices
  • add vatex codes from peppol modul (same codes, shared dictionary)
  • add more specific chorus code for full siret number, not only siren one
  • stay php 7.4 compat (fpdi)

1.6.113 -- 2026-05-27

  • drop computed expression on d4d_chorus_id extrafield
  • add superpdp as first fallback ap in case of problem with community module
  • (to be tested)

1.6.112 -- 2026-05-04

  • update code (cleanup)
  • better translations files for explicit BT-* fields
  • add all tests into repository code
  • better compliance files for online tests tools
  • merge contribution from sven (see function _idprof)
  • add credit notes

1.6.110 -- 2026-04-16

  • better check for non company customers (B2C)

1.6.108 -- 2026-04-15

  • better german translations for equivalent chorus fields

1.6.106 -- 2026-04-13

  • better dolibarr 23 support
  • add BT fields names (chorus/other support)

1.6.104 -- 2026-04-01

  • fix extrafield compat dol22+

1.6.102 -- 2026-03-26

  • fix page orientation

1.6.100 -- 2026-03-10

  • fix links into pdf thanks to Gigarun ticket & fix suggest (other solution applied)

1.6.98 -- 2026-03-06

  • Fix billing account tests and change error message with more precise informations

1.6.96 -- 2026-02-20

  • New profile PROFILE_EXTENDED with thirdparty payer != buyer support, if that profile is active
  • a new extrafield is displayed on invoices card

1.6.94 -- 2026-02-17

  • Fix race condition on situation invoices

1.6.90 -- 2026-02-11

  • Fix error on 1.6.88 version

1.6.88 -- 2026-02-03

  • New system : IF all lines of invoice have the same date start / date end
  • THEN thoses dates are used globally for invoice date start / date end
  • into XML par of invoice
  • And a new option is coming in setup for date start / date end of services globally for
  • invoices in case of one or more lines have different date start / stop

1.6.86 -- 2026-01-27

  • An other try to keep php 7.3 compat' mode

1.6.85 -- 2025-12-08

  • Back php 7.3 mode for typed properties

1.6.82 -- 2025-12-02

  • Use library constants for email type (contribution: Peter Kessen)
  • Add buyer email only if mail was set for this buyer: sometimes there was no contact
  • email set up for some customers. Adding the mail leads to validation errors (Peter again)

1.6.80 -- 2025-11-19

  • add dolibarr > 20 support thanks to sven p.
  • avoid facturx generation for uploaded files thanks to sven p. again :)
  • code cleanup (warnings, php code quality)

1.6.78 -- 2025-07-07

  • add unit price and fix discount negative lines

1.6.76 -- 2025-06-30

  • add more actions (confirm_paiement and setnote_) where dolibarr rebuild pdf files

1.6.74 -- 2025-05-16

  • chorus : do not put AdditionalReferencedDocument data into xml

1.6.72 -- 2025-04-24

  • new setup option to force facturx call even if object type is not a ModelePDFFactures
  • add a test agains hidden conf PDF_SECURITY_ENCRYPTION

1.6.70 -- 2025-04-18

  • add a mapping system dolibarr <-> facturx for:
  • * NORMAL invoice like that module makes from the first time
  • * CORRECTION (to become for future "updates" of invoices ?)
  • * CREDITNOTE (please make some checks with "negative" invoices)
  • * PREPAYMENTINVOICE ("acompte")
  • add a check for customer ref length (chorus limit is 50 chars)
  • add document language to be the same as pdf part
  • add billing periods lines
  • fix a warninng message (undef array entry)
  • note in case of invoices and prepayment invoice linked dolibarr add a negative line
  • bug facturx point of view is to not have a negative line but a "partial paid" info
  • at the end of the document and a "remain to pay" affected by that payment ... so
  • facturx XML could be "different" than pdf part please have twice look at that and
  • make me detailled bug reports in case of problem !

1.6.64 -- 2025-03-05

  • fix file suffix stuck to _tmp.pdf instead of _facturx.pdf (in some race conditions)
  • add a hidden config key : FACTURX_SUFFIX_CUSTOM then you could put what you want as file suffix name
  • update payment terms translations (do not htmlencode)
  • fix PayeePartyCreditorFinancialAccount/AccoutName (BT-85) should be OwnerName instead of Bank name
  • fix negative lines as global discount and write some documentation about it

1.6.56 -- 2025-01-31

  • fix code thanks to grandoc (undef array index)

1.6.54 -- 2025-01-31

  • new add all paymentMean possibilities from Jan Bekemeier
  • fix a french error on alert messages: siren is the only needed information thanks to Vincent Maury

1.6.52 -- 2025-01-21

  • new profile PROFILE_XRECHNUNG_3 thanks to Sven again !
  • new option in setup to choose the profile you want
  • fix "FacturXDisabled" keyword displayed on invoices card, now that keyword is translated

1.6.50 -- 2025-01-15

  • Internationalization of PaymentMean field (remove the
  • french "Virement Bancaire") thanks to Jan Bekemeier
  • Change source of informations for company phone / fax and email
  • in case of contact linked to the invoice is not set, thanks to Sven Plohmer
  • Use customer language or document language for xml products lines

1.6.46 -- 2024-12-12

  • FIX discount on line less than 100%
  • Remove Chorus warning when chorus is disabled
  • Update translations

1.6.44 -- 2024-12-09

  • NEW contribution from Sven Plohmer :
  • Adding functionality to fetch customer order references, corresponding...
  • Remove "note" in case of empty note field
  • NEW contribution from Jan Bekemeier :
  • New option in module setup "disables generation of DefinedTradeContact"
  • Code cleanup, migrate from conf->global to getDolGlobalString function

1.6.42 -- 2024-10-22

  • Fix langs files embedded into zip package

1.6.41 -- 2024-09-16

  • Thanks to Jan Bekemeier (Weblinx.IT GbR) German ID Prof is now correct

1.6.38 -- 2024-09-13

  • Fix a call to a backported function

1.6.36 -- 2024-09-05

  • Update German translations thanks to Jan Bekemeier (Weblinx.IT GbR)

1.6.34 -- 2024-07-25

  • New option to export XML file standalone

1.6.32 -- 2024-07-19

  • New option for german people : "GLOBAL_IDENTIFIER_DISABLE" thanks to
  • Sven Plohmer (from digitalcentric) becaus of government institution :
  • The ISO 6523 code for germany does not exists and is not accepted by
  • the goverment systems.

1.6.30 -- 2024-07-08

  • New option to disable FacturX ponctually on a file if needed

1.6.28 -- 2024-06-25

  • Update libs
  • Massive update for keeping html links into pdf

1.6.26 -- 2024-05-15

  • Add A1/A2 in BusinessProcessSpecifiedDocumentContextParameter
  • Update composer and depends

1.6.22 -- 2024-04-30

  • Update SIRET/SIREN case
  • Change isset/empty test thanks to (thanks to sylvain@infras)
  • Update API handle race situation for embedding FacturX XML file

1.6.20 -- 2024-04-05

  • Better log. Remove trigger stuff

1.6.19 -- 2024-03-25

  • FIX: full rewrite for trigger support, tests ok, next is customer checks

1.6.18 -- 2024-03-24

  • FIX: handle special race conditions of invoices made from sellyoursaas
  • (action is empty)

1.6.16 -- 2024-03-11

  • NEW: handle pdf invoices from custom format using odt as transition
  • (MUST use MAIN_ODT_AS_PDF setup to auto convert odt to pdf server side)

1.6.14 -- 2024-02-23

  • NEW: full german translation thanks to our greman official partner
  • Weblinx.IT GbR

1.6.12 -- 2024-02-16

  • FIX: add facturx into PDF not only on builddoc hook but in 3 others
  • situations (and maybe more in future ?)

1.6.10 -- 2024-02-10

  • NEW: mode debug log message to get more precise origin of bugs
  • FIX: switch from composer autoload to scoper autoload

1.6.8 -- 2024-02-01

  • NEW: switch to a module\facturx namespace for most of code
  • NEW: option to use trigger instead of hooks -> facturx will be
  • embedded into PDF even if you makes your invoices via api
  • FIX: namespace for fpdf
  • FIX: validate error message returns object -> cast to text (json)
  • FIX: race condition for API call where action is empty
  • UPD: composer & external libs upgrade + patches
  • UPD: chorus fields displayed on PDF if non empty
  • NEW: contains namespace using php-scoper
  • NEW: Chorus fields could be disabled (hidden) via admin setup option

1.6.4 -- 2023-11-28

  • NEW: Chorus options on order to be able to put that informations
  • as soon as possible, then invoice made from order will keep
  • that informations

1.6.2 -- 2023-11-22

  • Fix a bug on specimen PDF creation (thanks to sylvain@infras)
  • New : lot of messages on document integrity check
  • Upgrade : on depends libs
  • - Upgrading horstoeko/zugferd 1.0.31

1.6.0

  • Remove spaces from IBAN, BIC and Bank account number
  • Remove spaces from VAT & SIREN/SIRET
  • Upgrade depends libs:
  • - Upgrading doctrine/annotations (1.13.2 => 2.0.1)
  • - Upgrading doctrine/instantiator (1.4.1 => 1.5.0)
  • - Upgrading doctrine/lexer (1.2.3 => 2.1.0)
  • - Upgrading horstoeko/stringmanagement (v1.0.8 => v1.0.11)
  • - Upgrading horstoeko/zugferd (v1.0.9 => v1.0.26)
  • - Upgrading jms/metadata (2.6.1 => 2.8.0)
  • - Upgrading jms/serializer (3.17.1 => 3.27.0)
  • - Upgrading phpstan/phpdoc-parser (1.4.5 => 1.23.1)
  • - Upgrading setasign/fpdf (1.8.4 => 1.8.6)
  • - Upgrading setasign/fpdi (v2.3.6 => v2.4.1)
  • - Upgrading symfony/deprecation-contracts (v2.5.1 => v2.5.2)
  • - Upgrading symfony/polyfill-ctype (v1.25.0 => v1.27.0)
  • - Upgrading symfony/polyfill-mbstring (v1.25.0 => v1.27.0)
  • - Upgrading symfony/polyfill-php73 (v1.25.0 => v1.27.0)
  • - Upgrading symfony/polyfill-php80 (v1.25.0 => v1.27.0)
  • - Upgrading symfony/polyfill-php81 (v1.25.0 => v1.27.0)
  • - Upgrading symfony/translation-contracts (v2.5.1 => v2.5.2)
  • - Upgrading symfony/validator (v5.4.8 => v5.4.26)
  • - Upgrading symfony/yaml (v5.4.3 => v5.4.23)

1.5.18

  • Add mini profile + handle of eTickets
  • Fix compatibility with UltimatePDF (ModeleUltimatePDFFactures)

1.5.16

  • Fix Belgium code + idprof1/idprof2

1.5.14

  • Fix Date +1/-1 GMT / Local hours (summer/winter) switch error

1.5.12

  • Fix CHORUS support if customer does not have some fields then
  • XML do not have empty fields (remove fields if value empty)

1.5.11

  • Fix parser indentation error (phpcs)

1.5.10

  • Compatible with ATM SubTotal module thanks to InfraS (Sylvain Legrand)

1.5.9

  • Compatible with dolibarr 17/18

1.5.8

  • CHORUS : new field to store tracking number from chorus when PDF is sent was not editable !
  • New option on setup : concat all other PDF files linked to the invoice BEFORE facturx (for example
  • you can join some other files to the invoice like order)

1.5.6

  • CHORUS : new field to store tracking number from chorus when PDF is sent

1.5.4

  • CHORUS options are now groupped masked by default (invoices)

1.5.2

  • New CHORUS support (3 custom fields on invoices) - confirmed !
  • Note for CHORUS : don't forget to add "flux habilitations" on your account.

1.4.4

  • New mass action on invoice list : export multiple files in a zip archive

1.4.3

  • Fix SIRET/SIREN code
  • Fix order to make pdf file

1.4.2

  • Suffix is now an option in setup module

1.4.1

  • Use a temp file because on some race conditions original file will be rewrite

1.4.0

  • File name suffix could be choosed on admin panel now, some pleople wan't a distinct PDF File with factur_x XML, some others don't

1.3.0

  • Change PDF export file name as original name + _facturx.pdf as suffix
  • Update depends libs
  • Fix FPDF collision

1.2.0

  • Fix export discount rates (was not present before that version !)

1.1.0

  • Thanks to Maximilian Stein this version apply FacturX hook only on PDF customer invoices
  • and ODT document creation with automatic PDF conversion

1.0.0

  • Initial version



If you think this module is a fork of another one (published after the first one) or violates some terms or conditions of use (for users or vendors), you can make a report at dolistore@dolibarr.org