DRRK/app/db/models/reference.py

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)