sec-edgar-api 0.5.8 → 0.5.10
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FactItemExtended, ReportRaw, XMLParams } from '../../../types';
|
|
1
|
+
import type { FactItemExtended, FiscalPeriod, ReportRaw, XMLParams } from '../../../types';
|
|
2
2
|
import { GetDocumentXbrlParams } from '../../SecEdgarApi';
|
|
3
3
|
import { XbrlParseResult } from '../XBRLParser/XBRLParser';
|
|
4
4
|
interface ReportWithPeriod extends ReportRaw {
|
|
@@ -9,6 +9,8 @@ interface ReportWithPeriod extends ReportRaw {
|
|
|
9
9
|
}
|
|
10
10
|
export interface DocumentXbrlResult extends XbrlParseResult {
|
|
11
11
|
report: ReportRaw | null;
|
|
12
|
+
fiscalYear: number;
|
|
13
|
+
fiscalPeriod: FiscalPeriod;
|
|
12
14
|
facts: FactItemExtended[];
|
|
13
15
|
xml: string;
|
|
14
16
|
/** Facts grouped into reports by their start and end dates */
|
|
@@ -106,10 +106,12 @@ function buildReportsFromFacts(params) {
|
|
|
106
106
|
var el = fact;
|
|
107
107
|
var scale = Number((_q = el.scale) !== null && _q !== void 0 ? _q : 0) || 0;
|
|
108
108
|
var decimals = Number((_r = el.decimals) !== null && _r !== void 0 ? _r : 0) || 0;
|
|
109
|
-
var suffix =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
var suffix = fact.name.includes(pathSeparator)
|
|
110
|
+
? null
|
|
111
|
+
: (_s = fact === null || fact === void 0 ? void 0 : fact.segments) === null || _s === void 0 ? void 0 : _s.map(function (_a) {
|
|
112
|
+
var dimension = _a.dimension, value = _a.value;
|
|
113
|
+
return "".concat(dimension).concat(pathSeparator).concat(value);
|
|
114
|
+
}).join(pathSeparator);
|
|
113
115
|
var nameKey = suffix ? "".concat(fact.name).concat(pathSeparator).concat(suffix) : fact.name;
|
|
114
116
|
var roundPlaces = scale + decimals;
|
|
115
117
|
var prevFactKey = "".concat(nameKey, "-").concat(dateKey);
|
|
@@ -148,11 +150,11 @@ function buildReportsFromFacts(params) {
|
|
|
148
150
|
return { reportFocus: reportFocus, reportByDateRange: reportByDateRange, factsFiltered: Array.from(factByName.values()) };
|
|
149
151
|
}
|
|
150
152
|
function parseXbrl(params) {
|
|
151
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
153
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
152
154
|
var parser = new XBRLParser_1.default();
|
|
153
|
-
var xml = params.xml,
|
|
155
|
+
var xml = params.xml, _o = params.includeReport, includeReport = _o === void 0 ? true : _o, options = __rest(params, ["xml", "includeReport"]);
|
|
154
156
|
var response = parser.parse(xml, options);
|
|
155
|
-
var
|
|
157
|
+
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;
|
|
156
158
|
var contextById = new Map();
|
|
157
159
|
contexts.forEach(function (context) { return contextById.set(context.id, context); });
|
|
158
160
|
var cik = response.header.cik;
|
|
@@ -184,12 +186,31 @@ function parseXbrl(params) {
|
|
|
184
186
|
}
|
|
185
187
|
facts.push(factParsed);
|
|
186
188
|
}
|
|
189
|
+
var fiscalPeriodFact = facts.find(function (f) { return f.name === 'dei:DocumentFiscalPeriodFocus'; });
|
|
190
|
+
var fiscalYearFact = facts.find(function (f) { return f.name === 'dei:DocumentFiscalYearFocus'; });
|
|
191
|
+
var fiscalYear = fiscalYearFact ? Number(fiscalYearFact.value) : 0;
|
|
192
|
+
var fiscalPeriod = fiscalPeriodFact ? fiscalPeriodFact.value : 'FY';
|
|
193
|
+
if (!fiscalPeriodFact || !fiscalYearFact) {
|
|
194
|
+
var fiscalCalculator = new FactFiscalCalculator_1.default({
|
|
195
|
+
fiscalYearEnd: {
|
|
196
|
+
day: Number(response.header.fiscalYearEnd.substring(2)),
|
|
197
|
+
month: Number(response.header.fiscalYearEnd.substring(0, 2)),
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
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;
|
|
201
|
+
if (!reportDate) {
|
|
202
|
+
throw new Error("Report date not found. Unable to determine fiscal year and period. accn: ".concat(accessionNumber));
|
|
203
|
+
}
|
|
204
|
+
var _s = fiscalCalculator.getFiscalYearQuarter({ dateStr: reportDate !== null && reportDate !== void 0 ? reportDate : '' }), quarter = _s.quarter, year = _s.year;
|
|
205
|
+
fiscalYear = year;
|
|
206
|
+
fiscalPeriod = (quarter === 4 ? 'FY' : "Q".concat(quarter));
|
|
207
|
+
}
|
|
187
208
|
var factsForBuilder = includeReport ? facts : [];
|
|
188
|
-
var
|
|
209
|
+
var _t = buildReportsFromFacts({
|
|
189
210
|
facts: factsForBuilder,
|
|
190
211
|
pathSeparator: '>',
|
|
191
|
-
fiscalPeriod: (
|
|
192
|
-
fiscalYear: Number((
|
|
212
|
+
fiscalPeriod: (_k = factsForBuilder.find(function (f) { return f.name === 'dei:DocumentFiscalPeriodFocus'; })) === null || _k === void 0 ? void 0 : _k.value,
|
|
213
|
+
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),
|
|
193
214
|
cik: response.header.cik,
|
|
194
215
|
filing: {
|
|
195
216
|
acceptanceDateTime: response.header.acceptanceDatetime,
|
|
@@ -209,7 +230,7 @@ function parseXbrl(params) {
|
|
|
209
230
|
url: "https://www.sec.gov/Archives/edgar/data/".concat(cik, "/").concat(accessionNumberNoHyphens, "/").concat(accessionNumber, ".txt"),
|
|
210
231
|
urlPrimaryDocument: '',
|
|
211
232
|
},
|
|
212
|
-
}), factsFiltered =
|
|
213
|
-
return __assign(__assign({}, response), { facts: factsFiltered, report: factsFiltered.length > 0 ? reportFocus : null, xml: xml, periodReports: Object.values(reportByDateRange) });
|
|
233
|
+
}), factsFiltered = _t.factsFiltered, reportFocus = _t.reportFocus, reportByDateRange = _t.reportByDateRange;
|
|
234
|
+
return __assign(__assign({}, response), { fiscalYear: fiscalYear, fiscalPeriod: fiscalPeriod, facts: factsFiltered, report: factsFiltered.length > 0 ? reportFocus : null, xml: xml, periodReports: Object.values(reportByDateRange) });
|
|
214
235
|
}
|
|
215
236
|
exports.parseXbrl = parseXbrl;
|
|
@@ -239,6 +239,9 @@ var FactFiscalCalculator = /** @class */ (function () {
|
|
|
239
239
|
var _a;
|
|
240
240
|
var dateStr = params.dateStr, endDateByYearProp = params.endDateByYear, fiscalYearEnd = params.fiscalYearEnd;
|
|
241
241
|
var endDateByYear = endDateByYearProp !== null && endDateByYearProp !== void 0 ? endDateByYearProp : new Map();
|
|
242
|
+
if (!dateStr) {
|
|
243
|
+
throw new Error('No date provided, cannot determine fiscal year and quarter');
|
|
244
|
+
}
|
|
242
245
|
if (fiscalYearEnd) {
|
|
243
246
|
var month = fiscalYearEnd.month, day = fiscalYearEnd.day;
|
|
244
247
|
var year = new Date().getFullYear();
|
package/package.json
CHANGED