"""AccountingEntry SQLModel model for proposed accounting entries.""" from datetime import datetime from decimal import Decimal from enum import Enum from typing import Optional, TYPE_CHECKING from sqlmodel import SQLModel, Field, Relationship if TYPE_CHECKING: from .receipt import Receipt class EntryType(str, Enum): """Type of accounting entry.""" DEBIT = "debit" CREDIT = "credit" class AccountingEntry(SQLModel, table=True): """Proposed accounting entry for a receipt.""" __tablename__ = "accounting_entries" id: Optional[int] = Field(default=None, primary_key=True) receipt_id: int = Field(foreign_key="receipts.id", index=True) # Account entry_type: EntryType account_code: str = Field(max_length=20) # e.g., 6022, 5311, 4426 account_name: Optional[str] = Field(default=None, max_length=200) # Cache: "Cheltuieli combustibil" # Amount amount: Decimal = Field(decimal_places=2, max_digits=15) # Analytics (optional) partner_id: Optional[int] = Field(default=None) cost_center_id: Optional[int] = Field(default=None) # Entry metadata is_auto_generated: bool = Field(default=True) # True if system-generated modified_by: Optional[str] = Field(default=None, max_length=100) # Username if modified modified_at: Optional[datetime] = Field(default=None) # Order for display sort_order: int = Field(default=0) # Relationship receipt: Optional["Receipt"] = Relationship(back_populates="entries")