diff options
| -rw-r--r-- | python/reallocate_iam.py | 24 | ||||
| -rw-r--r-- | python/report_ops/cash.py | 27 | ||||
| -rw-r--r-- | sql/dawn.sql | 8 |
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 |
