57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
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)
|