aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/headers.py1
-rw-r--r--python/trade_dataclasses.py77
2 files changed, 78 insertions, 0 deletions
diff --git a/python/headers.py b/python/headers.py
index 85aebcae..6fb4a41f 100644
--- a/python/headers.py
+++ b/python/headers.py
@@ -11,6 +11,7 @@ class DealType(Enum):
FxSwap = "FXSWAP"
Fx = "FX"
TRS = "TRS"
+ IRS = "IRS"
HEADERS_PRE = [
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index e80e40d4..713e9775 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -913,3 +913,80 @@ class TRSDeal(
obj["Custodian"] = "BAC"
obj.update(d)
return obj
+
+
+@dataclass
+class IRSDeal(
+ # MTMDeal,
+ Deal,
+ deal_type=DealType.IRS,
+ table_name="irs",
+ insert_ignore=("id", "dealid", "orig_cp", "product_type"),
+):
+ fund: str = field(
+ metadata={"mtm": "Account Abbreviation"},
+ )
+ portfolio: str = field(metadata={"globeop": "Portfolio"})
+ folder: str = field(metadata={"globeop": "Strategy"})
+ cash_account: str
+ cp_code: str = field(metadata={"globeop": "Counterparty"})
+ trade_date: datetime.date = field(metadata={"globeop": "TradeDate"})
+ effective_date: datetime.date
+ maturity_date: datetime.date
+ payreceive: bool
+ fixed_rate: float
+ fixed_daycount: str
+ fixed_payment_freq: str
+ fixed_bdc: str
+ notional: float
+ float_index: str
+ float_daycount: str
+ float_payment_freq: str
+ float_bdc: str
+ float_arrears: bool
+ float_fixing_freq: str
+ pay_interest_calc_method: str
+ clearing_facility: str
+ swap_type: str
+ cleared_trade_id: str
+ id: int = field(default=None, metadata={"insert": False})
+ dealid: str = field(default=None, metadata={"insert": False, "mtm": "Swap ID"})
+
+ def to_globeop(self):
+ obj = self.serialize("globeop")
+ if obj["payreceive"]:
+ key1, key2 = "Receive", "Pay"
+ else:
+ key1, key2 = "Pay", "Receive"
+ d = {
+ f"{key1}LegRateType": "Floating",
+ f"{key1}FloatRate": obj["float_index"],
+ f"{key1}Daycount": obj["float_daycount"],
+ f"{key1}Frequency": obj["float_payment_freq"],
+ f"{key1}PaymentBDC": obj["float_bdc"],
+ f"{key1}EffectiveDate": obj["effective_date"],
+ f"{key1}MaturityDate": obj["maturity_date"],
+ f"{key1}Notional": obj["notional"],
+ f"{key1}ResetArrears": "Y" if obj["float_arrears"] else "N",
+ f"{key1}Currency": obj["currency"],
+ f"{key1}FixingFrequency": obj["float_fixing_freq"],
+ f"{key1}InterestCalcMethod": obj["pay_interest_calc_method"],
+ f"{key1}LegRateType": "Fixed",
+ f"{key1}FixedRate": obj["fixed_rate"],
+ f"{key1}Daycount": obj["fixed_daycount"],
+ f"{key1}Frequency": obj["fixed_payment_freq"],
+ f"{key1}PaymentBDC": obj["fixed_bdc"],
+ f"{key1}EffectiveDate": obj["effective_date"],
+ f"{key1}MaturityDate": obj["maturity_date"],
+ f"{key1}Notional": obj["notional"],
+ f"{key1}Currency": obj["currency"],
+ }
+ obj["SwapType"] = "OIS_SWAP"
+ obj["DealType"] = "InterestRateSwapDeal"
+ obj["Action"] = "NEW" # Need to figure this out
+ obj["Client"] = "Serenitas"
+ obj["State"] = "Valid"
+ obj["Custodian"] = "BOMLCM"
+ obj["ClearingFacility"] = "LCH_LTD"
+ obj.update(d)
+ return obj