diff options
Diffstat (limited to 'python/trade_dataclasses.py')
| -rw-r--r-- | python/trade_dataclasses.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index be3bef07..4d910578 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -827,3 +827,61 @@ class FxSwapDeal( bbg_ticket_id=line["bbg_ticket_id"], **d, ) + + +@dataclass +class TRSDeal( + MTMDeal, + Deal, + deal_type=DealType.TRS, + table_name="trs", + insert_ignore=("id", "dealid", "orig_cp", "currency", "product_type"), +): + id: int = field(default=None, metadata={"insert": False}) + dealid: str = field(default=None, metadata={"insert": False, "mtm": "Swap ID"}) + fund: str = field( + metadata={"mtm": "Account Abbreviation"}, + ) + portfolio: str + folder: str + cash_account: str + cp_code: str + trade_date: datetime.date + effective_date: datetime.date + maturity_date: datetime.date + funding_index: str + buysell: bool + underlying_security: str + price: float + accrued: float + funding_freq: str + funding_daycount: str + funding_payment_roll_convention: str + funding_arrears: bool + asset_freq: str + asset_daycount: str + asset_payment_roll_convention: str + initial_margin_percentage: float + notional: float + currency: str + interest_calc_method: str + compound_avg_frequency: str + fixing_frequency: str + cpty_id: str + + def to_globeop(self): + obj = self.serialize("globeop") + obj["TerminationAmount"] *= self.factor + obj["FeesPaid"] = ( + -obj["termination_fee"] if obj["termination_fee"] < 0 else None + ) + obj["FeesReceived"] = ( + obj["termination_fee"] if obj["termination_fee"] > 0 else None + ) + obj["Action"] = "UPDATE" + obj["Client"] = _client_name[obj["fund"]] + obj["SubAction"] = "Termination" + if self.termination_cp != self.orig_cp: + obj["AssignedCounterparty"] = self.termination_cp + obj["PartialTermination"] = "Y" if self.partial_termination else "N" + return obj |
