fix: user

This commit is contained in:
2026-03-17 23:43:19 +08:00
parent ef8ce120bb
commit ca12e55554
8 changed files with 132 additions and 26 deletions

View File

@@ -15,7 +15,7 @@ logger = logging.getLogger(__name__)
async def assess_case(case_id: UUID, db: AsyncSession) -> list[FraudAssessment]:
"""Run rule-based assessment on all non-duplicate transactions and replace old results."""
"""Run rule-based assessment and replace old results."""
# Replace mode: rerun analysis for the same case should overwrite prior assessments
# instead of appending duplicated rows.
await db.execute(
@@ -26,23 +26,40 @@ async def assess_case(case_id: UUID, db: AsyncSession) -> list[FraudAssessment]:
result = await db.execute(
select(TransactionRecord)
.where(TransactionRecord.case_id == case_id)
.where(TransactionRecord.is_duplicate.is_(False))
.order_by(TransactionRecord.trade_time.asc())
)
transactions = list(result.scalars().all())
assessments: list[FraudAssessment] = []
for tx in transactions:
level, reason, exclude_reason = classify_transaction(tx)
if tx.is_duplicate:
level = ConfidenceLevel.low
reason = "该笔交易在交易归并中已标记为重复记录,属于同一笔交易的重复展示。"
exclude_reason = "交易归并已判定重复(订单号一致或人工标记为重复),不重复计入被骗金额。"
review_status = ReviewStatus.rejected
assessed_amount = 0
elif tx.is_transit:
level = ConfidenceLevel.low
reason = (
f"该笔交易在交易归并中已标记为中转({tx.source_app.value} -> {tx.counterparty_name}"
"属于本人账户间资金流转。"
)
exclude_reason = "交易归并已判定中转(本人账户间互转),不直接计入被骗金额。"
review_status = ReviewStatus.rejected
assessed_amount = 0
else:
level, reason, exclude_reason = classify_transaction(tx)
review_status = ReviewStatus.pending
assessed_amount = float(tx.amount) if level != ConfidenceLevel.low else 0
fa = FraudAssessment(
case_id=case_id,
transaction_id=tx.id,
confidence_level=level,
assessed_amount=float(tx.amount) if level != ConfidenceLevel.low else 0,
assessed_amount=assessed_amount,
reason=reason,
exclude_reason=exclude_reason,
review_status=ReviewStatus.pending,
review_status=review_status,
)
db.add(fa)
assessments.append(fa)