Releases: ZUGFeRD/mustangproject
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
2.16.4
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
2.16.3
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