public static XbrlFact GetValueFromPriorities(this XbrlInstanceDocument doc, params string[] priorities) { //First get the normal period context string normal_period_context = doc.FindNormalPeriodPrimaryContext().Id; return(doc.GetValueFromPriorities(normal_period_context, priorities)); }
static void Main(string[] args) { EdgarSearch es = EdgarSearch.CreateAsync(args[0], "10-K").Result; EdgarSearchResult esr = es.GetFirstResultOfFilingType("10-K"); Stream s = esr.DownloadXbrlDocumentAsync().Result; XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s); FinancialStatement fs = doc.CreateFinancialStatement(); string json = JsonConvert.SerializeObject(fs); Console.WriteLine(json); }
public async Task <FinancialStatement[]> GetFinancialStatementsAsync(string symbol, string filing_type) { EdgarSearch es = await EdgarSearch.CreateAsync(symbol, filing_type, null, EdgarSearchOwnershipFilter.exclude, EdgarSearchResultsPerPage.Entries40); //Get a list of the filings List <EdgarSearchResult> Results = new List <EdgarSearchResult>(); foreach (EdgarSearchResult esr in es.Results) { if (esr.Filing.Trim().ToLower() == filing_type.Trim().ToLower()) { Results.Add(esr); } } //Make financial statments for each List <FinancialStatement> FinancialStatements = new List <FinancialStatement>(); foreach (EdgarSearchResult esr in Results) { try { Stream s = await esr.DownloadXbrlDocumentAsync(); XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s); FinancialStatement fs = doc.CreateFinancialStatement(); FinancialStatements.Add(fs); } catch { } } //Arrange from oldest to newest List <FinancialStatement> Arranged = new List <FinancialStatement>(); do { FinancialStatement Winner = FinancialStatements[0]; foreach (FinancialStatement fs in FinancialStatements) { if (fs.PeriodEnd < Winner.PeriodEnd) { Winner = fs; } } Arranged.Add(Winner); FinancialStatements.Remove(Winner); } while (FinancialStatements.Count > 0); return(Arranged.ToArray()); }
static void TestSingleDocument() { string path = "C:\\Users\\tihanewi\\Downloads\\AAPL.xml"; Stream s = System.IO.File.OpenRead(path); XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s); Console.WriteLine("Period context ref: '" + doc.PrimaryPeriodContextId + "'"); Console.WriteLine("Instant context ref: '" + doc.PrimaryInstantContextId + "'"); FinancialStatement fs = doc.CreateFinancialStatement(); string json = JsonConvert.SerializeObject(fs); Console.WriteLine(json); }
static void TestAll10Ks() { do { Console.WriteLine("Symbol?"); string symbol = Console.ReadLine(); EdgarSearch es = EdgarSearch.CreateAsync(symbol, "10-K").Result; foreach (EdgarSearchResult esr in es.Results) { if (esr.Filing == "10-K") { if (esr.InteractiveDataUrl != null && esr.InteractiveDataUrl != "") { try { Stream s = esr.DownloadXbrlDocumentAsync().Result; XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s); FinancialStatement fs = doc.CreateFinancialStatement(); string rev = ""; if (fs.Revenue.HasValue) { rev = fs.Revenue.Value.ToString("#,##0"); } else { rev = "?"; } Console.WriteLine(fs.PeriodEnd.Value.ToShortDateString() + " - " + rev); } catch { Console.WriteLine("Critical error (filed on " + esr.FilingDate.ToShortDateString()); } } } } Console.WriteLine(); } while (true); }
public static XbrlFact GetValueFromPriorities(this XbrlInstanceDocument doc, string context_id, params string[] priorities) { //First get the normal period context string normal_period_context = context_id; foreach (string word in priorities) { foreach (XbrlFact fact in doc.Facts) { if (fact.ContextId.ToLower().Trim() == doc.PrimaryInstantContextId.ToLower().Trim() || fact.ContextId.Trim().ToLower() == normal_period_context.Trim().ToLower()) { if (fact.Label.Trim().ToLower() == word.Trim().ToLower()) { return(fact); } } } } throw new Exception("Unable to find XBRL fact for value labeled with any of the following: " + priorities); }
public static FinancialStatement CreateFinancialStatement(this XbrlInstanceDocument doc) { FinancialStatement ToReturn = new FinancialStatement(); //Get the context reference to focus on XbrlContext focus_context = doc.FindNormalPeriodPrimaryContext(); #region "Contextual (misc) info" //Period start and end ToReturn.PeriodStart = focus_context.StartDate; ToReturn.PeriodEnd = focus_context.EndDate; //Common Stock Shares Outstanding try { ToReturn.CommonStockSharesOutstanding = doc.GetValueFromPriorities(focus_context.Id, "CommonStockSharesOutstanding", "EntityCommonStockSharesOutstanding").ValueAsLong(); } catch { ToReturn.CommonStockSharesOutstanding = null; } #endregion #region "Income Statement" //Revenue try { ToReturn.Revenue = doc.GetValueFromPriorities(focus_context.Id, "Revenue", "Revenues", "RevenueFromContractWithCustomerExcludingAssessedTax", "RevenueFromContractWithCustomerIncludingAssessedTax", "RevenueFromContractWithCustomerBeforeReimbursementsExcludingAssessedTax", "SalesRevenueNet", "SalesRevenueGoodsNet", "TotalRevenuesAndOtherIncome").ValueAsFloat(); } catch { ToReturn.Revenue = null; } //Net income try { ToReturn.NetIncome = doc.GetValueFromPriorities(focus_context.Id, "NetIncomeLoss", "IncomeLossFromContinuingOperationsIncludingPortionAttributableToNoncontrollingInterest", "ProfitLoss").ValueAsFloat(); } catch { ToReturn.NetIncome = null; } //Operating Income try { ToReturn.OperatingIncome = doc.GetValueFromPriorities(focus_context.Id, "OperatingIncomeLoss", "IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest").ValueAsFloat(); } catch { ToReturn.OperatingIncome = null; } //Selling general and administrative expense try { ToReturn.SellingGeneralAndAdministrativeExpense = doc.GetValueFromPriorities(focus_context.Id, "SellingGeneralAndAdministrativeExpense").ValueAsFloat(); } catch { ToReturn.SellingGeneralAndAdministrativeExpense = null; } //Research and development expense try { ToReturn.ResearchAndDevelopmentExpense = doc.GetValueFromPriorities(focus_context.Id, "ResearchAndDevelopmentExpense", "ResearchAndDevelopmentExpenseExcludingAcquiredInProcessCost").ValueAsFloat(); } catch { ToReturn.ResearchAndDevelopmentExpense = null; } #endregion #region "Balance Sheet" //Assets try { ToReturn.Assets = doc.GetValueFromPriorities(focus_context.Id, "Assets").ValueAsFloat(); } catch { ToReturn.Assets = null; } //Liabilities try { ToReturn.Liabilities = doc.GetValueFromPriorities(focus_context.Id, "Liabilities").ValueAsFloat(); } catch { ToReturn.Liabilities = null; } //Equity try { ToReturn.Equity = doc.GetValueFromPriorities(focus_context.Id, "Equity", "StockholdersEquity", "StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest").ValueAsFloat(); } catch { ToReturn.Equity = null; } //If only liabilities or equity were able to be found, fill in the rest if (ToReturn.Assets != null) { if (ToReturn.Liabilities == null && ToReturn.Equity != null) { ToReturn.Liabilities = ToReturn.Assets - ToReturn.Equity; } else if (ToReturn.Equity == null && ToReturn.Liabilities != null) { ToReturn.Equity = ToReturn.Assets - ToReturn.Liabilities; } } else { if (ToReturn.Liabilities != null && ToReturn.Equity != null) { ToReturn.Assets = ToReturn.Liabilities + ToReturn.Equity; } } //Cash try { ToReturn.Cash = doc.GetValueFromPriorities(focus_context.Id, "CashAndCashEquivalents", "CashAndCashEquivalentsAtCarryingValue", "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents", "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents").ValueAsFloat(); } catch { ToReturn.Cash = null; } //Current Assets try { ToReturn.CurrentAssets = doc.GetValueFromPriorities(focus_context.Id, "AssetsCurrent").ValueAsFloat(); } catch { ToReturn.CurrentAssets = null; } //Current Libilities try { ToReturn.CurrentLiabilities = doc.GetValueFromPriorities(focus_context.Id, "LiabilitiesCurrent").ValueAsFloat(); } catch { ToReturn.CurrentLiabilities = null; } //Retained Earnings try { ToReturn.RetainedEarnings = doc.GetValueFromPriorities(focus_context.Id, "RetainedEarningsAccumulatedDeficit").ValueAsFloat(); } catch { ToReturn.RetainedEarnings = null; } #endregion #region "Cash Flows" //Operating Cash Flows try { ToReturn.OperatingCashFlows = doc.GetValueFromPriorities(focus_context.Id, "NetCashProvidedByUsedInOperatingActivities", "NetCashProvidedByUsedInOperatingActivitiesContinuingOperations").ValueAsFloat(); } catch { ToReturn.OperatingCashFlows = null; } //Investing Cash Flows try { ToReturn.InvestingCashFlows = doc.GetValueFromPriorities(focus_context.Id, "NetCashProvidedByUsedInInvestingActivities", "NetCashProvidedByUsedInInvestingActivitiesContinuingOperations").ValueAsFloat(); } catch { ToReturn.InvestingCashFlows = null; } //Finance cash flows try { ToReturn.FinancingCashFlows = doc.GetValueFromPriorities(focus_context.Id, "NetCashProvidedByUsedInFinancingActivities", "NetCashProvidedByUsedInFinancingActivitiesContinuingOperations").ValueAsFloat(); } catch { ToReturn.FinancingCashFlows = null; } //ProceedsFromIssuanceOfDebt try { ToReturn.ProceedsFromIssuanceOfDebt = doc.GetValueFromPriorities(focus_context.Id, "ProceedsFromIssuanceOfDebt", "ProceedsFromDebtMaturingInMoreThanThreeMonths", "ProceedsFromIssuanceOfLongTermDebt", "ProceedsFromIssuanceOfLongTermDebtAndCapitalSecuritiesNet").ValueAsFloat(); } catch { ToReturn.ProceedsFromIssuanceOfDebt = null; } //Payments of debt try { ToReturn.PaymentsOfDebt = doc.GetValueFromPriorities(focus_context.Id, "RepaymentsOfDebt", "RepaymentsOfDebtMaturingInMoreThanThreeMonths", "RepaymentsOfLongTermDebt", "RepaymentsOfLongTermDebtAndCapitalSecurities").ValueAsFloat(); } catch { ToReturn.PaymentsOfDebt = null; } //Dividends paid try { ToReturn.DividendsPaid = doc.GetValueFromPriorities(focus_context.Id, "PaymentsOfDividendsCommonStock", "PaymentsOfDividends").ValueAsFloat(); } catch { ToReturn.DividendsPaid = null; } #endregion return(ToReturn); }