""" Database model for SEC filings (8-K, 6-K, 20-F, 40-F, 10-K, 10-Q, etc.) """ from sqlalchemy import Column, String, JSON, Index from sqlalchemy.dialects.postgresql import UUID, TIMESTAMP from datetime import datetime, timezone import uuid from app.core.database import Base class SECFiling(Base): __tablename__ = "sec_filings" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) ticker = Column(String(10), nullable=False, index=True) cik = Column(String(20), nullable=False, index=True) accession_number = Column(String(30), nullable=False, unique=True, index=True) form_type = Column(String(20), nullable=False, index=True) filing_date = Column(TIMESTAMP(timezone=True), nullable=False) primary_document = Column(String(256)) primary_document_url = Column(String(512)) filing_description = Column(String(512)) documents_json = Column(JSON) # Cached document list indexed_at = Column(TIMESTAMP(timezone=True)) created_at = Column(TIMESTAMP(timezone=True), default=lambda: datetime.now(timezone.utc)) updated_at = Column(TIMESTAMP(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc)) __table_args__ = ( Index("idx_sec_filings_ticker_form", "ticker", "form_type"), Index("idx_sec_filings_ticker_date", "ticker", "filing_date"), Index("idx_sec_filings_cik_form", "cik", "form_type"), )