Versions and Release Notes

Here you'll find the most important changes in the current and upcoming FactoorSharp versions.

Version 20.0.0

Current

Version 20.0 is a major release: it makes decimal places configurable, adds serial numbers and batches per line item, renders invoices in German, English and French, and tidies up the API. Some changes affect existing code – they are marked “Breaking change” below, each with a migration example.

What's new in detail:

  • Tax rate per line is now optional (BT-152) Breaking change Core
    The property TradeLineItem.TaxPercent is now of type decimal?. If the invoice has no rate, it returns null instead of 0, and the element is omitted when writing – which is mandatory for tax category O (not subject to VAT). When reading, ?? 0m is enough to keep the previous behavior. In AddTradeLineItem(), taxPercent now defaults to null: lines with 0 % tax (for example categories E, AE and Z) must state the rate explicitly with 0m.
  • Saving as PDF returns a result and produces PDF/A-3B Breaking change PDF
    SaveToPdf() and SaveToPdfAsync() now return a PdfSaveResult that lists what was repaired in the source PDF or remained open. The generated PDF declares itself as PDF/A-3B instead of PDF/A-3A. Source code compiles unchanged; applications that were already compiled must be recompiled because the signature changed. All overloads also accept optional InvoiceFormatOptions, which apply to the embedded XML as well. For details see the documentation “Working with PDF Files”.
  • Obsolete functions removed Breaking change Core
    The functions previously marked [Obsolete] have been removed. The example shows the replacement for each; migrating is a rename with no change in results. The classes InvoiceValidator and ValidationResult of the core package are removed as well – validation is available in the FactoorSharp.FacturX.Validator package.
  • Configurable decimal places Core
    Prices, quantities, percentages and exchange rates can now be written with more decimal places – separately for each data type. Amounts stay at two places; only line amounts have an explicit opt-in, which is not EN 16931 conformant. Without options the output does not change. All details in the documentation “Configuration”.
  • Serial numbers and batches per line (BG-X-84) Core
    Individual delivered units can be stated on the invoice line with serial number (BT-X-307) and batch number (BT-X-306), for example one entry per machine. The data is preserved when reading (EXTENDED profile, ZUGFeRD 2.4 and 2.5). See “Serial Numbers and Batches”.
  • Source PDFs are sanitized for PDF/A PDF
    Source PDFs from report generators often bring PDF/A violations that used to be carried over unchanged. FactoorSharp now sets missing annotation flags (rule 6.3.2), embeds missing fonts and repairs the encoding of symbolic TrueType fonts as produced by barcode generators (rule 6.2.11.6). Every repair appears in the PdfSaveResult.
  • Invoice rendering in German, English and French Visualization
    The PDF and HTML output can be produced in German, English or French through the Culture of the render options. Labels, document titles, units as well as number and date formats follow the chosen language. Without a setting the output stays German. See “Visual representation of invoices”.
  • More details in the invoice rendering Visualization
    The rendering now shows the despatch advice (BT-16), the buyer reference and the free texts of a line, lists document references (BT-17, BT-18, BT-122, BT-128) in readable form and chooses a fitting document title for every invoice type. Prices, quantities and percentages appear with all significant decimal places, so the rendering does not differ from the embedded XML.
  • Validation report in your language Validation
    For the extended validation through the online service you can set the language of the validation report: German, English or French. Without a setting it stays German; for purely local validation the setting has no effect. Error responses of the service are also translated more reliably into understandable exceptions.
  • Missing optional data stays empty Core
    Optional codes that are missing in an invoice used to be replaced by a default value when reading and written back when saving again – for example the account type (BT-X-290), the tax currency (BT-6) or reasons for allowances and charges. They now stay empty (null). Please note: code that relied on the former default values must check for null.
  • Further fixes Core
    Format 616 (calendar week, CCYYWW) rejects weeks that the year does not contain. The subject code AAG for instructions of the party has also been added.

