Skip to content
Java · Spring Boot · Simulated banking infrastructure

Banking & Fintech SystemsCore Banking & Interbank Payment Gateway

Two simulated banking infrastructure systems in Java/Spring: a double-entry Core Banking ledger and an ISO 20022 Interbank Payment Gateway

Overview ​

These are two simulated core banking systems built with Java/Spring Boot, following a 3–6 month roadmap. Each one focuses on a different class of engineering problems:

  1. Financial data integrity: an immutable double-entry ledger (append-only) that guarantees Debit = Credit for every transaction and controls contention on hot accounts.
  2. Distributed transactions: interbank transfers coordinated with Saga Orchestration instead of 2PC, with idempotency and compensating transactions when a step fails.
  3. Financial message standards: parsing and validating ISO 20022 messages (pain.001, pacs.008) and batch end-of-day settlement.

Core Banking System has completed Phase 1 (45/45 tests passing on both PostgreSQL and Oracle, overdraft protection verified across 3 Kubernetes Pods). Payment Gateway is the next phase. Detailed progress: Project status and Devlog.


The two sub-projects ​

The two sub-projectsPayment Gateway (Phase 2, not started) will call Core Banking (Phase 1, done) over internal REST with an Idempotency-Key.A · Payment GatewayPhase 2 — not startedpain.001 / pacs.008 (ISO 20022)Saga Orchestrator + compensationEOD Settlement (Spring Batch)Retry / dead-letterB · Core BankingPhase 1 — doneDouble-entry ledger, append-onlyPessimistic lock vs. overdraftOutbox + Kafka, Redis cachePostgreSQL / Oracle · K8sinternal REST+ Idempotency-Key(Phase 3)

Sub-project A: Interbank Payment Gateway

  • Message parsing & validation for pain.001 / pacs.008
  • Saga Orchestrator — coordinates and compensates distributed transactions
  • EOD Batch Settlement — Spring Batch, chunk-oriented
  • Exception/ops handling — retry, dead-letter

Calls Core Banking over internal REST with an Idempotency-Key header:

Sub-project B: Core Banking System

  • Account Service — account management, balance derived from the ledger
  • Ledger Service + Transaction aggregate root — append-only double-entry ledger, guarantees Debit = Credit
  • Concurrency Guard — pessimistic lock (SELECT ... FOR UPDATE), verified across 3 K8s Pods
  • Outbox Pattern + Kafka, Redis cache, runs on both PostgreSQL and Oracle

The Payment Gateway calls into Core Banking to update real balances (integration happens in Phase 3).


Quick comparison ​

CriterionSub-project B: Core Banking SystemSub-project A: Payment Gateway
Core businessAccount management, double-entry bookkeepingInterbank transfers, ISO 20022 messages
Hardest problemRace conditions & data integrityDistributed state & failure handling (Saga)
Consistency modelStrong consistency (ACID + DB locks)Eventual consistency (Saga Orchestration)
Batch processing—EOD settlement with Spring Batch (chunk-oriented)
SecuritySpring Security (Phase 3)Spring Security (Phase 3)

Simulated Banking & Fintech Systems — Java & Spring Boot