# ibm/bank-of-z architecture

> Architecture diagram of the GitHub repository ibm/bank-of-z, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ibm/bank-of-z
- Repository: https://github.com/ibm/bank-of-z

## Overview

Bank of Z is a hybrid banking application: users work in a browser UI, which calls the API gateway; requests are routed to CICS or IMS according to customer ID. The application also supports account and customer operations, transaction history, and money transfers through IBM MQ. The graph preserves these product branches and the sampled IMS history-storage layer. Backend routing is documented in the README; unsampled implementation details are represented only at existing source-directory paths, and no unverified internal calls are asserted.

Main entry points: [`src/frontend/js/api.js`](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/api.js) (API client), [`src/api/src/main/api/openapi.yaml`](https://github.com/ibm/bank-of-z/blob/main/src/api/src/main/api/openapi.yaml) (z/OS Connect API), [`src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java`](https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java) (History service), [`src/frontend/js/components/lookup.js`](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/lookup.js) (Customer lookup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Browser experience"]
  node_page_shell["Page shell<br/>[layout.js]"]
  node_navigation["Navigation<br/>[headers.js]"]
  node_customer_lookup["Customer lookup<br/>[lookup.js]"]
  node_ui_helpers["UI utilities<br/>[utils.js]"]
  node_api_client["API client<br/>[api.js]"]
  node_api_config["API configuration<br/>[config.js]"]
end

subgraph group_gateway["API gateway"]
  node_api_gateway["z/OS Connect API<br/>[openapi.yaml]"]
end

subgraph group_transactions["z/OS banking"]
  node_cics_banking["CICS banking"]
  node_ims_banking["IMS banking"]
  node_ims_query["IMS history query"]
  node_history_service["History service"]
  node_history_record["History record"]
end

subgraph group_integration["Messaging and storage"]
  node_mq_transfer["Transfer dispatcher"]
  node_cics_transfer["CICS transfer"]
  node_ims_transfer["IMS transfer"]
  node_mq_manager["IBM MQ"]
  node_db2_history[("DB2 history")]
end

node_user(("Banking user"))

node_user -.->|"uses"| node_page_shell
node_page_shell -->|"renders"| node_navigation
node_customer_lookup -->|"uses"| node_ui_helpers
node_customer_lookup -->|"requests"| node_api_client
node_api_client -->|"reads"| node_api_config
node_api_client -->|"calls"| node_api_gateway
node_api_gateway -->|"routes"| node_cics_banking
node_api_gateway -->|"routes"| node_ims_banking
node_ims_query -->|"queries"| node_history_service
node_history_service -->|"creates"| node_history_record
node_history_service -->|"reads and writes"| node_db2_history
node_mq_transfer -->|"dispatches"| node_cics_transfer
node_mq_transfer -->|"dispatches"| node_ims_transfer
node_cics_transfer -->|"sends requests"| node_mq_manager
node_ims_transfer -->|"sends requests"| node_mq_manager

click node_page_shell "https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/layout.js"
click node_navigation "https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/headers.js"
click node_customer_lookup "https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/lookup.js"
click node_ui_helpers "https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/utils.js"
click node_api_client "https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/api.js"
click node_api_config "https://github.com/ibm/bank-of-z/blob/main/src/frontend/config.js"
click node_api_gateway "https://github.com/ibm/bank-of-z/blob/main/src/api/src/main/api/openapi.yaml"
click node_cics_banking "https://github.com/ibm/bank-of-z/tree/main/src/base/cics"
click node_ims_banking "https://github.com/ibm/bank-of-z/tree/main/src/base/ims"
click node_ims_query "https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/controller/QueryTransaction.java"
click node_history_service "https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java"
click node_history_record "https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/history/TransactionDetail.java"
click node_mq_transfer "https://github.com/ibm/bank-of-z/blob/main/src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZ.java"
click node_cics_transfer "https://github.com/ibm/bank-of-z/blob/main/src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaCICS.java"
click node_ims_transfer "https://github.com/ibm/bank-of-z/blob/main/src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaIMS.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_page_shell,node_navigation,node_customer_lookup,node_ui_helpers,node_api_client,node_api_config,node_user toneBlue
class node_api_gateway toneAmber
class node_cics_banking,node_ims_banking,node_ims_query,node_history_service,node_history_record toneMint
class node_mq_transfer,node_cics_transfer,node_ims_transfer,node_mq_manager,node_db2_history toneRose
```

## Components

### Browser experience

- [Page shell](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/layout.js): `src/frontend/js/components/layout.js`
- [Navigation](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/headers.js): `src/frontend/js/components/headers.js`
- [Customer lookup](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/components/lookup.js): `src/frontend/js/components/lookup.js`
- [UI utilities](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/utils.js): `src/frontend/js/utils.js`
- [API client](https://github.com/ibm/bank-of-z/blob/main/src/frontend/js/api.js): `src/frontend/js/api.js`
- [API configuration](https://github.com/ibm/bank-of-z/blob/main/src/frontend/config.js): `src/frontend/config.js`

### API gateway

- [z/OS Connect API](https://github.com/ibm/bank-of-z/blob/main/src/api/src/main/api/openapi.yaml): `src/api/src/main/api/openapi.yaml`

### z/OS banking

- [CICS banking](https://github.com/ibm/bank-of-z/tree/main/src/base/cics): `src/base/cics`
- [IMS banking](https://github.com/ibm/bank-of-z/tree/main/src/base/ims): `src/base/ims`
- [IMS history query](https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/controller/QueryTransaction.java): `src/base/ims/java/src/main/java/nazare/jmp/controller/QueryTransaction.java`
- [History service](https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java): `src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java`
- [History record](https://github.com/ibm/bank-of-z/blob/main/src/base/ims/java/src/main/java/nazare/jmp/history/TransactionDetail.java): `src/base/ims/java/src/main/java/nazare/jmp/history/TransactionDetail.java`

### Messaging and storage

- [Transfer dispatcher](https://github.com/ibm/bank-of-z/blob/main/src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZ.java): `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZ.java`
- [CICS transfer](https://github.com/ibm/bank-of-z/blob/main/src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaCICS.java): `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaCICS.java`
- [IMS transfer](https://github.com/ibm/bank-of-z/blob/main/src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaIMS.java): `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaIMS.java`
- **IBM MQ**
- **DB2 history**

### Other components

- **Banking user**

## Connections

- Banking user → Page shell: uses
- Page shell → Navigation: renders (evidence: `src/frontend/js/components/layout.js`)
- Customer lookup → UI utilities: uses (evidence: `src/frontend/js/components/lookup.js`)
- Customer lookup → API client: requests (evidence: `src/frontend/js/components/lookup.js`)
- API client → API configuration: reads (evidence: `src/frontend/js/api.js`)
- API client → z/OS Connect API: calls (evidence: `README.md`)
- z/OS Connect API → CICS banking: routes (evidence: `README.md`)
- z/OS Connect API → IMS banking: routes (evidence: `README.md`)
- IMS history query → History service: queries (evidence: `src/base/ims/java/src/main/java/nazare/jmp/controller/QueryTransaction.java`)
- History service → History record: creates (evidence: `src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java`)
- History service → DB2 history: reads and writes (evidence: `src/base/ims/java/src/main/java/nazare/jmp/history/TransactionService.java`)
- Transfer dispatcher → CICS transfer: dispatches (evidence: `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZ.java`)
- Transfer dispatcher → IMS transfer: dispatches (evidence: `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZ.java`)
- CICS transfer → IBM MQ: sends requests (evidence: `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaCICS.java`)
- IMS transfer → IBM MQ: sends requests (evidence: `src/base/mq/java/src/main/java/com/ibm/boq/TransferMoneyToBOZViaIMS.java`)
