@pdtf/schemas 2.0.0-9 → 2.0.0

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 CHANGED
@@ -48,17 +48,19 @@ const combinedSchema = require("./src/schemas/v2/combined.json");
48
48
  const v2CoreSchema = require("./src/schemas/v2/pdtf-transaction.json");
49
49
 
50
50
  const baspiOverlay = require("./src/schemas/v2/overlays/baspi.json");
51
- // const ta6Overlay = require("./src/schemas/v2/overlays/ta6.json");
52
- // const ta7Overlay = require("./src/schemas/v2/overlays/ta7.json");
53
- // const lpe1Overlay = require("./src/schemas/v2/overlays/lpe1.json");
54
- // const fme1Overlay = require("./src/schemas/v2/overlays/fme1.json");
55
- // const llc1Overlay = require("./src/schemas/v2/overlays/llc1.json");
56
- // const con29ROverlay = require("./src/schemas/v2/overlays/con29R.json");
57
- // const con29DWOverlay = require("./src/schemas/v2/overlays/con29DW.json");
58
- // const rdsOverlay = require("./src/schemas/v2/overlays/rds.json");
59
- // const oc1Overlay = require("./src/schemas/v2/overlays/oc1.json");
60
-
61
- const overlays = { baspiV4: baspiOverlay, null: {} };
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":
@@ -83,22 +85,25 @@ const combineMerge = (target, source, options) => {
83
85
 
84
86
  const getTransactionSchema = (
85
87
  schemaId = "https://trust.propdata.org.uk/schemas/v2/pdtf-transaction.json",
86
- overlay = "baspiV4"
88
+ overlays = ["baspiV4"]
87
89
  ) => {
88
90
  const sourceSchema = transactionSchemas[schemaId];
89
- const overlaySchema = overlays[overlay];
90
- if (!overlaySchema) return sourceSchema;
91
- const mergedSchema = merge(overlaySchema, sourceSchema, {
92
- arrayMerge: combineMerge,
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
+ });
93
98
  });
94
99
  // console.log("mergedSchema", mergedSchema);
95
100
  return mergedSchema;
96
101
  };
97
102
 
