aboutsummaryrefslogtreecommitdiffstats
path: root/python/monthend_recon_bowdst.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/monthend_recon_bowdst.py')
-rw-r--r--python/monthend_recon_bowdst.py55
1 files changed, 36 insertions, 19 deletions
diff --git a/python/monthend_recon_bowdst.py b/python/monthend_recon_bowdst.py
index ec966f72..6b82f15e 100644
--- a/python/monthend_recon_bowdst.py
+++ b/python/monthend_recon_bowdst.py
@@ -10,6 +10,7 @@ import datetime
from pandas.tseries.offsets import BDay
import numpy as np
import pandas_market_calendars as mcal
+from dateutil.relativedelta import relativedelta
def get_dir(date):
@@ -24,7 +25,7 @@ def clear_date(date, conn):
def load_val_report(date, conn):
- p = get_dir(date) / f"Asset_Detail.csv"
+ p = get_dir(date) / f"Asset Detail.csv"
df = pd.read_csv(
p, thousands=",", parse_dates=["As Of Date", "Maturity Date", "Report Run Date"]
)
@@ -116,21 +117,23 @@ def sums(df):
return df[["db_notional", "admin_notional"]].sum()
-def recon(hierarchy_file, date):
- df = pd.read_excel(hierarchy_file)
- bowd_bond_trades = df[df["CUSIP"].notnull()]
+def recon(date, conn):
+ df = pd.read_sql_query(
+ "SELECT * FROM bowdst_val where as_of_date=%s", conn, params=(date,)
+ )
+ bowd_bond_trades = df[df["cusip"].notnull()]
bond_asset_classes = ["Subprime", "CRT", "CLO"]
bond_trades_combined = []
for asset in bond_asset_classes:
db_bond_trades = pd.read_sql_query(
f"select * from risk_positions(%s, %s, 'BOWDST')",
- dawndb,
+ conn,
params=(date, asset),
)
bond_trades = bowd_bond_trades.merge(
db_bond_trades,
- left_on="Mellon Security ID",
+ left_on="mellon_security_id",
right_on="identifier",
how="right",
)[
@@ -139,8 +142,8 @@ def recon(hierarchy_file, date):
"identifier",
"notional",
"factor",
- "Shares/Par",
- "Base Market Value",
+ "current_notional",
+ "base_market_value",
"usd_market_value",
]
]
@@ -148,8 +151,8 @@ def recon(hierarchy_file, date):
bond_trades.rename(
columns={
"usd_market_value": "db_mv",
- "Shares/Par": "admin_notional",
- "Base Market Value": "admin_mv",
+ "current_notional": "admin_notional",
+ "base_market_value": "admin_mv",
},
inplace=True,
)
@@ -158,25 +161,25 @@ def recon(hierarchy_file, date):
tranche_trades = pd.read_sql_query(
f"select security_desc, maturity, orig_attach, orig_detach, sum(notional * tranche_factor) as db_notional, sum(admin_notional) as admin_notional, sum(serenitas_clean_nav) as db_mv, sum(admin_clean_nav) as admin_mv from tranche_risk_bowdst where date=%s group by security_desc, maturity, orig_attach, orig_detach ;",
- dawndb,
+ conn,
params=(last_bus_day(date),),
)
cdx_trades = pd.read_sql_query(
f"select security_id, security_desc, index, series, version, maturity, globeop_notional as admin_notional, notional * factor as db_notional, clean_nav as db_mv, globeop_nav as admin_mv from list_cds_marks(%s, null, 'BOWDST')",
- dawndb,
+ conn,
params=(date,),
)
cdx_swaption_trades = pd.read_sql_query(
f"select security_id, option_type, strike, expiration_date, sum(serenitas_nav) as db_mv, sum(globeop_nav) as admin_mv from list_swaption_positions_and_risks(%s, 'BOWDST') group by security_id, option_type, strike, expiration_date;",
- dawndb,
+ conn,
params=(date,),
)
ir_swaption_trades = pd.read_sql_query(
"SELECT deal_id, option_type, strike, SECURITY_Id, expiration_date, notional AS db_notional, current_notional AS admin_notional, nav AS db_mv, base_market_value AS admin_mv FROM list_ir_swaption_positions(%s, 'BOWDST') LEFT JOIN bowdst_val ON deal_id=link_ref WHERE as_of_date=%s;",
- dawndb,
+ conn,
params=(last_bus_day(date), date),
)
@@ -231,13 +234,27 @@ def last_bus_day(date):
return date
-parser = argparse.ArgumentParser()
-parser.add_argument("end_date", type=datetime.date.fromisoformat)
-args = parser.parse_args()
+def download_reports(date: datetime.date):
+ target_directory = get_dir(date)
+
+ if not target_directory.exists():
+ target_directory.mkdir()
+
+ em = ExchangeMessage()
+
+ for msg in em.get_msgs(path=["Month End Recon", "BNY"]):
+ # We are getting reports the month after
+ if msg.datetime_received.month == date.month + 1:
+ for attachment in msg.attachments:
+ (target_directory / attachment.name).write_bytes(attachment.content)
+
if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument("end_date", type=datetime.date.fromisoformat)
+ args = parser.parse_args()
+
dawndb = dbconn("dawndb")
date = args.end_date
load_val_report(date, dawndb)
- hierarchy_file = get_dir(date) / "hierarchy.xls"
- recon(hierarchy_file, date)
+ recon(date, dawndb)