Add account balance enquiry via GET /accounts/balance

The CBS API now exposes a balance endpoint, which it previously did not.
Several comments in the codebase asserted that no such endpoint existed
anywhere in the API; those are corrected here rather than left to mislead.

Balance is fetched lazily, per account, from the Account Details card:

- `accounts.balance` endpoint, `CbsAccountBalance` type, and a
  `getAccountBalance` query with `keepUnusedDataFor: 0` — a balance is the
  most perishable figure in the app and must not outlive its screen.
- The call is triggered by the customer, not by render. Every call reaches
  the core banking system, and a balance should not appear over someone's
  shoulder just for opening a screen.
- `supportsBalanceEnquiry` gates the control by account type only, with no
  status check: a dormant savings account cannot be debited but still has a
  balance. Deposits are excluded because the endpoint does not serve them.
- `ACCOUNT_BALANCE_NOT_AVAILABLE` added to the error catalogue as a
  non-retryable refusal, so the card states it instead of inviting a tap
  that gets the identical answer.

Also carries in-progress work already present in the tree: customer-facing
account type labels (`accountTypeLabel`) applied across the account card,
selector, mini statement, balance enquiry and MMID screens.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Abin Toppo
2026-09-21 15:27:50 +05:30
co-authored by Claude Opus 5
parent 2dcb10775c
commit 86f9647437
13 changed files with 341 additions and 27 deletions
+13
View File
@@ -251,6 +251,19 @@ export interface CbsAccount {
mmid: string | null;
}
/**
* One account's balance, as `GET /accounts/balance` returns it.
*
* Deliberately not folded into `CbsAccount`: `GET /accounts` does not carry a
* balance, and the two are fetched at different moments for different reasons.
* Keeping them apart is what stops a stale figure riding along on an account
* list that was cached for some other purpose.
*/
export interface CbsAccountBalance {
/** In rupees. The bank's live figure at the moment of the call. */
balance: number;
}
/**
* One deposit as `GET /accounts/deposits/detail` returns it.
*