Angle JSON

Angle Auto Finance Application JSON

Application JSON details shown with system field source information.

When Angle Application event created, information stored in attached PDF in Response section.

Use to help diagnose issues when application fails.


Top Notes

[1] Mapping: Field delivered from mapping. Visit Angle Mapping page.

[2] individualDetails - addresses - previous address: Shown if populated. Otherwise section not passed.

[3] individualDetails - addresses - employmentType (Previous Employment): Optional section added when previous employment details required.

[4] additionalDetails - answers: Hard-coded. Check process matches information being sent.


JSON Structure Overview

Application JSON contains following main sections with field mappings and data sources.


externalSystemReference, contractAttributes, campaignDetails

{ "externalSystemReference": "CODE_179519", "contractAttributes": { "signatureDate": "2024-04-08", "contractStartDate": "2024-04-08", "advance": "Advanced", "installmentDeferredMonths": 1 }, "campaignDetails": { "productCode": "NOVLEASE" } } 

clientDetails

"clientDetails": { "clientNumber": "", "owner": "", "clientApplication": "", "legalName": "", "groupName": "", "taxRegion": "VIC" } 

applicantDetails

"applicantDetails": { "primaryApplicant": { "applicantType": "PRIMEB", "businessDetails": { "industry": "[1] Mapping" } } } 

individualDetails

"individualDetails": { "firstName": "", "lastName": "", "otherNamesExist": "N", "title": "Mr", "dateOfBirth": "1988-08-12", "gender": "Male", "relationshipStatus": "Married", "visaStatus": "Citizen", "residentialStatus": "RentingEmployerProvided", "countryOfResidence": "AU", "numberOfDependents": 0, "externalSystemReference": "CODE_179519", "anzsicCode": "A011500", "driversLicenseDetails": { "number": "5245124", "state": "NSW", "expiryDate": "2026-02-16", "cardNumber": "BA555500" } } 

Note: All fields marked [1] above are delivered from mapping. Refer Angle Mapping page.


employmentDetails

"employmentDetails": [ { "employmentType": "FullTimeEmployed", "occupationType": "Other", "startDate": "2023-01-03", "employerName": "MKT Taxation Advisors", "entityType": "Other", "companyRegistrationNumber": "51 094 591 438", "externalSystemReference": "CODE_179519", "anzsicCode": "AB33990" } ] 

Note: employmentType, occupationType, entityType marked [1] delivered from mapping.


contactDetails (individualDetails)

"contactDetails": { "emails": [ { "type": "WK", "value": "[angle_api_contact_details Email Address]", "defaultDelivery": "EmailBusiness" }, { "type": "HM", "value": "", "defaultDelivery": "EmailHome" } ], "phones": [ { "type": "HM", "countryCode": "61", "areaCode": "02", "number": "" }, { "type": "WK", "countryCode": "61", "areaCode": "08", "number": "[angle_api_contact_details Phone]" } ], "mobiles": [ { "type": "MB", "countryCode": "61", "number": "" } ] } 

addresses

Driver addresses used in JSON only if stored using autocomplete address process (address_detail_pid exists).

Postal address not passed in JSON.

When driver at current home address less than 3 years, previous home address required.

"addresses": [ { "externalSystemReference": "CODE_179519", "addressType": "Street", "unitNumber": "", "streetNumber": "65", "streetName": "SAMPSON ST", "suburb": "ORANGE", "state": "NSW", "postalCode": "2800", "country": "AU", "effectiveDateFrom": "2022-07-03" }, { "externalSystemReference": "CODE_179519", "addressType": "Street", "unitNumber": "", "streetNumber": "25", "streetName": "JULIA ST", "suburb": "PORTLAND", "state": "VIC", "postalCode": "3305", "country": "AU", "effectiveDateFrom": "2017-07-03", "effectiveDateTo": "2022-07-02" }, { "externalSystemReference": "CODE_179519", "addressType": "Mailing", "unitNumber": "", "streetNumber": "65", "streetName": "SAMPSON ST", "suburb": "ORANGE", "state": "NSW", "postalCode": "2800", "country": "AU", "effectiveDateFrom": "2023-01-03" } ] 

Note [2]: Previous address shown if populated. Otherwise section not passed.


employmentType (Previous Employment)

