Omniscope Custom Blocks › Analytics/Loan-Amortisation

Loan Amortisation Schedule

Generates payment schedules for loans and leases (repayment, equal principal, interest only, with balloon), monthly, quarterly or annually, with a summary per loan.

Analytics › Finance Python visokio-agents

Open the demo in Omniscope Download demo.ioz Sample data: loan-book.csv Source on GitHub

Items tagged visokio-agents are community examples built by Visokio's agents, to extend Omniscope's core blocks and views with popular, specialist and more unusual use cases, and to show what anyone, people or agents, can build on Omniscope. They are tested by automated tests and were run on a real Omniscope server. They were not reviewed by Omniscope's core team, so they are not on a par with the core blocks and views, which have years of manual, functional and unit tests behind them. About

Omniscope custom block · Analytics

Full payment schedules for a whole loan book in one step: repayment, equal principal, interest only and balloon structures, with interest, capital and balances per payment.

Python · pandas, numpy · nothing extra to install

The problem it solves

Lenders, lessors, treasury and finance teams need payment-level schedules: to forecast cash and interest income, reconcile statements, value a book or answer a customer. In spreadsheets each loan is its own tab; with core blocks it takes a row generator and running formulas to carry the balances forward.

Loan Amortisation Schedule takes a table of loans and returns every payment of every loan, with the summary figures alongside.

How it works

What goes in

Loan book

Nine synthetic loans covering every structure, including a PCP-style balloon, a 0% loan and a row with a negative principal.

Loan ID Borrower Type Product Principal Annual Rate % Term Months Start Date Repayment Type Balloon
L-1001 SME Equipment finance 85000 7.9 60 2025-01-15 Repayment 0
L-1002 SME Commercial vehicle 42000 8.4 48 2025-02-01 Repayment 10000
L-1003 Consumer Car finance (PCP) 28500 9.9 48 2025-03-10 Repayment 11000
L-1004 SME Working capital 120000 9.25 36 2025-01-31 Equal principal 0
L-1005 Property Bridging loan 450000 10.5 12 2025-04-01 Interest only 0
L-1006 Consumer Home improvement 15000 6.9 60 2025-05-20 Repayment 0
L-1007 Property Buy-to-let mortgage 210000 5.35 300 2025-06-01 Interest only 0
L-1008 SME Solar installation 64000 0 36 2025-07-01 Repayment 0
L-1009 SME Fit-out loan -5000 8.0 24 2025-08-01 Repayment 0

9 rows in the sample file.

The options

Option Demo setting What it does
Loan ID (optional) Loan ID Names each loan in the schedule and summary.
Principal Principal Amount borrowed.
Annual interest rate Annual Rate % Percent (7.9) or fraction (0.079).
Term Term Months Length of the loan, in the unit set by Term is in.
Start date (optional) Start Date Payments fall one period after this date, then every period.
Balloon / residual (optional) Balloon Amount left to pay at the end, as in a lease or balloon loan.
Repayment type field (optional) Repayment Type Per-loan type; otherwise the default below is used.
Payment frequency Monthly How often payments fall due.
Term is in Months Whether the term field counts months or years.

What comes out

Loan summary

Loan ID Repayment Type Status Principal Annual Rate Payments Regular Payment First Payment Final Payment Total Paid Total Interest Interest As Share Of Principal Final Payment Date
L-1001 Repayment (annuity) OK 85,000 0.079 60 1,719.43 1,719.43 1,719.43 103,165.71 18,165.71 0.21 2030-01-15
L-1002 Repayment (annuity) OK 42,000 0.084 48 857.24 857.24 10,857.24 51,147.32 9,147.32 0.22 2029-02-01
L-1003 Repayment (annuity) OK 28,500 0.099 48 533.76 533.76 11,533.76 36,620.25 8,120.25 0.28 2029-03-10
L-1004 Equal principal OK 120,000 0.0925 36 4,258.33 3,359.03 137,112.50 17,112.50 0.14 2028-01-31
L-1005 Interest only OK 450,000 0.105 12 3,937.50 3,937.50 453,937.50 497,250 47,250 0.1 2026-04-01
L-1006 Repayment (annuity) OK 15,000 0.069 60 296.31 296.31 296.31 17,778.65 2,778.65 0.19 2030-05-20
L-1007 Interest only OK 210,000 0.0535 300 936.25 936.25 210,936.25 490,875 280,875 1.34 2050-06-01
L-1008 Repayment (annuity) OK 64,000 0 36 1,777.78 1,777.78 1,777.78 64,000 0 0 2028-07-01
L-1009 Repayment (annuity) Principal missing or not positive

