UNPKG

sec-edgar-api

Version:

Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.

97 lines (96 loc) 6.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveExpenseDepreciation = void 0; var helpers_1 = require("./helpers"); function resolveExpenseDepreciation(report) { var _a, _b, _c; // return if both values are already set if (report.expenseDepreciation !== null && report.assetNonCurrentPPEGross !== null) return; var reportTTMCurrentYear = report.getReportOffset(0, 'ANNUAL'); // get report to get value for, prioritizing TTM current year. Used to get percent of depreciation relative to PPE var reportTTMOrPrev = (_a = reportTTMCurrentYear !== null && reportTTMCurrentYear !== void 0 ? reportTTMCurrentYear : report.getReportOffset(-1, 'ANNUAL')) !== null && _a !== void 0 ? _a : report.getReportOffset(-1, 'QUARTERLY'); var expenseDepreciationTTMOrPrev = (_b = reportTTMOrPrev === null || reportTTMOrPrev === void 0 ? void 0 : reportTTMOrPrev.expenseDepreciation) !== null && _b !== void 0 ? _b : null; var assetNonCurrentPPEGrossTTMOrPrev = (_c = reportTTMOrPrev === null || reportTTMOrPrev === void 0 ? void 0 : reportTTMOrPrev.assetNonCurrentPPEGross) !== null && _c !== void 0 ? _c : null; // both values must be set to resolve if (expenseDepreciationTTMOrPrev === null || assetNonCurrentPPEGrossTTMOrPrev === null) { return; } var percentOfPPE = getDepreciationPercentOfPPE(report); if (percentOfPPE === null) return; var _d = report, expenseDepreciation = _d.expenseDepreciation, assetNonCurrentPPEGross = _d.assetNonCurrentPPEGross; var nullKey = (0, helpers_1.getSingleNullKey)({ expenseDepreciation: expenseDepreciation, assetNonCurrentPPEGross: assetNonCurrentPPEGross }); if (!nullKey) return; var valueTTMOrPrev = nullKey === 'expenseDepreciation' ? expenseDepreciationTTMOrPrev : assetNonCurrentPPEGrossTTMOrPrev; // follow the same rounding as the other report values var roundToPlaces = (0, helpers_1.getRoundToPlaces)(valueTTMOrPrev); var resolveReport = function (rep) { var _a = rep, expenseDepreciation = _a.expenseDepreciation, assetNonCurrentPPEGross = _a.assetNonCurrentPPEGross; var nullKeyRep = (0, helpers_1.getSingleNullKey)({ expenseDepreciation: expenseDepreciation, assetNonCurrentPPEGross: assetNonCurrentPPEGross }); if (nullKey !== nullKeyRep) return false; switch (nullKey) { case 'expenseDepreciation': rep.expenseDepreciation = (0, helpers_1.round)(assetNonCurrentPPEGross * percentOfPPE, roundToPlaces); break; case 'assetNonCurrentPPEGross': rep.assetNonCurrentPPEGross = (0, helpers_1.round)(expenseDepreciation / percentOfPPE, roundToPlaces); break; } return true; }; // if we have all reports for the year and we know the value of TTM, need to make sure the estimated values add up to the TTM value if (reportTTMCurrentYear) { var _e = report.getReportsFiscalYearByPeriod(), Q1 = _e.Q1, Q2 = _e.Q2, Q3 = _e.Q3, Q4 = _e.Q4; var reportsEstimated = []; // all reports that get estimated must be resolved to make sure the estimated values add up to the TTM value var didResolveAllEstimated = true; for (var _i = 0, _f = [Q1, Q2, Q3, Q4]; _i < _f.length; _i++) { var rep = _f[_i]; if (rep && (rep === null || rep === void 0 ? void 0 : rep[nullKey]) === null) { didResolveAllEstimated = resolveReport(rep) && didResolveAllEstimated; reportsEstimated.push(rep); } } if (didResolveAllEstimated && reportsEstimated.length > 0 && Q1 && Q2 && Q3 && Q4) { // const var estimationDifference = [Q1, Q2, Q3, Q4].reduce(function (remainingDiff, rep) { var _a; return remainingDiff - Number((_a = rep[nullKey]) !== null && _a !== void 0 ? _a : 0); }, Number(reportTTMCurrentYear[nullKey])); // divide as evenly as possible between the reports, and give the leftover to the last estimated report (0, helpers_1.splitValueBetweenReports)({ key: nullKey, reports: reportsEstimated, roundToPlaces: roundToPlaces, value: estimationDifference, }); } } else { resolveReport(report); } } exports.resolveExpenseDepreciation = resolveExpenseDepreciation; function getDepreciationPercentOfPPE(report) { var _a, _b, _c, _d; var reportTTMOrPrev = (_b = (_a = report.getReportOffset(0, 'ANNUAL')) !== null && _a !== void 0 ? _a : report.getReportOffset(-1, 'ANNUAL')) !== null && _b !== void 0 ? _b : report.getReportOffset(-1, 'QUARTERLY'); var expenseDepreciationTTMOrPrev = (_c = reportTTMOrPrev === null || reportTTMOrPrev === void 0 ? void 0 : reportTTMOrPrev.expenseDepreciation) !== null && _c !== void 0 ? _c : null; var assetNonCurrentPPEGrossTTMOrPrev = (_d = reportTTMOrPrev === null || reportTTMOrPrev === void 0 ? void 0 : reportTTMOrPrev.assetNonCurrentPPEGross) !== null && _d !== void 0 ? _d : null; if (!reportTTMOrPrev || expenseDepreciationTTMOrPrev === null || assetNonCurrentPPEGrossTTMOrPrev === null) { return null; } // if checking depreciation using an annual report, we need to get the sum of the quarters var ppeDenominator = assetNonCurrentPPEGrossTTMOrPrev; if (reportTTMOrPrev.fiscalPeriod === 'FY' && report.fiscalPeriod !== 'FY') { var _e = reportTTMOrPrev.getReportsFiscalYearByPeriod(), Q1 = _e.Q1, Q2 = _e.Q2, Q3 = _e.Q3, Q4 = _e.Q4; ppeDenominator = 0; for (var _i = 0, _f = [Q1, Q2, Q3, Q4]; _i < _f.length; _i++) { var rep = _f[_i]; var assetNonCurrentPPEGross = rep === null || rep === void 0 ? void 0 : rep.assetNonCurrentPPEGross; if (typeof assetNonCurrentPPEGross !== 'number') return null; ppeDenominator += assetNonCurrentPPEGross; } } return expenseDepreciationTTMOrPrev / ppeDenominator; }