from __future__ import annotations from sqlalchemy import String from sqlalchemy.orm import Mapped, mapped_column from app.core.config import settings from app.db.base import Base from app.db.types import AuditMixin, IdMixin class Currency(IdMixin, AuditMixin, Base): """Справочник валют (RUB, CNY, USD). Сид — в первой миграции.""" __tablename__ = "currency" __table_args__ = ( {"schema": settings.DATABASE_SCHEMA} if settings.DATABASE_SCHEMA else {} ) code: Mapped[str] = mapped_column(String(3), unique=True, nullable=False) name: Mapped[str] = mapped_column(String(100), nullable=False) class Portfolio(IdMixin, AuditMixin, Base): """Портфели ДРРК: UW (андеррайтинг) и SALES (продажи).""" __tablename__ = "portfolio" __table_args__ = ( {"schema": settings.DATABASE_SCHEMA} if settings.DATABASE_SCHEMA else {} ) code: Mapped[str] = mapped_column(String(20), unique=True, nullable=False) name: Mapped[str] = mapped_column(String(255), nullable=False) class OperationCode: """Коды справочника operation_type (сиды — в миграциях).""" BUY = "BUY" SELL = "SELL" CPN = "CPN" # купон, вручную NOM = "NOM" # амортизация, вручную VAL = "VAL" # смысл уточняется (Q7) UWFEE = "UWFEE" # комиссия за андеррайтинг, вручную, только UW (D22) ADJ = "ADJ" # корректировка, вручную (Q28) class OperationType(IdMixin, AuditMixin, Base): """Типы операций, см. OperationCode.""" __tablename__ = "operation_type" __table_args__ = ( {"schema": settings.DATABASE_SCHEMA} if settings.DATABASE_SCHEMA else {} ) code: Mapped[str] = mapped_column(String(20), unique=True, nullable=False) name: Mapped[str] = mapped_column(String(255), nullable=False)