@planning-inspectorate/data-model 1.20.0 → 1.22.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 (57) hide show
  1. package/docs/README.md +11 -1
  2. package/docs/appeal-has.md +30 -49
  3. package/docs/appeal-s78.md +241 -144
  4. package/docs/pins-inspector-defs-specialism.md +80 -0
  5. package/docs/pins-inspector-defs.md +3 -0
  6. package/docs/pins-inspector.md +311 -3
  7. package/package.json +1 -1
  8. package/pins_data_model/models/model_appeal_document.py +1 -1
  9. package/pins_data_model/models/model_appeal_event.py +1 -1
  10. package/pins_data_model/models/model_appeal_event_estimate.py +1 -1
  11. package/pins_data_model/models/model_appeal_has.py +72 -27
  12. package/pins_data_model/models/model_appeal_representation.py +1 -1
  13. package/pins_data_model/models/model_appeal_s78.py +95 -8
  14. package/pins_data_model/models/model_dart_response.py +1 -1
  15. package/pins_data_model/models/model_entraid.py +1 -1
  16. package/pins_data_model/models/model_folder.py +1 -1
  17. package/pins_data_model/models/model_gettimesheets_response.py +1 -1
  18. package/pins_data_model/models/model_listed_building.py +1 -1
  19. package/pins_data_model/models/model_listed_buildings.py +1 -1
  20. package/pins_data_model/models/model_nsip_document.py +1 -1
  21. package/pins_data_model/models/model_nsip_exam_timetable.py +1 -1
  22. package/pins_data_model/models/model_nsip_project.py +1 -1
  23. package/pins_data_model/models/model_nsip_project_update.py +1 -1
  24. package/pins_data_model/models/model_nsip_representation.py +1 -1
  25. package/pins_data_model/models/model_nsip_subscription.py +1 -1
  26. package/pins_data_model/models/model_pins_inspector.py +75 -6
  27. package/pins_data_model/models/model_pins_lpa.py +1 -1
  28. package/pins_data_model/models/model_s51_advice.py +1 -1
  29. package/pins_data_model/models/model_service_user.py +1 -1
  30. package/schemas/appeal-has.schema.json +52 -21
  31. package/schemas/appeal-s78.schema.json +62 -7
  32. package/schemas/commands/appeals-components/appeal-advert.submission.schema.json +53 -0
  33. package/schemas/commands/{appeal-common-submission.schema.json → appeals-components/appeal-common-submission.schema.json} +8 -8
  34. package/schemas/commands/{appeal-has-submission.schema.json → appeals-components/appeal-has-submission.schema.json} +2 -2
  35. package/schemas/commands/{appeal-s78-submission.schema.json → appeals-components/appeal-s78-submission.schema.json} +2 -2
  36. package/schemas/commands/appeals-components/appellant-procedure-preference.schema.json +37 -0
  37. package/schemas/commands/appeals-components/changed-listed-building-number.schema.json +23 -0
  38. package/schemas/commands/appeals-components/lpa-procedure-preference.schema.json +28 -0
  39. package/schemas/commands/{lpa-questionnaire-cas-advert.schema.json → appeals-components/lpa-questionnaire-advert.schema.json} +8 -33
  40. package/schemas/commands/{lpa-questionnaire-common.schema.json → appeals-components/lpa-questionnaire-common.schema.json} +1 -1
  41. package/schemas/commands/{lpa-questionnaire-has.schema.json → appeals-components/lpa-questionnaire-has.schema.json} +1 -1
  42. package/schemas/commands/{lpa-questionnaire-s78.schema.json → appeals-components/lpa-questionnaire-s78.schema.json} +2 -21
  43. package/schemas/commands/appellant-submission.schema.json +21 -10
  44. package/schemas/commands/lpa-questionnaire.schema.json +24 -10
  45. package/schemas/pins-inspector.schema.json +108 -3
  46. package/src/index.cjs +6 -2
  47. package/src/index.d.ts +4 -0
  48. package/src/index.js +5 -2
  49. package/src/schemas.d.ts +385 -802
  50. package/tests/appeals/appeal-has.test.js +30 -5
  51. package/tests/appeals/appeal-s78.test.js +17 -3
  52. package/tests/appeals/commands/adverts-questionnaire.test.js +1 -0
  53. package/tests/appeals/commands/adverts-submission.test.js +13 -13
  54. package/tests/appeals/commands/cas-adverts-submission.test.js +184 -0
  55. package/tests/appeals/commands/has-submission.test.js +2 -2
  56. package/tests/appeals/commands/s78-submission.test.js +2 -2
  57. package/schemas/commands/appeal-advert.submission.schema.json +0 -23
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "commands/appeals-components/appeal-advert.submission.schema.json",
4
+ "title": "Advert specific properties",
5
+ "description": "Schema defining any properties for advertisement appeals",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["hasLandownersPermission", "advertDetails"],
9
+ "properties": {
10
+ "hasLandownersPermission": {
11
+ "type": ["boolean", "null"],
12
+ "description": "Indicates if the appellant has land owners permission"
13
+ },
14
+ "advertDetails": {
15
+ "type": ["array", "null"],
16
+ "items": {
17
+ "type": "object",
18
+ "additionalProperties": true,
19
+ "required": ["advertType", "isAdvertInPosition", "isSiteOnHighwayLand"],
20
+ "properties": {
21
+ "advertType": {
22
+ "type": ["string", "null"],
23
+ "enum": [
24
+ "4-6 Sheet Non-Illuminated",
25
+ "4-6 Sheet Illuminated",
26
+ "12/16/32 Sheet Non-Illuminated",
27
+ "12/16/32 Sheet Illuminated",
28
+ "48/64/96 Sheet Non-Illuminated",
29
+ "48/64/96 Sheet Illuminated",
30
+ "Fascia Projecting Signs Non-Illuminated",
31
+ "Fascia Projecting Signs Illuminated",
32
+ "Directional & Others Non-Illuminated",
33
+ "Directional & Others Illuminated",
34
+ "Monolith/Totem Signs Non-Illuminated",
35
+ "Monolith/Totem Signs Illuminated",
36
+ "Other",
37
+ null
38
+ ]
39
+ },
40
+ "isAdvertInPosition": {
41
+ "type": ["boolean", "null"],
42
+ "description": "Is the advertisement in position?"
43
+ },
44
+ "isSiteOnHighwayLand": {
45
+ "type": ["boolean", "null"],
46
+ "description": "Is the site on highway land?"
47
+ }
48
+ }
49
+ },
50
+ "description": "A list of advertisements for the appeal"
51
+ }
52
+ }
53
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/appeal-common-submission.schema.json",
3
+ "$id": "commands/appeals-components/appeal-common-submission.schema.json",
4
4
  "title": "Appellant common submission properties",
