@pdtf/schemas 3.6.0-9 → 3.6.0-dev.10

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.
Files changed (85) hide show
  1. package/README.md +57 -33
  2. package/docs/branch-release-workflow.md +138 -0
  3. package/docs/sef25-extensions-ui-spec.md +355 -0
  4. package/index.js +131 -75
  5. package/package.json +14 -2
  6. package/src/schemas/v3/combined.json +7952 -1721
  7. package/src/schemas/v3/compactSkeleton.txt +379 -5
  8. package/src/schemas/v3/overlays/baspi4.json +205 -93
  9. package/src/schemas/v3/overlays/baspi5.json +210 -95
  10. package/src/schemas/v3/overlays/extensions/ac.json +334 -0
  11. package/src/schemas/v3/overlays/extensions/as.json +4 -2
  12. package/src/schemas/v3/overlays/extensions/dk.json +33 -0
  13. package/src/schemas/v3/overlays/extensions/dr.json +9 -9
  14. package/src/schemas/v3/overlays/extensions/er.json +4 -2
  15. package/src/schemas/v3/overlays/extensions/fd.json +6 -3
  16. package/src/schemas/v3/overlays/extensions/hi.json +6 -3
  17. package/src/schemas/v3/overlays/extensions/hs.json +4 -2
  18. package/src/schemas/v3/overlays/extensions/ic.json +94 -0
  19. package/src/schemas/v3/overlays/extensions/jk.json +28 -8
  20. package/src/schemas/v3/overlays/extensions/la.json +4 -2
  21. package/src/schemas/v3/overlays/extensions/lc.json +76 -0
  22. package/src/schemas/v3/overlays/extensions/ma.json +6 -3
  23. package/src/schemas/v3/overlays/extensions/mc.json +4 -2
  24. package/src/schemas/v3/overlays/extensions/mi.json +70 -0
  25. package/src/schemas/v3/overlays/extensions/nd.json +44 -0
  26. package/src/schemas/v3/overlays/extensions/oa.json +4 -2
  27. package/src/schemas/v3/overlays/extensions/oc.json +4 -2
  28. package/src/schemas/v3/overlays/extensions/pc.json +38 -0
  29. package/src/schemas/v3/overlays/extensions/ph.json +195 -0
  30. package/src/schemas/v3/overlays/extensions/rw.json +69 -0
  31. package/src/schemas/v3/overlays/extensions/sb.json +4 -2
  32. package/src/schemas/v3/overlays/extensions/sc.json +133 -0
  33. package/src/schemas/v3/overlays/extensions/sd.json +64 -0
  34. package/src/schemas/v3/overlays/extensions/sf.json +4 -2
  35. package/src/schemas/v3/overlays/extensions/sl.json +4 -2
  36. package/src/schemas/v3/overlays/extensions/ta.json +204 -0
  37. package/src/schemas/v3/overlays/extensions/tf.json +6 -3
  38. package/src/schemas/v3/overlays/extensions/tr.json +74 -0
  39. package/src/schemas/v3/overlays/extensions/wg.json +351 -0
  40. package/src/schemas/v3/overlays/fme1.json +16 -14
  41. package/src/schemas/v3/overlays/llc1.json +1 -2
  42. package/src/schemas/v3/overlays/lpe1.json +61 -31
  43. package/src/schemas/v3/overlays/nts.json +71 -2
  44. package/src/schemas/v3/overlays/nts2.json +71 -5
  45. package/src/schemas/v3/overlays/ntsl.json +71 -2
  46. package/src/schemas/v3/overlays/ntsl2.json +71 -5
  47. package/src/schemas/v3/overlays/piq.json +60 -27
  48. package/src/schemas/v3/overlays/rds.json +139 -57
  49. package/src/schemas/v3/overlays/sef25.json +1653 -0
  50. package/src/schemas/v3/overlays/ta10.json +0 -9
  51. package/src/schemas/v3/overlays/ta6.json +83 -85
  52. package/src/schemas/v3/overlays/ta6ed6.json +6641 -0
  53. package/src/schemas/v3/overlays/ta7.json +70 -6
  54. package/src/schemas/v3/overlays/ta7ed5.json +1597 -0
  55. package/src/schemas/v3/pdtf-transaction.json +4525 -1013
  56. package/src/schemas/v3/skeleton.json +512 -40
  57. package/src/utils/extractExtensionOverlays.js +302 -31
  58. package/src/utils/extractOverlay.js +114 -27
  59. package/src/utils/pathSkeleton.js +1 -1
  60. package/.claude/settings.local.json +0 -42
  61. package/.github/workflows/pages.yml +0 -50
  62. package/CNAME +0 -1
  63. package/_config.yml +0 -1
  64. package/src/examples/v1/exampleAddParticipantVouch.json +0 -32
  65. package/src/examples/v1/exampleDocumentedVouch.json +0 -40
  66. package/src/examples/v1/exampleElectronicRecord.json +0 -30
  67. package/src/examples/v1/exampleTransaction.json +0 -878
  68. package/src/examples/v1/exampleVouch.json +0 -25
  69. package/src/examples/v2/exampleTransaction.json +0 -901
  70. package/src/examples/v3/exampleAddParticipantVouch.json +0 -38
  71. package/src/examples/v3/exampleCustomOverlay.json +0 -55
  72. package/src/examples/v3/exampleCustomOverlay2.json +0 -93
  73. package/src/examples/v3/exampleDocumentedVouch.json +0 -47
  74. package/src/examples/v3/exampleElectronicRecord.json +0 -36
  75. package/src/examples/v3/exampleTransaction.json +0 -1038
  76. package/src/examples/v3/exampleVouch.json +0 -32
  77. package/src/mappings/SendPropertyDetailsRequestSchema.json +0 -1588
  78. package/src/mappings/adf.js +0 -198
  79. package/src/tests/v3/caching.test.js +0 -591
  80. package/src/tests/v3/enquiries.test.js +0 -1096
  81. package/src/tests/v3/extensionOverlays.test.js +0 -525
  82. package/src/tests/v3/offers.test.js +0 -823
  83. package/src/tests/v3/patternProperties.test.js +0 -688
  84. package/src/tests/v3/transactionSchema.test.js +0 -615
  85. package/src/tests/v3/verifiedClaimsValidator.test.js +0 -195