{ "employmentType": "Unknown", "occupationType": "Other", "startDate": "2016-09-02", "endDate": "2023-01-02", "employerName": "Taxation Consultants R Us", "entityType": "Other", "companyRegistrationNumber": "", "externalSystemReference": "CODE_179519", "anzsicCode": "T999999" } 

Note [3]: employmentType, occupationType, entityType hard-coded. anzsicCode hard-coded T999999.


paymentInstructions

"paymentInstructions": { "payment": { "paymentMethod": "CBA Direct Credit" } } 

consent and additionalDetails

"additionalDetails": { "isCreditCheckAuthorised": "Y", "isIdentificationVerified": "N", "isIdentificationVerifiedByAnotherSystem": "Y" }, "consent": { "isPrivacyConsentGiven": "Y", "isDvsConsentGiven": "Y" } 

Note [4]: isIdentificationVerified hard-coded. Check process matches information being sent.


financialCircumstances

capacityAssessment questions have hard-coded answers. Review credit application process before submitting to ensure answers correct for driver.

Income and Expense records from specific fields in Drivers / Finances tab. See Financial Circumstances details.

Asset and Liability records from Drivers / Assets & Liabilities tab.

Note: When liability passed for Credit Card Limit, Angle system recalculates Monthly Payment based on own criteria. Response PDF contains different amount for this field.

"financialCircumstances": { "capacityAssessment": { "isAssessmentQuestionsAsked": "Y", "isSelfDeclaration": "N", "isReductionClaimed": "Y", "areAnyChangesExpected": "N" }, "assets": [ {"amount": 750000, "type": "Other"}, {"amount": 25000, "type": "Car"} ], "liabilities": [ { "amount": 11000, "description": "Motor Vehicle Loan", "type": "Automotive Loan" }, { "amount": 25000, "description": "Credit Card Limit", "type": "Credit Card", "expense": {"amount": 1201, "frequency": "Monthly"}, "financierName": "Commonwealth Bank of Australia" } ], "incomes": [ { "amount": 1200, "frequency": "Monthly", "description": "Monthly Spouse Net Income", "type": "Spousal Income" }, { "amount": 1630, "frequency": "Monthly", "description": "Monthly Rental Income", "type": "Rental Income" }, { "amount": 3200, "frequency": "Monthly", "description": "Monthly Investment Income", "type": "Investment Income" } ], "expenses": [ { "amount": 3250, "frequency": "Monthly", "description": "Mortgage", "type": "Rent or Board Expense" }, { "amount": 1200, "frequency": "Monthly", "description": "Rent", "type": "Rent or Board Expense" }, { "amount": 1500, "frequency": "Monthly", "description": "Household", "type": "Basic Living Expense" }, { "amount": 250, "frequency": "Monthly", "description": "Credit Cards", "type": "Basic Living Expense" }, { "amount": 2500, "frequency": "Monthly", "description": "Vehicle", "type": "Car and Transport" } ] } 

applicationDetails

"applicationDetails": { "term": 60, "termType": "Monthly", "interestRate": 0.04, "purchaseMoneySecurityInterest": "N", "instalmentFrequency": "Monthly", "applicationPurpose": "Non-Business", "assets": [ { "classification": "MV", "condition": "New", "make": "VOLVO", "annualKms": 15000, "externalSystemReference": "CODE_179519", "model": "XC60", "subModel": "ULTIMATE B5 BRIGHT MHEV", "taxRegion": "VIC", "transmissionType": "8 SP AUTOMATIC", "fuelType": "PREMIUM UNLEADED PETROL", "odometer": 0, "numberOfDoors": 4, "buildDate": "2024-01-01", "purchasePrice": 87665.2, "luxuryCarTax": 1262.31, "nvic": "0DP324", "possessionDate": "2024-04-08", "recommendedRetailPriceCost": 80057.69, "engineCapacity": 2, "residualValue": 13226.36, "insurances": [ { "insuranceType": "Comprehensive Insurance", "insurerName": "Other", "premium": 2867.88, "sumInsured": 87665.2, "commencementDate": "2024-04-08", "insuranceTerm": {"value": 60, "frequency": "M"} } ], "fees": [ {"code": "AKFN", "amount": 20, "description": "Acc keeping fees"}, {"code": "BKGE", "amount": 3250.23}, {"code": "BKGE2", "amount": 0}, {"code": "ESTFEENL", "amount": 920}, {"code": "ORIGFEE", "amount": 440}, {"code": "PPSRFEE", "amount": 0}, {"code": "DDF", "amount": 0}, {"code": "ETFEE", "amount": 0}, {"code": "REGO", "amount": 925}, {"code": "SD", "amount": 2500.1} ] } ] } 

