# Features — im_angular_app

Evidence date: 2026-10-12. Source revision: `master` `060172d` (2024-06-25).

Labels: **Current**, **Completed**, **Planned**, **In development**, **Changed**, **Deprecated / unused**.

No features file existed in the source repo or in Silicon Ark before this document.

## Current (wired on the dashboard or landing path)

| Feature | What the user gets | Evidence |
|---|---|---|
| I&M sign-in redirect | Browser is sent to the `inm-retail` test realm and tokens from the return URL are stored | `landing.component.ts`, `environment.ts` |
| Whitelist gate | Member number from `checkwhitelist` decides dashboard versus coming soon | `landing.component.ts`, `account.service.ts` |
| Terms acceptance | Radio plus links to the memorandum PDF and the privacy notice, then `/dashboard` | `terms-and-conditions.component.*` |
| Coming soon | Shown when the whitelist member number is empty. Button opens the OTG select-context URL | `coming-soon.component.*` |
| Dashboard shell | Header, greeting, portfolio value, daily yield, help line, transaction list | `dashboard.component.html`, `balance-block`, `header`, `need-help-block` |
| Purchase | Account, member, amount, review (charge shown as 0.00), OTP, bank payment call, Sanlam purchase call | `greeting-block`, `transaction-block`, `review-withdrawal-modal`, `validate-modal`, `payment.service.ts` |
| Withdrawal | Member, amount, review with API charge and the KES 500 monthly note, OTP, Sanlam withdrawal call | Same screens; `sanlamWithdrawalCharges`, `sanlamWithdrawal` |
| Transaction list | All / Pending / Purchase / Withdrawal / Interest filters over `statementdata` | `transactions.component.*` |
| Statements and PDF | Date range, totals, paging, jsPDF download with a masked member number | `statements.component.ts`, `statements.service.ts` |
| Session touch on exit | `updatesession`, then `localStorage.clear()`, link to OTG | `header.component.ts` |
| Profile image | BMP data-URL from `profileimage`, else default avatar | `header.component.ts` |
| Minimum payment | Loaded from setting `min_payment` and enforced on submit | `dashboard.component.ts`, `account.service.ts` |
| Preferred 2FA | `preferred2fa` mode. `PIN` masks the code field. `OTP` triggers `requestotp` and a 180-second timer | `dashboard.component.ts`, `validate-modal`, `timer.service.ts` |
| Daily yield | Last rate and previous rate, green or red marker when they differ | `balance-block.component.ts`, `sanlam-yield.service.ts` |

## Completed in history, present on master

These are themes of commits that are already on `060172d`, not a separate release log. The inspected history runs from 2023-05-02 to the 2024-06-25 merge of `dev` (pull request #43).

- Accounts API and account select (`5cf03b7`, `4e8437c` in the recent history).
- Purchase and withdrawal flows, charges, and "remove withdrawal charge on purchase" (`e5eca76`).
- OTP (`64586ef`, `a996c60`).
- Statements UI and PDF-related styling (many `statements.component` commits).
- Token refresh service added (`680a263`, "addind refresh service and update account balance"). The service class is on `master`. No component calls it. See unused section.
- Mobile layout fixes for member and account select.

## In development

Nothing in the tree is marked in progress. `master` has not moved since 2024-06-25.

Remote heads that are not `master`:

- `dev` at `15eaf33`
- `statements-ui` at `bdbba09`

Their file differences from `master` were **not** inspected. Status of those lines is **Unknown / Requires Confirmation**.

## Planned

No roadmap, ticket list, or TODO file describes future features. **Unknown.**

## Changed relative to earlier copy in the same tree

| Item | Earlier evidence | Behaviour on master |
|---|---|---|
| Purchase charge | Commit message "remove withdrawal charge on purchase transaction" | Review modal prints `KES 0.00` for a purchase and shows the API charge only for a withdrawal |
| Withdrawal confirmation modal | `#confirm-modal` still contains the KES 500 copy and a Withdraw button | Greeting-path submit opens `#reviewWithdrawalModal`, which has its own KES 500 note and a Submit button into the validate modal |
| Success email sentence | Commented template says "confirmation of your withdrawal" | Live sentence says "confirmation of your purchase" for both types, and adds the 3-working-day line for a withdrawal |

## Deprecated / unused (still compiled into the module)

Declared on `AppModule` and not placed in a parent template:

- `app-purchase-block` and its member-select children.
- `app-withdrawal-block` and its member-select children.
- `app-portfolio-block`. ApexCharts line with fixed values and dates from November 2000 through June 2001. Not fed by `dailyyield`.

Present in the dashboard template but with no opener found:

- `app-transaction-model` (`#transactionModal`). Its hidden button targets `#confirm-modal` for a withdrawal and `#validate-modal` for a purchase. Comment in the template says the hidden button is clicked from the service. The only programmatic `Modal.show` found is for `#reviewWithdrawalModal` in `AccountService.handleTransactionSubmit`.

Defined and not called from a component:

- `TokenRefreshService.startTokenRefresh`, `checkUserActivity`, `logout`.
- `ImbankAuthService.getServiceAgreement` (`POST serviceagreement`). `POST createuser` is only reached from this method.
- `ImbankAuthService.getToken` (`GET getToken`).
- `TransactionService.getTransactions` (`POST gettransaction`) and `updateTransactions` (`POST updatetransaction`). The dashboard list uses `statementdata`.
- `PaymentService` calls to `POST logerror` (commented out).
- `ApiHelperService` is constructed by `UserService` and not used in the methods that were read.

`README.md` "Running end-to-end tests" describes `ng e2e`. No e2e runner is in `package.json`. **Documented** and not implemented.

## Not features of this repository

- AWS Amplify hosting. Named only in `README_OLD.md`.
- Lambda functions. Named only in `README_OLD.md`. The Angular app calls Gateway paths.
- SonarQube scan. Pipeline and `sonar-project.properties` exist. That is a CI check, not a user feature. The GitHub workflow file triggers on branch `main`. This repo's default branch is `master`.
