diff options
| -rw-r--r-- | python/globeop_monitor.py | 24 | ||||
| -rw-r--r-- | python/report_ops/utils.py | 35 |
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=( |
