aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/reallocate_iam.py24
-rw-r--r--python/report_ops/cash.py27
-rw-r--r--sql/dawn.sql8
3 files changed, 34 insertions, 25 deletions
diff --git a/python/reallocate_iam.py b/python/reallocate_iam.py
index fd5a6c70..02db04a4 100644
--- a/python/reallocate_iam.py
+++ b/python/reallocate_iam.py
@@ -8,7 +8,7 @@ def gen_old_iam(fund, cob, conn):
"""'Finds and cancels old IAM uploads"""
with conn.cursor() as c:
c.execute(
- "DELETE FROM iam_tickets WHERE trade_date=%s AND fund=%s RETURNING *",
+ "DELETE FROM iams WHERE trade_date=%s AND fund=%s RETURNING *",
(
cob,
fund,
@@ -46,7 +46,7 @@ def gen_new_iam_offsets(fund, cob, conn):
),
)
for row in c:
- d = row._asdict() | {"offset": True, "folder": "M_CSH_CASH"}
+ d = row._asdict() | {"is_offset": True, "folder": "M_CSH_CASH"}
yield IAMDeal.from_dict(**d)
@@ -61,22 +61,25 @@ def gen_matured_iam(fund, cob, conn):
yield IAMDeal.from_dict(**d)
-def main(fund, cob, conn):
+def build_iam(fund, cob, conn, upload):
service = Service[fund]
for old_iam in gen_old_iam(fund, cob, conn):
service.push_trade(old_iam, "CANCEL")
- for new_iam in gen_iam(fund, cob, conn):
+ for new_iam in gen_new_iam(fund, cob, conn):
new_iam.stage()
if fund in ("BOWDST"):
- for new_iam_offset in gen_iam_offsets(fund, cob, conn):
+ for new_iam_offset in gen_new_iam_offsets(fund, cob, conn):
new_iam_offset.stage()
for iam in IAMDeal.commit(returning=True):
- service.push(iam, "NEW")
+ service.push_trade(iam, "NEW")
for update_iam in gen_matured_iam(fund, cob, conn):
- service.push(update_iam, "UPDATE")
+ service.push_trade(update_iam, "UPDATE")
conn.commit()
buf, dest = service.build_buffer()
- service.upload(buf, dest.name)
+ if upload:
+ pass
+ # service.upload(buf, dest.name)
+ service().clear()
if __name__ == "__main__":
@@ -91,6 +94,9 @@ if __name__ == "__main__":
type=datetime.date.fromisoformat,
default=prev_business_day(datetime.date.today()),
)
+ parser.add_argument(
+ "-n", "--no-upload", action="store_true", help="do not upload to CTM"
+ )
args = parser.parse_args()
for fund in ("BOWDST",):
- main(fund, args.cob, conn)
+ build_iam(fund, args.cob, conn, not args.no_upload)
diff --git a/python/report_ops/cash.py b/python/report_ops/cash.py
index e8f8d0cb..30795850 100644
--- a/python/report_ops/cash.py
+++ b/python/report_ops/cash.py
@@ -1,5 +1,6 @@
from dataclasses import field, dataclass
from serenitas.ops.trade_dataclasses import Deal, Fund
+from serenitas.ops.headers import DealType
from serenitas.analytics.dates import prev_business_day
import datetime
import pandas as pd
@@ -53,19 +54,24 @@ def get_custodian_account(fund, iam_broker):
@dataclass
-class IAMDeal(Deal, deal_type=None, table_name="iam_tickets"):
+class IAMDeal(Deal, deal_type=DealType.IAM, table_name="iams"):
trade_date: datetime.date = field(metadata={"globeop": "SettlementDate"})
folder: str = field(metadata={"globeop": "Folder"})
broker: str
- # counterparty: str = field(metadata={"globeop": "Counterparty"})
start_money: float = field(metadata={"globeop": "StartMoney"})
currency: str = field(metadata={"globeop": "Currency"})
fund: Fund
maturity: datetime.date = None
uploaded: bool = False
- booked_offset: bool = False
- dealid: str = None
- id: int = None
+ is_offset: bool = False
+ id: int = field(default=None, metadata={"insert": False})
+ dealid: str = field(
+ default=None,
+ metadata={
+ "insert": False,
+ "globeop": "Deal Id",
+ },
+ )
cash_account: str = field(
default=None,
metadata={"insert": False, "select": False, "globeop": "Cash Account"},
@@ -75,21 +81,18 @@ class IAMDeal(Deal, deal_type=None, table_name="iam_tickets"):
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["ExpirationDate"] = self.trade_date if action == "UPDATE" else None
+ obj["CallNoticeIndicator"] = "24H" if 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"
- (custodian, cash_account) = get_custodian_account(fund, self.broker)
+ (custodian, cash_account) = get_custodian_account(self.fund, self.broker)
obj = obj | {
"Custodian": custodian,
"Cash Account": cash_account,
- "Counterparty": get_counterparty(fund, self.broker),
+ "Counterparty": get_counterparty(self.fund, self.broker),
}
return obj
diff --git a/sql/dawn.sql b/sql/dawn.sql
index abffd870..baaf386e 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -4198,13 +4198,13 @@ CREATE TABLE iams (
id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
dealid varchar(28) NULL GENERATED ALWAYS AS ((('IAM_'::text || id::text))) STORED,
trade_date date NOT NULL,
- strategy strategy NOT NULL,
+ folder strategy NOT NULL,
broker text NOT NULL,
maturity date NULL,
amount numeric NOT NULL,
- currency currency,
- offset bool NOT NULL,
+ currency currency NOT NULL,
+ is_offset bool NOT NULL,
uploaded bool NOT NULL,
fund fund NOT NULL,
- CONSTRAINT iams_pk PRIMARY KEY (trade_date, strategy, broker, currency, offset, fund)
+ CONSTRAINT iams_pk PRIMARY KEY (trade_date, strategy, broker, currency, is_offset, fund)
); \ No newline at end of file