from decimal import Decimal from uuid import UUID, uuid4 from pydantic import BaseModel, Field, field_validator class RecurringCashflow(BaseModel): id: UUID = Field(default_factory=uuid4) start_date: str = "" end_date: str = "" frequency: str = "monthly" amount: Decimal = Field(default=Decimal("0")) category: str = "" @field_validator("frequency") @classmethod def _frequency_known(cls, v: str) -> str: if v not in {"daily", "weekly", "monthly", "yearly"}: raise ValueError(f"unknown frequency: {v}") return v @field_validator("amount") @classmethod def _amount_nonzero(cls, v: Decimal) -> Decimal: if v == 0: raise ValueError("amount must be non-zero") return v