@@ -2,9 +2,24 @@ const { dereference } = require("@jdw/jst");
2
2
  const traverse = require("traverse");
3
3
  const jp = require("jsonpointer");
4
4
  const fs = require("fs");
5
+ const path = require("path");
5
6
  const merge = require("deepmerge");
6
7
 
7
- const combinedSchema = require("../schemas/v3/combined.json");
8
+ const combinedPath =
9
+ process.env.COMBINED_PATH ||
10
+ path.resolve(__dirname, "../schemas/v3/combined.json");
11
+ const outputDir =
12
+ process.env.OUTPUT_DIR ||
13
+ path.resolve(__dirname, "../schemas/v3");
14
+
15
+ if (!fs.existsSync(combinedPath)) {
16
+ throw new Error(`Combined schema not found: ${combinedPath}`);
17
+ }
18
+ if (!fs.existsSync(outputDir)) {
19
+ fs.mkdirSync(outputDir, { recursive: true });
20
+ }
21
+
22
+ const combinedSchema = JSON.parse(fs.readFileSync(combinedPath, "utf8"));
8
23
 
9
24
  const extractFields = [
10
25
  "baspi4",
@@ -14,7 +29,9 @@ const extractFields = [
14
29
  "ntsl",
15
30
  "ntsl2",
16
31
  "ta6",
32
+ "ta6ed6",
17
33
  "ta7",
34
+ "ta7ed5",
18
35
  "ta10",
19
36
  "lpe1",
20
37
  "fme1",
@@ -25,8 +42,11 @@ const extractFields = [
25
42
  "rds",
26
43
  "oc1",
27
44
  "sr24",
45
+ "sef25",
28
46
  ];
29
47
 
48
+ const metadataFields = [...extractFields, "ta6ed6Compat"];
49
+
30
50
  const flattenSkeleton = (schema) => {
31
51
  if (!schema) return undefined;
32
52
 
@@ -68,23 +88,21 @@ const flattenSkeleton = (schema) => {
68
88
  });
69
89
  }
70
90
 
71
- // Handle oneOf - merge all possible properties
91
+ // Handle oneOf - merge all possible properties (recursively handles nested oneOf)
72
92
  if (schema.oneOf) {
73
93
  schema.oneOf.forEach((aOneOf) => {
74
- if (aOneOf.properties) {
75
- Object.entries(aOneOf.properties).forEach(([key, value]) => {
76
- // If property already exists and differs, mark as variant
77
- const newValue = flattenSkeleton(value);
78
- if (returnStructure[key] && JSON.stringify(returnStructure[key]) !== JSON.stringify(newValue)) {
79
- // For primitive types, just mark as variant type
80
- if (typeof returnStructure[key] === "string" || typeof newValue === "string") {
94
+ const variantResult = flattenSkeleton(aOneOf);
95
+ if (variantResult && typeof variantResult === "object" && !Array.isArray(variantResult)) {
96
+ Object.entries(variantResult).forEach(([key, value]) => {
97
+ if (key === "_variants") return;
98
+ if (returnStructure[key] && JSON.stringify(returnStructure[key]) !== JSON.stringify(value)) {
99
+ if (typeof returnStructure[key] === "string" || typeof value === "string") {
81
100
  returnStructure[key] = "variant";
82
101
  } else {
83
- // For complex types, merge properties
84
- returnStructure[key] = { ...returnStructure[key], ...newValue, _variants: true };
102
+ returnStructure[key] = { ...returnStructure[key], ...value, _variants: true };
85
103
  }
86
104
  } else {
87
- returnStructure[key] = newValue;
105
+ returnStructure[key] = value;
88
106
  }
89
107
  });
90
108
  }
@@ -97,6 +115,23 @@ const flattenSkeleton = (schema) => {
97
115
 
98
116
  const extractOverlay = (sourceSchema, ref) => {
99
117
  const refName = `${ref}Ref`;
118
+ const extendedTagMap = {
119
+ Type: "type",
120
+ MinLength: "minLength",
121
+ MaxLength: "maxLength",
122
+ Pattern: "pattern",
123
+ Minimum: "minimum",
124
+ Maximum: "maximum",
125
+ MinItems: "minItems",
126
+ MaxItems: "maxItems",
127
+ UniqueItems: "uniqueItems",
128
+ AdditionalProperties: "additionalProperties",
129
+ Format: "format",
130
+ MinProperties: "minProperties",
131
+ MaxProperties: "maxProperties",
132
+ MultipleOf: "multipleOf",
133
+ Const: "const",
134
+ };
100
135
  const returnSchema = {
101
136
  $schema: "http://json-schema.org/draft-07/schema#",
102
137
  $id: `https://trust.propdata.org.uk/schemas/v3/overlays/${ref}.json`,
@@ -107,7 +142,7 @@ const extractOverlay = (sourceSchema, ref) => {
107
142
  if (element[refName]) {
108
143
  jp.set(returnSchema, `${path}/${refName}`, element[refName]);
109
144
 
110
- if (element.discriminator) {
145
+ if (element.discriminator && Array.isArray(element.oneOf)) {
111
146
  jp.set(returnSchema, `${path}/discriminator`, element.discriminator);
112
147
  const { propertyName } = element.discriminator;
113
148
  element.oneOf.forEach((oneOf, index) => {
@@ -134,7 +169,7 @@ const extractOverlay = (sourceSchema, ref) => {
134
169
  }
135
170
 
136
171
  // also handle discriminator properties nested in items
137
- if (element.items?.discriminator) {
172
+ if (element.items?.discriminator && Array.isArray(element.items.oneOf)) {
138
173
  jp.set(
139
174
  returnSchema,
140
175
  `${path}/items/discriminator`,
@@ -184,6 +219,37 @@ const extractOverlay = (sourceSchema, ref) => {
184
219
  if (element[refEnum]) {
185
220
  jp.set(returnSchema, `${path}/enum`, element[refEnum]);
186
221
  }
222
+
223
+ // Per-overlay display labels for enum values. The underlying enum (the
224
+ // stored value) is left untouched — we only emit positional `enumNames`
225
+ // aligned to the effective enum, so a form-facing overlay can present the
226
+ // form's own wording (e.g. "Ground"/"Surface water") while the data keeps
227
+ // its canonical value. Invisible to the core/base schema (stripped below).
228
+ const refEnumNames = `${ref}EnumNames`;
229
+ if (element[refEnumNames]) {
230
+ const labelMap = element[refEnumNames];
231
+ const effectiveEnum = element[refEnum] || element.enum;
232
+ if (Array.isArray(effectiveEnum)) {
233
+ const enumNames = effectiveEnum.map((value) =>
234
+ Object.prototype.hasOwnProperty.call(labelMap, value)
235
+ ? labelMap[value]
236
+ : value
237
+ );
238
+ jp.set(returnSchema, `${path}/enumNames`, enumNames);
239
+ }
240
+ }
241
+
242
+ const refConst = `${ref}Const`;
243
+ if (Object.prototype.hasOwnProperty.call(element, refConst)) {
244
+ jp.set(returnSchema, `${path}/const`, element[refConst]);
245
+ }
246
+
247
+ Object.entries(extendedTagMap).forEach(([suffix, schemaKey]) => {
248
+ const tagKey = `${ref}${suffix}`;
249
+ if (Object.prototype.hasOwnProperty.call(element, tagKey)) {
250
+ jp.set(returnSchema, `${path}/${schemaKey}`, element[tagKey]);
251
+ }
252
+ });
187
253
  });
188
254
  return returnSchema;
189
255
  };
@@ -198,28 +264,49 @@ const deleteProperties = (sourceSchema, propertyNames) => {
198
264
  };
199
265
 
200
266
  const overlays = {};
267
+ const overlaysDir = path.join(outputDir, "overlays");
268
+ if (!fs.existsSync(overlaysDir)) {
269
+ fs.mkdirSync(overlaysDir, { recursive: true });
270
+ }
201
271
 
202
272
  extractFields.forEach((key) => {
203
273
  let overlay = extractOverlay(combinedSchema, key);
204
274
  overlays[key] = overlay;
205
- const fileName = `../schemas/v3/overlays/${key}.json`;
275
+ const fileName = path.join(overlaysDir, `${key}.json`);
206
276
  fs.writeFileSync(fileName, JSON.stringify(overlay, null, 2));
207
277
  console.log(`Overlay ${key} written to ${fileName}`);
208
278
  });
209
279
 
210
280
  const coreSchema = deleteProperties(combinedSchema, [
211
281
  "discriminator",
212
- ...extractFields.map((item) => `${item}Ref`),
213
- ...extractFields.map((item) => `${item}Required`),
214
- ...extractFields.map((item) => `${item}Title`),
215
- ...extractFields.map((item) => `${item}Enum`),
282
+ ...metadataFields.map((item) => `${item}Ref`),
283
+ ...metadataFields.map((item) => `${item}Required`),
284
+ ...metadataFields.map((item) => `${item}Title`),
285
+ ...metadataFields.map((item) => `${item}Description`),
286
+ ...metadataFields.map((item) => `${item}Enum`),
287
+ ...metadataFields.map((item) => `${item}EnumNames`),
288
+ ...metadataFields.map((item) => `${item}Type`),
289
+ ...metadataFields.map((item) => `${item}MinLength`),
290
+ ...metadataFields.map((item) => `${item}MaxLength`),
291
+ ...metadataFields.map((item) => `${item}Pattern`),
292
+ ...metadataFields.map((item) => `${item}Minimum`),
293
+ ...metadataFields.map((item) => `${item}Maximum`),
294
+ ...metadataFields.map((item) => `${item}MinItems`),
295
+ ...metadataFields.map((item) => `${item}MaxItems`),
296
+ ...metadataFields.map((item) => `${item}UniqueItems`),
297
+ ...metadataFields.map((item) => `${item}AdditionalProperties`),
298
+ ...metadataFields.map((item) => `${item}Format`),
299
+ ...metadataFields.map((item) => `${item}MinProperties`),
300
+ ...metadataFields.map((item) => `${item}MaxProperties`),
301
+ ...metadataFields.map((item) => `${item}MultipleOf`),
302
+ ...metadataFields.map((item) => `${item}Const`),
216
303
  ]);
217
304
 
218
305
  fs.writeFileSync(
219
- "../schemas/v3/pdtf-transaction.json",
306
+ path.join(outputDir, "pdtf-transaction.json"),
220
307
  JSON.stringify(coreSchema, null, 2)
221
308
  );
222
- console.log("Core schema written to ../schemas/v3/pdtf-transaction.json");
309
+ console.log(`Core schema written to ${path.join(outputDir, "pdtf-transaction.json")}`);
223
310
 
224
311
  const skeletonSchema = deleteProperties(coreSchema, [
225
312
  "$schema",
@@ -238,10 +325,10 @@ const skeletonSchema = deleteProperties(coreSchema, [
238
325
  const skeletonSchemaFlattened = flattenSkeleton(skeletonSchema);
239
326
 
240
327
  fs.writeFileSync(
241
- "../schemas/v3/skeleton.json",
328
+ path.join(outputDir, "skeleton.json"),
242
329
  JSON.stringify(skeletonSchemaFlattened, null, 2)
243
330
  );
244
- console.log("Flat Skeleton schema written to ../schemas/v3/skeleton.json");
331
+ console.log(`Flat Skeleton schema written to ${path.join(outputDir, "skeleton.json")}`);
245
332
 
246
333
  // Generate compact skeleton format for better token efficiency
247
334
  const toCompact = (obj, indent = "") => {
@@ -267,8 +354,8 @@ const toCompact = (obj, indent = "") => {
267
354
  // Check if this is a keyed object (has "*" key)
268
355
  if (keys.length === 1 && keys[0] === "*") {
269
356
  const inner = toCompact(obj["*"], indent);
270
- if (inner === "") {
271
- return "{*}"; // Keyed object of primitives
357
+ if (inner === "" || inner === "{*}") {
358
+ return "{*}"; // Keyed object of primitives (or nested keyed objects with no structure)
272
359
  }
273
360
  return `{*}\n${inner}`;
274
361
  }
@@ -308,7 +395,7 @@ const innerContent = toCompact(skeletonSchemaFlattened, "");
308
395
  const compactSkeleton = innerContent ? innerContent : "";
309
396
 
310
397
  fs.writeFileSync(
311
- "../schemas/v3/compactSkeleton.txt",
398
+ path.join(outputDir, "compactSkeleton.txt"),
312
399
  compactSkeleton
313
400
  );
314
- console.log("Compact Skeleton written to ../schemas/v3/compactSkeleton.txt");
401
+ console.log(`Compact Skeleton written to ${path.join(outputDir, "compactSkeleton.txt")}`);
@@ -6,7 +6,7 @@ const combinedSchema = require("../schemas/v3/combined.json");
6
6
  // Extract fields that have overlay-specific properties
7
7
  const extractFields = [
8
8
  "baspi4", "baspi5", "nts", "nts2", "ntsl", "ntsl2",
9
- "ta6", "ta7", "ta10", "lpe1", "fme1", "piq",
9
+ "ta6", "ta7", "ta7ed5", "ta10", "lpe1", "fme1", "piq",
10
10
  "con29R", "con29DW", "llc1", "rds", "oc1", "sr24",
11
11
  ];
12
12
 
@@ -1,42 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(rg:*)",
5
- "Bash(mkdir:*)",
6
- "Bash(node:*)",
7
- "Bash(ls:*)",
8
- "Bash(jq:*)",
9
- "Bash(grep:*)",
10
- "Bash(rm:*)",
11
- "Bash(npm test:*)",
12
- "Bash(npm install:*)",
13
- "Bash(git merge:*)",
14
- "Bash(git add:*)",
15
- "Bash(git commit:*)",
16
- "Bash(git push:*)",
17
- "Bash(git fetch:*)",
18
- "Bash(git checkout:*)",
19
- "Bash(gh pr view:*)",
20
- "WebFetch(domain:github.com)",
21
- "Bash(tree:*)",
22
- "Bash(sed:*)",
23
- "Bash(find:*)",
24
- "Bash(chmod:*)",
25
- "Bash(git rev-parse:*)",
26
- "Bash(/dev/null)",
27
- "Bash(git log:*)",
28
- "Bash(for file in src/schemas/v2/overlays/*.json)",
29
- "Bash(done)",
30
- "Bash(while read file)",
31
- "Bash(for:*)",
32
- "Bash(do echo \"=== $file ===\")",
33
- "Bash(do echo \"$file:\")",
34
- "Bash(npm run proposal:pdf:*)",
35
- "Bash(base64:*)",
36
- "Bash(gh issue view:*)",
37
- "Read(//Users/ed/.claude/**)",
38
- "Bash(npm init:*)"
39
- ],
40
- "deny": []
41
- }
42
- }
@@ -1,50 +0,0 @@
1
- # Sample workflow for building and deploying a Jekyll site to GitHub Pages
2
- name: Deploy Jekyll with GitHub Pages dependencies preinstalled
3
-
4
- on:
5
- # Runs on pushes targeting the default branch
6
- push:
7
- branches: ["master"]
8
-
9
- # Allows you to run this workflow manually from the Actions tab
10
- workflow_dispatch:
11
-
12
- # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
13
- permissions:
14
- contents: read
15
- pages: write
16
- id-token: write
17
-
18
- # Allow one concurrent deployment
19
- concurrency:
20
- group: "pages"
21
- cancel-in-progress: true
22
-
23
- jobs:
24
- # Build job
25
- build:
26
- runs-on: ubuntu-latest
27
- steps:
28
- - name: Checkout
29
- uses: actions/checkout@v3
30
- - name: Setup Pages
31
- uses: actions/configure-pages@v2
32
- - name: Build with Jekyll
33
- uses: actions/jekyll-build-pages@v1
34
- with:
35
- source: src
36
- destination: ./_site
37
- - name: Upload artifact
38
- uses: actions/upload-pages-artifact@v1
39
-
40
- # Deployment job
41
- deploy:
42
- environment:
43
- name: github-pages
44
- url: ${{ steps.deployment.outputs.page_url }}
45
- runs-on: ubuntu-latest
46
- needs: build
47
- steps:
48
- - name: Deploy to GitHub Pages
49
- id: deployment
50
- uses: actions/deploy-pages@v1
package/CNAME DELETED
@@ -1 +0,0 @@
1
- trust.propdata.org.uk
package/_config.yml DELETED
@@ -1 +0,0 @@
1
- theme: jekyll-theme-minimal
@@ -1,32 +0,0 @@
1
- {
2
- "verification": {
3
- "trust_framework": "uk_pdtf",
4
- "time": "2022-01-25T13:05:03.108Z",
5
- "evidence": [
6
- {
7
- "type": "vouch",
8
- "attestation": {
9
- "type": "digital_attestation",
10
- "voucher": {
11
- "name": "Martin Abode"
12
- }
13
- },
14
- "verification_method": {
15
- "type": "auth"
16
- }
17
- }
18
- ]
19
- },
20
- "claims": {
21
- "/participants/-": {
22
- "name": {
23
- "firstName": "Martin",
24
- "lastName": "Abode"
25
- },
26
- "email": "martin@abode.co.uk",
27
- "organisation": "Abode and Floggit Estate Agents",
28
- "organisationReference": "MAR/12243/22",
29
- "role": "Estate Agent"
30
- }
31
- }
32
- }
@@ -1,40 +0,0 @@
1
- {
2
- "verification": {
3
- "trust_framework": "uk_pdtf",
4
- "time": "2022-01-25T13:16:44.527Z",
5
- "evidence": [
6
- {
7
- "type": "vouch",
8
- "attachments": [
9
- {
10
- "digest": {
11
- "alg": "md5",
12
- "value": "randomHashValue"
13
- },
14
- "url": "https://fakeFileStore.com/some/kind/of/file",
15
- "desc": "proofOfAddress.pdf",
16
- "pdtfSchemaPath": "/propertyPack/materialFacts/councilTax/councilTaxAffectingAlterations/details"
17
- }
18
- ],
19
- "verification_method": {
20
- "type": "auth"
21
- },
22
- "attestation": {
23
- "voucher": {
24
- "name": "Maria Harris"
25
- },
26
- "type": "digital_attestation"
27
- }
28
- }
29
- ]
30
- },
31
- "claims": {
32
- "/propertyPack/materialFacts/councilTax": {
33
- "councilTaxBand": "D",
34
- "councilTaxAffectingAlterations": {
35
- "yesNo": "Yes",
36
- "details": "Extension added in 2005 to add bedroom with ensuite shower room. Certificate of Compliance issued 17th Feb 2006 and council tax updated"
37
- }
38
- }
39
- }
40
- }
@@ -1,30 +0,0 @@
1
- {
2
- "verification": {
3
- "time": "2022-01-25T07:52:14.318Z",
4
- "trust_framework": "uk_pdtf",
5
- "evidence": [
6
- {
7
- "type": "electronic_record",
8
- "verifier": {
9
- "organization": "Property Pack Assembly Software Ltd"
10
- },
11
- "record": {
12
- "source": {
13
- "name": "Royal Mail Postcode Address File",
14
- "rights": "(c) Royal Mail"
15
- },
16
- "type": "postcode_address_file"
17
- }
18
- }
19
- ]
20
- },
21
- "claims": {
22
- "/propertyPack/materialFacts/address": {
23
- "line1": "3 The Hollys",
24
- "line2": "Birtley",
25
- "town": "CHESTER LE STREET",
26
- "county": "County Durham",
27
- "postcode": "DH3 1QN"
28
- }
29
- }
30
- }