Big Iron Bank

The Capstone

A fictional community bank in Arizona, run the way real banks run: batch at night, balances that must prove out, and nobody touching the books who shouldn't.

Two machines, two eras

The bank's coreModernization
MachineIBM System/370, MVS 3.8j (Hercules + TK5)IBM Z, z/OS (IBM Z Xplore)
COBOLCOBOL-74 style: no EVALUATE, no scope terminatorsEnterprise COBOL
DataVSAM KSDS masters, GDG daily filesDB2
OnlineINTERCOMM (CICS-like) teller screenDriven from the Zowe CLI
SecurityRAKF (RACF-style)RACF

Anyone can reproduce the core on their own PC: clone the repo, boot TK5, submit the job.

The End-of-Day cycle

StepProgramDoes
010BIBEDITValidates the day's transactions; bad data goes to a reject file with a reason code, never an S0C7 abend
020SORTSorts by account number, then time
030BIBPOSTPosts to the account master (VSAM random update), overdraft rules, general ledger and audit log
040BIBINTDaily interest accrual in packed decimal (COMP-3), banker's rounding
050BIBFEEMaintenance and overdraft fees
060BIBRECNReconciliation: opening + postings = closing, debits = credits. If not, the job stops.
070BIBSTMTMonth-end statements with masked account numbers

The job stream restarts cleanly from any step without posting anything twice, and a runbook explains every return code and abend.

The security layer

Least privilege

Only the batch ID can update the masters. Tellers read.

Separation of duties

Separate IDs for operator, teller and auditor.

Audit trail

Every posting logs who, when, and the before and after balance.

Data minimization

Reports show only the last four digits of an account.

Progress

PhaseBuildDone whenStatus
0TK5 up, first COBOL compileA program runs from my own JCLIn progress
1Copybooks, sample data, VSAM mastersMasters load and listPlanned
2Edit + sortGarbage input makes rejects, not abendsPlanned
3PostingBalances, GL and audit log correctPlanned
4Interest + feesHand-checked to the centPlanned
5ReconciliationA broken posting fails the job loudlyPlanned
6StatementsMonth-end prints, accounts maskedPlanned
7RestartKilled mid-run, restarted, no double-postingPlanned
8Teller inquiry3270 screen shows live balancesPlanned
9SecurityA teller ID is denied update, with proofPlanned
10ModernizationSame result on z/OS with DB2, from a scriptPlanned

Code, job output and screenshots: github.com/aimozart/cobol-z. All data is fictional.