/** * Interfaces for stock fundamental data (financials from SEC filings) * Separate from stock price data (OHLCV) to maintain clean architecture */ // Request types for fundamental data export interface IFundamentalsCurrentRequest { type: 'fundamentals-current'; ticker: string; } export interface IFundamentalsBatchRequest { type: 'fundamentals-batch'; tickers: string[]; } export type IFundamentalsRequest = | IFundamentalsCurrentRequest | IFundamentalsBatchRequest; /** * Stock fundamental data from SEC filings (10-K, 10-Q) * Contains financial metrics like EPS, Revenue, Assets, etc. */ export interface IStockFundamentals { ticker: string; cik: string; companyName: string; provider: string; timestamp: Date; fetchedAt: Date; // Per-share metrics earningsPerShareBasic?: number; earningsPerShareDiluted?: number; sharesOutstanding?: number; weightedAverageSharesOutstanding?: number; // Income statement (annual USD) revenue?: number; netIncome?: number; operatingIncome?: number; grossProfit?: number; costOfRevenue?: number; // Balance sheet (annual USD) assets?: number; liabilities?: number; stockholdersEquity?: number; cash?: number; propertyPlantEquipment?: number; // Calculated metrics (requires current price) marketCap?: number; // price × sharesOutstanding priceToEarnings?: number; // price / EPS priceToBook?: number; // marketCap / stockholdersEquity // Metadata fiscalYear?: string; fiscalQuarter?: string; filingDate?: Date; form?: '10-K' | '10-Q' | string; } /** * Provider interface for fetching fundamental data * Parallel to IStockProvider but for fundamentals instead of prices */ export interface IFundamentalsProvider { name: string; priority: number; fetchData(request: IFundamentalsRequest): Promise; isAvailable(): Promise; readonly requiresAuth: boolean; readonly rateLimit?: { requestsPerMinute: number; requestsPerDay?: number; }; } /** * Configuration for fundamentals providers */ export interface IFundamentalsProviderConfig { enabled: boolean; priority?: number; timeout?: number; retryAttempts?: number; retryDelay?: number; cacheTTL?: number; // Custom cache TTL for this provider } /** * Registry for managing fundamental data providers */ export interface IFundamentalsProviderRegistry { register(provider: IFundamentalsProvider, config?: IFundamentalsProviderConfig): void; unregister(providerName: string): void; getProvider(name: string): IFundamentalsProvider | undefined; getAllProviders(): IFundamentalsProvider[]; getEnabledProviders(): IFundamentalsProvider[]; }