sec-edgar-api 1.0.0 → 1.0.2
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/build/services/DocumentParser/XBRLParser/InstanceParser.js +7 -7
- package/build/services/DocumentParser/XBRLParser/XBRLParser.js +11 -10
- package/build/services/DocumentParser/parsers/parse-xbrl.js +54 -46
- package/build/services/SecEdgarApi/SecEdgarApi.d.ts +1 -0
- package/build/services/SecEdgarApi/SecEdgarApi.js +6 -6
- package/build/types/company-facts.type.d.ts +5 -0
- package/build/util/util-xbrl.d.ts +6 -0
- package/build/util/util-xbrl.js +37 -0
- package/package.json +1 -1
|
@@ -62,22 +62,22 @@ var InstanceParser = /** @class */ (function () {
|
|
|
62
62
|
};
|
|
63
63
|
InstanceParser.prototype.parse = function (xml) {
|
|
64
64
|
var _this = this;
|
|
65
|
-
var _a, _b, _c;
|
|
65
|
+
var _a, _b, _c, _d;
|
|
66
66
|
var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml));
|
|
67
67
|
var contexts = util_xbrl_1.default
|
|
68
|
-
.toArray((_b = (_a = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _a !== void 0 ? _a : xbrl === null || xbrl === void 0 ? void 0 : xbrl['xbrli:context']) !== null && _b !== void 0 ? _b : [])
|
|
68
|
+
.toArray((_c = (_b = (_a = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _a !== void 0 ? _a : xbrl === null || xbrl === void 0 ? void 0 : xbrl['xbrli:context']) !== null && _b !== void 0 ? _b : xbrl === null || xbrl === void 0 ? void 0 : xbrl['xbrl:context']) !== null && _c !== void 0 ? _c : [])
|
|
69
69
|
.map(function (context) { return _this.parseContext(context); });
|
|
70
|
-
var units = util_xbrl_1.default.toArray((
|
|
71
|
-
var _a, _b, _c, _d, _e;
|
|
70
|
+
var units = util_xbrl_1.default.toArray((_d = xbrl === null || xbrl === void 0 ? void 0 : xbrl.unit) !== null && _d !== void 0 ? _d : []).map(function (unit) {
|
|
71
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
72
72
|
return ({
|
|
73
73
|
id: (_a = unit['@_id']) !== null && _a !== void 0 ? _a : '',
|
|
74
|
-
measure: (_e = (_c = (_b = unit['xbrli:measure']) === null || _b === void 0 ? void 0 : _b['#text']) !== null && _c !== void 0 ? _c : (_d = unit['measure']) === null || _d === void 0 ? void 0 : _d['#text']) !== null && _e !== void 0 ? _e : '',
|
|
74
|
+
measure: (_g = (_e = (_c = (_b = unit['xbrli:measure']) === null || _b === void 0 ? void 0 : _b['#text']) !== null && _c !== void 0 ? _c : (_d = unit['measure']) === null || _d === void 0 ? void 0 : _d['#text']) !== null && _e !== void 0 ? _e : (_f = unit['xbrl:measure']) === null || _f === void 0 ? void 0 : _f['#text']) !== null && _g !== void 0 ? _g : '',
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
77
|
var factElements = [];
|
|
78
78
|
for (var name_1 in xbrl) {
|
|
79
|
-
for (var _i = 0,
|
|
80
|
-
var element =
|
|
79
|
+
for (var _i = 0, _e = util_xbrl_1.default.toArray(xbrl[name_1]); _i < _e.length; _i++) {
|
|
80
|
+
var element = _e[_i];
|
|
81
81
|
if (!element['@_contextRef'])
|
|
82
82
|
continue;
|
|
83
83
|
var factElement = { name: name_1, id: '', contextRef: '' };
|
|
@@ -14,19 +14,20 @@ var XBRLParser = /** @class */ (function () {
|
|
|
14
14
|
this.schemaParser = new SchemaParser_1.default();
|
|
15
15
|
}
|
|
16
16
|
XBRLParser.prototype.filterDocuments = function (documents) {
|
|
17
|
-
var _a, _b, _c, _d, _e, _f;
|
|
17
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
18
18
|
var xmlDocs = documents.filter(function (doc) { return doc.fileName.endsWith('.xml') || doc.fileName.endsWith('.xsd'); });
|
|
19
|
+
var instanceDoc = (_a = xmlDocs.find(function (doc) {
|
|
20
|
+
return doc.description.toLowerCase().includes('instance doc') ||
|
|
21
|
+
doc.fileName.endsWith('_htm.xml') ||
|
|
22
|
+
(doc.content.includes('<us-gaap') && doc.content.includes('<context'));
|
|
23
|
+
})) !== null && _a !== void 0 ? _a : null;
|
|
19
24
|
return {
|
|
20
|
-
instanceDoc:
|
|
21
|
-
return doc.description.toLowerCase().includes('instance doc') ||
|
|
22
|
-
doc.fileName.endsWith('_htm.xml') ||
|
|
23
|
-
(doc.content.includes('<us-gaap') && doc.content.includes('<context'));
|
|
24
|
-
})) !== null && _a !== void 0 ? _a : null,
|
|
25
|
+
instanceDoc: instanceDoc,
|
|
25
26
|
schemaDoc: (_b = xmlDocs.find(function (doc) { return doc.fileName.endsWith('.xsd'); })) !== null && _b !== void 0 ? _b : null,
|
|
26
|
-
linkbasePresentationDoc: (_c = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_pre.xml'); })) !== null && _c !== void 0 ? _c : null,
|
|
27
|
-
linkbaseDefinitionDoc: (
|
|
28
|
-
linkbaseCalculationDoc: (
|
|
29
|
-
linkbaseLabelDoc: (
|
|
27
|
+
linkbasePresentationDoc: (_d = (_c = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_pre.xml'); })) !== null && _c !== void 0 ? _c : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:presentationLink>'); })) !== null && _d !== void 0 ? _d : null,
|
|
28
|
+
linkbaseDefinitionDoc: (_f = (_e = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_def.xml'); })) !== null && _e !== void 0 ? _e : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:definitionLink>'); })) !== null && _f !== void 0 ? _f : null,
|
|
29
|
+
linkbaseCalculationDoc: (_h = (_g = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_cal.xml'); })) !== null && _g !== void 0 ? _g : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:calculationLink>'); })) !== null && _h !== void 0 ? _h : null,
|
|
30
|
+
linkbaseLabelDoc: (_k = (_j = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_lab.xml'); })) !== null && _j !== void 0 ? _j : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:labelLink>'); })) !== null && _k !== void 0 ? _k : null,
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
33
|
XBRLParser.prototype.createXbrlDocument = function (doc, xbrl) {
|
|
@@ -24,6 +24,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.parseXbrl = void 0;
|
|
26
26
|
var constants_1 = require("../../../util/constants");
|
|
27
|
+
var util_xbrl_1 = require("../../../util/util-xbrl");
|
|
27
28
|
var FactFiscalCalculator_1 = require("../../ReportRawBuilder/FactFiscalCalculator");
|
|
28
29
|
var FactPeriodResolver_1 = require("../../ReportRawBuilder/FactPeriodResolver");
|
|
29
30
|
var XBRLParser_1 = require("../XBRLParser/XBRLParser");
|
|
@@ -36,8 +37,8 @@ function isWithinDays(params) {
|
|
|
36
37
|
return daysDiff < days;
|
|
37
38
|
}
|
|
38
39
|
function buildReportsFromFacts(params) {
|
|
39
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
40
|
-
var filing = params.filing, facts = params.facts, fiscalPeriod = params.fiscalPeriod, fiscalYear = params.fiscalYear, pathSeparator = params.pathSeparator, cikProp = params.cik
|
|
40
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
41
|
+
var filing = params.filing, facts = params.facts, fiscalPeriod = params.fiscalPeriod, fiscalYear = params.fiscalYear, pathSeparator = params.pathSeparator, cikProp = params.cik;
|
|
41
42
|
var urlParts = (_a = filing === null || filing === void 0 ? void 0 : filing.url.split('/')) !== null && _a !== void 0 ? _a : [];
|
|
42
43
|
var cik = cikProp !== null && cikProp !== void 0 ? cikProp : urlParts[(_b = urlParts.indexOf('data')) !== null && _b !== void 0 ? _b : -1];
|
|
43
44
|
var reportFactValues = {
|
|
@@ -63,37 +64,38 @@ function buildReportsFromFacts(params) {
|
|
|
63
64
|
var roundPlacesByName = new Map();
|
|
64
65
|
var scaleByName = new Map();
|
|
65
66
|
var isFocusFactByDateKey = new Map();
|
|
66
|
-
var fiscalYearEndMonth = Number(fiscalYearEnd.substring(0, 2));
|
|
67
|
-
var fiscalYearEndDay = Number(fiscalYearEnd.substring(2));
|
|
68
|
-
var fiscalCalculator = new FactFiscalCalculator_1.default({
|
|
69
|
-
filings: filing ? [filing] : undefined,
|
|
70
|
-
facts: facts,
|
|
71
|
-
fiscalYearEnd: { day: fiscalYearEndDay, month: fiscalYearEndMonth },
|
|
72
|
-
});
|
|
73
67
|
var fiscalsByDateKey = new Map();
|
|
68
|
+
var focusPeriodByQuarter = {
|
|
69
|
+
1: 3,
|
|
70
|
+
2: 6,
|
|
71
|
+
3: 9,
|
|
72
|
+
4: 12,
|
|
73
|
+
};
|
|
74
74
|
for (var _i = 0, facts_1 = facts; _i < facts_1.length; _i++) {
|
|
75
75
|
var fact = facts_1[_i];
|
|
76
|
-
var
|
|
76
|
+
var period = FactPeriodResolver_1.default.getPeriod({ start: fact.start, end: fact.end });
|
|
77
|
+
var dateKey = fact.start ? "".concat(fact.start, "_").concat(fact.end, "_").concat(period) : "".concat(fact.end, "_").concat(period);
|
|
77
78
|
if (!fiscalsByDateKey.has(dateKey)) {
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
var fiscalPeriod_1 = (period === 12 && quarter === 4 ? 'FY' : "Q".concat(quarter));
|
|
81
|
-
fiscalsByDateKey.set(dateKey, { fiscalYear: year, fiscalPeriod: fiscalPeriod_1 });
|
|
79
|
+
var fiscalPeriod_1 = (period === 12 && fact.quarter === 4 ? 'FY' : "Q".concat(fact.quarter));
|
|
80
|
+
fiscalsByDateKey.set(dateKey, { fiscalYear: fact.fiscalYear, fiscalPeriod: fiscalPeriod_1 });
|
|
82
81
|
}
|
|
83
82
|
var isSplitFact = fact === splitFact;
|
|
84
|
-
var
|
|
85
|
-
|
|
83
|
+
var focusPeriod = (_h = focusPeriodByQuarter[fact.quarter]) !== null && _h !== void 0 ? _h : 0;
|
|
84
|
+
var isFocusPeriod = period === focusPeriod || period === 0;
|
|
85
|
+
var isFocusFact = (_j = isFocusFactByDateKey.get(dateKey)) !== null && _j !== void 0 ? _j : (isFocusPeriod &&
|
|
86
|
+
(isWithinDays({ dateA: fact.end, dateB: reportFocus.dateReport, days: 45 }) || isSplitFact));
|
|
87
|
+
(_k = reportByDateRange[dateKey]) !== null && _k !== void 0 ? _k : (reportByDateRange[dateKey] = {
|
|
86
88
|
cik: reportFocus.cik,
|
|
87
|
-
url: '',
|
|
88
|
-
splitDate: (
|
|
89
|
+
url: (_l = filing === null || filing === void 0 ? void 0 : filing.url) !== null && _l !== void 0 ? _l : '',
|
|
90
|
+
splitDate: (_m = splitFact === null || splitFact === void 0 ? void 0 : splitFact.end) !== null && _m !== void 0 ? _m : null,
|
|
89
91
|
splitRatio: (splitFact === null || splitFact === void 0 ? void 0 : splitFact.value) ? Number(splitFact.value) : null,
|
|
90
92
|
dateFiled: reportFocus.dateFiled,
|
|
91
93
|
dateReport: fact.end,
|
|
92
|
-
fiscalPeriod: (
|
|
93
|
-
startDate: (
|
|
94
|
+
fiscalPeriod: (_o = fiscalsByDateKey.get(dateKey)) === null || _o === void 0 ? void 0 : _o.fiscalPeriod,
|
|
95
|
+
startDate: (_p = fact.start) !== null && _p !== void 0 ? _p : '',
|
|
94
96
|
endDate: fact.end,
|
|
95
|
-
fiscalYear: (
|
|
96
|
-
period:
|
|
97
|
+
fiscalYear: (_q = fiscalsByDateKey.get(dateKey)) === null || _q === void 0 ? void 0 : _q.fiscalYear,
|
|
98
|
+
period: period,
|
|
97
99
|
isCurrentPeriod: isFocusFact,
|
|
98
100
|
});
|
|
99
101
|
if (isFocusFact) {
|
|
@@ -103,11 +105,11 @@ function buildReportsFromFacts(params) {
|
|
|
103
105
|
isFocusFactByDateKey.set(dateKey, isFocusFact);
|
|
104
106
|
}
|
|
105
107
|
var el = fact;
|
|
106
|
-
var scale = Number((
|
|
107
|
-
var decimals = Number((
|
|
108
|
+
var scale = Number((_r = el.scale) !== null && _r !== void 0 ? _r : 0) || 0;
|
|
109
|
+
var decimals = Number((_s = el.decimals) !== null && _s !== void 0 ? _s : 0) || 0;
|
|
108
110
|
var suffix = fact.name.includes(pathSeparator)
|
|
109
111
|
? null
|
|
110
|
-
: (
|
|
112
|
+
: (_t = fact === null || fact === void 0 ? void 0 : fact.segments) === null || _t === void 0 ? void 0 : _t.map(function (_a) {
|
|
111
113
|
var dimension = _a.dimension, value = _a.value;
|
|
112
114
|
return "".concat(dimension).concat(pathSeparator).concat(value);
|
|
113
115
|
}).join(pathSeparator);
|
|
@@ -121,8 +123,8 @@ function buildReportsFromFacts(params) {
|
|
|
121
123
|
var prevRounding = roundPlacesByName.get(prevFactKey);
|
|
122
124
|
var prevScale = scaleByName.get(prevFactKey);
|
|
123
125
|
var prevFact_1 = factByName.get(prevFactKey);
|
|
124
|
-
var prevUnit = (
|
|
125
|
-
var unit = (
|
|
126
|
+
var prevUnit = (_v = (_u = prevFact_1 === null || prevFact_1 === void 0 ? void 0 : prevFact_1.unit) === null || _u === void 0 ? void 0 : _u.split('_').pop()) === null || _v === void 0 ? void 0 : _v.toLowerCase();
|
|
127
|
+
var unit = (_x = (_w = fact.unit) === null || _w === void 0 ? void 0 : _w.split('_').pop()) === null || _x === void 0 ? void 0 : _x.toLowerCase();
|
|
126
128
|
var shouldSkip = [
|
|
127
129
|
(prevUnit === null || prevUnit === void 0 ? void 0 : prevUnit.length) === 3 && (unit === null || unit === void 0 ? void 0 : unit.length) === 3 && prevUnit !== unit && prevUnit === 'usd',
|
|
128
130
|
(prevRounding !== null && prevRounding !== void 0 ? prevRounding : 0) < roundPlaces,
|
|
@@ -149,33 +151,46 @@ function buildReportsFromFacts(params) {
|
|
|
149
151
|
return { reportFocus: reportFocus, reportByDateRange: reportByDateRange, factsFiltered: Array.from(factByName.values()) };
|
|
150
152
|
}
|
|
151
153
|
function parseXbrl(params) {
|
|
152
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
154
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
153
155
|
var parser = new XBRLParser_1.default();
|
|
154
|
-
var xml = params.xml,
|
|
156
|
+
var xml = params.xml, _r = params.includeReport, includeReport = _r === void 0 ? true : _r, options = __rest(params, ["xml", "includeReport"]);
|
|
155
157
|
var response = parser.parse(xml, options);
|
|
156
|
-
var
|
|
158
|
+
var _s = (_b = (_a = response.instance) === null || _a === void 0 ? void 0 : _a.xbrl) !== null && _b !== void 0 ? _b : {}, _t = _s.contexts, contexts = _t === void 0 ? [] : _t, _u = _s.factElements, factElements = _u === void 0 ? [] : _u;
|
|
159
|
+
var labelByTaxonomy = (0, util_xbrl_1.getLabelByTaxonomy)((_d = (_c = response.linkbaseLabel) === null || _c === void 0 ? void 0 : _c.xbrl) !== null && _d !== void 0 ? _d : {});
|
|
157
160
|
var contextById = new Map();
|
|
158
161
|
contexts.forEach(function (context) { return contextById.set(context.id, context); });
|
|
159
162
|
var cik = response.header.cik;
|
|
160
163
|
var accessionNumber = response.header.accessionNumber;
|
|
161
164
|
var accessionNumberNoHyphens = accessionNumber.replace(/-/g, '');
|
|
165
|
+
var fiscalCalculator = new FactFiscalCalculator_1.default({
|
|
166
|
+
fiscalYearEnd: {
|
|
167
|
+
day: Number(response.header.fiscalYearEnd.substring(2)),
|
|
168
|
+
month: Number(response.header.fiscalYearEnd.substring(0, 2)),
|
|
169
|
+
},
|
|
170
|
+
});
|
|
162
171
|
var facts = [];
|
|
163
172
|
for (var _i = 0, factElements_1 = factElements; _i < factElements_1.length; _i++) {
|
|
164
173
|
var fact = factElements_1[_i];
|
|
165
174
|
var context = contextById.get(fact.contextRef);
|
|
166
|
-
var end = (
|
|
175
|
+
var end = (_f = (_e = context === null || context === void 0 ? void 0 : context.period.endDate) !== null && _e !== void 0 ? _e : context === null || context === void 0 ? void 0 : context.period.instant) !== null && _f !== void 0 ? _f : '';
|
|
167
176
|
var start = context === null || context === void 0 ? void 0 : context.period.startDate;
|
|
177
|
+
var _v = fiscalCalculator.getFiscalYearQuarter({ dateStr: end }), quarter = _v.quarter, year = _v.year;
|
|
168
178
|
var factParsed = {
|
|
169
179
|
cik: cik,
|
|
170
180
|
end: end,
|
|
171
181
|
filed: response.header.filingDate,
|
|
172
182
|
name: fact.name,
|
|
173
|
-
unit: (
|
|
183
|
+
unit: (_g = fact.unitRef) !== null && _g !== void 0 ? _g : 'pure',
|
|
174
184
|
value: isNaN(Number(fact.text)) ? String(fact.text) : Number(fact.text),
|
|
175
185
|
accn: accessionNumber,
|
|
176
186
|
form: response.header.form,
|
|
177
|
-
segments: (
|
|
187
|
+
segments: (_h = context === null || context === void 0 ? void 0 : context.entity.segment) !== null && _h !== void 0 ? _h : [],
|
|
178
188
|
start: start,
|
|
189
|
+
contextRef: fact.contextRef,
|
|
190
|
+
label: (_j = labelByTaxonomy[fact.name]) !== null && _j !== void 0 ? _j : fact.name,
|
|
191
|
+
period: FactPeriodResolver_1.default.getPeriod({ start: start, end: end }),
|
|
192
|
+
quarter: quarter,
|
|
193
|
+
fiscalYear: year,
|
|
179
194
|
};
|
|
180
195
|
if (factParsed.decimals) {
|
|
181
196
|
factParsed.decimals = Number(fact.decimals);
|
|
@@ -190,28 +205,21 @@ function parseXbrl(params) {
|
|
|
190
205
|
var fiscalYear = fiscalYearFact ? Number(fiscalYearFact.value) : 0;
|
|
191
206
|
var fiscalPeriod = fiscalPeriodFact ? fiscalPeriodFact.value : 'FY';
|
|
192
207
|
if (!fiscalPeriodFact || !fiscalYearFact) {
|
|
193
|
-
var
|
|
194
|
-
fiscalYearEnd: {
|
|
195
|
-
day: Number(response.header.fiscalYearEnd.substring(2)),
|
|
196
|
-
month: Number(response.header.fiscalYearEnd.substring(0, 2)),
|
|
197
|
-
},
|
|
198
|
-
});
|
|
199
|
-
var reportDate = (_g = response.header.reportDate) !== null && _g !== void 0 ? _g : (_j = (_h = response.instance) === null || _h === void 0 ? void 0 : _h.xbrl.factElements.find(function (f) { return f.name === 'dei:DocumentPeriodEndDate'; })) === null || _j === void 0 ? void 0 : _j.text;
|
|
208
|
+
var reportDate = (_k = response.header.reportDate) !== null && _k !== void 0 ? _k : (_m = (_l = response.instance) === null || _l === void 0 ? void 0 : _l.xbrl.factElements.find(function (f) { return f.name === 'dei:DocumentPeriodEndDate'; })) === null || _m === void 0 ? void 0 : _m.text;
|
|
200
209
|
if (!reportDate) {
|
|
201
210
|
throw new Error("Report date not found. Unable to determine fiscal year and period. accn: ".concat(accessionNumber));
|
|
202
211
|
}
|
|
203
|
-
var
|
|
212
|
+
var _w = fiscalCalculator.getFiscalYearQuarter({ dateStr: reportDate !== null && reportDate !== void 0 ? reportDate : '' }), quarter = _w.quarter, year = _w.year;
|
|
204
213
|
fiscalYear = year;
|
|
205
214
|
fiscalPeriod = (quarter === 4 ? 'FY' : "Q".concat(quarter));
|
|
206
215
|
}
|
|
207
216
|
var factsForBuilder = includeReport ? facts : [];
|
|
208
|
-
var
|
|
217
|
+
var _x = buildReportsFromFacts({
|
|
209
218
|
facts: factsForBuilder,
|
|
210
219
|
pathSeparator: '>',
|
|
211
|
-
fiscalPeriod: (
|
|
212
|
-
fiscalYear: Number((
|
|
220
|
+
fiscalPeriod: (_o = factsForBuilder.find(function (f) { return f.name === 'dei:DocumentFiscalPeriodFocus'; })) === null || _o === void 0 ? void 0 : _o.value,
|
|
221
|
+
fiscalYear: Number((_q = (_p = factsForBuilder.find(function (f) { return f.name === 'dei:DocumentFiscalYearFocus'; })) === null || _p === void 0 ? void 0 : _p.value) !== null && _q !== void 0 ? _q : 0),
|
|
213
222
|
cik: response.header.cik,
|
|
214
|
-
fiscalYearEnd: response.header.fiscalYearEnd,
|
|
215
223
|
filing: {
|
|
216
224
|
acceptanceDateTime: response.header.acceptanceDatetime,
|
|
217
225
|
accessionNumber: accessionNumber,
|
|
@@ -230,7 +238,7 @@ function parseXbrl(params) {
|
|
|
230
238
|
url: "https://www.sec.gov/Archives/edgar/data/".concat(cik, "/").concat(accessionNumberNoHyphens, "/").concat(accessionNumber, ".txt"),
|
|
231
239
|
urlPrimaryDocument: '',
|
|
232
240
|
},
|
|
233
|
-
}), factsFiltered =
|
|
241
|
+
}), factsFiltered = _x.factsFiltered, reportFocus = _x.reportFocus, reportByDateRange = _x.reportByDateRange;
|
|
234
242
|
// Some concepts have members, but do not have a sum. add the sum to the report.
|
|
235
243
|
var periodReports = Object.values(reportByDateRange);
|
|
236
244
|
return __assign(__assign({}, response), { fiscalYear: fiscalYear, fiscalPeriod: fiscalPeriod, facts: factsFiltered, report: factsFiltered.length > 0 ? reportFocus : null, xml: xml, periodReports: periodReports });
|
|
@@ -595,11 +595,11 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
595
595
|
SecEdgarApi.prototype.getCurrentFilingsDaily = function (params) {
|
|
596
596
|
var _a;
|
|
597
597
|
return __awaiter(this, void 0, void 0, function () {
|
|
598
|
-
var _b, _c, formType, _d, lookbackDays, indexByFormType, indexFormType, url, xml;
|
|
599
|
-
return __generator(this, function (
|
|
600
|
-
switch (
|
|
598
|
+
var _b, _c, formType, _d, lookbackDays, _e, startsWith, indexByFormType, indexFormType, url, xml;
|
|
599
|
+
return __generator(this, function (_f) {
|
|
600
|
+
switch (_f.label) {
|
|
601
601
|
case 0:
|
|
602
|
-
_b = params !== null && params !== void 0 ? params : {}, _c = _b.formType, formType = _c === void 0 ? 'ALL' : _c, _d = _b.lookbackDays, lookbackDays = _d === void 0 ? 0 : _d;
|
|
602
|
+
_b = params !== null && params !== void 0 ? params : {}, _c = _b.formType, formType = _c === void 0 ? 'ALL' : _c, _d = _b.lookbackDays, lookbackDays = _d === void 0 ? 0 : _d, _e = _b.startsWith, startsWith = _e === void 0 ? '' : _e;
|
|
603
603
|
if (lookbackDays > 5) {
|
|
604
604
|
throw new Error("lookbackDays must be <= 5. Received ".concat(lookbackDays));
|
|
605
605
|
}
|
|
@@ -613,10 +613,10 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
613
613
|
ALL: 6,
|
|
614
614
|
};
|
|
615
615
|
indexFormType = (_a = indexByFormType[formType]) !== null && _a !== void 0 ? _a : 0;
|
|
616
|
-
url = "".concat(this.baseUrlSec, "/cgi-bin/current?q1=").concat(lookbackDays, "&q2=").concat(indexFormType);
|
|
616
|
+
url = "".concat(this.baseUrlSec, "/cgi-bin/current?q1=").concat(lookbackDays, "&q2=").concat(indexFormType, "&q3=").concat(startsWith);
|
|
617
617
|
return [4 /*yield*/, this.request(url, true)];
|
|
618
618
|
case 1:
|
|
619
|
-
xml = (
|
|
619
|
+
xml = (_f.sent());
|
|
620
620
|
return [2 /*return*/, this.documentParser.parseCurrentFilingsDaily({ xml: xml })];
|
|
621
621
|
}
|
|
622
622
|
});
|
|
@@ -79,6 +79,11 @@ export interface FactItemExtended extends FactItem {
|
|
|
79
79
|
isCurrentPeriod?: boolean;
|
|
80
80
|
decimals?: number;
|
|
81
81
|
scale?: number;
|
|
82
|
+
contextRef: string;
|
|
83
|
+
label: string;
|
|
84
|
+
period: number;
|
|
85
|
+
quarter: number;
|
|
86
|
+
fiscalYear: number;
|
|
82
87
|
}
|
|
83
88
|
export interface FactItemWithFiscals extends FactItem {
|
|
84
89
|
fiscalPeriod: FiscalPeriod;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { XbrlLinkbase } from '../types/xbrl.type';
|
|
2
|
+
/**
|
|
3
|
+
* Gets labels by taxonomy from the label linkbase. priority level: verboseLabel > terseLabel > label.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getLabelByTaxonomy(labelLinkbase: XbrlLinkbase): Record<string, string>;
|
|
6
|
+
export declare function getTaxonomyFromId(id: string): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTaxonomyFromId = exports.getLabelByTaxonomy = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Gets labels by taxonomy from the label linkbase. priority level: verboseLabel > terseLabel > label.
|
|
6
|
+
*/
|
|
7
|
+
function getLabelByTaxonomy(labelLinkbase) {
|
|
8
|
+
var _a;
|
|
9
|
+
var labelByTaxonomy = {};
|
|
10
|
+
var taxonomyWithVerboseLabels = new Set();
|
|
11
|
+
(_a = labelLinkbase.labelLink) === null || _a === void 0 ? void 0 : _a.forEach(function (link) {
|
|
12
|
+
var _a;
|
|
13
|
+
(_a = link.label) === null || _a === void 0 ? void 0 : _a.forEach(function (_a) {
|
|
14
|
+
var _b = _a.label, label = _b === void 0 ? '' : _b, _c = _a.text, text = _c === void 0 ? '' : _c, _d = _a.role, role = _d === void 0 ? '' : _d;
|
|
15
|
+
var taxonomy = getTaxonomyFromId(label);
|
|
16
|
+
// skip if verbose label already exists for this taxonomy
|
|
17
|
+
if (taxonomyWithVerboseLabels.has(taxonomy)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// label, terseLabel, or verboseLabel
|
|
21
|
+
var labelType = role.substring(role.lastIndexOf('/') + 1);
|
|
22
|
+
if (labelType === 'verboseLabel') {
|
|
23
|
+
taxonomyWithVerboseLabels.add(taxonomy);
|
|
24
|
+
}
|
|
25
|
+
// prefer terseLabel over regular label
|
|
26
|
+
if (!labelByTaxonomy[taxonomy] || labelType === 'terseLabel' || labelType === 'verboseLabel') {
|
|
27
|
+
labelByTaxonomy[taxonomy] = text;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
return labelByTaxonomy;
|
|
32
|
+
}
|
|
33
|
+
exports.getLabelByTaxonomy = getLabelByTaxonomy;
|
|
34
|
+
function getTaxonomyFromId(id) {
|
|
35
|
+
return id.split('_').slice(1, 3).join(':');
|
|
36
|
+
}
|
|
37
|
+
exports.getTaxonomyFromId = getTaxonomyFromId;
|
package/package.json
CHANGED