{
	"title": "Test Result Cat AM1 Schema",
	"type": "object",
	"definitions": {
		"singleFaultCompetencies": {
			"additionalProperties": false,
			"description": "Single fault competencies associated with the test",
			"properties": {
				"useOfStand": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"useOfStandComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"manualHandling": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"manualHandlingComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"slalom": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"slalomComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"slowControl": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"slowControlComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"uTurn": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"uTurnComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"controlledStop": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"controlledStopComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"emergencyStop": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"emergencyStopComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"avoidance": {
					"description": "The possible outcomes of any single fault competency",
					"enum": [
						"DF",
						"S",
						"D"
					],
					"type": "string"
				},
				"avoidanceComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				}
			}
		},
		"circuit": {
			"description": "Circuit completed (left or right)",
			"type": "string",
			"enum": [
				"Left",
				"Right"
			]
		},
		"testData": {
			"additionalProperties": false,
			"description": "Data associated with the test",
			"properties": {
				"singleFaultCompetencies": {
					"additionalProperties": false,
					"description": "Single fault competencies associated with the test",
					"properties": {
						"useOfStand": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"useOfStandComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"manualHandling": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"manualHandlingComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"slalom": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"slalomComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"slowControl": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"slowControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"uTurn": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"uTurnComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"controlledStop": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"controlledStopComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"emergencyStop": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"emergencyStopComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"avoidance": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"avoidanceComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					}
				},
				"emergencyStop": {
					"description": "The outcome of emergency stop tests",
					"type": "object",
					"additionalProperties": false,
					"properties": {
						"firstAttempt": {
							"description": "The speed of the first attempt",
							"type": "integer"
						},
						"secondAttempt": {
							"description": "The speed of the second attempt",
							"type": "integer"
						},
						"outcome": {
							"description": "The possible outcomes of speed requirment fault competency",
							"enum": [
								"S"
							],
							"type": "string"
						},
						"comments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					}
				},
				"avoidance": {
					"description": "The outcome of avoidance tests",
					"type": "object",
					"additionalProperties": false,
					"properties": {
						"firstAttempt": {
							"description": "The speed of the first attempt",
							"type": "integer"
						},
						"secondAttempt": {
							"description": "The speed of the second attempt",
							"type": "integer"
						},
						"outcome": {
							"description": "The possible outcomes of speed requirment fault competency",
							"enum": [
								"S"
							],
							"type": "string"
						},
						"comments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					}
				},
				"drivingFaults": {
					"description": "The driving faults accumulated during the test",
					"type": "object",
					"properties": {
						"precautions": {
							"description": "The count of the number of driving faults recorded against a test element",
							"type": "integer"
						},
						"precautionsComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffSafety": {
							"description": "The count of the number of driving faults recorded against a test element",
							"type": "integer"
						},
						"moveOffSafetyComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffControl": {
							"description": "The count of the number of driving faults recorded against a test element",
							"type": "integer"
						},
						"moveOffControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					},
					"additionalProperties": false
				},
				"seriousFaults": {
					"description": "The serious faults accumulated during the test",
					"type": "object",
					"properties": {
						"precautions": {
							"description": "Indicator for a serious fault being recorded against a test element",
							"type": "boolean"
						},
						"precautionsComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffSafety": {
							"description": "Indicator for a serious fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffSafetyComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffControl": {
							"description": "Indicator for a serious fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					},
					"additionalProperties": false
				},
				"dangerousFaults": {
					"description": "The dangerous faults accumulated during the test",
					"type": "object",
					"properties": {
						"precautions": {
							"description": "Indicator for a dangerous fault being recorded against a test element",
							"type": "boolean"
						},
						"precautionsComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffSafety": {
							"description": "Indicator for a dangerous fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffSafetyComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffControl": {
							"description": "Indicator for a dangerous fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					},
					"additionalProperties": false
				},
				"ETA": {
					"description": "Indicates whether the examiner had to take physical or verbal action during the test",
					"type": "object",
					"properties": {
						"physical": {
							"description": "Indicates that the examiner had to take physical action",
							"type": "boolean"
						},
						"verbal": {
							"description": "Indicates that the examiner had to take verbal action",
							"type": "boolean"
						}
					},
					"additionalProperties": false
				}
			},
			"type": "object"
		},
		"singleFaultCompetencyOutcome": {
			"description": "The possible outcomes of any single fault competency",
			"enum": [
				"DF",
				"S",
				"D"
			],
			"type": "string"
		},
		"SpeedRequirementCompetencyOutcome": {
			"description": "The possible outcomes of speed requirment fault competency",
			"enum": [
				"S"
			],
			"type": "string"
		},
		"examiner": {
			"description": "The examiner details",
			"type": "object",
			"properties": {
				"staffNumber": {
					"description": "The examiner's DSA staff number",
					"type": "string",
					"maxLength": 10
				},
				"individualId": {
					"description": "The individual ID of the examiner",
					"type": "number"
				}
			},
			"additionalProperties": false,
			"required": [
				"staffNumber"
			]
		},
		"testCentre": {
			"description": "Details of the test centre",
			"type": "object",
			"properties": {
				"centreId": {
					"description": "Identifer for the test centre",
					"type": "integer"
				},
				"costCode": {
					"description": "Cost centre code for the test centre",
					"type": "string",
					"maxLength": 6
				},
				"centreName": {
					"description": "Name of the test centre",
					"type": "string",
					"maxLength": 50
				}
			},
			"additionalProperties": false,
			"required": [
				"centreId",
				"costCode"
			]
		},
		"name": {
			"description": "Details of the individual's name",
			"type": "object",
			"properties": {
				"title": {
					"description": "The individual's title",
					"type": "string",
					"maxLength": 7
				},
				"firstName": {
					"description": "The individual's forename",
					"type": "string",
					"maxLength": 50
				},
				"secondName": {
					"description": "The individual's second name",
					"type": "string",
					"maxLength": 50
				},
				"thirdName": {
					"description": "The individual's third name",
					"type": "string",
					"maxLength": 50
				},
				"lastName": {
					"description": "The individual's surname",
					"type": "string",
					"maxLength": 50
				}
			},
			"additionalProperties": false
		},
		"address": {
			"description": "Details of the address",
			"type": "object",
			"properties": {
				"addressLine1": {
					"description": "First line of address",
					"type": "string",
					"maxLength": 255
				},
				"addressLine2": {
					"description": "Second line of address",
					"type": "string",
					"maxLength": 100
				},
				"addressLine3": {
					"description": "Third line of address",
					"type": "string",
					"maxLength": 100
				},
				"addressLine4": {
					"description": "Fourth line of address",
					"type": "string",
					"maxLength": 100
				},
				"addressLine5": {
					"description": "Fifth line of address",
					"type": "string",
					"maxLength": 255
				},
				"postcode": {
					"description": "The address postcode",
					"type": "string",
					"maxLength": 255
				}
			},
			"additionalProperties": false
		},
		"candidate": {
			"description": "Details of the candidate booked into the test slot",
			"type": "object",
			"properties": {
				"candidateId": {
					"description": "The id of the test candidate",
					"type": "integer"
				},
				"candidateName": {
					"description": "Details of the individual's name",
					"type": "object",
					"properties": {
						"title": {
							"description": "The individual's title",
							"type": "string",
							"maxLength": 7
						},
						"firstName": {
							"description": "The individual's forename",
							"type": "string",
							"maxLength": 50
						},
						"secondName": {
							"description": "The individual's second name",
							"type": "string",
							"maxLength": 50
						},
						"thirdName": {
							"description": "The individual's third name",
							"type": "string",
							"maxLength": 50
						},
						"lastName": {
							"description": "The individual's surname",
							"type": "string",
							"maxLength": 50
						}
					},
					"additionalProperties": false
				},
				"driverNumber": {
					"description": "The candidate's driver number, typically (though not always) 16 characters if UK, or 8 digits if NI",
					"type": "string",
					"maxLength": 24
				},
				"dateOfBirth": {
					"description": "The candidate's date of birth, formatted as an ISO 8601 date (YYYY-MM-DD)",
					"type": "string",
					"minLength": 10,
					"maxLength": 10
				},
				"gender": {
					"description": "The gender of an individual, limited to 'M' or 'F' as per TARS master data",
					"type": "string",
					"enum": [
						"M",
						"F"
					]
				},
				"candidateAddress": {
					"description": "Details of the address",
					"type": "object",
					"properties": {
						"addressLine1": {
							"description": "First line of address",
							"type": "string",
							"maxLength": 255
						},
						"addressLine2": {
							"description": "Second line of address",
							"type": "string",
							"maxLength": 100
						},
						"addressLine3": {
							"description": "Third line of address",
							"type": "string",
							"maxLength": 100
						},
						"addressLine4": {
							"description": "Fourth line of address",
							"type": "string",
							"maxLength": 100
						},
						"addressLine5": {
							"description": "Fifth line of address",
							"type": "string",
							"maxLength": 255
						},
						"postcode": {
							"description": "The address postcode",
							"type": "string",
							"maxLength": 255
						}
					},
					"additionalProperties": false
				},
				"primaryTelephone": {
					"description": "The candidate's primary telephone number, if any (and consent to leave voicemail has been given)",
					"type": "string",
					"maxLength": 20
				},
				"secondaryTelephone": {
					"description": "The candidate's secondary telephone number, if any (and consent to leave voicemail has been given)",
					"type": "string",
					"maxLength": 20
				},
				"mobileTelephone": {
					"description": "The candidate's mobile telephone number, if any (and consent to leave voicemail has been given)",
					"type": "string",
					"maxLength": 30
				},
				"emailAddress": {
					"description": "The candidate's email address, if any",
					"type": "string",
					"maxLength": 100
				},
				"prn": {
					"description": "The candidate's ADI PRN (potential register number), if an ADI test",
					"type": "integer"
				},
				"previousADITests": {
					"description": "The number of previous test attempts, if an ADI test",
					"type": "integer"
				},
				"ethnicityCode": {
					"description": "A character between A and G representing different categories of ethnicity",
					"type": "string",
					"minLength": 1,
					"maxLength": 1
				}
			},
			"additionalProperties": false
		},
		"applicationReference": {
			"description": "The full application identifier, including applicationId, bookingSequence and checkDigit",
			"type": "object",
			"properties": {
				"applicationId": {
					"description": "Unique identifier for each test application",
					"type": "integer"
				},
				"bookingSequence": {
					"description": "Booking sequence number of the test application",
					"type": "integer"
				},
				"checkDigit": {
					"description": "Reference checksum for the test application",
					"type": "integer"
				}
			},
			"additionalProperties": false,
			"required": [
				"applicationId",
				"bookingSequence",
				"checkDigit"
			]
		},
		"initiator": {
			"description": "The reason for the previous test cancellation",
			"type": "string",
			"enum": [
				"Act of nature",
				"DSA"
			],
			"maxLength": 15
		},
		"testSlotAttributes": {
			"description": "The additional attributes of the test slot such as Slot Id, Category, Start Time, etc.",
			"type": "object",
			"properties": {
				"slotId": {
					"description": "Unique identifier for the journal test slot",
					"type": "integer"
				},
				"start": {
					"description": "Start time of the test slot",
					"type": "string",
					"minLength": 19,
					"maxLength": 19
				},
				"vehicleTypeCode": {
					"description": "A short alpha (and sometimes numeric) code describing the vehicle type in vehicle slot type",
					"type": "string",
					"minLength": 1,
					"maxLength": 2
				},
				"welshTest": {
					"description": "Whether the test is to be conducted using the welsh language",
					"type": "boolean"
				},
				"specialNeedsCode": {
					"description": "Special needs code",
					"type": "string",
					"enum": [
						"NONE",
						"YES",
						"EXTRA"
					]
				},
				"specialNeeds": {
					"description": "Whether the candidate has any special needs that require the D255 form to be completed",
					"type": "boolean"
				},
				"specialNeedsArray": {
					"description": "The special needs",
					"type": "array",
					"items": {
						"type": "string"
					}
				},
				"specialNeedsExtendedTest": {
					"description": "Whether the candidate requires an extended test due to special needs",
					"type": "boolean"
				},
				"extendedTest": {
					"description": "Whether this is an extended test",
					"type": "boolean"
				},
				"examinerVisiting": {
					"description": "Whether the examiner conducting the test slot is visiting a test centre that's not their home test centre",
					"type": "boolean"
				},
				"entitlementCheck": {
					"description": "Indicates whether the examiner needs to check the candidates entitlement evidence(e.g. test application has not been checked with DVLA)",
					"type": "boolean"
				},
				"fitMarker": {
					"description": "Indicates whether the candidate has previously had a fraud marker set against them",
					"type": "boolean"
				},
				"fitCaseNumber": {
					"description": "The integrity case number associated to the candidate",
					"type": "string"
				},
				"categoryEntitlementCheck": {
					"description": "Indicates whether the examiner needs to check the candidates entitlement based on new legislation around booking vocational categories",
					"type": "boolean"
				},
				"previousCancellation": {
					"description": "The details of any previous test cancellations",
					"type": "array",
					"items": {
						"description": "The reason for the previous test cancellation",
						"type": "string",
						"enum": [
							"Act of nature",
							"DSA"
						],
						"maxLength": 15
					}
				},
				"slotType": {
					"description": "A description of the types of test intended to be conducted in this slot (e.g. Standard Test / Extended Special Needs Test)",
					"type": "string"
				}
			},
			"additionalProperties": false,
			"required": [
				"slotId",
				"start",
				"vehicleTypeCode",
				"welshTest",
				"specialNeeds",
				"extendedTest"
			]
		},
		"journalData": {
			"description": "Data brought through from the journal",
			"type": "object",
			"properties": {
				"examiner": {
					"description": "The examiner details",
					"type": "object",
					"properties": {
						"staffNumber": {
							"description": "The examiner's DSA staff number",
							"type": "string",
							"maxLength": 10
						},
						"individualId": {
							"description": "The individual ID of the examiner",
							"type": "number"
						}
					},
					"additionalProperties": false,
					"required": [
						"staffNumber"
					]
				},
				"testCentre": {
					"description": "Details of the test centre",
					"type": "object",
					"properties": {
						"centreId": {
							"description": "Identifer for the test centre",
							"type": "integer"
						},
						"costCode": {
							"description": "Cost centre code for the test centre",
							"type": "string",
							"maxLength": 6
						},
						"centreName": {
							"description": "Name of the test centre",
							"type": "string",
							"maxLength": 50
						}
					},
					"additionalProperties": false,
					"required": [
						"centreId",
						"costCode"
					]
				},
				"testSlotAttributes": {
					"description": "The additional attributes of the test slot such as Slot Id, Category, Start Time, etc.",
					"type": "object",
					"properties": {
						"slotId": {
							"description": "Unique identifier for the journal test slot",
							"type": "integer"
						},
						"start": {
							"description": "Start time of the test slot",
							"type": "string",
							"minLength": 19,
							"maxLength": 19
						},
						"vehicleTypeCode": {
							"description": "A short alpha (and sometimes numeric) code describing the vehicle type in vehicle slot type",
							"type": "string",
							"minLength": 1,
							"maxLength": 2
						},
						"welshTest": {
							"description": "Whether the test is to be conducted using the welsh language",
							"type": "boolean"
						},
						"specialNeedsCode": {
							"description": "Special needs code",
							"type": "string",
							"enum": [
								"NONE",
								"YES",
								"EXTRA"
							]
						},
						"specialNeeds": {
							"description": "Whether the candidate has any special needs that require the D255 form to be completed",
							"type": "boolean"
						},
						"specialNeedsArray": {
							"description": "The special needs",
							"type": "array",
							"items": {
								"type": "string"
							}
						},
						"specialNeedsExtendedTest": {
							"description": "Whether the candidate requires an extended test due to special needs",
							"type": "boolean"
						},
						"extendedTest": {
							"description": "Whether this is an extended test",
							"type": "boolean"
						},
						"examinerVisiting": {
							"description": "Whether the examiner conducting the test slot is visiting a test centre that's not their home test centre",
							"type": "boolean"
						},
						"entitlementCheck": {
							"description": "Indicates whether the examiner needs to check the candidates entitlement evidence(e.g. test application has not been checked with DVLA)",
							"type": "boolean"
						},
						"fitMarker": {
							"description": "Indicates whether the candidate has previously had a fraud marker set against them",
							"type": "boolean"
						},
						"fitCaseNumber": {
							"description": "The integrity case number associated to the candidate",
							"type": "string"
						},
						"categoryEntitlementCheck": {
							"description": "Indicates whether the examiner needs to check the candidates entitlement based on new legislation around booking vocational categories",
							"type": "boolean"
						},
						"previousCancellation": {
							"description": "The details of any previous test cancellations",
							"type": "array",
							"items": {
								"description": "The reason for the previous test cancellation",
								"type": "string",
								"enum": [
									"Act of nature",
									"DSA"
								],
								"maxLength": 15
							}
						},
						"slotType": {
							"description": "A description of the types of test intended to be conducted in this slot (e.g. Standard Test / Extended Special Needs Test)",
							"type": "string"
						}
					},
					"additionalProperties": false,
					"required": [
						"slotId",
						"start",
						"vehicleTypeCode",
						"welshTest",
						"specialNeeds",
						"extendedTest"
					]
				},
				"candidate": {
					"description": "Details of the candidate booked into the test slot",
					"type": "object",
					"properties": {
						"candidateId": {
							"description": "The id of the test candidate",
							"type": "integer"
						},
						"candidateName": {
							"description": "Details of the individual's name",
							"type": "object",
							"properties": {
								"title": {
									"description": "The individual's title",
									"type": "string",
									"maxLength": 7
								},
								"firstName": {
									"description": "The individual's forename",
									"type": "string",
									"maxLength": 50
								},
								"secondName": {
									"description": "The individual's second name",
									"type": "string",
									"maxLength": 50
								},
								"thirdName": {
									"description": "The individual's third name",
									"type": "string",
									"maxLength": 50
								},
								"lastName": {
									"description": "The individual's surname",
									"type": "string",
									"maxLength": 50
								}
							},
							"additionalProperties": false
						},
						"driverNumber": {
							"description": "The candidate's driver number, typically (though not always) 16 characters if UK, or 8 digits if NI",
							"type": "string",
							"maxLength": 24
						},
						"dateOfBirth": {
							"description": "The candidate's date of birth, formatted as an ISO 8601 date (YYYY-MM-DD)",
							"type": "string",
							"minLength": 10,
							"maxLength": 10
						},
						"gender": {
							"description": "The gender of an individual, limited to 'M' or 'F' as per TARS master data",
							"type": "string",
							"enum": [
								"M",
								"F"
							]
						},
						"candidateAddress": {
							"description": "Details of the address",
							"type": "object",
							"properties": {
								"addressLine1": {
									"description": "First line of address",
									"type": "string",
									"maxLength": 255
								},
								"addressLine2": {
									"description": "Second line of address",
									"type": "string",
									"maxLength": 100
								},
								"addressLine3": {
									"description": "Third line of address",
									"type": "string",
									"maxLength": 100
								},
								"addressLine4": {
									"description": "Fourth line of address",
									"type": "string",
									"maxLength": 100
								},
								"addressLine5": {
									"description": "Fifth line of address",
									"type": "string",
									"maxLength": 255
								},
								"postcode": {
									"description": "The address postcode",
									"type": "string",
									"maxLength": 255
								}
							},
							"additionalProperties": false
						},
						"primaryTelephone": {
							"description": "The candidate's primary telephone number, if any (and consent to leave voicemail has been given)",
							"type": "string",
							"maxLength": 20
						},
						"secondaryTelephone": {
							"description": "The candidate's secondary telephone number, if any (and consent to leave voicemail has been given)",
							"type": "string",
							"maxLength": 20
						},
						"mobileTelephone": {
							"description": "The candidate's mobile telephone number, if any (and consent to leave voicemail has been given)",
							"type": "string",
							"maxLength": 30
						},
						"emailAddress": {
							"description": "The candidate's email address, if any",
							"type": "string",
							"maxLength": 100
						},
						"prn": {
							"description": "The candidate's ADI PRN (potential register number), if an ADI test",
							"type": "integer"
						},
						"previousADITests": {
							"description": "The number of previous test attempts, if an ADI test",
							"type": "integer"
						},
						"ethnicityCode": {
							"description": "A character between A and G representing different categories of ethnicity",
							"type": "string",
							"minLength": 1,
							"maxLength": 1
						}
					},
					"additionalProperties": false
				},
				"applicationReference": {
					"description": "The full application identifier, including applicationId, bookingSequence and checkDigit",
					"type": "object",
					"properties": {
						"applicationId": {
							"description": "Unique identifier for each test application",
							"type": "integer"
						},
						"bookingSequence": {
							"description": "Booking sequence number of the test application",
							"type": "integer"
						},
						"checkDigit": {
							"description": "Reference checksum for the test application",
							"type": "integer"
						}
					},
					"additionalProperties": false,
					"required": [
						"applicationId",
						"bookingSequence",
						"checkDigit"
					]
				}
			},
			"additionalProperties": false,
			"required": [
				"examiner",
				"testCentre",
				"testSlotAttributes",
				"candidate",
				"applicationReference"
			]
		},
		"signature": {
			"description": "Base 64 encoded binary data representing a PNG image of the candidates signature",
			"type": "string"
		},
		"communicationMethod": {
			"description": "The method of communication by which the candidate agrees to receive their results",
			"type": "string",
			"enum": [
				"Email",
				"Post",
				"Support Centre",
				"Not provided"
			]
		},
		"conductedLanguage": {
			"description": "The language in which a candidate agrees to perform a test",
			"type": "string",
			"enum": [
				"English",
				"Cymraeg",
				"Not provided"
			]
		},
		"communicationPreferences": {
			"type": "object",
			"additionalProperties": false,
			"properties": {
				"updatedEmail": {
					"description": "The email address that the candidate agrees their results can be sent to",
					"type": "string",
					"maxLength": 100
				},
				"communicationMethod": {
					"description": "The method of communication by which the candidate agrees to receive their results",
					"type": "string",
					"enum": [
						"Email",
						"Post",
						"Support Centre",
						"Not provided"
					]
				},
				"conductedLanguage": {
					"description": "The language in which a candidate agrees to perform a test",
					"type": "string",
					"enum": [
						"English",
						"Cymraeg",
						"Not provided"
					]
				}
			},
			"required": [
				"conductedLanguage"
			]
		},
		"preTestDeclarations": {
			"type": "object",
			"additionalProperties": false,
			"properties": {
				"insuranceDeclarationAccepted": {
					"description": "Whether or not the candidate has declared that their test vehicle has a valid insurance policy",
					"type": "boolean"
				},
				"residencyDeclarationAccepted": {
					"description": "Whether or not the candidate has declared that they have lived in the UK for a period acceptable for taking the test",
					"type": "boolean"
				},
				"preTestSignature": {
					"description": "Base 64 encoded binary data representing a PNG image of the candidates signature",
					"type": "string"
				},
				"DL196CBTCertNumber": {
					"description": "The number of the DL196 CBT certificate presented by the candidate",
					"type": "string"
				}
			},
			"required": [
				"insuranceDeclarationAccepted",
				"residencyDeclarationAccepted",
				"preTestSignature"
			]
		},
		"accompaniment": {
			"description": "Indicators for anybody else overseeing the test",
			"type": "object",
			"properties": {
				"ADI": {
					"description": "Indicates whether the ADI was present during the test",
					"type": "boolean"
				},
				"supervisor": {
					"description": "Indicates whether a DVSA supervisor was present during the test",
					"type": "boolean"
				},
				"interpreter": {
					"description": "Indicates whether an interpreter was present during the test",
					"type": "boolean"
				},
				"other": {
					"description": "Indicates whether another individual was present during the test",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"gearboxCategory": {
			"description": "The type of gearbox",
			"type": "string",
			"enum": [
				"Manual",
				"Automatic"
			]
		},
		"drivingFaultCount": {
			"description": "The count of the number of driving faults recorded against a test element",
			"type": "integer"
		},
		"faultComments": {
			"description": "Comments recorded against a fault",
			"type": "string",
			"maxLength": 1000
		},
		"drivingFaults": {
			"description": "The driving faults accumulated during the test",
			"type": "object",
			"properties": {
				"precautions": {
					"description": "The count of the number of driving faults recorded against a test element",
					"type": "integer"
				},
				"precautionsComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"moveOffSafety": {
					"description": "The count of the number of driving faults recorded against a test element",
					"type": "integer"
				},
				"moveOffSafetyComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"moveOffControl": {
					"description": "The count of the number of driving faults recorded against a test element",
					"type": "integer"
				},
				"moveOffControlComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				}
			},
			"additionalProperties": false
		},
		"seriousFaultIndicator": {
			"description": "Indicator for a serious fault being recorded against a test element",
			"type": "boolean"
		},
		"seriousFaults": {
			"description": "The serious faults accumulated during the test",
			"type": "object",
			"properties": {
				"precautions": {
					"description": "Indicator for a serious fault being recorded against a test element",
					"type": "boolean"
				},
				"precautionsComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"moveOffSafety": {
					"description": "Indicator for a serious fault being recorded against a test element",
					"type": "boolean"
				},
				"moveOffSafetyComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"moveOffControl": {
					"description": "Indicator for a serious fault being recorded against a test element",
					"type": "boolean"
				},
				"moveOffControlComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				}
			},
			"additionalProperties": false
		},
		"dangerousFaultIndicator": {
			"description": "Indicator for a dangerous fault being recorded against a test element",
			"type": "boolean"
		},
		"dangerousFaults": {
			"description": "The dangerous faults accumulated during the test",
			"type": "object",
			"properties": {
				"precautions": {
					"description": "Indicator for a dangerous fault being recorded against a test element",
					"type": "boolean"
				},
				"precautionsComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"moveOffSafety": {
					"description": "Indicator for a dangerous fault being recorded against a test element",
					"type": "boolean"
				},
				"moveOffSafetyComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				},
				"moveOffControl": {
					"description": "Indicator for a dangerous fault being recorded against a test element",
					"type": "boolean"
				},
				"moveOffControlComments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				}
			},
			"additionalProperties": false
		},
		"postTestDeclarations": {
			"type": "object",
			"properties": {
				"healthDeclarationAccepted": {
					"description": "Whether or not the candidate has declared that their health status hasn't changed since their last application",
					"type": "boolean"
				},
				"passCertificateNumberReceived": {
					"description": "Indicates whether the candidate acknowledges receipt of the PCN",
					"type": "boolean"
				},
				"postTestSignature": {
					"description": "Base 64 encoded binary data representing a PNG image of the candidates signature",
					"type": "string"
				}
			},
			"additionalProperties": false
		},
		"weatherConditions": {
			"description": "Predefined values for the type of weather encountered during the test",
			"type": "string",
			"enum": [
				"Bright / dry roads",
				"Bright / wet roads",
				"Raining through test",
				"Showers",
				"Foggy / misty",
				"Dull / wet roads",
				"Dull / dry roads",
				"Snowing",
				"Icy",
				"Windy"
			]
		},
		"identification": {
			"description": "Indicates which form of ID was provided by the candidate",
			"type": "string",
			"enum": [
				"Licence",
				"Passport"
			]
		},
		"testSummary": {
			"description": "Recording of other characteristics of the test",
			"type": "object",
			"properties": {
				"routeNumber": {
					"description": "Number of the route that was taken during the test",
					"type": "integer",
					"const": 88
				},
				"trueLikenessToPhoto": {
					"description": "Physical appearance resembles a true likeness to provided ID",
					"type": "boolean"
				},
				"candidateDescription": {
					"description": "Physical description of the candidate",
					"type": "string",
					"maxLength": 1000
				},
				"debriefWitnessed": {
					"description": "Indicates whether anybody else (e.g. ADI) was present for the debrief",
					"type": "boolean"
				},
				"identification": {
					"description": "Indicates which form of ID was provided by the candidate",
					"type": "string",
					"enum": [
						"Licence",
						"Passport"
					]
				},
				"weatherConditions": {
					"description": "Description of the type of weather encountered during the test",
					"type": "array",
					"items": {
						"description": "Predefined values for the type of weather encountered during the test",
						"type": "string",
						"enum": [
							"Bright / dry roads",
							"Bright / wet roads",
							"Raining through test",
							"Showers",
							"Foggy / misty",
							"Dull / wet roads",
							"Dull / dry roads",
							"Snowing",
							"Icy",
							"Windy"
						]
					}
				},
				"D255": {
					"description": "Indicates whether a D255 form needs to be completed",
					"type": "boolean"
				},
				"additionalInformation": {
					"description": "Any comments that the DE wants to record about the test",
					"type": "string"
				},
				"circuit": {
					"description": "Circuit completed (left or right)",
					"type": "string",
					"enum": [
						"Left",
						"Right"
					]
				}
			},
			"additionalProperties": false
		},
		"categoryCode": {
			"description": "Category code for the test report",
			"type": "string",
			"enum": [
				"A",
				"A1",
				"A2",
				"ADI2",
				"ADI3",
				"AM",
				"B",
				"B1",
				"B+E",
				"C",
				"C1",
				"C1+E",
				"C1+EM",
				"C1M",
				"CCPC",
				"C+E",
				"C+EM",
				"CM",
				"D",
				"D1",
				"D1+E",
				"D1+EM",
				"D1M",
				"DCPC",
				"D+E",
				"D+EM",
				"DM",
				"EUA1M1",
				"EUA1M2",
				"EUA2M1",
				"EUA2M2",
				"EUAM1",
				"EUAM2",
				"EUAMM1",
				"EUAMM2",
				"F",
				"G",
				"H",
				"K",
				"SC"
			]
		},
		"activityCode": {
			"description": "Code representing the result of the test",
			"type": "string",
			"enum": [
				"1",
				"2",
				"3",
				"4",
				"5",
				"6",
				"11",
				"20",
				"21",
				"22",
				"23",
				"24",
				"25",
				"26",
				"27",
				"28",
				"32",
				"33",
				"34",
				"35",
				"36",
				"37",
				"38",
				"40",
				"41",
				"51",
				"52",
				"55",
				"58",
				"59",
				"60",
				"61",
				"62",
				"63",
				"64",
				"66",
				"67",
				"68",
				"69",
				"70",
				"71",
				"73",
				"74",
				"75",
				"76",
				"77",
				"78",
				"79",
				"80",
				"81",
				"82",
				"83",
				"88",
				"89"
			]
		},
		"gender": {
			"description": "The gender of an individual, limited to 'M' or 'F' as per TARS master data",
			"type": "string",
			"enum": [
				"M",
				"F"
			]
		},
		"rekeyReason": {
			"description": "Recording of the rekey reason",
			"type": "object",
			"properties": {
				"transfer": {
					"description": "Recording of if a rekey was due to a transfer",
					"type": "object",
					"properties": {
						"selected": {
							"description": "If this option was selected",
							"type": "boolean"
						}
					},
					"additionalProperties": false
				},
				"ipadIssue": {
					"description": "Recording of if a rekey was due to a iPad issue",
					"type": "object",
					"properties": {
						"selected": {
							"description": "If this option was selected",
							"type": "boolean"
						},
						"technicalFault": {
							"description": "If the iPad was not used due to a technical fault",
							"type": "boolean"
						},
						"lost": {
							"description": "If the iPad was not used as it has been lost",
							"type": "boolean"
						},
						"stolen": {
							"description": "If the iPad was not used as it has been stolen",
							"type": "boolean"
						},
						"broken": {
							"description": "If the iPad was not used as it is broken",
							"type": "boolean"
						}
					},
					"additionalProperties": false
				},
				"other": {
					"description": "Recording of if a rekey was due to a different reason",
					"type": "object",
					"properties": {
						"selected": {
							"description": "If this option was selected",
							"type": "boolean"
						},
						"reason": {
							"description": "The reason this option was selected",
							"type": "string"
						}
					},
					"additionalProperties": false
				}
			},
			"additionalProperties": false
		},
		"transfer": {
			"description": "Recording of if a rekey was due to a transfer",
			"type": "object",
			"properties": {
				"selected": {
					"description": "If this option was selected",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"ipadIssue": {
			"description": "Recording of if a rekey was due to a iPad issue",
			"type": "object",
			"properties": {
				"selected": {
					"description": "If this option was selected",
					"type": "boolean"
				},
				"technicalFault": {
					"description": "If the iPad was not used due to a technical fault",
					"type": "boolean"
				},
				"lost": {
					"description": "If the iPad was not used as it has been lost",
					"type": "boolean"
				},
				"stolen": {
					"description": "If the iPad was not used as it has been stolen",
					"type": "boolean"
				},
				"broken": {
					"description": "If the iPad was not used as it is broken",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"other": {
			"description": "Recording of if a rekey was due to a different reason",
			"type": "object",
			"properties": {
				"selected": {
					"description": "If this option was selected",
					"type": "boolean"
				},
				"reason": {
					"description": "The reason this option was selected",
					"type": "string"
				}
			},
			"additionalProperties": false
		},
		"vehicleDetails": {
			"description": "Details about the vehicle to be used for the test",
			"type": "object",
			"properties": {
				"registrationNumber": {
					"description": "The vehicle registration number",
					"type": "string",
					"maxLength": 7
				},
				"motStatus": {
					"description": "The mot status of the vehicle",
					"type": "string"
				},
				"motEvidenceProvided": {
					"description": "Marker stating if alternative MOT evidence was provided",
					"type": "boolean"
				},
				"motEvidence": {
					"description": "Alternative MOT evidence",
					"type": "string"
				},
				"make": {
					"description": "The make of the vehicle",
					"type": "string"
				},
				"model": {
					"description": "The model of the vehicle",
					"type": "string"
				},
				"testExpiryDate": {
					"description": "The test expiry date of the vehicle",
					"type": "string"
				},
				"previouslySearchedRegNumbers": {
					"description": "Previously searched for registration numbers",
					"type": "array",
					"items": {
						"type": "string"
					}
				},
				"gearboxCategory": {
					"description": "The type of gearbox",
					"type": "string",
					"enum": [
						"Manual",
						"Automatic"
					]
				},
				"schoolBike": {
					"description": "Indicates whether the bike belongs to a driving school",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"passCompletion": {
			"description": "Finalisation of a successful test outcome",
			"type": "object",
			"properties": {
				"passCertificateNumber": {
					"description": "The PCN issued to the candidate",
					"type": "string",
					"maxLength": 7,
					"minLength": 7
				}
			},
			"additionalProperties": false,
			"required": [
				"passCertificateNumber"
			]
		},
		"DL196CBTCertNumber": {
			"description": "The number of the DL196 CBT certificate presented by the candidate",
			"type": "string"
		},
		"avoidance": {
			"description": "The outcome of avoidance tests",
			"type": "object",
			"additionalProperties": false,
			"properties": {
				"firstAttempt": {
					"description": "The speed of the first attempt",
					"type": "integer"
				},
				"secondAttempt": {
					"description": "The speed of the second attempt",
					"type": "integer"
				},
				"outcome": {
					"description": "The possible outcomes of speed requirment fault competency",
					"enum": [
						"S"
					],
					"type": "string"
				},
				"comments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				}
			}
		},
		"emergencyStop": {
			"description": "The outcome of emergency stop tests",
			"type": "object",
			"additionalProperties": false,
			"properties": {
				"firstAttempt": {
					"description": "The speed of the first attempt",
					"type": "integer"
				},
				"secondAttempt": {
					"description": "The speed of the second attempt",
					"type": "integer"
				},
				"outcome": {
					"description": "The possible outcomes of speed requirment fault competency",
					"enum": [
						"S"
					],
					"type": "string"
				},
				"comments": {
					"description": "Comments recorded against a fault",
					"type": "string",
					"maxLength": 1000
				}
			}
		},
		"ETA": {
			"description": "Indicates whether the examiner had to take physical or verbal action during the test",
			"type": "object",
			"properties": {
				"physical": {
					"description": "Indicates that the examiner had to take physical action",
					"type": "boolean"
				},
				"verbal": {
					"description": "Indicates that the examiner had to take verbal action",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"schoolBike": {
			"description": "Indicates whether the bike belongs to a driving school",
			"type": "boolean"
		},
		"businessName": {
			"description": "Name of the business the candidate relates to",
			"type": "string",
			"maxLength": 100
		},
		"businessTelephone": {
			"description": "Telephone number of the business the candidate relates to",
			"type": "string",
			"maxLength": 20
		}
	},
	"properties": {
		"version": {
			"description": "Version number",
			"type": "string"
		},
		"appVersion": {
			"description": "App version number",
			"type": "string"
		},
		"category": {
			"description": "Category code for the test report",
			"type": "string",
			"enum": [
				"A",
				"A1",
				"A2",
				"ADI2",
				"ADI3",
				"AM",
				"B",
				"B1",
				"B+E",
				"C",
				"C1",
				"C1+E",
				"C1+EM",
				"C1M",
				"CCPC",
				"C+E",
				"C+EM",
				"CM",
				"D",
				"D1",
				"D1+E",
				"D1+EM",
				"D1M",
				"DCPC",
				"D+E",
				"D+EM",
				"DM",
				"EUA1M1",
				"EUA1M2",
				"EUA2M1",
				"EUA2M2",
				"EUAM1",
				"EUAM2",
				"EUAMM1",
				"EUAMM2",
				"F",
				"G",
				"H",
				"K",
				"SC"
			]
		},
		"journalData": {
			"description": "Data brought through from the journal",
			"type": "object",
			"properties": {
				"examiner": {
					"description": "The examiner details",
					"type": "object",
					"properties": {
						"staffNumber": {
							"description": "The examiner's DSA staff number",
							"type": "string",
							"maxLength": 10
						},
						"individualId": {
							"description": "The individual ID of the examiner",
							"type": "number"
						}
					},
					"additionalProperties": false,
					"required": [
						"staffNumber"
					]
				},
				"testCentre": {
					"description": "Details of the test centre",
					"type": "object",
					"properties": {
						"centreId": {
							"description": "Identifer for the test centre",
							"type": "integer"
						},
						"costCode": {
							"description": "Cost centre code for the test centre",
							"type": "string",
							"maxLength": 6
						},
						"centreName": {
							"description": "Name of the test centre",
							"type": "string",
							"maxLength": 50
						}
					},
					"additionalProperties": false,
					"required": [
						"centreId",
						"costCode"
					]
				},
				"testSlotAttributes": {
					"description": "The additional attributes of the test slot such as Slot Id, Category, Start Time, etc.",
					"type": "object",
					"properties": {
						"slotId": {
							"description": "Unique identifier for the journal test slot",
							"type": "integer"
						},
						"start": {
							"description": "Start time of the test slot",
							"type": "string",
							"minLength": 19,
							"maxLength": 19
						},
						"vehicleTypeCode": {
							"description": "A short alpha (and sometimes numeric) code describing the vehicle type in vehicle slot type",
							"type": "string",
							"minLength": 1,
							"maxLength": 2
						},
						"welshTest": {
							"description": "Whether the test is to be conducted using the welsh language",
							"type": "boolean"
						},
						"specialNeedsCode": {
							"description": "Special needs code",
							"type": "string",
							"enum": [
								"NONE",
								"YES",
								"EXTRA"
							]
						},
						"specialNeeds": {
							"description": "Whether the candidate has any special needs that require the D255 form to be completed",
							"type": "boolean"
						},
						"specialNeedsArray": {
							"description": "The special needs",
							"type": "array",
							"items": {
								"type": "string"
							}
						},
						"specialNeedsExtendedTest": {
							"description": "Whether the candidate requires an extended test due to special needs",
							"type": "boolean"
						},
						"extendedTest": {
							"description": "Whether this is an extended test",
							"type": "boolean"
						},
						"examinerVisiting": {
							"description": "Whether the examiner conducting the test slot is visiting a test centre that's not their home test centre",
							"type": "boolean"
						},
						"entitlementCheck": {
							"description": "Indicates whether the examiner needs to check the candidates entitlement evidence(e.g. test application has not been checked with DVLA)",
							"type": "boolean"
						},
						"fitMarker": {
							"description": "Indicates whether the candidate has previously had a fraud marker set against them",
							"type": "boolean"
						},
						"fitCaseNumber": {
							"description": "The integrity case number associated to the candidate",
							"type": "string"
						},
						"categoryEntitlementCheck": {
							"description": "Indicates whether the examiner needs to check the candidates entitlement based on new legislation around booking vocational categories",
							"type": "boolean"
						},
						"previousCancellation": {
							"description": "The details of any previous test cancellations",
							"type": "array",
							"items": {
								"description": "The reason for the previous test cancellation",
								"type": "string",
								"enum": [
									"Act of nature",
									"DSA"
								],
								"maxLength": 15
							}
						},
						"slotType": {
							"description": "A description of the types of test intended to be conducted in this slot (e.g. Standard Test / Extended Special Needs Test)",
							"type": "string"
						}
					},
					"additionalProperties": false,
					"required": [
						"slotId",
						"start",
						"vehicleTypeCode",
						"welshTest",
						"specialNeeds",
						"extendedTest"
					]
				},
				"candidate": {
					"description": "Details of the candidate booked into the test slot",
					"type": "object",
					"properties": {
						"candidateId": {
							"description": "The id of the test candidate",
							"type": "integer"
						},
						"candidateName": {
							"description": "Details of the individual's name",
							"type": "object",
							"properties": {
								"title": {
									"description": "The individual's title",
									"type": "string",
									"maxLength": 7
								},
								"firstName": {
									"description": "The individual's forename",
									"type": "string",
									"maxLength": 50
								},
								"secondName": {
									"description": "The individual's second name",
									"type": "string",
									"maxLength": 50
								},
								"thirdName": {
									"description": "The individual's third name",
									"type": "string",
									"maxLength": 50
								},
								"lastName": {
									"description": "The individual's surname",
									"type": "string",
									"maxLength": 50
								}
							},
							"additionalProperties": false
						},
						"driverNumber": {
							"description": "The candidate's driver number, typically (though not always) 16 characters if UK, or 8 digits if NI",
							"type": "string",
							"maxLength": 24
						},
						"dateOfBirth": {
							"description": "The candidate's date of birth, formatted as an ISO 8601 date (YYYY-MM-DD)",
							"type": "string",
							"minLength": 10,
							"maxLength": 10
						},
						"gender": {
							"description": "The gender of an individual, limited to 'M' or 'F' as per TARS master data",
							"type": "string",
							"enum": [
								"M",
								"F"
							]
						},
						"candidateAddress": {
							"description": "Details of the address",
							"type": "object",
							"properties": {
								"addressLine1": {
									"description": "First line of address",
									"type": "string",
									"maxLength": 255
								},
								"addressLine2": {
									"description": "Second line of address",
									"type": "string",
									"maxLength": 100
								},
								"addressLine3": {
									"description": "Third line of address",
									"type": "string",
									"maxLength": 100
								},
								"addressLine4": {
									"description": "Fourth line of address",
									"type": "string",
									"maxLength": 100
								},
								"addressLine5": {
									"description": "Fifth line of address",
									"type": "string",
									"maxLength": 255
								},
								"postcode": {
									"description": "The address postcode",
									"type": "string",
									"maxLength": 255
								}
							},
							"additionalProperties": false
						},
						"primaryTelephone": {
							"description": "The candidate's primary telephone number, if any (and consent to leave voicemail has been given)",
							"type": "string",
							"maxLength": 20
						},
						"secondaryTelephone": {
							"description": "The candidate's secondary telephone number, if any (and consent to leave voicemail has been given)",
							"type": "string",
							"maxLength": 20
						},
						"mobileTelephone": {
							"description": "The candidate's mobile telephone number, if any (and consent to leave voicemail has been given)",
							"type": "string",
							"maxLength": 30
						},
						"emailAddress": {
							"description": "The candidate's email address, if any",
							"type": "string",
							"maxLength": 100
						},
						"prn": {
							"description": "The candidate's ADI PRN (potential register number), if an ADI test",
							"type": "integer"
						},
						"previousADITests": {
							"description": "The number of previous test attempts, if an ADI test",
							"type": "integer"
						},
						"ethnicityCode": {
							"description": "A character between A and G representing different categories of ethnicity",
							"type": "string",
							"minLength": 1,
							"maxLength": 1
						}
					},
					"additionalProperties": false
				},
				"applicationReference": {
					"description": "The full application identifier, including applicationId, bookingSequence and checkDigit",
					"type": "object",
					"properties": {
						"applicationId": {
							"description": "Unique identifier for each test application",
							"type": "integer"
						},
						"bookingSequence": {
							"description": "Booking sequence number of the test application",
							"type": "integer"
						},
						"checkDigit": {
							"description": "Reference checksum for the test application",
							"type": "integer"
						}
					},
					"additionalProperties": false,
					"required": [
						"applicationId",
						"bookingSequence",
						"checkDigit"
					]
				}
			},
			"additionalProperties": false,
			"required": [
				"examiner",
				"testCentre",
				"testSlotAttributes",
				"candidate",
				"applicationReference"
			]
		},
		"activityCode": {
			"description": "Code representing the result of the test",
			"type": "string",
			"enum": [
				"1",
				"2",
				"3",
				"4",
				"5",
				"6",
				"11",
				"20",
				"21",
				"22",
				"23",
				"24",
				"25",
				"26",
				"27",
				"28",
				"32",
				"33",
				"34",
				"35",
				"36",
				"37",
				"38",
				"40",
				"41",
				"51",
				"52",
				"55",
				"58",
				"59",
				"60",
				"61",
				"62",
				"63",
				"64",
				"66",
				"67",
				"68",
				"69",
				"70",
				"71",
				"73",
				"74",
				"75",
				"76",
				"77",
				"78",
				"79",
				"80",
				"81",
				"82",
				"83",
				"88",
				"89"
			]
		},
		"communicationPreferences": {
			"type": "object",
			"additionalProperties": false,
			"properties": {
				"updatedEmail": {
					"description": "The email address that the candidate agrees their results can be sent to",
					"type": "string",
					"maxLength": 100
				},
				"communicationMethod": {
					"description": "The method of communication by which the candidate agrees to receive their results",
					"type": "string",
					"enum": [
						"Email",
						"Post",
						"Support Centre",
						"Not provided"
					]
				},
				"conductedLanguage": {
					"description": "The language in which a candidate agrees to perform a test",
					"type": "string",
					"enum": [
						"English",
						"Cymraeg",
						"Not provided"
					]
				}
			},
			"required": [
				"conductedLanguage"
			]
		},
		"preTestDeclarations": {
			"type": "object",
			"additionalProperties": false,
			"properties": {
				"insuranceDeclarationAccepted": {
					"description": "Whether or not the candidate has declared that their test vehicle has a valid insurance policy",
					"type": "boolean"
				},
				"residencyDeclarationAccepted": {
					"description": "Whether or not the candidate has declared that they have lived in the UK for a period acceptable for taking the test",
					"type": "boolean"
				},
				"preTestSignature": {
					"description": "Base 64 encoded binary data representing a PNG image of the candidates signature",
					"type": "string"
				},
				"DL196CBTCertNumber": {
					"description": "The number of the DL196 CBT certificate presented by the candidate",
					"type": "string"
				}
			},
			"required": [
				"insuranceDeclarationAccepted",
				"residencyDeclarationAccepted",
				"preTestSignature"
			]
		},
		"accompaniment": {
			"description": "Indicators for anybody else overseeing the test",
			"type": "object",
			"properties": {
				"ADI": {
					"description": "Indicates whether the ADI was present during the test",
					"type": "boolean"
				},
				"supervisor": {
					"description": "Indicates whether a DVSA supervisor was present during the test",
					"type": "boolean"
				},
				"interpreter": {
					"description": "Indicates whether an interpreter was present during the test",
					"type": "boolean"
				},
				"other": {
					"description": "Indicates whether another individual was present during the test",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"postTestDeclarations": {
			"type": "object",
			"properties": {
				"healthDeclarationAccepted": {
					"description": "Whether or not the candidate has declared that their health status hasn't changed since their last application",
					"type": "boolean"
				},
				"passCertificateNumberReceived": {
					"description": "Indicates whether the candidate acknowledges receipt of the PCN",
					"type": "boolean"
				},
				"postTestSignature": {
					"description": "Base 64 encoded binary data representing a PNG image of the candidates signature",
					"type": "string"
				}
			},
			"additionalProperties": false
		},
		"testSummary": {
			"description": "Recording of other characteristics of the test",
			"type": "object",
			"properties": {
				"routeNumber": {
					"description": "Number of the route that was taken during the test",
					"type": "integer",
					"const": 88
				},
				"trueLikenessToPhoto": {
					"description": "Physical appearance resembles a true likeness to provided ID",
					"type": "boolean"
				},
				"candidateDescription": {
					"description": "Physical description of the candidate",
					"type": "string",
					"maxLength": 1000
				},
				"debriefWitnessed": {
					"description": "Indicates whether anybody else (e.g. ADI) was present for the debrief",
					"type": "boolean"
				},
				"identification": {
					"description": "Indicates which form of ID was provided by the candidate",
					"type": "string",
					"enum": [
						"Licence",
						"Passport"
					]
				},
				"weatherConditions": {
					"description": "Description of the type of weather encountered during the test",
					"type": "array",
					"items": {
						"description": "Predefined values for the type of weather encountered during the test",
						"type": "string",
						"enum": [
							"Bright / dry roads",
							"Bright / wet roads",
							"Raining through test",
							"Showers",
							"Foggy / misty",
							"Dull / wet roads",
							"Dull / dry roads",
							"Snowing",
							"Icy",
							"Windy"
						]
					}
				},
				"D255": {
					"description": "Indicates whether a D255 form needs to be completed",
					"type": "boolean"
				},
				"additionalInformation": {
					"description": "Any comments that the DE wants to record about the test",
					"type": "string"
				},
				"circuit": {
					"description": "Circuit completed (left or right)",
					"type": "string",
					"enum": [
						"Left",
						"Right"
					]
				}
			},
			"additionalProperties": false
		},
		"rekeyReason": {
			"description": "Recording of the rekey reason",
			"type": "object",
			"properties": {
				"transfer": {
					"description": "Recording of if a rekey was due to a transfer",
					"type": "object",
					"properties": {
						"selected": {
							"description": "If this option was selected",
							"type": "boolean"
						}
					},
					"additionalProperties": false
				},
				"ipadIssue": {
					"description": "Recording of if a rekey was due to a iPad issue",
					"type": "object",
					"properties": {
						"selected": {
							"description": "If this option was selected",
							"type": "boolean"
						},
						"technicalFault": {
							"description": "If the iPad was not used due to a technical fault",
							"type": "boolean"
						},
						"lost": {
							"description": "If the iPad was not used as it has been lost",
							"type": "boolean"
						},
						"stolen": {
							"description": "If the iPad was not used as it has been stolen",
							"type": "boolean"
						},
						"broken": {
							"description": "If the iPad was not used as it is broken",
							"type": "boolean"
						}
					},
					"additionalProperties": false
				},
				"other": {
					"description": "Recording of if a rekey was due to a different reason",
					"type": "object",
					"properties": {
						"selected": {
							"description": "If this option was selected",
							"type": "boolean"
						},
						"reason": {
							"description": "The reason this option was selected",
							"type": "string"
						}
					},
					"additionalProperties": false
				}
			},
			"additionalProperties": false
		},
		"rekey": {
			"description": "Whether the test was rekeyed or not",
			"type": "boolean"
		},
		"rekeyDate": {
			"description": "Date the test was rekeyed",
			"type": "string"
		},
		"changeMarker": {
			"description": "Whether the test was conducted by another examiner",
			"type": "boolean"
		},
		"examinerBooked": {
			"description": "The examiner who the test was booked to",
			"type": [
				"number",
				"string"
			]
		},
		"examinerConducted": {
			"description": "The examiner who conducted the test",
			"type": [
				"number",
				"string"
			]
		},
		"examinerKeyed": {
			"description": "The examiner who keyed the test into the iPad",
			"type": "number"
		},
		"passCompletion": {
			"description": "Finalisation of a successful test outcome",
			"type": "object",
			"properties": {
				"passCertificateNumber": {
					"description": "The PCN issued to the candidate",
					"type": "string",
					"maxLength": 7,
					"minLength": 7
				}
			},
			"additionalProperties": false,
			"required": [
				"passCertificateNumber"
			]
		},
		"vehicleDetails": {
			"description": "Details about the vehicle to be used for the test",
			"type": "object",
			"properties": {
				"registrationNumber": {
					"description": "The vehicle registration number",
					"type": "string",
					"maxLength": 7
				},
				"motStatus": {
					"description": "The mot status of the vehicle",
					"type": "string"
				},
				"motEvidenceProvided": {
					"description": "Marker stating if alternative MOT evidence was provided",
					"type": "boolean"
				},
				"motEvidence": {
					"description": "Alternative MOT evidence",
					"type": "string"
				},
				"make": {
					"description": "The make of the vehicle",
					"type": "string"
				},
				"model": {
					"description": "The model of the vehicle",
					"type": "string"
				},
				"testExpiryDate": {
					"description": "The test expiry date of the vehicle",
					"type": "string"
				},
				"previouslySearchedRegNumbers": {
					"description": "Previously searched for registration numbers",
					"type": "array",
					"items": {
						"type": "string"
					}
				},
				"gearboxCategory": {
					"description": "The type of gearbox",
					"type": "string",
					"enum": [
						"Manual",
						"Automatic"
					]
				},
				"schoolBike": {
					"description": "Indicates whether the bike belongs to a driving school",
					"type": "boolean"
				}
			},
			"additionalProperties": false
		},
		"userExitedApp": {
			"description": "User disabled ASAM and exited the app",
			"type": "object",
			"properties": {
				"exitReason": {
					"description": "Reason why the user has exited the app",
					"type": "string"
				},
				"exitFlag": {
					"description": "Flag to indicate if the user has exited the app",
					"type": "boolean"
				}
			},
			"additionalProperties": false,
			"required": [
				"exitFlag"
			]
		},
		"testData": {
			"additionalProperties": false,
			"description": "Data associated with the test",
			"properties": {
				"singleFaultCompetencies": {
					"additionalProperties": false,
					"description": "Single fault competencies associated with the test",
					"properties": {
						"useOfStand": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"useOfStandComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"manualHandling": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"manualHandlingComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"slalom": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"slalomComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"slowControl": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"slowControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"uTurn": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"uTurnComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"controlledStop": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"controlledStopComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"emergencyStop": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"emergencyStopComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"avoidance": {
							"description": "The possible outcomes of any single fault competency",
							"enum": [
								"DF",
								"S",
								"D"
							],
							"type": "string"
						},
						"avoidanceComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					}
				},
				"emergencyStop": {
					"description": "The outcome of emergency stop tests",
					"type": "object",
					"additionalProperties": false,
					"properties": {
						"firstAttempt": {
							"description": "The speed of the first attempt",
							"type": "integer"
						},
						"secondAttempt": {
							"description": "The speed of the second attempt",
							"type": "integer"
						},
						"outcome": {
							"description": "The possible outcomes of speed requirment fault competency",
							"enum": [
								"S"
							],
							"type": "string"
						},
						"comments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					}
				},
				"avoidance": {
					"description": "The outcome of avoidance tests",
					"type": "object",
					"additionalProperties": false,
					"properties": {
						"firstAttempt": {
							"description": "The speed of the first attempt",
							"type": "integer"
						},
						"secondAttempt": {
							"description": "The speed of the second attempt",
							"type": "integer"
						},
						"outcome": {
							"description": "The possible outcomes of speed requirment fault competency",
							"enum": [
								"S"
							],
							"type": "string"
						},
						"comments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					}
				},
				"drivingFaults": {
					"description": "The driving faults accumulated during the test",
					"type": "object",
					"properties": {
						"precautions": {
							"description": "The count of the number of driving faults recorded against a test element",
							"type": "integer"
						},
						"precautionsComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffSafety": {
							"description": "The count of the number of driving faults recorded against a test element",
							"type": "integer"
						},
						"moveOffSafetyComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffControl": {
							"description": "The count of the number of driving faults recorded against a test element",
							"type": "integer"
						},
						"moveOffControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					},
					"additionalProperties": false
				},
				"seriousFaults": {
					"description": "The serious faults accumulated during the test",
					"type": "object",
					"properties": {
						"precautions": {
							"description": "Indicator for a serious fault being recorded against a test element",
							"type": "boolean"
						},
						"precautionsComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffSafety": {
							"description": "Indicator for a serious fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffSafetyComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffControl": {
							"description": "Indicator for a serious fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					},
					"additionalProperties": false
				},
				"dangerousFaults": {
					"description": "The dangerous faults accumulated during the test",
					"type": "object",
					"properties": {
						"precautions": {
							"description": "Indicator for a dangerous fault being recorded against a test element",
							"type": "boolean"
						},
						"precautionsComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffSafety": {
							"description": "Indicator for a dangerous fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffSafetyComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						},
						"moveOffControl": {
							"description": "Indicator for a dangerous fault being recorded against a test element",
							"type": "boolean"
						},
						"moveOffControlComments": {
							"description": "Comments recorded against a fault",
							"type": "string",
							"maxLength": 1000
						}
					},
					"additionalProperties": false
				},
				"ETA": {
					"description": "Indicates whether the examiner had to take physical or verbal action during the test",
					"type": "object",
					"properties": {
						"physical": {
							"description": "Indicates that the examiner had to take physical action",
							"type": "boolean"
						},
						"verbal": {
							"description": "Indicates that the examiner had to take verbal action",
							"type": "boolean"
						}
					},
					"additionalProperties": false
				}
			},
			"type": "object"
		}
	},
	"additionalProperties": false,
	"required": [
		"version",
		"category",
		"journalData",
		"activityCode",
		"rekey",
		"changeMarker",
		"examinerBooked",
		"examinerConducted",
		"examinerKeyed",
		"journalData"
	]
}