sec-edgar-api
Version:
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
97 lines (96 loc) • 6.08 kB
JavaScript
"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;
}