from datetime import date from decimal import Decimal from sqlalchemy import Date, ForeignKey, Numeric from sqlalchemy.orm import Mapped, mapped_column, relationship from src.models.common import BaseModelDb class CategoryBudgetDb(BaseModelDb): """Budget amount for a category, optionally bounded to a time window. Satellite table to ``category``: one category may have several budgets (e.g. one per month). ``valid_from``/``valid_to`` are nullable; ``None`` means unbounded on that side. """ __tablename__ = "category_budget" id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) category_id: Mapped[int] = mapped_column(ForeignKey("category.id"), nullable=False) amount_eur: Mapped[Decimal] = mapped_column(Numeric(12, 2), nullable=False) valid_from: Mapped[date | None] = mapped_column(Date, nullable=True, default=None) valid_to: Mapped[date | None] = mapped_column(Date, nullable=True, default=None) # relationship category = relationship("CategoryDb", back_populates="budgets")