UNPKG

sec-edgar-api

Version:

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

89 lines (88 loc) 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseForm13g = void 0; var XMLParserLegacy_1 = require("../XMLParserLegacy"); /** * Form SC 13G - Institutional Holders * * example at https://www.sec.gov/Archives/edgar/data/320193/000119312523038262/d382361dsc13ga.htm */ function parseForm13g(params, xmlParser) { var _a, _b, _c, _d; if (xmlParser === void 0) { xmlParser = new XMLParserLegacy_1.default(); } var xml = params.xml; var textMap = xmlParser.getTableTextMap({ xml: xml }); var holders = []; var getKey = function (text) { var keyMap = { 'name of reporting': 'name', 'names of reporting': 'name', 'citizenship or place': 'origin', 'sole voting power': 'votingPowerSole', 'shared voting power': 'votingPowerShared', 'sole dispositive power': 'dispositivePowerSole', 'shared dispositive power': 'dispositivePowerShared', 'aggregate amount beneficially owned': 'shares', 'percent of class': 'percentOfClass', 'type of reporting person': 'typeOfReportingPerson', }; var textLower = text.toLowerCase(); for (var key in keyMap) { if (textLower.includes(key)) return keyMap[key]; } return null; }; var _loop_1 = function (text) { var colName = getKey(text); var isNewHolder = colName === 'name'; if (isNewHolder) { if (((_a = holders[holders.length - 1]) === null || _a === void 0 ? void 0 : _a.name) === '') { holders.pop(); } holders.push({ name: '', origin: '', shares: 0, percentOfClass: '', votingPowerSole: null, votingPowerShared: null, dispositivePowerSole: null, dispositivePowerShared: null, typeOfReportingPerson: null, }); } var holder = holders[holders.length - 1]; // continue if no colName or if the value is already set if (colName === null || ![0, '', null].includes(holder[colName])) return "continue"; var textParts = text.split('&nbsp;').filter(function (t) { return t.trim() !== ''; }); var colNameIndex = textParts.findIndex(function (t) { return getKey(t) === colName; }); var value = (_c = (_b = textParts[colNameIndex + 1]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : ''; switch (colName) { case 'shares': holder.shares = Number(value.replace(/[^0-9]/g, '')) || 0; break; case 'typeOfReportingPerson': holder[colName] = value === '' ? null : value; break; case 'votingPowerSole': case 'votingPowerShared': case 'dispositivePowerSole': case 'dispositivePowerShared': holder[colName] = value.toLowerCase() === 'none' ? null : value; break; default: holder[colName] = value; } }; for (var _i = 0, _e = Array.from(textMap.values()); _i < _e.length; _i++) { var text = _e[_i]; _loop_1(text); } if (((_d = holders[holders.length - 1]) === null || _d === void 0 ? void 0 : _d.name) === '') { holders.pop(); } return { holders: holders }; } exports.parseForm13g = parseForm13g;