feat: persist finance daily summaries

This commit is contained in:
SmartUp Developer
2026-07-03 17:38:54 +08:00
parent 1a1a663b6a
commit eba209395d
7 changed files with 1115 additions and 47 deletions
@@ -0,0 +1,30 @@
"""Finance daily summary snapshot model.
Stores pre-computed daily reconciliation results in a single JSON column.
This keeps the schema stable: adding new summary fields requires no migration.
"""
from datetime import date, datetime, timezone
from typing import Optional
from sqlalchemy import Boolean, Date, DateTime, Integer, Text, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
def _utcnow() -> datetime:
return datetime.now(timezone.utc)
class FinanceDailySummary(Base):
__tablename__ = "finance_daily_summaries"
id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True)
stat_date: Mapped[date] = mapped_column(Date, unique=True, nullable=False, index=True)
summary_json: Mapped[str] = mapped_column(Text, nullable=False)
success: Mapped[bool] = mapped_column(Boolean, default=False, index=True)
computed_at: Mapped[datetime] = mapped_column(DateTime, default=_utcnow)
__table_args__ = (
UniqueConstraint("stat_date", name="uq_finance_summary_date"),
)