feat(transaction)

This commit is contained in:
2026-06-23 14:40:20 +08:00
parent 7ba6a32015
commit b46265cade
+10 -8
View File
@@ -1,7 +1,7 @@
from datetime import UTC, datetime from datetime import UTC, datetime
from decimal import Decimal from decimal import Decimal
from enum import StrEnum from enum import StrEnum
from typing import Annotated, Self from typing import Annotated, Literal, Self
from pydantic import BaseModel, Field, model_validator from pydantic import BaseModel, Field, model_validator
from pydantic_extra_types.country import CountryAlpha2 from pydantic_extra_types.country import CountryAlpha2
@@ -128,33 +128,35 @@ class BaseTransaction(BaseModel):
class MiscInTransaction(BaseTransaction): class MiscInTransaction(BaseTransaction):
"""其他收入交易""" """其他收入交易"""
txn_scene = "MISC_IN" txn_scene: Annotated[Literal["MISC_IN"], "交易场景"] = "MISC_IN"
dc_flag: Annotated[DcFlag, "借贷方向"] = DcFlag.CREDIT
class MiscOutTransaction(BaseTransaction): class MiscOutTransaction(BaseTransaction):
"""其他支出交易""" """其他支出交易"""
txn_scene = "MISC_OUT" txn_scene: Annotated[Literal["MISC_OUT"], "交易场景"] = "MISC_OUT"
dc_flag: Annotated[DcFlag, "借贷方向"] = DcFlag.DEBIT
class PaymentTransaction(MiscOutTransaction): class PaymentTransaction(MiscOutTransaction):
"""支付交易""" """支付交易"""
txn_scene = "PAYMENT" txn_scene: Annotated[Literal["PAYMENT"], "交易场景"] = "PAYMENT"
merchant_name: Annotated[str | None, "商户名称", Field(default=None)] merchant_name: Annotated[str | None, "商户名称", Field(default=None)]
class EcomPaymentTransaction(PaymentTransaction): class EcomPaymentTransaction(PaymentTransaction):
"""电子商务支付交易""" """电子商务支付交易"""
txn_scene = "ECOM_PAYMENT" txn_scene: Annotated[Literal["ECOM_PAYMENT"], "交易场景"] = "ECOM_PAYMENT"
order_id: Annotated[str | None, "订单ID", Field(default=None)] order_id: Annotated[str | None, "订单ID", Field(default=None)]
class PosPaymentTransaction(PaymentTransaction): class PosPaymentTransaction(PaymentTransaction):
"""POS支付交易""" """POS支付交易"""
txn_scene = "POS_PAYMENT" txn_scene: Annotated[Literal["POS_PAYMENT"], "交易场景"] = "POS_PAYMENT"
geo: Annotated[ geo: Annotated[
tuple[CountryAlpha2] | tuple[CountryAlpha2, str] | None, "地理信息", Field(default=None) tuple[CountryAlpha2] | tuple[CountryAlpha2, str] | None, "地理信息", Field(default=None)
] ]
@@ -163,7 +165,7 @@ class PosPaymentTransaction(PaymentTransaction):
class ATMTransaction(BaseTransaction): class ATMTransaction(BaseTransaction):
"""ATM交易""" """ATM交易"""
txn_scene = "ATM" txn_scene: Annotated[Literal["ATM"], "交易场景"] = "ATM"
geo: Annotated[ geo: Annotated[
tuple[CountryAlpha2] | tuple[CountryAlpha2, str] | None, "地理信息", Field(default=None) tuple[CountryAlpha2] | tuple[CountryAlpha2, str] | None, "地理信息", Field(default=None)
] ]
@@ -172,7 +174,7 @@ class ATMTransaction(BaseTransaction):
class TransferTransaction(BaseTransaction): class TransferTransaction(BaseTransaction):
"""转账交易""" """转账交易"""
txn_scene = "TRANSFER" txn_scene: Annotated[Literal["TRANSFER"], "交易场景"] = "TRANSFER"
type Transaction = Annotated[ type Transaction = Annotated[