Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core JavaScript-API
Hinweis: Diese Dokumentation bezieht sich auf die aktuellste Version des Plugins. Aktualisieren Sie das hier beschriebene Plugin, um die Dokumentation verwenden zu können.
Diese JavaScript-Bibliothek bietet eine umfassende Lösung zur Verarbeitung und Erstellung von elektronischen Rechnungen. Sie ermöglicht das Parsen von Rechnungsdaten in PDFs und XML-Dateien, die Validierung von XRechnungen gegen XML-Schemas und andere offizielle Validatoren und die Erstellung von Rechnungsdokumenten aus normalisierten Daten. Mithilfe dieser Bibliothek können Sie selbst bestimmen, wie E-Rechnungen verarbeitet werden.
Für einen Überblick zu möglichen Einsatzszenarien siehe Mit agorum core electronic invoicing arbeiten.
Binden Sie die Bibliothek stets am Anfang eines Skripts ein:
let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice');
Die Funktion prüft, ob es sich bei dem übergebenen Objekt um eine elektronische Rechnung handelt. Wenn es sich um eine E-Rechnung handelt, bestimmt die Funktion außerdem das E-Rechnungsformat. Das Ergebnis ist ein CheckResult-Objekt, das die Validität und ggf. den Typ der Rechnung beschreibt.
Syntax
check(object)
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
object | Das zu überprüfende Objekt. | ja | – |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let PDF_INVOICE = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/Rechnung-12345678-12983760.pdf'; eInvoice.check(objects.find(PDF_INVOICE));
Rückgabewert
Ist das übergebene Objekt keine E-Rechnung, ist das Ergebnis:
{ "valid" : false }
Wenn das übergebene Objekt eine E-Rechnung ist, wird zusätzlich das Format bestimmt und das Ergebnis ist etwa:
{ "valid" : true, "type" : "zugferd_cii" }
Das CheckResult-Objekt enthält:
Die Funktion checkRequiredFields prüft JSON-Daten darauf, ob alle Pflichtfelder für das angegebene E-Rechnungsformat enthalten sind. Die Funktion hilft dabei, JSON-Daten für die Generierung von E-Rechnungen zusammenzustellen. Folgende Daten/Angaben sind erforderlich:
Syntax
checkRequiredFields(data, type)
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
data | Die normalisierten Daten für die E-Rechnung in JSON-Format. | ja | - |
type | Das E-Rechnungsformat, gegen das die Daten geprüft werden sollen: xrechnung_ubl, xrechnung_cii oder zugferd_cii | ja | - |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let SAMPLE_DATA = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/completeDataStructure.json'; let check = eInvoice.checkRequiredFields(objects.find(SAMPLE_DATA), 'xechnung_cii'); check;
Rückgabewert
Wenn die JSON-Daten alle Pflichtfelder enthalten, gibt die Funktion ein leeres Array zurück.
"checkResult" : [ ]
Enthalten die JSON-Daten nicht alle erforderlichen Informationen, gibt die Funktion Informationen über die fehlenden Daten zurück. Beispiel:
Error: agorum.api.common.exceptions.server.ApiInternalServerErrorException: Metadata field 'agorum_accounting_document_customer_endpoint_id' cannot be found. Please check if it exists.
Die Funktion generiert eine elektronische Rechnung. Dazu überführt die Funktion die eingehende Struktur der normalisierten Rechnungsdaten in das angegebene E-Rechnungsformat. Folgende Daten/Angaben sind erforderlich:
Syntax
createInvoice({ data: data, format: 'zugferd_cii', attachments: [file], });
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
config | Die Funktion erwartet ein Konfigurationsobjekt mit folgenden Angaben:
|
ja | – |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let DATA = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/completeDataStructure.json'; let SAMPLE_INVOICE = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/Rechnung-12345678-12983760.pdf'; let sampleInvoice = objects.find(SAMPLE_INVOICE); let copy = objects.copy(sampleInvoice, sampleInvoice.firstParent); let data = JSON.parse(objects.find(DATA).contentString); let invoice = eInvoice.createInvoice({ data: data, format: 'zugferd_cii', attachments: [copy], });
Rückgabewert
Die Funktion gibt die E-Rechnung im angegebenen Format zurück (PDF oder XML).
Es wird ein Fehler geworfen, wenn die erforderlichen Daten nicht zur Verfügung stehen. Wenn die JSON-Daten nicht den Anforderungen für die Erstellung einer XRechnung genügen, wird eine detaillierte Fehlermeldung zurückgegeben. Beispiel:
Error: Invoice cannot be generated due to necessary information: [ { "key": "agorum_accounting_document_version_id", "label": "Dokumentversions-ID - Wert fehlt" }, { "key": "agorum_accounting_document_function_code", "label": "Dokumentfunktions-Code - Wert fehlt" } ]
Die Funktion generiert eine XRechnung. Dazu überführt die Funktion die eingehende Struktur der normalisierten Rechnungsdaten in das angegebene XRechnungs-Format. Folgende Daten/Angaben sind erforderlich:
Syntax
createInvoiceRaw({ data: data, format: 'zugferd_cii', attachments: [file], });
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
config | Die Funktion erwartet ein Konfigurationsobjekt mit folgenden Angaben:
|
ja | – |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let DATA = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/completeDataStructure.json'; let SAMPLE_INVOICE = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/Rechnung-12345678-12983760.pdf'; let sampleInvoice = objects.find(SAMPLE_INVOICE); let copy = objects.copy(sampleInvoice, sampleInvoice.firstParent); let data = JSON.parse(objects.find(DATA).contentString); let invoice = eInvoice.createInvoiceRaw({ data: data, format: 'xrechnung_ubl', attachments: [copy], });
Rückgabewert
Die Funktion gibt die E-Rechnung im angegebenen Format zurück (XML im CII-Format oder im UBL-Format).
Es wird ein Fehler geworfen, wenn die erforderlichen Daten nicht zur Verfügung stehen. Wenn die JSON-Daten nicht den Anforderungen für die Erstellung einer XRechnung genügen, wird eine detaillierte Fehlermeldung zurückgegeben. Beispiel:
Error: Invoice cannot be generated due to necessary information: [ { "key": "agorum_accounting_document_version_id", "label": "Dokumentversions-ID - Wert fehlt" }, { "key": "agorum_accounting_document_function_code", "label": "Dokumentfunktions-Code - Wert fehlt" } ]
Die createView-Funktion generiert ein Dokument aus Rechnungsdaten unter Verwendung einer angegebenen Dokumentvorlage. Dazu sind die Angabe der Parameter data (Rechnungsdaten in der normalisierten Form) und template (Angaben zur Verwendung des Dokumenttemplates) erforderlich. Wenn die Parameter festlegen, dass ein PDF erzeugt werden soll, wird ein PDF-Dokument erzeugt, andernfalls ein Word-Dokument (in docx-Format). Die Datei, in die das PDF oder DOCX geschrieben werden soll, muss dafür angegeben werden.
Für weitere Informationen zum Rechnungstemplate siehe Beispielvorlage als Grundlage für eigene Dokumentvorlagen verwenden.
Syntax
createView({ data: data, template: { outputDoc: outputDoc, templateDoc: templateDoc, createPdf: true, datePattern: 'dd-MM-yyyy', numberFormat: 'de-CH', }, })
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
data | Rechnungsdaten in normalisierter Form | ja | – |
template | Angaben für das zu verwendende Dokumenttemplate zur Rechnungsanzeige, bestehend aus:
|
ja | - |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let doc = objects.find('/agorum/roi/customers/agorum.electronic.invoicing/test/data/UBL_AE.xml'); let result = eInvoice.parse(doc); let data = result.data; let outputDoc = objects.create('file', { name: 'test-123.pdf', target: objects.find('home:MyFiles'), }); eInvoice.createView({ data: data, template: { outputDoc: outputDoc, templateDoc: '8ee9db31-69c1-11ef-94e4-02420a0a0010', createPdf: true, datePattern: 'dd-MM-yyyy', numberFormat: 'de-CH', }, });
Rückgabewert
Die createView-Funktion gibt die ID des generierten Objekts zurück, etwa:
1678804
Die Funktion parst das übergebene Objekt basierend auf seiner Dateiendung (PDF oder XML) und erstellt ein ParseResult-Objekt, das die geparsten Daten in normalisierter Form und Dateianhänge enthält. Die parse-Funktion überführt die Daten in das normalisierte agorum-Format und bereitet damit die Möglichkeit zur weiteren Verwendung oder Anzeige der Daten vor.
Die parse-Funktion extrahiert bei PDF-Dateien zunächst den XML-Anhang. Die übergebene XML-Datei oder der extrahierte XML-Anhang wird auf das verwendete XRechnungs-Format überprüft. Abhängig vom erkannten XRechnungs-Format erfolgt die Konvertierung in die normalisierten agorum-Daten. Wenn die XRechnung eingebettete Dateien enthält, werden diese in ihrem Ursprungsformat als Anhänge in den angegebenen Zielordner geschrieben. Wenn die Eingangsdatei ein ZUGFeRD-PDF war, wird die PDF-Datei als Attachment hinterlegt.
Wenn es sich bei dem übergebenen Objekt nicht um ein PDF- oder XML-Format handelt oder das XML nicht wohlgeformt ist, wird ein Fehler geworfen. Das passiert auch, wenn das XML-Wurzelelement nicht eines der bekannten Wurzelelemente von CII (CrossIndustryInvoice) oder UBL (Invoice oder CreditNote) ist oder ein ZUGFeRD 1.0-Rechnungsdokument (alte CII-Version) erkannt wird.
Syntax
parse(object, config)
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
object | Das E-Rechnungs-Objekt mit den zu normalisierenden Daten. | ja | – |
config | Ein Konfigurationsobjekt, das zusätzliche Angaben für das Parsen der Daten enthält:
|
nein | - |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let CII = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/Invoice_CII_Generated.xml'; let data = eInvoice.parse(objects.find(CII), { target: '/agorum/roi/test', validate: true, }); data;
Rückgabewert
Die parse-Funktion gibt ein ParseResult-Objekt zurück, das folgende Daten enthält:
{ "attachments" : [ 1678369 ], "data" : { "agorum_accounting_document_delivery_postcalcode" : "54321", "agorum_accounting_document_due_date" : "2023-12-31T11:00:00.000Z", "agorum_accounting_document_total_tax_rate_1" : 19.0, … }, "raw" : { }, "source" : 1584276, "validation" : { "structure" : [ ], "content" : { } } }
Das Ergebnis des Parsens besteht aus:
Das Validierungsergebnis enthält im Abschnitt structure das Ergebnis der formalen Überprüfung der Daten in Hinblick auf die Vollständigkeit und die Datenstruktur. Beispiel:
{ "level" : "error", "information" : "Invalid content found for unknown element. Value is missing or other value is expected: .", "message" : "[BR-S-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is \"Standard rated\" shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with \"Standard rated\"." },
Im Abschnitt content finden Sie zusätzliche Hinweise zum Dateninhalt, die das Ergebnis einfacher Plausibilitätsprüfungen sind.
"item" : [ { "itemId" : "d8a0cce0-b89b-4c80-8439-cb9e97dca4a9", "name" : "Position 2", "errors" : [ { "level" : "ERROR", "message" : "net_price (6000) multiplied with quantity (2) is differing more than one cent from net_amount: 6000" } ]
Zusätzlich zur formalen Validierung werden auch einige rudimentäre inhaltliche Validierungen durchgeführt (Geschäftslogik). Die inhaltliche Validierung umfasst:
net_price * quantity
innerhalb einer Toleranz von net_amount
liegt.invoice_period_from_date
muss vor invoice_period_until_date
liegen).Die Funktion überprüft, ob ein XML-Datenstrom eine gültige XRechnung ist.
Der übergebene XML-Datenstrom wird gegen den aktuellen verfügbaren KoSIT-Validator geprüft. Die Funktion erkennt, um welches XML-Format es sich handelt.
Wenn es sich bei dem übergebenen Objekt nicht um ein XML-Format handelt, das XML nicht wohlgeformt ist oder ein XML in einem anderen Format als den unterstützten XRechnungs-Formaten ist, wird ein Fehler geworfen.
Syntax
validate(xmlData, config)
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
xmlData | Der zu validierende Datenstrom. | ja | – |
config | Eine optionale Konfiguration, die spezifiziert, ob zusätzliche Inhalte wie ein HTML-Bericht erstellt werden sollen. createHtmlReport ( |
nein | - |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let xmlData = '<?xml version="1.0" encoding="UTF-8"?>\n<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xs="http://www.w3.org/2001/XMLSchema">\n … <rsm:CrossIndustryInvoice>\n'; let validation = eInvoice.validate(xmlData, { createHtmlReport: true }); validation;
Rückgabewert
Wenn der Parameter config gesetzt ist und angibt, dass ein HTML-Report erzeugt werden soll, wird zusätzlich die ID des erzeugten HTML-Reports zurückgegeben. Sonst wird nur das Validierungsresultat und eine Liste der Fehlermeldungen als Array zurückgegeben.
Im Falle einer erfolgreichen Prüfung ist das:
{ "valid" : true, "validation" : [ ] }
Im Fehlerfall wird ein Array von ValidationError-Objekten zurückgegeben, die Validierungsfehler beschreiben.
{ "valid" : false, "validation" : [ { "level" : "error", "information" : "Invalid content found for unknown element. Value is missing or other value is expected: .", "message" : "[BR-AE-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is \"Reverse charge\" shall contain in the VAT Breakdown (BG-23) exactly one VAT category code (BT-118) equal with \"VAT reverse charge\"." } ] }
Die Beschreibung eines Validierungsfehlers besteht aus:
Die Funktion überprüft, ob ein gegebenes Objekt eine gültige elektronische Rechnung ist. Das übergebene Objekt kann ein PDF- oder ein XML-Format sein. Zusätzlich können Sie optional angeben, wenn das Validierungsergebnis als HTML-Bericht ausgegeben werden soll.
Das XML der Rechnung wird gegen den aktuellen verfügbaren KoSIT-Validiator validiert. Die Funktion erkennt, um welches XML-Format es sich handelt.
Wenn es sich bei dem übergebenen Objekt nicht um ein PDF- oder XML-Format handelt, das XML nicht wohlgeformt ist oder ein XML in einem anderen Format als den unterstützten XRechnungs-Formaten ist, wird ein Fehler geworfen.
Syntax
validateInvoice(object, config)
Parameter
Parameter | Beschreibung | Pflicht | Standard |
---|---|---|---|
object | Das zu validierende Objekt. | ja | – |
config | Eine optionale Konfiguration, die spezifiziert, ob zusätzliche Inhalte wie ein HTML-Bericht erstellt werden sollen. createHtmlReport ( |
nein | - |
Beispiel
let objects = require('common/objects'); let eInvoice = require('/agorum/roi/customers/agorum.electronic.invoicing/js/lib/e-invoice'); let SAMPLE_INVOICE = '/agorum/roi/customers/agorum.electronic.invoicing/test/data/Rechnung-12345678-12983760.pdf'; let sampleInvoice = objects.find(SAMPLE_INVOICE); let validation = eInvoice.validateInvoice(sampleInvoice); validation;
Rückgabewert
Wenn der Parameter config gesetzt ist und angibt, dass ein HTML-Report erzeugt werden soll, wird zusätzlich der HTML-Report zurückgegeben. Sonst wird nur das Validierungsresultat und eine Liste der Fehlermeldungen als Array zurückgegeben.
Im Falle einer erfolgreichen Prüfung ist das:
{ "valid" : true, "validation" : [ ] }
Im Fehlerfall wird ein Array von ValidationError-Objekten zurückgegeben, die Validierungsfehler beschreiben.
{ "valid" : false, "validation" : [ { "level" : "error", "information" : "Invalid content found for unknown element. Value is missing or other value is expected: .", "message" : "[BR-AE-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is \"Reverse charge\" shall contain in the VAT Breakdown (BG-23) exactly one VAT category code (BT-118) equal with \"VAT reverse charge\"." } ] }
Die Beschreibung eines Validierungsfehlers besteht aus: