Skip to content

Releases: ZUGFeRD/mustangproject

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

2.16.4

22 Apr 11:58

Choose a tag to compare

Mustangproject version 2.16.4, released April 22nd, 2025, features 16 small corrections, two of which may be potentially security sensitive and fixes a small resource leak.

There is a known issue (#764),
which may be addressed in 2.17.0, potentially in May, maybe along with an update to support ZF 2.3.3 (i.e. Codelist version 15): The question being if absolute, i.e. non-percentual, item based discounts/charges are not to be multiplied by the quantity, as they currently are in Mustang. If that is true I will need to correct not only the calculation, but also some tests, and you may see different invoice amounts in some cases.

New features in 2.16.4

  • #818 need to be able to specify filenames as exceptions from files validated recursively with validateExpectValid
  • #741 read position accountingReference
  • #809 invoice reader to support multiple charges per item
  • #812 fileattachment relation should have a default

Fixes

  • #774 disable XML parsing entities (potentially security sensitive, potentially partially revoked after merge due to failing tests)
  • #778 Added XEE Protection features (potentially security sensitive, potentially partially revoked after merge due to failing tests)
  • #742/#753 “Adresszusatz 1” (LineTwo) showing up as “Postfach” in HTML visualization
  • #614, #770 Exemption reason text should not be reused
  • #728 Invoice setCorrection causes duplicate XML output
  • #776 Fix potential resource leaks in core file processing classes
  • #782/771 prevent NullPointerException on Product Description
  • #772 TradeParty Name should be optional for ShipToTradeParty
  • #775 not deleted tmp files
  • #802 fix: capital letter for ID in listID

Refactorings

  • #759 Use the dedicated class instead of var type
  • #722 extend ValidationLogVisualizer to not use only file system

2.16.3

03 Mar 12:20

Choose a tag to compare

This release mitigates a potential security issue (#685/#725), allows to write invoices using the invoice class without VAT ID (#745) and more.

Details:

  • #558 ZUGFeRDInvoiceImporter does not read BankDetails.accountName
  • #686 Item: add BillingSpecifiedPeriod
  • #739 also parse invoiceperiod from ubl
  • #745 be able to specify legalorganisation id without schema
  • #747 correct profile detection
  • #710 Validation Error due to empty elements
  • #712 Correct bracket setting on condition for output of allowance reason.
  • #725 Unable to perform XML-oriented attacks
  • #685 Security Issue: XXE Vulnerability in ZUGFeRDInvoiceImporter (PR #725)
  • #761 Allow to set item allowance/charges from JSON