diff --git a/backend/app/routers/broker.py b/backend/app/routers/broker.py index e9d757d..ecc98d7 100644 --- a/backend/app/routers/broker.py +++ b/backend/app/routers/broker.py @@ -216,22 +216,36 @@ def _normalize_groww_funds(data: dict | None) -> dict: available = payload.get("available") if isinstance(payload.get("available"), dict) else {} equity = payload.get("equity") if isinstance(payload.get("equity"), dict) else {} equity_available = equity.get("available") if isinstance(equity.get("available"), dict) else {} + equity_margin = ( + payload.get("equity_margin_details") + if isinstance(payload.get("equity_margin_details"), dict) + else {} + ) cash = _first_number( + payload.get("clear_cash"), payload.get("cash"), payload.get("available_cash"), payload.get("available_balance"), + payload.get("available_margin"), available.get("cash"), available.get("available_cash"), + available.get("available_margin"), available.get("balance"), equity.get("cash"), + equity.get("available_margin"), equity_available.get("cash"), equity_available.get("live_balance"), + equity_margin.get("cnc_balance_available"), + equity_margin.get("mis_balance_available"), ) net = _first_number( payload.get("net"), payload.get("total"), payload.get("margin_available"), + payload.get("available_margin"), + payload.get("clear_cash"), + payload.get("utilised_margin"), equity.get("net"), cash, ) @@ -239,20 +253,32 @@ def _normalize_groww_funds(data: dict | None) -> dict: payload.get("withdrawable"), payload.get("available_to_withdraw"), available.get("withdrawable"), + equity_margin.get("cnc_balance_available"), + payload.get("clear_cash"), cash, ) balance = _first_number( payload.get("balance"), payload.get("available_balance"), available.get("balance"), + payload.get("clear_cash"), cash, ) + utilized = _first_number( + payload.get("utilized"), + payload.get("utilised"), + payload.get("utilised_margin"), + payload.get("used_margin"), + equity_margin.get("utilised_margin"), + default=0.0, + ) return { "net": net, "cash": cash, "withdrawable": withdrawable, "balance": balance, + "utilized": utilized, "available": { "live_balance": cash, "cash": cash, diff --git a/backend/app/services/groww_service.py b/backend/app/services/groww_service.py index efa05b2..ddc0c2f 100644 --- a/backend/app/services/groww_service.py +++ b/backend/app/services/groww_service.py @@ -98,7 +98,12 @@ def _first_data(payload: dict | None): if not isinstance(payload, dict): return payload data = payload.get("data") - return data if data is not None else payload + if data is not None: + return data + envelope = payload.get("payload") + if envelope is not None: + return envelope + return payload def _auth_headers(access_token: str) -> dict: diff --git a/backend/app/services/live_equity_service.py b/backend/app/services/live_equity_service.py index 2cff204..806204b 100644 --- a/backend/app/services/live_equity_service.py +++ b/backend/app/services/live_equity_service.py @@ -86,22 +86,35 @@ def _normalize_groww_funds(data: dict | None) -> dict: available = payload.get("available") if isinstance(payload.get("available"), dict) else {} equity = payload.get("equity") if isinstance(payload.get("equity"), dict) else {} equity_available = equity.get("available") if isinstance(equity.get("available"), dict) else {} + equity_margin = ( + payload.get("equity_margin_details") + if isinstance(payload.get("equity_margin_details"), dict) + else {} + ) cash = _first_numeric( + payload.get("clear_cash"), payload.get("cash"), payload.get("available_cash"), payload.get("available_balance"), + payload.get("available_margin"), available.get("cash"), available.get("available_cash"), + available.get("available_margin"), available.get("balance"), equity.get("cash"), + equity.get("available_margin"), equity_available.get("cash"), equity_available.get("live_balance"), + equity_margin.get("cnc_balance_available"), + equity_margin.get("mis_balance_available"), ) net = _first_numeric( payload.get("net"), payload.get("total"), payload.get("margin_available"), + payload.get("available_margin"), + payload.get("clear_cash"), equity.get("net"), cash, ) @@ -109,12 +122,15 @@ def _normalize_groww_funds(data: dict | None) -> dict: payload.get("withdrawable"), payload.get("available_to_withdraw"), available.get("withdrawable"), + equity_margin.get("cnc_balance_available"), + payload.get("clear_cash"), cash, ) balance = _first_numeric( payload.get("balance"), payload.get("available_balance"), available.get("balance"), + payload.get("clear_cash"), cash, )