# aravindvks/sutherland-banking-platform architecture

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

- Interactive diagram: https://gitdiagram.com/aravindvks/sutherland-banking-platform
- Repository: https://github.com/aravindvks/sutherland-banking-platform

## Overview

Sutherland Banking Platform is a modular UK banking application spanning customer and staff web journeys, domain-specific backend modules, vendor adapters, and operational services. The main customer workflow runs from the web app through BFF endpoints into banking journeys such as onboarding, payments, and card controls; staff review and reconciliation are separate branches. The README documents additional capabilities—including credit cards, scheduled payments, Direct Debits, inbound payments, and real-time card authorisation—that are retained here. Some backend wiring is unsampled, so uncertain relationships are omitted or marked dashed.

Main entry points: [`web/src/App.tsx`](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/App.tsx) (Web app), [`services/bff/src/main/java/bank/pbp/bff/BffApplication.java`](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/bff/src/main/java/bank/pbp/bff/BffApplication.java) (Banking BFF), [`domains/onboarding/orchestration/src/main/java/bank/pbp/orchestrator/onboarding/OnboardingWorkflowImpl.java`](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/onboarding/orchestration/src/main/java/bank/pbp/orchestrator/onboarding/OnboardingWorkflowImpl.java) (Onboarding and KYC), [`domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/payments/PaymentWorkflowImpl.java`](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/payments/PaymentWorkflowImpl.java) (Payments and mandates)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webapp["Web app<br/>[App.tsx]"]
  node_web_onboarding["Onboarding UI<br/>[Onboarding.tsx]"]
  node_web_payments["Payments UI<br/>[Payments.tsx]"]
  node_web_cards["Card UI<br/>[CardView.tsx]"]
  node_web_credit["Credit card UI<br/>[CreditCard.tsx]"]
  node_web_staff["Staff UI<br/>[Staff.tsx]"]
end

subgraph group_domains["Banking journeys"]
  node_bff["Banking BFF"]
  node_onboarding["Onboarding and KYC"]
  node_payments["Payments and mandates"]
  node_schedules["Scheduled payments"]
  node_direct_debits["Direct Debits"]
  node_cards["Card controls"]
  node_credit_cards["Credit cards"]
  node_compliance["Compliance review"]
end

subgraph group_platform["Platform services"]
  node_mapping[("Customer mapping")]
  node_events["Event publishing"]
end

subgraph group_vendors["Vendor integrations"]
  node_ehi["Card authorisation"]
  node_essence["Finastra adapter"]
  node_thredd["Thredd adapter"]
  node_atfinity["Atfinity adapter"]
  node_credit_adapter["Credit decision adapter"]
end

subgraph group_operations["Operations"]
  node_recon["Reconciliation<br/>[ReconEngine.java]"]
end

node_customer(("Customer"))
node_staff(("Bank staff"))

node_customer -->|"uses"| node_webapp
node_staff -->|"uses"| node_webapp
node_webapp -->|"renders"| node_web_onboarding
node_webapp -->|"renders"| node_web_payments
node_webapp -->|"renders"| node_web_cards
node_webapp -->|"renders"| node_web_credit
node_webapp -->|"renders"| node_web_staff
node_webapp -.->|"calls API"| node_bff
node_bff -.->|"starts journey"| node_onboarding
node_bff -.->|"submits payments"| node_payments
node_bff -.->|"manages schedules"| node_schedules
node_bff -.->|"manages debits"| node_direct_debits
node_bff -.->|"controls cards"| node_cards
node_bff -.->|"manages credit"| node_credit_cards
node_staff -.->|"reviews cases"| node_compliance
node_essence -.->|"provides source data"| node_recon
node_onboarding -.->|"checks identity"| node_atfinity
node_onboarding -.->|"links customer"| node_mapping
node_payments -.->|"uses core banking"| node_essence
node_cards -.->|"issues cards"| node_thredd
node_credit_cards -.->|"requests decisions"| node_credit_adapter
node_credit_cards -.->|"processes credit"| node_thredd
node_ehi -->|"places debit holds"| node_essence
node_ehi -->|"handles credit holds"| node_thredd
node_mapping -->|"publishes changes"| node_events
node_onboarding -.->|"publishes events"| node_events
node_payments -.->|"publishes events"| node_events

