""" Universe screening schemas for backtesting universe construction """ from datetime import datetime from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class UniverseSnapshotItem(BaseModel): ticker: str name: Optional[str] = None market_cap: Optional[float] = None close_price: Optional[float] = None shares_outstanding: Optional[float] = None sector: Optional[str] = None industry: Optional[str] = None exchange: Optional[str] = None snapshot_date: Optional[datetime] = None model_config = {"from_attributes": True} class UniverseScreenResponse(BaseModel): stocks: List[UniverseSnapshotItem] total_count: int page: int page_size: int total_pages: int snapshot_date: Optional[str] = None filters_applied: Dict[str, Any] = {} metadata: Dict[str, Any] = {} class TickerRegistryItem(BaseModel): ticker: str name: Optional[str] = None sector: Optional[str] = None industry: Optional[str] = None exchange: Optional[str] = None cik: Optional[str] = None is_active: bool = True model_config = {"from_attributes": True} class RegistryResponse(BaseModel): tickers: List[TickerRegistryItem] total_count: int page: int page_size: int total_pages: int class SnapshotBuildRequest(BaseModel): tickers: Optional[List[str]] = Field( None, description="Specific tickers to build. Omit for all registry tickers.", ) start_date: str = Field(..., description="Start date YYYY-MM-DD (e.g. 2015-01-01)") end_date: str = Field(..., description="End date YYYY-MM-DD (e.g. 2025-12-01)") force_rebuild: bool = Field( False, description="Delete existing snapshots for these tickers before rebuilding", )