@fin.cx/opendata 4.7.0 → 4.9.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.
Files changed (89) hide show
  1. package/.smartconfig.json +6 -2
  2. package/dist_ts/00_commitinfo_data.js +3 -3
  3. package/dist_ts/financialstatements/amounts.d.ts +58 -0
  4. package/dist_ts/financialstatements/amounts.js +130 -0
  5. package/dist_ts/financialstatements/classes.financialstatementerror.d.ts +24 -0
  6. package/dist_ts/financialstatements/classes.financialstatementerror.js +10 -0
  7. package/dist_ts/financialstatements/constants.d.ts +16 -0
  8. package/dist_ts/financialstatements/constants.js +20 -0
  9. package/dist_ts/financialstatements/dates.d.ts +16 -0
  10. package/dist_ts/financialstatements/dates.js +72 -0
  11. package/dist_ts/financialstatements/html.d.ts +21 -0
  12. package/dist_ts/financialstatements/html.js +92 -0
  13. package/dist_ts/financialstatements/index.d.ts +6 -0
  14. package/dist_ts/financialstatements/index.js +11 -0
  15. package/dist_ts/financialstatements/interfaces.d.ts +258 -0
  16. package/dist_ts/financialstatements/interfaces.js +2 -0
  17. package/dist_ts/financialstatements/layout.d.ts +20 -0
  18. package/dist_ts/financialstatements/layout.html.d.ts +8 -0
  19. package/dist_ts/financialstatements/layout.html.js +125 -0
  20. package/dist_ts/financialstatements/layout.js +2 -0
  21. package/dist_ts/financialstatements/layout.pdf.d.ts +6 -0
  22. package/dist_ts/financialstatements/layout.pdf.js +229 -0
  23. package/dist_ts/financialstatements/mediatypes.d.ts +3 -0
  24. package/dist_ts/financialstatements/mediatypes.js +11 -0
  25. package/dist_ts/financialstatements/outline.d.ts +22 -0
  26. package/dist_ts/financialstatements/outline.js +26 -0
  27. package/dist_ts/financialstatements/parse.esef.d.ts +13 -0
  28. package/dist_ts/financialstatements/parse.esef.js +349 -0
  29. package/dist_ts/financialstatements/parse.hgb.d.ts +9 -0
  30. package/dist_ts/financialstatements/parse.hgb.js +1014 -0
  31. package/dist_ts/financialstatements/parse.statement.d.ts +8 -0
  32. package/dist_ts/financialstatements/parse.statement.js +25 -0
  33. package/dist_ts/financialstatements/plugins.d.ts +10 -0
  34. package/dist_ts/financialstatements/plugins.js +15 -0
  35. package/dist_ts/financialstatements/read.d.ts +10 -0
  36. package/dist_ts/financialstatements/read.js +113 -0
  37. package/dist_ts/gleif/classes.gleifclient.d.ts +26 -0
  38. package/dist_ts/gleif/classes.gleifclient.js +214 -0
  39. package/dist_ts/gleif/classes.gleiferror.d.ts +6 -0
  40. package/dist_ts/gleif/classes.gleiferror.js +11 -0
  41. package/dist_ts/gleif/crosswalk.d.ts +7 -0
  42. package/dist_ts/gleif/crosswalk.js +25 -0
  43. package/dist_ts/gleif/csv.d.ts +2 -0
  44. package/dist_ts/gleif/csv.js +75 -0
  45. package/dist_ts/gleif/data.crosswalk.d.ts +12 -0
  46. package/dist_ts/gleif/data.crosswalk.js +1265 -0
  47. package/dist_ts/gleif/index.d.ts +6 -0
  48. package/dist_ts/gleif/index.js +7 -0
  49. package/dist_ts/gleif/interfaces.d.ts +101 -0
  50. package/dist_ts/gleif/interfaces.js +2 -0
  51. package/dist_ts/gleif/plugins.d.ts +1 -0
  52. package/dist_ts/gleif/plugins.js +3 -0
  53. package/dist_ts/gleif/records.d.ts +6 -0
  54. package/dist_ts/gleif/records.js +107 -0
  55. package/dist_ts/gleif/stream.zip.d.ts +2 -0
  56. package/dist_ts/gleif/stream.zip.js +54 -0
  57. package/dist_ts/plugins.d.ts +2 -0
  58. package/dist_ts/plugins.js +4 -1
  59. package/package.json +20 -5
  60. package/readme.md +156 -5
  61. package/ts/00_commitinfo_data.ts +2 -2
  62. package/ts/financialstatements/amounts.ts +181 -0
  63. package/ts/financialstatements/classes.financialstatementerror.ts +35 -0
  64. package/ts/financialstatements/constants.ts +24 -0
  65. package/ts/financialstatements/dates.ts +89 -0
  66. package/ts/financialstatements/html.ts +107 -0
  67. package/ts/financialstatements/index.ts +17 -0
  68. package/ts/financialstatements/interfaces.ts +268 -0
  69. package/ts/financialstatements/layout.html.ts +130 -0
  70. package/ts/financialstatements/layout.pdf.ts +268 -0
  71. package/ts/financialstatements/layout.ts +16 -0
  72. package/ts/financialstatements/mediatypes.ts +14 -0
  73. package/ts/financialstatements/outline.ts +44 -0
  74. package/ts/financialstatements/parse.esef.ts +394 -0
  75. package/ts/financialstatements/parse.hgb.ts +1235 -0
  76. package/ts/financialstatements/parse.statement.ts +26 -0
  77. package/ts/financialstatements/plugins.ts +29 -0
  78. package/ts/financialstatements/read.ts +135 -0
  79. package/ts/gleif/classes.gleifclient.ts +170 -0
  80. package/ts/gleif/classes.gleiferror.ts +8 -0
  81. package/ts/gleif/crosswalk.ts +29 -0
  82. package/ts/gleif/csv.ts +60 -0
  83. package/ts/gleif/data.crosswalk.ts +1271 -0
  84. package/ts/gleif/index.ts +6 -0
  85. package/ts/gleif/interfaces.ts +107 -0
  86. package/ts/gleif/plugins.ts +2 -0
  87. package/ts/gleif/records.ts +104 -0
  88. package/ts/gleif/stream.zip.ts +43 -0
  89. package/ts/plugins.ts +4 -0
