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.
@@ -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((_c = xbrl === null || xbrl === void 0 ? void 0 : xbrl.unit) !== null && _c !== void 0 ? _c : []).map(function (unit) {
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, _d = util_xbrl_1.default.toArray(xbrl[name_1]); _i < _d.length; _i++) {
80
- var element = _d[_i];
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: (_a = xmlDocs.find(function (doc) {
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: (_d = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_def.xml'); })) !== null && _d !== void 0 ? _d : null,
28
- linkbaseCalculationDoc: (_e = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_cal.xml'); })) !== null && _e !== void 0 ? _e : null,
29
- linkbaseLabelDoc: (_f = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_lab.xml'); })) !== null && _f !== void 0 ? _f : null,
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, fiscalYearEnd = params.fiscalYearEnd;
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 dateKey = fact.start ? "".concat(fact.start, "_").concat(fact.end) : fact.end;
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 _w = fiscalCalculator.getFiscalYearQuarter({ dateStr: fact.end }), quarter = _w.quarter, year = _w.year;
79
- var period = FactPeriodResolver_1.default.getPeriod({ end: fact.end, start: fact.start });
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 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] = {
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: (_k = splitFact === null || splitFact === void 0 ? void 0 : splitFact.end) !== null && _k !== void 0 ? _k : null,
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: (_l = fiscalsByDateKey.get(dateKey)) === null || _l === void 0 ? void 0 : _l.fiscalPeriod,
93
- startDate: (_m = fact.start) !== null && _m !== void 0 ? _m : '',
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: (_o = fiscalsByDateKey.get(dateKey)) === null || _o === void 0 ? void 0 : _o.fiscalYear,
96
- period: FactPeriodResolver_1.default.getPeriod({ start: fact.start, end: fact.end }),
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((_p = el.scale) !== null && _p !== void 0 ? _p : 0) || 0;
107
- var decimals = Number((_q = el.decimals) !== null && _q !== void 0 ? _q : 0) || 0;
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
- : (_r = fact === null || fact === void 0 ? void 0 : fact.segments) === null || _r === void 0 ? void 0 : _r.map(function (_a) {
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 = (_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();
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, _o = params.includeReport, includeReport = _o === void 0 ? true : _o, options = __rest(params, ["xml", "includeReport"]);
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 _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
+ 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 = (_d = (_c = context === null || context === void 0 ? void 0 : context.period.endDate) !== null && _c !== void 0 ? _c : context === null || context === void 0 ? void 0 : context.period.instant) !== null && _d !== void 0 ? _d : '';
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: (_e = fact.unitRef) !== null && _e !== void 0 ? _e : 'pure',
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: (_f = context === null || context === void 0 ? void 0 : context.entity.segment) !== null && _f !== void 0 ? _f : [],
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 fiscalCalculator = new FactFiscalCalculator_1.default({
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 _s = fiscalCalculator.getFiscalYearQuarter({ dateStr: reportDate !== null && reportDate !== void 0 ? reportDate : '' }), quarter = _s.quarter, year = _s.year;
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 _t = buildReportsFromFacts({
217
+ var _x = buildReportsFromFacts({
209
218
  facts: factsForBuilder,
210
219
  pathSeparator: '>',
211
- fiscalPeriod: (_k = factsForBuilder.find(function (f) { return f.name === 'dei:DocumentFiscalPeriodFocus'; })) === null || _k === void 0 ? void 0 : _k.value,
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),
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 = _t.factsFiltered, reportFocus = _t.reportFocus, reportByDateRange = _t.reportByDateRange;
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 });
@@ -300,6 +300,7 @@ export default class SecEdgarApi {
300
300
  formType?: DailyFilingFormType;
301
301
  /** max 5 */
302
302
  lookbackDays?: number;
303
+ startsWith?: string;
303
304
  }): Promise<{
304
305
  date: string;
305
306
  matchCount: number;
@@ -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 (_e) {
600
- switch (_e.label) {
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 = (_e.sent());
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sec-edgar-api",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
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)",