@ekwo-ai/factur-x 0.11.0 → 0.12.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/CHANGELOG.md +25 -0
- package/README.md +79 -3
- package/dist/cii-read.d.ts +48 -0
- package/dist/cii-read.d.ts.map +1 -0
- package/dist/cii-read.js +462 -0
- package/dist/cii-read.js.map +1 -0
- package/dist/decimal.d.ts +52 -0
- package/dist/decimal.d.ts.map +1 -0
- package/dist/decimal.js +121 -0
- package/dist/decimal.js.map +1 -0
- package/dist/errors.d.ts +39 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/pdf.d.ts +33 -6
- package/dist/pdf.d.ts.map +1 -1
- package/dist/pdf.js +81 -18
- package/dist/pdf.js.map +1 -1
- package/dist/received-checks.d.ts +34 -0
- package/dist/received-checks.d.ts.map +1 -0
- package/dist/received-checks.js +198 -0
- package/dist/received-checks.js.map +1 -0
- package/dist/received.d.ts +321 -0
- package/dist/received.d.ts.map +1 -0
- package/dist/received.js +20 -0
- package/dist/received.js.map +1 -0
- package/dist/xml.d.ts +43 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +274 -0
- package/dist/xml.js.map +1 -0
- package/dist/xmp.d.ts +15 -1
- package/dist/xmp.d.ts.map +1 -1
- package/dist/xmp.js +14 -4
- package/dist/xmp.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cii-read.js","sourceRoot":"","sources":["../src/cii-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact decimals, on the text they arrive as.
|
|
3
|
+
*
|
|
4
|
+
* Every figure of an invoice reaches this package as Postgres wrote it — a
|
|
5
|
+
* `numeric` read as text — and leaves it the same way. The rules of EN 16931
|
|
6
|
+
* compare those figures with `=`, not with a tolerance: a sum that a binary
|
|
7
|
+
* float gets wrong by one part in 2^52 is a rule reported broken on an invoice
|
|
8
|
+
* that is right. So nothing here is a `number`. A decimal is an integer and a
|
|
9
|
+
* scale, the integer is a `bigint`, and the four operations the rules need are
|
|
10
|
+
* exact.
|
|
11
|
+
*
|
|
12
|
+
* The Factur-X brick holds a copy of this file, byte for byte, for the reader
|
|
13
|
+
* of `received-checks.ts`; a test there compares the two.
|
|
14
|
+
*/
|
|
15
|
+
export interface Decimal {
|
|
16
|
+
/** The digits, as an integer: 12.30 is `1230n` at scale 2. */
|
|
17
|
+
readonly units: bigint;
|
|
18
|
+
/** How many of those digits are after the point. */
|
|
19
|
+
readonly scale: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Reads a decimal, or returns null for anything that is not one. An exponent,
|
|
23
|
+
* a thousands separator and a comma are not decimals: `xs:decimal` refuses the
|
|
24
|
+
* three, and what is refused there is refused here.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseDecimal(value: string | number | null | undefined): Decimal | null;
|
|
27
|
+
export declare function add(a: Decimal, b: Decimal): Decimal;
|
|
28
|
+
export declare function subtract(a: Decimal, b: Decimal): Decimal;
|
|
29
|
+
export declare function multiply(a: Decimal, b: Decimal): Decimal;
|
|
30
|
+
export declare function compare(a: Decimal, b: Decimal): -1 | 0 | 1;
|
|
31
|
+
export declare const equal: (a: Decimal, b: Decimal) => boolean;
|
|
32
|
+
export declare const ZERO: Decimal;
|
|
33
|
+
export declare const isZero: (a: Decimal) => boolean;
|
|
34
|
+
export declare function abs(a: Decimal): Decimal;
|
|
35
|
+
export declare function sum(values: readonly Decimal[]): Decimal;
|
|
36
|
+
/**
|
|
37
|
+
* Rounds to `places` decimals the way XPath's `round()` does: half towards
|
|
38
|
+
* positive infinity, so 2.5 becomes 3 and -2.5 becomes -2. It is the rounding
|
|
39
|
+
* the published rules are written with, and it is used here for nothing but
|
|
40
|
+
* re-reading them — this package rounds no figure it writes.
|
|
41
|
+
*/
|
|
42
|
+
export declare function roundXPath(a: Decimal, places: number): Decimal;
|
|
43
|
+
/** How many digits follow the point once the zeros that say nothing are gone. */
|
|
44
|
+
export declare function significantScale(a: Decimal): number;
|
|
45
|
+
/**
|
|
46
|
+
* The text of a decimal: a point, no exponent, no sign on zero, and at least
|
|
47
|
+
* `minScale` digits after the point. Trailing zeros beyond that are dropped,
|
|
48
|
+
* which changes no value and keeps `21.0000` — a rate as `numeric(7,4)` stores
|
|
49
|
+
* it — from travelling as four digits of nothing.
|
|
50
|
+
*/
|
|
51
|
+
export declare function formatDecimal(a: Decimal, minScale?: number): string;
|
|
52
|
+
//# sourceMappingURL=decimal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal.d.ts","sourceRoot":"","sources":["../src/decimal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,OAAO;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAkBtF;AAOD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAGnD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAExD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAG1D;AAED,eAAO,MAAM,KAAK,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,KAAG,OAA8B,CAAC;AAE9E,eAAO,MAAM,IAAI,EAAE,OAAiC,CAAC;AAErD,eAAO,MAAM,MAAM,GAAI,GAAG,OAAO,KAAG,OAAyB,CAAC;AAE9D,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAEvC;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAS9D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAOnD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,SAAI,GAAG,MAAM,CAe9D"}
|
package/dist/decimal.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact decimals, on the text they arrive as.
|
|
3
|
+
*
|
|
4
|
+
* Every figure of an invoice reaches this package as Postgres wrote it — a
|
|
5
|
+
* `numeric` read as text — and leaves it the same way. The rules of EN 16931
|
|
6
|
+
* compare those figures with `=`, not with a tolerance: a sum that a binary
|
|
7
|
+
* float gets wrong by one part in 2^52 is a rule reported broken on an invoice
|
|
8
|
+
* that is right. So nothing here is a `number`. A decimal is an integer and a
|
|
9
|
+
* scale, the integer is a `bigint`, and the four operations the rules need are
|
|
10
|
+
* exact.
|
|
11
|
+
*
|
|
12
|
+
* The Factur-X brick holds a copy of this file, byte for byte, for the reader
|
|
13
|
+
* of `received-checks.ts`; a test there compares the two.
|
|
14
|
+
*/
|
|
15
|
+
const SYNTAX = /^[+-]?(\d+)(\.\d+)?$|^[+-]?(\.\d+)$/;
|
|
16
|
+
/**
|
|
17
|
+
* Reads a decimal, or returns null for anything that is not one. An exponent,
|
|
18
|
+
* a thousands separator and a comma are not decimals: `xs:decimal` refuses the
|
|
19
|
+
* three, and what is refused there is refused here.
|
|
20
|
+
*/
|
|
21
|
+
export function parseDecimal(value) {
|
|
22
|
+
if (value === null || value === undefined)
|
|
23
|
+
return null;
|
|
24
|
+
let text;
|
|
25
|
+
if (typeof value === 'number') {
|
|
26
|
+
if (!Number.isFinite(value))
|
|
27
|
+
return null;
|
|
28
|
+
// A number is accepted for convenience and printed the way JavaScript
|
|
29
|
+
// prints it, which is the shortest text that reads back as the same
|
|
30
|
+
// double. Past 1e21 that text has an exponent and is refused below.
|
|
31
|
+
text = String(value);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
text = value.trim();
|
|
35
|
+
}
|
|
36
|
+
if (!SYNTAX.test(text))
|
|
37
|
+
return null;
|
|
38
|
+
const negative = text.startsWith('-');
|
|
39
|
+
const unsigned = text.replace(/^[+-]/, '');
|
|
40
|
+
const [whole = '', fraction = ''] = unsigned.split('.');
|
|
41
|
+
const units = BigInt((whole || '0') + fraction);
|
|
42
|
+
return { units: negative ? -units : units, scale: fraction.length };
|
|
43
|
+
}
|
|
44
|
+
function align(a, b) {
|
|
45
|
+
const scale = Math.max(a.scale, b.scale);
|
|
46
|
+
return [a.units * 10n ** BigInt(scale - a.scale), b.units * 10n ** BigInt(scale - b.scale), scale];
|
|
47
|
+
}
|
|
48
|
+
export function add(a, b) {
|
|
49
|
+
const [x, y, scale] = align(a, b);
|
|
50
|
+
return { units: x + y, scale };
|
|
51
|
+
}
|
|
52
|
+
export function subtract(a, b) {
|
|
53
|
+
const [x, y, scale] = align(a, b);
|
|
54
|
+
return { units: x - y, scale };
|
|
55
|
+
}
|
|
56
|
+
export function multiply(a, b) {
|
|
57
|
+
return { units: a.units * b.units, scale: a.scale + b.scale };
|
|
58
|
+
}
|
|
59
|
+
export function compare(a, b) {
|
|
60
|
+
const [x, y] = align(a, b);
|
|
61
|
+
return x < y ? -1 : x > y ? 1 : 0;
|
|
62
|
+
}
|
|
63
|
+
export const equal = (a, b) => compare(a, b) === 0;
|
|
64
|
+
export const ZERO = { units: 0n, scale: 0 };
|
|
65
|
+
export const isZero = (a) => a.units === 0n;
|
|
66
|
+
export function abs(a) {
|
|
67
|
+
return a.units < 0n ? { units: -a.units, scale: a.scale } : a;
|
|
68
|
+
}
|
|
69
|
+
export function sum(values) {
|
|
70
|
+
return values.reduce(add, ZERO);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Rounds to `places` decimals the way XPath's `round()` does: half towards
|
|
74
|
+
* positive infinity, so 2.5 becomes 3 and -2.5 becomes -2. It is the rounding
|
|
75
|
+
* the published rules are written with, and it is used here for nothing but
|
|
76
|
+
* re-reading them — this package rounds no figure it writes.
|
|
77
|
+
*/
|
|
78
|
+
export function roundXPath(a, places) {
|
|
79
|
+
if (a.scale <= places)
|
|
80
|
+
return a;
|
|
81
|
+
const divisor = 10n ** BigInt(a.scale - places);
|
|
82
|
+
// floor(x + 1/2), on integers: floor((2·units + divisor) / (2·divisor)).
|
|
83
|
+
const numerator = 2n * a.units + divisor;
|
|
84
|
+
const denominator = 2n * divisor;
|
|
85
|
+
let quotient = numerator / denominator;
|
|
86
|
+
if (numerator % denominator !== 0n && numerator < 0n)
|
|
87
|
+
quotient -= 1n;
|
|
88
|
+
return { units: quotient, scale: places };
|
|
89
|
+
}
|
|
90
|
+
/** How many digits follow the point once the zeros that say nothing are gone. */
|
|
91
|
+
export function significantScale(a) {
|
|
92
|
+
let { units, scale } = a;
|
|
93
|
+
while (scale > 0 && units % 10n === 0n) {
|
|
94
|
+
units /= 10n;
|
|
95
|
+
scale -= 1;
|
|
96
|
+
}
|
|
97
|
+
return scale;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The text of a decimal: a point, no exponent, no sign on zero, and at least
|
|
101
|
+
* `minScale` digits after the point. Trailing zeros beyond that are dropped,
|
|
102
|
+
* which changes no value and keeps `21.0000` — a rate as `numeric(7,4)` stores
|
|
103
|
+
* it — from travelling as four digits of nothing.
|
|
104
|
+
*/
|
|
105
|
+
export function formatDecimal(a, minScale = 0) {
|
|
106
|
+
let { units, scale } = a;
|
|
107
|
+
while (scale > minScale && units % 10n === 0n) {
|
|
108
|
+
units /= 10n;
|
|
109
|
+
scale -= 1;
|
|
110
|
+
}
|
|
111
|
+
if (scale < minScale) {
|
|
112
|
+
units *= 10n ** BigInt(minScale - scale);
|
|
113
|
+
scale = minScale;
|
|
114
|
+
}
|
|
115
|
+
const negative = units < 0n;
|
|
116
|
+
const digits = (negative ? -units : units).toString().padStart(scale + 1, '0');
|
|
117
|
+
const whole = digits.slice(0, digits.length - scale);
|
|
118
|
+
const fraction = scale > 0 ? `.${digits.slice(digits.length - scale)}` : '';
|
|
119
|
+
return `${negative ? '-' : ''}${whole}${fraction}`;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=decimal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal.js","sourceRoot":"","sources":["../src/decimal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,MAAM,MAAM,GAAG,qCAAqC,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAyC;IACpE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,IAAY,CAAC;IACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,sEAAsE;QACtE,oEAAoE;QACpE,oEAAoE;QACpE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,KAAK,CAAC,CAAU,EAAE,CAAU;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAU,EAAE,CAAU;IACxC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,CAAU;IAC7C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,CAAU;IAC7C,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAU,EAAE,CAAU;IAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,IAAI,GAAY,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAErD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;AAE9D,MAAM,UAAU,GAAG,CAAC,CAAU;IAC5B,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,MAA0B;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,CAAU,EAAE,MAAc;IACnD,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM;QAAE,OAAO,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAChD,yEAAyE;IACzE,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC;IACzC,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC;IACjC,IAAI,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACvC,IAAI,SAAS,GAAG,WAAW,KAAK,EAAE,IAAI,SAAS,GAAG,EAAE;QAAE,QAAQ,IAAI,EAAE,CAAC;IACrE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,CAAU;IACzC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC;QACvC,KAAK,IAAI,GAAG,CAAC;QACb,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,CAAU,EAAE,QAAQ,GAAG,CAAC;IACpD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,KAAK,GAAG,QAAQ,IAAI,KAAK,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC;QAC9C,KAAK,IAAI,GAAG,CAAC;QACb,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;QACrB,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;QACzC,KAAK,GAAG,QAAQ,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC;AACrD,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What makes a received file unreadable, as opposed to an invoice that reads
|
|
3
|
+
* and does not add up. The second comes back in `violations`; the first is
|
|
4
|
+
* thrown, because a file that is not an invoice has nothing to hang a
|
|
5
|
+
* violation on.
|
|
6
|
+
*
|
|
7
|
+
* The same file, byte for byte, in the two e-invoicing bricks that read, so
|
|
8
|
+
* that a caller handles a refusal of either by the same codes.
|
|
9
|
+
*/
|
|
10
|
+
export type InvoiceFileErrorCode =
|
|
11
|
+
/** Larger than `maxBytes`. Refused before a single character is read. */
|
|
12
|
+
'too_large'
|
|
13
|
+
/** Bytes that are not UTF-8, or a declaration that names another encoding. */
|
|
14
|
+
| 'unsupported_encoding'
|
|
15
|
+
/** A `<!DOCTYPE`. No invoice needs one, and every entity attack does. */
|
|
16
|
+
| 'doctype_forbidden'
|
|
17
|
+
/** An entity other than the five XML predefines and character references. */
|
|
18
|
+
| 'undefined_entity'
|
|
19
|
+
/** Elements nested deeper than `maxDepth`. */
|
|
20
|
+
| 'too_deep'
|
|
21
|
+
/** More elements than `maxElements`. */
|
|
22
|
+
| 'too_many_elements'
|
|
23
|
+
/** Not well-formed XML, in the subset this reader takes. */
|
|
24
|
+
| 'malformed_xml'
|
|
25
|
+
/** Well-formed, and not a UBL 2.1 `Invoice` or `CreditNote`: another root, another namespace. */
|
|
26
|
+
| 'not_an_invoice'
|
|
27
|
+
/** An element without which there is no invoice to book: its number, its date, its currency, its totals, a line. */
|
|
28
|
+
| 'missing_element'
|
|
29
|
+
/** A value that is not what its element holds: a date that is not a date, an amount that is not a number. */
|
|
30
|
+
| 'invalid_value'
|
|
31
|
+
/** Factur-X only: the bytes are not a PDF that can be opened. */
|
|
32
|
+
| 'not_a_pdf'
|
|
33
|
+
/** Factur-X only: a PDF that carries no `factur-x.xml`, `zugferd-invoice.xml` or `xrechnung.xml`. */
|
|
34
|
+
| 'no_embedded_invoice';
|
|
35
|
+
export declare class InvoiceFileError extends Error {
|
|
36
|
+
readonly code: InvoiceFileErrorCode;
|
|
37
|
+
constructor(code: InvoiceFileErrorCode, message: string);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB;AAC9B,yEAAyE;AACvE,WAAW;AACb,8EAA8E;GAC5E,sBAAsB;AACxB,yEAAyE;GACvE,mBAAmB;AACrB,6EAA6E;GAC3E,kBAAkB;AACpB,8CAA8C;GAC5C,UAAU;AACZ,wCAAwC;GACtC,mBAAmB;AACrB,4DAA4D;GAC1D,eAAe;AACjB,iGAAiG;GAC/F,gBAAgB;AAClB,oHAAoH;GAClH,iBAAiB;AACnB,6GAA6G;GAC3G,eAAe;AACjB,iEAAiE;GAC/D,WAAW;AACb,qGAAqG;GACnG,qBAAqB,CAAC;AAE1B,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAExB,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM;CAKxD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAmCA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAuB;IAEpC,YAAY,IAA0B,EAAE,OAAe;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,8 @@ export { toUnitCode, UNIT_CODES } from './units.js';
|
|
|
5
5
|
export { buildXmpMetadata, CONFORMANCE_LEVELS } from './xmp.js';
|
|
6
6
|
export type { XmpOptions } from './xmp.js';
|
|
7
7
|
export type { CurrencyCode, DocumentType, GenerateOptions, Invoice, InvoiceLine, InvoiceTotals, IsoDate, LegalIdentifier, Party, PaymentInstructions, PostalAddress, Profile, VatBreakdown, VatCategory, } from './types.js';
|
|
8
|
+
export { profileOf, readCii, type ReceivedCiiFile } from './cii-read.js';
|
|
9
|
+
export { InvoiceFileError, type InvoiceFileErrorCode } from './errors.js';
|
|
10
|
+
export { CREDIT_NOTE_TYPE_CODES, checkReceived, isValidIban } from './received-checks.js';
|
|
11
|
+
export type { DateText, DecimalText, ReadOptions, ReceivedAccount, ReceivedAddress, ReceivedAllowanceCharge, ReceivedAttachment, ReceivedContact, ReceivedIdentifier, ReceivedInvoice, ReceivedInvoiceFile, ReceivedLine, ReceivedParty, ReceivedPaymentMeans, ReceivedTax, ReceivedTotals, ReceivedViolation, } from './received.js';
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,OAAO,EACP,WAAW,EACX,aAAa,EACb,OAAO,EACP,eAAe,EACf,KAAK,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,OAAO,EACP,WAAW,EACX,aAAa,EACb,OAAO,EACP,eAAe,EACf,KAAK,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,8 @@ export { computeTotals, lineNetAmount, lineVatCategory, round2 } from './totals.
|
|
|
3
3
|
export { defaultVatCategory, isEuCountry, EU_COUNTRIES, EXEMPT_CATEGORIES, EXEMPTION_REASON_CODES, DEFAULT_EXEMPTION_REASONS, } from './vat.js';
|
|
4
4
|
export { toUnitCode, UNIT_CODES } from './units.js';
|
|
5
5
|
export { buildXmpMetadata, CONFORMANCE_LEVELS } from './xmp.js';
|
|
6
|
+
// --- reading ---------------------------------------------------------------
|
|
7
|
+
export { profileOf, readCii } from './cii-read.js';
|
|
8
|
+
export { InvoiceFileError } from './errors.js';
|
|
9
|
+
export { CREDIT_NOTE_TYPE_CODES, checkReceived, isValidIban } from './received-checks.js';
|
|
6
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAmBhE,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAwB,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAA6B,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/pdf.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { type ReceivedCiiFile } from './cii-read.js';
|
|
2
|
+
import type { ReadOptions } from './received.js';
|
|
1
3
|
import type { Profile } from './types.js';
|
|
2
4
|
export declare const FACTURX_FILENAME = "factur-x.xml";
|
|
3
5
|
/** File name used by ZUGFeRD 2.x documents; accepted when reading. */
|
|
4
6
|
export declare const ZUGFERD_FILENAME = "zugferd-invoice.xml";
|
|
7
|
+
/** File name ZUGFeRD 2.1 and later give the XML of their XRECHNUNG profile; accepted when reading. */
|
|
8
|
+
export declare const XRECHNUNG_FILENAME = "xrechnung.xml";
|
|
5
9
|
export interface EmbedOptions {
|
|
6
10
|
/** Defaults to `"basic"`. Must match the guideline used for the XML. */
|
|
7
11
|
profile?: Profile;
|
|
@@ -14,10 +18,15 @@ export interface EmbedOptions {
|
|
|
14
18
|
/**
|
|
15
19
|
* Returns a copy of `pdf` carrying `xml` as `factur-x.xml`.
|
|
16
20
|
*
|
|
17
|
-
* The
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
+
* The XMP packet it writes declares PDF/A-3 and says what the document
|
|
22
|
+
* information dictionary says — title, author, subject, keywords, creator,
|
|
23
|
+
* producer, creation and modification dates — read from `pdf` where the
|
|
24
|
+
* options do not give them, because PDF/A wants the two to agree. The rest of
|
|
25
|
+
* the visual PDF is left untouched, and whether the result conforms to PDF/A-3
|
|
26
|
+
* depends on it: every font embedded, an output intent, no transparency PDF/A
|
|
27
|
+
* forbids. A PDF that has them, such as the one `@ekwo-ai/invoice-pdf`
|
|
28
|
+
* renders, passes veraPDF's PDF/A-3b profile once embedded; another may not,
|
|
29
|
+
* and only a validator says which.
|
|
21
30
|
*/
|
|
22
31
|
export declare function embedFacturX(pdf: Uint8Array | ArrayBuffer, xml: string, options?: EmbedOptions): Promise<Uint8Array>;
|
|
23
32
|
export interface ExtractedInvoice {
|
|
@@ -25,8 +34,26 @@ export interface ExtractedInvoice {
|
|
|
25
34
|
xml: string;
|
|
26
35
|
}
|
|
27
36
|
/**
|
|
28
|
-
* Reads the embedded invoice XML (`factur-x.xml
|
|
29
|
-
* from a PDF. Returns `null` when the file carries none.
|
|
37
|
+
* Reads the embedded invoice XML (`factur-x.xml`, `zugferd-invoice.xml` or
|
|
38
|
+
* `xrechnung.xml`) from a PDF. Returns `null` when the file carries none.
|
|
30
39
|
*/
|
|
31
40
|
export declare function extractFacturX(pdf: Uint8Array | ArrayBuffer): Promise<ExtractedInvoice | null>;
|
|
41
|
+
/** What {@link readFacturX} returns: the invoice read from the XML, and the name the XML was attached under. */
|
|
42
|
+
export interface ReceivedFacturX extends ReceivedCiiFile {
|
|
43
|
+
/** `factur-x.xml`, `zugferd-invoice.xml` or `xrechnung.xml`. */
|
|
44
|
+
filename: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Reads a received Factur-X or ZUGFeRD PDF: finds the CII XML attached to it
|
|
48
|
+
* and reads it with {@link readCii}, into the shape the UBL reader of
|
|
49
|
+
* `@ekwo-ai/peppol-ubl` returns too. The PDF itself is the caller's already,
|
|
50
|
+
* and is not returned again.
|
|
51
|
+
*
|
|
52
|
+
* Rejects with an {@link InvoiceFileError}: `too_large` for a file over
|
|
53
|
+
* `maxBytes`, before it is opened; `not_a_pdf` for bytes `pdf-lib` cannot open
|
|
54
|
+
* as a PDF; `no_embedded_invoice` for a PDF without the XML; and every code of
|
|
55
|
+
* {@link readCii} for the XML. Nothing `pdf-lib` throws escapes as anything
|
|
56
|
+
* else.
|
|
57
|
+
*/
|
|
58
|
+
export declare function readFacturX(pdf: Uint8Array | ArrayBuffer, options?: ReadOptions): Promise<ReceivedFacturX>;
|
|
32
59
|
//# sourceMappingURL=pdf.d.ts.map
|
package/dist/pdf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,eAAe,EAAW,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAC/C,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AACtD,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,GAAG,WAAW,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAqBD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGpG;AAED,gHAAgH;AAChH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6BpH"}
|
package/dist/pdf.js
CHANGED
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PDF side of Factur-X: attach the CII XML to a PDF as `factur-x.xml` with
|
|
3
3
|
* `AFRelationship /Alternative`, declare the document as PDF/A-3 in XMP, and
|
|
4
|
-
* read the XML back from an existing Factur-X / ZUGFeRD file
|
|
4
|
+
* read the XML back from an existing Factur-X / ZUGFeRD file, and read the
|
|
5
|
+
* invoice it holds (`readFacturX`).
|
|
5
6
|
*
|
|
6
7
|
* Only this module depends on `pdf-lib`; import it from `@ekwo-ai/factur-x/pdf`.
|
|
7
8
|
*/
|
|
8
9
|
import { AFRelationship, PDFArray, PDFDict, PDFDocument, PDFHexString, PDFName, PDFRawStream, PDFString, decodePDFRawStream, } from 'pdf-lib';
|
|
10
|
+
import { readCii } from './cii-read.js';
|
|
11
|
+
import { InvoiceFileError } from './errors.js';
|
|
9
12
|
import { buildXmpMetadata } from './xmp.js';
|
|
10
13
|
export const FACTURX_FILENAME = 'factur-x.xml';
|
|
11
14
|
/** File name used by ZUGFeRD 2.x documents; accepted when reading. */
|
|
12
15
|
export const ZUGFERD_FILENAME = 'zugferd-invoice.xml';
|
|
16
|
+
/** File name ZUGFeRD 2.1 and later give the XML of their XRECHNUNG profile; accepted when reading. */
|
|
17
|
+
export const XRECHNUNG_FILENAME = 'xrechnung.xml';
|
|
13
18
|
/**
|
|
14
19
|
* Returns a copy of `pdf` carrying `xml` as `factur-x.xml`.
|
|
15
20
|
*
|
|
16
|
-
* The
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
21
|
+
* The XMP packet it writes declares PDF/A-3 and says what the document
|
|
22
|
+
* information dictionary says — title, author, subject, keywords, creator,
|
|
23
|
+
* producer, creation and modification dates — read from `pdf` where the
|
|
24
|
+
* options do not give them, because PDF/A wants the two to agree. The rest of
|
|
25
|
+
* the visual PDF is left untouched, and whether the result conforms to PDF/A-3
|
|
26
|
+
* depends on it: every font embedded, an output intent, no transparency PDF/A
|
|
27
|
+
* forbids. A PDF that has them, such as the one `@ekwo-ai/invoice-pdf`
|
|
28
|
+
* renders, passes veraPDF's PDF/A-3b profile once embedded; another may not,
|
|
29
|
+
* and only a validator says which.
|
|
20
30
|
*/
|
|
21
31
|
export async function embedFacturX(pdf, xml, options = {}) {
|
|
22
32
|
const profile = options.profile ?? 'basic';
|
|
@@ -29,41 +39,94 @@ export async function embedFacturX(pdf, xml, options = {}) {
|
|
|
29
39
|
modificationDate: date,
|
|
30
40
|
afRelationship: AFRelationship.Alternative,
|
|
31
41
|
});
|
|
32
|
-
const xmp = new TextEncoder().encode(buildXmpMetadata({ profile, ...options, date }));
|
|
33
|
-
const stream = doc.context.stream(xmp, { Type: 'Metadata', Subtype: 'XML', Length: xmp.length });
|
|
34
|
-
doc.catalog.set(PDFName.of('Metadata'), doc.context.register(stream));
|
|
35
42
|
if (options.title)
|
|
36
43
|
doc.setTitle(options.title);
|
|
37
44
|
if (options.creator)
|
|
38
45
|
doc.setCreator(options.creator);
|
|
39
46
|
doc.setProducer(options.producer ?? '@ekwo-ai/factur-x');
|
|
47
|
+
const creationDate = doc.getCreationDate() ?? date;
|
|
48
|
+
doc.setCreationDate(creationDate);
|
|
40
49
|
doc.setModificationDate(date);
|
|
50
|
+
// The XMP says what the information dictionary now says, entry for entry.
|
|
51
|
+
const xmp = new TextEncoder().encode(buildXmpMetadata({
|
|
52
|
+
profile,
|
|
53
|
+
title: doc.getTitle(),
|
|
54
|
+
author: doc.getAuthor(),
|
|
55
|
+
subject: doc.getSubject(),
|
|
56
|
+
keywords: doc.getKeywords(),
|
|
57
|
+
creator: doc.getCreator(),
|
|
58
|
+
producer: doc.getProducer(),
|
|
59
|
+
date,
|
|
60
|
+
creationDate,
|
|
61
|
+
}));
|
|
62
|
+
const stream = doc.context.stream(xmp, { Type: 'Metadata', Subtype: 'XML', Length: xmp.length });
|
|
63
|
+
doc.catalog.set(PDFName.of('Metadata'), doc.context.register(stream));
|
|
41
64
|
return doc.save({ useObjectStreams: false });
|
|
42
65
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
*/
|
|
47
|
-
export async function extractFacturX(pdf) {
|
|
66
|
+
const WANTED = new Set([FACTURX_FILENAME, ZUGFERD_FILENAME, XRECHNUNG_FILENAME]);
|
|
67
|
+
/** The bytes of the first embedded file of the PDF whose name is one of {@link WANTED}. */
|
|
68
|
+
async function embeddedInvoice(pdf) {
|
|
48
69
|
const doc = await PDFDocument.load(pdf, { updateMetadata: false, ignoreEncryption: true });
|
|
49
70
|
const names = doc.catalog.lookupMaybe(PDFName.of('Names'), PDFDict);
|
|
50
71
|
const embedded = names?.lookupMaybe(PDFName.of('EmbeddedFiles'), PDFDict);
|
|
51
72
|
if (!embedded)
|
|
52
73
|
return null;
|
|
53
|
-
const wanted = new Set([FACTURX_FILENAME, ZUGFERD_FILENAME]);
|
|
54
74
|
for (const [name, spec] of walkNameTree(doc, embedded)) {
|
|
55
|
-
if (!
|
|
75
|
+
if (!WANTED.has(name))
|
|
56
76
|
continue;
|
|
57
77
|
const ef = spec.lookupMaybe(PDFName.of('EF'), PDFDict);
|
|
58
78
|
const candidate = ef?.lookup(PDFName.of('UF')) ?? ef?.lookup(PDFName.of('F'));
|
|
59
79
|
if (!(candidate instanceof PDFRawStream))
|
|
60
80
|
continue;
|
|
61
|
-
|
|
62
|
-
const bytes = decodePDFRawStream(stream).decode();
|
|
63
|
-
return { filename: name, xml: new TextDecoder('utf-8').decode(bytes) };
|
|
81
|
+
return { filename: name, bytes: decodePDFRawStream(candidate).decode() };
|
|
64
82
|
}
|
|
65
83
|
return null;
|
|
66
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Reads the embedded invoice XML (`factur-x.xml`, `zugferd-invoice.xml` or
|
|
87
|
+
* `xrechnung.xml`) from a PDF. Returns `null` when the file carries none.
|
|
88
|
+
*/
|
|
89
|
+
export async function extractFacturX(pdf) {
|
|
90
|
+
const found = await embeddedInvoice(pdf);
|
|
91
|
+
return found === null ? null : { filename: found.filename, xml: new TextDecoder('utf-8').decode(found.bytes) };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Reads a received Factur-X or ZUGFeRD PDF: finds the CII XML attached to it
|
|
95
|
+
* and reads it with {@link readCii}, into the shape the UBL reader of
|
|
96
|
+
* `@ekwo-ai/peppol-ubl` returns too. The PDF itself is the caller's already,
|
|
97
|
+
* and is not returned again.
|
|
98
|
+
*
|
|
99
|
+
* Rejects with an {@link InvoiceFileError}: `too_large` for a file over
|
|
100
|
+
* `maxBytes`, before it is opened; `not_a_pdf` for bytes `pdf-lib` cannot open
|
|
101
|
+
* as a PDF; `no_embedded_invoice` for a PDF without the XML; and every code of
|
|
102
|
+
* {@link readCii} for the XML. Nothing `pdf-lib` throws escapes as anything
|
|
103
|
+
* else.
|
|
104
|
+
*/
|
|
105
|
+
export async function readFacturX(pdf, options = {}) {
|
|
106
|
+
const bytes = pdf instanceof Uint8Array ? pdf : new Uint8Array(pdf);
|
|
107
|
+
const maxBytes = options.maxBytes ?? 64 * 1024 * 1024;
|
|
108
|
+
if (bytes.byteLength > maxBytes) {
|
|
109
|
+
throw new InvoiceFileError('too_large', `the file is ${bytes.byteLength} bytes, over the limit of ${maxBytes}`);
|
|
110
|
+
}
|
|
111
|
+
// A PDF opens with its %PDF- header (ISO 32000-1, 7.5.2), which readers
|
|
112
|
+
// accept within the first kilobyte; asked here so that the refusal of a
|
|
113
|
+
// file that is not one says so before anything is parsed.
|
|
114
|
+
const head = new TextDecoder('latin1').decode(bytes.subarray(0, 1024));
|
|
115
|
+
if (!head.includes('%PDF-')) {
|
|
116
|
+
throw new InvoiceFileError('not_a_pdf', 'the file is not a PDF: it has no %PDF- header');
|
|
117
|
+
}
|
|
118
|
+
let found;
|
|
119
|
+
try {
|
|
120
|
+
found = await embeddedInvoice(bytes);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
throw new InvoiceFileError('not_a_pdf', `the PDF could not be opened: ${error instanceof Error ? error.message : String(error)}`);
|
|
124
|
+
}
|
|
125
|
+
if (found === null) {
|
|
126
|
+
throw new InvoiceFileError('no_embedded_invoice', `the PDF carries no ${[...WANTED].join(', ')}: it is not a Factur-X or ZUGFeRD invoice`);
|
|
127
|
+
}
|
|
128
|
+
return { ...readCii(found.bytes, options), filename: found.filename };
|
|
129
|
+
}
|
|
67
130
|
/** Yields `[fileName, fileSpecification]` pairs of an EmbeddedFiles name tree. */
|
|
68
131
|
function* walkNameTree(doc, node) {
|
|
69
132
|
const names = node.lookupMaybe(PDFName.of('Names'), PDFArray);
|
package/dist/pdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a reader asks of a received invoice once it is read, and the small
|
|
3
|
+
* helpers both readers need to read it.
|
|
4
|
+
*
|
|
5
|
+
* Copied, byte for byte, in the two e-invoicing bricks of this repository, as
|
|
6
|
+
* `received.ts` is, and compared by the same test: a UBL invoice and a CII invoice
|
|
7
|
+
* that say the same thing are held to the same rules in the same words.
|
|
8
|
+
*
|
|
9
|
+
* The rules are the arithmetic of EN 16931 (BR-CO-10 to BR-CO-17), re-read
|
|
10
|
+
* from the published Schematron with the rounding it is written with, XPath's
|
|
11
|
+
* `round()` on two decimals. A reader reports and never corrects: a total that
|
|
12
|
+
* is not its parts is named here, and stays the total the file wrote.
|
|
13
|
+
*/
|
|
14
|
+
import type { DecimalText, ReceivedInvoice, ReceivedViolation } from './received.js';
|
|
15
|
+
/**
|
|
16
|
+
* UNTDID 1001 codes of EN 16931 that name a credit note: 81, 83, 261, 262,
|
|
17
|
+
* 296, 308, 381, 396, 420, 458 and 532. Every other code of the list is an
|
|
18
|
+
* invoice of one kind or another (a corrective invoice, 384, asks for money
|
|
19
|
+
* like any invoice).
|
|
20
|
+
*/
|
|
21
|
+
export declare const CREDIT_NOTE_TYPE_CODES: ReadonlySet<string>;
|
|
22
|
+
/** A decimal as written, or a named error: an amount that is not one leaves nothing to book. */
|
|
23
|
+
export declare function decimalText(raw: string, what: string): DecimalText;
|
|
24
|
+
/** ISO 13616: move four characters to the end, letters to numbers, mod 97 is 1. */
|
|
25
|
+
export declare function isValidIban(iban: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* `xs:base64Binary`, decoded: whitespace is allowed between the characters,
|
|
28
|
+
* `=` only at the end and only as much as the length needs. Null for anything
|
|
29
|
+
* else — a binary object that is not base64 is reported, never half-decoded.
|
|
30
|
+
*/
|
|
31
|
+
export declare function decodeBase64(text: string): Uint8Array | null;
|
|
32
|
+
/** The arithmetic of the document (BG-22), as EN 16931 states it. */
|
|
33
|
+
export declare function checkReceived(invoice: ReceivedInvoice): ReceivedViolation[];
|
|
34
|
+
//# sourceMappingURL=received-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"received-checks.d.ts","sourceRoot":"","sources":["../src/received-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiBH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAYrD,CAAC;AAEH,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAMlE;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjD;AAKD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAuB5D;AAsCD,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAgF3E"}
|