81 lines
3.2 KiB
Python
81 lines
3.2 KiB
Python
"""
|
||
银行流水相关Pydantic模型
|
||
"""
|
||
from datetime import date, datetime
|
||
from typing import Optional, List
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class BankTransactionBase(BaseModel):
|
||
"""银行流水基础模型"""
|
||
account_no: str = Field(..., description="账号")
|
||
account_name: str = Field(..., description="账户名")
|
||
bank_name: str = Field(..., description="开户行")
|
||
transaction_date: date = Field(..., description="交易日期")
|
||
transaction_time: datetime = Field(..., description="交易时间")
|
||
transaction_type: str = Field(..., description="交易类型")
|
||
transaction_amount: float = Field(..., description="交易金额")
|
||
balance: float = Field(..., description="余额")
|
||
counterparty_account_no: Optional[str] = Field(None, description="对手方账号")
|
||
counterparty_account_name: Optional[str] = Field(None, description="对手方账户名")
|
||
counterparty_bank_name: Optional[str] = Field(None, description="对手方开户行")
|
||
voucher_no: Optional[str] = Field(None, description="凭证号")
|
||
transaction_purpose: Optional[str] = Field(None, description="交易用途")
|
||
is_cross_border: bool = Field(..., description="是否跨境")
|
||
currency: str = Field(..., description="币种")
|
||
amount_cny: float = Field(..., description="折算人民币金额")
|
||
exchange_rate: float = Field(..., description="汇率")
|
||
is_large_amount: bool = Field(..., description="是否大额交易(>20万)")
|
||
is_suspicious: bool = Field(..., description="是否可疑交易")
|
||
suspicious_reason: Optional[str] = Field(None, description="可疑原因")
|
||
is_reconciled: bool = Field(..., description="是否已对账")
|
||
reconciled_time: Optional[datetime] = Field(None, description="对账时间")
|
||
|
||
|
||
class BankTransactionCreate(BankTransactionBase):
|
||
"""创建银行流水"""
|
||
pass
|
||
|
||
|
||
class BankTransactionUpdate(BaseModel):
|
||
"""更新银行流水"""
|
||
account_no: Optional[str] = None
|
||
account_name: Optional[str] = None
|
||
bank_name: Optional[str] = None
|
||
transaction_date: Optional[date] = None
|
||
transaction_time: Optional[datetime] = None
|
||
transaction_type: Optional[str] = None
|
||
transaction_amount: Optional[float] = None
|
||
balance: Optional[float] = None
|
||
counterparty_account_no: Optional[str] = None
|
||
counterparty_account_name: Optional[str] = None
|
||
counterparty_bank_name: Optional[str] = None
|
||
voucher_no: Optional[str] = None
|
||
transaction_purpose: Optional[str] = None
|
||
is_cross_border: Optional[bool] = None
|
||
currency: Optional[str] = None
|
||
amount_cny: Optional[float] = None
|
||
exchange_rate: Optional[float] = None
|
||
is_large_amount: Optional[bool] = None
|
||
is_suspicious: Optional[bool] = None
|
||
suspicious_reason: Optional[str] = None
|
||
is_reconciled: Optional[bool] = None
|
||
reconciled_time: Optional[datetime] = None
|
||
|
||
|
||
class BankTransactionResponse(BankTransactionBase):
|
||
"""银行流水响应模型"""
|
||
id: int
|
||
transaction_id: str
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
class BankTransactionListResponse(BaseModel):
|
||
"""银行流水列表响应模型"""
|
||
records: List[BankTransactionResponse]
|
||
total: int
|
||
page: int
|
||
size: int
|