5
5
  "description": "Schema defining any properties common across all appeal types for appeal submissions",
6
6
  "type": "object",
@@ -25,16 +25,16 @@
25
25
  {
26
26
  "required": ["siteGridReferenceEasting", "siteGridReferenceNorthing"],
27
27
  "properties": {
28
- "siteGridReferenceEasting": { "not": { "type": "null" } },
29
- "siteGridReferenceNorthing": { "not": { "type": "null" } }
28
+ "siteGridReferenceEasting": { "type": "string" },
29
+ "siteGridReferenceNorthing": { "type": "string" }
30
30
  }
31
31
  },
32
32
  {
33
33
  "required": ["siteAddressLine1", "siteAddressTown", "siteAddressPostcode"],
34
34
  "properties": {
35
- "siteAddressLine1": { "not": { "type": "null" } },
36
- "siteAddressTown": { "not": { "type": "null" } },
37
- "siteAddressPostcode": { "not": { "type": "null" } }
35
+ "siteAddressLine1": { "type": "string" },
36
+ "siteAddressTown": { "type": "string" },
37
+ "siteAddressPostcode": { "type": "string" }
38
38
  }
39
39
  }
40
40
  ],
@@ -121,12 +121,12 @@
121
121
  },
122
122
  "siteGridReferenceEasting": {
123
123
  "type": ["string", "null"],
124
- "pattern": "^\\d{6}$",
124
+ "pattern": "^\\d{6,7}$",
125
125
  "examples": ["357144"]
126
126
  },
