aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/globeop_monitor.py24
-rw-r--r--python/report_ops/utils.py35
2 files changed, 56 insertions, 3 deletions
diff --git a/python/globeop_monitor.py b/python/globeop_monitor.py
index 42a7a184..af97e3d3 100644
--- a/python/globeop_monitor.py
+++ b/python/globeop_monitor.py
@@ -7,7 +7,7 @@ from serenitas.utils.db import dbconn
from serenitas.ops.trade_dataclasses import WireDeal
from serenitas.ops.funds import Service
-from report_ops.utils import GFSMonitor, check_cleared_cds
+from report_ops.utils import GFSMonitor, check_cleared_cds, BondMarkMonitor
from collateral.common import CASH_STRATEGY_MAPPING, STRATEGY_CASH_MAPPING
@@ -62,6 +62,21 @@ def reallocate_strategy_cash(date, fund, conn):
service().clear()
+def check_manager_marks(date, fund, conn):
+ with conn.cursor() as c:
+ c.execute(
+ """SELECT periodenddate, invid, gfstranid1 as geneva_identifier, pricelist FROM valuation_reports vr WHERE periodenddate =%s AND fund=%s AND strat::text LIKE 'MTG_%%' AND pricelist != 'MANAGER';""",
+ (
+ date,
+ fund,
+ ),
+ )
+ for row in c:
+ BondMarkMonitor.stage(row._asdict())
+ BondMarkMonitor.email(fund)
+ BondMarkMonitor._staging_queue.clear()
+
+
if __name__ == "__main__":
import argparse
@@ -82,5 +97,8 @@ if __name__ == "__main__":
):
check_gfs(args.cob, fund, conn)
check_cleared_cds(args.cob, fund, conn)
- for fund in ("BOWDST",):
- reallocate_strategy_cash(args.cob, fund, conn)
+ match fund:
+ case "SERCGMAST":
+ check_manager_marks(args.cob, "SERCGMAST", conn)
+ case "BOWDST":
+ reallocate_strategy_cash(args.cob, "BOWDST", conn)
diff --git a/python/report_ops/utils.py b/python/report_ops/utils.py
index fef8083b..eec23d98 100644
--- a/python/report_ops/utils.py
+++ b/python/report_ops/utils.py
@@ -156,6 +156,41 @@ class GFSMonitor(
)
+class BondMarkMonitor(
+ Monitor,
+ headers=(
+ "periodenddate",
+ "invid",
+ "geneva_identifier",
+ "pricelist",
+ ),
+ num_format=[],
+):
+ @classmethod
+ def email(cls, fund):
+ if not cls._staging_queue:
+ return
+ cls._em.send_email(
+ f"Incorrectly marked trades: {fund}",
+ HTMLBody(
+ f"""
+<html>
+ <head>
+ <style>
+ table, th, td {{ border: 1px solid black; border-collapse: collapse;}}
+ th, td {{ padding: 5px; }}
+ </style>
+ </head>
+ <body>
+ Good morning,<br><br>Could you please use Manager marks for the below trades:<br><br>{cls.to_tabulate()}
+ </body>
+</html>"""
+ ),
+ to_recipients=_valuation_recipients[fund],
+ cc_recipients=_cc_recipients[fund],
+ )
+
+
class CDXQuoteMonitor(
Monitor,
headers=(