Releases: ZUGFeRD/mustangproject
2.23.1
Fixes
- #1108 Regression Issue caused by empty XMP (introduced by #1076)
- #1120 ZUGFeRDImporter fails to extract Version if XML namespace is not exactly rsm:CrossIndustryInvoice
Some of the following changes were already part of 2.23.0
- #1043 Fix percentage-based allowance/charge calculations
- #1093 #814 upgrade CEN EN16931 Schematron from v1.3.12 to v1.3.15
- #1102 Add BasisAmount to CashDiscount.
- #1109 Feature fix xml description
- #1110 Avoid NPE by checking zi.getXMP() is not null.
- #1116 dont emit empty node for definedTradeContact
- #1118 Support ram:UltimateShipToTradeParty/
- #1119 Support ram:DeliveryTypeCode/
2.23.0 "Bonne Journées de la Facture Électronique"
Highlights
Apart from their validation we now also support writing subinvoice lines (#1073, thanks kschwank).
Plus we merged some France-related pull requests, e.g. the conversion to french PDF (#1083), the configurable BT-23 business process ID for CII export (#1046) and of course validation which now also takes into account the first AFNOR XP12-012 schematron (#1089, thanks @meparis).
Event
A propos France: we cordially invite potential contributors on the day following the JFE ,
May 7th 2026, 16:00-17:00 CET, to an free online event to coordinate contributions regading the coming e-invoice obligation in France
as of September: Event details and application .
Changelog
On Mustang 2.23.0, the following fixes were applied
- #993 Cash discount not parsed
- #1029 Added a breaking change notice regarding the removal of hardcoded values in #729
- #1044 Correct version of org.apache.pdfbox:fontbox from 3.0.3 to 3.0.6.
- #1049 Prevent exceptions in validation
- #1038 Header allowances are aggregated incorrectly for non-XRechnung profiles
- #1052 Remove parsing OriginatorDocumentReference.ID as date
- #1055 Correct order of ApplicableTradeTax sub-elements.
- #1072 Correct XPath-expressions for GrandTotal and TaxBasisTotalAmount.
- #1075 Vulnerability in dependency PDFBox version 3.0.6
- #1076 XMP error during validation based on mustang version 2.22. (XMP Metadata: Could not parse XMP metadata (XML invalid))
- #1084 Fix xml description
- #1082 Centralize and secure DocumentBuilder creation.
- reduce possible exceptions in metrics action
And altogether we are talking of the following new features
- #1037 Compress attachments
- #1046 Add configurable BT-23 business process ID for CII export
- #1050 Add validator information to PDF report (name and version)
- #1061 Add ability to mark an Invoice as a test invoice.
- #1073 add hierarchical invoice positions in CII XML export for EXTENDED profile
- #1083 PDF Visualizations in English and French
- #1089 Add France schematron ruleset
- added Extended-CTC-FR profile to selection for command line
FYI
I will try to renew my expired GPG key in the next maven central release and @langfr is now co-maintainer: thank you and congratulations.
We are still set for Java 11 in this release but for #1067 fixing #1025 (a convert-to-UBL-issue), we will open a Java17 branch (thanks phax!). We're just not yet sure how to call the new version, this minor correction sounds to small for a "Mustangproject 3.0" release.
2.22.0
New features
- #1011 calculatedinvoice needs to contain VATtotal
- #1010 add DeliveryNoteReferencedDocument per Item
- #253/#994 add DeliveryNoteReferencedDocument for import and export
- #536 support BT-18
- #1000 Support ItemSellerTradeParty at line level (Factur-X / ZUGFeRD EXTENDED) for French municipalities subcontracting services to other municipalities
Other fixes
- #990 Fix empty ValidationResult when XMP metadata contains invalid XML characters
- #859 SpecifiedTradePaymentTerms doppelt in der XML ab Version 2.16.5
- #992 fix typo
- #999 Write RateApplicablePercent on head also for tax free
- #997 CategoryCode O Need VAT rate in header breakdown (BT-119) but MUST omit line VAT rate (BT-152)
- #1003 IncludedNote SubjectCode PMD AAB
- #998 ZUGFeRDInvoiceImporter does not properly handle UBL CreditNote documents
- #1006 Duplicate Notes and Missing BIC Parsing in ZUGFeRDInvoiceImporter
- #1017 Concurrency problems in ZUGFeRDDateFormat
- deprecate itemTotalAllowances instead of itemAllowances over itemCharges
- corrected import of UBL rounding amount
2.21.0
Apart from the support for Factur-X 1.08 / ZUGFeRD 2.4 (#969) and the validation of it's subitem-with-subtotal-validation (#978) this version contains the following
New features
- #984 set default vat exemtion reason text on reverse charge
- #983 Be able to easily reference an invoice in a credit memo
- have a start of a primitive and incomplete list of human readable unit codes
and the following
Corrections
- #952 Add optional Invoicer and Invoicee for Extended profile
- #954 Parsing XML documents fails with ZUGFeRD visualizer due to secure processing not being functional
- #947 replace fixed version number with new variable from root pom.xml
- #979, #985 allow vat percent=null sometimes
- #977 Update History.md
- #961 / #962 Adding a tax ExemptionReasonCode to Product/TradeTax for the XML generation
2.20.0
The new feature is support for BT-17 (tender or lot reference) (#923).
This release also fixes issues with the nonshaded (depencencies-not-included) version (#950 "ClassNotFoudException while running the PDFValidator"), upgrades to pdfbox 3.0.6, change return type of getCashDiscounts to CashDiscount object, not interface, adds a new known ZUGFeRD production software (a "signature", #959) and corrects the calculation of charges on product level (#960).
2.19.1
This release brings various small updates: apart from some housekeeping (#914, #932, #939, #943, upgrade of apache fop) e.g. Factur-X files with UBL content are now rejected (#926), Cash discounts are now not only written but also parsed on import (#692) and the calculation of item discounts was corrected (#917).
As always, futher details can be found in the history and Mustangproject 2.19.1 can be integrated using Maven Central or downloaded for command line use.
2.19.0
Todays (2025-08-12) “2.19.0” release of Mustangproject, the open-source e-invoicing library and command line tool, among many other corrections, upgrades validation to XRechnung 3.0.2 and downgrades PDF/A issues from errors to warnings.
2.18.0
2025-07-14
Mustang's validation now throws a warning upon incorrect calculation even of the item amount (#878).
Further
New features
Potentially sensitive
- #871 schema validation does not ignore external entities
Corrections
- support parsing of BT-90 CreditorReferenceID
- #871 schema validation does not ignore external entities
- #868 Fix wrong version in History.md
- #729 Updates about SpecifiedTradeSettlementHeaderMonetarySummation and SpecifiedTradeSettlementPaymentMeans
- #863 LineCalculator throws NPE if product is null (since 2.17.0)
- #731 Got a broken translation key when visualizing XML into PDF (xr:Business_process_type)
- #849 Ignore calculation errors when extracting xml from pdf
- #850/#843 Correction for "Re-Initialize the HTML-template on language change
- #855 Suppress empty nodes in output XML
- #874 Skip PDNameTreeNodes if the names are null or empty
- #830 Invalid XML generated: Item vat-category-code summed up with other 0 percent category codes
- corrected typo ArithmetricException to ArithmeticException
- #726 Financial account information (IBAN) is lost when converting a cii invoice to ubl
- #885 JSON duplicates on item allowances/charges
- #887 incorrect percentual item allowances
2.17.0
Breaking changes
#764 Item allowances not to be multiplied by quantity (there are now product level quantities for that). This may affect invoice totals.
Corrections
- #820/801/815 Fix invoiceImporter: empty NodeList, empty Strings
- #822 Wrapping Message Text in Validation Result PDF
- #843 Re-Initialize the HTML-template on language change
- #854 allow multiple item charges/allowances when visualizing to html
- #786 Fix Invoices with Category Code "O" #786
New features
(apart from #764 allow allowances/charges on item, product and document level, not only on product and document level)
- add getCalculation on calculatedInvoice
- Transactioncalculator getTaxDetails to include correct percentage, calculated amounts
2.16.5
New Features
This release supports Factur-X 1.07.3/ZUGFeRD 2.3.3 (#833) and
Corrections
improves UBL parsing (#816, #835). Further fixes include
- #819 correct generateXSLTFromSchematron profile
- #458 Its not possible to add multiple PaymentTerms when using the extended profile
- #788 Invoice taxes aren't acessible
- #790 Crash upon importing an invoice with empty name.
- upgrade from PDFBOX 3.0.2 to 3.0.5
- #817 added ZUGFeRD.PDF-csharp to list of PDF creators
- #811 Fix typo in xpath when extracting buyer trade party address