Skip to content

Releases: ZUGFeRD/mustangproject

2.23.1

28 May 15:25

Choose a tag to compare

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"

24 Apr 10:57

Choose a tag to compare

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

04 Feb 17:57

Choose a tag to compare

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

18 Dec 12:00

Choose a tag to compare

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

03 Dec 12:55

Choose a tag to compare

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

16 Oct 09:35

Choose a tag to compare

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

13 Aug 06:41

Choose a tag to compare

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

13 Aug 06:39

Choose a tag to compare

2025-07-14

Mustang's validation now throws a warning upon incorrect calculation even of the item amount (#878).

Further
New features

  • #865 Add sevdesk signature to PDF creators
  • #856 Read contact´s fax number.

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

11 Jun 14:46

Choose a tag to compare

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

22 May 11:32

Choose a tag to compare

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