@pdtf/schemas 3.6.0-32 → 3.6.0-34
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/README.md +52 -33
- package/docs/sef25-extensions-ui-spec.md +63 -123
- package/package.json +1 -1
- package/src/schemas/v3/combined.json +21 -51
- package/src/schemas/v3/compactSkeleton.txt +0 -5
- package/src/schemas/v3/overlays/extensions/ic.json +3 -0
- package/src/schemas/v3/overlays/extensions/mi.json +3 -0
- package/src/schemas/v3/overlays/extensions/ph.json +11 -14
- package/src/schemas/v3/overlays/extensions/wg.json +57 -16
- package/src/schemas/v3/overlays/sef25.json +995 -0
- package/src/schemas/v3/pdtf-transaction.json +13 -233
- package/src/schemas/v3/skeleton.json +1 -7
- package/src/tests/v3/extensionOverlays.test.js +14 -14
- package/src/utils/extractExtensionOverlays.js +2 -11
- package/src/utils/extractOverlay.js +1 -0
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ The Property Data Trust Framework (PDTF) Schemas provide standardized JSON Schem
|
|
|
7
7
|
|
|
8
8
|
## Project Goals & Status
|
|
9
9
|
|
|
10
|
-
**Current Version:** 3.
|
|
10
|
+
**Current Version:** 3.6.0-32 (pre-release on branch/package-tag `next`)
|
|
11
11
|
|
|
12
12
|
This schema framework aims to support the [Home Buying and Selling Group](https://homebuyingandsellinggroup.co.uk) 'Property Pack' initiative, encompassing all requirements starting with the Buyers and Sellers Property Information set ([BASPI v4.0](https://homebuyingandsellinggroup.co.uk/baspi/)).
|
|
13
13
|
|
|
@@ -62,7 +62,7 @@ if (!isValid) {
|
|
|
62
62
|
|
|
63
63
|
- **🏗️ Modular Schema System** - Base schemas with flexible overlay composition
|
|
64
64
|
- **📋 Multiple Form Support** - BASPI, NTS, Law Society TA forms, and more
|
|
65
|
-
- **🧩 Extension Overlays** - Granular NTS2 features as individual modules
|
|
65
|
+
- **🧩 Extension Overlays** - Granular NTS2 and SEF25 features as individual modules
|
|
66
66
|
- **✅ JSON Schema Validation** - Full JSON Schema Draft 07 support with AJV
|
|
67
67
|
- **🔗 Verified Claims** - Support for verified data provenance tracking
|
|
68
68
|
- **📚 Comprehensive Documentation** - Detailed usage guides and examples
|
|
@@ -82,7 +82,7 @@ if (!isValid) {
|
|
|
82
82
|
│ │ │ │ └── extensions/ # Modular NTS2 extensions
|
|
83
83
|
│ │ │ │ ├── jk.json # Japanese Knotweed
|
|
84
84
|
│ │ │ │ ├── tf.json # Transfer Fees
|
|
85
|
-
│ │ │ │ └── ... #
|
|
85
|
+
│ │ │ │ └── ... # NTS2 + SEF25 extensions
|
|
86
86
|
│ │ │ └── combined.json # Master schema for generation
|
|
87
87
|
│ │ ├── v2/ # Legacy schema version
|
|
88
88
|
│ │ ├── verifiedClaims/ # Verified claims schemas
|
|
@@ -163,31 +163,56 @@ const errors = validateVerifiedClaims(verifiedClaims, schemaId, ["nts2023"]);
|
|
|
163
163
|
|
|
164
164
|
#### Extension Overlays
|
|
165
165
|
|
|
166
|
-
Modular
|
|
166
|
+
Modular features for selective adoption. Extensions are merged on top of an NTS base overlay.
|
|
167
167
|
|
|
168
168
|
```javascript
|
|
169
|
-
//
|
|
170
|
-
const schema = getTransactionSchema(schemaId, ["nts2023", "jk", "tf"]);
|
|
171
|
-
|
|
172
|
-
//
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
"as",
|
|
176
|
-
"dr",
|
|
177
|
-
"jk",
|
|
178
|
-
"sb",
|
|
179
|
-
]);
|
|
169
|
+
// NTS2 extensions
|
|
170
|
+
const schema = getTransactionSchema(schemaId, ["nts2023", "jk", "tf", "ma"]);
|
|
171
|
+
|
|
172
|
+
// SEF25 extensions (Seller Enquiry Form)
|
|
173
|
+
const sef25 = ["sc", "pc", "ph", "dk", "rw", "sd", "lc", "wg", "ic", "nd", "mi", "tr"];
|
|
174
|
+
const schema = getTransactionSchema(schemaId, ["nts2023", ...sef25]);
|
|
180
175
|
```
|
|
181
176
|
|
|
182
|
-
|
|
183
|
-
| ----------------- | ---- | -------------------------------- |
|
|
184
|
-
| Japanese Knotweed | `jk` | Knotweed presence and management |
|
|
185
|
-
| Transfer Fees | `tf` | Additional leasehold fees |
|
|
186
|
-
| Managing Agent | `ma` | Leasehold managing agent details |
|
|
187
|
-
| Solar Panels | `sl` | Solar panel ownership details |
|
|
188
|
-
| Asbestos | `as` | Asbestos presence and management |
|
|
177
|
+
**NTS2 Extensions:**
|
|
189
178
|
|
|
190
|
-
|
|
179
|
+
| Extension | Code | Description |
|
|
180
|
+
| --- | --- | --- |
|
|
181
|
+
| Japanese Knotweed | `jk` | Knotweed presence and management |
|
|
182
|
+
| Asbestos | `as` | Asbestos presence and management |
|
|
183
|
+
| Dry Rot | `dr` | Dry rot treatment |
|
|
184
|
+
| Subsidence | `sb` | Subsidence or structural fault |
|
|
185
|
+
| Health & Safety | `hs` | Ongoing health or safety issues |
|
|
186
|
+
| Outside Areas | `oa` | Outside areas details |
|
|
187
|
+
| Main Construction | `mc` | Construction type if standard form |
|
|
188
|
+
| Loft Access | `la` | Loft access and details |
|
|
189
|
+
| Spray Foam | `sf` | Spray foam insulation |
|
|
190
|
+
| Solar Panels | `sl` | Solar panel ownership details |
|
|
191
|
+
| Heating Installed | `hi` | Central heating installation date |
|
|
192
|
+
| Flood Defences | `fd` | Flood defence information |
|
|
193
|
+
| Estate Rentcharges | `er` | Estate rentcharges for freehold |
|
|
194
|
+
| Managing Agent | `ma` | Leasehold managing agent details |
|
|
195
|
+
| Transfer Fees | `tf` | Additional leasehold fees |
|
|
196
|
+
| Onward Chain | `oc` | Other property in chain |
|
|
197
|
+
|
|
198
|
+
**SEF25 Extensions (Seller Enquiry Form):**
|
|
199
|
+
|
|
200
|
+
| Extension | Code | Description |
|
|
201
|
+
| --- | --- | --- |
|
|
202
|
+
| Supply Costs | `sc` | Private water/sewerage costs |
|
|
203
|
+
| Parking Permit Cost | `pc` | Parking permit frequency |
|
|
204
|
+
| Property Hazards | `ph` | 4 hazard Yes/No questions |
|
|
205
|
+
| Dropped Kerb | `dk` | Dropped kerb access to parking |
|
|
206
|
+
| Private Right of Way | `rw` | Private right of way |
|
|
207
|
+
| Storm/Fire/Flood Damage | `sd` | Storm, fire or flood damage |
|
|
208
|
+
| Solar Lease Costs | `lc` | Solar panel lease costs |
|
|
209
|
+
| Warranties & Guarantees | `wg` | 7 warranty categories upfront |
|
|
210
|
+
| Insurance Claims | `ic` | Insurance claims upfront |
|
|
211
|
+
| Neighbour Development | `nd` | Neighbour development |
|
|
212
|
+
| Material Issue | `mi` | Other material issue upfront |
|
|
213
|
+
| Title Restrictions | `tr` | Title restrictions for freehold |
|
|
214
|
+
|
|
215
|
+
[View full SEF25 UI spec →](docs/sef25-extensions-ui-spec.md) | [View all extensions →](src/schemas/v3/overlays/README.md#extension-overlays)
|
|
191
216
|
|
|
192
217
|
## Usage Examples
|
|
193
218
|
|
|
@@ -204,7 +229,7 @@ const legalSchema = getTransactionSchema(schemaId, ["ta6ed4", "ta7ed3"]);
|
|
|
204
229
|
const ntsSchema = getTransactionSchema(schemaId, ["nts2023"]);
|
|
205
230
|
```
|
|
206
231
|
|
|
207
|
-
### Modular
|
|
232
|
+
### Modular Extension Features
|
|
208
233
|
|
|
209
234
|
```javascript
|
|
210
235
|
// Selective NTS2 adoption
|
|
@@ -215,15 +240,9 @@ const partialNts2 = getTransactionSchema(schemaId, [
|
|
|
215
240
|
"ma", // Managing Agent
|
|
216
241
|
]);
|
|
217
242
|
|
|
218
|
-
//
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
"as",
|
|
222
|
-
"dr",
|
|
223
|
-
"jk",
|
|
224
|
-
"sb",
|
|
225
|
-
"hs",
|
|
226
|
-
]);
|
|
243
|
+
// SEF25 Seller Enquiry Form extensions
|
|
244
|
+
const sef25 = ["sc", "pc", "ph", "dk", "rw", "sd", "lc", "wg", "ic", "nd", "mi", "tr"];
|
|
245
|
+
const sellerEnquiry = getTransactionSchema(schemaId, ["nts2023", ...sef25]);
|
|
227
246
|
```
|
|
228
247
|
|
|
229
248
|
### Data Validation
|
|
@@ -4,72 +4,79 @@
|
|
|
4
4
|
|
|
5
5
|
Extension overlays add follow-up questions to existing form sections. Each overlay is loaded by passing its key to `getTransactionSchema(schemaId, overlays)`.
|
|
6
6
|
|
|
7
|
+
### Pre-existing overlays
|
|
8
|
+
|
|
9
|
+
These were added before this PR and are already in production.
|
|
10
|
+
|
|
7
11
|
| Overlay Key | Name | Section | Fields Added |
|
|
8
12
|
|-------------|------|---------|-------------|
|
|
9
|
-
| `sc` | Supply Costs | Water & Drainage |
|
|
13
|
+
| `sc` | Supply Costs | Water & Drainage | Cost fields for private water and sewerage (restructured to hasCost Yes/No gate) |
|
|
10
14
|
| `pc` | Parking Permit Cost | Parking | 1 frequency field |
|
|
11
15
|
| `ph` | Property Hazards | Specialist Issues | 4 Yes/No + details fields |
|
|
16
|
+
|
|
17
|
+
### New overlays (this PR)
|
|
18
|
+
|
|
19
|
+
| Overlay Key | Name | Section | Fields Added |
|
|
20
|
+
|-------------|------|---------|-------------|
|
|
12
21
|
| `dk` | Dropped Kerb | Parking | 1 Yes/No field |
|
|
13
22
|
| `rw` | Private Right of Way | Rights & Informal Arrangements | 1 Yes/No + details field |
|
|
14
23
|
| `sd` | Storm/Fire/Flood Damage | Environmental Issues | 1 Yes/No + details field |
|
|
15
|
-
| `lc` | Solar Lease Costs | Utilities (Solar Panels) | 1 cost field (amount + frequency) |
|
|
24
|
+
| `lc` | Solar Lease Costs | Utilities (Solar Panels) | 1 cost field (hasCost + amount + frequency) |
|
|
16
25
|
| `wg` | Warranties & Guarantees | Guarantees & Warranties | Marks 7 warranty categories as required |
|
|
17
|
-
| `dc` | Disputes & Complaints | Disputes & Complaints | Marks hasDisputesAndComplaints required |
|
|
18
26
|
| `ic` | Insurance Claims | Insurance | Marks insuranceClaims required (isInsured=Yes branch) |
|
|
19
|
-
| `
|
|
20
|
-
| `nd` | Neighbour Development | Notices | Marks neighbourDevelopment required |
|
|
27
|
+
| `nd` | Neighbour Development | Notices | Adds sef25Ref to neighbourDevelopment (already required via NTS) |
|
|
21
28
|
| `mi` | Material Issue | Additional Information | Marks otherMaterialIssue required |
|
|
22
29
|
| `tr` | Title Restrictions | Ownership (Freehold) | Adds titleRestrictions field to freehold branch |
|
|
23
30
|
|
|
31
|
+
### Existing fields with sef25Ref only (no separate overlay needed)
|
|
32
|
+
|
|
33
|
+
| Field | Path | sef25Ref | Notes |
|
|
34
|
+
|-------|------|----------|-------|
|
|
35
|
+
| `hasBeenFlooded` | `environmentalIssues.flooding.historicalFlooding.hasBeenFlooded` | E1.2 | Already required and rendered via NTS flooding section |
|
|
36
|
+
|
|
24
37
|
All fields use `sef25Ref` for reference codes.
|
|
25
38
|
|
|
26
39
|
---
|
|
27
40
|
|
|
28
|
-
##
|
|
41
|
+
## Pre-existing overlays (detail)
|
|
29
42
|
|
|
30
|
-
###
|
|
43
|
+
### 1. Supply Costs (`sc`)
|
|
44
|
+
|
|
45
|
+
#### 1a. Private Water Cost
|
|
31
46
|
|
|
32
47
|
**Trigger:** Show when `propertyPack.waterAndDrainage.water.mainsWater.yesNo` = `"No"`
|
|
33
48
|
|
|
34
49
|
**Path:** `propertyPack.waterAndDrainage.water.mainsWater.associatedCost`
|
|
35
50
|
|
|
36
|
-
**UI:** Render alongside the existing "How is water supplied?" details field.
|
|
51
|
+
**UI:** Render alongside the existing "How is water supplied?" details field. First ask if there are costs, then show amount and frequency if Yes.
|
|
37
52
|
|
|
38
53
|
| Field | Path (relative) | Type | Validation | UI Element |
|
|
39
54
|
|-------|-----------------|------|------------|------------|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
55
|
+
| Has costs? | `associatedCost.hasCost` | `string` | Required, enum | Yes/No radio |
|
|
56
|
+
| Cost (£) | `associatedCost.amount` | `number` | Required when Yes | Numeric input |
|
|
57
|
+
| Payment frequency | `associatedCost.frequency` | `string` | Required when Yes, enum | Dropdown |
|
|
42
58
|
|
|
43
59
|
**Frequency enum values:** `"Per month"`, `"Per year"`
|
|
44
60
|
|
|
45
|
-
**Ref:** `U1.1` (
|
|
61
|
+
**Ref:** `U1.1` (hasCost: `U1.1.1`, amount: `U1.1.2`, frequency: `U1.1.3`)
|
|
46
62
|
|
|
47
|
-
|
|
63
|
+
#### 1b. Private Sewerage Cost
|
|
48
64
|
|
|
49
65
|
**Trigger:** Show when `propertyPack.waterAndDrainage.drainage.mainsFoulDrainage.yesNo` = `"No"` or `"Not known"`
|
|
50
66
|
|
|
51
67
|
**Path:** `propertyPack.waterAndDrainage.drainage.mainsFoulDrainage.associatedCost`
|
|
52
68
|
|
|
53
|
-
**UI:**
|
|
54
|
-
|
|
55
|
-
| Field | Path (relative) | Type | Validation | UI Element |
|
|
56
|
-
|-------|-----------------|------|------------|------------|
|
|
57
|
-
| Cost (£) | `associatedCost.amount` | `number` | Required | Numeric input |
|
|
58
|
-
| Payment frequency | `associatedCost.frequency` | `string` | Required, enum | Dropdown |
|
|
59
|
-
|
|
60
|
-
**Frequency enum values:** `"Per month"`, `"Per year"`
|
|
61
|
-
|
|
62
|
-
**Ref:** `U1.2` (amount: `U1.2.1`, frequency: `U1.2.2`)
|
|
69
|
+
**UI:** Same hasCost pattern as water cost above.
|
|
63
70
|
|
|
64
|
-
|
|
71
|
+
**Ref:** `U1.2` (hasCost: `U1.2.1`, amount: `U1.2.2`, frequency: `U1.2.3`)
|
|
65
72
|
|
|
66
|
-
|
|
73
|
+
### 2. Parking Permit Cost (`pc`)
|
|
67
74
|
|
|
68
75
|
**Trigger:** Show when `propertyPack.parking.controlledParking.yesNo` = `"Yes"`
|
|
69
76
|
|
|
70
77
|
**Path:** `propertyPack.parking.controlledParking.costOfPermitFrequency`
|
|
71
78
|
|
|
72
|
-
**UI:** Render alongside the existing cost of permit field
|
|
79
|
+
**UI:** Render alongside the existing cost of permit field. The frequency dropdown clarifies whether the cost amount is monthly or annual.
|
|
73
80
|
|
|
74
81
|
| Field | Path (relative) | Type | Validation | UI Element |
|
|
75
82
|
|-------|-----------------|------|------------|------------|
|
|
@@ -77,24 +84,15 @@ All fields use `sef25Ref` for reference codes.
|
|
|
77
84
|
|
|
78
85
|
**Frequency enum values:** `"Per month"`, `"Per year"`
|
|
79
86
|
|
|
80
|
-
**Note:** The existing `annualCostOfPermit` numeric field remains unchanged. The new frequency field sits beside it to indicate whether the entered amount is per month or per year.
|
|
81
|
-
|
|
82
87
|
**Ref:** `P1.1`
|
|
83
88
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
## 3. Property Hazards (`ph`)
|
|
89
|
+
### 3. Property Hazards (`ph`)
|
|
87
90
|
|
|
88
|
-
**Trigger:** Always shown (
|
|
91
|
+
**Trigger:** Always shown (standalone questions within Specialist Issues).
|
|
89
92
|
|
|
90
93
|
**Path prefix:** `propertyPack.specialistIssues`
|
|
91
94
|
|
|
92
|
-
All 4 fields follow the same pattern:
|
|
93
|
-
|
|
94
|
-
- **Initial question:** Yes/No radio/toggle
|
|
95
|
-
- **If "Yes":** Show a required free-text "Give details" field
|
|
96
|
-
|
|
97
|
-
### Fields
|
|
95
|
+
All 4 fields follow the same pattern: Yes/No, if Yes show required details.
|
|
98
96
|
|
|
99
97
|
| Property | Title | sef25Ref |
|
|
100
98
|
|----------|-------|----------|
|
|
@@ -103,29 +101,11 @@ All 4 fields follow the same pattern:
|
|
|
103
101
|
| `damageToFlooringOrStaircases` | Is there any damage to flooring and/or staircases? | H1.3 |
|
|
104
102
|
| `knownAreasInPoorCondition` | Are there any known areas in poor condition (internal or external)? | H1.4 |
|
|
105
103
|
|
|
106
|
-
### Data shape per field
|
|
107
|
-
|
|
108
|
-
```json
|
|
109
|
-
// When "No":
|
|
110
|
-
{ "yesNo": "No" }
|
|
111
|
-
|
|
112
|
-
// When "Yes":
|
|
113
|
-
{ "yesNo": "Yes", "details": "Free text description..." }
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Validation
|
|
117
|
-
|
|
118
|
-
- `yesNo` is required (enum: `["Yes", "No"]`)
|
|
119
|
-
- When `yesNo` = `"Yes"`, `details` is required (string, minLength: 1)
|
|
120
|
-
- When `yesNo` = `"No"`, `details` should not be shown or submitted
|
|
121
|
-
|
|
122
|
-
### UI pattern
|
|
123
|
-
|
|
124
|
-
These follow the identical pattern to existing specialist issues (dry rot, asbestos, subsidence, health & safety). Render them the same way — group them under "Hazards and Known Issues" within the Specialist Issues section.
|
|
125
|
-
|
|
126
104
|
---
|
|
127
105
|
|
|
128
|
-
##
|
|
106
|
+
## New overlays (detail)
|
|
107
|
+
|
|
108
|
+
### 4. Dropped Kerb (`dk`)
|
|
129
109
|
|
|
130
110
|
**Trigger:** Always shown within Parking section.
|
|
131
111
|
|
|
@@ -139,7 +119,7 @@ These follow the identical pattern to existing specialist issues (dry rot, asbes
|
|
|
139
119
|
|
|
140
120
|
---
|
|
141
121
|
|
|
142
|
-
|
|
122
|
+
### 5. Private Right of Way (`rw`)
|
|
143
123
|
|
|
144
124
|
**Trigger:** Always shown within Rights & Informal Arrangements, alongside the existing public right of way question.
|
|
145
125
|
|
|
@@ -154,26 +134,14 @@ These follow the identical pattern to existing specialist issues (dry rot, asbes
|
|
|
154
134
|
|
|
155
135
|
**Ref:** `R1.1` (yesNo: `R1.1.1`, details: `R1.1.2`)
|
|
156
136
|
|
|
157
|
-
### Data shape
|
|
158
|
-
|
|
159
|
-
```json
|
|
160
|
-
// When "No":
|
|
161
|
-
{ "yesNo": "No" }
|
|
162
|
-
|
|
163
|
-
// When "Yes":
|
|
164
|
-
{ "yesNo": "Yes", "details": "Description of private right of way..." }
|
|
165
|
-
```
|
|
166
|
-
|
|
167
137
|
---
|
|
168
138
|
|
|
169
|
-
|
|
139
|
+
### 6. Storm, Fire or Flood Damage (`sd`)
|
|
170
140
|
|
|
171
141
|
**Trigger:** Always shown within Environmental Issues section.
|
|
172
142
|
|
|
173
143
|
**Path:** `propertyPack.environmentalIssues.stormFireFloodDamage`
|
|
174
144
|
|
|
175
|
-
**UI:** Yes/No, if Yes show details. Render under "Environmental & Structural Information" or "Specialist Issues".
|
|
176
|
-
|
|
177
145
|
| Field | Path (relative) | Type | Validation | UI Element |
|
|
178
146
|
|-------|-----------------|------|------------|------------|
|
|
179
147
|
| Damage? | `stormFireFloodDamage.yesNo` | `string` | Required, enum | Yes/No radio |
|
|
@@ -181,23 +149,13 @@ These follow the identical pattern to existing specialist issues (dry rot, asbes
|
|
|
181
149
|
|
|
182
150
|
**Ref:** `E1.1` (yesNo: `E1.1.1`, details: `E1.1.2`)
|
|
183
151
|
|
|
184
|
-
### Data shape
|
|
185
|
-
|
|
186
|
-
```json
|
|
187
|
-
// When "No":
|
|
188
|
-
{ "yesNo": "No" }
|
|
189
|
-
|
|
190
|
-
// When "Yes":
|
|
191
|
-
{ "yesNo": "Yes", "details": "Details of storm/fire/flood damage..." }
|
|
192
|
-
```
|
|
193
|
-
|
|
194
152
|
---
|
|
195
153
|
|
|
196
|
-
|
|
154
|
+
### 7. Solar Panel Lease Costs (`lc`)
|
|
197
155
|
|
|
198
|
-
**Trigger:** Show when `propertyPack.
|
|
156
|
+
**Trigger:** Show when `propertyPack.electricity.solarPanels.panelsOwnedOutright.yesNo` = `"No"` (panels are leased).
|
|
199
157
|
|
|
200
|
-
**Path:** `propertyPack.
|
|
158
|
+
**Path:** `propertyPack.electricity.solarPanels.panelsOwnedOutright.associatedCost`
|
|
201
159
|
|
|
202
160
|
**UI:** Render alongside existing lease details. First ask if there are costs, then show amount and frequency if Yes.
|
|
203
161
|
|
|
@@ -211,19 +169,9 @@ These follow the identical pattern to existing specialist issues (dry rot, asbes
|
|
|
211
169
|
|
|
212
170
|
**Ref:** `S1.1` (hasCost: `S1.1.1`, amount: `S1.1.2`, frequency: `S1.1.3`)
|
|
213
171
|
|
|
214
|
-
### Data shape
|
|
215
|
-
|
|
216
|
-
```json
|
|
217
|
-
// When no costs:
|
|
218
|
-
{ "hasCost": "No" }
|
|
219
|
-
|
|
220
|
-
// When costs exist:
|
|
221
|
-
{ "hasCost": "Yes", "amount": 50, "frequency": "Per month" }
|
|
222
|
-
```
|
|
223
|
-
|
|
224
172
|
---
|
|
225
173
|
|
|
226
|
-
|
|
174
|
+
### 8. Warranties & Guarantees Upfront (`wg`)
|
|
227
175
|
|
|
228
176
|
**Trigger:** Always shown when overlay is loaded. Displayed upfront regardless of `hasValidGuaranteesOrWarranties` value.
|
|
229
177
|
|
|
@@ -231,8 +179,6 @@ These follow the identical pattern to existing specialist issues (dry rot, asbes
|
|
|
231
179
|
|
|
232
180
|
**UI:** For SEF25 upfront, show all 7 warranty categories as simple Yes/No questions. No details or "Years Remaining" needed at this stage — the law firm picks up details later.
|
|
233
181
|
|
|
234
|
-
### Fields (all Yes/No only)
|
|
235
|
-
|
|
236
182
|
| Property | Title | sef25Ref |
|
|
237
183
|
|----------|-------|----------|
|
|
238
184
|
| `newHomeWarranty` | New Home Warranty (NHBC or similar) | W1.1 |
|
|
@@ -247,47 +193,41 @@ These follow the identical pattern to existing specialist issues (dry rot, asbes
|
|
|
247
193
|
|
|
248
194
|
---
|
|
249
195
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
The following existing fields have extension overlays that add `sef25Ref` and `required` arrays, making them selectively available for SEF25 upfront forms.
|
|
253
|
-
|
|
254
|
-
### Disputes & Complaints (`dc`)
|
|
255
|
-
|
|
256
|
-
**Path:** `propertyPack.disputesAndComplaints.hasDisputesAndComplaints`
|
|
257
|
-
|
|
258
|
-
**Ref:** `D1.1` — "Have any disputes or complaints occurred, regarding this property, a property nearby, or their use?"
|
|
259
|
-
|
|
260
|
-
### Insurance Claims (`ic`)
|
|
196
|
+
### 9. Insurance Claims (`ic`)
|
|
261
197
|
|
|
262
198
|
**Path:** `propertyPack.insurance.insuranceClaims` (inside `isInsured = "Yes"` branch)
|
|
263
199
|
|
|
264
|
-
**Ref:** `I1.1` — "Have you made any buildings insurance claims?"
|
|
265
|
-
|
|
266
|
-
**Note:** The field is inside the `isInsured = "Yes"` oneOf branch. The overlay marks it required within that branch.
|
|
267
|
-
|
|
268
|
-
### Historical Flooding (`hf`)
|
|
200
|
+
**Ref:** `I1.1` (yesNo: `I1.1.1`) — "Have you made any buildings insurance claims?"
|
|
269
201
|
|
|
270
|
-
**
|
|
202
|
+
**Note:** The overlay marks insuranceClaims required within the `isInsured = "Yes"` oneOf branch.
|
|
271
203
|
|
|
272
|
-
|
|
204
|
+
---
|
|
273
205
|
|
|
274
|
-
### Neighbour Development (`nd`)
|
|
206
|
+
### 10. Neighbour Development (`nd`)
|
|
275
207
|
|
|
276
208
|
**Path:** `propertyPack.notices.neighbourDevelopment`
|
|
277
209
|
|
|
278
210
|
**Ref:** `N1.1` — "Is the seller aware of any proposals to develop property or land nearby?"
|
|
279
211
|
|
|
280
|
-
|
|
212
|
+
**Note:** `neighbourDevelopment` is already required via `ntsRequired` at the notices level. The `nd` overlay adds `sef25Ref` and `ntsRef` annotations so the field is identifiable as SEF25-relevant.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
### 11. Material Issue (`mi`)
|
|
281
217
|
|
|
282
218
|
**Path:** `propertyPack.additionalInformation.otherMaterialIssue`
|
|
283
219
|
|
|
284
|
-
**Ref:** `M1.1` — "Are you aware of any other material issue or information which may affect the average person's decision to proceed?"
|
|
220
|
+
**Ref:** `M1.1` (yesNo: `M1.1.1`) — "Are you aware of any other material issue or information which may affect the average person's decision to proceed?"
|
|
285
221
|
|
|
286
|
-
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### 12. Title Restrictions (`tr`)
|
|
287
225
|
|
|
288
226
|
**Path:** `propertyPack.ownership.ownershipsToBeTransferred[Freehold].titleRestrictions`
|
|
289
227
|
|
|
290
|
-
**Ref:** `T1.1` — "Are there any known restrictions on the title?"
|
|
228
|
+
**Ref:** `T1.1` (yesNo: `T1.1.1`, details: `T1.1.2`) — "Are there any known restrictions on the title?"
|
|
229
|
+
|
|
230
|
+
New field on the freehold ownership branch, modelled on `leaseRestrictions` for leasehold. Yes/No + details if Yes.
|
|
291
231
|
|
|
292
232
|
---
|
|
293
233
|
|
|
@@ -330,7 +270,7 @@ const validator = getValidator(schemaId, sef25Extensions);
|
|
|
330
270
|
| Insurance claims | `isInsured.yesNo` = `"Yes"` (via `ic` overlay) |
|
|
331
271
|
| Neighbour development | Always (via `nd` overlay) |
|
|
332
272
|
| Other material issue | Always (via `mi` overlay) |
|
|
333
|
-
| Title restrictions | Always (via `tr` overlay) |
|
|
273
|
+
| Title restrictions | Always (via `tr` overlay, freehold only) |
|
|
334
274
|
|
|
335
275
|
---
|
|
336
276
|
|
|
@@ -394,7 +334,7 @@ The flooding and planning tasks should be stepped up to their parent section lev
|
|
|
394
334
|
overlay: "ic",
|
|
395
335
|
},
|
|
396
336
|
{
|
|
397
|
-
name: "
|
|
337
|
+
name: "Additional material information",
|
|
398
338
|
checkName: "sef25-additionalInformation",
|
|
399
339
|
path: "/propertyPack/additionalInformation",
|
|
400
340
|
category: "listing",
|