Versionen und Release Notes
Hier finden Sie die wichtigsten Änderungen der aktuellen und kommenden FactoorSharp-Versionen.
Version 19.1.1
AktuellVersion 19.1.1 korrigiert mehrere Fehler beim Schreiben von ZUGFeRD-2.0-/2.5- und UBL-Rechnungen und erweitert die Validierung spanischer und italienischer Rechnungen.
Die Neuerungen im Detail:
-
Rechnungspositionsbetrag bei ZUGFeRD 2.5 korrekt berechnet (BT-131) KernWurde der Positionsbetrag nicht ausdrücklich gesetzt, schrieb ZUGFeRD 2.5 bislang 0 statt ihn wie 2.0, 2.4 und UBL aus Einzelpreis und Menge zu berechnen. War der Betrag ausdrücklich gesetzt, war die Rechnung immer korrekt.
-
Umsatzsteuer in Buchungswährung jetzt auch in UBL korrekt (BT-111, BT-6) KernDer Steuerbetrag in der Buchungswährung wurde in UBL bislang nie geschrieben und beim Einlesen nicht zuverlässig erkannt. Beides funktioniert jetzt korrekt, auch für XRechnung im UBL-Format.
-
Keine unzulässigen Befreiungsgründe mehr in der Steueraufschlüsselung (BT-120, BT-121) KernFür die Steuerkategorien Regelsatz, Nullsatz, IGIC und IPSI verbietet die EN 16931 einen Befreiungsgrund in der Steueraufschlüsselung. Bisher wurde das nur für den Nullsatz beachtet, in UBL gar nicht.
-
ZUGFeRD 2.0: elektronische Adresse und Positions-Befreiung nachgezogen (BT-34, BT-49, BT-X-96, BT-X-97) KernDie elektronische Adresse wurde in ZUGFeRD 2.0 bislang für keine beteiligte Partei geschrieben, der Befreiungsgrund auf Positionsebene fehlte ebenfalls. Beides wird jetzt geschrieben und gelesen, wie bei 2.4 und 2.5.
-
Spanien: rechnerische Prüfung und FACe-Modus für Facturae ValidierungDie lokale Validierung prüft Facturae-Rechnungen jetzt auf rechnerische Richtigkeit von Positions-, Sammel- und Rechnungssummen, die NIF-Prüfziffer und die Signaturpolitik. Mit der neuen Option
CheckFACeRequirementslassen sich zusätzlich die strengeren Annahmebedingungen des spanischen Behörden-Empfangspunkts FACe prüfen.
// Facturae-Rechnung zusätzlich gegen die Annahmebedingungen von FACe prüfen // (dem Empfangspunkt für Rechnungen an spanische Behörden) ValidationResult result = await Validator.ValidateAsync("rechnung.xsig", new ValidationOptions { CheckFACeRequirements = true }); ' Facturae-Rechnung zusätzlich gegen die Annahmebedingungen von FACe prüfen ' (dem Empfangspunkt für Rechnungen an spanische Behörden) Dim result As ValidationResult = Await Validator.ValidateAsync("rechnung.xsig", New ValidationOptions With { .CheckFACeRequirements = True }) -
Italien: FatturaPA-Schema aktualisiert ValidierungDas Schema für die „fattura ordinaria" wurde auf Version 1.2.3 aktualisiert; die vereinfachte Rechnung „fattura semplificata" wird jetzt ebenfalls validiert.
-
Absturz nach QuestPDF-Update behoben VisualisierungNach einer QuestPDF-Aktualisierung konnten veraltete native Bibliotheken im Build-Verzeichnis zu einem Absturz beim Rendern führen. Sie werden jetzt automatisch entfernt.
Version 19.1.0
Version 19.1.0 stellt Rechnungen jetzt auch als HTML dar, unterstützt Vorauszahlungen und Umsatzsteuer in Fremdwährung, liest Texte aus PDFs samt Position aus und erkennt das Rechnungsformat noch zuverlässiger.
Die Neuerungen im Detail:
-
Rechnungen als HTML anzeigen VisualisierungRechnungen lassen sich jetzt nicht nur als PDF, sondern auch als HTML darstellen – als eigenständige Seite oder als Baustein, der sich direkt in Ihre Web- oder Desktop-Anwendung einbetten lässt. Zusätzlich erscheinen Lieferschein, Bestellreferenz und Produktmerkmale in der Ansicht.
// Rechnung als eigenständige HTML-Seite string html = InvoiceVisualizer.RenderHtml(invoice); // Oder als Baustein zum Einbetten in eine bestehende Seite string fragment = InvoiceVisualizer.RenderHtml(invoice, options: new HtmlRenderOptions { Standalone = false }); // Die PDF-Ausgabe heißt jetzt RenderPdf() InvoiceVisualizer.RenderPdf(invoice, "invoice.pdf"); ' Rechnung als eigenständige HTML-Seite Dim html As String = InvoiceVisualizer.RenderHtml(invoice) ' Oder als Baustein zum Einbetten in eine bestehende Seite Dim fragment As String = InvoiceVisualizer.RenderHtml(invoice, options:=New HtmlRenderOptions With {.Standalone = False}) ' Die PDF-Ausgabe heißt jetzt RenderPdf() InvoiceVisualizer.RenderPdf(invoice, "invoice.pdf") -
Vorauszahlungen im Detail ausweisen (BG-X-45) KernBereits erhaltene Anzahlungen können im Profil EXTENDED einzeln aufgeführt werden – mit Betrag, Zahlungsdatum, enthaltener Umsatzsteuer und Verweis auf die zugehörige Anzahlungsrechnung.
// Anzahlung mit enthaltener Umsatzsteuer und Verweis auf die Anzahlungsrechnung invoice.AddAdvancePayment(2975m, new DateTime(2026, 6, 7)) .SetInvoiceReferencedDocument("AR-2026-0601", new DateTime(2026, 6, 1), InvoiceType.PartialInvoice) .AddIncludedTradeTax(475m, 19m, TaxTypes.VAT, TaxCategoryCodes.S); ' Anzahlung mit enthaltener Umsatzsteuer und Verweis auf die Anzahlungsrechnung invoice.AddAdvancePayment(2975D, New DateTime(2026, 6, 7)) _ .SetInvoiceReferencedDocument("AR-2026-0601", New DateTime(2026, 6, 1), InvoiceType.PartialInvoice) _ .AddIncludedTradeTax(475D, 19D, TaxTypes.VAT, TaxCategoryCodes.S) -
Umsatzsteuer in Fremdwährung mit Wechselkurs (BG-X-41) KernBei Rechnungen in Fremdwährung geben Sie Buchungswährung (BT-6), Umsatzsteuerbetrag in dieser Währung (BT-111) und Wechselkurs jetzt in einem Schritt an – so, wie es die EN 16931 erwartet.
// Rechnung in USD, Umsatzsteuer zusätzlich in Euro ausweisen invoice.SetTaxCurrencyExchange(taxTotalInAccountingCurrency: 175.08m, accountingCurrency: CurrencyCodes.EUR, conversionRate: 0.9215m, conversionRateTimestamp: new DateTime(2026, 9, 1)); ' Rechnung in USD, Umsatzsteuer zusätzlich in Euro ausweisen invoice.SetTaxCurrencyExchange(taxTotalInAccountingCurrency:=175.08D, accountingCurrency:=CurrencyCodes.EUR, conversionRate:=0.9215D, conversionRateTimestamp:=New DateTime(2026, 9, 1)) -
Elektronische Adresse für alle Beteiligten (BT-34, BT-49, BT-X-160) KernNicht nur Verkäufer und Käufer, sondern auch Lieferempfänger und weitere Beteiligte können jetzt eine elektronische Adresse, etwa eine E-Mail-Adresse, erhalten. Die Angaben bleiben beim Einlesen vollständig erhalten.
// Elektronische Adresse des Lieferempfängers invoice.ShipTo.ElectronicAddress = new ElectronicAddress { Address = "wareneingang@kunde.de", ElectronicAddressSchemeID = ElectronicAddressSchemeIdentifiers.ElectronicMailSmtp }; ' Elektronische Adresse des Lieferempfängers invoice.ShipTo.ElectronicAddress = New ElectronicAddress With { .Address = "wareneingang@kunde.de", .ElectronicAddressSchemeID = ElectronicAddressSchemeIdentifiers.ElectronicMailSmtp } -
Texte aus PDFs samt Position auslesen PDFAus dem sichtbaren Inhalt einer PDF lassen sich jetzt Textbausteine mit Seite, Position und Schriftgröße auslesen, etwa um einen Wert aus einer bestimmten Tabellenspalte zu übernehmen. Die normale Textextraktion gibt das Seitenlayout außerdem deutlich originalgetreuer wieder.
foreach (PdfTextFragment fragment in PdfUtils.ExtractTextFragments("invoice.pdf")) { // Seite, Position in Punkt und Text Console.WriteLine($"Seite {fragment.PageNumber}, x={fragment.X:0}, y={fragment.Y:0}: {fragment.Text}"); } For Each fragment As PdfTextFragment In PdfUtils.ExtractTextFragments("invoice.pdf") ' Seite, Position in Punkt und Text Console.WriteLine($"Seite {fragment.PageNumber}, x={fragment.X:0}, y={fragment.Y:0}: {fragment.Text}") Next -
Mehr Angaben zu Rechnungspositionen (BT-158-1, BT-X-98) KernArtikel können jetzt nach allen Klassifizierungssystemen der EN 16931 gekennzeichnet werden, zum Beispiel UNSPSC oder eCl@ss. Im Profil EXTENDED lässt sich zusätzlich die Summe der Zu- und Abschläge je Position angeben.
// Artikel nach UNSPSC klassifizieren item.AddDesignatedProductClassification(DesignatedProductClassificationClassCodes.TST, classCode: "43211503"); // Summe der Zu- und Abschläge dieser Position (nur EXTENDED) item.TotalAllowanceChargeAmount = 12.50m; ' Artikel nach UNSPSC klassifizieren item.AddDesignatedProductClassification(DesignatedProductClassificationClassCodes.TST, classCode:="43211503") ' Summe der Zu- und Abschläge dieser Position (nur EXTENDED) item.TotalAllowanceChargeAmount = 12.5D -
Zuverlässigere Erkennung des Rechnungsformats KernOb eine Datei eine ZUGFeRD-/Factur-X- oder eine UBL-Rechnung ist, wird jetzt eindeutig am Aufbau des Dokuments erkannt. Dadurch lassen sich auch Rechnungen von Absendern einlesen, die keine oder eine noch unbekannte Profilkennung (BT-24) angeben.
-
Aktuelle XRechnung-Prüfregeln 2.6.0 ValidierungDie lokale Prüfung nutzt jetzt die aktuellen KoSIT-Prüfregeln 2.6.0 für XRechnung 3.0.2. Bitte beachten Sie: Ein Verstoß gegen die Regel BR-TMP-2 gilt damit als Fehler statt als Warnung. Außerdem werden Rechnungen geprüft, deren XML unkomprimiert in die PDF eingebettet ist, und nicht lesbare Anhänge erscheinen als verständlicher Prüfbefund.
-
Gründlichere Prüfung von Beträgen und Summen ValidierungDie eingebaute Rechnungsprüfung kontrolliert Positionsbeträge, Zu- und Abschläge, Steuerbeträge und den Zahlbetrag jetzt deutlich genauer nach den Regeln der EN 16931 – inklusive Vorauszahlungen, Rundungsbeträgen und Preisbasismengen (BT-149).
-
Fehlerkorrekturen für gültige Rechnungen KernMehrere Fehler, die zu ungültigen oder unvollständigen Rechnungen führen konnten, sind behoben: Bei nullbesteuerten Umsätzen (Kategorie Z) wird kein Befreiungsgrund mehr geschrieben (BR-Z-10), MINIMUM-Rechnungen enthalten keine unzulässige elektronische Adresse mehr, leere IBAN-Angaben entfallen, UBL-Preise behalten alle Nachkommastellen und die Referenz auf den Wareneingangsbeleg (BT-15) wird in UBL korrekt gelesen und geschrieben.
Version 19.0
Version 19.0 führt eine kostenlose, lokale Rechnungsprüfung ein, verbessert die Verarbeitung von XRechnung-Preisangaben und PDF-Anhängen und härtet FactoorSharp gegen präparierte Dokumente ab.
Die Neuerungen im Detail:
-
Rechnungen offline prüfen ValidierungRechnungen können jetzt direkt in der Anwendung geprüft werden, ganz ohne Internetverbindung oder zusätzliche Kosten pro Prüfung. Die ausführlichere Prüfung inklusive Zusatzchecks über unseren Online-Dienst steht weiterhin zur Verfügung.
// Standard: Prüfung über den Online-Dienst (mit Valitool-/VeraPDF-Zusatzchecks) ValidationResult result = FacturXValidator.Validate("invoice.pdf"); // Neu: rein lokale Prüfung, ganz ohne Internetverbindung und ohne Kontingent ValidationResult localResult = FacturXValidator.Validate("invoice.pdf", extendedValidation: false); ' Standard: Prüfung über den Online-Dienst (mit Valitool-/VeraPDF-Zusatzchecks) Dim result As ValidationResult = FacturXValidator.Validate("invoice.pdf") ' Neu: rein lokale Prüfung, ganz ohne Internetverbindung und ohne Kontingent Dim localResult As ValidationResult = FacturXValidator.Validate("invoice.pdf", extendedValidation:=False) -
Unterstützung für ZUGFeRD 2.5.2 KernRechnungen können jetzt im aktuellen ZUGFeRD-Format erstellt werden.
-
Mehr Flexibilität bei internationalen Formaten (BT-24) KernNeben XRechnung lassen sich jetzt auch verwandte Formate wie Peppol BIS Billing 3.0 korrekt kennzeichnen – nützlich für Unternehmen mit europäischen Geschäftspartnern.
invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30; invoice.SpecificationIdentifier = SpecificationIdentifiers.PeppolBisBilling30 -
Referenz auf Wareneingangsbelege (BT-15-00) KernRechnungen können jetzt mit dem passenden Wareneingangsbeleg verknüpft werden.
invoice.SetReceivingAdviceReferencedDocument("WE-2026-0142"); invoice.SetReceivingAdviceReferencedDocument("WE-2026-0142") -
Weitere Anhänge zu einer Factur-X-PDF hinzufügen PDFZusätzliche Dokumente wie AGB oder Kalkulationen lassen sich jetzt nachträglich an eine bereits erstellte PDF anhängen.
byte[] terms = File.ReadAllBytes("agb.pdf"); PdfUtils.AddAttachment("invoice.pdf", "agb.pdf", terms); Dim terms As Byte() = File.ReadAllBytes("agb.pdf") PdfUtils.AddAttachment("invoice.pdf", "agb.pdf", terms) -
PDF-Anhänge bleiben zuverlässig erhalten PDFVorhandene Anhänge einer Rechnung, etwa Lieferscheine oder Berechnungen, gehen beim Speichern nicht mehr verloren – auch ihre Beschreibung bleibt jetzt erhalten.
-
Genauere Preisangaben bei XRechnung-Rechnungen (BT-147, BT-148) KernEin Fehler wurde behoben, durch den der Bruttopreis pro Position und Preisnachlässe auf Positionsebene beim Einlesen von XRechnung-Dokumenten in bestimmten Fällen falsch übernommen wurden.
-
Korrekte Steuerkategorie bei Positions-Nachlässen (BT-95) KernDie Steuerkategorie eines Nachlasses bzw. Zuschlags auf einer Rechnungsposition wurde beim Speichern im ZUGFeRD-2.5-Format nicht im richtigen Format geschrieben; das ist jetzt behoben.
-
Zuverlässigere Fehlermeldungen bei der Online-Prüfung ValidierungFehler wie zu große Dateien oder aufgebrauchtes Prüfkontingent werden jetzt eindeutiger erkannt und lassen sich in eigenen Anwendungen gezielt abfangen.
try { var result = FacturXValidator.Validate("invoice.pdf"); } catch (FileTooLargeException) { // Datei überschreitet die zulässige Größe } catch (QuotaExceededException) { // Prüfkontingent aufgebraucht } Try Dim result = FacturXValidator.Validate("invoice.pdf") Catch ex As FileTooLargeException ' Datei überschreitet die zulässige Größe Catch ex As QuotaExceededException ' Prüfkontingent aufgebraucht End Try -
Besserer Schutz beim Einlesen von Dokumenten SicherheitDas Einlesen von Rechnungsdateien wurde gegen präparierte, bösartige Dateien abgesichert – sowohl gegen bekannte XML-Angriffstechniken als auch gegen übermäßigen Speicherverbrauch bei sehr großen Dateien.
Version 18.5
Version 18.5 führt die Unterstützung von Rechnungszeiträumen ein, verbessert die Verarbeitung von Zahlungsbedingungen und behebt mehrere Fehler rund um ZUGFeRD 2.0 und 2.5.
Schwerpunkte
Version 18.4
Version 18.4 führt eine neue Visualisierungskomponente ein und korrigiert einige Fehler in der Arbeit mit ZUGFeRD 2.5.
Schwerpunkte
Version 18.3
Version 18.3 unterstützt ZUGFeRD 2.5 und erweitert die Validierung um italienische und spanische Rechnungen.
Schwerpunkte
Version 18.2
Version 18.2 baut die PDF-Verarbeitung weiter aus und verbessert das Quota-Management für die Validierung.
Schwerpunkte
Version 18.1
Version 18.1 baut FactoorSharp im Bereich PDF-Verarbeitung weiter aus und erweitert die Signierungsunterstützung auf alle .NET-Zielplattformen.
Schwerpunkte
Version 18.0
Version 18.0 ist die erste veröffentlichte FactoorSharp-Version. Sie bildet die stabile Grundlage für die Arbeit mit ZUGFeRD, Factur-X und XRechnung in modernen .NET-Anwendungen.