Skip to content

Scenario Schema

The SaveableScenario schema represents a complete mortgage scenario with all applicant details, properties, loans, income, expenses, and liabilities.

A scenario consists of multiple components that together describe the complete financial picture:

  • Households: Applicant groups (individuals or couples)
  • Income: All income sources (PAYG, self-employed, rental, etc.)
  • Securities: Properties involved in the transaction
  • Home Loans: Proposed or existing mortgage products
  • Liabilities: Credit cards, personal loans, etc.
  • Living Expenses: Household spending
  • Links: Connections between loans and securities
interface SaveableScenario {
households: Household[];
income: Income[];
securities: Security[];
home_loans: HomeLoan[];
liabilities: Liability[];
living_expenses: LivingExpense[];
rental_income: RentalIncome[];
self_employed_income: SelfEmployedIncome[];
home_loan_security_links: HomeLoanSecurityLink[];
additional_info: AdditionalInfo;
}
Households

Represents applicants/borrowers and their household configuration.

FieldTypeRequiredDescription
idstringYesUnique identifier for this household
statusenumYesRelationship status: 'single', 'couple', 'de_facto', 'divorced', 'separated', 'widowed'
num_adultsnumberYesNumber of adults in household (1-2)
num_dependantsnumberYesNumber of dependent children
postcodenumberYesAustralian postcode (1000-9999)
shared_with_householdsstring[]YesIDs of other households sharing expenses

Example:

{
"id": "household-1",
"status": "couple",
"num_adults": 2,
"num_dependants": 2,
"postcode": 2000,
"shared_with_households": []
}
Income

Income sources for applicants. All monetary values are annual unless specified otherwise.

FieldTypeRequiredDescription
idstringYesUnique identifier
which_householdnumberYesIndex of household (0-based)
namestringYesIncome source name/description
paygnumberYesPAYG (base salary) annual income
casualnumberYesCasual employment income
commissionnumberYesCommission income
overtimenumberYesOvertime income
bonusnumberYesBonus income
allowancesnumberYesAllowances (car, housing, etc.)
superannuation_incomenumberYesSuper/pension income
centrelinknumberYesGovernment benefits
child_support_receivednumberYesChild support received
other_incomenumberYesOther miscellaneous income

Example:

{
"id": "income-1",
"which_household": 0,
"name": "Primary Employment",
"payg": 120000,
"casual": 0,
"commission": 15000,
"overtime": 5000,
"bonus": 10000,
"allowances": 0,
"superannuation_income": 0,
"centrelink": 0,
"child_support_received": 0,
"other_income": 0
}
Securities (Properties)

Properties involved in the mortgage transaction.

FieldTypeRequiredDescription
idstringYesUnique identifier
addressstringYesProperty address
postcodestringYesProperty postcode
transaction_typeenumYes'purchasing', 'refinancing', 'owned'
applicant_ownershipnumber[]YesOwnership percentage per applicant (must sum to 100)
valuenumberYesProperty value in AUD
property_typeenumYes'house', 'unit', 'townhouse', 'apartment', 'land', etc.
property_purposeenumYes'owner_occupied' or 'investment'
rental_typeenumNo'residential' or 'commercial' (for investment properties)
weekly_rental_incomenumberNoWeekly rental income if investment property
monthly_rental_expensenumberNoMonthly rental expenses (strata, rates, etc.)

Example:

{
"id": "property-1",
"address": "123 Main Street, Sydney NSW 2000",
"postcode": "2000",
"transaction_type": "purchasing",
"applicant_ownership": [50, 50],
"value": 850000,
"property_type": "house",
"property_purpose": "owner_occupied",
"rental_type": "residential",
"weekly_rental_income": 0,
"monthly_rental_expense": 0
}
Home Loans

Proposed or existing mortgage loans.

FieldTypeRequiredDescription
idstringYesUnique identifier
product_typeenumYes'variable_package', 'variable_basic', 'fixed', 'line_of_credit', 'construction'
existing_or_proposedenumYes'existing' or 'proposed'
loan_typeenumYes'owner_occupied' or 'investment'
lvrnumberYesLoan-to-value ratio (0-100)
loan_amountnumberYesLoan amount in AUD
termnumberYesLoan term in years
interest_only_periodnumberYesInterest-only period in years (0 if P&I)
lvr_behaviorstringYesHow to calculate LVR: 'use-input' or auto-calculate

Example:

{
"id": "loan-1",
"product_type": "variable_package",
"existing_or_proposed": "proposed",
"loan_type": "owner_occupied",
"lvr": 80,
"loan_amount": 680000,
"term": 30,
"interest_only_period": 0,
"lvr_behavior": "use-input"
}
Liabilities

Existing debts and credit commitments.

FieldTypeRequiredDescription
idstringYesUnique identifier
loan_typeenumYes'credit_card', 'personal_loan', 'car_loan', 'student_loan', 'other_liability'
limitnumberYesCredit limit or total debt amount
monthly_repaymentnumberYesMonthly repayment amount
ratenumberYesInterest rate (percentage)
remaining_termnumberYesRemaining term in months

Example:

{
"id": "liability-1",
"loan_type": "credit_card",
"limit": 15000,
"monthly_repayment": 300,
"rate": 19.5,
"remaining_term": 0
}
Living Expenses

