Skip to main content

Interest & Fees

Overviewโ€‹

Interest and fees are the primary ways banks generate revenue from accounts and products. Understanding how they work is important for product configuration, posting logic, and customer disputes.


Interest โ€” The Basicsโ€‹

Interest is the cost of borrowing money, or the reward for saving it:

From Customer's ViewFrom Bank's View
Saves money โ†’ earns interestPays interest on deposits (liability)
Borrows money โ†’ pays interestEarns interest on loans (asset)

Interest Rate Typesโ€‹

TypeDescriptionExample
Fixed RateRate locked for a term5.00% p.a. for 12 months
Variable RateCan change at bank's discretion (follows RBA cash rate)RBA rate + 2.50%
Introductory RatePromotional rate for new customers (limited period)5.50% for 4 months, then 3.00%
Tiered RateDifferent rates for different balance bands0โ€“10K: 2%, 10K+: 4%
Bonus RateExtra interest if conditions met (e.g., deposit each month)Base 2% + Bonus 3% = 5%

How Interest is Calculatedโ€‹

Simple Interest (Daily Accrual)โ€‹

Most bank accounts use daily accrual โ€” interest accumulates every day based on the closing balance:

Daily Interest = (Annual Rate / 365) ร— Balance

Example:
Balance: $10,000
Rate: 5.00% p.a.
Daily rate: 5.00 / 365 = 0.013699%
Daily amount: $10,000 ร— 0.013699% = $1.37

Monthly: ~$41 (varies by days in month)
Yearly: ~$500

Compound Interest (Interest on Interest)โ€‹

Formula: A = P ร— (1 + r/n)^(nร—t)

Where:
P = Principal ($10,000)
r = Annual rate (0.05)
n = Compounding frequency per year (12 for monthly)
t = Years (1)

A = $10,000 ร— (1 + 0.05/12)^12 = $10,511.62
Interest earned = $511.62 (vs $500 simple)

Banks use compound interest for loans โ€” it means customers pay more over time.


Interest in Banking Systemsโ€‹

Accrual vs Capitalisationโ€‹

ACCRUAL: Interest earned but NOT yet paid
Recorded as a liability (owed to customer) or receivable (owed by customer)

CAPITALISATION: Accrued interest is added to the principal balance
(For savings: credited to account)
(For loans: added to outstanding balance if not paid)

Payment Frequencyโ€‹

ProductTypical Interest Payment
Savings accountMonthly (end of month)
Term depositMaturity / monthly / annually
Home loanMonthly (deducted from payment)
Credit cardDaily accrual; billed monthly
OverdraftDaily; debited monthly

Common Bank Feesโ€‹

Account Feesโ€‹

FeeDescriptionTypical Amount
Monthly account feeCharged for maintaining account5โ€“15/month
Excess transaction feeFee per transaction over monthly limit0.50โ€“2 each
Paper statement feeFee for receiving paper statements2โ€“5/month
Account closure feeSometimes charged on term deposits if broken early0โ€“50

Payment Feesโ€‹

FeeDescriptionTypical Amount
International transfer feeSWIFT outbound payment15โ€“30 per payment
Currency conversion marginSpread on FX rate1%โ€“3%
BPAY feeUsually nil (absorbed by bank)$0 (retail)
Real-time payment feeNPP โ€” usually nil for consumers$0

Penalty / Event Feesโ€‹

FeeDescription
Dishonour feeDirect debit or cheque bounced due to insufficient funds โ€” 10โ€“15
Overdrawn feeAccount went negative without approved overdraft โ€” 10โ€“20
Late payment feeCredit card or loan payment overdue โ€” 20โ€“30
Break feeExiting a fixed-rate product early (e.g., fixed home loan) โ€” can be thousands

Fee Posting in the Systemโ€‹

When a fee is charged, a debit posting is made to the customer's account:

Fee event trigger (e.g., end of month, dishonour event)
โ”‚
โ–ผ
Fee calculation engine
(looks up product config, calculates fee)
โ”‚
โ–ผ
Post debit to customer account:
DR Customer Account $10.00 (Fee: Dishonour fee)
CR Fee Income Account $10.00 (Bank's P&L)
โ”‚
โ–ผ
camt.054 notification:
CdtDbtInd: DBIT
BkTxCd: PMNT/FEES/SRVC
Amount: $10.00
Narrative: "Dishonour fee - DD returned insufficient funds"

Regulation: Responsible Lending & Fee Capsโ€‹

Banks are subject to regulatory limits on fees:

RegulationRequirement
National Consumer Credit Protection ActResponsible lending; fee disclosure
Credit Code (NCCP)Maximum default fees; comparison rate disclosure
ASIC oversightUnconscionable fees; deferred sales model
RBA guidanceSurcharging rules (merchant passing on card fees)
Fee-free basics (COBA)Mutual/community banks offer fee-free basic accounts

Interest on a Home Loan โ€” How It Worksโ€‹

Home Loan: $500,000 at 6.00% p.a., 30 years, monthly payments

Month 1:
Daily rate: 6.00 / 365 = 0.016438%
Days in month: 31
Interest: $500,000 ร— 0.016438% ร— 31 = $2,547.95

Monthly payment: $2,997.75 (fixed, from amortisation schedule)
Principal paid: $2,997.75 โˆ’ $2,547.95 = $449.80
New balance: $500,000 โˆ’ $449.80 = $499,550.20

Month 2:
Interest: $499,550.20 ร— 0.016438% ร— 28 = $2,299.49
(fewer days)

Over 30 years:
Total paid: ~$1,079,190 (more than double the loan)
Total interest: ~$579,190

RBA Cash Rate and Its Effectโ€‹

The RBA Cash Rate is the benchmark interest rate set by the Reserve Bank of Australia. It flows through to customer rates:

RBA Cash Rate (e.g., 4.35%)
โ”‚
โ–ผ
Bank Funding Cost (deposits, wholesale)
โ”‚
โ–ผ
Retail Lending Rates (mortgages, personal loans)
= Cash rate + Bank's margin

Retail Deposit Rates (savings)
= Cash rate โˆ’ Bank's margin

When RBA raises rates:
โ”œโ”€โ”€ Variable mortgage rates increase (bad for borrowers)
โ””โ”€โ”€ Savings rates increase (good for savers)

Java Spring Notes โ€” Fee Processingโ€‹

@Service
public class FeePostingService {

@Scheduled(cron = "0 0 2 1 * *") // 2 AM on 1st of each month
public void processMonthlyAccountFees() {
List<Account> feeableAccounts = accountRepository
.findAccountsEligibleForMonthlyFee();

feeableAccounts.forEach(account -> {
BigDecimal fee = feeCalculator.calculateMonthlyFee(account);

if (fee.compareTo(BigDecimal.ZERO) > 0) {
ledgerService.postDebit(
account.getId(),
fee,
"Monthly account fee",
BankTransactionCode.FEES_MONTHLY
);
notificationService.sendFeeAdvice(account, fee);
}
});
}

@EventListener
public void onDishonour(DishonourEvent event) {
BigDecimal dishonourFee = productConfig
.getDishonourFee(event.getAccountType());

ledgerService.postDebit(
event.getAccountId(),
dishonourFee,
"Dishonour fee - " + event.getPaymentReference(),
BankTransactionCode.FEES_DISHONOUR
);
}
}