""" Stock Screener schemas - request/response models """ from typing import Optional, List, Any, Dict from pydantic import BaseModel class ScreenerStockItem(BaseModel): symbol: str name: Optional[str] = None exchange: Optional[str] = None # User-friendly: NYSE, NASDAQ, etc. exchange_code: Optional[str] = None # Raw yfinance code: NYQ, NMS, etc. quote_type: Optional[str] = None market_cap: Optional[float] = None price: Optional[float] = None change_percent: Optional[float] = None volume: Optional[int] = None avg_volume_3m: Optional[int] = None shares_outstanding: Optional[float] = None pe_ratio: Optional[float] = None forward_pe: Optional[float] = None eps_ttm: Optional[float] = None dividend_yield: Optional[float] = None fifty_two_week_high: Optional[float] = None fifty_two_week_low: Optional[float] = None analyst_rating: Optional[str] = None book_value: Optional[float] = None price_to_book: Optional[float] = None class ScreenerResponse(BaseModel): stocks: List[ScreenerStockItem] total_available: int returned_count: int page: int page_size: int total_pages: int query_time_seconds: float metadata: Dict[str, Any]