Household living expenses for servicing calculations.

FieldTypeRequiredDescription
idstringYesUnique identifier
simple_basic_expensenumberYesSimple monthly basic living expenses
use_detailed_basic_expensebooleanYesWhether to use detailed expense breakdown
primary_residencenumberYesPrimary residence costs (rent/mortgage)
phone_internet_medianumberYesCommunications and media
food_and_groceriesnumberYesFood and grocery spending
transportnumberYesTransport costs
utilitiesnumberYesElectricity, gas, water
clothingnumberYesClothing expenses
medicalnumberYesMedical and health costs
educationnumberYesEducation expenses
childcarenumberYesChildcare costs
insurancenumberYesInsurance premiums
recreationnumberYesRecreation and entertainment

Example:

{
"id": "expenses-1",
"simple_basic_expense": 3000,
"use_detailed_basic_expense": false,
"primary_residence": 2500,
"phone_internet_media": 200,
"food_and_groceries": 800,
"transport": 400,
"utilities": 300,
"clothing": 150,
"medical": 100,
"education": 200,
"childcare": 500,
"insurance": 150,
"recreation": 300
}
Home Loan Security Links

Links loans to their security properties.

FieldTypeRequiredDescription
home_loan_idstringYesID of the home loan
security_idstringYesID of the security property

Example:

{
"home_loan_id": "loan-1",
"security_id": "property-1"
}
Additional Info

Additional configuration and flags for the scenario.

FieldTypeRequiredDescription
useDependantAgesbooleanYesWhether to use specific dependent ages in calculations

Example:

{
"useDependantAges": false
}

Here’s a complete minimal scenario for a single applicant purchasing their first home:

{
"households": [{
"id": "h1",
"status": "single",
"num_adults": 1,
"num_dependants": 0,
"postcode": 2000,
"shared_with_households": []
}],
"income": [{
"id": "i1",
"which_household": 0,
"name": "Primary Job",
"payg": 95000,
"casual": 0,
"commission": 0,
"overtime": 0,
"bonus": 0,
"allowances": 0,
"superannuation_income": 0,
"centrelink": 0,
"child_support_received": 0,
"other_income": 0
}],
"securities": [{
"id": "s1",
"address": "10 Example St, Sydney NSW 2000",
"postcode": "2000",
"transaction_type": "purchasing",
"applicant_ownership": [100],
"value": 750000,
"property_type": "unit",
"property_purpose": "owner_occupied",
"weekly_rental_income": 0,
"monthly_rental_expense": 0
}],
"home_loans": [{
"id": "l1",
"product_type": "variable_package",
"existing_or_proposed": "proposed",
"loan_type": "owner_occupied",
"lvr": 80,
"loan_amount": 600000,
"term": 30,
"interest_only_period": 0,
"lvr_behavior": "use-input"
}],
"liabilities": [],
"living_expenses": [{
"id": "e1",
"simple_basic_expense": 2500,
"use_detailed_basic_expense": false,
"primary_residence": 0,
"phone_internet_media": 150,
"food_and_groceries": 500,
"transport": 200,
"utilities": 200,
"clothing": 100,
"medical": 50,
"education": 0,
"childcare": 0,
"insurance": 100,
"recreation": 200
}],
"rental_income": [],
"self_employed_income": [],
"home_loan_security_links": [{
"home_loan_id": "l1",
"security_id": "s1"
}],
"additional_info": {
"useDependantAges": false
}
}
  • num_adults must be 1 or 2
  • num_dependants must be non-negative
  • postcode must be between 1000-9999 (Australian postcodes)
  • For couples, num_adults should be 2
  • All income values must be non-negative
  • which_household must reference valid household index
  • At least one income field should be greater than 0 for realistic scenarios
  • value must be greater than 0
  • applicant_ownership percentages must sum to 100
  • If property_purpose is 'investment', should have weekly_rental_income greater than 0
  • loan_amount must be greater than 0
  • lvr must be between 0-100
  • term typically 1-30 years
  • interest_only_period must not exceed term
  • Loan should be linked to a security via home_loan_security_links
  • All expense values must be non-negative
  • If use_detailed_basic_expense is true, detailed fields override simple_basic_expense
{
"households": [{
"id": "h1",
"status": "couple",
"num_adults": 2,
"num_dependants": 1,
"postcode": 2000,
"shared_with_households": []
}],
"income": [
{
"id": "i1",
"which_household": 0,
"name": "Applicant 1",
"payg": 95000,
// ... other fields
},
{
"id": "i2",
"which_household": 0,
"name": "Applicant 2",
"payg": 75000,
// ... other fields
}
]
}
{
"securities": [{
"id": "s1",
"address": "5 Investment Ave, Melbourne VIC 3000",
"postcode": "3000",
"transaction_type": "purchasing",
"applicant_ownership": [100],
"value": 600000,
"property_type": "unit",
"property_purpose": "investment",
"rental_type": "residential",
"weekly_rental_income": 550,
"monthly_rental_expense": 400
}]
}
{
"securities": [{
"transaction_type": "refinancing",
// ... other fields
}],
"home_loans": [{
"existing_or_proposed": "existing",
"loan_amount": 450000,
// ... other fields
}]
}

Last updated: 2025-11-03