@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.
@@ -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"}
@@ -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":"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"}
@@ -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,9 @@
1
+ export class InvoiceFileError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = 'InvoiceFileError';
6
+ this.code = code;
7
+ }
8
+ }
9
+ //# sourceMappingURL=errors.js.map
@@ -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
@@ -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 visual PDF itself is left untouched: fonts, colour profiles and output
18
- * intents are the responsibility of the producer of the original file. Strict
19
- * PDF/A-3 validators may still flag those; the invoice data is embedded and
20
- * readable, which is what e-invoicing platforms check.
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` or `zugferd-invoice.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":"AAkBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAC/C,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,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;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,GAAG,WAAW,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAiBpG"}
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 visual PDF itself is left untouched: fonts, colour profiles and output
17
- * intents are the responsibility of the producer of the original file. Strict
18
- * PDF/A-3 validators may still flag those; the invoice data is embedded and
19
- * readable, which is what e-invoicing platforms check.
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
- * Reads the embedded invoice XML (`factur-x.xml` or `zugferd-invoice.xml`)
45
- * from a PDF. Returns `null` when the file carries none.
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 (!wanted.has(name))
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
- const stream = candidate;
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":"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"}
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"}