mirror of
https://github.com/shawnkim1997/All-in-one-Financial-Analysis.git
synced 2026-08-05 14:57:44 +00:00
d337c63976
Architecture (3,909-line monolith → 28 focused modules, all < 300 lines):
- config/: constants.py (company lists, row maps, Damodaran baselines), theme.py (CSS/HTML)
- utils/: prefs, formatting, ticker, dcf, charts, ui_helpers
- data/: sec_parser, sec_fetcher, sec_downloader, financials, fundamentals,
valuation, ratios, scores, scores_ai, market
- ai/: gemini_core, gemini_sec, gemini_insights
- views/: sidebar, tab1_quant, tab1_ai, tab1_filings, tab2_dcf,
tab3_comps, tab4_news, tab5_markets, tab6_crypto, tab7_technical
- app.py: thin orchestrator (~118 lines)
- Strict unidirectional dependency graph (no circular imports)
- All @st.cache_data TTLs and st.session_state keys preserved identically
SEC filing viewer fix:
- Rebuilt EDGAR fetch chain: company_tickers.json → CIK → submissions API
→ filings.recent.primaryDocument[] (replaces deprecated directory.item)
- Filing type selectbox (10-K, 10-Q, 8-K, 20-F, 6-K) connected to backend
- Native HTML rendered via streamlit.components.v1.html() with CSS reset
- Errors surfaced explicitly with st.error()
- DART direct links restored for Korean-listed companies
.gitignore: data/ → data/*.json + data/*.html (preserve Python modules)
README: full rewrite for master's portfolio — 7-tab layout, architecture
diagram, modular structure tree, technical challenges, design rationale
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
116 lines
5.0 KiB
Python
116 lines
5.0 KiB
Python
"""
|
|
All global constants, company lists, sector maps, regex patterns, row maps, and Damodaran baselines.
|
|
"""
|
|
|
|
# Company name → ticker for search/autocomplete (expand as needed)
|
|
COMPANY_LIST = [
|
|
("NVIDIA Corporation", "NVDA"), ("Apple Inc.", "AAPL"), ("Microsoft Corporation", "MSFT"),
|
|
("Amazon.com Inc.", "AMZN"), ("Alphabet Inc.", "GOOGL"), ("Meta Platforms Inc.", "META"),
|
|
("AMD", "AMD"), ("Intel Corporation", "INTC"), ("Qualcomm Inc.", "QCOM"), ("Tesla Inc.", "TSLA"),
|
|
("Berkshire Hathaway", "BRK.B"), ("JPMorgan Chase", "JPM"), ("Visa Inc.", "V"), ("UnitedHealth", "UNH"),
|
|
("Procter & Gamble", "PG"), ("Exxon Mobil", "XOM"), ("Johnson & Johnson", "JNJ"), ("Mastercard", "MA"),
|
|
("Chevron", "CVX"), ("Home Depot", "HD"), ("Merck", "MRK"), ("AbbVie", "ABBV"), ("Costco", "COST"),
|
|
("PepsiCo", "PEP"), ("Coca-Cola", "KO"), ("Pfizer", "PFE"), ("Walmart", "WMT"), ("Netflix", "NFLX"),
|
|
("Adobe", "ADBE"), ("Salesforce", "CRM"), ("Comcast", "CMCSA"), ("Cisco", "CSCO"), ("Oracle", "ORCL"),
|
|
("American Express", "AXP"), ("Bank of America", "BAC"), ("Wells Fargo", "WFC"), ("Verizon", "VZ"),
|
|
("AT&T", "T"), ("Walt Disney", "DIS"), ("Nike", "NKE"), ("McDonald's", "MCD"), ("Starbucks", "SBUX"),
|
|
("Goldman Sachs", "GS"), ("Morgan Stanley", "MS"), ("Target", "TGT"), ("Boeing", "BA"), ("IBM", "IBM"),
|
|
]
|
|
COMPANY_OPTIONS = [f"{t} - {n}" for n, t in COMPANY_LIST]
|
|
COMPANY_TICKER_MAP = {t: n for n, t in COMPANY_LIST}
|
|
|
|
MARKET_OPTIONS = [
|
|
"US (S&P/Dow/Nasdaq)",
|
|
"South Korea (KOSPI/KOSDAQ)",
|
|
"Japan (Nikkei)",
|
|
"UK (LSE)",
|
|
]
|
|
|
|
# Top-down sector analysis: industry → top 5 S&P 500 / NASDAQ tickers
|
|
SECTORS = {
|
|
"Semiconductors & Hardware": ["NVDA", "AMD", "INTC", "TSM", "AVGO"],
|
|
"Software & Cloud": ["MSFT", "ADBE", "CRM", "PANW", "CRWD"],
|
|
"Consumer Retail": ["AMZN", "SBUX", "MCD", "WMT", "HD"],
|
|
"Financial Services": ["JPM", "BAC", "GS", "MS", "V"],
|
|
"Healthcare": ["LLY", "UNH", "JNJ", "ABBV", "MRK"],
|
|
}
|
|
|
|
# Section patterns for 10-K items
|
|
ITEM1A_PATTERNS = [
|
|
r"Item\s+1A\s*[.:]\s*Risk\s+Factors",
|
|
r"ITEM\s+1A\s*[.:]\s*Risk\s+Factors",
|
|
]
|
|
ITEM7_PATTERNS = [
|
|
r"Item\s+7\s*[.:]\s*Management['\u2019]s\s+Discussion\s+and\s+Analysis",
|
|
r"ITEM\s+7\s*[.:]\s*Management['\u2019]s\s+Discussion",
|
|
r"Item\s+7\s*[.:]\s*[\w\s]+MD&A",
|
|
]
|
|
ITEM8_PATTERNS = [
|
|
r"Item\s+8\s*[.:]\s*Financial\s+Statements",
|
|
r"ITEM\s+8\s*[.:]\s*Financial\s+Statements",
|
|
]
|
|
ITEM3_PATTERNS = [
|
|
r"Item\s+3\s*[.:]\s*Legal\s+Proceedings",
|
|
r"ITEM\s+3\s*[.:]\s*Legal\s+Proceedings",
|
|
]
|
|
ITEM9A_PATTERNS = [
|
|
r"Item\s+9A\s*[.:]\s*Controls\s+and\s+Procedures",
|
|
r"Item\s+9A\s*[.:]\s*Internal\s+Control",
|
|
r"ITEM\s+9A\s*[.:]\s*Controls",
|
|
]
|
|
|
|
# Gemini model config
|
|
GEMINI_MODEL = "gemini-2.0-flash"
|
|
RATE_LIMIT_WAIT_SEC = 60
|
|
|
|
# Financial statement required keys (for LLM extraction)
|
|
REQUIRED_FINANCIAL_KEYS = [
|
|
"Revenue", "CostOfRevenue", "OperatingExpenses", "NetIncome",
|
|
"TotalAssets", "CurrentAssets", "CurrentLiabilities", "LongTermDebt",
|
|
"OperatingCashFlow", "SharesOutstanding",
|
|
]
|
|
|
|
# yahooquery: map to our index/column shape (index=line items, columns=dates)
|
|
INCOME_ROW_MAP = [
|
|
("Total Revenue", ("TotalRevenue", "OperatingRevenue", "TotalRevenue")),
|
|
("Cost Of Revenue", ("CostOfRevenue", "ReconciledCostOfRevenue")),
|
|
("Gross Profit", ("GrossProfit",)),
|
|
("Operating Income", ("OperatingIncome", "EBIT", "TotalOperatingIncomeAsReported")),
|
|
("Net Income", ("NetIncome", "NetIncomeCommonStockholders", "NetIncomeContinuousOperations", "DilutedNIAvailtoComStockholders")),
|
|
("Operating Expense", ("OperatingExpense", "OperatingExpenses", "TotalExpenses")),
|
|
("Interest Expense", ("InterestExpense", "InterestExpenseNonOperating")),
|
|
("Research And Development Expenses", ("ResearchAndDevelopment", "ResearchAndDevelopmentExpenses")),
|
|
]
|
|
BALANCE_ROW_MAP = [
|
|
("Total Assets", ("TotalAssets",)),
|
|
("Total Stockholder Equity", ("StockholdersEquity", "CommonStockEquity", "TotalEquityGrossMinorityInterest")),
|
|
("Total Liabilities", ("TotalLiabilitiesNetMinorityInterest", "TotalLiabilities")),
|
|
("Current Assets", ("CurrentAssets",)),
|
|
("Current Liabilities", ("CurrentLiabilities",)),
|
|
("Long Term Debt", ("LongTermDebt", "LongTermDebtAndCapitalLeaseObligation")),
|
|
("Total Debt", ("TotalDebt",)),
|
|
("Share Issued", ("OrdinarySharesNumber", "ShareIssued", "BasicAverageShares", "DilutedAverageShares")),
|
|
("Cash And Cash Equivalents", ("CashAndCashEquivalents", "CashCashEquivalentsAndShortTermInvestments", "EndCashPosition")),
|
|
("Retained Earnings", ("RetainedEarnings",)),
|
|
]
|
|
CASHFLOW_ROW_MAP = [
|
|
("Operating Cash Flow", ("OperatingCashFlow", "CashFromOperatingActivities")),
|
|
("Capital Expenditure", ("CapitalExpenditure", "CapitalExpenditures")),
|
|
]
|
|
|
|
# Aswath Damodaran sector WACC (approx. 2024/2025 baseline). Used for reference in DCF panel.
|
|
DAMODARAN_WACC = {
|
|
"Software": 8.5,
|
|
"Retail": 7.5,
|
|
"Hardware": 9.0,
|
|
"Financials": 8.0,
|
|
"Healthcare": 7.2,
|
|
"Consumer": 7.5,
|
|
"Technology": 8.5,
|
|
"Industrial": 7.8,
|
|
"Energy": 8.2,
|
|
"Utilities": 6.5,
|
|
}
|
|
DAMODARAN_ERP_PCT = 4.6
|
|
DAMODARAN_RF_PCT = 4.2
|