stateChangeNotification

"stateChangeNotification": { "loanConsultantEmail": "[angle_api_contact_details Email Address]" } 

Employment Type Mapping

Field location: Drivers / Finances tab.

Angle Finance field name: employmentType

Employment Type mapped to employmentType. Below accepted values by Angle Finance.

Accepted Current Employment Values

Employment Type

FullTimeEmployed

PartTimeEmployed

Contractor

Accepted Previous Employment Values

Not mapped and not used in application:

Employment Type

FullTimeEmployed

PartTimeEmployed

Contractor

Selfemployed

Seasonal

Unknown

Default Mappings

Employment Type

Angle - employmentType

NULL

Unknown

Permanent Part Time

PartTimeEmployed

Full Time

FullTimeEmployed

Dependent Contractor

Contractor

Independent Contractor

Contractor

Review fm_driver_employment_types

System may contain some or all records below. Review and update selection criteria and status_flag settings.

Employment Type

Angle - employmentType

Status

Permanent Part Time

PartTimeEmployed

Active

Full Time

FullTimeEmployed

Active

Dependent Contractor

Contractor

Active

Independent Contractor

Contractor

Active

Casual

N/A

Failed application

Other (Home Duties etc.)

N/A

Failed application

Retired

N/A

Failed application

Self Employed

N/A

Failed application

Social Security Recipient

N/A

Failed application

Student

N/A

Failed application

Temporary

N/A

Failed application

Unemployed

N/A

Failed application

Mapping Updates

If Angle modify list by adding field name options or removing existing values, refer Mapping Updates process pages.

Useful Queries

Employment Type Mappings

select tif.table_name, tif.field_name, tift.field_value, det.description, tif.interface_field_name, tift.interface_value from qt_interface_fields as tif left join qt_interface_field_translations as tift on tift.interface_field_id = tif.interface_field_id left join fm_driver_employment_types as det on det.driver_employment_type_code = tift.field_value where tif.interface_type = 'angle' and tif.interface_field_name = 'employmentType' and tift.status_flag = 'active' order by tift.interface_value desc, tift.field_value, det.description; 

Employment Type List with Mappings

select proper(det.description) as employment_type, tif.interface_type, tif.table_name, tif.field_name, tift.field_value, tif.interface_field_name, tift.interface_value from fm_driver_employment_types as det left join qt_interface_field_translations as tift on tift.field_value = det.driver_employment_type_code and tift.status_flag = 'active' left join qt_interface_fields as tif on tif.interface_field_id = tift.interface_field_id and tif.interface_type = 'angle' and tif.interface_field_name = 'employmentType' where det.status_flag = 'active' order by tift.interface_value desc, tift.field_value, det.description; 

Set-up Queries for Catch-e Staff

Selections and Data Checks

select * from fm_driver_employment_types; select * from gb_unique_ids where table_name = 'fm_driver_employment_types'; 

Create New Employment Types

START TRANSACTION; SELECT @next_id := unique_id from gb_unique_ids where table_name = 'fm_driver_employment_types'; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'FTM', 'PERMANENT_FULL_TIME', 'full-time'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'PTM', 'PERMANENT_PART_TIME', 'permanent-part-time'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'DCR', '', 'Dependent Contractor'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'ICR', 'SELF_EMPLOYED_CONTRACTOR', 'Independent Contractor'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; REPLACE INTO gb_unique_ids VALUES('fm_driver_employment_types', @next_id); COMMIT; 

Review New Records

select * from fm_driver_employment_types; 

Notes

  • Application JSON structure complex with multiple sections covering individual, employment, financial details

  • Field mappings [1] required for several fields to align Catch-e and Angle Finance values

  • Previous employment details optional and hard-coded values used

  • Driver must be autocomplete address compliant for address data to pass

  • Credit Card Limit monthly payment recalculated by Angle system

  • capacityAssessment questions hard-coded - review before submission

  • Contact details from angle_api_contact_details Global Control if populated

  • Employment Type only 3 current types accepted: FullTimeEmployed, PartTimeEmployed, Contractor

  • 8 employment types result in failed application: Casual, Other, Retired, Self Employed, Social Security, Student, Temporary, Unemployed