98
- const getValidator = (schemaId, overlay = "baspiV4") => {
103
+ const getValidator = (schemaId, overlays) => {
99
104
  let validator = ajv.getSchema(schemaId);
100
105
  if (!validator) {
101
- const schema = getTransactionSchema(schemaId, overlay);
106
+ const schema = getTransactionSchema(schemaId, overlays);
102
107
  ajv.addSchema(schema, schemaId);
103
108
  validator = ajv.getSchema(schemaId);
104
109
  }
@@ -106,8 +111,8 @@ const getValidator = (schemaId, overlay = "baspiV4") => {
106
111
  };
107
112
 
108
113
  // common functions for v1 and v2
109
- const getSubschema = (path, schemaId, overlay) => {
110
- const sourceSchema = getTransactionSchema(schemaId, overlay);
114
+ const getSubschema = (path, schemaId, overlays) => {
115
+ const sourceSchema = getTransactionSchema(schemaId, overlays);
111
116
  const pathArray = path.split("/").slice(1);
112
117
  if (pathArray.length < 1) return sourceSchema;
113
118
  return pathArray.reduce((schema, pathElement) => {
@@ -129,19 +134,19 @@ const getSubschema = (path, schemaId, overlay) => {
129
134
  }, sourceSchema);
130
135
  };
131
136
 
132
- const isPathValid = (path, schemaId, overlay) => {
133
- const schema = getTransactionSchema(schemaId, overlay);
137
+ const isPathValid = (path, schemaId, overlays) => {
134
138
  try {
135
- return getSubschema(path, schemaId, overlay) !== undefined;
139
+ return getSubschema(path, schemaId, overlays) !== undefined;
136
140
  } catch (err) {
137
141
  return false;
138
142
  }
139
143
  };
140
144
 
141
- const getSubschemaValidator = (path, schemaId, overlay) => {
142
- const subSchema = getSubschema(path, schemaId, overlay);
143
- // see if we can retrieve the schema by path, schemaId and overlay
144
- const cacheKey = `${path}-${schemaId}-${overlay}`;
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}`;
145
150
  let validator = ajv.getSchema(cacheKey);
146
151
  // retrieve whole schema by $id if available
147
152
  if (!validator && subSchema.$id) validator = ajv.getSchema(cacheKey);
@@ -196,7 +201,7 @@ const getTitleAtPath = (schema, path, rootPath = path) => {
196
201
  }
197
202
  };
198
203
 
199
- const validateVerifiedClaims = (verifiedClaims, schemaId, overlay) => {
204
+ const validateVerifiedClaims = (verifiedClaims, schemaId, overlays) => {
200
205
  const validatorVClaims = ajv.compile(verifiedClaimsSchema);
201
206
 
202
207
  const validationErrorsArr = [];
@@ -215,9 +220,9 @@ const validateVerifiedClaims = (verifiedClaims, schemaId, overlay) => {
215
220
  verifiedClaimsArray.forEach((claim) => {
216
221
  const paths = Object.keys(claim.claims);
217
222
  for (const path of paths) {
218
- const validPath = isPathValid(path, schemaId, overlay);
223
+ const validPath = isPathValid(path, schemaId, overlays);
219
224
  if (validPath) {
220
- const subValidator = getSubschemaValidator(path, schemaId, overlay);
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-9",
3
+ "version": "2.0.0",
4
4
  "description": "Property Data Trust Framework Schemas and Utilities",
5
5
  "main": "index.js",
6
6
  "directories": {
@@ -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": {
@@ -47,20 +61,24 @@
47
61
  "contactDetails": {
48
62
  "contacts": {
49
63
  "landlord": {
50
- "nameOrOrganisation": "Fleesum Properties",
51
- "address": {
52
- "line1": "47 Park Road",
53
- "postcode": "AL3 5AF"
54
- },
55
- "emailAddress": "james@fleesum.com"
64
+ "contact": {
65
+ "nameOrOrganisation": "Fleesum Properties",
66
+ "address": {
67
+ "line1": "47 Park Road",
68
+ "postcode": "AL3 5AF"
69
+ },
70
+ "emailAddress": "james@fleesum.com"
71
+ }
56
72
  },
57
73
  "managingAgent": {
58
- "nameOrOrganisation": "Pricee Living",
59
- "address": {
60
- "line1": "Pricee House",
61
- "postcode": "AL3 5KK"
62
- },
63
- "emailAddress": "marcel@pricee.co.uk"
74
+ "contact": {
75
+ "nameOrOrganisation": "Pricee Living",
76
+ "address": {
77
+ "line1": "Pricee House",
78
+ "postcode": "AL3 5KK"
79
+ },
80
+ "emailAddress": "marcel@pricee.co.uk"
81
+ }
64
82
  }
65
83
  }
66
84
  },
@@ -102,13 +120,18 @@
102
120
  },
103
121
  "listingAndConservation": {
104
122
  "isListed": {
105
- "yesNo": "No"
123
+ "yesNo": "Yes",
124
+ "details": "Grade II listed",
125
+ "attachments": "To follow"
106
126
  },
107
127
  "isConservationArea": {
108
- "yesNo": "No"
128
+ "yesNo": "Yes",
129
+ "details": "Harpenden Conservation Area",
130
+ "attachments": "To follow"
109
131
  },
110
132
  "hasTreePreservationOrder": {
111
- "yesNo": "No"
133
+ "yesNo": "Yes",
134
+ "workCarriedOut": { "yesNo": "Yes", "consentsObtained": "Yes" }
112
135
  }
113
136
  },
114
137
  "typeOfConstruction": {
@@ -121,9 +144,15 @@
121
144
  }
122
145
  },
123
146
  "energyEfficiency": {
147
+ "certificateIsSupplied": "Attached",
124
148
  "certificate": {
125
149
  "certificateNumber": "12345",
126
150
  "currentEnergyRating": "A"
151
+ },
152
+ "greenDealLoan": {
153
+ "hasGreenDealLoan": {
154
+ "yesNo": "No"
155
+ }
127
156
  }
128
157
  },
129
158
  "councilTax": {
@@ -134,7 +163,12 @@
134
163
  },
135
164
  "disputesAndComplaints": {
136
165
  "hasDisputesAndComplaints": {
137
- "yesNo": "No"
166
+ "yesNo": "Yes",
167
+ "details": "Neighbour's very annoying"
168
+ },
169
+ "leadingToDisputesAndComplaints": {
170
+ "yesNo": "Yes",
171
+ "details": "Neighbour's dog barking"
138
172
  }
139
173
  },
140
174
  "alterationsAndChanges": {
@@ -144,8 +178,8 @@
144
178
  "attachments": "Attached"
145
179
  },
146
180
  "planningPermission": {
147
- "yesNo": "Yes",
148
- "attachments": "Attached"
181
+ "yesNo": "Not required",
182
+ "details": "Permitted development rights applied"
149
183
  },
150
184
  "listedBuildingConsent": {
151
185
  "yesNo": "Not required",
@@ -155,9 +189,6 @@
155
189
  "yesNo": "Not required",
156
190
  "details": "No restriction"
157
191
  },
158
- "unfinished": {
159
- "yesNo": "No"
160
- },
161
192
  "yesNo": "Yes",
162
193
  "details": "Bedroom and ensuite shower room extension 2005"
163
194
  },
@@ -181,9 +212,6 @@
181
212
  "yesNo": "Not required",
182
213
  "details": "No restriction"
183
214
  },
184
- "unfinished": {
185
- "yesNo": "No"
186
- },
187
215
  "yesNo": "Yes",
188
216
  "details": "New front door added 2016",
189
217
  "yearCompleted": 2016
@@ -205,13 +233,13 @@
205
233
  "yesNo": "No",
206
234
  "details": "Added as part of initial build and deeds"
207
235
  },
208
- "unfinished": {
209
- "yesNo": "No"
210
- },
211
236
  "yesNo": "Yes",
212
237
  "details": "Conservatory added during house build in 1990 and exterior quality door separates the conservatory from the kitchen/dining room",
213
238
  "yearCompleted": 1990
214
239
  },
240
+ "worksUnfinished": {
241
+ "yesNo": "No"
242
+ },
215
243
  "planningPermissionBreaches": {
216
244
  "yesNo": "No"
217
245
  },
@@ -236,7 +264,9 @@
236
264
  "yesNo": "No"
237
265
  },
238
266
  "partyWallAct": {
239
- "yesNo": "No"
267
+ "yesNo": "Yes",
268
+ "details": "Party wall agreement in place",
269
+ "attachments": "Attached"
240
270
  },
241
271
  "otherNotices": {
242
272
  "yesNo": "No"
@@ -268,53 +298,48 @@
268
298
  }
269
299
  },
270
300
  "waterAndDrainage": {
271
- "mainsWater": {
272
- "maintenanceAgreements": {
273
- "yesNo": "No"
274
- },
275
- "yesNo": "To be connected",
276
- "dateToBeConnected": "2022-12-15",
277
- "supplier": "Northumbria Water"
301
+ "water": {
302
+ "mainsWater": {
303
+ "yesNo": "To be connected",
304
+ "dateToBeConnected": "2022-12-15",
305
+ "supplier": "Northumbria Water"
306
+ }
278
307
  },
279
- "mainsSurfaceWaterDrainage": {
280
- "maintenanceAgreements": {
281
- "yesNo": "No"
308
+ "drainage": {
309
+ "mainsSurfaceWaterDrainage": {
310
+ "yesNo": "Yes"
282
311
  },
283
- "yesNo": "Yes"
284
- },
285
- "mainsFoulDrainage": {
286
- "yesNo": "No",
287
- "sustainableDrainageSystem": { "yesNo": "No" },
288
- "septicTank": {
289
- "yesNo": "Yes",
290
- "details": "Last emptied on 1 Jan 2022",
291
- "dateReplaced": "2022-01-01",
292
- "dateLastEmptied": "2022-01-01"
293
- },
294
- "cesspit": { "yesNo": "No" },
295
- "sewerageTreatmentPlant": { "yesNo": "No" },
296
- "otherConnectedProperties": { "yesNo": "No" },
297
- "yearSystemInstalled": 1980,
298
- "plantOnOtherLand": { "yesNo": "No" },
299
- "plantRegistered": { "yesNo": "No" },
300
- "plantDrainsIntoWaterway": {
301
- "yesNo": "Yes",
302
- "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
+ }
303
331
  }
332
+ },
333
+ "maintenanceAgreements": {
334
+ "yesNo": "No"
304
335
  }
305
336
  },
306
337
  "connectedUtilities": {
307
338
  "mainsElectricity": {
308
- "maintenanceAgreements": {
309
- "yesNo": "No"
310
- },
311
339
  "yesNo": "Yes",
312
340
  "supplier": "Octopus Energy"
313
341
  },
314
342
  "mainsGas": {
315
- "maintenanceAgreements": {
316
- "yesNo": "No"
317
- },
318
343
  "yesNo": "Yes",
319
344
  "supplier": "Octopus Energy"
320
345
  },
@@ -325,23 +350,14 @@
325
350
  "yesNo": "No"
326
351
  },
327
352
  "telephone": {
328
- "maintenanceAgreements": {
329
- "yesNo": "No"
330
- },
331
353
  "yesNo": "Yes",
332
354
  "supplier": "EE"
333
355
  },
334
356
  "cableSatelliteTV": {
335
- "maintenanceAgreements": {
336
- "yesNo": "No"
337
- },
338
357
  "yesNo": "Yes",
339
358
  "supplier": "Sky"
340
359
  },
341
360
  "broadband": {
342
- "maintenanceAgreements": {
343
- "yesNo": "No"
344
- },
345
361
  "yesNo": "Yes",
346
362
  "supplier": "EE"
347
363
  },
@@ -350,10 +366,8 @@
350
366
  },
351
367
  "otherServices": {
352
368
  "yesNo": "No"
353
- }
354
- },
355
- "greenDealLoan": {
356
- "hasGreenDealLoan": {
369
+ },
370
+ "maintenanceAgreements": {
357
371
  "yesNo": "No"
358
372
  }
359
373
  },
@@ -368,15 +382,25 @@
368
382
  "heatingInGoodWorkingOrder": {
369
383
  "yesNo": "Yes"
370
384
  },
371
- "centralHeatingFuel": { "centralHeatingFuelType": "Gas" },
385
+ "centralHeatingFuel": {
386
+ "centralHeatingFuelType": "Other",
387
+ "otherCentralHeatingFuelType": "Ground-source Heat Pump"
388
+ },
372
389
  "centralHeatingInstalled": "2016-04-20",
373
- "heatingLastServiced": "2021-03-26"
390
+ "heatingLastServicedDate": "2021-03-26",
391
+ "heatingLastServicedReport": "To follow"
374
392
  }
375
393
  },
376
394
  "insurance": {
377
395
  "isInsured": "Yes",
378
396
  "difficultiesObtainingInsurance": {
379
- "yesNo": "No"
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" }
380
404
  },
381
405
  "insuranceClaims": {
382
406
  "yesNo": "No"
@@ -410,7 +434,10 @@
410
434
  "publicRightOfWay": {
411
435
  "yesNo": "No"
412
436
  },
413
- "rightsOfLightOrSupport": {
437
+ "rightsOfLight": {
438
+ "yesNo": "No"
439
+ },
440
+ "rightsOfSupport": {
414
441
  "yesNo": "No"
415
442
  },
416
443
  "rightsCreatedThroughCustom": {
@@ -422,6 +449,10 @@
422
449
  "churchChancel": {
423
450
  "yesNo": "No"
424
451
  },
452
+ "rightsToTakeFromLand": {
453
+ "yesNo": "Yes",
454
+ "details": "Annual gold mining festival"
455
+ },
425
456
  "otherRights": {
426
457
  "yesNo": "No"
427
458
  }
@@ -433,21 +464,11 @@
433
464
  "hasBeenFlooded": "Yes",
434
465
  "details": "Minor basement flood",
435
466
  "typeOfFlooding": {
436
- "groundWater": {
437
- "yesNo": "No"
438
- },
439
- "sewer": {
440
- "yesNo": "Yes"
441
- },
442
- "surfaceWater": {
443
- "yesNo": "No"
444
- },
445
- "coastal": {
446
- "yesNo": "No"
447
- },
448
- "river": {
449
- "yesNo": "No"
450
- },
467
+ "groundWater": "No",
468
+ "sewer": "Yes",
469
+ "surfaceWater": "No",
470
+ "coastal": "No",
471
+ "river": "No",
451
472
  "other": {
452
473
  "yesNo": "No"
453
474
  }
@@ -481,6 +502,9 @@
481
502
  },
482
503
  "otherMaterialIssue": {
483
504
  "yesNo": "No"
505
+ },
506
+ "otherCharges": {
507
+ "yesNo": "No"
484
508
  }
485
509
  },
486
510
  "consumerProtectionRegulationsDeclaration": {
@@ -507,14 +531,19 @@
507
531
  "legalBoundaries": {
508
532
  "ownership": {
509
533
  "areBoundariesUniform": "Yes",
510
- "left": "Seller",
511
- "right": "Seller",
512
- "rear": "Next-door neighbour",
513
- "front": "Next-door neighbour"
534
+ "uniformBoundaries": {
535
+ "left": "Neighbour",
536
+ "right": "Seller",
537
+ "rear": "Neighbour",
538
+ "front": "Not known"
539
+ }
514
540
  },
515
- "haveBoundaryFeaturesMoved": { "yesNo": "No" },
516
- "adjacentLandIncluded": { "yesNo": "No" },
517
- "flyingFreehold": { "yesNo": "No" }
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" }
518
547
  },
519
548
  "servicesCrossing": {
520
549
  "pipesWiresCablesDrainsToProperty": { "yesNo": "No" },
@@ -524,10 +553,15 @@
524
553
  "energyAndMeters": {
525
554
  "testedByQualifiedElectrician": {
526
555
  "yesNo": "Yes",
527
- "details": "2015",
556
+ "yearTested": 2015,
557
+ "attachments": "To follow"
558
+ },
559
+ "electricalWorkSince2005": {
560
+ "yesNo": "Yes",
561
+ "yearWorkCarriedOut": 2016,
562
+ "details": "New fuse box",
528
563
  "attachments": "To follow"
529
564
  },
530
- "electricalWorkSince2005": { "yesNo": "No" },
531
565
  "solarPanels": { "hasSolarPanels": "No" }
532
566
  },
533
567
  "smartHomeSystems": { "hasSmartHomeSystems": "No" },
@@ -548,10 +582,19 @@
548
582
  }
549
583
  },
550
584
  "completionAndMoving": {
551
- "willRemoveAllRubbish": true,
585
+ "sellerWillEnsure": {
586
+ "removeRubbish": true,
587
+ "replaceLightFittings": true,
588
+ "takeReasonableCare": true,
589
+ "leaveKeys": true
590
+ },
552
591
  "otherPropertyInChain": { "yesNo": "No" },
553
- "moveRestrictionDates": { "yesNo": "No" },
554
- "digitalPropertyLogbook": { "yesNo": "No" }
592
+ "moveRestrictionDates": {
593
+ "yesNo": "Yes",
594
+ "details": "On holiday 1-15 Aug 23"
595
+ },
596
+ "digitalPropertyLogbook": { "yesNo": "No" },
597
+ "sufficientToRepayAllMortgages": { "yesNo": "Yes" }
555
598
  },
556
599
  "confirmationOfAccuracyByOwners": {
557
600
  "confirmWillProvideAdditionalDocumentation": true,