Angle Finance Mappings: JSON

Angle Finance field mapping tables and JSON configuration

JSON

The details of the application JSON are shown below with added details of system fields being used.

When an Angle Application event is created, this information is stored in the attached PDF in the Response section.

Use this to help diagnose issues when an application fails.

Topnotes

[1] Mapping - the field is delivered from a mapping. Visit Angle Mapping.

[2] individualDetails - addresses - previous address shown if populated. Otherwise this section is not passed.

[3] individualDetails - addresses - employmentType) - an optional section that is added when previous employment details are required.

[4] additionalDetails - answers to these questions are hard-coded. Check that your process matches the information being sent here.

externalSystemReference, contractAttributes, campaignDetails

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

client Details

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

applicantDetails

"applicantDetails": {"primaryApplicant": {"applicantType": "PRIMEB","businessDetails": {"industry": ""},

individualDetails

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

employmentDetails

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

contactDetails

"contact Details": {"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's addresses can only be used in this JSON if they have been stored using the autocomplete addressprocess, I.e. there is an addressdetailpid.
If a postal address is stored, it is not passed in the JSON.
When driver has been at current home address for less than 3 years, their previous home address is required.

[2] individualDetails - addresses - previous address shown if populated. Otherwise this section is not passed.

"addresses": [{"externalSystemReference": ""CODE_179519 "","addressType": "Street where table_key = 'address_id_home' ","unitNumber": "","streetNumber": "65 ","streetName": "SAMPSON ST","suburb": "ORANGE","state": "NSW","postalCode": "2800","country": "AU","effectiveDateFrom": "2022-07-03 "},{"externalSystemReference": ""CODE_179519 "","addressType": "Street' ", - Use where is populated"unitNumber": "","streetNumber": "25","streetName": "JULIA ST","suburb": "PORTLAND","state": "VIC","postalCode": "3305","country": "AU","effectiveDateFrom": "2017-07-03" - Use to derive a date. In this example, 5 years is used."effectiveDateTo": "2022-07-02" - Will be one day less than current address "effectiveDateFrom"},{"externalSystemReference": "CODE_179519","addressType": "Mailing where table_key = 'address_id_post'","unitNumber": "","streetNumber": "65 ","streetName": "SAMPSON ST","suburb": "ORANGE","state": "NSW","postalCode": "2800","country": "AU","effectiveDateFrom": "2023-01-03 "}]},

employmentType (Previous Employment)

[3] individualDetails - addresses - employmentType) - an optional section that is added when previous employment details are required.

{"employmentType": "Unknown", [3] Hard coded."occupationType": "Other", [3] Hard coded"startDate": "2016-09-02", [3] - 1 day - ( * 365)"endDate": "2023-01-02", [3] - 1 day"employerName": "Taxation Consultants R Us", "entityType": "Other", [3] Hard coded"companyRegistrationNumber": [3] "externalSystemReference": ""CODE_179519 "","anzsicCode": "T999999", [3] Hard coded - }

paymentInstructions

"paymentInstructions": {"payment": {"paymentMethod": "CBA Direct Credit"}},
"additionalDetails": {"isCreditCheckAuthorised": "Y", "isIdentificationVerified": "N", [4] hardcoded"isIdentificationVerifiedByAnotherSystem": "Y" },"consent": {"isPrivacyConsentGiven": "Y", "isDvsConsentGiven": "Y" },

[4] isIdentificationVerified - answer to this question is hard-coded. Check that your process matches the information being sent here.

financialCircumstances

capacityAssessment - The five "capacityAssessment" questions have hard-coded answers.
You will need to review your credit application process to make sure these answers are correct for the driver before submitting an application.

Income and Expense records come from specific fields in the Drivers / Finances tab. See full details here financialCircumstances

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

Note - when a liability is passed for 'Credit Card Limit' "Balance" and "Monthly Payment", Angle's system will re-calculate the "Monthly Payment" based on their own criteria. This means the Response PDF will contain a 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, )amount"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"}]},

contactDetails

"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": "54676655"},{"type": "WK","countryCode": "61","areaCode": "08","number": "62053575"}],"mobiles": [{"type": "MB","countryCode": "61","number": "0428563998"}]},