Schedule: last payments of the PCP car finance (balloon in the final payment)

Loan ID Payment Number Payment Date Opening Balance Payment Interest Principal Repaid Closing Balance Cumulative Interest
L-1003 45 2028-12-10 12,736.07 533.76 105.07 428.68 12,307.38 7,826.37
L-1003 46 2029-01-10 12,307.38 533.76 101.54 432.22 11,875.17 7,927.91
L-1003 47 2029-02-10 11,875.17 533.76 97.97 435.79 11,439.38 8,025.88
L-1003 48 2029-03-10 11,439.38 11,533.76 94.37 11,439.38 0 8,120.25
In a repayment loan the interest share falls and the capital share rises with every payment (synthetic data).
In a repayment loan the interest share falls and the capital share rises with every payment (synthetic data).

In a repayment loan the interest share falls and the capital share rises with every payment (synthetic data).

Outstanding balance of the whole book, from the schedule output.
Outstanding balance of the whole book, from the schedule output.

Outstanding balance of the whole book, from the schedule output.

Where it pays off

Lending and asset finance: Book-level cash and interest forecasts

Project interest income and capital repayments month by month across the book, by product or broker.

Corporate treasury: Debt schedules

Schedule every facility's interest and repayments for cash-flow forecasts and covenant reporting.

Leasing and car finance: PCP and balloon products

Show customers and auditors the payment profile with the residual value, and track the residual exposure across the book.

Property: Mortgage and bridging portfolios

Interest-only and repayment structures side by side, with remaining balances at any date.

Use cases describe typical scenarios and are illustrative.

Why do this in Omniscope

How it fits into an Omniscope workflow

Loan book (Database) → Loan Amortisation Schedule → Aggregate (by month) → Report

Aggregate the schedule by month for cash and interest forecasts, or filter to one loan for a customer statement.

Join actual payments to the schedule to find arrears; feed the summary into Tile or ABC Classification to segment the book.

In one step

No loops or carry-forward formulas: one block for any number of loans and the three common structures.

Try it

  1. Open the demo project (demo.iox on the demo server, or import demo.ioz from this folder): a small loan book with every structure in it.
  2. The question: what does each loan pay each month, and how much interest will the book earn?
  3. Open the block: principal, rate, term, start date, balloon and the repayment type field. Run it.
  4. Look at the summary: regular payments and total interest per loan, and the invalid loan flagged with its reason.
  5. Look at the PCP loan's last rows (the balloon in the final payment) and the interest / principal chart; then aggregate the schedule by month for a cash forecast.

Running in Omniscope

Omniscope workflow
Omniscope workflow

The demo project's workflow: the sample data, the block, and a Validate data check on its output.

Language and libraries

Python. It uses pandas and numpy.

pandas and numpy are part of Omniscope's Docker Python image, and the block was run in both host mode and Docker mode on an Omniscope server, with the same results. It needs nothing else installed.

Tested

Run on an Omniscope server, the demo workflow finished without errors (600 records in Payment schedule and 9 in Loan summary). Automated tests also cover normal data, empty input, wrong types and large input.

Reference

Fields it reads

NameTypeWhat it does
Loan ID (optional)FieldNames each loan in the schedule and summary.
PrincipalFieldAmount borrowed.
Annual interest rateFieldPercent (7.9) or fraction (0.079).
TermFieldLength of the loan, in the unit set by Term is in.
Start date (optional)FieldPayments fall one period after this date, then every period.
Balloon / residual (optional)FieldAmount left to pay at the end, as in a lease or balloon loan.
Repayment type field (optional)FieldPer-loan type; otherwise the default below is used.

Options

NameTypeWhat it does
Default repayment typeChoice
Payment frequencyChoiceHow often payments fall due.
Term is inChoiceWhether the term field counts months or years.
Rate formatChoice

Outputs

OutputWhat it holds
ScheduleOne row per loan and payment: date, opening balance, payment, interest, principal repaid, closing balance, cumulative interest.
SummaryOne row per loan: type, status, payments, regular / first / final payment, total paid, total interest, final payment date.