@pdtf/schemas 2.3.0-1 → 2.3.0-3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdtf/schemas",
3
- "version": "2.3.0-1",
3
+ "version": "2.3.0-3",
4
4
  "description": "Property Data Trust Framework Schemas and Utilities",
5
5
  "main": "index.js",
6
6
  "directories": {
@@ -25,7 +25,6 @@
25
25
  "county": "Herts",
26
26
  "postcode": "AL3 5AF"
27
27
  },
28
-
29
28
  "delayFactors": {
30
29
  "hasDelayFactors": { "yesNo": "No" }
31
30
  },
@@ -6,6 +6,7 @@
6
6
  "description": "A schema defining the PDTF transaction data structure, supporting mapping to BASPI, Law Society and RICS Data Schema elements.",
7
7
  "baspiRequired": ["participants", "propertyPack"],
8
8
  "ta6Required": ["participants", "propertyPack"],
9
+ "ntsRequired": ["propertyPack"],
9
10
  "properties": {
10
11
  "$schema": {
11
12
  "type": "string"
@@ -181,12 +182,7 @@
181
182
  "environmentalIssues",
182
183
  "additionalInformation"
183
184
  ],
184
- "ntsRequired": [
185
- "priceInformation",
186
- "ownership",
187
- "councilTax",
188
- "energyEfficiency"
189
- ],
185
+ "ntsRequired": ["ownership", "councilTax", "energyEfficiency"],
190
186
  "properties": {
191
187
  "address": {
192
188
  "baspiRef": "A1.1",
@@ -356,7 +352,7 @@
356
352
  "ntsRef": "A3",
357
353
  "title": "Price information",
358
354
  "type": "object",
359
- "ntsRequired": ["price", "preiceQualifier"],
355
+ "ntsRequired": ["price", "priceQualifier"],
360
356
  "properties": {
361
357
  "price": {
362
358
  "ntsRef": "A3.1",
@@ -1017,7 +1013,7 @@
1017
1013
  "ownership": {
1018
1014
  "baspiRef": "A1.3",
1019
1015
  "ta7Ref": "1",
1020
- "ntsRef": "A1.1",
1016
+ "ntsRef": "A1",
1021
1017
  "title": "Ownership",
1022
1018
  "type": "object",
1023
1019
  "baspiRequired": ["ownershipsToBeTransferred"],
@@ -1026,11 +1022,13 @@
1026
1022
  "ownershipsToBeTransferred": {
1027
1023
  "baspiRef": "A1.3",
1028
1024
  "ta7Ref": "1",
1025
+ "ntsRef": "A1",
1029
1026
  "title": "Ownerships to be transferred on sale",
1030
1027
  "type": "array",
1031
1028
  "minItems": 1,
1032
1029
  "items": {
1033
1030
  "baspiRef": "A1.3.0",
1031
+ "ntsRef": "A1.1",
1034
1032
  "title": "Ownership to be transferred",
1035
1033
  "type": "object",
1036
1034
  "baspiRequired": ["ownershipType"],
@@ -1047,6 +1045,7 @@
1047
1045
  "rdsRef": "Tenure/Tenure",
1048
1046
  "ta7Ref": "1.1",
1049
1047
  "piqRef": "A1.2",
1048
+ "ntsRef": "A1.1.1",
1050
1049
  "title": "What type of ownership is the property?",
1051
1050
  "description": "A Managed Freehold is any freehold where there are shared amenities, the maintenance of which you pay for through an estate rentcharge, service charge, informal or formal contribution. Choose Leasehold if your property is under a Shared Ownership arrangement.",
1052
1051
  "type": "string",
@@ -3331,6 +3330,7 @@
3331
3330
  },
3332
3331
  "leaseholdInformation": {
3333
3332
  "baspiRef": "A1.5",
3333
+ "ntsRef": "A1.2",
3334
3334
  "title": "Leasehold information",
3335
3335
  "type": "object",
3336
3336
  "lpe1Required": [
@@ -3353,6 +3353,12 @@
3353
3353
  "transferAndRegistration",
3354
3354
  "serviceCharge"
3355
3355
  ],
3356
+ "ntsRequired": [
3357
+ "typeOfLeasehold",
3358
+ "leaseTerm",
3359
+ "groundRent",
3360
+ "serviceCharge"
3361
+ ],
3356
3362
  "ta7Required": [
3357
3363
  "typeOfLeasehold",
3358
3364
  "leaseTerm",
@@ -3367,9 +3373,11 @@
3367
3373
  "properties": {
3368
3374
  "typeOfLeasehold": {
3369
3375
  "baspiRef": "A1.3.1",
3376
+ "ntsRef": "A1.2",
3370
3377
  "type": "object",
3371
3378
  "lpe1Required": ["leaseholdType"],
3372
3379
  "baspiRequired": ["leaseholdType"],
3380
+ "ntsRequired": ["leaseholdType"],
3373
3381
  "properties": {
3374
3382
  "leaseholdType": {
3375
3383
  "baspiRef": "A1.3.1",
@@ -3443,6 +3451,7 @@
3443
3451
  },
3444
3452
  "leaseTerm": {
3445
3453
  "baspiRef": "A1.4.1",
3454
+ "ntsRef": "A1.2.1",
3446
3455
  "type": "object",
3447
3456
  "baspiRequired": [
3448
3457
  "startYearOfLease",
@@ -3455,13 +3464,13 @@
3455
3464
  "properties": {
3456
3465
  "startYearOfLease": {
3457
3466
  "baspiRef": "A1.4.1.1",
3458
- "ntsRef": "A1.2",
3467
+ "ntsRef": "A1.2.1.1",
3459
3468
  "title": "Year that the lease commenced",
3460
3469
  "type": "integer"
3461
3470
  },
3462
3471
  "lengthOfLeaseInYears": {
3463
3472
  "baspiRef": "A1.4.1.2",
3464
- "ntsRef": "A1.3",
3473
+ "ntsRef": "A1.2.1.2",
3465
3474
  "piqRef": "A1.3.1",
3466
3475
  "title": "Length of lease (years)",
3467
3476
  "type": "integer"
@@ -5369,6 +5378,10 @@
5369
5378
  "baspiRequired": [
5370
5379
  "annualGroundRent",
5371
5380
  "rentSubjectToIncrease"
5381
+ ],
5382
+ "ntsRequired": [
5383
+ "annualGroundRent",
5384
+ "rentSubjectToIncrease"
5372
5385
  ]
5373
5386
  }
5374
5387
  ]
@@ -5499,6 +5512,7 @@
5499
5512
  "serviceCharge": {
5500
5513
  "baspiRef": "A1.5.1",
5501
5514
  "lpe1Ref": "4",
5515
+ "ntsRef": "A1.5",
5502
5516
  "title": "Service Charge",
5503
5517
  "type": "object",
5504
5518
  "lpe1Required": [
@@ -5507,10 +5521,14 @@
5507
5521
  "baspiRequired": [
5508
5522
  "sellerContributesToServiceCharge"
5509
5523
  ],
5524
+ "ntsRequired": [
5525
+ "sellerContributesToServiceCharge"
5526
+ ],
5510
5527
  "properties": {
5511
5528
  "sellerContributesToServiceCharge": {
5512
5529
  "baspiRef": "A1.5.1.1",
5513
5530
  "ta7Ref": "5.4",
5531
+ "ntsRef": "A1.5.1",
5514
5532
  "title": "Does the seller contribute to the cost of maintaining the building (a service charge)?",
5515
5533
  "type": "string",
5516
5534
  "enum": ["Yes", "No"]
@@ -5535,6 +5553,7 @@
5535
5553
  "annualServiceCharge": {
5536
5554
  "baspiRef": "A1.5.1.1.2",
5537
5555
  "lpe1Ref": "4.1.1",
5556
+ "ntsRef": "A1.5.1.1",
5538
5557
  "title": "Amount of current annual service charge (£)",
5539
5558
  "type": "number"
5540
5559
  },
@@ -8238,10 +8257,12 @@
8238
8257
  "energyEfficiency": {
8239
8258
  "baspiRef": "A1.8.3",
8240
8259
  "ta6Ref": "7.6",
8260
+ "ntsRef": "A4",
8241
8261
  "rdsRef": "Certificates/{category='energyEfficiency',standard='EPC',gradeLevelRating=?},Certificates/{category='energyEfficiency',standard='EPC',status='exempt'},",
8242
8262
  "title": "Energy Efficiency",
8243
8263
  "type": "object",
8244
8264
  "baspiRequired": ["certificate", "greenDealLoan"],
8265
+ "ntsRequired": ["certificate"],
8245
8266
  "ta6Required": ["certificateIsSupplied", "greenDealLoan"],
8246
8267
  "properties": {
8247
8268
  "certificateIsSupplied": {
@@ -8252,8 +8273,10 @@
8252
8273
  },
8253
8274
  "certificate": {
8254
8275
  "baspiRef": "A1.8.3.1",
8276
+ "ntsRef": "A4.1",
8255
8277
  "type": "object",
8256
8278
  "baspiRequired": ["currentEnergyRating"],
8279
+ "ntsRequired": ["currentEnergyRating"],
8257
8280
  "properties": {
8258
8281
  "certificateNumber": {
8259
8282
  "type": "string"
@@ -8302,6 +8325,7 @@
8302
8325
  },
8303
8326
  "currentEnergyRating": {
8304
8327
  "baspiRef": "A1.8.3.1.1",
8328
+ "ntsRef": "A4.1.1",
8305
8329
  "title": "Current energy efficiency rating",
8306
8330
  "description": "What is the energy efficiency rating of the property according to the latest Energy Performance Certificate (EPC)?",
8307
8331
  "type": "string",
@@ -8660,6 +8684,7 @@
8660
8684
  "councilTaxBand",
8661
8685
  "councilTaxAffectingAlterations"
8662
8686
  ],
8687
+ "ntsRequired": ["councilTaxBand"],
8663
8688
  "properties": {
8664
8689
  "councilTaxBand": {
8665
8690
  "baspiRef": "A1.9.1",
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://trust.propdata.org.uk/schemas/v2/overlays/nts.json",
4
+ "required": [
5
+ "propertyPack"
6
+ ],
4
7
  "properties": {
5
8
  "propertyPack": {
6
9
  "required": [
@@ -9,7 +12,6 @@
9
12
  "properties": {
10
13
  "materialFacts": {
11
14
  "required": [
12
- "priceInformation",
13
15
  "ownership",
14
16
  "councilTax",
15
17
  "energyEfficiency"
@@ -20,7 +22,7 @@
20
22
  "title": "Price information",
21
23
  "required": [
22
24
  "price",
23
- "preiceQualifier"
25
+ "priceQualifier"
24
26
  ],
25
27
  "properties": {
26
28
  "price": {
@@ -42,34 +44,82 @@
42
44
  }
43
45
  },
44
46
  "ownership": {
45
- "ntsRef": "A1.1",
47
+ "ntsRef": "A1",
46
48
  "title": "Ownership",
47
49
  "required": [
48
50
  "ownershipsToBeTransferred"
49
51
  ],
50
52
  "properties": {
51
53
  "ownershipsToBeTransferred": {
54
+ "ntsRef": "A1",
55
+ "title": "Ownerships to be transferred on sale",
56
+ "minItems": 1,
52
57
  "items": {
53
- "required": [
54
- "ownershipType"
55
- ],
58
+ "ntsRef": "A1.1",
59
+ "title": "Ownership to be transferred",
60
+ "discriminator": {
61
+ "propertyName": "ownershipType"
62
+ },
56
63
  "oneOf": [
57
- null,
58
- null,
59
64
  {
60
65
  "properties": {
66
+ "ownershipType": {
67
+ "enum": [
68
+ "Freehold"
69
+ ]
70
+ }
71
+ }
72
+ },
73
+ {
74
+ "properties": {
75
+ "ownershipType": {
76
+ "enum": [
77
+ "Managed Freehold",
78
+ "Commonhold"
79
+ ]
80
+ }
81
+ }
82
+ },
83
+ {
84
+ "properties": {
85
+ "ownershipType": {
86
+ "enum": [
87
+ "Leasehold"
88
+ ]
89
+ },
61
90
  "leaseholdInformation": {
91
+ "ntsRef": "A1.2",
92
+ "title": "Leasehold information",
93
+ "required": [
94
+ "typeOfLeasehold",
95
+ "leaseTerm",
96
+ "groundRent",
97
+ "serviceCharge"
98
+ ],
62
99
  "properties": {
63
100
  "typeOfLeasehold": {
101
+ "ntsRef": "A1.2",
102
+ "discriminator": {
103
+ "propertyName": "leaseholdType"
104
+ },
64
105
  "oneOf": [
65
- null,
66
106
  {
67
- "required": [
68
- "sharedOwnershipPercentage",
69
- "sharedOwnershipRent",
70
- "sharedOwnershipRentFrequency"
71
- ],
72
107
  "properties": {
108
+ "leaseholdType": {
109
+ "enum": [
110
+ "Flat",
111
+ "Long leasehold house"
112
+ ]
113
+ }
114
+ }
115
+ },
116
+ {
117
+ "properties": {
118
+ "leaseholdType": {
119
+ "enum": [
120
+ "Shared ownership"
121
+ ]
122
+ },
73
123
  "sharedOwnershipPercentage": {
74
124
  "ntsRef": "A1.7.1",
75
125
  "title": "Shared ownership percentage"
@@ -87,22 +137,31 @@
87
137
  "Weekly"
88
138
  ]
89
139
  }
90
- }
140
+ },
141
+ "required": [
142
+ "sharedOwnershipPercentage",
143
+ "sharedOwnershipRent",
144
+ "sharedOwnershipRentFrequency"
145
+ ]
91
146
  }
147
+ ],
148
+ "required": [
149
+ "leaseholdType"
92
150
  ]
93
151
  },
94
152
  "leaseTerm": {
153
+ "ntsRef": "A1.2.1",
95
154
  "required": [
96
155
  "startYearOfLease",
97
156
  "lengthOfLeaseInYears"
98
157
  ],
99
158
  "properties": {
100
159
  "startYearOfLease": {
101
- "ntsRef": "A1.2",
160
+ "ntsRef": "A1.2.1.1",
102
161
  "title": "Year that the lease commenced"
103
162
  },
104
163
  "lengthOfLeaseInYears": {
105
- "ntsRef": "A1.3",
164
+ "ntsRef": "A1.2.1.2",
106
165
  "title": "Length of lease (years)"
107
166
  }
108
167
  }
@@ -186,7 +245,11 @@
186
245
  }
187
246
  }
188
247
  }
189
- }
248
+ },
249
+ "required": [
250
+ "annualGroundRent",
251
+ "rentSubjectToIncrease"
252
+ ]
190
253
  }
191
254
  ],
192
255
  "required": [
@@ -202,12 +265,116 @@
202
265
  ]
203
266
  }
204
267
  }
268
+ },
269
+ "serviceCharge": {
270
+ "ntsRef": "A1.5",
271
+ "title": "Service Charge",
272
+ "discriminator": {
273
+ "propertyName": "sellerContributesToServiceCharge"
274
+ },
275
+ "oneOf": [
276
+ {
277
+ "properties": {
278
+ "sellerContributesToServiceCharge": {
279
+ "enum": [
280
+ "No"
281
+ ]
282
+ }
283
+ }
284
+ },
285
+ {
286
+ "properties": {
287
+ "sellerContributesToServiceCharge": {
288
+ "enum": [
289
+ "Yes"
290
+ ]
291
+ },
292
+ "annualServiceCharge": {
293
+ "ntsRef": "A1.5.1.1",
294
+ "title": "Amount of current annual service charge (£)"
295
+ }
296
+ }
297
+ }
298
+ ],
299
+ "required": [
300
+ "sellerContributesToServiceCharge"
301
+ ],
302
+ "properties": {
303
+ "sellerContributesToServiceCharge": {
304
+ "ntsRef": "A1.5.1",
305
+ "title": "Does the seller contribute to the cost of maintaining the building (a service charge)?",
306
+ "enum": [
307
+ "Yes",
308
+ "No"
309
+ ]
310
+ }
311
+ }
205
312
  }
206
313
  }
207
314
  }
208
315
  }
316
+ },
317
+ {
318
+ "properties": {
319
+ "ownershipType": {
320
+ "enum": [
321
+ "Other"
322
+ ]
323
+ }
324
+ }
209
325
  }
210
- ]
326
+ ],
327
+ "required": [
328
+ "ownershipType"
329
+ ],
330
+ "properties": {
331
+ "ownershipType": {
332
+ "ntsRef": "A1.1.1",
333
+ "title": "What type of ownership is the property?",
334
+ "description": "A Managed Freehold is any freehold where there are shared amenities, the maintenance of which you pay for through an estate rentcharge, service charge, informal or formal contribution. Choose Leasehold if your property is under a Shared Ownership arrangement.",
335
+ "enum": [
336
+ "Freehold",
337
+ "Managed Freehold",
338
+ "Commonhold",
339
+ "Leasehold",
340
+ "Other"
341
+ ]
342
+ }
343
+ }
344
+ }
345
+ }
346
+ }
347
+ },
348
+ "energyEfficiency": {
349
+ "ntsRef": "A4",
350
+ "title": "Energy Efficiency",
351
+ "required": [
352
+ "certificate"
353
+ ],
354
+ "properties": {
355
+ "certificate": {
356
+ "ntsRef": "A4.1",
357
+ "required": [
358
+ "currentEnergyRating"
359
+ ],
360
+ "properties": {
361
+ "currentEnergyRating": {
362
+ "ntsRef": "A4.1.1",
363
+ "title": "Current energy efficiency rating",
364
+ "description": "What is the energy efficiency rating of the property according to the latest Energy Performance Certificate (EPC)?",
365
+ "enum": [
366
+ "A",
367
+ "B",
368
+ "C",
369
+ "D",
370
+ "E",
371
+ "F",
372
+ "G",
373
+ "Exempt Property",
374
+ "Survey Instructed",
375
+ "No Certificate"
376
+ ]
377
+ }
211
378
  }
212
379
  }
213
380
  }
@@ -215,6 +382,9 @@
215
382
  "councilTax": {
216
383
  "ntsRef": "A2",
217
384
  "title": "Council Tax",
385
+ "required": [
386
+ "councilTaxBand"
387
+ ],
218
388
  "properties": {
219
389
  "councilTaxBand": {
220
390
  "ntsRef": "A2.1",
@@ -26,7 +26,7 @@ test("exports a property pack schema, v2 with baspi overlay by default", () => {
26
26
  ).toEqual("A");
27
27
  });
28
28
 
29
- test("sample is valid", () => {
29
+ test("sample is valid BASPI", () => {
30
30
  const testSchema = getTransactionSchema();
31
31
  expect(
32
32
  testSchema.properties.propertyPack.properties.materialFacts.baspiRef
@@ -265,7 +265,7 @@ test("correctly gets a subschema validator for an NTS overlay", () => {
265
265
  "nts2023",
266
266
  ]);
267
267
  let isValid = validator(data);
268
- expect(isValid).toBe(false);
268
+ expect(isValid).toBe(true);
269
269
  });
270
270
 
271
271
  test("correctly gets a subschema validator for an LPE1 overlay", () => {