""" 银行流水相关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