Mustangserver 1.7.0

On June 12th, 2025, the new version 1.7.0 of our e-invoice REST API, Mustangserver, was published.
It introduces centralized exception tracking, i.e. errors affecting customers now immediately alert our technical support. Previously those messages were stored in logfiles, which had to be evaluated either occasionally or periodically.

The release brings all features and improvements of Mustang 2.17.0, upgrades PHIVE and supports more validation formats and upgrades to PDFBox 3.0.5, fixing a minor with certain PDF files (issue 217).

2.17.0

Today, June 11th, 2025, we released version 2.17.0 of our open-source “swiss army knife” tool for e-invoices, Mustangproject. As usual, it will read, write, validate and convert european and german e-invoices, e.g. in Factur-X or XRechnung.

This new version now properly distinguishes between item allowances and charges on product, item and document level, previously only product and document level was possible and the product level was assigned at item level (our issue #764). This may affect invoice totals, please check. CalculatedInvoice received a “getCalculation”- and TransactionCalculator a “getTaxDetails”-getter.

Additionally, the following corrections were performed:

  • #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

As usual, the software is avaiable for free as java library from Maven Central and as command-line tool for Windows, Linux and Mac from it’s website.

2.16.5

Today, May 22nd, 2025, we released version 2.16.5 of our open source e-invoicing toolkit Mustangproject.

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

Two reasons for the micro increase of the version number:

  • ZUGFeRD 2.3.3 does not require updates on sending or receiving side, but the validation has been corrected and is now based on version 15 of the codelists.
  • The work on correcting absolute item allowances (#764) progresses, but currently fails a roundtrip, i.e. either invoices are produced correctly or parsed correctly. This change can and will be properly tested and released in a later version, a 2.17.0 at the end of June fixing this (and changing calculation) sounds realistic.

Mustang.net-merged-into-Ghostscript.net-Webinar

Hello,

As documented (p35f) there is a a C# client for MustangServer, which you can use to read/write and validate e-invoices. While we do continue with Mustangserver, and the Java version of Mustangproject as usual, our former Mustang.net initiative has now been completely merged into Ghostscript.net.

We would like to invite you to a explanatory webinar in a online-only event on 15.05.2025, 15:00-16:00 CET. Please access the details and the application for a participation link, which we kindly ask to fill out by the end of Wednesday (May 14th).

If you want to try former Mustang.net-now-Ghostscript.net-features you can add Ghostscript.net via nuget to your project and use this snippet to get you started:

 

using Ghostscript.NET.PDFA3Converter.ZUGFeRD;

Invoice i = (new Invoice()).setDueDate(DateTime.Now).setIssueDate(DateTime.Now).setDeliveryDate(DateTime.Now).setSender((new TradeParty("Test company", "Test Street 1", "55232", "Test City", "DE")).addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test", "+49123456789", "te...@example.org")).addBankDetails(new BankDetails("DE12500105170648489890", "COBADEFXXX"))).setRecipient(new TradeParty("Franz Mueller", "Test Street 12", "55232", "Entenhausen", "DE")).setReferenceNumber("991-01484-64").setNumber("123").addItem(new Item(new Product("Test product", "", "H87", 19m), 1.0m, 1.0m));

ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.generateXML(i);
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

string outfilename = "c:\\your\\dir\\gs-factur-x.xml";
File.WriteAllBytes(outfilename, zf2p.getXML());

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

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

Mustangserver 1.6.3

Today, March 7th, 2025 we published a a new version of our e-invoicing REST API, Mustangserver.
It brings the benefits of Mustangproject version 2.16.3, e.g. the possibility to specify item based charges and allowances also using JSON, and fixes a potential security as well as a maintenance issue.

Existing users already see the 1.6.3 option, new users can subscribe for a free 30 day evaluation period. Version 1.6.3 will become the new default version as of tomorrow.

2.16.3

Today, March 3rd, 2025, we released a new version of our open-source e-invoicing library and tool, Mustangproject. This version 2.16.3 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

Mustangserver 1.6.2

Today, February 27th, 2025 we published a hotfix to our e-invoicing REST API, Mustangserver, fixing an issue in the “detach” endpoint which may cause some invoices not to display embedded factur-x.xml files.

Mustangserver 1.6.1

Today, February 6th, 2025 we released a new Version of our Software-as-a-Service e-procurement REST API, Mustangserver, fixing minor details like the in rare cases potential incomplete list of invoice attachments.

2.16.2

Mustangproject 2.16.2 was released today, February 5th, 2025 and features only minor fixes regarding (among others) PDF and invoice attachments, in detail:

  • #705 specifiedLogisticsCharge is not imported
  • #707 invoiceimporter may fail if certain values are not set
  • #708 embedded files cannot be determined
  • #709 ZUGFeRDInvoiceImporter ignored “first” embedded file in list of pdf attachments
  • #607 Enable flexible PaymentReference and a DocumentName.
  • #649 Reuse toPDF method to work without any dependencies to the file system
  • #650 Add net.sf.offo:fop-hyph
  • #665 Fix #632: Return ubl_creditnote as Standard for CreditNotes
  • #684 Optimize validation-report to pdf functionality
  • #703 Fill TaxExemptionReason during InvoiceImport.
  • #701 Ensure Base64 decoding can handle newlines when decoding a FileAttachment
  • #691 Fix current check failures.