addresses

"addresses": [{"externalSystemReference": "CODE_179519","addressType": "Street","unitNumber": "","streetNumber": "65 ","streetName": "SAMPSON ST","suburb": "ORANGE","state": "NSW","postalCode": "2800","country": "AU","effectiveDateFrom": "2023-01-03"},{"externalSystemReference": "CODE_179519","addressType": "Mailing","unitNumber": "","streetNumber": "65 ","streetName": "SAMPSON ST","suburb": "ORANGE","state": "NSW","postalCode": "2800","country": "AU","effectiveDateFrom": "2023-01-03"}]}},

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" "}}

employmentType

This page is currently under construction

interface_typeinterfacefieldnametable_namefield_nametranslations
angleindustryfmclientindustriesclientindustrycode1
anglegenderfm_driversgender4
anglerelationshipStatusfm_driversmarital_status8
anglevisaStatusfm_driversresidency_status5
angleresidentialStatusfm_driversresidential_status6
angletitlefm_driverssalutation7
angleemploymentTypefmdriveremployment_typesdriveremploymenttype_code5
angleoccupationTypefmdriveroccupation_codesdriveroccupationcode1
angleinsurerNamefm_supplierssupplier_code20
angleentityTypegbcorporatetypescorporate_code16
anglefuelTypeqtfueltype_translationsfueltypecode10
angleESTFEENLqt_quotesestablishment_fee0
angleassetConditionqt_quotesnew_used3
angleORIGFEEqt_quotesoriginator_fee0

Employment Type β†’ employmentType

The "Employment Type" field can be found in Catch-e on the Drivers / Finances tab.

Angle Finance refers to this field as "employmentType".

Below are the accepted 'Employment Types' by Angle Finance.

| Employment Type |
| --- | | FullTimeEmployed | | PartTimeEmployed | | Contractor |

| Previous Employment (not mapped and not used in the application) |
| --- | | FullTimeEmployed | | PartTimeEmployed | | Contractor | | Selfemployed | | Seasonal | | Unknown |

Default Mappings

Employment TypeAngle - employmentType
NULLUnknown
Permanent Part TimePartTimeEmployed
Full TimeFullTimeEmployed
Dependent ContractorContractor
Independent ContractorContractor

Review fmdriveremployment_types

Your system may contain the some or all of the following records.

Review and update the selection criteria and status_flag settings as required.

Employment TypeAngle - employmentType
Permanent Part TimePartTimeEmployed
Full TimeFullTimeEmployed
Dependent ContractorContractor
Independent ContractorContractor
CasualN/a - Will result in failed application
Other (Home Duties etc.)N/a - Will result in failed application
RetiredN/a - Will result in failed application
Self EmployedN/a - Will result in failed application
Social Security RecipientN/a - Will result in failed application
StudentN/a - Will result in failed application
TemporaryN/a - Will result in failed application
UnemployedN/a - Will result in failed application

Mapping Updates

If Angle modify this list by adding more field name options or remove existing values, refer to the Mapping Updates process pages.

Useful Queries

## employmentType mappingsselect tif.table_name, tif.field_name, tift.field_value, det.description, tif.interface_field_name, interface_valuefrom qt_interface_fields as tifleft join qt_interface_field_translations as tift on tift.interface_field_id = tif.interface_field_idleft join fm_driver_employment_types as det on det.driver_employment_type_code = tift.field_valuewhere 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 mappingsselect proper(det.description) as employment_type, tif.interface_type, tif.table_name, tif.field_name, tift.field_value, tif.interface_field_name, interface_valuefrom fm_driver_employment_types as detleft 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 checksselect * from fm_driver_employment_types; # No recordsselect * from gb_unique_ids where table_name = 'fm_driver_employment_types';START TRANSACTION;## Create New employment typesSELECT @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');## Update gb_unique_idsSELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types;REPLACE INTO gb_unique_ids VALUES('gb_originators', @next_id);COMMIT;## Reveiw new recordsselect * from fm_driver_employment_types; # 4 records