@pdtf/schemas 2.0.0-3 → 2.0.0-31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +50 -33
- package/package.json +2 -1
- package/src/examples/v2/exampleTransaction.json +165 -129
- package/src/schemas/v2/combined.json +9022 -1468
- package/src/schemas/v2/overlays/baspi.json +1971 -1020
- package/src/schemas/v2/overlays/con29DW.json +256 -127
- package/src/schemas/v2/overlays/con29R.json +1 -1
- package/src/schemas/v2/overlays/fme1.json +46 -212
- package/src/schemas/v2/overlays/lpe1.json +92 -63
- package/src/schemas/v2/overlays/nts.json +39 -43
- package/src/schemas/v2/overlays/rds.json +679 -456
- package/src/schemas/v2/overlays/ta10.json +847 -1
- package/src/schemas/v2/overlays/ta6.json +3727 -559
- package/src/schemas/v2/overlays/ta7.json +98 -33
- package/src/schemas/v2/{core.json → pdtf-transaction.json} +7938 -1356
- package/src/schemas/v2/skeleton.json +3645 -0
- package/src/tests/v2/transactionSchema.test.js +84 -5
- package/src/tests/v2/verifiedClaimsValidator.test.js +128 -0
- package/src/utils/extractOverlay.js +48 -10
- package/src/utils/extractProperties.js +44 -0
- package/src/utils/hmlrLLC1.json +275 -0
- package/src/schemas/v2/merged.json +0 -28697
package/index.js
CHANGED
|
@@ -45,25 +45,28 @@ const validator = ajv.compile(transactionSchema);
|
|
|
45
45
|
|
|
46
46
|
// v2, via accessor functions and overlays
|
|
47
47
|
const combinedSchema = require("./src/schemas/v2/combined.json");
|
|
48
|
-
const
|
|
48
|
+
const v2CoreSchema = require("./src/schemas/v2/pdtf-transaction.json");
|
|
49
49
|
|
|
50
50
|
const baspiOverlay = require("./src/schemas/v2/overlays/baspi.json");
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
51
|
+
const ta6Overlay = require("./src/schemas/v2/overlays/ta6.json");
|
|
52
|
+
const ta7Overlay = require("./src/schemas/v2/overlays/ta7.json");
|
|
53
|
+
const ta10Overlay = require("./src/schemas/v2/overlays/ta10.json");
|
|
54
|
+
const lpe1Overlay = require("./src/schemas/v2/overlays/lpe1.json");
|
|
55
|
+
const fme1Overlay = require("./src/schemas/v2/overlays/fme1.json");
|
|
56
|
+
const llc1Overlay = require("./src/schemas/v2/overlays/llc1.json");
|
|
57
|
+
const ntsOverlay = require("./src/schemas/v2/overlays/nts.json");
|
|
58
|
+
const con29ROverlay = require("./src/schemas/v2/overlays/con29R.json");
|
|
59
|
+
const con29DWOverlay = require("./src/schemas/v2/overlays/con29DW.json");
|
|
60
|
+
const rdsOverlay = require("./src/schemas/v2/overlays/rds.json");
|
|
61
|
+
const oc1Overlay = require("./src/schemas/v2/overlays/oc1.json");
|
|
62
|
+
|
|
63
|
+
const overlaysMap = { baspiV4: baspiOverlay, ta6ed4: ta6Overlay, null: {} };
|
|
62
64
|
|
|
63
65
|
const transactionSchemas = {
|
|
64
66
|
"https://trust.propdata.org.uk/schemas/v1/pdtf-transaction.json":
|
|
65
67
|
transactionSchema,
|
|
66
|
-
"https://trust.propdata.org.uk/schemas/v2/pdtf-transaction.json":
|
|
68
|
+
"https://trust.propdata.org.uk/schemas/v2/pdtf-transaction.json":
|
|
69
|
+
v2CoreSchema,
|
|
67
70
|
};
|
|
68
71
|
|
|
69
72
|
const combineMerge = (target, source, options) => {
|
|
@@ -82,22 +85,25 @@ const combineMerge = (target, source, options) => {
|
|
|
82
85
|
|
|
83
86
|
const getTransactionSchema = (
|
|
84
87
|
schemaId = "https://trust.propdata.org.uk/schemas/v2/pdtf-transaction.json",
|
|
85
|
-
|
|
88
|
+
overlays = ["baspiV4"]
|
|
86
89
|
) => {
|
|
87
90
|
const sourceSchema = transactionSchemas[schemaId];
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
if (!overlays || overlays.length < 1) return sourceSchema;
|
|
92
|
+
let mergedSchema = sourceSchema;
|
|
93
|
+
overlays.forEach((overlay) => {
|
|
94
|
+
const overlaySchema = overlaysMap[overlay] || {};
|
|
95
|
+
mergedSchema = merge(overlaySchema, mergedSchema, {
|
|
96
|
+
arrayMerge: combineMerge,
|
|
97
|
+
});
|
|
92
98
|
});
|
|
93
99
|
// console.log("mergedSchema", mergedSchema);
|
|
94
100
|
return mergedSchema;
|
|
95
101
|
};
|
|
96
102
|
|
|
97
|
-
const getValidator = (schemaId,
|
|
103
|
+
const getValidator = (schemaId, overlays) => {
|
|
98
104
|
let validator = ajv.getSchema(schemaId);
|
|
99
105
|
if (!validator) {
|
|
100
|
-
const schema = getTransactionSchema(schemaId,
|
|
106
|
+
const schema = getTransactionSchema(schemaId, overlays);
|
|
101
107
|
ajv.addSchema(schema, schemaId);
|
|
102
108
|
validator = ajv.getSchema(schemaId);
|
|
103
109
|
}
|
|
@@ -105,8 +111,8 @@ const getValidator = (schemaId, overlay = "baspiV4") => {
|
|
|
105
111
|
};
|
|
106
112
|
|
|
107
113
|
// common functions for v1 and v2
|
|
108
|
-
const getSubschema = (path, schemaId,
|
|
109
|
-
const sourceSchema = getTransactionSchema(schemaId,
|
|
114
|
+
const getSubschema = (path, schemaId, overlays) => {
|
|
115
|
+
const sourceSchema = getTransactionSchema(schemaId, overlays);
|
|
110
116
|
const pathArray = path.split("/").slice(1);
|
|
111
117
|
if (pathArray.length < 1) return sourceSchema;
|
|
112
118
|
return pathArray.reduce((schema, pathElement) => {
|
|
@@ -128,19 +134,19 @@ const getSubschema = (path, schemaId, overlay) => {
|
|
|
128
134
|
}, sourceSchema);
|
|
129
135
|
};
|
|
130
136
|
|
|
131
|
-
const isPathValid = (path, schemaId,
|
|
132
|
-
const schema = getTransactionSchema(schemaId, overlay);
|
|
137
|
+
const isPathValid = (path, schemaId, overlays) => {
|
|
133
138
|
try {
|
|
134
|
-
return getSubschema(path, schemaId,
|
|
139
|
+
return getSubschema(path, schemaId, overlays) !== undefined;
|
|
135
140
|
} catch (err) {
|
|
136
141
|
return false;
|
|
137
142
|
}
|
|
138
143
|
};
|
|
139
144
|
|
|
140
|
-
const getSubschemaValidator = (path, schemaId,
|
|
141
|
-
const subSchema = getSubschema(path, schemaId,
|
|
142
|
-
|
|
143
|
-
|
|
145
|
+
const getSubschemaValidator = (path, schemaId, overlays = ["baspiV4"]) => {
|
|
146
|
+
const subSchema = getSubschema(path, schemaId, overlays);
|
|
147
|
+
const overlayKey = (overlays || []).join(".");
|
|
148
|
+
// see if we can retrieve the schema by path, schemaId and overlays
|
|
149
|
+
const cacheKey = `${path}-${schemaId}-${overlayKey}`;
|
|
144
150
|
let validator = ajv.getSchema(cacheKey);
|
|
145
151
|
// retrieve whole schema by $id if available
|
|
146
152
|
if (!validator && subSchema.$id) validator = ajv.getSchema(cacheKey);
|
|
@@ -195,7 +201,7 @@ const getTitleAtPath = (schema, path, rootPath = path) => {
|
|
|
195
201
|
}
|
|
196
202
|
};
|
|
197
203
|
|
|
198
|
-
const validateVerifiedClaims = (verifiedClaims) => {
|
|
204
|
+
const validateVerifiedClaims = (verifiedClaims, schemaId, overlays) => {
|
|
199
205
|
const validatorVClaims = ajv.compile(verifiedClaimsSchema);
|
|
200
206
|
|
|
201
207
|
const validationErrorsArr = [];
|
|
@@ -213,11 +219,10 @@ const validateVerifiedClaims = (verifiedClaims) => {
|
|
|
213
219
|
|
|
214
220
|
verifiedClaimsArray.forEach((claim) => {
|
|
215
221
|
const paths = Object.keys(claim.claims);
|
|
216
|
-
|
|
217
222
|
for (const path of paths) {
|
|
218
|
-
const validPath = isPathValid(path);
|
|
223
|
+
const validPath = isPathValid(path, schemaId, overlays);
|
|
219
224
|
if (validPath) {
|
|
220
|
-
const subValidator = getSubschemaValidator(path);
|
|
225
|
+
const subValidator = getSubschemaValidator(path, schemaId, overlays);
|
|
221
226
|
const isValid = subValidator(claim.claims[path]);
|
|
222
227
|
if (!isValid) {
|
|
223
228
|
validationErrorsArr.push(...subValidator.errors);
|
|
@@ -245,4 +250,16 @@ module.exports = {
|
|
|
245
250
|
getTitleAtPath,
|
|
246
251
|
verifiedClaimsSchema,
|
|
247
252
|
validateVerifiedClaims,
|
|
253
|
+
baspiOverlay,
|
|
254
|
+
ta6Overlay,
|
|
255
|
+
ta7Overlay,
|
|
256
|
+
ta10Overlay,
|
|
257
|
+
lpe1Overlay,
|
|
258
|
+
fme1Overlay,
|
|
259
|
+
llc1Overlay,
|
|
260
|
+
ntsOverlay,
|
|
261
|
+
con29ROverlay,
|
|
262
|
+
con29DWOverlay,
|
|
263
|
+
rdsOverlay,
|
|
264
|
+
oc1Overlay,
|
|
248
265
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pdtf/schemas",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-31",
|
|
4
4
|
"description": "Property Data Trust Framework Schemas and Utilities",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"directories": {
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"homepage": "https://github.com/Property-Data-Trust-Framework/schemas#readme",
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@jdw/jst": "^2.0.0-beta.15",
|
|
29
|
+
"@pdtf/schemas": "^2.0.0-30",
|
|
29
30
|
"ajv": "^8.12.0",
|
|
30
31
|
"ajv-formats": "^2.1.1",
|
|
31
32
|
"deepmerge": "^4.3.1",
|
|
@@ -12,7 +12,21 @@
|
|
|
12
12
|
"phone": "07777 222333",
|
|
13
13
|
"email": "peter@theseller.com",
|
|
14
14
|
"address": { "line1": "47 Park Road", "postcode": "AL3 5AF" },
|
|
15
|
-
"role": "Seller"
|
|
15
|
+
"role": "Seller",
|
|
16
|
+
"externalIds": { "MoveReady": "123434" }
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"role": "Seller's Conveyancer",
|
|
20
|
+
"name": { "firstName": "Johnny", "lastName": "Law" },
|
|
21
|
+
"address": {
|
|
22
|
+
"line1": "123 Sweet St",
|
|
23
|
+
"line2": "Test building",
|
|
24
|
+
"town": "London",
|
|
25
|
+
"postcode": "SW1A 1AA"
|
|
26
|
+
},
|
|
27
|
+
"email": "johnny@suemme.co.uk",
|
|
28
|
+
"organisation": "Suemme and Profitt",
|
|
29
|
+
"organisationReference": "123456"
|
|
16
30
|
}
|
|
17
31
|
],
|
|
18
32
|
"propertyPack": {
|
|
@@ -34,23 +48,37 @@
|
|
|
34
48
|
"titleNumber": "HD221222",
|
|
35
49
|
"ownershipType": "Leasehold",
|
|
36
50
|
"leaseholdInformation": {
|
|
51
|
+
"typeOfLeasehold": {
|
|
52
|
+
"leaseholdType": "Shared ownership",
|
|
53
|
+
"sharedOwnershipPercentage": 50,
|
|
54
|
+
"sharedOwnershipRent": 200,
|
|
55
|
+
"sharedOwnershipRentFrequency": "Monthly"
|
|
56
|
+
},
|
|
57
|
+
"leaseTerm": {
|
|
58
|
+
"startYearOfLease": 1900,
|
|
59
|
+
"lengthOfLeaseInYears": 999
|
|
60
|
+
},
|
|
37
61
|
"contactDetails": {
|
|
38
62
|
"contacts": {
|
|
39
63
|
"landlord": {
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
64
|
+
"contact": {
|
|
65
|
+
"nameOrOrganisation": "Fleesum Properties",
|
|
66
|
+
"address": {
|
|
67
|
+
"line1": "47 Park Road",
|
|
68
|
+
"postcode": "AL3 5AF"
|
|
69
|
+
},
|
|
70
|
+
"emailAddress": "james@fleesum.com"
|
|
71
|
+
}
|
|
46
72
|
},
|
|
47
73
|
"managingAgent": {
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
74
|
+
"contact": {
|
|
75
|
+
"nameOrOrganisation": "Pricee Living",
|
|
76
|
+
"address": {
|
|
77
|
+
"line1": "Pricee House",
|
|
78
|
+
"postcode": "AL3 5KK"
|
|
79
|
+
},
|
|
80
|
+
"emailAddress": "marcel@pricee.co.uk"
|
|
81
|
+
}
|
|
54
82
|
}
|
|
55
83
|
}
|
|
56
84
|
},
|
|
@@ -77,20 +105,6 @@
|
|
|
77
105
|
"details": "There is sinking fund."
|
|
78
106
|
}
|
|
79
107
|
},
|
|
80
|
-
"general": {
|
|
81
|
-
"typeOfLeasehold": {
|
|
82
|
-
"leaseholdType": "Shared ownership",
|
|
83
|
-
"sharedOwnershipPercentage": 50,
|
|
84
|
-
"sharedOwnershipRent": 200,
|
|
85
|
-
"sharedOwnershipRentFrequency": "Monthly"
|
|
86
|
-
},
|
|
87
|
-
"leaseTerm": {
|
|
88
|
-
"startYearOfLease": 1900,
|
|
89
|
-
"lengthOfLeaseInYears": 999
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
"largeAdditionalExpense": { "yesNo": "No" },
|
|
94
108
|
"additionalFeesOnSale": 0
|
|
95
109
|
}
|
|
96
110
|
}
|
|
@@ -106,13 +120,18 @@
|
|
|
106
120
|
},
|
|
107
121
|
"listingAndConservation": {
|
|
108
122
|
"isListed": {
|
|
109
|
-
"yesNo": "
|
|
123
|
+
"yesNo": "Yes",
|
|
124
|
+
"details": "Grade II listed",
|
|
125
|
+
"attachments": "To follow"
|
|
110
126
|
},
|
|
111
127
|
"isConservationArea": {
|
|
112
|
-
"yesNo": "
|
|
128
|
+
"yesNo": "Yes",
|
|
129
|
+
"details": "Harpenden Conservation Area",
|
|
130
|
+
"attachments": "To follow"
|
|
113
131
|
},
|
|
114
132
|
"hasTreePreservationOrder": {
|
|
115
|
-
"yesNo": "
|
|
133
|
+
"yesNo": "Yes",
|
|
134
|
+
"workCarriedOut": { "yesNo": "Yes", "consentsObtained": "Yes" }
|
|
116
135
|
}
|
|
117
136
|
},
|
|
118
137
|
"typeOfConstruction": {
|
|
@@ -125,9 +144,15 @@
|
|
|
125
144
|
}
|
|
126
145
|
},
|
|
127
146
|
"energyEfficiency": {
|
|
147
|
+
"certificateIsSupplied": "Attached",
|
|
128
148
|
"certificate": {
|
|
129
149
|
"certificateNumber": "12345",
|
|
130
150
|
"currentEnergyRating": "A"
|
|
151
|
+
},
|
|
152
|
+
"greenDealLoan": {
|
|
153
|
+
"hasGreenDealLoan": {
|
|
154
|
+
"yesNo": "No"
|
|
155
|
+
}
|
|
131
156
|
}
|
|
132
157
|
},
|
|
133
158
|
"councilTax": {
|
|
@@ -138,7 +163,12 @@
|
|
|
138
163
|
},
|
|
139
164
|
"disputesAndComplaints": {
|
|
140
165
|
"hasDisputesAndComplaints": {
|
|
141
|
-
"yesNo": "
|
|
166
|
+
"yesNo": "Yes",
|
|
167
|
+
"details": "Neighbour's very annoying"
|
|
168
|
+
},
|
|
169
|
+
"leadingToDisputesAndComplaints": {
|
|
170
|
+
"yesNo": "Yes",
|
|
171
|
+
"details": "Neighbour's dog barking"
|
|
142
172
|
}
|
|
143
173
|
},
|
|
144
174
|
"alterationsAndChanges": {
|
|
@@ -148,8 +178,8 @@
|
|
|
148
178
|
"attachments": "Attached"
|
|
149
179
|
},
|
|
150
180
|
"planningPermission": {
|
|
151
|
-
"yesNo": "
|
|
152
|
-
"
|
|
181
|
+
"yesNo": "Not required",
|
|
182
|
+
"details": "Permitted development rights applied"
|
|
153
183
|
},
|
|
154
184
|
"listedBuildingConsent": {
|
|
155
185
|
"yesNo": "Not required",
|
|
@@ -159,9 +189,6 @@
|
|
|
159
189
|
"yesNo": "Not required",
|
|
160
190
|
"details": "No restriction"
|
|
161
191
|
},
|
|
162
|
-
"unfinished": {
|
|
163
|
-
"yesNo": "No"
|
|
164
|
-
},
|
|
165
192
|
"yesNo": "Yes",
|
|
166
193
|
"details": "Bedroom and ensuite shower room extension 2005"
|
|
167
194
|
},
|
|
@@ -185,9 +212,6 @@
|
|
|
185
212
|
"yesNo": "Not required",
|
|
186
213
|
"details": "No restriction"
|
|
187
214
|
},
|
|
188
|
-
"unfinished": {
|
|
189
|
-
"yesNo": "No"
|
|
190
|
-
},
|
|
191
215
|
"yesNo": "Yes",
|
|
192
216
|
"details": "New front door added 2016",
|
|
193
217
|
"yearCompleted": 2016
|
|
@@ -209,13 +233,13 @@
|
|
|
209
233
|
"yesNo": "No",
|
|
210
234
|
"details": "Added as part of initial build and deeds"
|
|
211
235
|
},
|
|
212
|
-
"unfinished": {
|
|
213
|
-
"yesNo": "No"
|
|
214
|
-
},
|
|
215
236
|
"yesNo": "Yes",
|
|
216
237
|
"details": "Conservatory added during house build in 1990 and exterior quality door separates the conservatory from the kitchen/dining room",
|
|
217
238
|
"yearCompleted": 1990
|
|
218
239
|
},
|
|
240
|
+
"worksUnfinished": {
|
|
241
|
+
"yesNo": "No"
|
|
242
|
+
},
|
|
219
243
|
"planningPermissionBreaches": {
|
|
220
244
|
"yesNo": "No"
|
|
221
245
|
},
|
|
@@ -240,7 +264,9 @@
|
|
|
240
264
|
"yesNo": "No"
|
|
241
265
|
},
|
|
242
266
|
"partyWallAct": {
|
|
243
|
-
"yesNo": "
|
|
267
|
+
"yesNo": "Yes",
|
|
268
|
+
"details": "Party wall agreement in place",
|
|
269
|
+
"attachments": "Attached"
|
|
244
270
|
},
|
|
245
271
|
"otherNotices": {
|
|
246
272
|
"yesNo": "No"
|
|
@@ -272,53 +298,48 @@
|
|
|
272
298
|
}
|
|
273
299
|
},
|
|
274
300
|
"waterAndDrainage": {
|
|
275
|
-
"
|
|
276
|
-
"
|
|
277
|
-
"yesNo": "
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
"supplier": "Northumbria Water"
|
|
301
|
+
"water": {
|
|
302
|
+
"mainsWater": {
|
|
303
|
+
"yesNo": "To be connected",
|
|
304
|
+
"dateToBeConnected": "2022-12-15",
|
|
305
|
+
"supplier": "Northumbria Water"
|
|
306
|
+
}
|
|
282
307
|
},
|
|
283
|
-
"
|
|
284
|
-
"
|
|
285
|
-
"yesNo": "
|
|
308
|
+
"drainage": {
|
|
309
|
+
"mainsSurfaceWaterDrainage": {
|
|
310
|
+
"yesNo": "Yes"
|
|
286
311
|
},
|
|
287
|
-
"
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
"
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
"dischargeCompliesWithGBR": "Yes"
|
|
312
|
+
"mainsFoulDrainage": {
|
|
313
|
+
"yesNo": "No",
|
|
314
|
+
"sustainableDrainageSystem": { "yesNo": "No" },
|
|
315
|
+
"septicTank": {
|
|
316
|
+
"yesNo": "Yes",
|
|
317
|
+
"details": "Last emptied on 1 Jan 2022",
|
|
318
|
+
"dateReplaced": "2022-01-01",
|
|
319
|
+
"dateLastEmptied": "2022-01-01"
|
|
320
|
+
},
|
|
321
|
+
"cesspit": { "yesNo": "No" },
|
|
322
|
+
"sewerageTreatmentPlant": { "yesNo": "No" },
|
|
323
|
+
"otherConnectedProperties": { "yesNo": "No" },
|
|
324
|
+
"yearSystemInstalled": 1980,
|
|
325
|
+
"plantOnOtherLand": { "yesNo": "No" },
|
|
326
|
+
"plantRegistered": { "yesNo": "No" },
|
|
327
|
+
"plantDrainsIntoWaterway": {
|
|
328
|
+
"yesNo": "Yes",
|
|
329
|
+
"dischargeCompliesWithGBR": "Yes"
|
|
330
|
+
}
|
|
307
331
|
}
|
|
332
|
+
},
|
|
333
|
+
"maintenanceAgreements": {
|
|
334
|
+
"yesNo": "No"
|
|
308
335
|
}
|
|
309
336
|
},
|
|
310
|
-
"
|
|
311
|
-
"
|
|
312
|
-
"maintenanceAgreements": {
|
|
313
|
-
"yesNo": "No"
|
|
314
|
-
},
|
|
337
|
+
"connectedUtilities": {
|
|
338
|
+
"mainsElectricity": {
|
|
315
339
|
"yesNo": "Yes",
|
|
316
340
|
"supplier": "Octopus Energy"
|
|
317
341
|
},
|
|
318
|
-
"
|
|
319
|
-
"maintenanceAgreements": {
|
|
320
|
-
"yesNo": "No"
|
|
321
|
-
},
|
|
342
|
+
"mainsGas": {
|
|
322
343
|
"yesNo": "Yes",
|
|
323
344
|
"supplier": "Octopus Energy"
|
|
324
345
|
},
|
|
@@ -329,23 +350,14 @@
|
|
|
329
350
|
"yesNo": "No"
|
|
330
351
|
},
|
|
331
352
|
"telephone": {
|
|
332
|
-
"maintenanceAgreements": {
|
|
333
|
-
"yesNo": "No"
|
|
334
|
-
},
|
|
335
353
|
"yesNo": "Yes",
|
|
336
354
|
"supplier": "EE"
|
|
337
355
|
},
|
|
338
356
|
"cableSatelliteTV": {
|
|
339
|
-
"maintenanceAgreements": {
|
|
340
|
-
"yesNo": "No"
|
|
341
|
-
},
|
|
342
357
|
"yesNo": "Yes",
|
|
343
358
|
"supplier": "Sky"
|
|
344
359
|
},
|
|
345
360
|
"broadband": {
|
|
346
|
-
"maintenanceAgreements": {
|
|
347
|
-
"yesNo": "No"
|
|
348
|
-
},
|
|
349
361
|
"yesNo": "Yes",
|
|
350
362
|
"supplier": "EE"
|
|
351
363
|
},
|
|
@@ -354,10 +366,8 @@
|
|
|
354
366
|
},
|
|
355
367
|
"otherServices": {
|
|
356
368
|
"yesNo": "No"
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
"greenDealLoan": {
|
|
360
|
-
"hasGreenDealLoan": {
|
|
369
|
+
},
|
|
370
|
+
"maintenanceAgreements": {
|
|
361
371
|
"yesNo": "No"
|
|
362
372
|
}
|
|
363
373
|
},
|
|
@@ -372,15 +382,25 @@
|
|
|
372
382
|
"heatingInGoodWorkingOrder": {
|
|
373
383
|
"yesNo": "Yes"
|
|
374
384
|
},
|
|
375
|
-
"centralHeatingFuel": {
|
|
385
|
+
"centralHeatingFuel": {
|
|
386
|
+
"centralHeatingFuelType": "Other",
|
|
387
|
+
"otherCentralHeatingFuelType": "Ground-source Heat Pump"
|
|
388
|
+
},
|
|
376
389
|
"centralHeatingInstalled": "2016-04-20",
|
|
377
|
-
"
|
|
390
|
+
"heatingLastServicedDate": "2021-03-26",
|
|
391
|
+
"heatingLastServicedReport": "To follow"
|
|
378
392
|
}
|
|
379
393
|
},
|
|
380
394
|
"insurance": {
|
|
381
395
|
"isInsured": "Yes",
|
|
382
396
|
"difficultiesObtainingInsurance": {
|
|
383
|
-
"
|
|
397
|
+
"abnormalRiseInPremiums": {
|
|
398
|
+
"yesNo": "Yes",
|
|
399
|
+
"details": "Very history"
|
|
400
|
+
},
|
|
401
|
+
"subjectToHighExcesses": { "yesNo": "No" },
|
|
402
|
+
"subjectToUnusualConditions": { "yesNo": "No" },
|
|
403
|
+
"refused": { "yesNo": "Yes", "details": "Much refuse" }
|
|
384
404
|
},
|
|
385
405
|
"insuranceClaims": {
|
|
386
406
|
"yesNo": "No"
|
|
@@ -414,7 +434,10 @@
|
|
|
414
434
|
"publicRightOfWay": {
|
|
415
435
|
"yesNo": "No"
|
|
416
436
|
},
|
|
417
|
-
"
|
|
437
|
+
"rightsOfLight": {
|
|
438
|
+
"yesNo": "No"
|
|
439
|
+
},
|
|
440
|
+
"rightsOfSupport": {
|
|
418
441
|
"yesNo": "No"
|
|
419
442
|
},
|
|
420
443
|
"rightsCreatedThroughCustom": {
|
|
@@ -426,6 +449,10 @@
|
|
|
426
449
|
"churchChancel": {
|
|
427
450
|
"yesNo": "No"
|
|
428
451
|
},
|
|
452
|
+
"rightsToTakeFromLand": {
|
|
453
|
+
"yesNo": "Yes",
|
|
454
|
+
"details": "Annual gold mining festival"
|
|
455
|
+
},
|
|
429
456
|
"otherRights": {
|
|
430
457
|
"yesNo": "No"
|
|
431
458
|
}
|
|
@@ -437,21 +464,11 @@
|
|
|
437
464
|
"hasBeenFlooded": "Yes",
|
|
438
465
|
"details": "Minor basement flood",
|
|
439
466
|
"typeOfFlooding": {
|
|
440
|
-
"groundWater":
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
"
|
|
444
|
-
|
|
445
|
-
},
|
|
446
|
-
"surfaceWater": {
|
|
447
|
-
"yesNo": "No"
|
|
448
|
-
},
|
|
449
|
-
"coastal": {
|
|
450
|
-
"yesNo": "No"
|
|
451
|
-
},
|
|
452
|
-
"river": {
|
|
453
|
-
"yesNo": "No"
|
|
454
|
-
},
|
|
467
|
+
"groundWater": "No",
|
|
468
|
+
"sewer": "Yes",
|
|
469
|
+
"surfaceWater": "No",
|
|
470
|
+
"coastal": "No",
|
|
471
|
+
"river": "No",
|
|
455
472
|
"other": {
|
|
456
473
|
"yesNo": "No"
|
|
457
474
|
}
|
|
@@ -485,6 +502,9 @@
|
|
|
485
502
|
},
|
|
486
503
|
"otherMaterialIssue": {
|
|
487
504
|
"yesNo": "No"
|
|
505
|
+
},
|
|
506
|
+
"otherCharges": {
|
|
507
|
+
"yesNo": "No"
|
|
488
508
|
}
|
|
489
509
|
},
|
|
490
510
|
"consumerProtectionRegulationsDeclaration": {
|
|
@@ -511,14 +531,19 @@
|
|
|
511
531
|
"legalBoundaries": {
|
|
512
532
|
"ownership": {
|
|
513
533
|
"areBoundariesUniform": "Yes",
|
|
514
|
-
"
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
534
|
+
"uniformBoundaries": {
|
|
535
|
+
"left": "Neighbour",
|
|
536
|
+
"right": "Seller",
|
|
537
|
+
"rear": "Neighbour",
|
|
538
|
+
"front": "Not known"
|
|
539
|
+
}
|
|
518
540
|
},
|
|
519
|
-
"haveBoundaryFeaturesMoved": {
|
|
520
|
-
|
|
521
|
-
|
|
541
|
+
"haveBoundaryFeaturesMoved": {
|
|
542
|
+
"yesNo": "Yes",
|
|
543
|
+
"details": "Moved a bit to the lefts"
|
|
544
|
+
},
|
|
545
|
+
"adjacentLandIncluded": { "yesNo": "Yes", "details": "Some movements" },
|
|
546
|
+
"flyingFreehold": { "yesNo": "Yes", "details": "Some flying stuff" }
|
|
522
547
|
},
|
|
523
548
|
"servicesCrossing": {
|
|
524
549
|
"pipesWiresCablesDrainsToProperty": { "yesNo": "No" },
|
|
@@ -528,10 +553,15 @@
|
|
|
528
553
|
"energyAndMeters": {
|
|
529
554
|
"testedByQualifiedElectrician": {
|
|
530
555
|
"yesNo": "Yes",
|
|
531
|
-
"
|
|
556
|
+
"yearTested": 2015,
|
|
557
|
+
"attachments": "To follow"
|
|
558
|
+
},
|
|
559
|
+
"electricalWorkSince2005": {
|
|
560
|
+
"yesNo": "Yes",
|
|
561
|
+
"yearWorkCarriedOut": 2016,
|
|
562
|
+
"details": "New fuse box",
|
|
532
563
|
"attachments": "To follow"
|
|
533
564
|
},
|
|
534
|
-
"electricalWorkSince2005": { "yesNo": "No" },
|
|
535
565
|
"solarPanels": { "hasSolarPanels": "No" }
|
|
536
566
|
},
|
|
537
567
|
"smartHomeSystems": { "hasSmartHomeSystems": "No" },
|
|
@@ -552,19 +582,25 @@
|
|
|
552
582
|
}
|
|
553
583
|
},
|
|
554
584
|
"completionAndMoving": {
|
|
555
|
-
"
|
|
585
|
+
"sellerWillEnsure": {
|
|
586
|
+
"removeRubbish": true,
|
|
587
|
+
"replaceLightFittings": true,
|
|
588
|
+
"takeReasonableCare": true,
|
|
589
|
+
"leaveKeys": true
|
|
590
|
+
},
|
|
556
591
|
"otherPropertyInChain": { "yesNo": "No" },
|
|
557
|
-
"moveRestrictionDates": {
|
|
558
|
-
|
|
592
|
+
"moveRestrictionDates": {
|
|
593
|
+
"yesNo": "Yes",
|
|
594
|
+
"details": "On holiday 1-15 Aug 23"
|
|
595
|
+
},
|
|
596
|
+
"digitalPropertyLogbook": { "yesNo": "No" },
|
|
597
|
+
"sufficientToRepayAllMortgages": { "yesNo": "Yes" }
|
|
559
598
|
},
|
|
560
599
|
"confirmationOfAccuracyByOwners": {
|
|
561
600
|
"confirmWillProvideAdditionalDocumentation": true,
|
|
562
601
|
"confirmInformationIsAccurate": true
|
|
563
602
|
}
|
|
564
603
|
},
|
|
565
|
-
"energyPerformanceCertificate": {
|
|
566
|
-
"certificate": { "currentEnergyRating": "B" }
|
|
567
|
-
},
|
|
568
604
|
"titlesToBeSold": [
|
|
569
605
|
{
|
|
570
606
|
"titleNumber": "HD221222",
|