127
127
  "siteGridReferenceNorthing": {
128
128
  "type": ["string", "null"],
129
- "pattern": "^\\d{6}$",
129
+ "pattern": "^\\d{6,7}$",
130
130
  "examples": ["400534"]
131
131
  },
132
132
  "siteAccessDetails": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/appeal-has-submission.schema.json",
3
+ "$id": "commands/appeals-components/appeal-has-submission.schema.json",
4
4
  "title": "Appellant HAS submission properties",
5
- "description": "Schema defining any HAS specific properties for submissions",
5
+ "description": "Schema defining any HAS specific properties for appeal submissions",
6
6
  "type": "object",
7
7
  "additionalProperties": true,
8
8
  "required": [
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/appeal-s78-submission.schema.json",
3
+ "$id": "commands/appeals-components/appeal-s78-submission.schema.json",
4
4
  "title": "Appellant s78 submission properties",
5
- "description": "Schema defining any S78 specific properties for questionnaire submissions",
5
+ "description": "Schema defining any S78 specific properties for appeal submissions",
6
6
  "type": "object",
7
7
  "additionalProperties": true,
8
8
  "required": [
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "commands/appeals-components/appellant-procedure-preference.schema.json",
4
+ "title": "Appellant procedure preference properties",
5
+ "description": "Schema defining appellant procedure preference properties",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": [
9
+ "appellantProcedurePreference",
10
+ "appellantProcedurePreferenceDetails",
11
+ "appellantProcedurePreferenceDuration",
12
+ "appellantProcedurePreferenceWitnessCount"
13
+ ],
14
+ "allOf": [
15
+ {
16
+ "properties": {
17
+ "appellantProcedurePreference": {
18
+ "type": ["string", "null"],
19
+ "enum": ["written", "hearing", "inquiry", null],
20
+ "description": "The procedure preference indicated by the appellant"
21
+ },
22
+ "appellantProcedurePreferenceDetails": {
23
+ "type": ["string", "null"],
24
+ "description": "The procedure details preference indicated by the appellant"
25
+ },
26
+ "appellantProcedurePreferenceDuration": {
27
+ "type": ["number", "null"],
28
+ "description": "The duration of the procedure indicated by the appellant"
29
+ },
30
+ "appellantProcedurePreferenceWitnessCount": {
31
+ "type": ["number", "null"],
32
+ "description": "The number of witnesses in inquiries"
33
+ }
34
+ }
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "commands/appeals-components/changed-listed-building-number.schema.json",
4
+ "title": "changed-listed-building-numbers properties",
5
+ "description": "Schema defining changed-listed-building-numbers",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["changedListedBuildingNumbers"],
9
+ "allOf": [
10
+ {
11
+ "properties": {
12
+ "changedListedBuildingNumbers": {
13
+ "type": ["array", "null"],
14
+ "items": {
15
+ "type": "string",
16
+ "examples": ["10023", "17824"]
17
+ },
18
+ "description": "A list of changed listed building IDs from Historic England"
19
+ }
20
+ }
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "commands/appeals-components/lpa-procedure-preference.schema.json",
4
+ "title": "LPA procedure preference properties",
5
+ "description": "Schema defining LPA procedure preference properties",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["lpaProcedurePreference", "lpaProcedurePreferenceDetails", "lpaProcedurePreferenceDuration"],
9
+ "allOf": [
10
+ {
11
+ "properties": {
12
+ "lpaProcedurePreference": {
13
+ "type": ["string", "null"],
14
+ "enum": ["written", "hearing", "inquiry", null],
15
+ "description": "The procedure preference indicated by the LPA"
16
+ },
17
+ "lpaProcedurePreferenceDetails": {
18
+ "type": ["string", "null"],
19
+ "description": "The procedure details preference indicated by the LPA"
20
+ },
21
+ "lpaProcedurePreferenceDuration": {
22
+ "type": ["number", "null"],
23
+ "description": "The duration of enquiry indicated by the LPA"
24
+ }
25
+ }
26
+ }
27
+ ]
28
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/lpa-questionnaire-cas-advert.schema.json",
3
+ "$id": "commands/appeals-components/lpa-questionnaire-advert.schema.json",
4
4
  "title": "LPAQ cas advert submission properties",
5
- "description": "Schema defining any cas advert specific properties for LPAQ submissions",
5
+ "description": "Schema defining any advert specific properties for LPAQ submissions",
6
6
  "type": "object",
7
7
  "additionalProperties": true,
8
8
  "required": [
@@ -13,9 +13,6 @@
13
13
  "hasStatutoryConsultees",
14
14
  "consultedBodiesDetails",
15
15
  "hasEmergingPlan",
16
- "lpaProcedurePreference",
17
- "lpaProcedurePreferenceDetails",
18
- "lpaProcedurePreferenceDuration",
19
16
  "isSiteInAreaOfSpecialControlAdverts",
20
17
  "wasApplicationRefusedDueToHighwayOrTraffic",
21
18
  "didAppellantSubmitCompletePhotosAndPlans"
@@ -25,18 +22,15 @@
25
22
  "properties": {
26
23
  "affectsScheduledMonument": {
27
24
  "type": ["boolean", "null"],
28
- "description": "Indicates that a scheduled monument is affected",
29
- "$comment": "Only available in S78 cases"
25
+ "description": "Indicates that a scheduled monument is affected"
30
26
  },
31
27
  "hasProtectedSpecies": {
32
28
  "type": ["boolean", "null"],
33
- "description": "Indicates the existence of protected species",
34
- "$comment": "Only available in S78 cases"
29
+ "description": "Indicates the existence of protected species"
35
30
  },
36
31
  "isAonbNationalLandscape": {
37
32
  "type": ["boolean", "null"],
38
- "description": "Indicates an area of outstanding beauty (National Landscape)",
39
- "$comment": "Only available in S78 cases"
33
+ "description": "Indicates an area of outstanding beauty (National Landscape)"
40
34
  },
41
35
  "designatedSitesNames": {
42
36
  "type": ["array", "null"],
@@ -44,13 +38,11 @@
44
38
  "type": "string",
45
39
  "examples": ["SSSI", "cSAC", "SAC", "pSPA", "SPA", "user entered value"]
46
40
  },
47
- "description": "The designated site names",
48
- "$comment": "Only available in S78 cases"
41
+ "description": "The designated site names"
49
42
  },
50
43
  "hasStatutoryConsultees": {
51
44
  "type": ["boolean", "null"],
52
- "description": "Indicates statutory consultees",
53
- "$comment": "Only available in S78 cases"
45
+ "description": "Indicates statutory consultees"
54
46
  },
55
47
  "consultedBodiesDetails": {
56
48
  "type": ["string", "null"],
@@ -58,24 +50,7 @@
58
50
  },
59
51
  "hasEmergingPlan": {
60
52
  "type": ["boolean", "null"],
61
- "description": "Indicates emerging plans",
62
- "$comment": "Only available in S78 cases"
63
- },
64
- "lpaProcedurePreference": {
65
- "type": ["string", "null"],
66
- "enum": ["written", "hearing", "inquiry", null],
67
- "description": "The procedure preference indicated by the LPA",
68
- "$comment": "Only available in S78 cases"
69
- },
70
- "lpaProcedurePreferenceDetails": {
71
- "type": ["string", "null"],
72
- "description": "The procedure details preference indicated by the LPA",
73
- "$comment": "Only available in S78 cases"
74
- },
75
- "lpaProcedurePreferenceDuration": {
76
- "type": ["number", "null"],
77
- "description": "The duration of enquiry indicated by the LPA",
78
- "$comment": "Only available in S78 cases"
53
+ "description": "Indicates emerging plans"
79
54
  },
80
55
  "isSiteInAreaOfSpecialControlAdverts": {
81
56
  "type": ["boolean", "null"],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/lpa-questionnaire-common.schema.json",
3
+ "$id": "commands/appeals-components/lpa-questionnaire-common.schema.json",
4
4
  "title": "LPAQ common submission properties",
5
5
  "description": "Schema defining any properties common across all appeal types for LPAQ submissions",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/lpa-questionnaire-has.schema.json",
3
+ "$id": "commands/appeals-components/lpa-questionnaire-has.schema.json",
4
4
  "title": "LPAQ HAS submission properties",
5
5
  "description": "Schema defining any HAS specific properties for LPAQ submissions",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "commands/lpa-questionnaire-s78.schema.json",
3
+ "$id": "commands/appeals-components/lpa-questionnaire-s78.schema.json",
4
4
  "title": "LPAQ S78 submission properties",
5
5
  "description": "Schema defining any S78 specific properties for LPAQ submissions",
6
6
  "type": "object",
@@ -29,10 +29,7 @@
29
29
  "hasInfrastructureLevy",
30
30
  "isInfrastructureLevyFormallyAdopted",
31
31
  "infrastructureLevyAdoptedDate",
32
- "infrastructureLevyExpectedDate",
33
- "lpaProcedurePreference",
34
- "lpaProcedurePreferenceDetails",
35
- "lpaProcedurePreferenceDuration"
32
+ "infrastructureLevyExpectedDate"
36
33
  ],
37
34
  "allOf": [
38
35
  {
@@ -194,22 +191,6 @@
194
191
  "examples": ["2023-07-27T20:30:00.000Z"],
195
192
  "description": "The expected date of the infrastructure levy",
196
193
  "$comment": "Only available in S78 cases"
197
- },
198
- "lpaProcedurePreference": {
199
- "type": ["string", "null"],
200
- "enum": ["written", "hearing", "inquiry", null],
201
- "description": "The procedure preference indicated by the LPA",
202
- "$comment": "Only available in S78 cases"
203
- },
204
- "lpaProcedurePreferenceDetails": {
205
- "type": ["string", "null"],
206
- "description": "The procedure details preference indicated by the LPA",
207
- "$comment": "Only available in S78 cases"
208
- },
209
- "lpaProcedurePreferenceDuration": {
210
- "type": ["number", "null"],
211
- "description": "The duration of enquiry indicated by the LPA",
212
- "$comment": "Only available in S78 cases"
213
194
  }
214
195
  }
215
196
  }
@@ -17,26 +17,37 @@
17
17
  "$comment": "Householder + CAS Planning",
18
18
  "allOf": [
19
19
  { "properties": { "caseType": { "enum": ["D", "ZP"] } } },
20
- { "$ref": "appeal-common-submission.schema.json" },
21
- { "$ref": "appeal-has-submission.schema.json" }
20
+ { "$ref": "appeals-components/appeal-common-submission.schema.json" },
21
+ { "$ref": "appeals-components/appeal-has-submission.schema.json" }
22
22
  ]
23
23
  },
24
24
  {
25
25
  "$comment": "S78 + S20",
26
26
  "allOf": [
27
27
  { "properties": { "caseType": { "enum": ["W", "Y"] } } },
28
- { "$ref": "appeal-common-submission.schema.json" },
29
- { "$ref": "appeal-has-submission.schema.json" },
30
- { "$ref": "appeal-s78-submission.schema.json" }
28
+ { "$ref": "appeals-components/appeal-common-submission.schema.json" },
29
+ { "$ref": "appeals-components/appeal-has-submission.schema.json" },
30
+ { "$ref": "appeals-components/appeal-s78-submission.schema.json" },
31
+ { "$ref": "appeals-components/appellant-procedure-preference.schema.json" }
31
32
  ]
32
33
  },
33
34
  {
34
- "$comment": "Adverts + CAS Adverts",
35
+ "$comment": "CAS Adverts",
35
36
  "allOf": [
36
- { "properties": { "caseType": { "enum": ["H", "ZA"] } } },
37
- { "$ref": "appeal-common-submission.schema.json" },
38
- { "$ref": "appeal-has-submission.schema.json" },
39
- { "$ref": "appeal-advert.submission.schema.json" }
37
+ { "properties": { "caseType": { "enum": ["ZA"] } } },
38
+ { "$ref": "appeals-components/appeal-common-submission.schema.json" },
39
+ { "$ref": "appeals-components/appeal-has-submission.schema.json" },
40
+ { "$ref": "appeals-components/appeal-advert.submission.schema.json" }
41
+ ]
42
+ },
43
+ {
44
+ "$comment": "Adverts",
45
+ "allOf": [
46
+ { "properties": { "caseType": { "enum": ["H"] } } },
47
+ { "$ref": "appeals-components/appeal-common-submission.schema.json" },
48
+ { "$ref": "appeals-components/appeal-has-submission.schema.json" },
49
+ { "$ref": "appeals-components/appeal-advert.submission.schema.json" },
50
+ { "$ref": "appeals-components/appellant-procedure-preference.schema.json" }
40
51
  ]
41
52
  }
42
53
  ]
@@ -16,26 +16,40 @@
16
16
  "$comment": "Householder + CAS Planning",
17
17
  "allOf": [
18
18
  { "properties": { "caseType": { "enum": ["D", "ZP"] } } },
19
- { "$ref": "lpa-questionnaire-common.schema.json" },
20
- { "$ref": "lpa-questionnaire-has.schema.json" }
19
+ { "$ref": "appeals-components/lpa-questionnaire-common.schema.json" },
20
+ { "$ref": "appeals-components/lpa-questionnaire-has.schema.json" }
21
21
  ]
22
22
  },
23
23
  {
24
24
  "$comment": "S78 + S20",
25
25
  "allOf": [
26
26
  { "properties": { "caseType": { "enum": ["W", "Y"] } } },
27
- { "$ref": "lpa-questionnaire-common.schema.json" },
28
- { "$ref": "lpa-questionnaire-has.schema.json" },
29
- { "$ref": "lpa-questionnaire-s78.schema.json" }
27
+ { "$ref": "appeals-components/lpa-questionnaire-common.schema.json" },
28
+ { "$ref": "appeals-components/lpa-questionnaire-has.schema.json" },
29
+ { "$ref": "appeals-components/lpa-questionnaire-s78.schema.json" },
30
+ { "$ref": "appeals-components/lpa-procedure-preference.schema.json" },
31
+ { "$ref": "appeals-components/changed-listed-building-number.schema.json" }
30
32
  ]
31
33
  },
32
34
  {
33
- "$comment": "Adverts + CAS Adverts - TBD - may need separate schemas",
35
+ "$comment": "CAS Adverts",
34
36
  "allOf": [
35
- { "properties": { "caseType": { "enum": ["H", "ZA"] } } },
36
- { "$ref": "lpa-questionnaire-common.schema.json" },
37
- { "$ref": "lpa-questionnaire-has.schema.json" },
38
- { "$ref": "lpa-questionnaire-cas-advert.schema.json" }
37
+ { "properties": { "caseType": { "enum": ["ZA"] } } },
38
+ { "$ref": "appeals-components/lpa-questionnaire-common.schema.json" },
39
+ { "$ref": "appeals-components/lpa-questionnaire-has.schema.json" },
40
+ { "$ref": "appeals-components/lpa-procedure-preference.schema.json" },
41
+ { "$ref": "appeals-components/lpa-questionnaire-advert.schema.json" }
42
+ ]
43
+ },
44
+ {
45
+ "$comment": "Adverts",
46
+ "allOf": [
47
+ { "properties": { "caseType": { "enum": ["H"] } } },
48
+ { "$ref": "appeals-components/lpa-questionnaire-common.schema.json" },
49
+ { "$ref": "appeals-components/lpa-questionnaire-has.schema.json" },
50
+ { "$ref": "appeals-components/lpa-questionnaire-advert.schema.json" },
51
+ { "$ref": "appeals-components/lpa-procedure-preference.schema.json" },
52
+ { "$ref": "appeals-components/changed-listed-building-number.schema.json" }
39
53
  ]
40
54
  }
41
55
  ]
@@ -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/index.cjs CHANGED
@@ -753,6 +753,7 @@ const __dirname$1 = path.dirname(url.fileURLToPath((typeof document === 'undefin
753
753
 
754
754
  const schemasPath = path.join(__dirname$1, '..', 'schemas');
755
755
  const commandsPath = path.join(schemasPath, 'commands');
756
+ const appealsCommandsComponentsPath = path.join(commandsPath, 'appeals-components');
756
757
 
757
758
  /**
758
759
  * Load all schemas from schemas and commands folders
@@ -762,7 +763,8 @@ const commandsPath = path.join(schemasPath, 'commands');
762
763
  async function loadAllSchemas() {
763
764
  return {
764
765
  schemas: await loadSchemas(schemasPath),
765
- commands: await loadSchemas(commandsPath)
766
+ commands: await loadSchemas(commandsPath),
767
+ appealsComponents: await loadSchemas(appealsCommandsComponentsPath)
766
768
  };
767
769
  }
768
770
 
@@ -774,7 +776,8 @@ async function loadAllSchemas() {
774
776
  function loadAllSchemasSync() {
775
777
  return {
776
778
  schemas: loadSchemasSync(schemasPath),
777
- commands: loadSchemasSync(commandsPath)
779
+ commands: loadSchemasSync(commandsPath),
780
+ appealsComponents: loadSchemasSync(appealsCommandsComponentsPath)
778
781
  };
779
782
  }
780
783
 
@@ -848,6 +851,7 @@ exports.NSIP_VIRUS_CHECK_STATUS = NSIP_VIRUS_CHECK_STATUS;
848
851
  exports.REDACTION_STATUS = REDACTION_STATUS;
849
852
  exports.SERVICE_USER_TYPE = SERVICE_USER_TYPE;
850
853
  exports.STATUS = STATUS;
854
+ exports.appealsCommandsComponentsPath = appealsCommandsComponentsPath;
851
855
  exports.commandsPath = commandsPath;
852
856
  exports.loadAllSchemas = loadAllSchemas;
853
857
  exports.loadAllSchemasSync = loadAllSchemasSync;
package/src/index.d.ts CHANGED
@@ -8,10 +8,14 @@ export interface LoadedSchemas {
8
8
  commands: {
9
9
  [name: string]: any;
10
10
  };
11
+ appealsComponents: {
12
+ [name: string]: any;
13
+ };
11
14
  }
12
15
 
13
16
  export const schemasPath: string;
14
17
  export const commandsPath: string;
18
+ export const appealsComponentsPath: string;
15
19
  export function loadAllSchemas(): Promise<LoadedSchemas>;
16
20
  export function loadAllSchemasSync(): LoadedSchemas;
17
21