@planning-inspectorate/data-model 1.20.0 → 1.21.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.
Files changed (29) hide show
  1. package/docs/README.md +7 -1
  2. package/docs/pins-inspector-defs-specialism.md +80 -0
  3. package/docs/pins-inspector-defs.md +3 -0
  4. package/docs/pins-inspector.md +311 -3
  5. package/package.json +1 -1
  6. package/pins_data_model/models/model_appeal_document.py +1 -1
  7. package/pins_data_model/models/model_appeal_event.py +1 -1
  8. package/pins_data_model/models/model_appeal_event_estimate.py +1 -1
  9. package/pins_data_model/models/model_appeal_has.py +1 -1
  10. package/pins_data_model/models/model_appeal_representation.py +1 -1
  11. package/pins_data_model/models/model_appeal_s78.py +1 -1
  12. package/pins_data_model/models/model_dart_response.py +1 -1
  13. package/pins_data_model/models/model_entraid.py +1 -1
  14. package/pins_data_model/models/model_folder.py +1 -1
  15. package/pins_data_model/models/model_gettimesheets_response.py +1 -1
  16. package/pins_data_model/models/model_listed_building.py +1 -1
  17. package/pins_data_model/models/model_listed_buildings.py +1 -1
  18. package/pins_data_model/models/model_nsip_document.py +1 -1
  19. package/pins_data_model/models/model_nsip_exam_timetable.py +1 -1
  20. package/pins_data_model/models/model_nsip_project.py +1 -1
  21. package/pins_data_model/models/model_nsip_project_update.py +1 -1
  22. package/pins_data_model/models/model_nsip_representation.py +1 -1
  23. package/pins_data_model/models/model_nsip_subscription.py +1 -1
  24. package/pins_data_model/models/model_pins_inspector.py +75 -6
  25. package/pins_data_model/models/model_pins_lpa.py +1 -1
  26. package/pins_data_model/models/model_s51_advice.py +1 -1
  27. package/pins_data_model/models/model_service_user.py +1 -1
  28. package/schemas/pins-inspector.schema.json +108 -3
  29. package/src/schemas.d.ts +63 -3
package/docs/README.md CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  * [NSIP Project Update](./nsip-project-update.md "NSIP Project Update (formerly known as Banners)") – `nsip-project-update.schema.json`
36
36
 
37
- * [PINS Inspector](./pins-inspector.md "Inspector attributes as per Horizon") – `pins-inspector.schema.json`
37
+ * [PINS Inspector](./pins-inspector.md "Inspector Details originating from Horizon, SAP HR and Entra") – `pins-inspector.schema.json`
38
38
 
39
39
  * [PINS LPA](./pins-lpa.md "Local Planning Authority (LPA) attributes as per Horizon") – `pins-lpa.schema.json`
40
40
 
@@ -64,6 +64,10 @@
64
64
 
65
65
  * [Untitled object in NSIP Project](./nsip-project-defs-invoice.md "An invoice related to the project") – `nsip-project.schema.json#/$defs/invoice`
66
66
 
67
+ * [Untitled object in PINS Inspector](./pins-inspector-properties-address.md) – `pins-inspector.schema.json#/properties/address`
68
+
69
+ * [Untitled object in PINS Inspector](./pins-inspector-defs-specialism.md) – `pins-inspector.schema.json#/$defs/specialism`
70
+
67
71
  ### Arrays
68
72
 
69
73
  * [Untitled array in Appeal Representation](./appeal-representation-properties-documentids.md "An array of documentIds") – `appeal-representation.schema.json#/properties/documentIds`
@@ -96,6 +100,8 @@
96
100
 
97
101
  * [Untitled array in NSIP Project](./nsip-project-properties-invoices.md "Collection of invoices associated with this project") – `nsip-project.schema.json#/properties/invoices`
98
102
 