Version 19.1.1

Version 19.1.1 fixes several bugs in writing ZUGFeRD 2.0/2.5 and UBL invoices and extends validation for Spanish and Italian invoices.

What's new in detail:

  • Line total amount now calculated correctly for ZUGFeRD 2.5 (BT-131) Core
    When the line total amount was left unset, ZUGFeRD 2.5 used to write 0 instead of calculating it from unit price and quantity like 2.0, 2.4 and UBL do. Invoices with an explicitly set amount were always correct.
  • VAT in accounting currency now correct in UBL too (BT-111, BT-6) Core
    The VAT amount in the accounting currency was never written to UBL and not reliably recognized when reading it back. Both now work correctly, including for XRechnung in UBL format.
  • No more disallowed exemption reasons in the VAT breakdown (BT-120, BT-121) Core
    EN 16931 forbids an exemption reason in the VAT breakdown for the tax categories standard rate, zero rated, IGIC and IPSI. Until now this was only observed for zero rated, and not at all in UBL.
  • ZUGFeRD 2.0 catches up on electronic address and line exemption (BT-34, BT-49, BT-X-96, BT-X-97) Core
    The electronic address was not written for any party in ZUGFeRD 2.0, and the line-level exemption reason was missing as well. Both are now written and read, just like in 2.4 and 2.5.
  • Spain: calculation checks and FACe mode for Facturae Validation
    Local validation now checks Facturae invoices for correct line, batch and invoice totals, the NIF check digit and the signature policy. The new CheckFACeRequirements option additionally checks the stricter reception requirements of the Spanish public-sector entry point FACe.
  • Italy: FatturaPA schema updated Validation
    The schema for the "fattura ordinaria" was updated to version 1.2.3; the simplified "fattura semplificata" invoice is now validated as well.
  • Crash after QuestPDF update fixed Visualization
    After updating QuestPDF, outdated native libraries left behind in the build output could cause a crash while rendering. They are now removed automatically.

Version 19.1.0

Version 19.1.0 renders invoices as HTML, supports advance payments and VAT in a foreign currency, extracts text from PDFs together with its position, and detects the invoice format even more reliably.

What's new in detail:

  • Display invoices as HTML Visualization
    Invoices can now be rendered as HTML as well as PDF – either as a standalone page or as a building block you embed directly into your web or desktop application. Delivery note, order reference and product characteristics are now shown too.
  • Itemize advance payments (BG-X-45) Core
    Advance payments already received can be listed individually in the EXTENDED profile – with amount, payment date, included VAT and a reference to the related prepayment invoice.
  • VAT in a foreign currency with exchange rate (BG-X-41) Core
    For invoices in a foreign currency, you now set the VAT accounting currency (BT-6), the VAT amount in that currency (BT-111) and the exchange rate in a single step – exactly as EN 16931 expects.
  • Electronic address for every party (BT-34, BT-49, BT-X-160) Core
    Not just seller and buyer, but also the ship-to party and other parties can now carry an electronic address, such as an email address. The information is fully preserved when reading invoices.
  • Extract text from PDFs with its position PDF
    You can now extract text runs from the visible content of a PDF together with page, position and font size, for example to pick a value from a specific table column. Plain text extraction also reproduces the page layout much more faithfully.
  • More details for invoice lines (BT-158-1, BT-X-98) Core
    Items can now be classified using every classification scheme defined by EN 16931, such as UNSPSC or eCl@ss. In the EXTENDED profile you can also state the total of allowances and charges per line.
  • More reliable invoice format detection Core
    Whether a file is a ZUGFeRD/Factur-X or a UBL invoice is now determined unambiguously from the structure of the document. As a result, invoices from senders that state no or a not yet known specification identifier (BT-24) can be read as well.
  • Current XRechnung validation rules 2.6.0 Validation
    Local validation now uses the current KoSIT rules 2.6.0 for XRechnung 3.0.2. Please note: a violation of rule BR-TMP-2 is now reported as an error instead of a warning. In addition, invoices whose XML is embedded uncompressed in the PDF are validated, and unreadable attachments show up as a clear validation finding.
  • More thorough checks of amounts and totals Validation
    The built-in invoice check now verifies line amounts, allowances and charges, VAT amounts and the amount due much more precisely against the EN 16931 rules – including advance payments, rounding amounts and price base quantities (BT-149).
  • Bug fixes for valid invoices Core
    Several bugs that could lead to invalid or incomplete invoices have been fixed: no exemption reason is written for zero-rated supplies (category Z) anymore (BR-Z-10), MINIMUM invoices no longer contain an electronic address that is not allowed there, empty IBAN details are omitted, UBL prices keep all their decimal places, and the receiving advice reference (BT-15) is read and written correctly in UBL.

