sec-edgar-api 0.5.11 → 0.5.12
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.
|
@@ -36,8 +36,8 @@ function isWithinDays(params) {
|
|
|
36
36
|
return daysDiff < days;
|
|
37
37
|
}
|
|
38
38
|
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;
|
|
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, fiscalYearEnd = params.fiscalYearEnd;
|
|
41
41
|
var urlParts = (_a = filing === null || filing === void 0 ? void 0 : filing.url.split('/')) !== null && _a !== void 0 ? _a : [];
|
|
42
42
|
var cik = cikProp !== null && cikProp !== void 0 ? cikProp : urlParts[(_b = urlParts.indexOf('data')) !== null && _b !== void 0 ? _b : -1];
|
|
43
43
|
var reportFactValues = {
|
|
@@ -63,37 +63,36 @@ function buildReportsFromFacts(params) {
|
|
|
63
63
|
var roundPlacesByName = new Map();
|
|
64
64
|
var scaleByName = new Map();
|
|
65
65
|
var isFocusFactByDateKey = new Map();
|
|
66
|
-
var
|
|
67
|
-
var
|
|
68
|
-
dateYearEnd.setMonth(dateYearEnd.getMonth() + ((_h = offsetByFiscalPeriod[reportFocus.fiscalPeriod]) !== null && _h !== void 0 ? _h : 0));
|
|
66
|
+
var fiscalYearEndMonth = Number(fiscalYearEnd.substring(0, 2));
|
|
67
|
+
var fiscalYearEndDay = Number(fiscalYearEnd.substring(2));
|
|
69
68
|
var fiscalCalculator = new FactFiscalCalculator_1.default({
|
|
70
69
|
filings: filing ? [filing] : undefined,
|
|
71
70
|
facts: facts,
|
|
72
|
-
fiscalYearEnd: { day:
|
|
71
|
+
fiscalYearEnd: { day: fiscalYearEndDay, month: fiscalYearEndMonth },
|
|
73
72
|
});
|
|
74
73
|
var fiscalsByDateKey = new Map();
|
|
75
74
|
for (var _i = 0, facts_1 = facts; _i < facts_1.length; _i++) {
|
|
76
75
|
var fact = facts_1[_i];
|
|
77
76
|
var dateKey = fact.start ? "".concat(fact.start, "_").concat(fact.end) : fact.end;
|
|
78
77
|
if (!fiscalsByDateKey.has(dateKey)) {
|
|
79
|
-
var
|
|
78
|
+
var _w = fiscalCalculator.getFiscalYearQuarter({ dateStr: fact.end }), quarter = _w.quarter, year = _w.year;
|
|
80
79
|
var period = FactPeriodResolver_1.default.getPeriod({ end: fact.end, start: fact.start });
|
|
81
80
|
var fiscalPeriod_1 = (period === 12 && quarter === 4 ? 'FY' : "Q".concat(quarter));
|
|
82
81
|
fiscalsByDateKey.set(dateKey, { fiscalYear: year, fiscalPeriod: fiscalPeriod_1 });
|
|
83
82
|
}
|
|
84
83
|
var isSplitFact = fact === splitFact;
|
|
85
|
-
var isFocusFact = (
|
|
86
|
-
(
|
|
84
|
+
var isFocusFact = (_h = isFocusFactByDateKey.get(dateKey)) !== null && _h !== void 0 ? _h : (isWithinDays({ dateA: fact.end, dateB: reportFocus.dateReport, days: 45 }) || isSplitFact);
|
|
85
|
+
(_j = reportByDateRange[dateKey]) !== null && _j !== void 0 ? _j : (reportByDateRange[dateKey] = {
|
|
87
86
|
cik: reportFocus.cik,
|
|
88
87
|
url: '',
|
|
89
|
-
splitDate: (
|
|
88
|
+
splitDate: (_k = splitFact === null || splitFact === void 0 ? void 0 : splitFact.end) !== null && _k !== void 0 ? _k : null,
|
|
90
89
|
splitRatio: (splitFact === null || splitFact === void 0 ? void 0 : splitFact.value) ? Number(splitFact.value) : null,
|
|
91
90
|
dateFiled: reportFocus.dateFiled,
|
|
92
91
|
dateReport: fact.end,
|
|
93
|
-
fiscalPeriod: (
|
|
94
|
-
startDate: (
|
|
92
|
+
fiscalPeriod: (_l = fiscalsByDateKey.get(dateKey)) === null || _l === void 0 ? void 0 : _l.fiscalPeriod,
|
|
93
|
+
startDate: (_m = fact.start) !== null && _m !== void 0 ? _m : '',
|
|
95
94
|
endDate: fact.end,
|
|
96
|
-
fiscalYear: (
|
|
95
|
+
fiscalYear: (_o = fiscalsByDateKey.get(dateKey)) === null || _o === void 0 ? void 0 : _o.fiscalYear,
|
|
97
96
|
period: FactPeriodResolver_1.default.getPeriod({ start: fact.start, end: fact.end }),
|
|
98
97
|
isCurrentPeriod: isFocusFact,
|
|
99
98
|
});
|
|
@@ -104,11 +103,11 @@ function buildReportsFromFacts(params) {
|
|
|
104
103
|
isFocusFactByDateKey.set(dateKey, isFocusFact);
|
|
105
104
|
}
|
|
106
105
|
var el = fact;
|
|
107
|
-
var scale = Number((
|
|
108
|
-
var decimals = Number((
|
|
106
|
+
var scale = Number((_p = el.scale) !== null && _p !== void 0 ? _p : 0) || 0;
|
|
107
|
+
var decimals = Number((_q = el.decimals) !== null && _q !== void 0 ? _q : 0) || 0;
|
|
109
108
|
var suffix = fact.name.includes(pathSeparator)
|
|
110
109
|
? null
|
|
111
|
-
: (
|
|
110
|
+
: (_r = fact === null || fact === void 0 ? void 0 : fact.segments) === null || _r === void 0 ? void 0 : _r.map(function (_a) {
|
|
112
111
|
var dimension = _a.dimension, value = _a.value;
|
|
113
112
|
return "".concat(dimension).concat(pathSeparator).concat(value);
|
|
114
113
|
}).join(pathSeparator);
|
|
@@ -122,8 +121,8 @@ function buildReportsFromFacts(params) {
|
|
|
122
121
|
var prevRounding = roundPlacesByName.get(prevFactKey);
|
|
123
122
|
var prevScale = scaleByName.get(prevFactKey);
|
|
124
123
|
var prevFact_1 = factByName.get(prevFactKey);
|
|
125
|
-
var prevUnit = (
|
|
126
|
-
var unit = (
|
|
124
|
+
var prevUnit = (_t = (_s = prevFact_1 === null || prevFact_1 === void 0 ? void 0 : prevFact_1.unit) === null || _s === void 0 ? void 0 : _s.split('_').pop()) === null || _t === void 0 ? void 0 : _t.toLowerCase();
|
|
125
|
+
var unit = (_v = (_u = fact.unit) === null || _u === void 0 ? void 0 : _u.split('_').pop()) === null || _v === void 0 ? void 0 : _v.toLowerCase();
|
|
127
126
|
var shouldSkip = [
|
|
128
127
|
(prevUnit === null || prevUnit === void 0 ? void 0 : prevUnit.length) === 3 && (unit === null || unit === void 0 ? void 0 : unit.length) === 3 && prevUnit !== unit && prevUnit === 'usd',
|
|
129
128
|
(prevRounding !== null && prevRounding !== void 0 ? prevRounding : 0) < roundPlaces,
|
|
@@ -150,11 +149,11 @@ function buildReportsFromFacts(params) {
|
|
|
150
149
|
return { reportFocus: reportFocus, reportByDateRange: reportByDateRange, factsFiltered: Array.from(factByName.values()) };
|
|
151
150
|
}
|
|
152
151
|
function parseXbrl(params) {
|
|
153
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m
|
|
152
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
154
153
|
var parser = new XBRLParser_1.default();
|
|
155
|
-
var xml = params.xml,
|
|
154
|
+
var xml = params.xml, _o = params.includeReport, includeReport = _o === void 0 ? true : _o, options = __rest(params, ["xml", "includeReport"]);
|
|
156
155
|
var response = parser.parse(xml, options);
|
|
157
|
-
var
|
|
156
|
+
var _p = (_b = (_a = response.instance) === null || _a === void 0 ? void 0 : _a.xbrl) !== null && _b !== void 0 ? _b : {}, _q = _p.contexts, contexts = _q === void 0 ? [] : _q, _r = _p.factElements, factElements = _r === void 0 ? [] : _r;
|
|
158
157
|
var contextById = new Map();
|
|
159
158
|
contexts.forEach(function (context) { return contextById.set(context.id, context); });
|
|
160
159
|
var cik = response.header.cik;
|
|
@@ -201,17 +200,18 @@ function parseXbrl(params) {
|
|
|
201
200
|
if (!reportDate) {
|
|
202
201
|
throw new Error("Report date not found. Unable to determine fiscal year and period. accn: ".concat(accessionNumber));
|
|
203
202
|
}
|
|
204
|
-
var
|
|
203
|
+
var _s = fiscalCalculator.getFiscalYearQuarter({ dateStr: reportDate !== null && reportDate !== void 0 ? reportDate : '' }), quarter = _s.quarter, year = _s.year;
|
|
205
204
|
fiscalYear = year;
|
|
206
205
|
fiscalPeriod = (quarter === 4 ? 'FY' : "Q".concat(quarter));
|
|
207
206
|
}
|
|
208
207
|
var factsForBuilder = includeReport ? facts : [];
|
|
209
|
-
var
|
|
208
|
+
var _t = buildReportsFromFacts({
|
|
210
209
|
facts: factsForBuilder,
|
|
211
210
|
pathSeparator: '>',
|
|
212
211
|
fiscalPeriod: (_k = factsForBuilder.find(function (f) { return f.name === 'dei:DocumentFiscalPeriodFocus'; })) === null || _k === void 0 ? void 0 : _k.value,
|
|
213
212
|
fiscalYear: Number((_m = (_l = factsForBuilder.find(function (f) { return f.name === 'dei:DocumentFiscalYearFocus'; })) === null || _l === void 0 ? void 0 : _l.value) !== null && _m !== void 0 ? _m : 0),
|
|
214
213
|
cik: response.header.cik,
|
|
214
|
+
fiscalYearEnd: response.header.fiscalYearEnd,
|
|
215
215
|
filing: {
|
|
216
216
|
acceptanceDateTime: response.header.acceptanceDatetime,
|
|
217
217
|
accessionNumber: accessionNumber,
|
|
@@ -230,29 +230,9 @@ function parseXbrl(params) {
|
|
|
230
230
|
url: "https://www.sec.gov/Archives/edgar/data/".concat(cik, "/").concat(accessionNumberNoHyphens, "/").concat(accessionNumber, ".txt"),
|
|
231
231
|
urlPrimaryDocument: '',
|
|
232
232
|
},
|
|
233
|
-
}), factsFiltered =
|
|
233
|
+
}), factsFiltered = _t.factsFiltered, reportFocus = _t.reportFocus, reportByDateRange = _t.reportByDateRange;
|
|
234
234
|
// Some concepts have members, but do not have a sum. add the sum to the report.
|
|
235
235
|
var periodReports = Object.values(reportByDateRange);
|
|
236
|
-
for (var _v = 0, periodReports_1 = periodReports; _v < periodReports_1.length; _v++) {
|
|
237
|
-
var report = periodReports_1[_v];
|
|
238
|
-
for (var key in report) {
|
|
239
|
-
if (!key.includes('>'))
|
|
240
|
-
continue;
|
|
241
|
-
var parts = key.split('>');
|
|
242
|
-
var concept = parts.shift();
|
|
243
|
-
var center = parts.slice(0, -1).join('>');
|
|
244
|
-
if (!concept || report[concept] !== undefined)
|
|
245
|
-
continue;
|
|
246
|
-
var sum = 0;
|
|
247
|
-
for (var k in report) {
|
|
248
|
-
var prefix = "".concat(concept, ">").concat(center, ">");
|
|
249
|
-
if (k.startsWith(prefix) && !((_o = k.split(prefix).pop()) === null || _o === void 0 ? void 0 : _o.includes('>'))) {
|
|
250
|
-
sum += Number(typeof report[k] === 'number' ? report[k] : 0);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
report[concept] = sum;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
236
|
return __assign(__assign({}, response), { fiscalYear: fiscalYear, fiscalPeriod: fiscalPeriod, facts: factsFiltered, report: factsFiltered.length > 0 ? reportFocus : null, xml: xml, periodReports: periodReports });
|
|
257
237
|
}
|
|
258
238
|
exports.parseXbrl = parseXbrl;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sec-edgar-api",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.12",
|
|
4
4
|
"description": "Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"author": "Andrew Evers (https://github.com/andyevers)",
|