103
+ * [Untitled array in PINS Inspector](./pins-inspector-properties-specialisms.md) – `pins-inspector.schema.json#/properties/specialisms`
104
+
99
105
  * [Untitled array in Representation](./nsip-representation-properties-attachmentids.md) – `nsip-representation.schema.json#/properties/attachmentIds`
100
106
 
101
107
  * [Untitled array in S51 Advice](./s51-advice-properties-attachmentids.md) – `s51-advice.schema.json#/properties/attachmentIds`
@@ -0,0 +1,80 @@
1
+ ## specialism Type
2
+
3
+ `object` ([Details](pins-inspector-defs-specialism.md))
4
+
5
+ # specialism Properties
6
+
7
+ | Property | Type | Required | Nullable | Defined by |
8
+ | :-------------------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- |
9
+ | [name](#name) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-defs-specialism-properties-name.md "pins-inspector.schema.json#/$defs/specialism/properties/name") |
10
+ | [proficiency](#proficiency) | `string` | Required | can be null | [PINS Inspector](pins-inspector-defs-specialism-properties-proficiency.md "pins-inspector.schema.json#/$defs/specialism/properties/proficiency") |
11
+ | [validFrom](#validfrom) | `string` | Required | can be null | [PINS Inspector](pins-inspector-defs-specialism-properties-validfrom.md "pins-inspector.schema.json#/$defs/specialism/properties/validFrom") |
12
+ | Additional Properties | Any | Optional | can be null | |
13
+
14
+ ## name
15
+
16
+ Working above band is stored as a specialism
17
+
18
+ `name`
19
+
20
+ * is required
21
+
22
+ * Type: `string`
23
+
24
+ * cannot be null
25
+
26
+ * defined in: [PINS Inspector](pins-inspector-defs-specialism-properties-name.md "pins-inspector.schema.json#/$defs/specialism/properties/name")
27
+
28
+ ### name Type
29
+
30
+ `string`
31
+
32
+ ## proficiency
33
+
34
+ trained or in-training
35
+
36
+ `proficiency`
37
+
38
+ * is required
39
+
40
+ * Type: `string`
41
+
42
+ * can be null
43
+
44
+ * defined in: [PINS Inspector](pins-inspector-defs-specialism-properties-proficiency.md "pins-inspector.schema.json#/$defs/specialism/properties/proficiency")
45
+
46
+ ### proficiency Type
47
+
48
+ `string`
49
+
50
+ ## validFrom
51
+
52
+ Date training started or date training was completed.
53
+
54
+ `validFrom`
55
+
56
+ * is required
57
+
58
+ * Type: `string`
59
+
60
+ * can be null
61
+
62
+ * defined in: [PINS Inspector](pins-inspector-defs-specialism-properties-validfrom.md "pins-inspector.schema.json#/$defs/specialism/properties/validFrom")
63
+
64
+ ### validFrom Type
65
+
66
+ `string`
67
+
68
+ ### validFrom Constraints
69
+
70
+ **date time**: the string must be a date time string, according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339 "check the specification")
71
+
72
+ ### validFrom Examples
73
+
74
+ ```json
75
+ "2023-07-27T20:30:00.000Z"
76
+ ```
77
+
78
+ ## Additional Properties
79
+
80
+ Additional properties are allowed and do not have to follow a specific schema
@@ -0,0 +1,3 @@
1
+ ## $defs Type
2
+
3
+ unknown
@@ -6,7 +6,9 @@
6
6
 
7
7
  | Property | Type | Required | Nullable | Defined by |
8
8
  | :------------------------------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------ |
9
- | [horizonId](#horizonid) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-horizonid.md "pins-inspector.schema.json#/properties/horizonId") |
9
+ | [entraId](#entraid) | `string` | Required | can be null | [PINS Inspector](pins-inspector-properties-entraid.md "pins-inspector.schema.json#/properties/entraId") |
10
+ | [sapId](#sapid) | `string` | Required | can be null | [PINS Inspector](pins-inspector-properties-sapid.md "pins-inspector.schema.json#/properties/sapId") |
11
+ | [horizonId](#horizonid) | `string` | Optional | cannot be null | [PINS Inspector](pins-inspector-properties-horizonid.md "pins-inspector.schema.json#/properties/horizonId") |
10
12
  | [firstName](#firstname) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-firstname.md "pins-inspector.schema.json#/properties/firstName") |
11
13
  | [lastName](#lastname) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-lastname.md "pins-inspector.schema.json#/properties/lastName") |
12
14
  | [postName](#postname) | `string` | Optional | can be null | [PINS Inspector](pins-inspector-properties-postname.md "pins-inspector.schema.json#/properties/postName") |
@@ -15,15 +17,60 @@
15
17
  | [salutation](#salutation) | `string` | Optional | can be null | [PINS Inspector](pins-inspector-properties-salutation.md "pins-inspector.schema.json#/properties/salutation") |
16
18
  | [qualifications](#qualifications) | `string` | Optional | can be null | [PINS Inspector](pins-inspector-properties-qualifications.md "pins-inspector.schema.json#/properties/qualifications") |
17
19
  | [email](#email) | `string` | Required | can be null | [PINS Inspector](pins-inspector-properties-email.md "pins-inspector.schema.json#/properties/email") |
20
+ | [grade](#grade) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-grade.md "pins-inspector.schema.json#/properties/grade") |
21
+ | [fte](#fte) | `number` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-fte.md "pins-inspector.schema.json#/properties/fte") |
22
+ | [unit](#unit) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-unit.md "pins-inspector.schema.json#/properties/unit") |
23
+ | [service](#service) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-service.md "pins-inspector.schema.json#/properties/service") |
24
+ | [group](#group) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-group.md "pins-inspector.schema.json#/properties/group") |
25
+ | [inspectorManager](#inspectormanager) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-inspectormanager.md "pins-inspector.schema.json#/properties/inspectorManager") |
26
+ | [validFrom](#validfrom) | `string` | Optional | can be null | [PINS Inspector](pins-inspector-properties-validfrom.md "pins-inspector.schema.json#/properties/validFrom") |
27
+ | [address](#address) | `object` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-address.md "pins-inspector.schema.json#/properties/address") |
28
+ | [specialisms](#specialisms) | `array` | Required | cannot be null | [PINS Inspector](pins-inspector-properties-specialisms.md "pins-inspector.schema.json#/properties/specialisms") |
18
29
  | Additional Properties | Any | Optional | can be null | |
19
30
 
31
+ ## entraId
32
+
33
+ EntraID of the Inspector if available in ODW.
34
+
35
+ `entraId`
36
+
37
+ * is required
38
+
39
+ * Type: `string`
40
+
41
+ * can be null
42
+
43
+ * defined in: [PINS Inspector](pins-inspector-properties-entraid.md "pins-inspector.schema.json#/properties/entraId")
44
+
45
+ ### entraId Type
46
+
47
+ `string`
48
+
49
+ ## sapId
50
+
51
+ SAPID of the Inspector if available in ODW.
52
+
53
+ `sapId`
54
+
55
+ * is required
56
+
57
+ * Type: `string`
58
+
59
+ * can be null
60
+
61
+ * defined in: [PINS Inspector](pins-inspector-properties-sapid.md "pins-inspector.schema.json#/properties/sapId")
62
+
63
+ ### sapId Type
64
+
65
+ `string`
66
+
20
67
  ## horizonId
21
68
 
22
69
  The PINS-generated unique horizon ID
23
70
 
24
71
  `horizonId`
25
72
 
26
- * is required
73
+ * is optional
27
74
 
28
75
  * Type: `string`
29
76
 
@@ -163,7 +210,7 @@ The qualifications of the inspector
163
210
 
164
211
  ## email
165
212
 
166
- The email address of the inspector
213
+ PINS Email address for the Inspector
167
214
 
168
215
  `email`
169
216
 
@@ -179,6 +226,267 @@ The email address of the inspector
179
226
 
180
227
  `string`
181
228
 
229
+ ### email Constraints
230
+
231
+ **email**: the string must be an email address, according to [RFC 5322, section 3.4.1](https://tools.ietf.org/html/rfc5322 "check the specification")
232
+
233
+ ## grade
234
+
235
+ Grades as a coded value e.g. B1, B2, B3, FTC-B1, FTC-B2, FTC-B3, PL
236
+
237
+ `grade`
238
+
239
+ * is required
240
+
241
+ * Type: `string`
242
+
243
+ * cannot be null
244
+
245
+ * defined in: [PINS Inspector](pins-inspector-properties-grade.md "pins-inspector.schema.json#/properties/grade")
246
+
247
+ ### grade Type
248
+
249
+ `string`
250
+
251
+ ## fte
252
+
253
+ FTE Decimal value e.g. 1, 0.5 etc
254
+
255
+ `fte`
256
+
257
+ * is required
258
+
259
+ * Type: `number`
260
+
261
+ * cannot be null
262
+
263
+ * defined in: [PINS Inspector](pins-inspector-properties-fte.md "pins-inspector.schema.json#/properties/fte")
264
+
265
+ ### fte Type
266
+
267
+ `number`
268
+
269
+ ## unit
270
+
271
+ The personnel area of the Inspector
272
+
273
+ `unit`
274
+
275
+ * is required
276
+
277
+ * Type: `string`
278
+
279
+ * cannot be null
280
+
281
+ * defined in: [PINS Inspector](pins-inspector-properties-unit.md "pins-inspector.schema.json#/properties/unit")
282
+
283
+ ### unit Type
284
+
285
+ `string`
286
+
287
+ ## service
288
+
289
+ The personnel sub area of the Inspector
290
+
291
+ `service`
292
+
293
+ * is required
294
+
295
+ * Type: `string`
296
+
297
+ * cannot be null
298
+
299
+ * defined in: [PINS Inspector](pins-inspector-properties-service.md "pins-inspector.schema.json#/properties/service")
300
+
301
+ ### service Type
302
+
303
+ `string`
304
+
305
+ ## group
306
+
307
+ Group of the Inspector
308
+
309
+ `group`
310
+
311
+ * is required
312
+
313
+ * Type: `string`
314
+
315
+ * cannot be null
316
+
317
+ * defined in: [PINS Inspector](pins-inspector-properties-group.md "pins-inspector.schema.json#/properties/group")
318
+
319
+ ### group Type
320
+
321
+ `string`
322
+
323
+ ## inspectorManager
324
+
325
+ Name of the Inspector's manager.
326
+
327
+ `inspectorManager`
328
+
329
+ * is required
330
+
331
+ * Type: `string`
332
+
333
+ * cannot be null
334
+
335
+ * defined in: [PINS Inspector](pins-inspector-properties-inspectormanager.md "pins-inspector.schema.json#/properties/inspectorManager")
336
+
337
+ ### inspectorManager Type
338
+
339
+ `string`
340
+
341
+ ## validFrom
342
+
343
+ Date the Inspector record was first recorded.
344
+
345
+ `validFrom`
346
+
347
+ * is optional
348
+
349
+ * Type: `string`
350
+
351
+ * can be null
352
+
353
+ * defined in: [PINS Inspector](pins-inspector-properties-validfrom.md "pins-inspector.schema.json#/properties/validFrom")
354
+
355
+ ### validFrom Type
356
+
357
+ `string`
358
+
359
+ ### validFrom Constraints
360
+
361
+ **date time**: the string must be a date time string, according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339 "check the specification")
362
+
363
+ ### validFrom Examples
364
+
365
+ ```json
366
+ "2023-07-27T20:30:00.000Z"
367
+ ```
368
+
369
+ ## address
370
+
371
+
372
+
373
+ `address`
374
+
375
+ * is required
376
+
377
+ * Type: `object` ([Details](pins-inspector-properties-address.md))
378
+
379
+ * cannot be null
380
+
381
+ * defined in: [PINS Inspector](pins-inspector-properties-address.md "pins-inspector.schema.json#/properties/address")
382
+
383
+ ### address Type
384
+
385
+ `object` ([Details](pins-inspector-properties-address.md))
386
+
387
+ ## specialisms
388
+
389
+
390
+
391
+ `specialisms`
392
+
393
+ * is required
394
+
395
+ * Type: `object[]` ([Details](pins-inspector-defs-specialism.md))
396
+
397
+ * cannot be null
398
+
399
+ * defined in: [PINS Inspector](pins-inspector-properties-specialisms.md "pins-inspector.schema.json#/properties/specialisms")
400
+
401
+ ### specialisms Type
402
+
403
+ `object[]` ([Details](pins-inspector-defs-specialism.md))
404
+
182
405
  ## Additional Properties
183
406
 
184
407
  Additional properties are allowed and do not have to follow a specific schema
408
+
409
+ # PINS Inspector Definitions
410
+
411
+ ## Definitions group specialism
412
+
413
+ Reference this group by using
414
+
415
+ ```json
416
+ {"$ref":"pins-inspector.schema.json#/$defs/specialism"}
417
+ ```
418
+
419
+ | Property | Type | Required | Nullable | Defined by |
420
+ | :-------------------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- |
421
+ | [name](#name) | `string` | Required | cannot be null | [PINS Inspector](pins-inspector-defs-specialism-properties-name.md "pins-inspector.schema.json#/$defs/specialism/properties/name") |
422
+ | [proficiency](#proficiency) | `string` | Required | can be null | [PINS Inspector](pins-inspector-defs-specialism-properties-proficiency.md "pins-inspector.schema.json#/$defs/specialism/properties/proficiency") |
423
+ | [validFrom](#validfrom-1) | `string` | Required | can be null | [PINS Inspector](pins-inspector-defs-specialism-properties-validfrom.md "pins-inspector.schema.json#/$defs/specialism/properties/validFrom") |
424
+ | Additional Properties | Any | Optional | can be null | |
425
+
426
+ ### name
427
+
428
+ Working above band is stored as a specialism
429
+
430
+ `name`
431
+
432
+ * is required
433
+
434
+ * Type: `string`
435
+
436
+ * cannot be null
437
+
438
+ * defined in: [PINS Inspector](pins-inspector-defs-specialism-properties-name.md "pins-inspector.schema.json#/$defs/specialism/properties/name")
439
+
440
+ #### name Type
441
+
442
+ `string`
443
+
444
+ ### proficiency
445
+
446
+ trained or in-training
447
+
448
+ `proficiency`
449
+
450
+ * is required
451
+
452
+ * Type: `string`
453
+
454
+ * can be null
455
+
456
+ * defined in: [PINS Inspector](pins-inspector-defs-specialism-properties-proficiency.md "pins-inspector.schema.json#/$defs/specialism/properties/proficiency")
457
+
458
+ #### proficiency Type
459
+
460
+ `string`
461
+
462
+ ### validFrom
463
+
464
+ Date training started or date training was completed.
465
+
466
+ `validFrom`
467
+
468
+ * is required
469
+
470
+ * Type: `string`
471
+
472
+ * can be null
473
+
474
+ * defined in: [PINS Inspector](pins-inspector-defs-specialism-properties-validfrom.md "pins-inspector.schema.json#/$defs/specialism/properties/validFrom")
475
+
476
+ #### validFrom Type
477
+
478
+ `string`
479
+
480
+ #### validFrom Constraints
481
+
482
+ **date time**: the string must be a date time string, according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339 "check the specification")
483
+
484
+ #### validFrom Examples
485
+
486
+ ```json
487
+ "2023-07-27T20:30:00.000Z"
488
+ ```
489
+
490
+ ### Additional Properties
491
+
492
+ Additional properties are allowed and do not have to follow a specific schema
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planning-inspectorate/data-model",
3
- "version": "1.20.0",
3
+ "version": "1.21.0",
4
4
  "description": "JSON Schemas for the Planning Inspectorate's Data Model",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-document.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:33:59+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-event.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:33:59+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-event-estimate.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:33:59+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-has.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:33:59+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-representation.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:33:59+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-s78.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: dart-response.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: entraid.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: folder.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: gettimesheets-response.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: listed-building.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: listed-buildings.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-document.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-exam-timetable.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-project.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-project-update.schema.json
3
- # timestamp: 2025-10-30T20:02:31+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-representation.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-subscription.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,21 +1,58 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pins-inspector.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from pydantic import BaseModel, ConfigDict
7
+ from pydantic import AwareDatetime, BaseModel, ConfigDict, EmailStr, Field
8
+
9
+
10
+ class Address(BaseModel):
11
+ model_config = ConfigDict(
12
+ extra="allow",
13
+ )
14
+ addressLine1: str | None = None
15
+ addressLine2: str | None = None
16
+ townCity: str | None = None
17
+ county: str | None = None
18
+ postcode: str | None = None
19
+
20
+
21
+ class Specialism(BaseModel):
22
+ model_config = ConfigDict(
23
+ extra="allow",
24
+ )
25
+ name: str = Field(..., examples=["S62A Casework Major"])
26
+ """
27
+ Working above band is stored as a specialism
28
+ """
29
+ proficiency: str | None = Field(..., examples=["trained"])
30
+ """
31
+ trained or in-training
32
+ """
33
+ validFrom: AwareDatetime | None = Field(..., examples=["2023-07-27T20:30:00.000Z"])
34
+ """
35
+ Date training started or date training was completed.
36
+ """
8
37
 
9
38
 
10
39
  class PinsInspector(BaseModel):
11
40
  """
12
- Inspector attributes as per Horizon. This will be extended with SAP/Entra data
41
+ Inspector Details originating from Horizon, SAP HR and Entra.
13
42
  """
14
43
 
15
44
  model_config = ConfigDict(
16
45
  extra="allow",
17
46
  )
18
- horizonId: str
47
+ entraId: str | None = Field(..., examples=["00000000-0000-0000-0000-000000000000"])
48
+ """
49
+ EntraID of the Inspector if available in ODW.
50
+ """
51
+ sapId: str | None = Field(..., examples=["12345678"])
52
+ """
53
+ SAPID of the Inspector if available in ODW.
54
+ """
55
+ horizonId: str | None = None
19
56
  """
20
57
  The PINS-generated unique horizon ID
21
58
  """
@@ -47,7 +84,39 @@ class PinsInspector(BaseModel):
47
84
  """
48
85
  The qualifications of the inspector
49
86
  """
50
- email: str | None = None
87
+ email: EmailStr | None = Field(
88
+ ..., examples=["example@planninginspectorate.gov.uk"]
89
+ )
90
+ """
91
+ PINS Email address for the Inspector
92
+ """
93
+ grade: str = Field(..., examples=["B1"])
94
+ """
95
+ Grades as a coded value e.g. B1, B2, B3, FTC-B1, FTC-B2, FTC-B3, PL
96
+ """
97
+ fte: float = Field(..., examples=[0.75])
98
+ """
99
+ FTE Decimal value e.g. 1, 0.5 etc
100
+ """
101
+ unit: str = Field(..., examples=["Operations"])
102
+ """
103
+ The personnel area of the Inspector
104
+ """
105
+ service: str = Field(..., examples=["Planning and Environmental Appeals Service"])
106
+ """
107
+ The personnel sub area of the Inspector
108
+ """
109
+ group: str = Field(..., examples=["Enforcement Groups"])
110
+ """
111
+ Group of the Inspector
112
+ """
113
+ inspectorManager: str = Field(..., examples=["Dan Brown"])
114
+ """
115
+ Name of the Inspector's manager.
116
+ """
117
+ validFrom: AwareDatetime | None = Field(None, examples=["2023-07-27T20:30:00.000Z"])
51
118
  """
52
- The email address of the inspector
119
+ Date the Inspector record was first recorded.
53
120
  """
121
+ address: Address
122
+ specialisms: list[Specialism]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pins-lpa.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: s51-advice.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: service-user.schema.json
3
- # timestamp: 2025-10-30T20:02:32+00:00
3
+ # timestamp: 2025-11-04T12:34:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -2,11 +2,35 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "pins-inspector.schema.json",
4
4
  "title": "PINS Inspector",
5
- "description": "Inspector attributes as per Horizon. This will be extended with SAP/Entra data",
5
+ "description": "Inspector Details originating from Horizon, SAP HR and Entra.",
6
6
  "type": "object",
7
7
  "additionalProperties": true,
8
- "required": ["firstName", "lastName", "horizonId", "email"],
8
+ "required": [
9
+ "entraId",
10
+ "sapId",
11
+ "firstName",
12
+ "lastName",
13
+ "email",
14
+ "grade",
15
+ "fte",
16
+ "unit",
17
+ "service",
18
+ "group",
19
+ "inspectorManager",
20
+ "address",
21
+ "specialisms"
22
+ ],
9
23
  "properties": {
24
+ "entraId": {
25
+ "type": ["string", "null"],
26
+ "description": "EntraID of the Inspector if available in ODW.",
27
+ "example": "00000000-0000-0000-0000-000000000000"
28
+ },
29
+ "sapId": {
30
+ "type": ["string", "null"],
31
+ "description": "SAPID of the Inspector if available in ODW.",
32
+ "example": "12345678"
33
+ },
10
34
  "horizonId": {
11
35
  "type": "string",
12
36
  "description": "The PINS-generated unique horizon ID"
@@ -41,7 +65,88 @@
41
65
  },
42
66
  "email": {
43
67
  "type": ["string", "null"],
44
- "description": "The email address of the inspector"
68
+ "format": "email",
69
+ "description": "PINS Email address for the Inspector",
70
+ "example": "example@planninginspectorate.gov.uk"
71
+ },
72
+ "grade": {
73
+ "type": "string",
74
+ "description": "Grades as a coded value e.g. B1, B2, B3, FTC-B1, FTC-B2, FTC-B3, PL",
75
+ "example": "B1"
76
+ },
77
+ "fte": {
78
+ "type": "number",
79
+ "description": "FTE Decimal value e.g. 1, 0.5 etc",
80
+ "example": 0.75
81
+ },
82
+ "unit": {
83
+ "type": "string",
84
+ "description": "The personnel area of the Inspector",
85
+ "example": "Operations"
86
+ },
87
+ "service": {
88
+ "type": "string",
89
+ "description": "The personnel sub area of the Inspector",
90
+ "example": "Planning and Environmental Appeals Service"
91
+ },
92
+ "group": {
93
+ "type": "string",
94
+ "description": "Group of the Inspector",
95
+ "example": "Enforcement Groups"
96
+ },
97
+ "inspectorManager": {
98
+ "type": "string",
99
+ "description": "Name of the Inspector's manager.",
100
+ "example": "Dan Brown"
101
+ },
102
+ "validFrom": {
103
+ "type": ["string", "null"],
104
+ "description": "Date the Inspector record was first recorded.",
105
+ "format": "date-time",
106
+ "examples": ["2023-07-27T20:30:00.000Z"]
107
+ },
108
+ "address": {
109
+ "type": "object",
110
+ "additionalProperties": true,
111
+ "required": ["addressLine1", "addressLine2", "townCity", "county", "postcode"],
112
+ "properties": {
113
+ "addressLine1": { "type": ["string", "null"] },
114
+ "addressLine2": { "type": ["string", "null"] },
115
+ "townCity": { "type": ["string", "null"] },
116
+ "county": { "type": ["string", "null"] },
117
+ "postcode": { "type": ["string", "null"] }
118
+ }
119
+ },
120
+ "specialisms": {
121
+ "type": "array",
122
+ "items": {
123
+ "$ref": "#/$defs/specialism"
124
+ }
125
+ }
126
+ },
127
+ "$defs": {
128
+ "specialism": {
129
+ "type": "object",
130
+ "additionalProperties": true,
131
+ "required": ["name", "proficiency", "validFrom"],
132
+ "properties": {
133
+ "name": {
134
+ "type": "string",
135
+ "description": "Working above band is stored as a specialism",
136
+ "example": "S62A Casework Major"
137
+ },
138
+ "proficiency": {
139
+ "type": ["string", "null"],
140
+ "description": "trained or in-training",
141
+ "example": "trained"
142
+ },
143
+ "validFrom": {
144
+ "type": ["string", "null"],
145
+ "description": "Date training started or date training was completed.",
146
+ "format": "date-time",
147
+ "examples": ["2023-07-27T20:30:00.000Z"]
148
+ }
149
+ }
45
150
  }
46
151
  }
47
152
  }
package/src/schemas.d.ts CHANGED
@@ -2754,13 +2754,21 @@ export interface NsipSubscription {
2754
2754
  }
2755
2755
 
2756
2756
  /**
2757
- * Inspector attributes as per Horizon. This will be extended with SAP/Entra data
2757
+ * Inspector Details originating from Horizon, SAP HR and Entra.
2758
2758
  */
2759
2759
  export interface PINSInspector {
2760
+ /**
2761
+ * EntraID of the Inspector if available in ODW.
2762
+ */
2763
+ entraId: string | null;
2764
+ /**
2765
+ * SAPID of the Inspector if available in ODW.
2766
+ */
2767
+ sapId: string | null;
2760
2768
  /**
2761
2769
  * The PINS-generated unique horizon ID
2762
2770
  */
2763
- horizonId: string;
2771
+ horizonId?: string;
2764
2772
  /**
2765
2773
  * The first name of the inspector
2766
2774
  */
@@ -2790,9 +2798,61 @@ export interface PINSInspector {
2790
2798
  */
2791
2799
  qualifications?: string | null;
2792
2800
  /**
2793
- * The email address of the inspector
2801
+ * PINS Email address for the Inspector
2794
2802
  */
2795
2803
  email: string | null;
2804
+ /**
2805
+ * Grades as a coded value e.g. B1, B2, B3, FTC-B1, FTC-B2, FTC-B3, PL
2806
+ */
2807
+ grade: string;
2808
+ /**
2809
+ * FTE Decimal value e.g. 1, 0.5 etc
2810
+ */
2811
+ fte: number;
2812
+ /**
2813
+ * The personnel area of the Inspector
2814
+ */
2815
+ unit: string;
2816
+ /**
2817
+ * The personnel sub area of the Inspector
2818
+ */
2819
+ service: string;
2820
+ /**
2821
+ * Group of the Inspector
2822
+ */
2823
+ group: string;
2824
+ /**
2825
+ * Name of the Inspector's manager.
2826
+ */
2827
+ inspectorManager: string;
2828
+ /**
2829
+ * Date the Inspector record was first recorded.
2830
+ */
2831
+ validFrom?: string | null;
2832
+ address: {
2833
+ addressLine1: string | null;
2834
+ addressLine2: string | null;
2835
+ townCity: string | null;
2836
+ county: string | null;
2837
+ postcode: string | null;
2838
+ [k: string]: unknown;
2839
+ };
2840
+ specialisms: Specialism[];
2841
+ [k: string]: unknown;
2842
+ }
2843
+ export interface Specialism {
2844
+ /**
2845
+ * Working above band is stored as a specialism
2846
+ */
2847
+ name: string;
2848
+ /**
2849
+ * trained or in-training
2850
+ */
2851
+ proficiency: string | null;
2852
+ /**
2853
+ * Date training started or date training was completed.
2854
+ */
2855
+ validFrom: string | null;
2796
2856
  [k: string]: unknown;
2797
2857
  }
2798
2858