Version 19.0

Version 19.0 introduces free, local invoice validation, improves how XRechnung price details and PDF attachments are handled, and hardens FactoorSharp against crafted documents.

Highlights

  • Free, local invoice validation without an internet connection
  • Support for ZUGFeRD 2.5.2
  • More precise price details in XRechnung invoices and more reliable PDF attachments
  • More flexibility for international formats and reference to goods receipt documents
  • Better protection when reading prepared documents

Version 18.5

Version 18.5 introduces support for invoicing periods, improves how payment terms are handled, and fixes several bugs around ZUGFeRD 2.0 and 2.5.

Highlights

  • Support for invoicing periods, e.g. for subscription or rental invoices, when reading and writing Factur-X/ZUGFeRD invoices
  • Consistent handling of structured payment terms (early-payment discounts, due dates) across ZUGFeRD versions 2.0 and 2.4
  • Bug fixes for delivery, payment and bank details in ZUGFeRD 2.0
  • Updated Valitool 3.26.5 for more current and precise validation results

Version 18.4

Version 18.4 introduces a new visualization component and fixes a number of bugs in working with ZUGFeRD 2.5.

Highlights

  • New FactoorSharp.Visualization component for generating PDF reports from ZUGFeRD data
  • Email alerts when the validation quota runs low
  • Bug fixes for ZUGFeRD 2.5 / Factur-X

Version 18.3

Version 18.3 adds support for ZUGFeRD 2.5 and extends validation to Italian and Spanish invoices.

Highlights

  • Support for ZUGFeRD 2.5 / Factur-X when creating, reading and validating invoices
  • Efficient processing of invoices with very many line items (> 1,000)
  • Detailed validation results returned for every check
  • Hardened XML parsing against malformed or manipulated content
  • Validation of Italian (FatturaPA) and Spanish (Facturae) invoices

Version 18.2

Version 18.2 extends PDF processing further and improves quota management for validation.

Highlights

  • PDF page extraction: pull out individual pages or page ranges as standalone PDF documents
  • Remaining validation quota returned directly in the result object of every validation request
  • Dedicated API to query the remaining validation quota – ideal for monitoring scenarios

Version 18.1

Version 18.1 extends FactoorSharp's PDF processing further and adds signing support for all .NET target platforms.

Highlights

  • New helper functions for analyzing, preparing and post-processing invoice PDFs
  • PDF signing for all supported .NET versions
  • Support for SellerOrderReferencedDocument at line-item level
  • Bug fixes, including cleaner handling of UBL party names and legal entity names

Version 18.0

Version 18.0 is the first published release of FactoorSharp. It forms the stable foundation for working with ZUGFeRD, Factur-X and XRechnung in modern .NET applications.

Highlights

  • Solid base for creating, importing and processing electronic invoices
  • Full support for ZUGFeRD 2.4 / Factur-X 1.08, including handling of sub-line items and quantities per packaging unit
  • Support for FactoorSharp's existing XML, PDF and validation features
  • Stable starting point for upcoming PDF-related extensions