@fin.cx/opendata 4.6.0 → 4.8.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/.smartconfig.json +6 -2
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/financialstatements/amounts.d.ts +58 -0
- package/dist_ts/financialstatements/amounts.js +130 -0
- package/dist_ts/financialstatements/classes.financialstatementerror.d.ts +24 -0
- package/dist_ts/financialstatements/classes.financialstatementerror.js +10 -0
- package/dist_ts/financialstatements/constants.d.ts +16 -0
- package/dist_ts/financialstatements/constants.js +20 -0
- package/dist_ts/financialstatements/dates.d.ts +16 -0
- package/dist_ts/financialstatements/dates.js +72 -0
- package/dist_ts/financialstatements/html.d.ts +21 -0
- package/dist_ts/financialstatements/html.js +92 -0
- package/dist_ts/financialstatements/index.d.ts +6 -0
- package/dist_ts/financialstatements/index.js +11 -0
- package/dist_ts/financialstatements/interfaces.d.ts +258 -0
- package/dist_ts/financialstatements/interfaces.js +2 -0
- package/dist_ts/financialstatements/layout.d.ts +20 -0
- package/dist_ts/financialstatements/layout.html.d.ts +8 -0
- package/dist_ts/financialstatements/layout.html.js +125 -0
- package/dist_ts/financialstatements/layout.js +2 -0
- package/dist_ts/financialstatements/layout.pdf.d.ts +6 -0
- package/dist_ts/financialstatements/layout.pdf.js +229 -0
- package/dist_ts/financialstatements/mediatypes.d.ts +3 -0
- package/dist_ts/financialstatements/mediatypes.js +11 -0
- package/dist_ts/financialstatements/outline.d.ts +22 -0
- package/dist_ts/financialstatements/outline.js +26 -0
- package/dist_ts/financialstatements/parse.esef.d.ts +13 -0
- package/dist_ts/financialstatements/parse.esef.js +349 -0
- package/dist_ts/financialstatements/parse.hgb.d.ts +9 -0
- package/dist_ts/financialstatements/parse.hgb.js +1014 -0
- package/dist_ts/financialstatements/parse.statement.d.ts +8 -0
- package/dist_ts/financialstatements/parse.statement.js +25 -0
- package/dist_ts/financialstatements/plugins.d.ts +10 -0
- package/dist_ts/financialstatements/plugins.js +15 -0
- package/dist_ts/financialstatements/read.d.ts +10 -0
- package/dist_ts/financialstatements/read.js +113 -0
- package/dist_ts/handelsregister/classes.handelsregisterclient.d.ts +8 -2
- package/dist_ts/handelsregister/classes.handelsregisterclient.js +14 -5
- package/dist_ts/handelsregister/classes.handelsregistererror.d.ts +3 -1
- package/dist_ts/handelsregister/classes.handelsregistererror.js +1 -1
- package/dist_ts/handelsregister/classes.portalsession.d.ts +19 -3
- package/dist_ts/handelsregister/classes.portalsession.js +67 -9
- package/dist_ts/handelsregister/interfaces.d.ts +9 -2
- package/package.json +16 -6
- package/readme.md +86 -5
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/financialstatements/amounts.ts +181 -0
- package/ts/financialstatements/classes.financialstatementerror.ts +35 -0
- package/ts/financialstatements/constants.ts +24 -0
- package/ts/financialstatements/dates.ts +89 -0
- package/ts/financialstatements/html.ts +107 -0
- package/ts/financialstatements/index.ts +17 -0
- package/ts/financialstatements/interfaces.ts +268 -0
- package/ts/financialstatements/layout.html.ts +130 -0
- package/ts/financialstatements/layout.pdf.ts +268 -0
- package/ts/financialstatements/layout.ts +16 -0
- package/ts/financialstatements/mediatypes.ts +14 -0
- package/ts/financialstatements/outline.ts +44 -0
- package/ts/financialstatements/parse.esef.ts +394 -0
- package/ts/financialstatements/parse.hgb.ts +1235 -0
- package/ts/financialstatements/parse.statement.ts +26 -0
- package/ts/financialstatements/plugins.ts +29 -0
- package/ts/financialstatements/read.ts +135 -0
- package/ts/handelsregister/classes.handelsregisterclient.ts +18 -4
- package/ts/handelsregister/classes.handelsregistererror.ts +3 -0
- package/ts/handelsregister/classes.portalsession.ts +78 -9
- package/ts/handelsregister/interfaces.ts +9 -2
|
@@ -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;
|