@fin.cx/einvoice 5.1.4 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{npmextra.json → .smartconfig.json} +12 -6
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/einvoice.d.ts +14 -5
- package/dist_ts/einvoice.js +165 -60
- package/dist_ts/errors.js +14 -4
- package/dist_ts/formats/base/base.decoder.d.ts +4 -0
- package/dist_ts/formats/base/base.decoder.js +9 -1
- package/dist_ts/formats/base/base.validator.js +3 -2
- package/dist_ts/formats/cii/cii.decoder.d.ts +1 -0
- package/dist_ts/formats/cii/cii.decoder.js +20 -10
- package/dist_ts/formats/cii/cii.encoder.js +2 -5
- package/dist_ts/formats/cii/cii.validator.d.ts +1 -1
- package/dist_ts/formats/cii/cii.validator.js +19 -12
- package/dist_ts/formats/converters/xml-to-einvoice.converter.js +3 -3
- package/dist_ts/formats/factories/decoder.factory.d.ts +3 -1
- package/dist_ts/formats/factories/decoder.factory.js +4 -3
- package/dist_ts/formats/factories/validator.factory.d.ts +4 -1
- package/dist_ts/formats/factories/validator.factory.js +11 -8
- package/dist_ts/formats/pdf/extractors/base.extractor.js +49 -51
- package/dist_ts/formats/pdf/extractors/text.extractor.js +19 -22
- package/dist_ts/formats/pdf/pdf.extractor.js +2 -2
- package/dist_ts/formats/semantic/semantic.adapter.js +42 -12
- package/dist_ts/formats/semantic/semantic.validator.js +3 -1
- package/dist_ts/formats/ubl/en16931.ubl.validator.js +5 -3
- package/dist_ts/formats/ubl/generic/ubl.encoder.js +11 -7
- package/dist_ts/formats/ubl/ubl.decoder.d.ts +1 -0
- package/dist_ts/formats/ubl/ubl.decoder.js +18 -8
- package/dist_ts/formats/ubl/ubl.validator.d.ts +1 -1
- package/dist_ts/formats/ubl/ubl.validator.js +17 -10
- package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.js +37 -29
- package/dist_ts/formats/utils/currency.calculator.decimal.js +4 -1
- package/dist_ts/formats/utils/currency.utils.js +4 -1
- package/dist_ts/formats/utils/decimal.js +9 -2
- package/dist_ts/formats/utils/format.detector.js +47 -17
- package/dist_ts/formats/validation/codelist.validator.js +2 -4
- package/dist_ts/formats/validation/conformance.harness.js +13 -6
- package/dist_ts/formats/validation/en16931.business-rules.validator.js +4 -4
- package/dist_ts/formats/validation/en16931.validator.d.ts +6 -0
- package/dist_ts/formats/validation/en16931.validator.js +18 -12
- package/dist_ts/formats/validation/facturx.validator.js +147 -148
- package/dist_ts/formats/validation/integrated.validator.js +12 -4
- package/dist_ts/formats/validation/peppol.validator.js +2 -1
- package/dist_ts/formats/validation/schematron.downloader.js +13 -6
- package/dist_ts/formats/validation/schematron.integration.js +12 -5
- package/dist_ts/formats/validation/schematron.validator.js +17 -13
- package/dist_ts/formats/validation/schematron.worker.js +6 -5
- package/dist_ts/formats/validation/vat-categories.validator.js +3 -4
- package/dist_ts/formats/validation/xrechnung.validator.js +7 -7
- package/dist_ts/index.js +3 -2
- package/dist_ts/interfaces/common.js +1 -2
- package/dist_ts/plugins.d.ts +3 -4
- package/dist_ts/plugins.js +4 -5
- package/dist_ts/vendor/pako.d.ts +5 -0
- package/dist_ts/vendor/pako.js +3 -0
- package/dist_ts/vendor/saxonjs.d.ts +22 -0
- package/dist_ts/vendor/saxonjs.js +3 -0
- package/dist_ts/vendor/xmldom.d.ts +20 -0
- package/dist_ts/vendor/xmldom.js +5 -0
- package/dist_ts_install/download-schematron.d.ts +0 -3
- package/dist_ts_install/download-schematron.js +20 -11
- package/dist_ts_install/download-test-samples.d.ts +0 -3
- package/dist_ts_install/download-test-samples.js +4 -2
- package/dist_ts_install/download-xrechnung-rules.js +2 -1
- package/dist_ts_install/index.d.ts +0 -5
- package/dist_ts_install/index.js +26 -12
- package/license +21 -0
- package/package.json +24 -22
- package/readme.hints.md +24 -8
- package/readme.md +195 -328
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +148 -26
- package/ts/formats/base/base.decoder.ts +7 -0
- package/ts/formats/cii/cii.decoder.ts +17 -8
- package/ts/formats/cii/cii.validator.ts +18 -13
- package/ts/formats/converters/xml-to-einvoice.converter.ts +4 -5
- package/ts/formats/factories/decoder.factory.ts +7 -2
- package/ts/formats/factories/validator.factory.ts +14 -8
- package/ts/formats/semantic/semantic.adapter.ts +49 -15
- package/ts/formats/ubl/en16931.ubl.validator.ts +5 -3
- package/ts/formats/ubl/generic/ubl.encoder.ts +12 -7
- package/ts/formats/ubl/ubl.decoder.ts +18 -9
- package/ts/formats/ubl/ubl.validator.ts +17 -12
- package/ts/formats/ubl/xrechnung/xrechnung.decoder.ts +41 -28
- package/ts/formats/utils/format.detector.ts +57 -19
- package/ts/formats/validation/conformance.harness.ts +6 -4
- package/ts/formats/validation/en16931.validator.ts +20 -10
- package/ts/formats/validation/integrated.validator.ts +5 -3
- package/ts/formats/validation/schematron.downloader.ts +11 -6
- package/ts/formats/validation/schematron.integration.ts +7 -4
- package/ts/formats/validation/schematron.validator.ts +12 -11
- package/ts/index.ts +2 -1
- package/ts/interfaces/common.ts +1 -3
- package/ts/plugins.ts +3 -4
- package/ts/readme.md +55 -0
- package/ts/vendor/modules.d.ts +32 -0
- package/ts/vendor/pako.ts +8 -0
- package/ts/vendor/saxonjs.ts +28 -0
- package/ts/vendor/xmldom.ts +27 -0
|
@@ -22,6 +22,10 @@ export declare abstract class BaseDecoder {
|
|
|
22
22
|
* @returns XML string
|
|
23
23
|
*/
|
|
24
24
|
getXml(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Gets a parsed XML document when a decoder keeps one around.
|
|
27
|
+
*/
|
|
28
|
+
getParsedDocument(): Document | undefined;
|
|
25
29
|
/**
|
|
26
30
|
* Parses a CII date string based on format code
|
|
27
31
|
* @param dateStr Date string
|
|
@@ -4,6 +4,8 @@ import { ValidationLevel } from '../../interfaces/common.js';
|
|
|
4
4
|
* for all invoice format decoders
|
|
5
5
|
*/
|
|
6
6
|
export class BaseDecoder {
|
|
7
|
+
xml;
|
|
8
|
+
skipValidation;
|
|
7
9
|
constructor(xml, skipValidation = false) {
|
|
8
10
|
this.xml = xml;
|
|
9
11
|
this.skipValidation = skipValidation;
|
|
@@ -22,6 +24,12 @@ export class BaseDecoder {
|
|
|
22
24
|
getXml() {
|
|
23
25
|
return this.xml;
|
|
24
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Gets a parsed XML document when a decoder keeps one around.
|
|
29
|
+
*/
|
|
30
|
+
getParsedDocument() {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
25
33
|
/**
|
|
26
34
|
* Parses a CII date string based on format code
|
|
27
35
|
* @param dateStr Date string
|
|
@@ -49,4 +57,4 @@ export class BaseDecoder {
|
|
|
49
57
|
return isNaN(parsed) ? Date.now() : parsed;
|
|
50
58
|
}
|
|
51
59
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5kZWNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy9iYXNlL2Jhc2UuZGVjb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixXQUFXO0lBQ3JCLEdBQUcsQ0FBUztJQUNaLGNBQWMsQ0FBVTtJQUVsQyxZQUFZLEdBQVcsRUFBRSxpQkFBMEIsS0FBSztRQUN0RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFRRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsYUFBYTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sWUFBWSxDQUFDLE9BQWUsRUFBRSxNQUFlO1FBQ3JELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFaEMseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxLQUFLLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUNoRixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEQsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsQ0FBQztDQUNGIn0=
|
|
@@ -4,8 +4,9 @@ import { ValidationLevel } from '../../interfaces/common.js';
|
|
|
4
4
|
* for all invoice format validators
|
|
5
5
|
*/
|
|
6
6
|
export class BaseValidator {
|
|
7
|
+
xml;
|
|
8
|
+
errors = [];
|
|
7
9
|
constructor(xml) {
|
|
8
|
-
this.errors = [];
|
|
9
10
|
this.xml = xml;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
@@ -36,4 +37,4 @@ export class BaseValidator {
|
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL2Jhc2UvYmFzZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzdEOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsYUFBYTtJQUN2QixHQUFHLENBQVM7SUFDWixNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUV6QyxZQUFZLEdBQVc7UUFDckIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQVNEOzs7T0FHRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBY0Q7Ozs7O09BS0c7SUFDTyxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBRSxXQUFtQixFQUFFO1FBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSTtZQUNKLE9BQU87WUFDUCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
|
|
@@ -11,6 +11,7 @@ export declare abstract class CIIBaseDecoder extends BaseDecoder {
|
|
|
11
11
|
protected select: xpath.XPathSelect;
|
|
12
12
|
protected profile: CIIProfile;
|
|
13
13
|
constructor(xml: string, skipValidation?: boolean);
|
|
14
|
+
getParsedDocument(): Document;
|
|
14
15
|
/**
|
|
15
16
|
* Decodes CII XML into a TInvoice object
|
|
16
17
|
* @returns Promise resolving to a TInvoice object
|
|
@@ -1,26 +1,35 @@
|
|
|
1
1
|
import { BaseDecoder } from '../base/base.decoder.js';
|
|
2
2
|
import { CII_NAMESPACES, CIIProfile } from './cii.types.js';
|
|
3
3
|
import { DOMParser, xpath } from '../../plugins.js';
|
|
4
|
+
const ciiParser = new DOMParser();
|
|
5
|
+
const ciiNamespaces = {
|
|
6
|
+
rsm: CII_NAMESPACES.RSM,
|
|
7
|
+
ram: CII_NAMESPACES.RAM,
|
|
8
|
+
udt: CII_NAMESPACES.UDT,
|
|
9
|
+
};
|
|
10
|
+
const ciiSelect = xpath.useNamespaces(ciiNamespaces);
|
|
4
11
|
/**
|
|
5
12
|
* Base decoder for CII-based invoice formats
|
|
6
13
|
*/
|
|
7
14
|
export class CIIBaseDecoder extends BaseDecoder {
|
|
15
|
+
doc;
|
|
16
|
+
namespaces;
|
|
17
|
+
select;
|
|
18
|
+
profile = CIIProfile.EN16931;
|
|
8
19
|
constructor(xml, skipValidation = false) {
|
|
9
20
|
super(xml, skipValidation);
|
|
10
|
-
this.profile = CIIProfile.EN16931;
|
|
11
21
|
// Parse XML document
|
|
12
|
-
this.doc =
|
|
22
|
+
this.doc = ciiParser.parseFromString(xml, 'application/xml');
|
|
13
23
|
// Set up namespaces for XPath queries
|
|
14
|
-
this.namespaces =
|
|
15
|
-
rsm: CII_NAMESPACES.RSM,
|
|
16
|
-
ram: CII_NAMESPACES.RAM,
|
|
17
|
-
udt: CII_NAMESPACES.UDT
|
|
18
|
-
};
|
|
24
|
+
this.namespaces = ciiNamespaces;
|
|
19
25
|
// Create XPath selector with namespaces
|
|
20
|
-
this.select =
|
|
26
|
+
this.select = ciiSelect;
|
|
21
27
|
// Detect profile
|
|
22
28
|
this.detectProfile();
|
|
23
29
|
}
|
|
30
|
+
getParsedDocument() {
|
|
31
|
+
return this.doc;
|
|
32
|
+
}
|
|
24
33
|
/**
|
|
25
34
|
* Decodes CII XML into a TInvoice object
|
|
26
35
|
* @returns Promise resolving to a TInvoice object
|
|
@@ -67,7 +76,8 @@ export class CIIBaseDecoder extends BaseDecoder {
|
|
|
67
76
|
* @returns Text value or empty string if not found
|
|
68
77
|
*/
|
|
69
78
|
getText(xpathExpr, context) {
|
|
70
|
-
const
|
|
79
|
+
const result = this.select(xpathExpr, context || this.doc);
|
|
80
|
+
const node = Array.isArray(result) ? result[0] : null;
|
|
71
81
|
return node ? (node.textContent || '') : '';
|
|
72
82
|
}
|
|
73
83
|
/**
|
|
@@ -108,4 +118,4 @@ export class CIIBaseDecoder extends BaseDecoder {
|
|
|
108
118
|
return false;
|
|
109
119
|
}
|
|
110
120
|
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lpLmRlY29kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL2NpaS9jaWkuZGVjb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUc7SUFDcEIsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQ3ZCLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRztJQUN2QixHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7Q0FDeEIsQ0FBQztBQUNGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGNBQWUsU0FBUSxXQUFXO0lBQzVDLEdBQUcsQ0FBVztJQUNkLFVBQVUsQ0FBeUI7SUFDbkMsTUFBTSxDQUFvQjtJQUMxQixPQUFPLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUVuRCxZQUFZLEdBQVcsRUFBRSxpQkFBMEIsS0FBSztRQUN0RCxLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTNCLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFN0Qsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBRWhDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUV4QixpQkFBaUI7UUFD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
|
|
@@ -4,10 +4,7 @@ import { CII_NAMESPACES, CIIProfile } from './cii.types.js';
|
|
|
4
4
|
* Base encoder for CII-based invoice formats
|
|
5
5
|
*/
|
|
6
6
|
export class CIIBaseEncoder extends BaseEncoder {
|
|
7
|
-
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.profile = CIIProfile.EN16931;
|
|
10
|
-
}
|
|
7
|
+
profile = CIIProfile.EN16931;
|
|
11
8
|
/**
|
|
12
9
|
* Sets the CII profile to use for encoding
|
|
13
10
|
* @param profile CII profile
|
|
@@ -45,4 +42,4 @@ export class CIIBaseEncoder extends BaseEncoder {
|
|
|
45
42
|
return date.toISOString().split('T')[0];
|
|
46
43
|
}
|
|
47
44
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lpLmVuY29kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL2NpaS9jaWkuZW5jb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsY0FBZSxTQUFRLFdBQVc7SUFDNUMsT0FBTyxHQUFlLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFFbkQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLE9BQW1CO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFpQjtRQUNuQyxxRUFBcUU7UUFDckUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQWdDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBZ0JEOzs7T0FHRztJQUNPLGFBQWE7UUFDckIsT0FBTzt1Q0FDNEIsY0FBYyxDQUFDLEdBQUc7ZUFDMUMsY0FBYyxDQUFDLEdBQUc7ZUFDbEIsY0FBYyxDQUFDLEdBQUc7NEJBQ0wsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLFVBQVUsQ0FBQyxTQUFpQjtRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIn0=
|
|
@@ -11,7 +11,7 @@ export declare abstract class CIIBaseValidator extends BaseValidator {
|
|
|
11
11
|
protected namespaces: Record<string, string>;
|
|
12
12
|
protected select: xpath.XPathSelect;
|
|
13
13
|
protected profile: CIIProfile;
|
|
14
|
-
constructor(xml: string);
|
|
14
|
+
constructor(xml: string, doc?: Document);
|
|
15
15
|
/**
|
|
16
16
|
* Validates CII XML against the specified level of validation
|
|
17
17
|
* @param level Validation level
|
|
@@ -2,24 +2,30 @@ import { BaseValidator } from '../base/base.validator.js';
|
|
|
2
2
|
import { ValidationLevel } from '../../interfaces/common.js';
|
|
3
3
|
import { CII_NAMESPACES, CIIProfile } from './cii.types.js';
|
|
4
4
|
import { DOMParser, xpath } from '../../plugins.js';
|
|
5
|
+
const ciiValidatorParser = new DOMParser();
|
|
6
|
+
const ciiValidatorNamespaces = {
|
|
7
|
+
rsm: CII_NAMESPACES.RSM,
|
|
8
|
+
ram: CII_NAMESPACES.RAM,
|
|
9
|
+
udt: CII_NAMESPACES.UDT,
|
|
10
|
+
};
|
|
11
|
+
const ciiValidatorSelect = xpath.useNamespaces(ciiValidatorNamespaces);
|
|
5
12
|
/**
|
|
6
13
|
* Base validator for CII-based invoice formats
|
|
7
14
|
*/
|
|
8
15
|
export class CIIBaseValidator extends BaseValidator {
|
|
9
|
-
|
|
16
|
+
doc;
|
|
17
|
+
namespaces;
|
|
18
|
+
select;
|
|
19
|
+
profile = CIIProfile.EN16931;
|
|
20
|
+
constructor(xml, doc) {
|
|
10
21
|
super(xml);
|
|
11
|
-
this.profile = CIIProfile.EN16931;
|
|
12
22
|
try {
|
|
13
|
-
//
|
|
14
|
-
this.doc =
|
|
23
|
+
// Reuse an existing parsed document when available.
|
|
24
|
+
this.doc = doc ?? ciiValidatorParser.parseFromString(xml, 'application/xml');
|
|
15
25
|
// Set up namespaces for XPath queries
|
|
16
|
-
this.namespaces =
|
|
17
|
-
rsm: CII_NAMESPACES.RSM,
|
|
18
|
-
ram: CII_NAMESPACES.RAM,
|
|
19
|
-
udt: CII_NAMESPACES.UDT
|
|
20
|
-
};
|
|
26
|
+
this.namespaces = ciiValidatorNamespaces;
|
|
21
27
|
// Create XPath selector with namespaces
|
|
22
|
-
this.select =
|
|
28
|
+
this.select = ciiValidatorSelect;
|
|
23
29
|
// Detect profile
|
|
24
30
|
this.detectProfile();
|
|
25
31
|
}
|
|
@@ -115,7 +121,8 @@ export class CIIBaseValidator extends BaseValidator {
|
|
|
115
121
|
* @returns Text value or empty string if not found
|
|
116
122
|
*/
|
|
117
123
|
getText(xpathExpr, context) {
|
|
118
|
-
const
|
|
124
|
+
const result = this.select(xpathExpr, context || this.doc);
|
|
125
|
+
const node = Array.isArray(result) ? result[0] : null;
|
|
119
126
|
return node ? (node.textContent || '') : '';
|
|
120
127
|
}
|
|
121
128
|
/**
|
|
@@ -143,4 +150,4 @@ export class CIIBaseValidator extends BaseValidator {
|
|
|
143
150
|
return false;
|
|
144
151
|
}
|
|
145
152
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lpLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvY2lpL2NpaS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQzNDLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHO0lBQ3ZCLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRztJQUN2QixHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7Q0FDeEIsQ0FBQztBQUNGLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBRXZFOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxhQUFhO0lBQ2hELEdBQUcsQ0FBWTtJQUNmLFVBQVUsQ0FBMEI7SUFDcEMsTUFBTSxDQUFxQjtJQUMzQixPQUFPLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUVuRCxZQUFZLEdBQVcsRUFBRSxHQUFjO1FBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVYLElBQUksQ0FBQztZQUNILG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFFN0Usc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsc0JBQXNCLENB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
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* Converts UBL and CII XML formats to internal EInvoice format
|
|
4
4
|
*/
|
|
5
5
|
import * as plugins from '../../plugins.js';
|
|
6
|
-
import { DOMParser } from '@xmldom/xmldom';
|
|
7
6
|
/**
|
|
8
7
|
* Converter for XML formats to EInvoice - simplified version
|
|
9
8
|
* This is a basic converter that extracts essential fields for testing
|
|
10
9
|
*/
|
|
11
10
|
export class XMLToEInvoiceConverter {
|
|
11
|
+
parser;
|
|
12
12
|
constructor() {
|
|
13
|
-
this.parser = new DOMParser();
|
|
13
|
+
this.parser = new plugins.DOMParser();
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Convert XML content to EInvoice
|
|
@@ -124,4 +124,4 @@ export class XMLToEInvoiceConverter {
|
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXRvLWVpbnZvaWNlLmNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Zvcm1hdHMvY29udmVydGVycy94bWwtdG8tZWludm9pY2UuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFJNUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixNQUFNLENBQXlDO0lBRXZEO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQWtCLEVBQUUsTUFBcUI7UUFDNUQsNkNBQTZDO1FBQzdDLG1FQUFtRTtRQUNuRSxNQUFNLFdBQVcsR0FBRztZQUNsQixlQUFlLEVBQUUsVUFBVTtZQUMzQixpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2hCLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxTQUFrQjtnQkFDeEIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDLE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsYUFBYTtvQkFDekIsV0FBVyxFQUFFLEdBQUc7b0JBQ2hCLElBQUksRUFBRSxXQUFXO29CQUNqQixVQUFVLEVBQUUsT0FBTztvQkFDbkIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLFdBQVcsRUFBRSxJQUFJO2lCQUNsQjtnQkFDRCxtQkFBbUIsRUFBRTtvQkFDbkIsV0FBVyxFQUFFLHFCQUFxQjtvQkFDbEMsbUJBQW1CLEVBQUUsSUFBSTtpQkFDMUI7YUFDSztZQUNSLEVBQUUsRUFBRTtnQkFDRixJQUFJLEVBQUUsU0FBa0I7Z0JBQ3hCLElB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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseDecoder } from '../base/base.decoder.js';
|
|
2
|
+
import { InvoiceFormat } from '../../interfaces/common.js';
|
|
2
3
|
/**
|
|
3
4
|
* Factory to create the appropriate decoder based on the XML format
|
|
4
5
|
*/
|
|
@@ -7,7 +8,8 @@ export declare class DecoderFactory {
|
|
|
7
8
|
* Creates a decoder for the specified XML content
|
|
8
9
|
* @param xml XML content to decode
|
|
9
10
|
* @param skipValidation Whether to skip EN16931 validation
|
|
11
|
+
* @param formatHint Optional pre-detected format to avoid re-detecting large XML inputs
|
|
10
12
|
* @returns Appropriate decoder instance
|
|
11
13
|
*/
|
|
12
|
-
static createDecoder(xml: string, skipValidation?: boolean): BaseDecoder;
|
|
14
|
+
static createDecoder(xml: string, skipValidation?: boolean, formatHint?: InvoiceFormat): BaseDecoder;
|
|
13
15
|
}
|
|
@@ -14,10 +14,11 @@ export class DecoderFactory {
|
|
|
14
14
|
* Creates a decoder for the specified XML content
|
|
15
15
|
* @param xml XML content to decode
|
|
16
16
|
* @param skipValidation Whether to skip EN16931 validation
|
|
17
|
+
* @param formatHint Optional pre-detected format to avoid re-detecting large XML inputs
|
|
17
18
|
* @returns Appropriate decoder instance
|
|
18
19
|
*/
|
|
19
|
-
static createDecoder(xml, skipValidation = false) {
|
|
20
|
-
const format = FormatDetector.detectFormat(xml);
|
|
20
|
+
static createDecoder(xml, skipValidation = false, formatHint) {
|
|
21
|
+
const format = formatHint ?? FormatDetector.detectFormat(xml);
|
|
21
22
|
switch (format) {
|
|
22
23
|
case InvoiceFormat.UBL:
|
|
23
24
|
case InvoiceFormat.XRECHNUNG:
|
|
@@ -53,4 +54,4 @@ export class DecoderFactory {
|
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2Rlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9ybWF0cy9mYWN0b3JpZXMvZGVjb2Rlci5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELDJCQUEyQjtBQUMzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXhFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsR0FBVyxFQUNYLGlCQUEwQixLQUFLLEVBQy9CLFVBQTBCO1FBRTFCLE1BQU0sTUFBTSxHQUFHLFVBQVUsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlELFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLGFBQWEsQ0FBQyxHQUFHLENBQUM7WUFDdkIsS0FBSyxhQUFhLENBQUMsU0FBUztnQkFDMUIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUVuRCxLQUFLLGFBQWEsQ0FBQyxHQUFHO2dCQUNwQixnREFBZ0Q7Z0JBQ2hELE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRWpELEtBQUssYUFBYSxDQUFDLE9BQU87Z0JBQ3hCLDJEQUEyRDtnQkFDM0QsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDO29CQUNyQyxHQUFHLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxDQUFDO29CQUMxRCxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN2RSxPQUFPLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFFSCxLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUN4QixPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUVqRCxLQUFLLGFBQWEsQ0FBQyxTQUFTO2dCQUMxQixvQ0FBb0M7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUUzRDtnQkFDRSw4RUFBOEU7Z0JBQzlFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO2dCQUNELGtGQUFrRjtnQkFDbEYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztvQkFDMUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseValidator } from '../base/base.validator.js';
|
|
2
|
+
import { InvoiceFormat } from '../../interfaces/common.js';
|
|
2
3
|
/**
|
|
3
4
|
* Factory to create the appropriate validator based on the XML format
|
|
4
5
|
*/
|
|
@@ -6,7 +7,9 @@ export declare class ValidatorFactory {
|
|
|
6
7
|
/**
|
|
7
8
|
* Creates a validator for the specified XML content
|
|
8
9
|
* @param xml XML content to validate
|
|
10
|
+
* @param formatHint Optional pre-detected format to avoid re-detecting large XML inputs
|
|
11
|
+
* @param parsedDocument Optional parsed XML document to avoid parsing twice
|
|
9
12
|
* @returns Appropriate validator instance
|
|
10
13
|
*/
|
|
11
|
-
static createValidator(xml: string): BaseValidator;
|
|
14
|
+
static createValidator(xml: string, formatHint?: InvoiceFormat, parsedDocument?: Document): BaseValidator;
|
|
12
15
|
}
|
|
@@ -50,23 +50,25 @@ export class ValidatorFactory {
|
|
|
50
50
|
/**
|
|
51
51
|
* Creates a validator for the specified XML content
|
|
52
52
|
* @param xml XML content to validate
|
|
53
|
+
* @param formatHint Optional pre-detected format to avoid re-detecting large XML inputs
|
|
54
|
+
* @param parsedDocument Optional parsed XML document to avoid parsing twice
|
|
53
55
|
* @returns Appropriate validator instance
|
|
54
56
|
*/
|
|
55
|
-
static createValidator(xml) {
|
|
57
|
+
static createValidator(xml, formatHint, parsedDocument) {
|
|
56
58
|
try {
|
|
57
|
-
const format = FormatDetector.detectFormat(xml);
|
|
59
|
+
const format = formatHint ?? FormatDetector.detectFormat(xml);
|
|
58
60
|
switch (format) {
|
|
59
61
|
case InvoiceFormat.UBL:
|
|
60
|
-
return new EN16931UBLValidator(xml);
|
|
62
|
+
return new EN16931UBLValidator(xml, parsedDocument);
|
|
61
63
|
case InvoiceFormat.XRECHNUNG:
|
|
62
|
-
return new XRechnungValidator(xml);
|
|
64
|
+
return new XRechnungValidator(xml, parsedDocument);
|
|
63
65
|
case InvoiceFormat.CII:
|
|
64
66
|
// For now, use Factur-X validator for generic CII
|
|
65
|
-
return new FacturXValidator(xml);
|
|
67
|
+
return new FacturXValidator(xml, parsedDocument);
|
|
66
68
|
case InvoiceFormat.ZUGFERD:
|
|
67
|
-
return new ZUGFeRDValidator(xml);
|
|
69
|
+
return new ZUGFeRDValidator(xml, parsedDocument);
|
|
68
70
|
case InvoiceFormat.FACTURX:
|
|
69
|
-
return new FacturXValidator(xml);
|
|
71
|
+
return new FacturXValidator(xml, parsedDocument);
|
|
70
72
|
case InvoiceFormat.FATTURAPA:
|
|
71
73
|
return new FatturaPAValidator(xml);
|
|
72
74
|
default:
|
|
@@ -88,6 +90,7 @@ export class ValidatorFactory {
|
|
|
88
90
|
* Provides meaningful validation errors instead of throwing exceptions
|
|
89
91
|
*/
|
|
90
92
|
class GenericValidator extends BaseValidator {
|
|
93
|
+
format;
|
|
91
94
|
constructor(xml, format) {
|
|
92
95
|
super(xml);
|
|
93
96
|
this.format = format;
|
|
@@ -107,4 +110,4 @@ class GenericValidator extends BaseValidator {
|
|
|
107
110
|
return false;
|
|
108
111
|
}
|
|
109
112
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL2ZhY3Rvcmllcy92YWxpZGF0b3IuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsNkJBQTZCO0FBQzdCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXZFLG1GQUFtRjtBQUNuRixvREFBb0Q7QUFFcEQ7OztHQUdHO0FBQ0gsTUFBTSxrQkFBbUIsU0FBUSxhQUFhO0lBQzVDLFFBQVEsQ0FBQyxRQUF5QixlQUFlLENBQUMsTUFBTTtRQUN0RCxlQUFlO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksS0FBSyxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLENBQUM7YUFBTSxJQUFJLEtBQUssS0FBSyxlQUFlLENBQUMsUUFBUSxJQUFJLEtBQUssS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEYsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztR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
|
|
@@ -3,56 +3,54 @@ import { PDFDocument, PDFDict, PDFName, PDFRawStream, PDFArray, PDFString, pako
|
|
|
3
3
|
* Base class for PDF XML extractors with common functionality
|
|
4
4
|
*/
|
|
5
5
|
export class BaseXMLExtractor {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
];
|
|
55
|
-
}
|
|
6
|
+
/**
|
|
7
|
+
* Known XML file names for different invoice formats
|
|
8
|
+
*/
|
|
9
|
+
knownFileNames = [
|
|
10
|
+
'factur-x.xml',
|
|
11
|
+
'zugferd-invoice.xml',
|
|
12
|
+
'ZUGFeRD-invoice.xml',
|
|
13
|
+
'xrechnung.xml',
|
|
14
|
+
'ubl-invoice.xml',
|
|
15
|
+
'invoice.xml',
|
|
16
|
+
'metadata.xml'
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Known XML formats to validate extracted content
|
|
20
|
+
*/
|
|
21
|
+
knownFormats = [
|
|
22
|
+
'CrossIndustryInvoice',
|
|
23
|
+
'CrossIndustryDocument',
|
|
24
|
+
'Invoice',
|
|
25
|
+
'CreditNote',
|
|
26
|
+
'ubl:Invoice',
|
|
27
|
+
'ubl:CreditNote',
|
|
28
|
+
'rsm:CrossIndustryInvoice',
|
|
29
|
+
'rsm:CrossIndustryDocument',
|
|
30
|
+
'ram:CrossIndustryDocument',
|
|
31
|
+
'urn:un:unece:uncefact',
|
|
32
|
+
'urn:ferd:CrossIndustryDocument',
|
|
33
|
+
'urn:zugferd',
|
|
34
|
+
'urn:factur-x',
|
|
35
|
+
'factur-x.eu',
|
|
36
|
+
'ZUGFeRD',
|
|
37
|
+
'FatturaElettronica'
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Known XML end tags for extracting content from strings
|
|
41
|
+
*/
|
|
42
|
+
knownEndTags = [
|
|
43
|
+
'</CrossIndustryInvoice>',
|
|
44
|
+
'</CrossIndustryDocument>',
|
|
45
|
+
'</Invoice>',
|
|
46
|
+
'</CreditNote>',
|
|
47
|
+
'</rsm:CrossIndustryInvoice>',
|
|
48
|
+
'</rsm:CrossIndustryDocument>',
|
|
49
|
+
'</ram:CrossIndustryDocument>',
|
|
50
|
+
'</ubl:Invoice>',
|
|
51
|
+
'</ubl:CreditNote>',
|
|
52
|
+
'</FatturaElettronica>'
|
|
53
|
+
];
|
|
56
54
|
/**
|
|
57
55
|
* Check if an XML string is valid
|
|
58
56
|
* @param xmlString XML string to check
|
|
@@ -316,4 +314,4 @@ export class BaseXMLExtractor {
|
|
|
316
314
|
this.knownFormats.some(format => content.includes(format)));
|
|
317
315
|
}
|
|
318
316
|
}
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5leHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9mb3JtYXRzL3BkZi9leHRyYWN0b3JzL2Jhc2UuZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3Rzs7R0FFRztBQUNILE1BQU0sT0FBZ0IsZ0JBQWdCO0lBQ3BDOztPQUVHO0lBQ2dCLGNBQWMsR0FBRztRQUNsQyxjQUFjO1FBQ2QscUJBQXFCO1FBQ3JCLHFCQUFxQjtRQUNyQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixjQUFjO0tBQ2YsQ0FBQztJQUVGOztPQUVHO0lBQ2dCLFlBQVksR0FBRztRQUNoQyxzQkFBc0I7UUFDdEIsdUJBQXVCO1FBQ3ZCLFNBQVM7UUFDVCxZQUFZO1FBQ1osYUFBYTtRQUNiLGdCQUFnQjtRQUNoQiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBQzNCLDJCQUEyQjtRQUMzQix1QkFBdUI7UUFDdkIsZ0NBQWdDO1FBQ2hDLGFBQWE7UUFDYixjQUFjO1FBQ2QsYUFBYTtRQUNiLFNBQVM7UUFDVCxvQkFBb0I7S0FDckIsQ0FBQztJQUVGOztPQUVHO0lBQ2dCLFlBQVksR0FBRztRQUNoQyx5QkFBeUI7UUFDekIsMEJBQTBCO1FBQzFCLFlBQVk7UUFDWixlQUFlO1FBQ2YsNkJBQTZCO1FBQzdCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsZ0JBQWdCO1FBQ2hCLG1CQUFtQjtRQUNuQix1QkFBdUI7S0FDeEIsQ0FBQztJQVNGOzs7O09BSUc7SUFDTyxVQUFVLENBQUMsU0FBaUI7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxF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
|