from dataclasses import field, dataclass from serenitas.ops.trade_dataclasses import Deal, Fund import datetime @dataclass class IAMDeal(Deal, deal_type=None, table_name="iam_tickets"): trade_date: datetime.date = field(metadata={"globeop": "SettlementDate"}) action: str = field(metadata={"globeop": "Action"}) strategy: str = field(metadata={"globeop": "Folder"}) counterparty: str = field(metadata={"globeop": "Counterparty"}) maturity: datetime.date start_money: float = field(metadata={"globeop": "StartMoney"}) currency: str = field(metadata={"globeop": "Currency"}) booked_offset: bool uploaded: bool fund: Fund dealid: str = field(metadata={"insert": False}) id: int = field(metadata={"insert": False}) def to_globeop(self, action): obj = super().to_globeop(action) obj["Deal Type"] = "IamDeal" obj["ExpirationDate"] = self.trade_date if self.action == "UPDATE" else None obj["CallNoticeIndicator"] = "24H" if self.action == "NEW" else None obj["TransactionIndicator"] = ("DEPOSIT" if obj["StartMoney"] > 0 else "LOAN",) obj["StartMoney"] = abs(obj["StartMoney"]) obj["Folder"] = ( "M_CSH_CASH" if obj["strategy"] == "CSH_CASH" else obj["strategy"] ) obj["DealFunction"] = "OTC" obj["MarginType"] = "Variation" obj["Basis"] = "ACT/360" return obj