aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/reallocate_iam.py95
-rw-r--r--python/report_ops/cash.py51
2 files changed, 86 insertions, 60 deletions
diff --git a/python/reallocate_iam.py b/python/reallocate_iam.py
index 520b4291..05070ac0 100644
--- a/python/reallocate_iam.py
+++ b/python/reallocate_iam.py
@@ -3,59 +3,23 @@ from serenitas.ops.funds import Service
from report_ops.cash import IAMDeal
from serenitas.analytics.dates import prev_business_day
-_bowdst_iam_cp = {
- "BAML_ISDA": "BOANNY",
- "CS": "CSITLN",
- "GS": "GOLINY",
- "BNP": "BNPBNY",
- "MS": "MSCILN",
- "JPM": "JPCBNY",
- "GS_FCM": "GOLDNY",
-}
-_serenitas_iam_cp = {
- "BAML_ISDA": "BAMSNY",
- "CS": "CSFBBO",
- "GS": "GOLDNY",
- "BNP": "BNPBNY",
- "MS": "MSCSNY",
- "JPM": "JPCBNY",
- "GS_FCM": "GOLDNY",
-}
-
-
-def get_counterparty(fund, iam_broker):
- match fund:
- case "SERCGMAST":
- return _serenitas_iam_cp[iam_broker]
- case "BOWDST":
- return _bowdst_iam_cp[iam_broker]
-
-
-def get_custodian_account(fund, iam_broker):
- match fund, iam_broker:
- case ("SERCGMAST", "WF_FCM"):
- return ("WELLSFCM", "WFNSCLMFCM")
- case ("SERCGMAST", "BAML_FCM"):
- return ("BOMLCM", "V0NSCLMFCM")
- case ("BOWDST", "GS_FCM"):
- return ("GS", "057363418ICE-CDS")
- case ("SERCGMAST", _):
- return ("UMB", "159260.1")
- case ("BOWDST", _):
- return ("BNY", "751254")
-
-
-def globeop_mapping(fund, iam_broker):
- (custodian, cash_account) = get_custodian_account(fund, iam_broker)
- return {
- "custodian": custodian,
- "cash_account": cash_account,
- "counterparty": get_counterparty(fund, iam_broker),
- }
+def gen_old_iam(fund, cob, conn):
+ with conn.cursor() as c:
+ c.execute(
+ "SELECT * FROM iam_tickets WHERE trade_date=%s AND fund=%s",
+ (
+ cob,
+ fund,
+ ),
+ )
+ for row in c:
+ d = row._asdict()
+ yield IAMDeal.from_dict(**d).to_globeop("CANCEL")
+ c.execute("DELETE FROM iam_tickets WHERE trade_date=%s AND fund=%s")
-def gen_new_iam_deals(fund, cob, conn):
+def gen_new_iam(fund, cob, conn):
with conn.cursor() as c:
c.execute(
"SELECT * FROM list_iam(%s, %s)",
@@ -65,8 +29,8 @@ def gen_new_iam_deals(fund, cob, conn):
),
)
for row in c:
- d = row._asdict() | globeop_mapping(fund, row.broker)
- yield IAMDeal.from_dict(**d)
+ d = row._asdict()
+ yield IAMDeal.from_dict(**d).to_globeop("NEW")
def gen_new_iam_offsets(fund, cob, conn):
@@ -80,17 +44,29 @@ def gen_new_iam_offsets(fund, cob, conn):
),
)
for row in c:
- d = (
- row._asdict()
- | globeop_mapping(fund, row.broker)
- | {"offset": True, "folder": "M_CSH_CASH"}
- )
- return IAMDeal.from_dict(**d)
+ d = row._asdict() | {"offset": True, "folder": "M_CSH_CASH"}
+ yield IAMDeal.from_dict(**d).to_globeop("NEW")
+
+
+def gen_matured_iam(fund, cob, conn):
+ with conn.cursor() as c:
+ c.execute(
+ "SELECT * FROM iam_tickets WHERE maturity is NULL AND trade_date=%s AND fund=%s",
+ (prev_business_day(cob), fund),
+ )
+ for row in c:
+ yield IAMDeal.from_dict(**d).to_globeop("UPDATE")
+ c.execute(
+ "UPDATE iam_tickets SET maturity =%s WHERE maturity is NULL AND trade_date=%s AND fund=%s",
+ (cob, fund),
+ )
def main(fund, cob, conn):
service = Service[fund]
- for iam in gen_iam_deals(fund, cob, conn):
+ for iam in gen_old_iam(fund, cob, conn):
+ iam.stage()
+ for iam in gen_iam(fund, cob, conn):
iam.stage()
if fund in ("BOWDST"):
for iam in gen_iam_offsets(fund, cob, conn):
@@ -98,6 +74,7 @@ def main(fund, cob, conn):
for iam in IamDeal.commit():
service.push(iam)
buf, dest = service.build_buffer()
+ conn.commit()
if __name__ == "__main__":
diff --git a/python/report_ops/cash.py b/python/report_ops/cash.py
index 027cb350..e8f8d0cb 100644
--- a/python/report_ops/cash.py
+++ b/python/report_ops/cash.py
@@ -9,12 +9,55 @@ from .misc import get_dir, dt_from_fname
from .custodians import NT, UMB, BNY
from functools import partial
+_bowdst_iam_cp = {
+ "BAML_ISDA": "BOANNY",
+ "CS": "CSITLN",
+ "GS": "GOLINY",
+ "BNP": "BNPBNY",
+ "MS": "MSCILN",
+ "JPM": "JPCBNY",
+ "GS_FCM": "GOLDNY",
+}
+
+_serenitas_iam_cp = {
+ "BAML_ISDA": "BAMSNY",
+ "CS": "CSFBBO",
+ "GS": "GOLDNY",
+ "BNP": "BNPBNY",
+ "MS": "MSCSNY",
+ "JPM": "JPCBNY",
+ "GS_FCM": "GOLDNY",
+}
+
+
+def get_counterparty(fund, iam_broker):
+ match fund:
+ case "SERCGMAST":
+ return _serenitas_iam_cp[iam_broker]
+ case "BOWDST":
+ return _bowdst_iam_cp[iam_broker]
+
+
+def get_custodian_account(fund, iam_broker):
+ match fund, iam_broker:
+ case ("SERCGMAST", "WF_FCM"):
+ return ("WELLSFCM", "WFNSCLMFCM")
+ case ("SERCGMAST", "BAML_FCM"):
+ return ("BOMLCM", "V0NSCLMFCM")
+ case ("BOWDST", "GS_FCM"):
+ return ("GS", "057363418ICE-CDS")
+ case ("SERCGMAST", _):
+ return ("UMB", "159260.1")
+ case ("BOWDST", _):
+ return ("BNY", "751254")
+
@dataclass
class IAMDeal(Deal, deal_type=None, table_name="iam_tickets"):
trade_date: datetime.date = field(metadata={"globeop": "SettlementDate"})
folder: str = field(metadata={"globeop": "Folder"})
- counterparty: str = field(metadata={"globeop": "Counterparty"})
+ broker: str
+ # counterparty: str = field(metadata={"globeop": "Counterparty"})
start_money: float = field(metadata={"globeop": "StartMoney"})
currency: str = field(metadata={"globeop": "Currency"})
fund: Fund
@@ -42,6 +85,12 @@ class IAMDeal(Deal, deal_type=None, table_name="iam_tickets"):
obj["DealFunction"] = "OTC"
obj["MarginType"] = "Variation"
obj["Basis"] = "ACT/360"
+ (custodian, cash_account) = get_custodian_account(fund, self.broker)
+ obj = obj | {
+ "Custodian": custodian,
+ "Cash Account": cash_account,
+ "Counterparty": get_counterparty(fund, self.broker),
+ }
return obj