document-processor/app/models/extracted_field_version.py

39 lines
2.1 KiB
Python

from datetime import datetime, date
from decimal import Decimal
from sqlalchemy import Date, DateTime, ForeignKey, Integer, Numeric, String, Text, UniqueConstraint
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.db.base import Base
class ExtractedFieldVersion(Base):
__tablename__ = "extracted_field_versions"
__table_args__ = (
UniqueConstraint("document_id", "version_number", name="uq_extracted_field_versions_doc_ver"),
)
id: Mapped[int] = mapped_column(primary_key=True, index=True)
document_id: Mapped[int] = mapped_column(ForeignKey("documents.id"), nullable=False, index=True)
version_number: Mapped[int] = mapped_column(Integer, nullable=False)
merchant_raw: Mapped[str | None] = mapped_column(Text, nullable=True)
merchant_normalized: Mapped[str | None] = mapped_column(Text, nullable=True)
transaction_date: Mapped[date | None] = mapped_column(Date, nullable=True)
transaction_time: Mapped[str | None] = mapped_column(String(50), nullable=True)
subtotal: Mapped[Decimal | None] = mapped_column(Numeric(18, 4), nullable=True)
tax: Mapped[Decimal | None] = mapped_column(Numeric(18, 4), nullable=True)
total: Mapped[Decimal | None] = mapped_column(Numeric(18, 4), nullable=True)
currency: Mapped[str | None] = mapped_column(String(20), nullable=True)
payment_method: Mapped[str | None] = mapped_column(String(100), nullable=True)
receipt_number: Mapped[str | None] = mapped_column(String(100), nullable=True)
location: Mapped[str | None] = mapped_column(Text, nullable=True)
counterparty: Mapped[str | None] = mapped_column(Text, nullable=True)
extra_json: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
created_by: Mapped[str | None] = mapped_column(String(100), nullable=True)
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, nullable=False)
document: Mapped["Document"] = relationship(back_populates="extracted_field_versions")