diff --git a/CHANGES b/CHANGES index a8ae929..7158915 100644 --- a/CHANGES +++ b/CHANGES @@ -42,4 +42,7 @@ 1.9 01/14/2023 -- Fixed new data encryption issue & hardened. 1.10 01/25/2023 -- Fixed new decryption issue. 1.11 01/26/2023 -- Added a dynamic fix for the decryption issue. -1.12 01/27/2023 -- Fixed get profile function for #127 and added additional unit test +1.12 01/27/2023 -- Fixed get profile function for #127 and added additional unit test. +1.13 02/14/2023 -- Implemented fixes for #132 and #128 by refactoring package to use Yahoo API instead of scraping. +1.13 02/14/2023 -- Added method to retrieve ESG data as requested in #48. +1.13 02/14/2023 -- Added additional unit tests. diff --git a/README.rst b/README.rst index 58936cc..36d3584 100644 --- a/README.rst +++ b/README.rst @@ -7,9 +7,12 @@ A python module that returns stock, cryptocurrency, forex, mutual fund, commodit .. image:: https://github.com/JECSand/yahoofinancials/actions/workflows/test.yml/badge.svg?branch=master :target: https://github.com/JECSand/yahoofinancials/actions/workflows/test.yml -Current Version: v1.12 +.. image:: https://static.pepy.tech/badge/yahoofinancials + :target: https://pepy.tech/project/yahoofinancials -Version Released: 01/27/2023 +Current Version: v1.13 + +Version Released: 02/14/2023 Report any bugs by opening an issue here: https://github.com/JECSand/yahoofinancials/issues @@ -32,9 +35,8 @@ A powerful financial data module used for pulling both fundamental and technical balance_sheet_data_qt = yahoo_financials.get_financial_stmts('quarterly', 'balance') print(balance_sheet_data_qt) -- New methods in Version 1.9: - - get_stock_profile_data() - - get_financial_data() +- New methods in Version 1.13: + - get_esg_score_data() Installation @@ -95,8 +97,7 @@ Featured Methods - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. 2. get_stock_price_data(reformat=True) - - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. -3. get_stock_earnings_data(reformat=True) +3. get_stock_earnings_data() - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. 4. get_summary_data(reformat=True) @@ -116,12 +117,11 @@ Featured Methods - price_type can also be set to 'average' to calculate the shares outstanding with the daily average price. -Methods Added in v1.5 -^^^^^^^^^^^^^^^^^^^^^^^ -- get_daily_dividend_data(start_date, end_date) - Additional Module Methods ^^^^^^^^^^^^^^^^^^^^^^^^^ +- get_daily_dividend_data(start_date, end_date) +- get_stock_profile_data() +- get_financial_data() - get_interest_expense() - get_operating_income() - get_total_operating_expense() diff --git a/setup.py b/setup.py index e5a439d..8a81d46 100644 --- a/setup.py +++ b/setup.py @@ -10,21 +10,18 @@ setup( name='yahoofinancials', - version='1.12', + version='1.13', description='A powerful financial data module used for pulling both fundamental and technical data from Yahoo Finance', long_description=long_description, url='https://github.com/JECSand/yahoofinancials', - download_url='https://github.com/JECSand/yahoofinancials/archive/1.12.tar.gz', + download_url='https://github.com/JECSand/yahoofinancials/archive/1.13.tar.gz', author='Connor Sanders', author_email='connor@exceleri.com', license='MIT', keywords=['finance data', 'stocks', 'commodities', 'cryptocurrencies', 'currencies', 'forex', 'yahoo finance'], packages=['yahoofinancials'], install_requires=[ - "beautifulsoup4>=4.11.1", "pytz", - "cryptography>=3.3.2", - # "pycryptodome>=3.6.6" "requests>=2.26", ], classifiers=[ diff --git a/test/test_yahoofinancials.py b/test/test_yahoofinancials.py index 691c0ee..41865f5 100644 --- a/test/test_yahoofinancials.py +++ b/test/test_yahoofinancials.py @@ -1,5 +1,5 @@ -# YahooFinancials Unit Tests v1.10 -# Version Released: 01/14/2023 +# YahooFinancials Unit Tests v1.13 +# Version Released: 02/14/2023 # Author: Connor Sanders # Tested on Python 3.6, 3.7, 3.8, 3.9, 3.10, and 3.11 # Copyright (c) 2023 Connor Sanders @@ -95,19 +95,52 @@ def test_yf_dividend_price(self): # Extra Module Methods Test def test_yf_module_methods(self): - # Stocks + # Stock Current Price if isinstance(self.test_yf_stock_single.get_current_price(), float): self.assertEqual(True, True) else: self.assertEqual(False, True) - if isinstance(self.test_yf_stock_single.get_net_income(), int): + # Stock Net Income + if isinstance(self.test_yf_stock_single.get_net_income(), float): self.assertEqual(True, True) else: self.assertEqual(False, True) + # Stock Profile Data if self.test_yf_stock_single.get_stock_profile_data().get("C").get("sector") == "Financial Services": self.assertEqual(True, True) else: self.assertEqual(False, True) + + # Stock Financial Data + if self.test_yf_stock_single.get_financial_data().get("C").get("financialCurrency") == "USD": + self.assertEqual(True, True) + else: + self.assertEqual(False, True) + + # Stock Summary Data + if self.test_yf_stock_single.get_summary_data().get("C").get("currency") == "USD": + self.assertEqual(True, True) + else: + self.assertEqual(False, True) + + # Stock Price Data + if self.test_yf_stock_single.get_stock_price_data().get("C").get("exchangeName") == "NYSE": + self.assertEqual(True, True) + else: + self.assertEqual(False, True) + + # Stock Key Statistics + if isinstance(self.test_yf_stock_single.get_key_statistics_data().get("C").get("forwardPE"), float): + self.assertEqual(True, True) + else: + self.assertEqual(False, True) + + # Stock ESG SCORES + if self.test_yf_stock_single.get_esg_score_data().get("C").get("peerGroup") == "Banks": + self.assertEqual(True, True) + else: + self.assertEqual(False, True) + # Treasuries if isinstance(self.test_yf_treasuries_single.get_current_price(), float): self.assertEqual(True, True) diff --git a/yahoofinancials/etl.py b/yahoofinancials/etl.py index c4b2ad9..f72b861 100644 --- a/yahoofinancials/etl.py +++ b/yahoofinancials/etl.py @@ -1,29 +1,16 @@ import calendar import datetime -import hashlib -import json import logging import random -import re import time -from base64 import b64decode from functools import partial from json import loads from multiprocessing import Pool - import pytz import requests as requests -from bs4 import BeautifulSoup - -from yahoofinancials.maps import COUNTRY_MAP -usePycryptodome = False -if usePycryptodome: - from Crypto.Cipher import AES - from Crypto.Util.Padding import unpad -else: - from cryptography.hazmat.primitives import padding - from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes +from yahoofinancials.maps import COUNTRY_MAP, REQUEST_MAP, USER_AGENTS +from yahoofinancials.utils import remove_prefix, get_request_config, get_request_category # track the last get timestamp to add a minimum delay between gets - be nice! _lastget = 0 @@ -39,165 +26,34 @@ class ManagedException(Exception): # Class used to get data from urls class UrlOpener: - user_agent_headers = { - 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36' + + request_headers = { + "accept": "*/*", + "accept-encoding": "gzip, deflate, br", + "accept-language": "en-US,en;q=0.9", + "origin": "https://finance.yahoo.com", + "referer": "https://finance.yahoo.com", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-site", } + user_agent = random.choice(USER_AGENTS) + request_headers["User-Agent"] = user_agent def __init__(self, session=None): self._session = session or requests - def open(self, url, user_agent_headers=None, params=None, proxy=None, timeout=30): + def open(self, url, request_headers=None, params=None, proxy=None, timeout=30): response = self._session.get( url=url, params=params, proxies=proxy, timeout=timeout, - headers=user_agent_headers or self.user_agent_headers + headers=request_headers or self.request_headers ) return response -def decrypt_cryptojs_aes(data, key_obj): - encrypted_stores = data['context']['dispatcher']['stores'] - password = "" - candidate_passwords = [] - if "_cs" in data and "_cr" in data: - _cs = data["_cs"] - _cr = data["_cr"] - _cr = b"".join(int.to_bytes(i, length=4, byteorder="big", signed=True) for i in json.loads(_cr)["words"]) - password = hashlib.pbkdf2_hmac("sha1", _cs.encode("utf8"), _cr, 1, dklen=32).hex() - else: - for v in list(key_obj.values()): - password += v - encrypted_stores = b64decode(encrypted_stores) - assert encrypted_stores[0:8] == b"Salted__" - salt = encrypted_stores[8:16] - encrypted_stores = encrypted_stores[16:] - - def _EVPKDF(password, salt, keySize=32, ivSize=16, iterations=1, hashAlgorithm="md5") -> tuple: - """OpenSSL EVP Key Derivation Function - Args: - password (Union[str, bytes, bytearray]): Password to generate key from. - salt (Union[bytes, bytearray]): Salt to use. - keySize (int, optional): Output key length in bytes. Defaults to 32. - ivSize (int, optional): Output Initialization Vector (IV) length in bytes. Defaults to 16. - iterations (int, optional): Number of iterations to perform. Defaults to 1. - hashAlgorithm (str, optional): Hash algorithm to use for the KDF. Defaults to 'md5'. - Returns: - key, iv: Derived key and Initialization Vector (IV) bytes. - Taken from: https://gist.github.com/rafiibrahim8/0cd0f8c46896cafef6486cb1a50a16d3 - OpenSSL original code: https://github.com/openssl/openssl/blob/master/crypto/evp/evp_key.c#L78 - """ - assert iterations > 0, "Iterations can not be less than 1." - if isinstance(password, str): - password = password.encode("utf-8") - final_length = keySize + ivSize - key_iv = b"" - block = None - while len(key_iv) < final_length: - hasher = hashlib.new(hashAlgorithm) - if block: - hasher.update(block) - hasher.update(password) - hasher.update(salt) - block = hasher.digest() - for _ in range(1, iterations): - block = hashlib.new(hashAlgorithm, block).digest() - key_iv += block - - key, iv = key_iv[:keySize], key_iv[keySize:final_length] - return key, iv - - def _decrypt(encrypted_stores, password, key, iv): - if usePycryptodome: - cipher = AES.new(key, AES.MODE_CBC, iv=iv) - plaintext = cipher.decrypt(encrypted_stores) - plaintext = unpad(plaintext, 16, style="pkcs7") - else: - cipher = Cipher(algorithms.AES(key), modes.CBC(iv)) - decryptor = cipher.decryptor() - plaintext = decryptor.update(encrypted_stores) + decryptor.finalize() - unpadder = padding.PKCS7(128).unpadder() - plaintext = unpadder.update(plaintext) + unpadder.finalize() - plaintext = plaintext.decode("utf-8") - return plaintext - if not password is None: - try: - key, iv = _EVPKDF(password, salt, keySize=32, ivSize=16, iterations=1, hashAlgorithm="md5") - except: - raise Exception("yahoofinancials failed to decrypt Yahoo data response") - plaintext = _decrypt(encrypted_stores, password, key, iv) - else: - success = False - for i in range(len(candidate_passwords)): - password = candidate_passwords[i] - try: - key, iv = _EVPKDF(password, salt, keySize=32, ivSize=16, iterations=1, hashAlgorithm="md5") - plaintext = _decrypt(encrypted_stores, password, key, iv) - success = True - break - except: - pass - if not success: - raise Exception("yahoofinancials failed to decrypt Yahoo data response with hardcoded keys") - decoded_stores = json.loads(plaintext) - return decoded_stores - - -def _get_decryption_keys(soup): - key_count = 4 - re_script = soup.find("script", string=re.compile("root.App.main")).text - re_data = loads(re.search("root.App.main\s+=\s+(\{.*\})", re_script).group(1)) - re_data.pop("context", None) - key_list = list(re_data.keys()) - if re_data.get("plugins"): # 1) attempt to get last 4 keys after plugins - ind = key_list.index("plugins") - if len(key_list) > ind+1: - sub_keys = key_list[ind+1:] - if len(sub_keys) == key_count: - re_obj = {} - missing_val = False - for k in sub_keys: - if not re_data.get(k): - missing_val = True - break - re_obj.update({k: re_data.get(k)}) - if not missing_val: - return re_obj - re_keys = [] # 2) attempt scan main.js file approach to get keys - prefix = "https://s.yimg.com/uc/finance/dd-site/js/main." - tags = [tag['src'] for tag in soup.find_all('script') if prefix in tag.get('src', '')] - for t in tags: - urlopener_js = UrlOpener() - response_js = urlopener_js.open(t) - if response_js.status_code != 200: - time.sleep(random.randrange(10, 20)) - response_js.close() - else: - r_data = response_js.content.decode("utf8") - re_list = [ - x.group() for x in re.finditer(r"context.dispatcher.stores=JSON.parse((?:.*?\r?\n?)*)toString", r_data) - ] - for rl in re_list: - re_sublist = [x.group() for x in re.finditer(r"t\[\"((?:.*?\r?\n?)*)\"\]", rl)] - if len(re_sublist) == key_count: - re_keys = [sl.replace('t["', '').replace('"]', '') for sl in re_sublist] - break - response_js.close() - if len(re_keys) == key_count: - break - re_obj = {} - missing_val = False - for k in re_keys: - if not re_data.get(k): - missing_val = True - break - re_obj.update({k: re_data.get(k)}) - if not missing_val: - return re_obj - return None - - class YahooFinanceETL(object): def __init__(self, ticker, **kwargs): @@ -216,12 +72,27 @@ def __init__(self, ticker, **kwargs): # Meta-data dictionaries for the classes to use YAHOO_FINANCIAL_TYPES = { - 'income': ['financials', 'incomeStatementHistory', 'incomeStatementHistoryQuarterly'], - 'balance': ['balance-sheet', 'balanceSheetHistory', 'balanceSheetHistoryQuarterly', 'balanceSheetStatements'], - 'cash': ['cash-flow', 'cashflowStatementHistory', 'cashflowStatementHistoryQuarterly', 'cashflowStatements'], + 'income': [ + 'income_statement', + 'incomeStatementHistory', + 'incomeStatementHistoryQuarterly', + 'incomeStatements' + ], + 'balance': [ + 'balance_sheet', + 'balanceSheetHistory', + 'balanceSheetHistoryQuarterly', + 'balanceSheetStatements', + ], + 'cash': [ + 'cash_flow', + 'cashflowStatementHistory', + 'cashflowStatementHistoryQuarterly', + 'cashflowStatements', + ], 'keystats': ['key-statistics'], 'history': ['history'], - 'profile': ['profile'] + 'profile': ['summaryProfile'] } # Interval value translation dictionary @@ -239,8 +110,10 @@ def __init__(self, ticker, **kwargs): def get_report_type(frequency): if frequency == 'annual': report_num = 1 - else: + elif frequency == 'quarterly': report_num = 2 + else: + report_num = 3 return report_num # Public static method to format date serial string to readable format and vice versa @@ -278,8 +151,35 @@ def _get_worker_count(self): workers = len(self.ticker) return workers + # Private method to construct historical data url + def _construct_url(self, symbol, config, params, freq, request_type): + url = config["path"].replace("{symbol}", symbol.lower()) + _default_query_params = COUNTRY_MAP.get(self.country.upper()) + for k, v in config['request'].items(): # request type defaults + if k == "type": + params.update({k: v['options'][request_type].get(freq)}) + elif k == "modules" and request_type in v['options']: + params.update({k: request_type}) + elif k not in params: + params.update({k: v['default']}) + for k, v in _default_query_params.items(): # general defaults + if k not in params: + params.update({k: v}) + if params.get("type"): + field_params = "%2C".join(params.get("type")) + url += "?type=" + field_params + for k, v in params.items(): + if k != "type": + url += "&" + k + "=" + str(v) + elif params.get("modules"): + url += "?modules=" + params.get("modules") + for k, v in params.items(): + if k != "modules": + url += "&" + k + "=" + str(v) + return url + # Private method to execute a web scrape request and decrypt the return - def _request_handler(self, url): + def _request_handler(self, url, res_field=""): urlopener = UrlOpener() # Try to open the URL up to 10 times sleeping random time if something goes wrong max_retry = 10 @@ -289,55 +189,58 @@ def _request_handler(self, url): time.sleep(random.randrange(10, 20)) response.close() else: - soup = BeautifulSoup(response.content, "html.parser") - key_obj = _get_decryption_keys(soup) - if key_obj is not None: - re_script = soup.find("script", string=re.compile("root.App.main")).text - if re_script is not None: - re_data = loads(re.search("root.App.main\s+=\s+(\{.*\})", re_script).group(1)) - if "context" in re_data and "dispatcher" in re_data["context"]: - data = re_data['context']['dispatcher']['stores'] - if "QuoteSummaryStore" not in data: - data = decrypt_cryptojs_aes(re_data, key_obj) - try: - if data.get("QuoteSummaryStore"): - self._cache[url] = data - break - except AttributeError: - time.sleep(random.randrange(10, 20)) - continue - else: - time.sleep(random.randrange(10, 20)) - else: - time.sleep(random.randrange(10, 20)) + res_content = response.text + response.close() + self._cache[url] = loads(res_content).get(res_field) + break if i == max_retry - 1: # Raise a custom exception if we can't get the web page within max_retry attempts raise ManagedException("Server replied with HTTP " + str(response.status_code) + " code while opening the url: " + str(url)) - # Private method to scrape data from yahoo finance - def _scrape_data(self, url, tech_type, statement_type): + @staticmethod + def _format_raw_fundamental_data(raw_data): + data = {} + for i in raw_data.get("result"): + for k, v in i.items(): + if k not in ['meta', 'timestamp']: + cleaned_k = remove_prefix(remove_prefix(remove_prefix(k, "quarterly"), "annual"), "trailing") + if cleaned_k in ['EBIT']: + cleaned_k = cleaned_k.lower() + else: + cleaned_k = cleaned_k[0].lower() + cleaned_k[1:] + for rec in v: + if rec.get("asOfDate") in data: + data[rec.get("asOfDate")].update({cleaned_k: rec.get('reportedValue', {}).get('raw')}) + else: + data.update({rec.get("asOfDate"): {cleaned_k: rec.get('reportedValue', {}).get('raw')}}) + return data + + @staticmethod + def _format_raw_module_data(raw_data, tech_type): + data = {} + for i in raw_data.get("result", {}): + if i.get(tech_type): + for k, v in i.get(tech_type, {}).items(): + data.update({k: v}) + return data + + # Private method to _get_historical_data from yahoo finance + def _get_historical_data(self, url, config, tech_type, statement_type): global _lastget - country_ent = COUNTRY_MAP.get(self.country.upper()) - meta_str = '&lang=' + country_ent.get("lang", "en-US") + '®ion=' + country_ent.get("region", "US") - url += meta_str if not self._cache.get(url): now = int(time.time()) if _lastget and now - _lastget < self._MIN_INTERVAL: time.sleep(self._MIN_INTERVAL - (now - _lastget) + 1) now = int(time.time()) _lastget = now - self._request_handler(url) + self._request_handler(url, config.get("response_field")) data = self._cache[url] - if "context" in data and "dispatcher" in data["context"]: - data = data['context']['dispatcher']['stores'] - if tech_type == '' and statement_type != 'history': - stores = data["QuoteSummaryStore"] - elif tech_type != '' and statement_type != 'history': - stores = data["QuoteSummaryStore"][tech_type] + if tech_type == '' and statement_type in ["income", "balance", "cash"]: + data = self._format_raw_fundamental_data(data) else: - stores = data["HistoricalPriceStore"] - return stores + data = self._format_raw_module_data(data, tech_type) + return data # Private static method to determine if a numerical value is in the data object being cleaned @staticmethod @@ -429,13 +332,6 @@ def _encode_ticker(ticker_str): encoded_ticker = ticker_str.replace('=', '%3D') return encoded_ticker - # Private method to get time interval code - def _build_historical_url(self, ticker, hist_oj): - url = self._BASE_YAHOO_URL + self._encode_ticker(ticker) + '/history?period1=' + str(hist_oj['start']) + \ - '&period2=' + str(hist_oj['end']) + '&interval=' + hist_oj['interval'] + '&filter=history&frequency=' + \ - hist_oj['interval'] - return url - # Private Method to clean the dates of the newly returns historical stock data into readable format def _clean_historical_data(self, hist_data, last_attempt=False): data = {} @@ -571,33 +467,40 @@ def _recursive_api_request(self, hist_obj, up_ticker, clean=True, i=0): # Private Method to take scrapped data and build a data dictionary with, used by get_stock_data() def _create_dict_ent(self, up_ticker, statement_type, tech_type, report_name, hist_obj): - YAHOO_URL = self._BASE_YAHOO_URL + up_ticker + '/' + self.YAHOO_FINANCIAL_TYPES[statement_type][0] + '?p=' + \ - up_ticker - if tech_type == '' and statement_type != 'history': - try: - re_data = self._scrape_data(YAHOO_URL, tech_type, statement_type) - dict_ent = {up_ticker: re_data[u'' + report_name], 'dataType': report_name} - except KeyError: - re_data = None - dict_ent = {up_ticker: re_data, 'dataType': report_name} - elif tech_type != '' and statement_type != 'history': - try: - re_data = self._scrape_data(YAHOO_URL, tech_type, statement_type) - except KeyError: - re_data = None - dict_ent = {up_ticker: re_data} - else: - YAHOO_URL = self._build_historical_url(up_ticker, hist_obj) + if statement_type == 'history': try: cleaned_re_data = self._recursive_api_request(hist_obj, up_ticker) except KeyError: + cleaned_re_data = None + return {up_ticker: cleaned_re_data} + else: + dict_ent = {} + params = {} + r_map = get_request_config(tech_type, REQUEST_MAP) + r_cat = get_request_category(tech_type, self.YAHOO_FINANCIAL_TYPES, statement_type) + YAHOO_URL = self._construct_url( + up_ticker.lower(), + r_map, + params, + hist_obj.get("interval"), + r_cat + ) + if tech_type == '' and statement_type != 'history': try: - re_data = self._scrape_data(YAHOO_URL, tech_type, statement_type) - cleaned_re_data = self._clean_historical_data(re_data) + re_data = self._get_historical_data(YAHOO_URL, REQUEST_MAP['fundamentals'], tech_type, + statement_type) + dict_ent = {up_ticker: re_data, 'dataType': report_name} except KeyError: - cleaned_re_data = None - dict_ent = {up_ticker: cleaned_re_data} - return dict_ent + re_data = None + dict_ent = {up_ticker: re_data, 'dataType': report_name} + elif tech_type != '' and statement_type != 'history': + r_map = get_request_config(tech_type, REQUEST_MAP) + try: + re_data = self._get_historical_data(YAHOO_URL, r_map, tech_type, statement_type) + except KeyError: + re_data = None + dict_ent = {up_ticker: re_data} + return dict_ent # Private method to return the stmt_id for the reformat_process def _get_stmt_id(self, statement_type, raw_data): @@ -612,32 +515,20 @@ def _get_stmt_id(self, statement_type, raw_data): return stmt_id # Private Method for the Reformat Process - def _reformat_stmt_data_process(self, raw_data, statement_type): + @staticmethod + def _reformat_stmt_data_process(raw_data): final_data_list = [] if raw_data is not None: - stmt_id = self._get_stmt_id(statement_type, raw_data) - if stmt_id is None: - return final_data_list - hashed_data_list = raw_data[stmt_id] - for data_item in hashed_data_list: - data_date = '' - sub_data_dict = {} - for k, v in data_item.items(): - if k == 'endDate': - data_date = v['fmt'] - elif k != 'maxAge': - numerical_val = self._determine_numeric_value(v) - sub_dict_item = {k: numerical_val} - sub_data_dict.update(sub_dict_item) - dict_item = {data_date: sub_data_dict} + for date_key, data_item in raw_data.items(): + dict_item = {date_key: data_item} final_data_list.append(dict_item) return final_data_list else: return raw_data # Private Method to return subdict entry for the statement reformat process - def _get_sub_dict_ent(self, ticker, raw_data, statement_type): - form_data_list = self._reformat_stmt_data_process(raw_data[ticker], statement_type) + def _get_sub_dict_ent(self, ticker, raw_data): + form_data_list = self._reformat_stmt_data_process(raw_data[ticker]) return {ticker: form_data_list} # Public method to get time interval code @@ -686,7 +577,7 @@ def get_reformatted_stmt_data(self, raw_data, statement_type): sub_dict, data_dict = {}, {} data_type = raw_data['dataType'] if isinstance(self.ticker, str): - sub_dict_ent = self._get_sub_dict_ent(self.ticker, raw_data, statement_type) + sub_dict_ent = self._get_sub_dict_ent(self.ticker, raw_data) sub_dict.update(sub_dict_ent) dict_ent = {data_type: sub_dict} data_dict.update(dict_ent) @@ -694,15 +585,14 @@ def get_reformatted_stmt_data(self, raw_data, statement_type): if self.concurrent: with Pool(self._get_worker_count()) as pool: sub_dict_ents = pool.map(partial(self._get_sub_dict_ent, - raw_data=raw_data, - statement_type=statement_type), self.ticker) + raw_data=raw_data), self.ticker) for dict_ent in sub_dict_ents: sub_dict.update(dict_ent) pool.close() pool.join() else: for tick in self.ticker: - sub_dict_ent = self._get_sub_dict_ent(tick, raw_data, statement_type) + sub_dict_ent = self._get_sub_dict_ent(tick, raw_data) sub_dict.update(sub_dict_ent) dict_ent = {data_type: sub_dict} data_dict.update(dict_ent) diff --git a/yahoofinancials/maps.py b/yahoofinancials/maps.py index d6caef7..9110dbd 100644 --- a/yahoofinancials/maps.py +++ b/yahoofinancials/maps.py @@ -1,3 +1,5 @@ +import time + COUNTRY_MAP = { "FR": {"lang": "fr-FR", "region": "FR", "corsDomain": "fr.finance.yahoo.com"}, "IN": {"lang": "en-IN", "region": "IN", "corsDomain": "in.finance.yahoo.com"}, @@ -14,3 +16,2377 @@ "SG": {"lang": "en-SG", "region": "SG", "corsDomain": "sg.finance.yahoo.com"}, "TW": {"lang": "zh-tw", "region": "TW", "corsDomain": "tw.finance.yahoo.com"}, } + +FUNDAMENTALS_MAP = { + "income_statement": { + "annual": [ + "annualAmortization", + "annualAmortizationOfIntangiblesIncomeStatement", + "annualAverageDilutionEarnings", + "annualBasicAccountingChange", + "annualBasicAverageShares", + "annualBasicContinuousOperations", + "annualBasicDiscontinuousOperations", + "annualBasicEPS", + "annualBasicEPSOtherGainsLosses", + "annualBasicExtraordinary", + "annualContinuingAndDiscontinuedBasicEPS", + "annualContinuingAndDiscontinuedDilutedEPS", + "annualCostOfRevenue", + "annualDepletionIncomeStatement", + "annualDepreciationAmortizationDepletionIncomeStatement", + "annualDepreciationAndAmortizationInIncomeStatement", + "annualDepreciationIncomeStatement", + "annualDilutedAccountingChange", + "annualDilutedAverageShares", + "annualDilutedContinuousOperations", + "annualDilutedDiscontinuousOperations", + "annualDilutedEPS", + "annualDilutedEPSOtherGainsLosses", + "annualDilutedExtraordinary", + "annualDilutedNIAvailtoComStockholders", + "annualDividendPerShare", + "annualEBIT", + "annualEBITDA", + "annualEarningsFromEquityInterest", + "annualEarningsFromEquityInterestNetOfTax", + "annualExciseTaxes", + "annualGainOnSaleOfBusiness", + "annualGainOnSaleOfPPE", + "annualGainOnSaleOfSecurity", + "annualGeneralAndAdministrativeExpense", + "annualGrossProfit", + "annualImpairmentOfCapitalAssets", + "annualInsuranceAndClaims", + "annualInterestExpense", + "annualInterestExpenseNonOperating", + "annualInterestIncome", + "annualInterestIncomeNonOperating", + "annualMinorityInterests", + "annualNetIncome", + "annualNetIncomeCommonStockholders", + "annualNetIncomeContinuousOperations", + "annualNetIncomeDiscontinuousOperations", + "annualNetIncomeExtraordinary", + "annualNetIncomeFromContinuingAndDiscontinuedOperation", + "annualNetIncomeFromContinuingOperationNetMinorityInterest", + "annualNetIncomeFromTaxLossCarryforward", + "annualNetIncomeIncludingNoncontrollingInterests", + "annualNetInterestIncome", + "annualNetNonOperatingInterestIncomeExpense", + "annualNormalizedBasicEPS", + "annualNormalizedDilutedEPS", + "annualNormalizedEBITDA", + "annualNormalizedIncome", + "annualOperatingExpense", + "annualOperatingIncome", + "annualOperatingRevenue", + "annualOtherGandA", + "annualOtherIncomeExpense", + "annualOtherNonOperatingIncomeExpenses", + "annualOtherOperatingExpenses", + "annualOtherSpecialCharges", + "annualOtherTaxes", + "annualOtherunderPreferredStockDividend", + "annualPreferredStockDividends", + "annualPretaxIncome", + "annualProvisionForDoubtfulAccounts", + "annualReconciledCostOfRevenue", + "annualReconciledDepreciation", + "annualRentAndLandingFees", + "annualRentExpenseSupplemental", + "annualReportedNormalizedBasicEPS", + "annualReportedNormalizedDilutedEPS", + "annualResearchAndDevelopment", + "annualRestructuringAndMergernAcquisition", + "annualSalariesAndWages", + "annualSecuritiesAmortization", + "annualSellingAndMarketingExpense", + "annualSellingGeneralAndAdministration", + "annualSpecialIncomeCharges", + "annualTaxEffectOfUnusualItems", + "annualTaxLossCarryforwardBasicEPS", + "annualTaxLossCarryforwardDilutedEPS", + "annualTaxProvision", + "annualTaxRateForCalcs", + "annualTotalExpenses", + "annualTotalOperatingIncomeAsReported", + "annualTotalOtherFinanceCost", + "annualTotalRevenue", + "annualTotalUnusualItems", + "annualTotalUnusualItemsExcludingGoodwill", + "annualWriteOff", + "trailingAmortization", + "trailingAmortizationOfIntangiblesIncomeStatement", + "trailingAverageDilutionEarnings", + "trailingBasicAccountingChange", + "trailingBasicAverageShares", + "trailingBasicContinuousOperations", + "trailingBasicDiscontinuousOperations", + "trailingBasicEPS", + "trailingBasicEPSOtherGainsLosses", + "trailingBasicExtraordinary", + "trailingContinuingAndDiscontinuedBasicEPS", + "trailingContinuingAndDiscontinuedDilutedEPS", + "trailingCostOfRevenue", + "trailingDepletionIncomeStatement", + "trailingDepreciationAmortizationDepletionIncomeStatement", + "trailingDepreciationAndAmortizationInIncomeStatement", + "trailingDepreciationIncomeStatement", + "trailingDilutedAccountingChange", + "trailingDilutedAverageShares", + "trailingDilutedContinuousOperations", + "trailingDilutedDiscontinuousOperations", + "trailingDilutedEPS", + "trailingDilutedEPSOtherGainsLosses", + "trailingDilutedExtraordinary", + "trailingDilutedNIAvailtoComStockholders", + "trailingDividendPerShare", + "trailingEBIT", + "trailingEBITDA", + "trailingEarningsFromEquityInterest", + "trailingEarningsFromEquityInterestNetOfTax", + "trailingExciseTaxes", + "trailingGainOnSaleOfBusiness", + "trailingGainOnSaleOfPPE", + "trailingGainOnSaleOfSecurity", + "trailingGeneralAndAdministrativeExpense", + "trailingGrossProfit", + "trailingImpairmentOfCapitalAssets", + "trailingInsuranceAndClaims", + "trailingInterestExpense", + "trailingInterestExpenseNonOperating", + "trailingInterestIncome", + "trailingInterestIncomeNonOperating", + "trailingMinorityInterests", + "trailingNetIncome", + "trailingNetIncomeCommonStockholders", + "trailingNetIncomeContinuousOperations", + "trailingNetIncomeDiscontinuousOperations", + "trailingNetIncomeExtraordinary", + "trailingNetIncomeFromContinuingAndDiscontinuedOperation", + "trailingNetIncomeFromContinuingOperationNetMinorityInterest", + "trailingNetIncomeFromTaxLossCarryforward", + "trailingNetIncomeIncludingNoncontrollingInterests", + "trailingNetInterestIncome", + "trailingNetNonOperatingInterestIncomeExpense", + "trailingNormalizedBasicEPS", + "trailingNormalizedDilutedEPS", + "trailingNormalizedEBITDA", + "trailingNormalizedIncome", + "trailingOperatingExpense", + "trailingOperatingIncome", + "trailingOperatingRevenue", + "trailingOtherGandA", + "trailingOtherIncomeExpense", + "trailingOtherNonOperatingIncomeExpenses", + "trailingOtherOperatingExpenses", + "trailingOtherSpecialCharges", + "trailingOtherTaxes", + "trailingOtherunderPreferredStockDividend", + "trailingPreferredStockDividends", + "trailingPretaxIncome", + "trailingProvisionForDoubtfulAccounts", + "trailingReconciledCostOfRevenue", + "trailingReconciledDepreciation", + "trailingRentAndLandingFees", + "trailingRentExpenseSupplemental", + "trailingReportedNormalizedBasicEPS", + "trailingReportedNormalizedDilutedEPS", + "trailingResearchAndDevelopment", + "trailingRestructuringAndMergernAcquisition", + "trailingSalariesAndWages", + "trailingSecuritiesAmortization", + "trailingSellingAndMarketingExpense", + "trailingSellingGeneralAndAdministration", + "trailingSpecialIncomeCharges", + "trailingTaxEffectOfUnusualItems", + "trailingTaxLossCarryforwardBasicEPS", + "trailingTaxLossCarryforwardDilutedEPS", + "trailingTaxProvision", + "trailingTaxRateForCalcs", + "trailingTotalExpenses", + "trailingTotalOperatingIncomeAsReported", + "trailingTotalOtherFinanceCost", + "trailingTotalRevenue", + "trailingTotalUnusualItems", + "trailingTotalUnusualItemsExcludingGoodwill", + "trailingWriteOff", + ], + "quarterly": [ + "quarterlyAmortization", + "quarterlyAmortizationOfIntangiblesIncomeStatement", + "quarterlyAverageDilutionEarnings", + "quarterlyBasicAccountingChange", + "quarterlyBasicAverageShares", + "quarterlyBasicContinuousOperations", + "quarterlyBasicDiscontinuousOperations", + "quarterlyBasicEPS", + "quarterlyBasicEPSOtherGainsLosses", + "quarterlyBasicExtraordinary", + "quarterlyContinuingAndDiscontinuedBasicEPS", + "quarterlyContinuingAndDiscontinuedDilutedEPS", + "quarterlyCostOfRevenue", + "quarterlyDepletionIncomeStatement", + "quarterlyDepreciationAmortizationDepletionIncomeStatement", + "quarterlyDepreciationAndAmortizationInIncomeStatement", + "quarterlyDepreciationIncomeStatement", + "quarterlyDilutedAccountingChange", + "quarterlyDilutedAverageShares", + "quarterlyDilutedContinuousOperations", + "quarterlyDilutedDiscontinuousOperations", + "quarterlyDilutedEPS", + "quarterlyDilutedEPSOtherGainsLosses", + "quarterlyDilutedExtraordinary", + "quarterlyDilutedNIAvailtoComStockholders", + "quarterlyDividendPerShare", + "quarterlyEBIT", + "quarterlyEBITDA", + "quarterlyEarningsFromEquityInterest", + "quarterlyEarningsFromEquityInterestNetOfTax", + "quarterlyExciseTaxes", + "quarterlyGainOnSaleOfBusiness", + "quarterlyGainOnSaleOfPPE", + "quarterlyGainOnSaleOfSecurity", + "quarterlyGeneralAndAdministrativeExpense", + "quarterlyGrossProfit", + "quarterlyImpairmentOfCapitalAssets", + "quarterlyInsuranceAndClaims", + "quarterlyInterestExpense", + "quarterlyInterestExpenseNonOperating", + "quarterlyInterestIncome", + "quarterlyInterestIncomeNonOperating", + "quarterlyMinorityInterests", + "quarterlyNetIncome", + "quarterlyNetIncomeCommonStockholders", + "quarterlyNetIncomeContinuousOperations", + "quarterlyNetIncomeDiscontinuousOperations", + "quarterlyNetIncomeExtraordinary", + "quarterlyNetIncomeFromContinuingAndDiscontinuedOperation", + "quarterlyNetIncomeFromContinuingOperationNetMinorityInterest", + "quarterlyNetIncomeFromTaxLossCarryforward", + "quarterlyNetIncomeIncludingNoncontrollingInterests", + "quarterlyNetInterestIncome", + "quarterlyNetNonOperatingInterestIncomeExpense", + "quarterlyNormalizedBasicEPS", + "quarterlyNormalizedDilutedEPS", + "quarterlyNormalizedEBITDA", + "quarterlyNormalizedIncome", + "quarterlyOperatingExpense", + "quarterlyOperatingIncome", + "quarterlyOperatingRevenue", + "quarterlyOtherGandA", + "quarterlyOtherIncomeExpense", + "quarterlyOtherNonOperatingIncomeExpenses", + "quarterlyOtherOperatingExpenses", + "quarterlyOtherSpecialCharges", + "quarterlyOtherTaxes", + "quarterlyOtherunderPreferredStockDividend", + "quarterlyPreferredStockDividends", + "quarterlyPretaxIncome", + "quarterlyProvisionForDoubtfulAccounts", + "quarterlyReconciledCostOfRevenue", + "quarterlyReconciledDepreciation", + "quarterlyRentAndLandingFees", + "quarterlyRentExpenseSupplemental", + "quarterlyReportedNormalizedBasicEPS", + "quarterlyReportedNormalizedDilutedEPS", + "quarterlyResearchAndDevelopment", + "quarterlyRestructuringAndMergernAcquisition", + "quarterlySalariesAndWages", + "quarterlySecuritiesAmortization", + "quarterlySellingAndMarketingExpense", + "quarterlySellingGeneralAndAdministration", + "quarterlySpecialIncomeCharges", + "quarterlyTaxEffectOfUnusualItems", + "quarterlyTaxLossCarryforwardBasicEPS", + "quarterlyTaxLossCarryforwardDilutedEPS", + "quarterlyTaxProvision", + "quarterlyTaxRateForCalcs", + "quarterlyTotalExpenses", + "quarterlyTotalOperatingIncomeAsReported", + "quarterlyTotalOtherFinanceCost", + "quarterlyTotalRevenue", + "quarterlyTotalUnusualItems", + "quarterlyTotalUnusualItemsExcludingGoodwill", + "quarterlyWriteOff", + "trailingAmortization", + "trailingAmortizationOfIntangiblesIncomeStatement", + "trailingAverageDilutionEarnings", + "trailingBasicAccountingChange", + "trailingBasicAverageShares", + "trailingBasicContinuousOperations", + "trailingBasicDiscontinuousOperations", + "trailingBasicEPS", + "trailingBasicEPSOtherGainsLosses", + "trailingBasicExtraordinary", + "trailingContinuingAndDiscontinuedBasicEPS", + "trailingContinuingAndDiscontinuedDilutedEPS", + "trailingCostOfRevenue", + "trailingDepletionIncomeStatement", + "trailingDepreciationAmortizationDepletionIncomeStatement", + "trailingDepreciationAndAmortizationInIncomeStatement", + "trailingDepreciationIncomeStatement", + "trailingDilutedAccountingChange", + "trailingDilutedAverageShares", + "trailingDilutedContinuousOperations", + "trailingDilutedDiscontinuousOperations", + "trailingDilutedEPS", + "trailingDilutedEPSOtherGainsLosses", + "trailingDilutedExtraordinary", + "trailingDilutedNIAvailtoComStockholders", + "trailingDividendPerShare", + "trailingEBIT", + "trailingEBITDA", + "trailingEarningsFromEquityInterest", + "trailingEarningsFromEquityInterestNetOfTax", + "trailingExciseTaxes", + "trailingGainOnSaleOfBusiness", + "trailingGainOnSaleOfPPE", + "trailingGainOnSaleOfSecurity", + "trailingGeneralAndAdministrativeExpense", + "trailingGrossProfit", + "trailingImpairmentOfCapitalAssets", + "trailingInsuranceAndClaims", + "trailingInterestExpense", + "trailingInterestExpenseNonOperating", + "trailingInterestIncome", + "trailingInterestIncomeNonOperating", + "trailingMinorityInterests", + "trailingNetIncome", + "trailingNetIncomeCommonStockholders", + "trailingNetIncomeContinuousOperations", + "trailingNetIncomeDiscontinuousOperations", + "trailingNetIncomeExtraordinary", + "trailingNetIncomeFromContinuingAndDiscontinuedOperation", + "trailingNetIncomeFromContinuingOperationNetMinorityInterest", + "trailingNetIncomeFromTaxLossCarryforward", + "trailingNetIncomeIncludingNoncontrollingInterests", + "trailingNetInterestIncome", + "trailingNetNonOperatingInterestIncomeExpense", + "trailingNormalizedBasicEPS", + "trailingNormalizedDilutedEPS", + "trailingNormalizedEBITDA", + "trailingNormalizedIncome", + "trailingOperatingExpense", + "trailingOperatingIncome", + "trailingOperatingRevenue", + "trailingOtherGandA", + "trailingOtherIncomeExpense", + "trailingOtherNonOperatingIncomeExpenses", + "trailingOtherOperatingExpenses", + "trailingOtherSpecialCharges", + "trailingOtherTaxes", + "trailingOtherunderPreferredStockDividend", + "trailingPreferredStockDividends", + "trailingPretaxIncome", + "trailingProvisionForDoubtfulAccounts", + "trailingReconciledCostOfRevenue", + "trailingReconciledDepreciation", + "trailingRentAndLandingFees", + "trailingRentExpenseSupplemental", + "trailingReportedNormalizedBasicEPS", + "trailingReportedNormalizedDilutedEPS", + "trailingResearchAndDevelopment", + "trailingRestructuringAndMergernAcquisition", + "trailingSalariesAndWages", + "trailingSecuritiesAmortization", + "trailingSellingAndMarketingExpense", + "trailingSellingGeneralAndAdministration", + "trailingSpecialIncomeCharges", + "trailingTaxEffectOfUnusualItems", + "trailingTaxLossCarryforwardBasicEPS", + "trailingTaxLossCarryforwardDilutedEPS", + "trailingTaxProvision", + "trailingTaxRateForCalcs", + "trailingTotalExpenses", + "trailingTotalOperatingIncomeAsReported", + "trailingTotalOtherFinanceCost", + "trailingTotalRevenue", + "trailingTotalUnusualItems", + "trailingTotalUnusualItemsExcludingGoodwill", + "trailingWriteOff" + ], + "monthly": [ + "monthlyAmortization", + "monthlyAmortizationOfIntangiblesIncomeStatement", + "monthlyAverageDilutionEarnings", + "monthlyBasicAccountingChange", + "monthlyBasicAverageShares", + "monthlyBasicContinuousOperations", + "monthlyBasicDiscontinuousOperations", + "monthlyBasicEPS", + "monthlyBasicEPSOtherGainsLosses", + "monthlyBasicExtraordinary", + "monthlyContinuingAndDiscontinuedBasicEPS", + "monthlyContinuingAndDiscontinuedDilutedEPS", + "monthlyCostOfRevenue", + "monthlyDepletionIncomeStatement", + "monthlyDepreciationAmortizationDepletionIncomeStatement", + "monthlyDepreciationAndAmortizationInIncomeStatement", + "monthlyDepreciationIncomeStatement", + "monthlyDilutedAccountingChange", + "monthlyDilutedAverageShares", + "monthlyDilutedContinuousOperations", + "monthlyDilutedDiscontinuousOperations", + "monthlyDilutedEPS", + "monthlyDilutedEPSOtherGainsLosses", + "monthlyDilutedExtraordinary", + "monthlyDilutedNIAvailtoComStockholders", + "monthlyDividendPerShare", + "monthlyEBIT", + "monthlyEBITDA", + "monthlyEarningsFromEquityInterest", + "monthlyEarningsFromEquityInterestNetOfTax", + "monthlyExciseTaxes", + "monthlyGainOnSaleOfBusiness", + "monthlyGainOnSaleOfPPE", + "monthlyGainOnSaleOfSecurity", + "monthlyGeneralAndAdministrativeExpense", + "monthlyGrossProfit", + "monthlyImpairmentOfCapitalAssets", + "monthlyInsuranceAndClaims", + "monthlyInterestExpense", + "monthlyInterestExpenseNonOperating", + "monthlyInterestIncome", + "monthlyInterestIncomeNonOperating", + "monthlyMinorityInterests", + "monthlyNetIncome", + "monthlyNetIncomeCommonStockholders", + "monthlyNetIncomeContinuousOperations", + "monthlyNetIncomeDiscontinuousOperations", + "monthlyNetIncomeExtraordinary", + "monthlyNetIncomeFromContinuingAndDiscontinuedOperation", + "monthlyNetIncomeFromContinuingOperationNetMinorityInterest", + "monthlyNetIncomeFromTaxLossCarryforward", + "monthlyNetIncomeIncludingNoncontrollingInterests", + "monthlyNetInterestIncome", + "monthlyNetNonOperatingInterestIncomeExpense", + "monthlyNormalizedBasicEPS", + "monthlyNormalizedDilutedEPS", + "monthlyNormalizedEBITDA", + "monthlyNormalizedIncome", + "monthlyOperatingExpense", + "monthlyOperatingIncome", + "monthlyOperatingRevenue", + "monthlyOtherGandA", + "monthlyOtherIncomeExpense", + "monthlyOtherNonOperatingIncomeExpenses", + "monthlyOtherOperatingExpenses", + "monthlyOtherSpecialCharges", + "monthlyOtherTaxes", + "monthlyOtherunderPreferredStockDividend", + "monthlyPreferredStockDividends", + "monthlyPretaxIncome", + "monthlyProvisionForDoubtfulAccounts", + "monthlyReconciledCostOfRevenue", + "monthlyReconciledDepreciation", + "monthlyRentAndLandingFees", + "monthlyRentExpenseSupplemental", + "monthlyReportedNormalizedBasicEPS", + "monthlyReportedNormalizedDilutedEPS", + "monthlyResearchAndDevelopment", + "monthlyRestructuringAndMergernAcquisition", + "monthlySalariesAndWages", + "monthlySecuritiesAmortization", + "monthlySellingAndMarketingExpense", + "monthlySellingGeneralAndAdministration", + "monthlySpecialIncomeCharges", + "monthlyTaxEffectOfUnusualItems", + "monthlyTaxLossCarryforwardBasicEPS", + "monthlyTaxLossCarryforwardDilutedEPS", + "monthlyTaxProvision", + "monthlyTaxRateForCalcs", + "monthlyTotalExpenses", + "monthlyTotalOperatingIncomeAsReported", + "monthlyTotalOtherFinanceCost", + "monthlyTotalRevenue", + "monthlyTotalUnusualItems", + "monthlyTotalUnusualItemsExcludingGoodwill", + "monthlyWriteOff", + "trailingAmortization", + "trailingAmortizationOfIntangiblesIncomeStatement", + "trailingAverageDilutionEarnings", + "trailingBasicAccountingChange", + "trailingBasicAverageShares", + "trailingBasicContinuousOperations", + "trailingBasicDiscontinuousOperations", + "trailingBasicEPS", + "trailingBasicEPSOtherGainsLosses", + "trailingBasicExtraordinary", + "trailingContinuingAndDiscontinuedBasicEPS", + "trailingContinuingAndDiscontinuedDilutedEPS", + "trailingCostOfRevenue", + "trailingDepletionIncomeStatement", + "trailingDepreciationAmortizationDepletionIncomeStatement", + "trailingDepreciationAndAmortizationInIncomeStatement", + "trailingDepreciationIncomeStatement", + "trailingDilutedAccountingChange", + "trailingDilutedAverageShares", + "trailingDilutedContinuousOperations", + "trailingDilutedDiscontinuousOperations", + "trailingDilutedEPS", + "trailingDilutedEPSOtherGainsLosses", + "trailingDilutedExtraordinary", + "trailingDilutedNIAvailtoComStockholders", + "trailingDividendPerShare", + "trailingEBIT", + "trailingEBITDA", + "trailingEarningsFromEquityInterest", + "trailingEarningsFromEquityInterestNetOfTax", + "trailingExciseTaxes", + "trailingGainOnSaleOfBusiness", + "trailingGainOnSaleOfPPE", + "trailingGainOnSaleOfSecurity", + "trailingGeneralAndAdministrativeExpense", + "trailingGrossProfit", + "trailingImpairmentOfCapitalAssets", + "trailingInsuranceAndClaims", + "trailingInterestExpense", + "trailingInterestExpenseNonOperating", + "trailingInterestIncome", + "trailingInterestIncomeNonOperating", + "trailingMinorityInterests", + "trailingNetIncome", + "trailingNetIncomeCommonStockholders", + "trailingNetIncomeContinuousOperations", + "trailingNetIncomeDiscontinuousOperations", + "trailingNetIncomeExtraordinary", + "trailingNetIncomeFromContinuingAndDiscontinuedOperation", + "trailingNetIncomeFromContinuingOperationNetMinorityInterest", + "trailingNetIncomeFromTaxLossCarryforward", + "trailingNetIncomeIncludingNoncontrollingInterests", + "trailingNetInterestIncome", + "trailingNetNonOperatingInterestIncomeExpense", + "trailingNormalizedBasicEPS", + "trailingNormalizedDilutedEPS", + "trailingNormalizedEBITDA", + "trailingNormalizedIncome", + "trailingOperatingExpense", + "trailingOperatingIncome", + "trailingOperatingRevenue", + "trailingOtherGandA", + "trailingOtherIncomeExpense", + "trailingOtherNonOperatingIncomeExpenses", + "trailingOtherOperatingExpenses", + "trailingOtherSpecialCharges", + "trailingOtherTaxes", + "trailingOtherunderPreferredStockDividend", + "trailingPreferredStockDividends", + "trailingPretaxIncome", + "trailingProvisionForDoubtfulAccounts", + "trailingReconciledCostOfRevenue", + "trailingReconciledDepreciation", + "trailingRentAndLandingFees", + "trailingRentExpenseSupplemental", + "trailingReportedNormalizedBasicEPS", + "trailingReportedNormalizedDilutedEPS", + "trailingResearchAndDevelopment", + "trailingRestructuringAndMergernAcquisition", + "trailingSalariesAndWages", + "trailingSecuritiesAmortization", + "trailingSellingAndMarketingExpense", + "trailingSellingGeneralAndAdministration", + "trailingSpecialIncomeCharges", + "trailingTaxEffectOfUnusualItems", + "trailingTaxLossCarryforwardBasicEPS", + "trailingTaxLossCarryforwardDilutedEPS", + "trailingTaxProvision", + "trailingTaxRateForCalcs", + "trailingTotalExpenses", + "trailingTotalOperatingIncomeAsReported", + "trailingTotalOtherFinanceCost", + "trailingTotalRevenue", + "trailingTotalUnusualItems", + "trailingTotalUnusualItemsExcludingGoodwill", + "trailingWriteOff", + ] + }, + "balance_sheet": { + "annual": [ + "annualAccountsPayable", + "annualAccountsReceivable", + "annualAccruedInterestReceivable", + "annualAccumulatedDepreciation", + "annualAdditionalPaidInCapital", + "annualAllowanceForDoubtfulAccountsReceivable", + "annualAssetsHeldForSaleCurrent", + "annualAvailableForSaleSecurities", + "annualBuildingsAndImprovements", + "annualCapitalLeaseObligations", + "annualCapitalStock", + "annualCashAndCashEquivalents", + "annualCashCashEquivalentsAndShortTermInvestments", + "annualCashEquivalents", + "annualCashFinancial", + "annualCommercialPaper", + "annualCommonStock", + "annualCommonStockEquity", + "annualConstructionInProgress", + "annualCurrentAccruedExpenses", + "annualCurrentAssets", + "annualCurrentCapitalLeaseObligation", + "annualCurrentDebt", + "annualCurrentDebtAndCapitalLeaseObligation", + "annualCurrentDeferredAssets", + "annualCurrentDeferredLiabilities", + "annualCurrentDeferredRevenue", + "annualCurrentDeferredTaxesAssets", + "annualCurrentDeferredTaxesLiabilities", + "annualCurrentLiabilities", + "annualCurrentNotesPayable", + "annualCurrentProvisions", + "annualDefinedPensionBenefit", + "annualDerivativeProductLiabilities", + "annualDividendsPayable", + "annualDuefromRelatedPartiesCurrent", + "annualDuefromRelatedPartiesNonCurrent", + "annualDuetoRelatedPartiesCurrent", + "annualDuetoRelatedPartiesNonCurrent", + "annualEmployeeBenefits", + "annualFinancialAssets", + "annualFinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", + "annualFinishedGoods", + "annualFixedAssetsRevaluationReserve", + "annualForeignCurrencyTranslationAdjustments", + "annualGainsLossesNotAffectingRetainedEarnings", + "annualGeneralPartnershipCapital", + "annualGoodwill", + "annualGoodwillAndOtherIntangibleAssets", + "annualGrossAccountsReceivable", + "annualGrossPPE", + "annualHedgingAssetsCurrent", + "annualHeldToMaturitySecurities", + "annualIncomeTaxPayable", + "annualInterestPayable", + "annualInventoriesAdjustmentsAllowances", + "annualInventory", + "annualInvestedCapital", + "annualInvestmentProperties", + "annualInvestmentinFinancialAssets", + "annualInvestmentsAndAdvances", + "annualInvestmentsInOtherVenturesUnderEquityMethod", + "annualInvestmentsinAssociatesatCost", + "annualInvestmentsinJointVenturesatCost", + "annualInvestmentsinSubsidiariesatCost", + "annualLandAndImprovements", + "annualLeases", + "annualLiabilitiesHeldforSaleNonCurrent", + "annualLimitedPartnershipCapital", + "annualLineOfCredit", + "annualLoansReceivable", + "annualLongTermCapitalLeaseObligation", + "annualLongTermDebt", + "annualLongTermDebtAndCapitalLeaseObligation", + "annualLongTermEquityInvestment", + "annualLongTermProvisions", + "annualMachineryFurnitureEquipment", + "annualMinimumPensionLiabilities", + "annualMinorityInterest", + "annualNetDebt", + "annualNetPPE", + "annualNetTangibleAssets", + "annualNonCurrentAccountsReceivable", + "annualNonCurrentAccruedExpenses", + "annualNonCurrentDeferredAssets", + "annualNonCurrentDeferredLiabilities", + "annualNonCurrentDeferredRevenue", + "annualNonCurrentDeferredTaxesAssets", + "annualNonCurrentDeferredTaxesLiabilities", + "annualNonCurrentNoteReceivables", + "annualNonCurrentPensionAndOtherPostretirementBenefitPlans", + "annualNonCurrentPrepaidAssets", + "annualNotesReceivable", + "annualOrdinarySharesNumber", + "annualOtherCapitalStock", + "annualOtherCurrentAssets", + "annualOtherCurrentBorrowings", + "annualOtherCurrentLiabilities", + "annualOtherEquityAdjustments", + "annualOtherEquityInterest", + "annualOtherIntangibleAssets", + "annualOtherInventories", + "annualOtherInvestments", + "annualOtherNonCurrentAssets", + "annualOtherNonCurrentLiabilities", + "annualOtherPayable", + "annualOtherProperties", + "annualOtherReceivables", + "annualOtherShortTermInvestments", + "annualPayables", + "annualPayablesAndAccruedExpenses", + "annualPensionandOtherPostRetirementBenefitPlansCurrent", + "annualPreferredSecuritiesOutsideStockEquity", + "annualPreferredSharesNumber", + "annualPreferredStock", + "annualPreferredStockEquity", + "annualPrepaidAssets", + "annualProperties", + "annualRawMaterials", + "annualReceivables", + "annualReceivablesAdjustmentsAllowances", + "annualRestrictedCash", + "annualRestrictedCommonStock", + "annualRetainedEarnings", + "annualShareIssued", + "annualStockholdersEquity", + "annualTangibleBookValue", + "annualTaxesReceivable", + "annualTotalAssets", + "annualTotalCapitalization", + "annualTotalDebt", + "annualTotalEquityGrossMinorityInterest", + "annualTotalLiabilitiesNetMinorityInterest", + "annualTotalNonCurrentAssets", + "annualTotalNonCurrentLiabilitiesNetMinorityInterest", + "annualTotalPartnershipCapital", + "annualTotalTaxPayable", + "annualTradeandOtherPayablesNonCurrent", + "annualTradingSecurities", + "annualTreasurySharesNumber", + "annualTreasuryStock", + "annualUnrealizedGainLoss", + "annualWorkInProcess", + "annualWorkingCapital", + "trailingAccountsPayable", + "trailingAccountsReceivable", + "trailingAccruedInterestReceivable", + "trailingAccumulatedDepreciation", + "trailingAdditionalPaidInCapital", + "trailingAllowanceForDoubtfulAccountsReceivable", + "trailingAssetsHeldForSaleCurrent", + "trailingAvailableForSaleSecurities", + "trailingBuildingsAndImprovements", + "trailingCapitalLeaseObligations", + "trailingCapitalStock", + "trailingCashAndCashEquivalents", + "trailingCashCashEquivalentsAndShortTermInvestments", + "trailingCashEquivalents", + "trailingCashFinancial", + "trailingCommercialPaper", + "trailingCommonStock", + "trailingCommonStockEquity", + "trailingConstructionInProgress", + "trailingCurrentAccruedExpenses", + "trailingCurrentAssets", + "trailingCurrentCapitalLeaseObligation", + "trailingCurrentDebt", + "trailingCurrentDebtAndCapitalLeaseObligation", + "trailingCurrentDeferredAssets", + "trailingCurrentDeferredLiabilities", + "trailingCurrentDeferredRevenue", + "trailingCurrentDeferredTaxesAssets", + "trailingCurrentDeferredTaxesLiabilities", + "trailingCurrentLiabilities", + "trailingCurrentNotesPayable", + "trailingCurrentProvisions", + "trailingDefinedPensionBenefit", + "trailingDerivativeProductLiabilities", + "trailingDividendsPayable", + "trailingDuefromRelatedPartiesCurrent", + "trailingDuefromRelatedPartiesNonCurrent", + "trailingDuetoRelatedPartiesCurrent", + "trailingDuetoRelatedPartiesNonCurrent", + "trailingEmployeeBenefits", + "trailingFinancialAssets", + "trailingFinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", + "trailingFinishedGoods", + "trailingFixedAssetsRevaluationReserve", + "trailingForeignCurrencyTranslationAdjustments", + "trailingGainsLossesNotAffectingRetainedEarnings", + "trailingGeneralPartnershipCapital", + "trailingGoodwill", + "trailingGoodwillAndOtherIntangibleAssets", + "trailingGrossAccountsReceivable", + "trailingGrossPPE", + "trailingHedgingAssetsCurrent", + "trailingHeldToMaturitySecurities", + "trailingIncomeTaxPayable", + "trailingInterestPayable", + "trailingInventoriesAdjustmentsAllowances", + "trailingInventory", + "trailingInvestedCapital", + "trailingInvestmentProperties", + "trailingInvestmentinFinancialAssets", + "trailingInvestmentsAndAdvances", + "trailingInvestmentsInOtherVenturesUnderEquityMethod", + "trailingInvestmentsinAssociatesatCost", + "trailingInvestmentsinJointVenturesatCost", + "trailingInvestmentsinSubsidiariesatCost", + "trailingLandAndImprovements", + "trailingLeases", + "trailingLiabilitiesHeldforSaleNonCurrent", + "trailingLimitedPartnershipCapital", + "trailingLineOfCredit", + "trailingLoansReceivable", + "trailingLongTermCapitalLeaseObligation", + "trailingLongTermDebt", + "trailingLongTermDebtAndCapitalLeaseObligation", + "trailingLongTermEquityInvestment", + "trailingLongTermProvisions", + "trailingMachineryFurnitureEquipment", + "trailingMinimumPensionLiabilities", + "trailingMinorityInterest", + "trailingNetDebt", + "trailingNetPPE", + "trailingNetTangibleAssets", + "trailingNonCurrentAccountsReceivable", + "trailingNonCurrentAccruedExpenses", + "trailingNonCurrentDeferredAssets", + "trailingNonCurrentDeferredLiabilities", + "trailingNonCurrentDeferredRevenue", + "trailingNonCurrentDeferredTaxesAssets", + "trailingNonCurrentDeferredTaxesLiabilities", + "trailingNonCurrentNoteReceivables", + "trailingNonCurrentPensionAndOtherPostretirementBenefitPlans", + "trailingNonCurrentPrepaidAssets", + "trailingNotesReceivable", + "trailingOrdinarySharesNumber", + "trailingOtherCapitalStock", + "trailingOtherCurrentAssets", + "trailingOtherCurrentBorrowings", + "trailingOtherCurrentLiabilities", + "trailingOtherEquityAdjustments", + "trailingOtherEquityInterest", + "trailingOtherIntangibleAssets", + "trailingOtherInventories", + "trailingOtherInvestments", + "trailingOtherNonCurrentAssets", + "trailingOtherNonCurrentLiabilities", + "trailingOtherPayable", + "trailingOtherProperties", + "trailingOtherReceivables", + "trailingOtherShortTermInvestments", + "trailingPayables", + "trailingPayablesAndAccruedExpenses", + "trailingPensionandOtherPostRetirementBenefitPlansCurrent", + "trailingPreferredSecuritiesOutsideStockEquity", + "trailingPreferredSharesNumber", + "trailingPreferredStock", + "trailingPreferredStockEquity", + "trailingPrepaidAssets", + "trailingProperties", + "trailingRawMaterials", + "trailingReceivables", + "trailingReceivablesAdjustmentsAllowances", + "trailingRestrictedCash", + "trailingRestrictedCommonStock", + "trailingRetainedEarnings", + "trailingShareIssued", + "trailingStockholdersEquity", + "trailingTangibleBookValue", + "trailingTaxesReceivable", + "trailingTotalAssets", + "trailingTotalCapitalization", + "trailingTotalDebt", + "trailingTotalEquityGrossMinorityInterest", + "trailingTotalLiabilitiesNetMinorityInterest", + "trailingTotalNonCurrentAssets", + "trailingTotalNonCurrentLiabilitiesNetMinorityInterest", + "trailingTotalPartnershipCapital", + "trailingTotalTaxPayable", + "trailingTradeandOtherPayablesNonCurrent", + "trailingTradingSecurities", + "trailingTreasurySharesNumber", + "trailingTreasuryStock", + "trailingUnrealizedGainLoss", + "trailingWorkInProcess", + "trailingWorkingCapital", + ], + "quarterly": [ + "quarterlyAccountsPayable", + "quarterlyAccountsReceivable", + "quarterlyAccruedInterestReceivable", + "quarterlyAccumulatedDepreciation", + "quarterlyAdditionalPaidInCapital", + "quarterlyAllowanceForDoubtfulAccountsReceivable", + "quarterlyAssetsHeldForSaleCurrent", + "quarterlyAvailableForSaleSecurities", + "quarterlyBuildingsAndImprovements", + "quarterlyCapitalLeaseObligations", + "quarterlyCapitalStock", + "quarterlyCashAndCashEquivalents", + "quarterlyCashCashEquivalentsAndShortTermInvestments", + "quarterlyCashEquivalents", + "quarterlyCashFinancial", + "quarterlyCommercialPaper", + "quarterlyCommonStock", + "quarterlyCommonStockEquity", + "quarterlyConstructionInProgress", + "quarterlyCurrentAccruedExpenses", + "quarterlyCurrentAssets", + "quarterlyCurrentCapitalLeaseObligation", + "quarterlyCurrentDebt", + "quarterlyCurrentDebtAndCapitalLeaseObligation", + "quarterlyCurrentDeferredAssets", + "quarterlyCurrentDeferredLiabilities", + "quarterlyCurrentDeferredRevenue", + "quarterlyCurrentDeferredTaxesAssets", + "quarterlyCurrentDeferredTaxesLiabilities", + "quarterlyCurrentLiabilities", + "quarterlyCurrentNotesPayable", + "quarterlyCurrentProvisions", + "quarterlyDefinedPensionBenefit", + "quarterlyDerivativeProductLiabilities", + "quarterlyDividendsPayable", + "quarterlyDuefromRelatedPartiesCurrent", + "quarterlyDuefromRelatedPartiesNonCurrent", + "quarterlyDuetoRelatedPartiesCurrent", + "quarterlyDuetoRelatedPartiesNonCurrent", + "quarterlyEmployeeBenefits", + "quarterlyFinancialAssets", + "quarterlyFinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", + "quarterlyFinishedGoods", + "quarterlyFixedAssetsRevaluationReserve", + "quarterlyForeignCurrencyTranslationAdjustments", + "quarterlyGainsLossesNotAffectingRetainedEarnings", + "quarterlyGeneralPartnershipCapital", + "quarterlyGoodwill", + "quarterlyGoodwillAndOtherIntangibleAssets", + "quarterlyGrossAccountsReceivable", + "quarterlyGrossPPE", + "quarterlyHedgingAssetsCurrent", + "quarterlyHeldToMaturitySecurities", + "quarterlyIncomeTaxPayable", + "quarterlyInterestPayable", + "quarterlyInventoriesAdjustmentsAllowances", + "quarterlyInventory", + "quarterlyInvestedCapital", + "quarterlyInvestmentProperties", + "quarterlyInvestmentinFinancialAssets", + "quarterlyInvestmentsAndAdvances", + "quarterlyInvestmentsInOtherVenturesUnderEquityMethod", + "quarterlyInvestmentsinAssociatesatCost", + "quarterlyInvestmentsinJointVenturesatCost", + "quarterlyInvestmentsinSubsidiariesatCost", + "quarterlyLandAndImprovements", + "quarterlyLeases", + "quarterlyLiabilitiesHeldforSaleNonCurrent", + "quarterlyLimitedPartnershipCapital", + "quarterlyLineOfCredit", + "quarterlyLoansReceivable", + "quarterlyLongTermCapitalLeaseObligation", + "quarterlyLongTermDebt", + "quarterlyLongTermDebtAndCapitalLeaseObligation", + "quarterlyLongTermEquityInvestment", + "quarterlyLongTermProvisions", + "quarterlyMachineryFurnitureEquipment", + "quarterlyMinimumPensionLiabilities", + "quarterlyMinorityInterest", + "quarterlyNetDebt", + "quarterlyNetPPE", + "quarterlyNetTangibleAssets", + "quarterlyNonCurrentAccountsReceivable", + "quarterlyNonCurrentAccruedExpenses", + "quarterlyNonCurrentDeferredAssets", + "quarterlyNonCurrentDeferredLiabilities", + "quarterlyNonCurrentDeferredRevenue", + "quarterlyNonCurrentDeferredTaxesAssets", + "quarterlyNonCurrentDeferredTaxesLiabilities", + "quarterlyNonCurrentNoteReceivables", + "quarterlyNonCurrentPensionAndOtherPostretirementBenefitPlans", + "quarterlyNonCurrentPrepaidAssets", + "quarterlyNotesReceivable", + "quarterlyOrdinarySharesNumber", + "quarterlyOtherCapitalStock", + "quarterlyOtherCurrentAssets", + "quarterlyOtherCurrentBorrowings", + "quarterlyOtherCurrentLiabilities", + "quarterlyOtherEquityAdjustments", + "quarterlyOtherEquityInterest", + "quarterlyOtherIntangibleAssets", + "quarterlyOtherInventories", + "quarterlyOtherInvestments", + "quarterlyOtherNonCurrentAssets", + "quarterlyOtherNonCurrentLiabilities", + "quarterlyOtherPayable", + "quarterlyOtherProperties", + "quarterlyOtherReceivables", + "quarterlyOtherShortTermInvestments", + "quarterlyPayables", + "quarterlyPayablesAndAccruedExpenses", + "quarterlyPensionandOtherPostRetirementBenefitPlansCurrent", + "quarterlyPreferredSecuritiesOutsideStockEquity", + "quarterlyPreferredSharesNumber", + "quarterlyPreferredStock", + "quarterlyPreferredStockEquity", + "quarterlyPrepaidAssets", + "quarterlyProperties", + "quarterlyRawMaterials", + "quarterlyReceivables", + "quarterlyReceivablesAdjustmentsAllowances", + "quarterlyRestrictedCash", + "quarterlyRestrictedCommonStock", + "quarterlyRetainedEarnings", + "quarterlyShareIssued", + "quarterlyStockholdersEquity", + "quarterlyTangibleBookValue", + "quarterlyTaxesReceivable", + "quarterlyTotalAssets", + "quarterlyTotalCapitalization", + "quarterlyTotalDebt", + "quarterlyTotalEquityGrossMinorityInterest", + "quarterlyTotalLiabilitiesNetMinorityInterest", + "quarterlyTotalNonCurrentAssets", + "quarterlyTotalNonCurrentLiabilitiesNetMinorityInterest", + "quarterlyTotalPartnershipCapital", + "quarterlyTotalTaxPayable", + "quarterlyTradeandOtherPayablesNonCurrent", + "quarterlyTradingSecurities", + "quarterlyTreasurySharesNumber", + "quarterlyTreasuryStock", + "quarterlyUnrealizedGainLoss", + "quarterlyWorkInProcess", + "quarterlyWorkingCapital", + "trailingAccountsPayable", + "trailingAccountsReceivable", + "trailingAccruedInterestReceivable", + "trailingAccumulatedDepreciation", + "trailingAdditionalPaidInCapital", + "trailingAllowanceForDoubtfulAccountsReceivable", + "trailingAssetsHeldForSaleCurrent", + "trailingAvailableForSaleSecurities", + "trailingBuildingsAndImprovements", + "trailingCapitalLeaseObligations", + "trailingCapitalStock", + "trailingCashAndCashEquivalents", + "trailingCashCashEquivalentsAndShortTermInvestments", + "trailingCashEquivalents", + "trailingCashFinancial", + "trailingCommercialPaper", + "trailingCommonStock", + "trailingCommonStockEquity", + "trailingConstructionInProgress", + "trailingCurrentAccruedExpenses", + "trailingCurrentAssets", + "trailingCurrentCapitalLeaseObligation", + "trailingCurrentDebt", + "trailingCurrentDebtAndCapitalLeaseObligation", + "trailingCurrentDeferredAssets", + "trailingCurrentDeferredLiabilities", + "trailingCurrentDeferredRevenue", + "trailingCurrentDeferredTaxesAssets", + "trailingCurrentDeferredTaxesLiabilities", + "trailingCurrentLiabilities", + "trailingCurrentNotesPayable", + "trailingCurrentProvisions", + "trailingDefinedPensionBenefit", + "trailingDerivativeProductLiabilities", + "trailingDividendsPayable", + "trailingDuefromRelatedPartiesCurrent", + "trailingDuefromRelatedPartiesNonCurrent", + "trailingDuetoRelatedPartiesCurrent", + "trailingDuetoRelatedPartiesNonCurrent", + "trailingEmployeeBenefits", + "trailingFinancialAssets", + "trailingFinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", + "trailingFinishedGoods", + "trailingFixedAssetsRevaluationReserve", + "trailingForeignCurrencyTranslationAdjustments", + "trailingGainsLossesNotAffectingRetainedEarnings", + "trailingGeneralPartnershipCapital", + "trailingGoodwill", + "trailingGoodwillAndOtherIntangibleAssets", + "trailingGrossAccountsReceivable", + "trailingGrossPPE", + "trailingHedgingAssetsCurrent", + "trailingHeldToMaturitySecurities", + "trailingIncomeTaxPayable", + "trailingInterestPayable", + "trailingInventoriesAdjustmentsAllowances", + "trailingInventory", + "trailingInvestedCapital", + "trailingInvestmentProperties", + "trailingInvestmentinFinancialAssets", + "trailingInvestmentsAndAdvances", + "trailingInvestmentsInOtherVenturesUnderEquityMethod", + "trailingInvestmentsinAssociatesatCost", + "trailingInvestmentsinJointVenturesatCost", + "trailingInvestmentsinSubsidiariesatCost", + "trailingLandAndImprovements", + "trailingLeases", + "trailingLiabilitiesHeldforSaleNonCurrent", + "trailingLimitedPartnershipCapital", + "trailingLineOfCredit", + "trailingLoansReceivable", + "trailingLongTermCapitalLeaseObligation", + "trailingLongTermDebt", + "trailingLongTermDebtAndCapitalLeaseObligation", + "trailingLongTermEquityInvestment", + "trailingLongTermProvisions", + "trailingMachineryFurnitureEquipment", + "trailingMinimumPensionLiabilities", + "trailingMinorityInterest", + "trailingNetDebt", + "trailingNetPPE", + "trailingNetTangibleAssets", + "trailingNonCurrentAccountsReceivable", + "trailingNonCurrentAccruedExpenses", + "trailingNonCurrentDeferredAssets", + "trailingNonCurrentDeferredLiabilities", + "trailingNonCurrentDeferredRevenue", + "trailingNonCurrentDeferredTaxesAssets", + "trailingNonCurrentDeferredTaxesLiabilities", + "trailingNonCurrentNoteReceivables", + "trailingNonCurrentPensionAndOtherPostretirementBenefitPlans", + "trailingNonCurrentPrepaidAssets", + "trailingNotesReceivable", + "trailingOrdinarySharesNumber", + "trailingOtherCapitalStock", + "trailingOtherCurrentAssets", + "trailingOtherCurrentBorrowings", + "trailingOtherCurrentLiabilities", + "trailingOtherEquityAdjustments", + "trailingOtherEquityInterest", + "trailingOtherIntangibleAssets", + "trailingOtherInventories", + "trailingOtherInvestments", + "trailingOtherNonCurrentAssets", + "trailingOtherNonCurrentLiabilities", + "trailingOtherPayable", + "trailingOtherProperties", + "trailingOtherReceivables", + "trailingOtherShortTermInvestments", + "trailingPayables", + "trailingPayablesAndAccruedExpenses", + "trailingPensionandOtherPostRetirementBenefitPlansCurrent", + "trailingPreferredSecuritiesOutsideStockEquity", + "trailingPreferredSharesNumber", + "trailingPreferredStock", + "trailingPreferredStockEquity", + "trailingPrepaidAssets", + "trailingProperties", + "trailingRawMaterials", + "trailingReceivables", + "trailingReceivablesAdjustmentsAllowances", + "trailingRestrictedCash", + "trailingRestrictedCommonStock", + "trailingRetainedEarnings", + "trailingShareIssued", + "trailingStockholdersEquity", + "trailingTangibleBookValue", + "trailingTaxesReceivable", + "trailingTotalAssets", + "trailingTotalCapitalization", + "trailingTotalDebt", + "trailingTotalEquityGrossMinorityInterest", + "trailingTotalLiabilitiesNetMinorityInterest", + "trailingTotalNonCurrentAssets", + "trailingTotalNonCurrentLiabilitiesNetMinorityInterest", + "trailingTotalPartnershipCapital", + "trailingTotalTaxPayable", + "trailingTradeandOtherPayablesNonCurrent", + "trailingTradingSecurities", + "trailingTreasurySharesNumber", + "trailingTreasuryStock", + "trailingUnrealizedGainLoss", + "trailingWorkInProcess", + "trailingWorkingCapital", + ], + "monthly": [ + "monthlyAccountsPayable", + "monthlyAccountsReceivable", + "monthlyAccruedInterestReceivable", + "monthlyAccumulatedDepreciation", + "monthlyAdditionalPaidInCapital", + "monthlyAllowanceForDoubtfulAccountsReceivable", + "monthlyAssetsHeldForSaleCurrent", + "monthlyAvailableForSaleSecurities", + "monthlyBuildingsAndImprovements", + "monthlyCapitalLeaseObligations", + "monthlyCapitalStock", + "monthlyCashAndCashEquivalents", + "monthlyCashCashEquivalentsAndShortTermInvestments", + "monthlyCashEquivalents", + "monthlyCashFinancial", + "monthlyCommercialPaper", + "monthlyCommonStock", + "monthlyCommonStockEquity", + "monthlyConstructionInProgress", + "monthlyCurrentAccruedExpenses", + "monthlyCurrentAssets", + "monthlyCurrentCapitalLeaseObligation", + "monthlyCurrentDebt", + "monthlyCurrentDebtAndCapitalLeaseObligation", + "monthlyCurrentDeferredAssets", + "monthlyCurrentDeferredLiabilities", + "monthlyCurrentDeferredRevenue", + "monthlyCurrentDeferredTaxesAssets", + "monthlyCurrentDeferredTaxesLiabilities", + "monthlyCurrentLiabilities", + "monthlyCurrentNotesPayable", + "monthlyCurrentProvisions", + "monthlyDefinedPensionBenefit", + "monthlyDerivativeProductLiabilities", + "monthlyDividendsPayable", + "monthlyDuefromRelatedPartiesCurrent", + "monthlyDuefromRelatedPartiesNonCurrent", + "monthlyDuetoRelatedPartiesCurrent", + "monthlyDuetoRelatedPartiesNonCurrent", + "monthlyEmployeeBenefits", + "monthlyFinancialAssets", + "monthlyFinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", + "monthlyFinishedGoods", + "monthlyFixedAssetsRevaluationReserve", + "monthlyForeignCurrencyTranslationAdjustments", + "monthlyGainsLossesNotAffectingRetainedEarnings", + "monthlyGeneralPartnershipCapital", + "monthlyGoodwill", + "monthlyGoodwillAndOtherIntangibleAssets", + "monthlyGrossAccountsReceivable", + "monthlyGrossPPE", + "monthlyHedgingAssetsCurrent", + "monthlyHeldToMaturitySecurities", + "monthlyIncomeTaxPayable", + "monthlyInterestPayable", + "monthlyInventoriesAdjustmentsAllowances", + "monthlyInventory", + "monthlyInvestedCapital", + "monthlyInvestmentProperties", + "monthlyInvestmentinFinancialAssets", + "monthlyInvestmentsAndAdvances", + "monthlyInvestmentsInOtherVenturesUnderEquityMethod", + "monthlyInvestmentsinAssociatesatCost", + "monthlyInvestmentsinJointVenturesatCost", + "monthlyInvestmentsinSubsidiariesatCost", + "monthlyLandAndImprovements", + "monthlyLeases", + "monthlyLiabilitiesHeldforSaleNonCurrent", + "monthlyLimitedPartnershipCapital", + "monthlyLineOfCredit", + "monthlyLoansReceivable", + "monthlyLongTermCapitalLeaseObligation", + "monthlyLongTermDebt", + "monthlyLongTermDebtAndCapitalLeaseObligation", + "monthlyLongTermEquityInvestment", + "monthlyLongTermProvisions", + "monthlyMachineryFurnitureEquipment", + "monthlyMinimumPensionLiabilities", + "monthlyMinorityInterest", + "monthlyNetDebt", + "monthlyNetPPE", + "monthlyNetTangibleAssets", + "monthlyNonCurrentAccountsReceivable", + "monthlyNonCurrentAccruedExpenses", + "monthlyNonCurrentDeferredAssets", + "monthlyNonCurrentDeferredLiabilities", + "monthlyNonCurrentDeferredRevenue", + "monthlyNonCurrentDeferredTaxesAssets", + "monthlyNonCurrentDeferredTaxesLiabilities", + "monthlyNonCurrentNoteReceivables", + "monthlyNonCurrentPensionAndOtherPostretirementBenefitPlans", + "monthlyNonCurrentPrepaidAssets", + "monthlyNotesReceivable", + "monthlyOrdinarySharesNumber", + "monthlyOtherCapitalStock", + "monthlyOtherCurrentAssets", + "monthlyOtherCurrentBorrowings", + "monthlyOtherCurrentLiabilities", + "monthlyOtherEquityAdjustments", + "monthlyOtherEquityInterest", + "monthlyOtherIntangibleAssets", + "monthlyOtherInventories", + "monthlyOtherInvestments", + "monthlyOtherNonCurrentAssets", + "monthlyOtherNonCurrentLiabilities", + "monthlyOtherPayable", + "monthlyOtherProperties", + "monthlyOtherReceivables", + "monthlyOtherShortTermInvestments", + "monthlyPayables", + "monthlyPayablesAndAccruedExpenses", + "monthlyPensionandOtherPostRetirementBenefitPlansCurrent", + "monthlyPreferredSecuritiesOutsideStockEquity", + "monthlyPreferredSharesNumber", + "monthlyPreferredStock", + "monthlyPreferredStockEquity", + "monthlyPrepaidAssets", + "monthlyProperties", + "monthlyRawMaterials", + "monthlyReceivables", + "monthlyReceivablesAdjustmentsAllowances", + "monthlyRestrictedCash", + "monthlyRestrictedCommonStock", + "monthlyRetainedEarnings", + "monthlyShareIssued", + "monthlyStockholdersEquity", + "monthlyTangibleBookValue", + "monthlyTaxesReceivable", + "monthlyTotalAssets", + "monthlyTotalCapitalization", + "monthlyTotalDebt", + "monthlyTotalEquityGrossMinorityInterest", + "monthlyTotalLiabilitiesNetMinorityInterest", + "monthlyTotalNonCurrentAssets", + "monthlyTotalNonCurrentLiabilitiesNetMinorityInterest", + "monthlyTotalPartnershipCapital", + "monthlyTotalTaxPayable", + "monthlyTradeandOtherPayablesNonCurrent", + "monthlyTradingSecurities", + "monthlyTreasurySharesNumber", + "monthlyTreasuryStock", + "monthlyUnrealizedGainLoss", + "monthlyWorkInProcess", + "monthlyWorkingCapital", + "trailingAccountsPayable", + "trailingAccountsReceivable", + "trailingAccruedInterestReceivable", + "trailingAccumulatedDepreciation", + "trailingAdditionalPaidInCapital", + "trailingAllowanceForDoubtfulAccountsReceivable", + "trailingAssetsHeldForSaleCurrent", + "trailingAvailableForSaleSecurities", + "trailingBuildingsAndImprovements", + "trailingCapitalLeaseObligations", + "trailingCapitalStock", + "trailingCashAndCashEquivalents", + "trailingCashCashEquivalentsAndShortTermInvestments", + "trailingCashEquivalents", + "trailingCashFinancial", + "trailingCommercialPaper", + "trailingCommonStock", + "trailingCommonStockEquity", + "trailingConstructionInProgress", + "trailingCurrentAccruedExpenses", + "trailingCurrentAssets", + "trailingCurrentCapitalLeaseObligation", + "trailingCurrentDebt", + "trailingCurrentDebtAndCapitalLeaseObligation", + "trailingCurrentDeferredAssets", + "trailingCurrentDeferredLiabilities", + "trailingCurrentDeferredRevenue", + "trailingCurrentDeferredTaxesAssets", + "trailingCurrentDeferredTaxesLiabilities", + "trailingCurrentLiabilities", + "trailingCurrentNotesPayable", + "trailingCurrentProvisions", + "trailingDefinedPensionBenefit", + "trailingDerivativeProductLiabilities", + "trailingDividendsPayable", + "trailingDuefromRelatedPartiesCurrent", + "trailingDuefromRelatedPartiesNonCurrent", + "trailingDuetoRelatedPartiesCurrent", + "trailingDuetoRelatedPartiesNonCurrent", + "trailingEmployeeBenefits", + "trailingFinancialAssets", + "trailingFinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", + "trailingFinishedGoods", + "trailingFixedAssetsRevaluationReserve", + "trailingForeignCurrencyTranslationAdjustments", + "trailingGainsLossesNotAffectingRetainedEarnings", + "trailingGeneralPartnershipCapital", + "trailingGoodwill", + "trailingGoodwillAndOtherIntangibleAssets", + "trailingGrossAccountsReceivable", + "trailingGrossPPE", + "trailingHedgingAssetsCurrent", + "trailingHeldToMaturitySecurities", + "trailingIncomeTaxPayable", + "trailingInterestPayable", + "trailingInventoriesAdjustmentsAllowances", + "trailingInventory", + "trailingInvestedCapital", + "trailingInvestmentProperties", + "trailingInvestmentinFinancialAssets", + "trailingInvestmentsAndAdvances", + "trailingInvestmentsInOtherVenturesUnderEquityMethod", + "trailingInvestmentsinAssociatesatCost", + "trailingInvestmentsinJointVenturesatCost", + "trailingInvestmentsinSubsidiariesatCost", + "trailingLandAndImprovements", + "trailingLeases", + "trailingLiabilitiesHeldforSaleNonCurrent", + "trailingLimitedPartnershipCapital", + "trailingLineOfCredit", + "trailingLoansReceivable", + "trailingLongTermCapitalLeaseObligation", + "trailingLongTermDebt", + "trailingLongTermDebtAndCapitalLeaseObligation", + "trailingLongTermEquityInvestment", + "trailingLongTermProvisions", + "trailingMachineryFurnitureEquipment", + "trailingMinimumPensionLiabilities", + "trailingMinorityInterest", + "trailingNetDebt", + "trailingNetPPE", + "trailingNetTangibleAssets", + "trailingNonCurrentAccountsReceivable", + "trailingNonCurrentAccruedExpenses", + "trailingNonCurrentDeferredAssets", + "trailingNonCurrentDeferredLiabilities", + "trailingNonCurrentDeferredRevenue", + "trailingNonCurrentDeferredTaxesAssets", + "trailingNonCurrentDeferredTaxesLiabilities", + "trailingNonCurrentNoteReceivables", + "trailingNonCurrentPensionAndOtherPostretirementBenefitPlans", + "trailingNonCurrentPrepaidAssets", + "trailingNotesReceivable", + "trailingOrdinarySharesNumber", + "trailingOtherCapitalStock", + "trailingOtherCurrentAssets", + "trailingOtherCurrentBorrowings", + "trailingOtherCurrentLiabilities", + "trailingOtherEquityAdjustments", + "trailingOtherEquityInterest", + "trailingOtherIntangibleAssets", + "trailingOtherInventories", + "trailingOtherInvestments", + "trailingOtherNonCurrentAssets", + "trailingOtherNonCurrentLiabilities", + "trailingOtherPayable", + "trailingOtherProperties", + "trailingOtherReceivables", + "trailingOtherShortTermInvestments", + "trailingPayables", + "trailingPayablesAndAccruedExpenses", + "trailingPensionandOtherPostRetirementBenefitPlansCurrent", + "trailingPreferredSecuritiesOutsideStockEquity", + "trailingPreferredSharesNumber", + "trailingPreferredStock", + "trailingPreferredStockEquity", + "trailingPrepaidAssets", + "trailingProperties", + "trailingRawMaterials", + "trailingReceivables", + "trailingReceivablesAdjustmentsAllowances", + "trailingRestrictedCash", + "trailingRestrictedCommonStock", + "trailingRetainedEarnings", + "trailingShareIssued", + "trailingStockholdersEquity", + "trailingTangibleBookValue", + "trailingTaxesReceivable", + "trailingTotalAssets", + "trailingTotalCapitalization", + "trailingTotalDebt", + "trailingTotalEquityGrossMinorityInterest", + "trailingTotalLiabilitiesNetMinorityInterest", + "trailingTotalNonCurrentAssets", + "trailingTotalNonCurrentLiabilitiesNetMinorityInterest", + "trailingTotalPartnershipCapital", + "trailingTotalTaxPayable", + "trailingTradeandOtherPayablesNonCurrent", + "trailingTradingSecurities", + "trailingTreasurySharesNumber", + "trailingTreasuryStock", + "trailingUnrealizedGainLoss", + "trailingWorkInProcess", + "trailingWorkingCapital", + ] + }, + "cash_flow": { + "annual": [ + "annualAdjustedGeographySegmentData", + "annualAmortizationCashFlow", + "annualAmortizationOfIntangibles", + "annualAmortizationOfSecurities", + "annualAssetImpairmentCharge", + "annualBeginningCashPosition", + "annualCapitalExpenditure", + "annualCapitalExpenditureReported", + "annualCashDividendsPaid", + "annualCashFlowFromContinuingFinancingActivities", + "annualCashFlowFromContinuingInvestingActivities", + "annualCashFlowFromContinuingOperatingActivities", + "annualCashFlowFromDiscontinuedOperation", + "annualCashFlowsfromusedinOperatingActivitiesDirect", + "annualCashFromDiscontinuedFinancingActivities", + "annualCashFromDiscontinuedInvestingActivities", + "annualCashFromDiscontinuedOperatingActivities", + "annualChangeInAccountPayable", + "annualChangeInAccruedExpense", + "annualChangeInCashSupplementalAsReported", + "annualChangeInDividendPayable", + "annualChangeInIncomeTaxPayable", + "annualChangeInInterestPayable", + "annualChangeInInventory", + "annualChangeInOtherCurrentAssets", + "annualChangeInOtherCurrentLiabilities", + "annualChangeInOtherWorkingCapital", + "annualChangeInPayable", + "annualChangeInPayablesAndAccruedExpense", + "annualChangeInPrepaidAssets", + "annualChangeInReceivables", + "annualChangeInTaxPayable", + "annualChangeInWorkingCapital", + "annualChangesInAccountReceivables", + "annualChangesInCash", + "annualClassesofCashPayments", + "annualClassesofCashReceiptsfromOperatingActivities", + "annualCommonStockDividendPaid", + "annualCommonStockIssuance", + "annualCommonStockPayments", + "annualDeferredIncomeTax", + "annualDeferredTax", + "annualDepletion", + "annualDepreciation", + "annualDepreciationAmortizationDepletion", + "annualDepreciationAndAmortization", + "annualDividendPaidCFO", + "annualDividendReceivedCFO", + "annualDividendsPaidDirect", + "annualDividendsReceivedCFI", + "annualDividendsReceivedDirect", + "annualDomesticSales", + "annualEarningsLossesFromEquityInvestments", + "annualEffectOfExchangeRateChanges", + "annualEndCashPosition", + "annualExcessTaxBenefitFromStockBasedCompensation", + "annualFinancingCashFlow", + "annualForeignSales", + "annualFreeCashFlow", + "annualGainLossOnInvestmentSecurities", + "annualGainLossOnSaleOfBusiness", + "annualGainLossOnSaleOfPPE", + "annualIncomeTaxPaidSupplementalData", + "annualInterestPaidCFF", + "annualInterestPaidCFO", + "annualInterestPaidDirect", + "annualInterestPaidSupplementalData", + "annualInterestReceivedCFI", + "annualInterestReceivedCFO", + "annualInterestReceivedDirect", + "annualInvestingCashFlow", + "annualIssuanceOfCapitalStock", + "annualIssuanceOfDebt", + "annualLongTermDebtIssuance", + "annualLongTermDebtPayments", + "annualNetBusinessPurchaseAndSale", + "annualNetCommonStockIssuance", + "annualNetForeignCurrencyExchangeGainLoss", + "annualNetIncome", + "annualNetIncomeFromContinuingOperations", + "annualNetIntangiblesPurchaseAndSale", + "annualNetInvestmentPropertiesPurchaseAndSale", + "annualNetInvestmentPurchaseAndSale", + "annualNetIssuancePaymentsOfDebt", + "annualNetLongTermDebtIssuance", + "annualNetOtherFinancingCharges", + "annualNetOtherInvestingChanges", + "annualNetPPEPurchaseAndSale", + "annualNetPreferredStockIssuance", + "annualNetShortTermDebtIssuance", + "annualOperatingCashFlow", + "annualOperatingGainsLosses", + "annualOtherCashAdjustmentInsideChangeinCash", + "annualOtherCashAdjustmentOutsideChangeinCash", + "annualOtherCashPaymentsfromOperatingActivities", + "annualOtherCashReceiptsfromOperatingActivities", + "annualOtherNonCashItems", + "annualPaymentsonBehalfofEmployees", + "annualPaymentstoSuppliersforGoodsandServices", + "annualPensionAndEmployeeBenefitExpense", + "annualPreferredStockDividendPaid", + "annualPreferredStockIssuance", + "annualPreferredStockPayments", + "annualProceedsFromStockOptionExercised", + "annualProvisionandWriteOffofAssets", + "annualPurchaseOfBusiness", + "annualPurchaseOfIntangibles", + "annualPurchaseOfInvestment", + "annualPurchaseOfInvestmentProperties", + "annualPurchaseOfPPE", + "annualReceiptsfromCustomers", + "annualReceiptsfromGovernmentGrants", + "annualRepaymentOfDebt", + "annualRepurchaseOfCapitalStock", + "annualSaleOfBusiness", + "annualSaleOfIntangibles", + "annualSaleOfInvestment", + "annualSaleOfInvestmentProperties", + "annualSaleOfPPE", + "annualShortTermDebtIssuance", + "annualShortTermDebtPayments", + "annualStockBasedCompensation", + "annualTaxesRefundPaid", + "annualTaxesRefundPaidDirect", + "annualUnrealizedGainLossOnInvestmentSecurities", + "trailingAdjustedGeographySegmentData", + "trailingAmortizationCashFlow", + "trailingAmortizationOfIntangibles", + "trailingAmortizationOfSecurities", + "trailingAssetImpairmentCharge", + "trailingBeginningCashPosition", + "trailingCapitalExpenditure", + "trailingCapitalExpenditureReported", + "trailingCashDividendsPaid", + "trailingCashFlowFromContinuingFinancingActivities", + "trailingCashFlowFromContinuingInvestingActivities", + "trailingCashFlowFromContinuingOperatingActivities", + "trailingCashFlowFromDiscontinuedOperation", + "trailingCashFlowsfromusedinOperatingActivitiesDirect", + "trailingCashFromDiscontinuedFinancingActivities", + "trailingCashFromDiscontinuedInvestingActivities", + "trailingCashFromDiscontinuedOperatingActivities", + "trailingChangeInAccountPayable", + "trailingChangeInAccruedExpense", + "trailingChangeInCashSupplementalAsReported", + "trailingChangeInDividendPayable", + "trailingChangeInIncomeTaxPayable", + "trailingChangeInInterestPayable", + "trailingChangeInInventory", + "trailingChangeInOtherCurrentAssets", + "trailingChangeInOtherCurrentLiabilities", + "trailingChangeInOtherWorkingCapital", + "trailingChangeInPayable", + "trailingChangeInPayablesAndAccruedExpense", + "trailingChangeInPrepaidAssets", + "trailingChangeInReceivables", + "trailingChangeInTaxPayable", + "trailingChangeInWorkingCapital", + "trailingChangesInAccountReceivables", + "trailingChangesInCash", + "trailingClassesofCashPayments", + "trailingClassesofCashReceiptsfromOperatingActivities", + "trailingCommonStockDividendPaid", + "trailingCommonStockIssuance", + "trailingCommonStockPayments", + "trailingDeferredIncomeTax", + "trailingDeferredTax", + "trailingDepletion", + "trailingDepreciation", + "trailingDepreciationAmortizationDepletion", + "trailingDepreciationAndAmortization", + "trailingDividendPaidCFO", + "trailingDividendReceivedCFO", + "trailingDividendsPaidDirect", + "trailingDividendsReceivedCFI", + "trailingDividendsReceivedDirect", + "trailingDomesticSales", + "trailingEarningsLossesFromEquityInvestments", + "trailingEffectOfExchangeRateChanges", + "trailingEndCashPosition", + "trailingExcessTaxBenefitFromStockBasedCompensation", + "trailingFinancingCashFlow", + "trailingForeignSales", + "trailingFreeCashFlow", + "trailingGainLossOnInvestmentSecurities", + "trailingGainLossOnSaleOfBusiness", + "trailingGainLossOnSaleOfPPE", + "trailingIncomeTaxPaidSupplementalData", + "trailingInterestPaidCFF", + "trailingInterestPaidCFO", + "trailingInterestPaidDirect", + "trailingInterestPaidSupplementalData", + "trailingInterestReceivedCFI", + "trailingInterestReceivedCFO", + "trailingInterestReceivedDirect", + "trailingInvestingCashFlow", + "trailingIssuanceOfCapitalStock", + "trailingIssuanceOfDebt", + "trailingLongTermDebtIssuance", + "trailingLongTermDebtPayments", + "trailingNetBusinessPurchaseAndSale", + "trailingNetCommonStockIssuance", + "trailingNetForeignCurrencyExchangeGainLoss", + "trailingNetIncome", + "trailingNetIncomeFromContinuingOperations", + "trailingNetIntangiblesPurchaseAndSale", + "trailingNetInvestmentPropertiesPurchaseAndSale", + "trailingNetInvestmentPurchaseAndSale", + "trailingNetIssuancePaymentsOfDebt", + "trailingNetLongTermDebtIssuance", + "trailingNetOtherFinancingCharges", + "trailingNetOtherInvestingChanges", + "trailingNetPPEPurchaseAndSale", + "trailingNetPreferredStockIssuance", + "trailingNetShortTermDebtIssuance", + "trailingOperatingCashFlow", + "trailingOperatingGainsLosses", + "trailingOtherCashAdjustmentInsideChangeinCash", + "trailingOtherCashAdjustmentOutsideChangeinCash", + "trailingOtherCashPaymentsfromOperatingActivities", + "trailingOtherCashReceiptsfromOperatingActivities", + "trailingOtherNonCashItems", + "trailingPaymentsonBehalfofEmployees", + "trailingPaymentstoSuppliersforGoodsandServices", + "trailingPensionAndEmployeeBenefitExpense", + "trailingPreferredStockDividendPaid", + "trailingPreferredStockIssuance", + "trailingPreferredStockPayments", + "trailingProceedsFromStockOptionExercised", + "trailingProvisionandWriteOffofAssets", + "trailingPurchaseOfBusiness", + "trailingPurchaseOfIntangibles", + "trailingPurchaseOfInvestment", + "trailingPurchaseOfInvestmentProperties", + "trailingPurchaseOfPPE", + "trailingReceiptsfromCustomers", + "trailingReceiptsfromGovernmentGrants", + "trailingRepaymentOfDebt", + "trailingRepurchaseOfCapitalStock", + "trailingSaleOfBusiness", + "trailingSaleOfIntangibles", + "trailingSaleOfInvestment", + "trailingSaleOfInvestmentProperties", + "trailingSaleOfPPE", + "trailingShortTermDebtIssuance", + "trailingShortTermDebtPayments", + "trailingStockBasedCompensation", + "trailingTaxesRefundPaid", + "trailingTaxesRefundPaidDirect", + "trailingUnrealizedGainLossOnInvestmentSecurities", + ], + "quarterly": [ + "quarterlyAdjustedGeographySegmentData", + "quarterlyAmortizationCashFlow", + "quarterlyAmortizationOfIntangibles", + "quarterlyAmortizationOfSecurities", + "quarterlyAssetImpairmentCharge", + "quarterlyBeginningCashPosition", + "quarterlyCapitalExpenditure", + "quarterlyCapitalExpenditureReported", + "quarterlyCashDividendsPaid", + "quarterlyCashFlowFromContinuingFinancingActivities", + "quarterlyCashFlowFromContinuingInvestingActivities", + "quarterlyCashFlowFromContinuingOperatingActivities", + "quarterlyCashFlowFromDiscontinuedOperation", + "quarterlyCashFlowsfromusedinOperatingActivitiesDirect", + "quarterlyCashFromDiscontinuedFinancingActivities", + "quarterlyCashFromDiscontinuedInvestingActivities", + "quarterlyCashFromDiscontinuedOperatingActivities", + "quarterlyChangeInAccountPayable", + "quarterlyChangeInAccruedExpense", + "quarterlyChangeInCashSupplementalAsReported", + "quarterlyChangeInDividendPayable", + "quarterlyChangeInIncomeTaxPayable", + "quarterlyChangeInInterestPayable", + "quarterlyChangeInInventory", + "quarterlyChangeInOtherCurrentAssets", + "quarterlyChangeInOtherCurrentLiabilities", + "quarterlyChangeInOtherWorkingCapital", + "quarterlyChangeInPayable", + "quarterlyChangeInPayablesAndAccruedExpense", + "quarterlyChangeInPrepaidAssets", + "quarterlyChangeInReceivables", + "quarterlyChangeInTaxPayable", + "quarterlyChangeInWorkingCapital", + "quarterlyChangesInAccountReceivables", + "quarterlyChangesInCash", + "quarterlyClassesofCashPayments", + "quarterlyClassesofCashReceiptsfromOperatingActivities", + "quarterlyCommonStockDividendPaid", + "quarterlyCommonStockIssuance", + "quarterlyCommonStockPayments", + "quarterlyDeferredIncomeTax", + "quarterlyDeferredTax", + "quarterlyDepletion", + "quarterlyDepreciation", + "quarterlyDepreciationAmortizationDepletion", + "quarterlyDepreciationAndAmortization", + "quarterlyDividendPaidCFO", + "quarterlyDividendReceivedCFO", + "quarterlyDividendsPaidDirect", + "quarterlyDividendsReceivedCFI", + "quarterlyDividendsReceivedDirect", + "quarterlyDomesticSales", + "quarterlyEarningsLossesFromEquityInvestments", + "quarterlyEffectOfExchangeRateChanges", + "quarterlyEndCashPosition", + "quarterlyExcessTaxBenefitFromStockBasedCompensation", + "quarterlyFinancingCashFlow", + "quarterlyForeignSales", + "quarterlyFreeCashFlow", + "quarterlyGainLossOnInvestmentSecurities", + "quarterlyGainLossOnSaleOfBusiness", + "quarterlyGainLossOnSaleOfPPE", + "quarterlyIncomeTaxPaidSupplementalData", + "quarterlyInterestPaidCFF", + "quarterlyInterestPaidCFO", + "quarterlyInterestPaidDirect", + "quarterlyInterestPaidSupplementalData", + "quarterlyInterestReceivedCFI", + "quarterlyInterestReceivedCFO", + "quarterlyInterestReceivedDirect", + "quarterlyInvestingCashFlow", + "quarterlyIssuanceOfCapitalStock", + "quarterlyIssuanceOfDebt", + "quarterlyLongTermDebtIssuance", + "quarterlyLongTermDebtPayments", + "quarterlyNetBusinessPurchaseAndSale", + "quarterlyNetCommonStockIssuance", + "quarterlyNetForeignCurrencyExchangeGainLoss", + "quarterlyNetIncome", + "quarterlyNetIncomeFromContinuingOperations", + "quarterlyNetIntangiblesPurchaseAndSale", + "quarterlyNetInvestmentPropertiesPurchaseAndSale", + "quarterlyNetInvestmentPurchaseAndSale", + "quarterlyNetIssuancePaymentsOfDebt", + "quarterlyNetLongTermDebtIssuance", + "quarterlyNetOtherFinancingCharges", + "quarterlyNetOtherInvestingChanges", + "quarterlyNetPPEPurchaseAndSale", + "quarterlyNetPreferredStockIssuance", + "quarterlyNetShortTermDebtIssuance", + "quarterlyOperatingCashFlow", + "quarterlyOperatingGainsLosses", + "quarterlyOtherCashAdjustmentInsideChangeinCash", + "quarterlyOtherCashAdjustmentOutsideChangeinCash", + "quarterlyOtherCashPaymentsfromOperatingActivities", + "quarterlyOtherCashReceiptsfromOperatingActivities", + "quarterlyOtherNonCashItems", + "quarterlyPaymentsonBehalfofEmployees", + "quarterlyPaymentstoSuppliersforGoodsandServices", + "quarterlyPensionAndEmployeeBenefitExpense", + "quarterlyPreferredStockDividendPaid", + "quarterlyPreferredStockIssuance", + "quarterlyPreferredStockPayments", + "quarterlyProceedsFromStockOptionExercised", + "quarterlyProvisionandWriteOffofAssets", + "quarterlyPurchaseOfBusiness", + "quarterlyPurchaseOfIntangibles", + "quarterlyPurchaseOfInvestment", + "quarterlyPurchaseOfInvestmentProperties", + "quarterlyPurchaseOfPPE", + "quarterlyReceiptsfromCustomers", + "quarterlyReceiptsfromGovernmentGrants", + "quarterlyRepaymentOfDebt", + "quarterlyRepurchaseOfCapitalStock", + "quarterlySaleOfBusiness", + "quarterlySaleOfIntangibles", + "quarterlySaleOfInvestment", + "quarterlySaleOfInvestmentProperties", + "quarterlySaleOfPPE", + "quarterlyShortTermDebtIssuance", + "quarterlyShortTermDebtPayments", + "quarterlyStockBasedCompensation", + "quarterlyTaxesRefundPaid", + "quarterlyTaxesRefundPaidDirect", + "quarterlyUnrealizedGainLossOnInvestmentSecurities", + "trailingAdjustedGeographySegmentData", + "trailingAmortizationCashFlow", + "trailingAmortizationOfIntangibles", + "trailingAmortizationOfSecurities", + "trailingAssetImpairmentCharge", + "trailingBeginningCashPosition", + "trailingCapitalExpenditure", + "trailingCapitalExpenditureReported", + "trailingCashDividendsPaid", + "trailingCashFlowFromContinuingFinancingActivities", + "trailingCashFlowFromContinuingInvestingActivities", + "trailingCashFlowFromContinuingOperatingActivities", + "trailingCashFlowFromDiscontinuedOperation", + "trailingCashFlowsfromusedinOperatingActivitiesDirect", + "trailingCashFromDiscontinuedFinancingActivities", + "trailingCashFromDiscontinuedInvestingActivities", + "trailingCashFromDiscontinuedOperatingActivities", + "trailingChangeInAccountPayable", + "trailingChangeInAccruedExpense", + "trailingChangeInCashSupplementalAsReported", + "trailingChangeInDividendPayable", + "trailingChangeInIncomeTaxPayable", + "trailingChangeInInterestPayable", + "trailingChangeInInventory", + "trailingChangeInOtherCurrentAssets", + "trailingChangeInOtherCurrentLiabilities", + "trailingChangeInOtherWorkingCapital", + "trailingChangeInPayable", + "trailingChangeInPayablesAndAccruedExpense", + "trailingChangeInPrepaidAssets", + "trailingChangeInReceivables", + "trailingChangeInTaxPayable", + "trailingChangeInWorkingCapital", + "trailingChangesInAccountReceivables", + "trailingChangesInCash", + "trailingClassesofCashPayments", + "trailingClassesofCashReceiptsfromOperatingActivities", + "trailingCommonStockDividendPaid", + "trailingCommonStockIssuance", + "trailingCommonStockPayments", + "trailingDeferredIncomeTax", + "trailingDeferredTax", + "trailingDepletion", + "trailingDepreciation", + "trailingDepreciationAmortizationDepletion", + "trailingDepreciationAndAmortization", + "trailingDividendPaidCFO", + "trailingDividendReceivedCFO", + "trailingDividendsPaidDirect", + "trailingDividendsReceivedCFI", + "trailingDividendsReceivedDirect", + "trailingDomesticSales", + "trailingEarningsLossesFromEquityInvestments", + "trailingEffectOfExchangeRateChanges", + "trailingEndCashPosition", + "trailingExcessTaxBenefitFromStockBasedCompensation", + "trailingFinancingCashFlow", + "trailingForeignSales", + "trailingFreeCashFlow", + "trailingGainLossOnInvestmentSecurities", + "trailingGainLossOnSaleOfBusiness", + "trailingGainLossOnSaleOfPPE", + "trailingIncomeTaxPaidSupplementalData", + "trailingInterestPaidCFF", + "trailingInterestPaidCFO", + "trailingInterestPaidDirect", + "trailingInterestPaidSupplementalData", + "trailingInterestReceivedCFI", + "trailingInterestReceivedCFO", + "trailingInterestReceivedDirect", + "trailingInvestingCashFlow", + "trailingIssuanceOfCapitalStock", + "trailingIssuanceOfDebt", + "trailingLongTermDebtIssuance", + "trailingLongTermDebtPayments", + "trailingNetBusinessPurchaseAndSale", + "trailingNetCommonStockIssuance", + "trailingNetForeignCurrencyExchangeGainLoss", + "trailingNetIncome", + "trailingNetIncomeFromContinuingOperations", + "trailingNetIntangiblesPurchaseAndSale", + "trailingNetInvestmentPropertiesPurchaseAndSale", + "trailingNetInvestmentPurchaseAndSale", + "trailingNetIssuancePaymentsOfDebt", + "trailingNetLongTermDebtIssuance", + "trailingNetOtherFinancingCharges", + "trailingNetOtherInvestingChanges", + "trailingNetPPEPurchaseAndSale", + "trailingNetPreferredStockIssuance", + "trailingNetShortTermDebtIssuance", + "trailingOperatingCashFlow", + "trailingOperatingGainsLosses", + "trailingOtherCashAdjustmentInsideChangeinCash", + "trailingOtherCashAdjustmentOutsideChangeinCash", + "trailingOtherCashPaymentsfromOperatingActivities", + "trailingOtherCashReceiptsfromOperatingActivities", + "trailingOtherNonCashItems", + "trailingPaymentsonBehalfofEmployees", + "trailingPaymentstoSuppliersforGoodsandServices", + "trailingPensionAndEmployeeBenefitExpense", + "trailingPreferredStockDividendPaid", + "trailingPreferredStockIssuance", + "trailingPreferredStockPayments", + "trailingProceedsFromStockOptionExercised", + "trailingProvisionandWriteOffofAssets", + "trailingPurchaseOfBusiness", + "trailingPurchaseOfIntangibles", + "trailingPurchaseOfInvestment", + "trailingPurchaseOfInvestmentProperties", + "trailingPurchaseOfPPE", + "trailingReceiptsfromCustomers", + "trailingReceiptsfromGovernmentGrants", + "trailingRepaymentOfDebt", + "trailingRepurchaseOfCapitalStock", + "trailingSaleOfBusiness", + "trailingSaleOfIntangibles", + "trailingSaleOfInvestment", + "trailingSaleOfInvestmentProperties", + "trailingSaleOfPPE", + "trailingShortTermDebtIssuance", + "trailingShortTermDebtPayments", + "trailingStockBasedCompensation", + "trailingTaxesRefundPaid", + "trailingTaxesRefundPaidDirect", + "trailingUnrealizedGainLossOnInvestmentSecurities", + ], + "monthly": [ + "monthlyAdjustedGeographySegmentData", + "monthlyAmortizationCashFlow", + "monthlyAmortizationOfIntangibles", + "monthlyAmortizationOfSecurities", + "monthlyAssetImpairmentCharge", + "monthlyBeginningCashPosition", + "monthlyCapitalExpenditure", + "monthlyCapitalExpenditureReported", + "monthlyCashDividendsPaid", + "monthlyCashFlowFromContinuingFinancingActivities", + "monthlyCashFlowFromContinuingInvestingActivities", + "monthlyCashFlowFromContinuingOperatingActivities", + "monthlyCashFlowFromDiscontinuedOperation", + "monthlyCashFlowsfromusedinOperatingActivitiesDirect", + "monthlyCashFromDiscontinuedFinancingActivities", + "monthlyCashFromDiscontinuedInvestingActivities", + "monthlyCashFromDiscontinuedOperatingActivities", + "monthlyChangeInAccountPayable", + "monthlyChangeInAccruedExpense", + "monthlyChangeInCashSupplementalAsReported", + "monthlyChangeInDividendPayable", + "monthlyChangeInIncomeTaxPayable", + "monthlyChangeInInterestPayable", + "monthlyChangeInInventory", + "monthlyChangeInOtherCurrentAssets", + "monthlyChangeInOtherCurrentLiabilities", + "monthlyChangeInOtherWorkingCapital", + "monthlyChangeInPayable", + "monthlyChangeInPayablesAndAccruedExpense", + "monthlyChangeInPrepaidAssets", + "monthlyChangeInReceivables", + "monthlyChangeInTaxPayable", + "monthlyChangeInWorkingCapital", + "monthlyChangesInAccountReceivables", + "monthlyChangesInCash", + "monthlyClassesofCashPayments", + "monthlyClassesofCashReceiptsfromOperatingActivities", + "monthlyCommonStockDividendPaid", + "monthlyCommonStockIssuance", + "monthlyCommonStockPayments", + "monthlyDeferredIncomeTax", + "monthlyDeferredTax", + "monthlyDepletion", + "monthlyDepreciation", + "monthlyDepreciationAmortizationDepletion", + "monthlyDepreciationAndAmortization", + "monthlyDividendPaidCFO", + "monthlyDividendReceivedCFO", + "monthlyDividendsPaidDirect", + "monthlyDividendsReceivedCFI", + "monthlyDividendsReceivedDirect", + "monthlyDomesticSales", + "monthlyEarningsLossesFromEquityInvestments", + "monthlyEffectOfExchangeRateChanges", + "monthlyEndCashPosition", + "monthlyExcessTaxBenefitFromStockBasedCompensation", + "monthlyFinancingCashFlow", + "monthlyForeignSales", + "monthlyFreeCashFlow", + "monthlyGainLossOnInvestmentSecurities", + "monthlyGainLossOnSaleOfBusiness", + "monthlyGainLossOnSaleOfPPE", + "monthlyIncomeTaxPaidSupplementalData", + "monthlyInterestPaidCFF", + "monthlyInterestPaidCFO", + "monthlyInterestPaidDirect", + "monthlyInterestPaidSupplementalData", + "monthlyInterestReceivedCFI", + "monthlyInterestReceivedCFO", + "monthlyInterestReceivedDirect", + "monthlyInvestingCashFlow", + "monthlyIssuanceOfCapitalStock", + "monthlyIssuanceOfDebt", + "monthlyLongTermDebtIssuance", + "monthlyLongTermDebtPayments", + "monthlyNetBusinessPurchaseAndSale", + "monthlyNetCommonStockIssuance", + "monthlyNetForeignCurrencyExchangeGainLoss", + "monthlyNetIncome", + "monthlyNetIncomeFromContinuingOperations", + "monthlyNetIntangiblesPurchaseAndSale", + "monthlyNetInvestmentPropertiesPurchaseAndSale", + "monthlyNetInvestmentPurchaseAndSale", + "monthlyNetIssuancePaymentsOfDebt", + "monthlyNetLongTermDebtIssuance", + "monthlyNetOtherFinancingCharges", + "monthlyNetOtherInvestingChanges", + "monthlyNetPPEPurchaseAndSale", + "monthlyNetPreferredStockIssuance", + "monthlyNetShortTermDebtIssuance", + "monthlyOperatingCashFlow", + "monthlyOperatingGainsLosses", + "monthlyOtherCashAdjustmentInsideChangeinCash", + "monthlyOtherCashAdjustmentOutsideChangeinCash", + "monthlyOtherCashPaymentsfromOperatingActivities", + "monthlyOtherCashReceiptsfromOperatingActivities", + "monthlyOtherNonCashItems", + "monthlyPaymentsonBehalfofEmployees", + "monthlyPaymentstoSuppliersforGoodsandServices", + "monthlyPensionAndEmployeeBenefitExpense", + "monthlyPreferredStockDividendPaid", + "monthlyPreferredStockIssuance", + "monthlyPreferredStockPayments", + "monthlyProceedsFromStockOptionExercised", + "monthlyProvisionandWriteOffofAssets", + "monthlyPurchaseOfBusiness", + "monthlyPurchaseOfIntangibles", + "monthlyPurchaseOfInvestment", + "monthlyPurchaseOfInvestmentProperties", + "monthlyPurchaseOfPPE", + "monthlyReceiptsfromCustomers", + "monthlyReceiptsfromGovernmentGrants", + "monthlyRepaymentOfDebt", + "monthlyRepurchaseOfCapitalStock", + "monthlySaleOfBusiness", + "monthlySaleOfIntangibles", + "monthlySaleOfInvestment", + "monthlySaleOfInvestmentProperties", + "monthlySaleOfPPE", + "monthlyShortTermDebtIssuance", + "monthlyShortTermDebtPayments", + "monthlyStockBasedCompensation", + "monthlyTaxesRefundPaid", + "monthlyTaxesRefundPaidDirect", + "monthlyUnrealizedGainLossOnInvestmentSecurities", + "trailingAdjustedGeographySegmentData", + "trailingAmortizationCashFlow", + "trailingAmortizationOfIntangibles", + "trailingAmortizationOfSecurities", + "trailingAssetImpairmentCharge", + "trailingBeginningCashPosition", + "trailingCapitalExpenditure", + "trailingCapitalExpenditureReported", + "trailingCashDividendsPaid", + "trailingCashFlowFromContinuingFinancingActivities", + "trailingCashFlowFromContinuingInvestingActivities", + "trailingCashFlowFromContinuingOperatingActivities", + "trailingCashFlowFromDiscontinuedOperation", + "trailingCashFlowsfromusedinOperatingActivitiesDirect", + "trailingCashFromDiscontinuedFinancingActivities", + "trailingCashFromDiscontinuedInvestingActivities", + "trailingCashFromDiscontinuedOperatingActivities", + "trailingChangeInAccountPayable", + "trailingChangeInAccruedExpense", + "trailingChangeInCashSupplementalAsReported", + "trailingChangeInDividendPayable", + "trailingChangeInIncomeTaxPayable", + "trailingChangeInInterestPayable", + "trailingChangeInInventory", + "trailingChangeInOtherCurrentAssets", + "trailingChangeInOtherCurrentLiabilities", + "trailingChangeInOtherWorkingCapital", + "trailingChangeInPayable", + "trailingChangeInPayablesAndAccruedExpense", + "trailingChangeInPrepaidAssets", + "trailingChangeInReceivables", + "trailingChangeInTaxPayable", + "trailingChangeInWorkingCapital", + "trailingChangesInAccountReceivables", + "trailingChangesInCash", + "trailingClassesofCashPayments", + "trailingClassesofCashReceiptsfromOperatingActivities", + "trailingCommonStockDividendPaid", + "trailingCommonStockIssuance", + "trailingCommonStockPayments", + "trailingDeferredIncomeTax", + "trailingDeferredTax", + "trailingDepletion", + "trailingDepreciation", + "trailingDepreciationAmortizationDepletion", + "trailingDepreciationAndAmortization", + "trailingDividendPaidCFO", + "trailingDividendReceivedCFO", + "trailingDividendsPaidDirect", + "trailingDividendsReceivedCFI", + "trailingDividendsReceivedDirect", + "trailingDomesticSales", + "trailingEarningsLossesFromEquityInvestments", + "trailingEffectOfExchangeRateChanges", + "trailingEndCashPosition", + "trailingExcessTaxBenefitFromStockBasedCompensation", + "trailingFinancingCashFlow", + "trailingForeignSales", + "trailingFreeCashFlow", + "trailingGainLossOnInvestmentSecurities", + "trailingGainLossOnSaleOfBusiness", + "trailingGainLossOnSaleOfPPE", + "trailingIncomeTaxPaidSupplementalData", + "trailingInterestPaidCFF", + "trailingInterestPaidCFO", + "trailingInterestPaidDirect", + "trailingInterestPaidSupplementalData", + "trailingInterestReceivedCFI", + "trailingInterestReceivedCFO", + "trailingInterestReceivedDirect", + "trailingInvestingCashFlow", + "trailingIssuanceOfCapitalStock", + "trailingIssuanceOfDebt", + "trailingLongTermDebtIssuance", + "trailingLongTermDebtPayments", + "trailingNetBusinessPurchaseAndSale", + "trailingNetCommonStockIssuance", + "trailingNetForeignCurrencyExchangeGainLoss", + "trailingNetIncome", + "trailingNetIncomeFromContinuingOperations", + "trailingNetIntangiblesPurchaseAndSale", + "trailingNetInvestmentPropertiesPurchaseAndSale", + "trailingNetInvestmentPurchaseAndSale", + "trailingNetIssuancePaymentsOfDebt", + "trailingNetLongTermDebtIssuance", + "trailingNetOtherFinancingCharges", + "trailingNetOtherInvestingChanges", + "trailingNetPPEPurchaseAndSale", + "trailingNetPreferredStockIssuance", + "trailingNetShortTermDebtIssuance", + "trailingOperatingCashFlow", + "trailingOperatingGainsLosses", + "trailingOtherCashAdjustmentInsideChangeinCash", + "trailingOtherCashAdjustmentOutsideChangeinCash", + "trailingOtherCashPaymentsfromOperatingActivities", + "trailingOtherCashReceiptsfromOperatingActivities", + "trailingOtherNonCashItems", + "trailingPaymentsonBehalfofEmployees", + "trailingPaymentstoSuppliersforGoodsandServices", + "trailingPensionAndEmployeeBenefitExpense", + "trailingPreferredStockDividendPaid", + "trailingPreferredStockIssuance", + "trailingPreferredStockPayments", + "trailingProceedsFromStockOptionExercised", + "trailingProvisionandWriteOffofAssets", + "trailingPurchaseOfBusiness", + "trailingPurchaseOfIntangibles", + "trailingPurchaseOfInvestment", + "trailingPurchaseOfInvestmentProperties", + "trailingPurchaseOfPPE", + "trailingReceiptsfromCustomers", + "trailingReceiptsfromGovernmentGrants", + "trailingRepaymentOfDebt", + "trailingRepurchaseOfCapitalStock", + "trailingSaleOfBusiness", + "trailingSaleOfIntangibles", + "trailingSaleOfInvestment", + "trailingSaleOfInvestmentProperties", + "trailingSaleOfPPE", + "trailingShortTermDebtIssuance", + "trailingShortTermDebtPayments", + "trailingStockBasedCompensation", + "trailingTaxesRefundPaid", + "trailingTaxesRefundPaidDirect", + "trailingUnrealizedGainLossOnInvestmentSecurities", + ] + }, + "valuation": { + "quarterly": [ + "quarterlyForwardPeRatio", + "quarterlyPsRatio", + "quarterlyPbRatio", + "quarterlyEnterprisesValueEBITDARatio", + "quarterlyEnterprisesValueRevenueRatio", + "quarterlyPeRatio", + "quarterlyMarketCap", + "quarterlyEnterpriseValue", + "quarterlyPegRatio", + "trailingForwardPeRatio", + "trailingPsRatio", + "trailingPbRatio", + "trailingEnterprisesValueEBITDARatio", + "trailingEnterprisesValueRevenueRatio", + "trailingPeRatio", + "trailingMarketCap", + "trailingEnterpriseValue", + "trailingPegRatio", + ], + } +} + +FUNDAMENTALS_TIME_MAP = { + "annual": {"prefix": "annual", "period_type": "12M"}, + "quarterly": {"prefix": "quarterly", "period_type": "3M"}, + "monthly": {"prefix": "monthly", "period_type": "1M"}, +} + +MODULES_MAP = { + "assetProfile": { + "convert_dates": ["governanceEpochDate", "compensationAsOfEpochDate"] + }, + "balanceSheetHistory": { + "filter": "balanceSheetStatements", + "convert_dates": ["endDate"], + }, + "balanceSheetHistoryQuarterly": { + "filter": "balanceSheetStatements", + "convert_dates": ["endDate"], + }, + "calendarEvents": { + "convert_dates": ["earningsDate", "exDividendDate", "dividendDate"] + }, + "cashflowStatementHistory": { + "filter": "cashflowStatements", + "convert_dates": ["endDate"], + }, + "cashflowStatementHistoryQuarterly": { + "filter": "cashflowStatements", + "convert_dates": ["endDate"], + }, + "defaultKeyStatistics": { + "convert_dates": [ + "sharesShortPreviousMonthDate", + "dateShortInterest", + "lastFiscalYearEnd", + "nextFiscalYearEnd", + "fundInceptionDate", + "lastSplitDate", + "mostRecentQuarter", + ] + }, + "earnings": {"convert_dates": ["earningsDate"]}, + "earningsHistory": {"filter": "history", "convert_dates": ["quarter"]}, + "earningsTrend": {"convert_dates": []}, + "esgScores": {"convert_dates": []}, + "financialData": {"convert_dates": []}, + "fundOwnership": {"filter": "ownershipList", "convert_dates": ["reportDate"]}, + "fundPerformance": {"convert_dates": ["asOfDate"]}, + "fundProfile": {"convert_dates": []}, + "indexTrend": {"convert_dates": []}, + "incomeStatementHistory": { + "filter": "incomeStatementHistory", + "convert_dates": ["endDate"], + }, + "incomeStatementHistoryQuarterly": { + "filter": "incomeStatementHistory", + "convert_dates": ["endDate"], + }, + "industryTrend": {"convert_dates": []}, + "insiderHolders": { + "filter": "holders", + "convert_dates": ["latestTransDate", "positionDirectDate"], + }, + "insiderTransactions": { + "filter": "transactions", + "convert_dates": ["startDate"], + }, + "institutionOwnership": { + "filter": "ownershipList", + "convert_dates": ["reportDate"], + }, + "majorHoldersBreakdown": {"convert_dates": []}, + "pageViews": {"convert_dates": []}, + "price": {"convert_dates": [ + "postMarketTime", "preMarketTime", "regularMarketTime" + ]}, + "quoteType": {"convert_dates": ["firstTradeDateEpochUtc"]}, + "recommendationTrend": {"filter": "trend", "convert_dates": []}, + "secFilings": {"filter": "filings", "convert_dates": ["epochDate"]}, + "netSharePurchaseActivity": {"convert_dates": []}, + "sectorTrend": {"convert_dates": []}, + "summaryDetail": { + "convert_dates": ["exDividendDate", "expireDate", "startDate"] + }, + "summaryProfile": {"convert_dates": []}, + "topHoldings": {"convert_dates": []}, + "upgradeDowngradeHistory": { + "filter": "history", + "convert_dates": ["epochGradeDate"], + }, +} + +REQUEST_MAP = { + "quoteSummary": { + "path": "https://query2.finance.yahoo.com/v10/finance/quoteSummary/{symbol}", + "response_field": "quoteSummary", + "request": { + "formatted": {"required": False, "default": False}, + "modules": { + "required": True, + "default": None, + "options": list(MODULES_MAP.keys()), + }, + }, + }, + "fundamentals": { + "path": "https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/{symbol}", + "response_field": "timeseries", + "request": { + "period1": {"required": True, "default": 493590046}, + "period2": {"required": True, "default": int(time.time())}, + "type": { + "required": True, + "default": None, + "options": FUNDAMENTALS_MAP, + }, + "merge": {"required": False, "default": False}, + "padTimeSeries": {"required": False, "default": False}, + }, + }, +} + +USER_AGENTS = [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 " + "Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 ' + 'Safari/537.36' + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 " + "Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 " + "Safari/537.36", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", +] diff --git a/yahoofinancials/utils.py b/yahoofinancials/utils.py new file mode 100644 index 0000000..622d442 --- /dev/null +++ b/yahoofinancials/utils.py @@ -0,0 +1,18 @@ +def remove_prefix(s, prefix): + return s[len(prefix):] if s.startswith(prefix) else s + + +def get_request_config(tech_type, req_map): + if tech_type == '': + r_map = req_map['fundamentals'] + else: + r_map = req_map['quoteSummary'] + return r_map + + +def get_request_category(tech_type, fin_types, statement_type): + if tech_type == '': + r_cat = fin_types.get(statement_type, [])[0] + else: + r_cat = tech_type + return r_cat diff --git a/yahoofinancials/yf.py b/yahoofinancials/yf.py index 24e143a..8bf1ee5 100644 --- a/yahoofinancials/yf.py +++ b/yahoofinancials/yf.py @@ -1,12 +1,12 @@ """ ============================== The Yahoo Financials Module -Version: 1.12 +Version: 1.13 ============================== Author: Connor Sanders Email: sandersconnor1@gmail.com -Version Released: 01/27/2023 +Version Released: 02/14/2023 Tested on Python 3.6, 3.7, 3.8, 3.9, 3.10, and 3.11 Copyright (c) 2023 Connor Sanders @@ -19,8 +19,7 @@ - statement_type can be 'income', 'balance', 'cash'. - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. 2) get_stock_price_data(reformat=True) - - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. -3) get_stock_earnings_data(reformat=True) +3) get_stock_earnings_data() - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. 4) get_summary_data(reformat=True) - reformat optional value defaulted to true. Enter False for unprocessed raw data from Yahoo Finance. @@ -45,7 +44,7 @@ from yahoofinancials.calcs import num_shares_outstanding, eps from yahoofinancials.etl import YahooFinanceETL -__version__ = "1.12" +__version__ = "1.13" __author__ = "Connor Sanders" @@ -72,24 +71,25 @@ class YahooFinancials(YahooFinanceETL): """ # Private method that handles financial statement extraction - def _run_financial_stmt(self, statement_type, report_num, reformat): + def _run_financial_stmt(self, statement_type, report_num, frequency, reformat): + hist_obj = {"interval": frequency} report_name = self.YAHOO_FINANCIAL_TYPES[statement_type][report_num] if reformat: - raw_data = self.get_stock_data(statement_type, report_name=report_name) + raw_data = self.get_stock_data(statement_type, report_name=report_name, hist_obj=hist_obj) data = self.get_reformatted_stmt_data(raw_data, statement_type) else: - data = self.get_stock_data(statement_type, report_name=report_name) + data = self.get_stock_data(statement_type, report_name=report_name, hist_obj=hist_obj) return data # Public Method for the user to get financial statement data def get_financial_stmts(self, frequency, statement_type, reformat=True): report_num = self.get_report_type(frequency) if isinstance(statement_type, str): - data = self._run_financial_stmt(statement_type, report_num, reformat) + data = self._run_financial_stmt(statement_type, report_num, frequency, reformat) else: data = {} for stmt_type in statement_type: - re_data = self._run_financial_stmt(stmt_type, report_num, reformat) + re_data = self._run_financial_stmt(stmt_type, report_num, frequency, reformat) data.update(re_data) return data @@ -111,16 +111,14 @@ def get_key_statistics_data(self, reformat=True): def get_stock_profile_data(self, reformat=True): if reformat: return self.get_clean_data( - self.get_stock_data(statement_type='profile', tech_type='', report_name='assetProfile'), 'earnings') + self.get_stock_data(statement_type='profile', tech_type='assetProfile', report_name='assetProfile'), + 'earnings') else: - return self.get_stock_data(statement_type='profile', tech_type='', report_name='assetProfile') + return self.get_stock_data(statement_type='profile', tech_type='assetProfile', report_name='assetProfile') # Public Method for the user to get stock earnings data - def get_stock_earnings_data(self, reformat=True): - if reformat: - return self.get_clean_data(self.get_stock_tech_data('earnings'), 'earnings') - else: - return self.get_stock_tech_data('earnings') + def get_stock_earnings_data(self): + return self.get_stock_tech_data('earnings') # Public Method for the user to return financial data def get_financial_data(self, reformat=True): @@ -147,6 +145,10 @@ def get_stock_summary_url(self): def get_stock_quote_type_data(self): return self.get_stock_tech_data('quoteType') + # Public Method for the user to get stock quote data + def get_esg_score_data(self): + return self.get_stock_tech_data('esgScores') + # Public Method for user to get historical price data with def get_historical_price_data(self, start_date, end_date, time_interval): interval_code = self.get_time_code(time_interval) @@ -195,7 +197,7 @@ def _financial_statement_data(self, stmt_type, stmt_code, field_name, freq): date_key = re_data[self.ticker][0].keys()[0] except (IndexError, AttributeError, TypeError): date_key = list(re_data[self.ticker][0])[0] - data = re_data[self.ticker][0][date_key][field_name] + data = re_data[self.ticker][0][date_key].get(field_name) else: data = {} for tick in self.ticker: @@ -317,7 +319,8 @@ def get_interest_expense(self): return self._financial_statement_data('income', 'incomeStatementHistory', 'interestExpense', 'annual') def get_operating_income(self): - return self._financial_statement_data('income', 'incomeStatementHistory', 'operatingIncome', 'annual') + return self._financial_statement_data('income', 'incomeStatementHistory', 'netIncomeContinuousOperations', + 'annual') def get_total_operating_expense(self): return self._financial_statement_data('income', 'incomeStatementHistory', 'totalOperatingExpenses', 'annual')