from typing import Optional, Dict, Any from pydantic import BaseModel class IncomingOrderInfo(BaseModel): cash_resp_desc: Optional[str] = None ref_amt: Optional[float] = None class IncomingPayload(BaseModel): remark: Optional[str] = None event_define_no: Optional[str] = None trans_amt: Optional[float] = None settlement_amt: Optional[float] = None out_trans_id: Optional[str] = None hf_seq_id: Optional[str] = None namespace: Optional[str] = None trans_order_info: Optional[IncomingOrderInfo] = None extra: Optional[Dict[str, Any]] = None def idempotent_key(self) -> Optional[str]: return self.out_trans_id or self.hf_seq_id def cash_resp_desc(self) -> str: v = None if self.trans_order_info: v = self.trans_order_info.cash_resp_desc return v or "" def actual_ref_amt(self) -> Optional[float]: extra_val = None if self.extra and isinstance(self.extra, dict): extra_val = self.extra.get("actual_ref_amt") return extra_val or (self.trans_order_info.ref_amt if self.trans_order_info and self.trans_order_info.ref_amt is not None else self.settlement_amt)