click node_webapp "https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/App.tsx"
click node_web_onboarding "https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/onboarding/Onboarding.tsx"
click node_web_payments "https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/payments/Payments.tsx"
click node_web_cards "https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/cards/CardView.tsx"
click node_web_credit "https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/creditcards/CreditCard.tsx"
click node_web_staff "https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/staff/Staff.tsx"
click node_bff "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/bff/src/main/java/bank/pbp/bff/BffApplication.java"
click node_onboarding "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/onboarding/orchestration/src/main/java/bank/pbp/orchestrator/onboarding/OnboardingWorkflowImpl.java"
click node_payments "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/payments/PaymentWorkflowImpl.java"
click node_schedules "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/schedules/ScheduleWorkflow.java"
click node_direct_debits "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/directdebits/DirectDebitWorkflows.java"
click node_cards "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/cards/orchestration/src/main/java/bank/pbp/orchestrator/cards/CardControlsWorkflow.java"
click node_credit_cards "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/creditcards/orchestration/src/main/java/bank/pbp/orchestrator/creditcards/CreditCardWorkflows.java"
click node_compliance "https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/compliance/orchestration/src/main/java/bank/pbp/orchestrator/compliance/ComplianceWorkflow.java"
click node_recon "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/recon-service/src/main/java/bank/pbp/recon/ReconEngine.java"
click node_mapping "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/mapping-service/src/main/java/bank/pbp/mapping/MappingService.java"
click node_events "https://github.com/aravindvks/sutherland-banking-platform/blob/main/libs/platform-common/src/main/java/bank/pbp/common/events/EventPublisher.java"
click node_ehi "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/ehi-responder/src/main/java/bank/pbp/ehi/AuthorisationService.java"
click node_essence "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/essence-adapter/src/main/java/bank/pbp/essence/EssenceController.java"
click node_thredd "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/thredd-adapter/src/main/java/bank/pbp/thredd/ThreddController.java"
click node_atfinity "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/atfinity-adapter/src/main/java/bank/pbp/atfinity/AtfinityController.java"
click node_credit_adapter "https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/credit-adapter/src/main/java/bank/pbp/credit/CreditController.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_webapp,node_web_onboarding,node_web_payments,node_web_cards,node_web_credit,node_web_staff toneBlue
class node_bff,node_onboarding,node_payments,node_schedules,node_direct_debits,node_cards,node_credit_cards,node_compliance toneAmber
class node_mapping,node_events toneMint
class node_ehi,node_essence,node_thredd,node_atfinity,node_credit_adapter toneRose
class node_recon,node_customer,node_staff toneIndigo
```

## Components

### Web experience

- [Web app](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/App.tsx): `web/src/App.tsx`
- [Onboarding UI](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/onboarding/Onboarding.tsx): `web/src/modules/onboarding/Onboarding.tsx`
- [Payments UI](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/payments/Payments.tsx): `web/src/modules/payments/Payments.tsx`
- [Card UI](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/cards/CardView.tsx): `web/src/modules/cards/CardView.tsx`
- [Credit card UI](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/modules/creditcards/CreditCard.tsx): `web/src/modules/creditcards/CreditCard.tsx`
- [Staff UI](https://github.com/aravindvks/sutherland-banking-platform/blob/main/web/src/staff/Staff.tsx): `web/src/staff/Staff.tsx`

### Banking journeys

- [Banking BFF](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/bff/src/main/java/bank/pbp/bff/BffApplication.java): `services/bff/src/main/java/bank/pbp/bff/BffApplication.java`
- [Onboarding and KYC](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/onboarding/orchestration/src/main/java/bank/pbp/orchestrator/onboarding/OnboardingWorkflowImpl.java): `domains/onboarding/orchestration/src/main/java/bank/pbp/orchestrator/onboarding/OnboardingWorkflowImpl.java`
- [Payments and mandates](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/payments/PaymentWorkflowImpl.java): `domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/payments/PaymentWorkflowImpl.java`
- [Scheduled payments](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/schedules/ScheduleWorkflow.java): `domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/schedules/ScheduleWorkflow.java`
- [Direct Debits](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/directdebits/DirectDebitWorkflows.java): `domains/payments/orchestration/src/main/java/bank/pbp/orchestrator/directdebits/DirectDebitWorkflows.java`
- [Card controls](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/cards/orchestration/src/main/java/bank/pbp/orchestrator/cards/CardControlsWorkflow.java): `domains/cards/orchestration/src/main/java/bank/pbp/orchestrator/cards/CardControlsWorkflow.java`
- [Credit cards](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/creditcards/orchestration/src/main/java/bank/pbp/orchestrator/creditcards/CreditCardWorkflows.java): `domains/creditcards/orchestration/src/main/java/bank/pbp/orchestrator/creditcards/CreditCardWorkflows.java`
- [Compliance review](https://github.com/aravindvks/sutherland-banking-platform/blob/main/domains/compliance/orchestration/src/main/java/bank/pbp/orchestrator/compliance/ComplianceWorkflow.java): `domains/compliance/orchestration/src/main/java/bank/pbp/orchestrator/compliance/ComplianceWorkflow.java`

### Platform services

- [Customer mapping](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/mapping-service/src/main/java/bank/pbp/mapping/MappingService.java): `services/mapping-service/src/main/java/bank/pbp/mapping/MappingService.java`
- [Event publishing](https://github.com/aravindvks/sutherland-banking-platform/blob/main/libs/platform-common/src/main/java/bank/pbp/common/events/EventPublisher.java): `libs/platform-common/src/main/java/bank/pbp/common/events/EventPublisher.java`

### Vendor integrations

- [Card authorisation](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/ehi-responder/src/main/java/bank/pbp/ehi/AuthorisationService.java): `services/ehi-responder/src/main/java/bank/pbp/ehi/AuthorisationService.java`
- [Finastra adapter](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/essence-adapter/src/main/java/bank/pbp/essence/EssenceController.java): `services/essence-adapter/src/main/java/bank/pbp/essence/EssenceController.java`
- [Thredd adapter](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/thredd-adapter/src/main/java/bank/pbp/thredd/ThreddController.java): `services/thredd-adapter/src/main/java/bank/pbp/thredd/ThreddController.java`
- [Atfinity adapter](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/atfinity-adapter/src/main/java/bank/pbp/atfinity/AtfinityController.java): `services/atfinity-adapter/src/main/java/bank/pbp/atfinity/AtfinityController.java`
- [Credit decision adapter](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/credit-adapter/src/main/java/bank/pbp/credit/CreditController.java): `services/credit-adapter/src/main/java/bank/pbp/credit/CreditController.java`

### Operations

- [Reconciliation](https://github.com/aravindvks/sutherland-banking-platform/blob/main/services/recon-service/src/main/java/bank/pbp/recon/ReconEngine.java): `services/recon-service/src/main/java/bank/pbp/recon/ReconEngine.java`

### Other components

- **Customer**
- **Bank staff**

## Connections

- Customer → Web app: uses (evidence: `web/src/App.tsx`)
- Bank staff → Web app: uses (evidence: `web/src/App.tsx`)
- Web app → Onboarding UI: renders (evidence: `web/src/App.tsx`)
- Web app → Payments UI: renders (evidence: `web/src/App.tsx`)
- Web app → Card UI: renders (evidence: `web/src/App.tsx`)
- Web app → Credit card UI: renders (evidence: `web/src/App.tsx`)
- Web app → Staff UI: renders (evidence: `web/src/App.tsx`)
- Web app → Banking BFF: calls API
- Banking BFF → Onboarding and KYC: starts journey
- Banking BFF → Payments and mandates: submits payments
- Banking BFF → Scheduled payments: manages schedules
- Banking BFF → Direct Debits: manages debits
- Banking BFF → Card controls: controls cards
- Banking BFF → Credit cards: manages credit
- Bank staff → Compliance review: reviews cases
- Finastra adapter → Reconciliation: provides source data
- Onboarding and KYC → Atfinity adapter: checks identity
- Onboarding and KYC → Customer mapping: links customer
- Payments and mandates → Finastra adapter: uses core banking
- Card controls → Thredd adapter: issues cards
- Credit cards → Credit decision adapter: requests decisions
- Credit cards → Thredd adapter: processes credit
- Card authorisation → Finastra adapter: places debit holds (evidence: `services/ehi-responder/src/main/java/bank/pbp/ehi/AuthorisationService.java`)
- Card authorisation → Thredd adapter: handles credit holds (evidence: `services/ehi-responder/src/main/java/bank/pbp/ehi/AuthorisationService.java`)
- Customer mapping → Event publishing: publishes changes (evidence: `services/mapping-service/src/main/java/bank/pbp/mapping/MappingService.java`)
- Onboarding and KYC → Event publishing: publishes events
- Payments and mandates → Event publishing: publishes events
