from uuid import UUID from decimal import Decimal from sqlalchemy import select, func from sqlalchemy.ext.asyncio import AsyncSession from app.models.case import Case from app.models.assessment import FraudAssessment, ReviewStatus async def recalculate_case_total(case_id: UUID, db: AsyncSession) -> float: """Recalculate and persist the total confirmed fraud amount for a case.""" result = await db.execute( select(func.coalesce(func.sum(FraudAssessment.assessed_amount), 0)) .where(FraudAssessment.case_id == case_id) .where(FraudAssessment.review_status == ReviewStatus.confirmed) ) total = float(result.scalar() or 0) case = await db.get(Case, case_id) if case: case.total_amount = total await db.flush() return total