@@ -0,0 +1,349 @@
1
+ import * as plugins from './plugins.js';
2
+ import { FinancialStatementError } from './classes.financialstatementerror.js';
3
+ import { maxEsefFacts, maxEsefPackageEntries, maxStatementBytes } from './constants.js';
4
+ const ixNamespace = 'http://www.xbrl.org/2013/inlineXBRL';
5
+ const xbrliNamespace = 'http://www.xbrl.org/2003/instance';
6
+ const xbrldiNamespace = 'http://xbrl.org/2006/xbrldi';
7
+ const xsiNamespace = 'http://www.w3.org/2001/XMLSchema-instance';
8
+ const xmlNamespace = 'http://www.w3.org/XML/1998/namespace';
9
+ const leiScheme = 'http://standards.iso.org/iso/17442';
10
+ const transformationNamespacePrefix = 'http://www.xbrl.org/inlineXBRL/transformation/';
11
+ const ifrsNamespacePattern = /^https?:\/\/xbrl\.ifrs\.org\/taxonomy\/[^/]+\/ifrs-full$/;
12
+ /** a report in an ESEF package: `<package root>/reports/<report>.xhtml` */
13
+ const reportPathPattern = /^[^/]+\/reports\/[^/]+\.x?html?$/i;
14
+ /** the formats of the Inline XBRL transformation registry read here, by local name */
15
+ const formatReaders = {
16
+ 'num-dot-decimal': (textArg) => decimalIn(textArg, '.'),
17
+ numdotdecimal: (textArg) => decimalIn(textArg, '.'),
18
+ 'num-comma-decimal': (textArg) => decimalIn(textArg, ','),
19
+ numcommadecimal: (textArg) => decimalIn(textArg, ','),
20
+ 'fixed-zero': () => '0',
21
+ zerodash: () => '0',
22
+ };
23
+ /** a number written with a decimal separator and any group separators, as a plain decimal string */
24
+ const decimalIn = (textArg, separatorArg) => {
25
+ const text = textArg.replace(/[\s']/g, '').replace(separatorArg === '.' ? /,/g : /\./g, '');
26
+ const [whole, fraction, ...rest] = text.split(separatorArg);
27
+ if (rest.length > 0 || !/^\d+$/.test(whole) || (fraction !== undefined && !/^\d+$/.test(fraction))) {
28
+ return null;
29
+ }
30
+ return fraction === undefined ? whole : `${whole}.${fraction}`;
31
+ };
32
+ /** a decimal string with its decimal point moved `scaleArg` places to the right */
33
+ const scaleDecimal = (valueArg, scaleArg) => {
34
+ const [whole, fraction = ''] = valueArg.split('.');
35
+ let digits = whole + fraction;
36
+ let point = whole.length + scaleArg;
37
+ if (point > digits.length) {
38
+ digits = digits.padEnd(point, '0');
39
+ }
40
+ if (point < 0) {
41
+ digits = '0'.repeat(-point) + digits;
42
+ point = 0;
43
+ }
44
+ const integer = digits.slice(0, point).replace(/^0+(?=\d)/, '') || '0';
45
+ const decimals = digits.slice(point).replace(/0+$/, '');
46
+ return decimals === '' ? integer : `${integer}.${decimals}`;
47
+ };
48
+ /** a decimal string rounded to `decimalsArg` places, half away from zero, in units of that place */
49
+ const roundedTo = (valueArg, decimalsArg) => {
50
+ const negative = valueArg.startsWith('-');
51
+ const [whole, fraction = ''] = scaleDecimal(negative ? valueArg.slice(1) : valueArg, decimalsArg).split('.');
52
+ const magnitude = BigInt(whole) + (fraction !== '' && fraction[0] >= '5' ? 1n : 0n);
53
+ return negative ? -magnitude : magnitude;
54
+ };
55
+ /** whether two facts for one concept and context state the same figure within their precision */
56
+ const factsAgree = (leftArg, rightArg) => {
57
+ if (leftArg.value === rightArg.value) {
58
+ return true;
59
+ }
60
+ if (leftArg.value === null || rightArg.value === null) {
61
+ return false;
62
+ }
63
+ const precisions = [leftArg.decimals, rightArg.decimals]
64
+ .filter((decimalsArg) => decimalsArg !== null && decimalsArg !== 'INF')
65
+ .map(Number);
66
+ if (precisions.length === 0 || precisions.some((precisionArg) => !Number.isInteger(precisionArg))) {
67
+ return false;
68
+ }
69
+ const decimals = Math.min(...precisions);
70
+ return roundedTo(leftArg.value, decimals) === roundedTo(rightArg.value, decimals);
71
+ };
72
+ const childrenNamed = (elementArg, namespaceArg, localNameArg) => elementArg.getElementsByTagNameNS(namespaceArg, localNameArg);
73
+ const trimmedText = (elementArg) => {
74
+ const text = elementArg?.textContent?.trim();
75
+ return text ? text : null;
76
+ };
77
+ const readContexts = (documentArg) => {
78
+ const contexts = new Map();
79
+ for (const context of documentArg.getElementsByTagNameNS(xbrliNamespace, 'context')) {
80
+ const id = context.getAttribute('id');
81
+ const period = childrenNamed(context, xbrliNamespace, 'period')[0];
82
+ if (!id || !period) {
83
+ continue;
84
+ }
85
+ const dateOf = (nameArg) => trimmedText(childrenNamed(period, xbrliNamespace, nameArg)[0])?.slice(0, 10) ?? null;
86
+ const instant = dateOf('instant');
87
+ const end = instant ?? dateOf('endDate');
88
+ if (!end) {
89
+ continue;
90
+ }
91
+ const dimensions = {};
92
+ for (const member of [
93
+ ...childrenNamed(context, xbrldiNamespace, 'explicitMember'),
94
+ ...childrenNamed(context, xbrldiNamespace, 'typedMember'),
95
+ ]) {
96
+ const dimension = member.getAttribute('dimension');
97
+ if (dimension) {
98
+ dimensions[dimension] = trimmedText(member) ?? '';
99
+ }
100
+ }
101
+ const identifier = childrenNamed(context, xbrliNamespace, 'identifier')[0];
102
+ contexts.set(id, {
103
+ period: { start: instant ? null : dateOf('startDate'), end },
104
+ dimensions,
105
+ lei: identifier?.getAttribute('scheme') === leiScheme ? trimmedText(identifier) : null,
106
+ });
107
+ }
108
+ return contexts;
109
+ };
110
+ /** a measure without its prefix: `iso4217:EUR` is `EUR` */
111
+ const measureName = (elementArg) => (trimmedText(elementArg) ?? '').replace(/^[^:]*:/, '');
112
+ const readUnits = (documentArg) => {
113
+ const units = new Map();
114
+ for (const unit of documentArg.getElementsByTagNameNS(xbrliNamespace, 'unit')) {
115
+ const id = unit.getAttribute('id');
116
+ if (!id) {
117
+ continue;
118
+ }
119
+ const numerator = childrenNamed(unit, xbrliNamespace, 'unitNumerator')[0];
120
+ const denominator = childrenNamed(unit, xbrliNamespace, 'unitDenominator')[0];
121
+ const measures = (elementArg) => childrenNamed(elementArg, xbrliNamespace, 'measure').map(measureName).join('*');
122
+ units.set(id, numerator && denominator ? `${measures(numerator)}/${measures(denominator)}` : measures(unit));
123
+ }
124
+ return units;
125
+ };
126
+ /** counts what was left out, so that a note names each reason once */
127
+ class Skips {
128
+ counts = new Map();
129
+ add(reasonArg) {
130
+ this.counts.set(reasonArg, (this.counts.get(reasonArg) ?? 0) + 1);
131
+ }
132
+ notes() {
133
+ return [...this.counts].map(([reason, count]) => `${count} ${count === 1 ? 'fact was' : 'facts were'} left out: ${reason}.`);
134
+ }
135
+ }
136
+ const readFacts = (documentArg, contextsArg, unitsArg, skipsArg) => {
137
+ const elements = documentArg.getElementsByTagNameNS(ixNamespace, 'nonFraction');
138
+ if (elements.length > maxEsefFacts) {
139
+ throw new FinancialStatementError('too_large', `The report tags ${elements.length} numeric facts, more than the ${maxEsefFacts} read here.`);
140
+ }
141
+ const facts = [];
142
+ for (const element of elements) {
143
+ const name = element.getAttribute('name') ?? '';
144
+ const [prefix, localName] = name.includes(':') ? name.split(':', 2) : [null, name];
145
+ const namespace = localName ? element.lookupNamespaceURI(prefix) : null;
146
+ if (!namespace) {
147
+ skipsArg.add(`a concept name whose prefix the report does not declare`);
148
+ continue;
149
+ }
150
+ const contextId = element.getAttribute('contextRef') ?? '';
151
+ const context = contextsArg.get(contextId);
152
+ if (!context) {
153
+ skipsArg.add('a context the report does not define');
154
+ continue;
155
+ }
156
+ const unitRef = element.getAttribute('unitRef');
157
+ const unit = unitRef ? (unitsArg.get(unitRef) ?? null) : null;
158
+ if (unitRef && unit === null) {
159
+ skipsArg.add('a unit the report does not define');
160
+ continue;
161
+ }
162
+ let value = null;
163
+ if (element.getAttributeNS(xsiNamespace, 'nil') !== 'true') {
164
+ const text = element.textContent ?? '';
165
+ const format = element.getAttribute('format');
166
+ if (format) {
167
+ const [formatPrefix, formatName] = format.includes(':') ? format.split(':', 2) : [null, format];
168
+ const reader = formatReaders[formatName];
169
+ if (!(element.lookupNamespaceURI(formatPrefix) ?? '').startsWith(transformationNamespacePrefix) || !reader) {
170
+ skipsArg.add(`the format "${format}", which is not read here`);
171
+ continue;
172
+ }
173
+ value = reader(text);
174
+ }
175
+ else {
176
+ value = decimalIn(text, '.');
177
+ }
178
+ const scale = Number(element.getAttribute('scale') ?? '0');
179
+ if (value === null || !Number.isInteger(scale) || Math.abs(scale) > 30) {
180
+ skipsArg.add('a value that does not read as a number in its format');
181
+ continue;
182
+ }
183
+ value = scaleDecimal(value, scale);
184
+ if (element.getAttribute('sign') === '-' && value !== '0') {
185
+ value = `-${value}`;
186
+ }
187
+ }
188
+ facts.push({
189
+ concept: name,
190
+ namespace,
191
+ contextId,
192
+ period: context.period,
193
+ dimensions: context.dimensions,
194
+ unit,
195
+ value,
196
+ decimals: element.getAttribute('decimals'),
197
+ id: element.getAttribute('id'),
198
+ });
199
+ }
200
+ return facts;
201
+ };
202
+ const keyConcepts = { totalAssets: 'Assets', equity: 'Equity', netIncome: 'ProfitLoss', revenue: 'Revenue' };
203
+ /**
204
+ * Reads an ESEF report, the XHTML of its inline XBRL, on its own: its numeric facts and the key
205
+ * figures of its consolidated statements. Throws `unreadable` where it is not well-formed XML and
206
+ * `too_large` where it tags more than `maxEsefFacts` facts.
207
+ */
208
+ export const parseEsefReport = (bytesArg, reportPathArg = null) => {
209
+ const start = bytesArg[0] === 0xef && bytesArg[1] === 0xbb && bytesArg[2] === 0xbf ? 3 : 0;
210
+ const declared = /^<\?xml[^>]*\bencoding\s*=\s*["']([\w.-]+)["']/i.exec(new TextDecoder('windows-1252').decode(bytesArg.subarray(start, start + 200)))?.[1];
211
+ if (declared && !/^utf-?8$/i.test(declared)) {
212
+ throw new FinancialStatementError('unreadable', `The report declares the encoding "${declared}", which is not read here.`);
213
+ }
214
+ let document;
215
+ try {
216
+ const text = new TextDecoder('utf-8', { fatal: true }).decode(bytesArg.subarray(start));
217
+ document = plugins.smartxmlXpath.parseXmlDocument(text);
218
+ }
219
+ catch (error) {
220
+ throw new FinancialStatementError('unreadable', 'The report is not well-formed XML in UTF-8.', { cause: error });
221
+ }
222
+ const skips = new Skips();
223
+ const contexts = readContexts(document);
224
+ const facts = readFacts(document, contexts, readUnits(document), skips);
225
+ const notes = skips.notes();
226
+ const leis = new Set([...contexts.values()].map((contextArg) => contextArg.lei).filter((leiArg) => leiArg !== null));
227
+ if (leis.size > 1) {
228
+ notes.push(`The report's contexts identify more than one issuer (${[...leis].join(', ')}).`);
229
+ }
230
+ const keyFacts = facts.filter((factArg) => ifrsNamespacePattern.test(factArg.namespace) &&
231
+ Object.keys(factArg.dimensions).length === 0 &&
232
+ factArg.value !== null &&
233
+ factArg.unit !== null &&
234
+ /^[A-Z]{3}$/.test(factArg.unit));
235
+ const conceptOf = (factArg) => factArg.concept.slice(factArg.concept.indexOf(':') + 1);
236
+ const currencies = new Set(keyFacts.map((factArg) => factArg.unit));
237
+ let currency = currencies.size === 1 ? [...currencies][0] : null;
238
+ if (currencies.size > 1) {
239
+ notes.push(`The key figures are tagged in more than one currency (${[...currencies].join(', ')}), so none was read.`);
240
+ }
241
+ const durations = keyFacts.filter((factArg) => factArg.period.start !== null && (conceptOf(factArg) === 'ProfitLoss' || conceptOf(factArg) === 'Revenue'));
242
+ const instants = keyFacts.filter((factArg) => factArg.period.start === null && conceptOf(factArg) === 'Assets');
243
+ const basis = durations.length > 0 ? durations : instants;
244
+ const ends = [...new Set(basis.map((factArg) => factArg.period.end))].sort().reverse();
245
+ const periodEndingOn = (endArg) => {
246
+ if (!endArg) {
247
+ return null;
248
+ }
249
+ const starts = basis
250
+ .filter((factArg) => factArg.period.end === endArg && factArg.period.start !== null)
251
+ .map((factArg) => factArg.period.start)
252
+ .sort();
253
+ return { start: starts[0] ?? null, end: endArg };
254
+ };
255
+ const current = currency ? periodEndingOn(ends[0]) : null;
256
+ const prior = currency ? periodEndingOn(ends[1]) : null;
257
+ if (currency && !current) {
258
+ notes.push('The report tags no key figures of its consolidated statements (IFRS) without dimensions.');
259
+ currency = null;
260
+ }
261
+ const keyFiguresOf = (periodArg) => {
262
+ const figure = (keyArg) => {
263
+ const instant = keyArg === 'totalAssets' || keyArg === 'equity';
264
+ const matching = keyFacts.filter((factArg) => conceptOf(factArg) === keyConcepts[keyArg] &&
265
+ factArg.period.end === periodArg.end &&
266
+ (instant ? factArg.period.start === null : factArg.period.start !== null && factArg.period.start === periodArg.start));
267
+ if (matching.length === 0) {
268
+ return null;
269
+ }
270
+ if (!matching.every((factArg) => factsAgree(factArg, matching[0]))) {
271
+ notes.push(`The report tags ifrs-full:${keyConcepts[keyArg]} for ${periodArg.end} with values that differ, so it was left out.`);
272
+ return null;
273
+ }
274
+ const precision = (factArg) => factArg.decimals === 'INF' ? Number.POSITIVE_INFINITY : Number(factArg.decimals ?? Number.NEGATIVE_INFINITY);
275
+ return [...matching].sort((leftArg, rightArg) => precision(rightArg) - precision(leftArg))[0].value;
276
+ };
277
+ return {
278
+ totalAssets: figure('totalAssets'),
279
+ equity: figure('equity'),
280
+ netIncome: figure('netIncome'),
281
+ revenue: figure('revenue'),
282
+ };
283
+ };
284
+ const statementPeriod = (periodArg) => ({
285
+ heading: null,
286
+ start: periodArg?.start ?? null,
287
+ end: periodArg?.end ?? null,
288
+ });
289
+ const root = document.documentElement;
290
+ return {
291
+ standard: 'esef',
292
+ lei: leis.size === 1 ? [...leis][0] : null,
293
+ reportPath: reportPathArg,
294
+ language: root?.getAttributeNS(xmlNamespace, 'lang') ?? root?.getAttribute('lang') ?? null,
295
+ currency,
296
+ periods: { current: statementPeriod(current), prior: prior ? statementPeriod(prior) : null },
297
+ keyFigures: {
298
+ current: current ? keyFiguresOf(current) : { totalAssets: null, equity: null, netIncome: null, revenue: null },
299
+ prior: prior ? keyFiguresOf(prior) : null,
300
+ },
301
+ facts,
302
+ notes,
303
+ };
304
+ };
305
+ const tooLargeZipCodes = new Set([
306
+ plugins.smartarchiveZip.ZIP_ERROR_CODES.ARCHIVE_SIZE_LIMIT,
307
+ plugins.smartarchiveZip.ZIP_ERROR_CODES.ENTRY_COUNT_LIMIT,
308
+ plugins.smartarchiveZip.ZIP_ERROR_CODES.COMPRESSED_SIZE_LIMIT,
309
+ plugins.smartarchiveZip.ZIP_ERROR_CODES.UNCOMPRESSED_SIZE_LIMIT,
310
+ plugins.smartarchiveZip.ZIP_ERROR_CODES.TOTAL_UNCOMPRESSED_SIZE_LIMIT,
311
+ ]);
312
+ /**
313
+ * Reads an ESEF report package (`.zip` or `.xbri`): the one report under `reports/`, by
314
+ * `parseEsefReport`. Throws `invalid_package` where the package is not a readable ZIP, is encrypted
315
+ * or does not hold exactly one report, and `too_large` where it or its report exceeds the limits.
316
+ */
317
+ export const parseEsefPackage = async (zipBytesArg) => {
318
+ let entries;
319
+ try {
320
+ entries = await new plugins.smartarchiveZip.ZipTools().extractSelectedZipEntries(zipBytesArg, {
321
+ filter: (entryArg) => entryArg.isFile && reportPathPattern.test(entryArg.path),
322
+ maxArchiveBytes: maxStatementBytes,
323
+ maxEntries: maxEsefPackageEntries,
324
+ maxSelectedEntries: 1,
325
+ maxCompressedEntryBytes: maxStatementBytes,
326
+ maxUncompressedEntryBytes: maxStatementBytes,
327
+ maxTotalUncompressedBytes: maxStatementBytes,
328
+ });
329
+ }
330
+ catch (error) {
331
+ if (!(error instanceof plugins.smartarchiveZip.ZipError) || error.code === plugins.smartarchiveZip.ZIP_ERROR_CODES.INVALID_LIMIT) {
332
+ throw error;
333
+ }
334
+ if (tooLargeZipCodes.has(error.code)) {
335
+ throw new FinancialStatementError('too_large', `The package exceeds the limits read here: ${error.message}`, { cause: error });
336
+ }
337
+ const reason = error.code === plugins.smartarchiveZip.ZIP_ERROR_CODES.SELECTED_ENTRY_COUNT_LIMIT
338
+ ? 'holds more than one report under reports/'
339
+ : error.code === plugins.smartarchiveZip.ZIP_ERROR_CODES.ENCRYPTED
340
+ ? 'is encrypted'
341
+ : `is not a readable ZIP (${error.message})`;
342
+ throw new FinancialStatementError('invalid_package', `The package ${reason}.`, { cause: error });
343
+ }
344
+ if (entries.length === 0) {
345
+ throw new FinancialStatementError('invalid_package', 'The package holds no report under reports/.');
346
+ }
347
+ return parseEsefReport(entries[0].content, entries[0].path);
348
+ };
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuZXNlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ZpbmFuY2lhbHN0YXRlbWVudHMvcGFyc2UuZXNlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEYsTUFBTSxXQUFXLEdBQUcscUNBQXFDLENBQUM7QUFDMUQsTUFBTSxjQUFjLEdBQUcsbUNBQW1DLENBQUM7QUFDM0QsTUFBTSxlQUFlLEdBQUcsNkJBQTZCLENBQUM7QUFDdEQsTUFBTSxZQUFZLEdBQUcsMkNBQTJDLENBQUM7QUFDakUsTUFBTSxZQUFZLEdBQUcsc0NBQXNDLENBQUM7QUFDNUQsTUFBTSxTQUFTLEdBQUcsb0NBQW9DLENBQUM7QUFDdkQsTUFBTSw2QkFBNkIsR0FBRyxnREFBZ0QsQ0FBQztBQUN2RixNQUFNLG9CQUFvQixHQUFHLDBEQUEwRCxDQUFDO0FBRXhGLDJFQUEyRTtBQUMzRSxNQUFNLGlCQUFpQixHQUFHLG1DQUFtQyxDQUFDO0FBRTlELHNGQUFzRjtBQUN0RixNQUFNLGFBQWEsR0FBdUQ7SUFDeEUsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7SUFDbkQsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQ3pELGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9B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
@@ -0,0 +1,9 @@
1
+ import type { TLayoutBlock } from './layout.js';
2
+ import type { IHgbStatement } from './interfaces.js';
3
+ /**
4
+ * Reads a statement under the HGB from the blocks of its document: the balance sheet (§ 266 HGB),
5
+ * required, and the income statement (§ 275 HGB), where one is published. Throws `unparseable` where
6
+ * no balance sheet is found or its current year cannot be read with certainty; leaves out with a
7
+ * note an income statement that cannot, and a prior year that does not add up.
8
+ */
9
+ export declare const readHgbStatement: (blocksArg: TLayoutBlock[]) => IHgbStatement;