sec-edgar-api
Version:
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
136 lines (135 loc) • 6.51 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var calculation_map_1 = require("../../util/calculation-map");
var key_translations_1 = require("../../util/key-translations");
var util_map_1 = require("../../util/util-map");
var ReportRawBuilder_1 = require("../ReportRawBuilder");
var PropertyResolver_1 = require("./PropertyResolver");
var ReportResolvable_1 = require("./ReportResolvable");
var ReportWrapper_1 = require("./ReportWrapper");
/**
* Takes company facts data from the SEC and translates them to reports as json objects.
*/
var ReportParser = /** @class */ (function () {
function ReportParser(args) {
var _a = args !== null && args !== void 0 ? args : {}, _b = _a.propertyResolver, propertyResolver = _b === void 0 ? new PropertyResolver_1.default() : _b, _c = _a.reportBuilder, reportBuilder = _c === void 0 ? new ReportRawBuilder_1.default() : _c, _d = _a.keyTranslator, keyTranslator = _d === void 0 ? key_translations_1.default : _d, _e = _a.defaultCalculationMap, defaultCalculationMap = _e === void 0 ? util_map_1.utilMap.expandMap(calculation_map_1.calculationMapCondensed) : _e;
this.keyTranslator = keyTranslator;
this.propertyResolver = propertyResolver;
this.reportBuilder = reportBuilder;
this.defaultCalculationMap = defaultCalculationMap;
}
/**
* Same as parseReports but accepts ReportRaw[] instead of CompanyFactListData
*
* @deprecated Formerly parseReportsFromRaw. Will be removed in future version.
*/
ReportParser.prototype.parseReportsFromRawLegacy = function (params) {
var reportsRaw = params.reportsRaw, _a = params.usePropertyResolver, usePropertyResolver = _a === void 0 ? true : _a;
var reportByYearQuarter = new Map();
var reportsRawFiltered = reportsRaw;
this.translateReportsRaw(reportsRawFiltered, function (report, reportRaw) {
var fiscalPeriod = report.fiscalPeriod, fiscalYear = report.fiscalYear;
var keyReport = "".concat(fiscalYear, "_").concat(fiscalPeriod);
reportByYearQuarter.set(keyReport, new ReportWrapper_1.default(report, reportRaw, reportByYearQuarter));
return report;
});
var reportWrappers = Array.from(reportByYearQuarter.values());
if (usePropertyResolver) {
this.propertyResolver.resolveAll(reportWrappers);
}
return reportWrappers;
};
/**
* Same as parseReports but accepts ReportRaw[] instead of CompanyFactListData
*/
ReportParser.prototype.translateReport = function (params) {
var _a;
var report = params.report, calculationMap = params.calculationMap;
var calcMap = calculationMap !== null && calculationMap !== void 0 ? calculationMap : this.defaultCalculationMap;
var reportNew = {
cik: report.cik,
dateFiled: report.dateFiled,
dateReport: report.dateReport,
fiscalPeriod: report.fiscalPeriod,
url: report.url,
fiscalYear: report.fiscalYear,
splitDate: report.splitDate,
splitRatio: report.splitRatio,
};
var reportResolvable = new ReportResolvable_1.default({
report: report,
calculationMap: calcMap,
});
for (var key in calcMap) {
var value = (_a = reportResolvable.get(key)) !== null && _a !== void 0 ? _a : null;
// use first truthy value
if (!reportNew[key]) {
reportNew[key] = value;
}
}
return reportNew;
};
/**
* Parse raw reports
*
* @see https://www.sec.gov/edgar/sec-api-documentation
*/
ReportParser.prototype.parseReportsRaw = function (companyFactListData, options) {
var includeNamePrefix = (options !== null && options !== void 0 ? options : {}).includeNamePrefix;
var facts = this.reportBuilder.createFacts(companyFactListData, includeNamePrefix).facts;
return this.reportBuilder.buildReports(__assign({ facts: facts }, options));
};
/**
* Builds ReportRaw[] from facts
*/
ReportParser.prototype.buildReports = function (params) {
return this.reportBuilder.buildReports(params);
};
/**
* @deprecated use translateReport
*
* Translate ReportRaw to ReportTranslated by default, but can be used to translate to any object using both the callback and keyTranslator
*
* @param reportsRaw this is the output of parseReportsRaw
* @param callback this is called for each report and can be used to modify the report. This gets the report built by keyTranslator if provided, otherwise ReportTranslated
* @param keyTranslator this is iterated through to build the report using the keys. If the ReportRaw has a key that matches a key in the keyTranslator, the value is used. if not, the value is null
*/
ReportParser.prototype.translateReportsRaw = function (reportsRaw, callback, keyTranslator) {
var keyTranslations = (keyTranslator !== null && keyTranslator !== void 0 ? keyTranslator : this.keyTranslator);
var reports = [];
reportsRaw.forEach(function (report) {
var reportNew = {};
// iterate translation keys, ensuring same order and priority
for (var key in keyTranslations) {
var keysRaw = keyTranslations[key];
reportNew[key] = null;
for (var _i = 0, keysRaw_1 = keysRaw; _i < keysRaw_1.length; _i++) {
var keyRaw = keysRaw_1[_i];
var value = report[keyRaw];
if (value === undefined)
continue;
reportNew[key] = value;
break;
}
}
var reportFiltered = callback
? callback(reportNew, report, keyTranslations)
: reportNew;
reports.push(reportFiltered);
});
return reports;
};
return ReportParser;
}());
exports.default = ReportParser;