@planning-inspectorate/data-model 2.56.0 → 2.58.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.
- package/docs/README.md +2 -0
- package/docs/appeal-document.md +25 -18
- package/docs/appeal-group-c.md +1420 -0
- package/docs/appeal-has.md +22 -17
- package/docs/appeal-s78.md +30 -17
- package/package.json +2 -2
- package/pins_data_model/models/model_appeal_document.py +7 -0
- package/pins_data_model/models/model_appeal_group_c.py +458 -0
- package/pins_data_model/models/model_appeal_has.py +5 -0
- package/pins_data_model/models/model_appeal_s78.py +13 -0
- package/schemas/appeal-document.schema.json +25 -1
- package/schemas/appeal-group-c.schema.json +406 -0
- package/schemas/appeal-has.schema.json +22 -1
- package/schemas/appeal-s78.schema.json +30 -1
- package/src/enums.cjs +45 -0
- package/src/enums.d.ts +43 -0
- package/src/enums.js +43 -0
- package/src/index.cjs +45 -0
- package/src/schemas.d.ts +367 -3
- package/tests/appeals/appeal-group-c.test.js +378 -0
package/docs/appeal-has.md
CHANGED
|
@@ -261,23 +261,28 @@ The internal code for an appeal type, e.g. D (Householder)
|
|
|
261
261
|
|
|
262
262
|
**enum**: the value of this property must be equal to one of the following values:
|
|
263
263
|
|
|
264
|
-
| Value
|
|
265
|
-
|
|
|
266
|
-
| `"C"`
|
|
267
|
-
| `"D"`
|
|
268
|
-
| `"F"`
|
|
269
|
-
| `"G"`
|
|
270
|
-
| `"H"`
|
|
271
|
-
| `"L"`
|
|
272
|
-
| `"Q"`
|
|
273
|
-
| `"S"`
|
|
274
|
-
| `"V"`
|
|
275
|
-
| `"W"`
|
|
276
|
-
| `"X"`
|
|
277
|
-
| `"Y"`
|
|
278
|
-
| `"Z"`
|
|
279
|
-
| `"ZA"`
|
|
280
|
-
| `"ZP"`
|
|
264
|
+
| Value | Explanation |
|
|
265
|
+
| :------ | :---------- |
|
|
266
|
+
| `"C"` | |
|
|
267
|
+
| `"D"` | |
|
|
268
|
+
| `"F"` | |
|
|
269
|
+
| `"G"` | |
|
|
270
|
+
| `"H"` | |
|
|
271
|
+
| `"L"` | |
|
|
272
|
+
| `"Q"` | |
|
|
273
|
+
| `"S"` | |
|
|
274
|
+
| `"V"` | |
|
|
275
|
+
| `"W"` | |
|
|
276
|
+
| `"X"` | |
|
|
277
|
+
| `"Y"` | |
|
|
278
|
+
| `"Z"` | |
|
|
279
|
+
| `"ZA"` | |
|
|
280
|
+
| `"ZP"` | |
|
|
281
|
+
| `"TPO"` | |
|
|
282
|
+
| `"TRN"` | |
|
|
283
|
+
| `"HH"` | |
|
|
284
|
+
| `"HR"` | |
|
|
285
|
+
| `"ENV"` | |
|
|
281
286
|
|
|
282
287
|
## caseProcedure
|
|
283
288
|
|
package/docs/appeal-s78.md
CHANGED
|
@@ -364,23 +364,28 @@ The internal code for an appeal type, e.g. D (Householder)
|
|
|
364
364
|
|
|
365
365
|
**enum**: the value of this property must be equal to one of the following values:
|
|
366
366
|
|
|
367
|
-
| Value
|
|
368
|
-
|
|
|
369
|
-
| `"C"`
|
|
370
|
-
| `"D"`
|
|
371
|
-
| `"F"`
|
|
372
|
-
| `"G"`
|
|
373
|
-
| `"H"`
|
|
374
|
-
| `"L"`
|
|
375
|
-
| `"Q"`
|
|
376
|
-
| `"S"`
|
|
377
|
-
| `"V"`
|
|
378
|
-
| `"W"`
|
|
379
|
-
| `"X"`
|
|
380
|
-
| `"Y"`
|
|
381
|
-
| `"Z"`
|
|
382
|
-
| `"ZA"`
|
|
383
|
-
| `"ZP"`
|
|
367
|
+
| Value | Explanation |
|
|
368
|
+
| :------ | :---------- |
|
|
369
|
+
| `"C"` | |
|
|
370
|
+
| `"D"` | |
|
|
371
|
+
| `"F"` | |
|
|
372
|
+
| `"G"` | |
|
|
373
|
+
| `"H"` | |
|
|
374
|
+
| `"L"` | |
|
|
375
|
+
| `"Q"` | |
|
|
376
|
+
| `"S"` | |
|
|
377
|
+
| `"V"` | |
|
|
378
|
+
| `"W"` | |
|
|
379
|
+
| `"X"` | |
|
|
380
|
+
| `"Y"` | |
|
|
381
|
+
| `"Z"` | |
|
|
382
|
+
| `"ZA"` | |
|
|
383
|
+
| `"ZP"` | |
|
|
384
|
+
| `"TPO"` | |
|
|
385
|
+
| `"TRN"` | |
|
|
386
|
+
| `"HH"` | |
|
|
387
|
+
| `"HR"` | |
|
|
388
|
+
| `"ENV"` | |
|
|
384
389
|
|
|
385
390
|
## caseProcedure
|
|
386
391
|
|
|
@@ -1378,6 +1383,7 @@ The final outcome for the decision
|
|
|
1378
1383
|
| `"planning_permission_granted"` | |
|
|
1379
1384
|
| `"quashed_on_legal_grounds"` | |
|
|
1380
1385
|
| `"notice_varied_and_upheld"` | |
|
|
1386
|
+
| `"notice_quashed"` | |
|
|
1381
1387
|
| `null` | |
|
|
1382
1388
|
|
|
1383
1389
|
## caseCompletedDate
|
|
@@ -3697,6 +3703,13 @@ The net gain in residences of the proposed development
|
|
|
3697
3703
|
| `"lawful-development-certificate"` | |
|
|
3698
3704
|
| `"discontinuance-notice"` | |
|
|
3699
3705
|
| `"permission-in-principle"` | |
|
|
3706
|
+
| `"tree-preservation-order"` | |
|
|
3707
|
+
| `"tree-replacement-notice"` | |
|
|
3708
|
+
| `"high-hedge-appeal"` | |
|
|
3709
|
+
| `"hedgerows-appeal"` | |
|
|
3710
|
+
| `"community-infrastructure-levy"` | |
|
|
3711
|
+
| `"planning-obligation"` | |
|
|
3712
|
+
| `"environmental"` | |
|
|
3700
3713
|
| `null` | |
|
|
3701
3714
|
|
|
3702
3715
|
## developmentType
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planning-inspectorate/data-model",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.58.0",
|
|
4
4
|
"description": "JSON Schemas for the Planning Inspectorate's Data Model",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@commitlint/cli": "^21.0.0",
|
|
37
37
|
"@commitlint/config-conventional": "^21.0.0",
|
|
38
38
|
"@eslint/js": "^10.0.1",
|
|
39
|
-
"@planning-inspectorate/coding-standards": "^
|
|
39
|
+
"@planning-inspectorate/coding-standards": "^2.0.0",
|
|
40
40
|
"ajv": "^8.17.1",
|
|
41
41
|
"ajv-formats": "^3.0.1",
|
|
42
42
|
"conventional-changelog-conventionalcommits": "^10.2.0",
|
|
@@ -39,6 +39,11 @@ class CaseType(Enum):
|
|
|
39
39
|
Z = "Z"
|
|
40
40
|
ZA = "ZA"
|
|
41
41
|
ZP = "ZP"
|
|
42
|
+
TPO = "TPO"
|
|
43
|
+
TRN = "TRN"
|
|
44
|
+
HH = "HH"
|
|
45
|
+
HR = "HR"
|
|
46
|
+
ENV = "ENV"
|
|
42
47
|
NoneType_None = None
|
|
43
48
|
|
|
44
49
|
|
|
@@ -58,6 +63,7 @@ class DocumentType(Enum):
|
|
|
58
63
|
The type of document, used for exchange, migrations and consumption from the appeal back-office system
|
|
59
64
|
"""
|
|
60
65
|
|
|
66
|
+
appellantCase = "appellantCase"
|
|
61
67
|
appellantCaseCorrespondence = "appellantCaseCorrespondence"
|
|
62
68
|
appellantCaseWithdrawalLetter = "appellantCaseWithdrawalLetter"
|
|
63
69
|
appellantCostsApplication = "appellantCostsApplication"
|
|
@@ -72,6 +78,7 @@ class DocumentType(Enum):
|
|
|
72
78
|
whoNotifiedLetterToNeighbours = "whoNotifiedLetterToNeighbours"
|
|
73
79
|
whoNotifiedPressAdvert = "whoNotifiedPressAdvert"
|
|
74
80
|
conservationMap = "conservationMap"
|
|
81
|
+
lpaQuestionnaire = "lpaQuestionnaire"
|
|
75
82
|
lpaCaseCorrespondence = "lpaCaseCorrespondence"
|
|
76
83
|
lpaCostsApplication = "lpaCostsApplication"
|
|
77
84
|
lpaCostsCorrespondence = "lpaCostsCorrespondence"
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: appeal-group-c.schema.json
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from enum import Enum, StrEnum
|
|
7
|
+
|
|
8
|
+
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, constr
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CaseType(StrEnum):
|
|
12
|
+
"""
|
|
13
|
+
Internal letter code for appeal types
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
C = "C"
|
|
17
|
+
D = "D"
|
|
18
|
+
F = "F"
|
|
19
|
+
G = "G"
|
|
20
|
+
H = "H"
|
|
21
|
+
L = "L"
|
|
22
|
+
Q = "Q"
|
|
23
|
+
S = "S"
|
|
24
|
+
V = "V"
|
|
25
|
+
W = "W"
|
|
26
|
+
X = "X"
|
|
27
|
+
Y = "Y"
|
|
28
|
+
Z = "Z"
|
|
29
|
+
ZA = "ZA"
|
|
30
|
+
ZP = "ZP"
|
|
31
|
+
TPO = "TPO"
|
|
32
|
+
TRN = "TRN"
|
|
33
|
+
HH = "HH"
|
|
34
|
+
HR = "HR"
|
|
35
|
+
ENV = "ENV"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class CaseStatus(StrEnum):
|
|
39
|
+
"""
|
|
40
|
+
The processing status for the appeal
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
assign_case_officer = "assign_case_officer"
|
|
44
|
+
validation = "validation"
|
|
45
|
+
ready_to_start = "ready_to_start"
|
|
46
|
+
lpa_questionnaire = "lpa_questionnaire"
|
|
47
|
+
issue_determination = "issue_determination"
|
|
48
|
+
statements = "statements"
|
|
49
|
+
evidence = "evidence"
|
|
50
|
+
witnesses = "witnesses"
|
|
51
|
+
final_comments = "final_comments"
|
|
52
|
+
complete = "complete"
|
|
53
|
+
invalid = "invalid"
|
|
54
|
+
closed = "closed"
|
|
55
|
+
withdrawn = "withdrawn"
|
|
56
|
+
awaiting_transfer = "awaiting_transfer"
|
|
57
|
+
transferred = "transferred"
|
|
58
|
+
event = "event"
|
|
59
|
+
awaiting_event = "awaiting_event"
|
|
60
|
+
notice_withdrawn = "notice_withdrawn"
|
|
61
|
+
closed_opened_in_error = "closed_opened_in_error"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class CaseProcedure(Enum):
|
|
65
|
+
"""
|
|
66
|
+
The type of procedure for the appeal
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
written = "written"
|
|
70
|
+
hearing = "hearing"
|
|
71
|
+
inquiry = "inquiry"
|
|
72
|
+
writtenPart1 = "writtenPart1"
|
|
73
|
+
writtenPart2 = "writtenPart2"
|
|
74
|
+
NoneType_None = None
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class CaseValidationOutcome(Enum):
|
|
78
|
+
"""
|
|
79
|
+
The outcome of the validation action
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
valid = "valid"
|
|
83
|
+
invalid = "invalid"
|
|
84
|
+
incomplete = "incomplete"
|
|
85
|
+
NoneType_None = None
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class LpaQuestionnaireValidationOutcome(Enum):
|
|
89
|
+
"""
|
|
90
|
+
The outcome of the LPA questionnaire validation action
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
complete = "complete"
|
|
94
|
+
incomplete = "incomplete"
|
|
95
|
+
NoneType_None = None
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class CaseDecisionOutcome(Enum):
|
|
99
|
+
"""
|
|
100
|
+
The final outcome for the decision
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
allowed = "allowed"
|
|
104
|
+
split_decision = "split_decision"
|
|
105
|
+
dismissed = "dismissed"
|
|
106
|
+
invalid = "invalid"
|
|
107
|
+
notice_upheld = "notice_upheld"
|
|
108
|
+
planning_permission_granted = "planning_permission_granted"
|
|
109
|
+
quashed_on_legal_grounds = "quashed_on_legal_grounds"
|
|
110
|
+
notice_varied_and_upheld = "notice_varied_and_upheld"
|
|
111
|
+
notice_quashed = "notice_quashed"
|
|
112
|
+
NoneType_None = None
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class AllocationLevel(Enum):
|
|
116
|
+
"""
|
|
117
|
+
A level used for allocation purposes
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
A = "A"
|
|
121
|
+
B = "B"
|
|
122
|
+
C = "C"
|
|
123
|
+
D = "D"
|
|
124
|
+
E = "E"
|
|
125
|
+
F = "F"
|
|
126
|
+
G = "G"
|
|
127
|
+
H = "H"
|
|
128
|
+
NoneType_None = None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class AllocationBand(Enum):
|
|
132
|
+
"""
|
|
133
|
+
A band used for allocation purposes
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
int_1 = 1
|
|
137
|
+
int_2 = 2
|
|
138
|
+
int_3 = 3
|
|
139
|
+
NoneType_None = None
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class TypeOfPlanningApplication(Enum):
|
|
143
|
+
"""
|
|
144
|
+
The type of application or notice that is the subject of the appeal
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
full_appeal = "full-appeal"
|
|
148
|
+
householder_planning = "householder-planning"
|
|
149
|
+
outline_planning = "outline-planning"
|
|
150
|
+
prior_approval = "prior-approval"
|
|
151
|
+
reserved_matters = "reserved-matters"
|
|
152
|
+
removal_or_variation_of_conditions = "removal-or-variation-of-conditions"
|
|
153
|
+
listed_building = "listed-building"
|
|
154
|
+
minor_commercial_development = "minor-commercial-development"
|
|
155
|
+
advertisement = "advertisement"
|
|
156
|
+
lawful_development_certificate = "lawful-development-certificate"
|
|
157
|
+
discontinuance_notice = "discontinuance-notice"
|
|
158
|
+
permission_in_principle = "permission-in-principle"
|
|
159
|
+
tree_preservation_order = "tree-preservation-order"
|
|
160
|
+
tree_replacement_notice = "tree-replacement-notice"
|
|
161
|
+
high_hedge_appeal = "high-hedge-appeal"
|
|
162
|
+
hedgerows_appeal = "hedgerows-appeal"
|
|
163
|
+
community_infrastructure_levy = "community-infrastructure-levy"
|
|
164
|
+
planning_obligation = "planning-obligation"
|
|
165
|
+
environmental = "environmental"
|
|
166
|
+
NoneType_None = None
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class CaseSubType(Enum):
|
|
170
|
+
"""
|
|
171
|
+
Sub-type categorization for generic/low-volume appeals
|
|
172
|
+
"""
|
|
173
|
+
|
|
174
|
+
anti_pollution_works_notice = "anti_pollution_works_notice"
|
|
175
|
+
contaminated_land = "contaminated_land"
|
|
176
|
+
marine_licensing = "marine_licensing"
|
|
177
|
+
waste_carriers = "waste_carriers"
|
|
178
|
+
water_abstraction = "water_abstraction"
|
|
179
|
+
environmental_liability = "environmental_liability"
|
|
180
|
+
environmental_permitting = "environmental_permitting"
|
|
181
|
+
hazardous_substances = "hazardous_substances"
|
|
182
|
+
silage_and_slurry = "silage_and_slurry"
|
|
183
|
+
sssi = "sssi"
|
|
184
|
+
affordable_housing = "affordable_housing"
|
|
185
|
+
NoneType_None = None
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class LinkedCaseStatus(Enum):
|
|
189
|
+
"""
|
|
190
|
+
Indicates if the case is linked, and the type of relationship
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
lead = "lead"
|
|
194
|
+
child = "child"
|
|
195
|
+
NoneType_None = None
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class EnvironmentalPermitSubtypes(Enum):
|
|
199
|
+
"""
|
|
200
|
+
Case sub-division applying to Environmental Permitting caseSubType
|
|
201
|
+
"""
|
|
202
|
+
|
|
203
|
+
refusal_of_a_permit = "refusal_of_a_permit"
|
|
204
|
+
deemed_refusal = "deemed_refusal"
|
|
205
|
+
conditions_attached_to_a_permit = "conditions_attached_to_a_permit"
|
|
206
|
+
decision_to_impose_conditions_by_regulator = (
|
|
207
|
+
"decision_to_impose_conditions_by_regulator"
|
|
208
|
+
)
|
|
209
|
+
deemed_withdrawal = "deemed_withdrawal"
|
|
210
|
+
enforcement_notice = "enforcement_notice"
|
|
211
|
+
suspension_notice = "suspension_notice"
|
|
212
|
+
closure_notice = "closure_notice"
|
|
213
|
+
flood_risk_activity = "flood_risk_activity"
|
|
214
|
+
revocation_notice = "revocation_notice"
|
|
215
|
+
prohibition_notice = "prohibition_notice"
|
|
216
|
+
NoneType_None = None
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class AppealGroupCCase(BaseModel):
|
|
220
|
+
"""
|
|
221
|
+
Group C - Schema defining the metadata for generic and low-volume appeals
|
|
222
|
+
"""
|
|
223
|
+
|
|
224
|
+
model_config = ConfigDict(
|
|
225
|
+
extra="allow",
|
|
226
|
+
)
|
|
227
|
+
caseId: int | None = Field(..., examples=[6000001])
|
|
228
|
+
"""
|
|
229
|
+
Internal case identifier
|
|
230
|
+
"""
|
|
231
|
+
caseReference: constr(pattern=r"^6\d{6}$") = Field(..., examples=["6000001"])
|
|
232
|
+
"""
|
|
233
|
+
External case identifier for Group C appeals (7 digit number starting in 6)
|
|
234
|
+
"""
|
|
235
|
+
caseType: CaseType
|
|
236
|
+
"""
|
|
237
|
+
Internal letter code for appeal types
|
|
238
|
+
"""
|
|
239
|
+
caseStatus: CaseStatus
|
|
240
|
+
"""
|
|
241
|
+
The processing status for the appeal
|
|
242
|
+
"""
|
|
243
|
+
caseProcedure: CaseProcedure | None
|
|
244
|
+
"""
|
|
245
|
+
The type of procedure for the appeal
|
|
246
|
+
"""
|
|
247
|
+
caseCreatedDate: AwareDatetime = Field(..., examples=["2026-07-27T20:30:00.000Z"])
|
|
248
|
+
"""
|
|
249
|
+
The date the appeal was received
|
|
250
|
+
"""
|
|
251
|
+
caseSubmittedDate: AwareDatetime | None = Field(
|
|
252
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
253
|
+
)
|
|
254
|
+
"""
|
|
255
|
+
The date the appeal was submitted by the appellant
|
|
256
|
+
"""
|
|
257
|
+
caseUpdatedDate: AwareDatetime | None = Field(
|
|
258
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
259
|
+
)
|
|
260
|
+
"""
|
|
261
|
+
The date the appeal was last updated in the back-office
|
|
262
|
+
"""
|
|
263
|
+
caseValidDate: AwareDatetime | None = Field(
|
|
264
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
265
|
+
)
|
|
266
|
+
"""
|
|
267
|
+
The date since when the appeal was considered valid
|
|
268
|
+
"""
|
|
269
|
+
caseValidationDate: AwareDatetime | None = Field(
|
|
270
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
271
|
+
)
|
|
272
|
+
"""
|
|
273
|
+
The date the appeal was validated in the back-office
|
|
274
|
+
"""
|
|
275
|
+
caseValidationOutcome: CaseValidationOutcome | None
|
|
276
|
+
"""
|
|
277
|
+
The outcome of the validation action
|
|
278
|
+
"""
|
|
279
|
+
caseStartedDate: AwareDatetime | None = Field(
|
|
280
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
281
|
+
)
|
|
282
|
+
"""
|
|
283
|
+
A date indicating when the case was started, resulting in the creation of a timetable
|
|
284
|
+
"""
|
|
285
|
+
casePublishedDate: AwareDatetime | None = Field(
|
|
286
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
287
|
+
)
|
|
288
|
+
"""
|
|
289
|
+
A date indicating when the case was published
|
|
290
|
+
"""
|
|
291
|
+
lpaQuestionnaireCreatedDate: AwareDatetime | None = Field(
|
|
292
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
293
|
+
)
|
|
294
|
+
"""
|
|
295
|
+
The date the LPA response was received
|
|
296
|
+
"""
|
|
297
|
+
lpaQuestionnaireSubmittedDate: AwareDatetime | None = Field(
|
|
298
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
299
|
+
)
|
|
300
|
+
"""
|
|
301
|
+
The date the LPA provided a response to the case
|
|
302
|
+
"""
|
|
303
|
+
lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome | None
|
|
304
|
+
"""
|
|
305
|
+
The outcome of the LPA questionnaire validation action
|
|
306
|
+
"""
|
|
307
|
+
lpaQuestionnaireDueDate: AwareDatetime | None = Field(
|
|
308
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
309
|
+
)
|
|
310
|
+
"""
|
|
311
|
+
If the case is started and has a timetable, a deadline for the LPA to provide a response
|
|
312
|
+
"""
|
|
313
|
+
caseDecisionOutcomeDate: AwareDatetime | None = Field(
|
|
314
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
315
|
+
)
|
|
316
|
+
"""
|
|
317
|
+
The date of the appeal decision
|
|
318
|
+
"""
|
|
319
|
+
caseDecisionOutcome: CaseDecisionOutcome | None
|
|
320
|
+
"""
|
|
321
|
+
The final outcome for the decision
|
|
322
|
+
"""
|
|
323
|
+
caseCompletedDate: AwareDatetime | None = Field(
|
|
324
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
325
|
+
)
|
|
326
|
+
"""
|
|
327
|
+
The date the appeal decision letter was issued
|
|
328
|
+
"""
|
|
329
|
+
lpaCode: str | None = Field(..., examples=["Q9999"])
|
|
330
|
+
"""
|
|
331
|
+
A unique identifier for the Local Planning Authority
|
|
332
|
+
"""
|
|
333
|
+
caseOfficerId: str | None
|
|
334
|
+
"""
|
|
335
|
+
Unique identifier for the case officer assigned to the case
|
|
336
|
+
"""
|
|
337
|
+
inspectorId: str | None
|
|
338
|
+
"""
|
|
339
|
+
Unique identifier for the inspector assigned to the case
|
|
340
|
+
"""
|
|
341
|
+
padsSapId: str | None
|
|
342
|
+
"""
|
|
343
|
+
padsSapId for PADS inspectors
|
|
344
|
+
"""
|
|
345
|
+
allocationLevel: AllocationLevel | None
|
|
346
|
+
"""
|
|
347
|
+
A level used for allocation purposes
|
|
348
|
+
"""
|
|
349
|
+
allocationBand: AllocationBand | None
|
|
350
|
+
"""
|
|
351
|
+
A band used for allocation purposes
|
|
352
|
+
"""
|
|
353
|
+
caseSpecialisms: list[str] | None = Field(..., examples=[["Environmental", "SSSI"]])
|
|
354
|
+
"""
|
|
355
|
+
A list of specialisms for allocation purposes
|
|
356
|
+
"""
|
|
357
|
+
siteAddressLine1: str | None = Field(..., examples=["96 The Avenue"])
|
|
358
|
+
"""
|
|
359
|
+
First line of address for the appeal site
|
|
360
|
+
"""
|
|
361
|
+
siteAddressLine2: str | None
|
|
362
|
+
"""
|
|
363
|
+
Second line of address for the appeal site
|
|
364
|
+
"""
|
|
365
|
+
siteAddressTown: str | None = Field(..., examples=["Maidstone"])
|
|
366
|
+
"""
|
|
367
|
+
Town / City of the site address
|
|
368
|
+
"""
|
|
369
|
+
siteAddressCounty: str | None = Field(..., examples=["Kent"])
|
|
370
|
+
"""
|
|
371
|
+
County of the site address
|
|
372
|
+
"""
|
|
373
|
+
siteAddressPostcode: str | None = Field(..., examples=["MD21 5XY"])
|
|
374
|
+
"""
|
|
375
|
+
Postal code of the site address
|
|
376
|
+
"""
|
|
377
|
+
caseManagementConferenceDate: AwareDatetime | None = Field(
|
|
378
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
379
|
+
)
|
|
380
|
+
"""
|
|
381
|
+
The date of the Case Management Conference (CMC)
|
|
382
|
+
"""
|
|
383
|
+
statementDueDate: AwareDatetime | None = Field(
|
|
384
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
385
|
+
)
|
|
386
|
+
"""
|
|
387
|
+
Deadline for statements
|
|
388
|
+
"""
|
|
389
|
+
proofsOfEvidenceDueDate: AwareDatetime | None = Field(
|
|
390
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
391
|
+
)
|
|
392
|
+
"""
|
|
393
|
+
Deadline for proofs of evidence
|
|
394
|
+
"""
|
|
395
|
+
finalCommentsDueDate: AwareDatetime | None = Field(
|
|
396
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
397
|
+
)
|
|
398
|
+
"""
|
|
399
|
+
Deadline for final comments
|
|
400
|
+
"""
|
|
401
|
+
interestedPartyRepsDueDate: AwareDatetime | None = Field(
|
|
402
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
403
|
+
)
|
|
404
|
+
"""
|
|
405
|
+
Deadline for interested party representations
|
|
406
|
+
"""
|
|
407
|
+
statementOfCommonGroundDueDate: AwareDatetime | None = Field(
|
|
408
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
409
|
+
)
|
|
410
|
+
"""
|
|
411
|
+
Deadline for statement of common ground
|
|
412
|
+
"""
|
|
413
|
+
planningObligationDueDate: AwareDatetime | None = Field(
|
|
414
|
+
None, examples=["2026-07-27T20:30:00.000Z"]
|
|
415
|
+
)
|
|
416
|
+
"""
|
|
417
|
+
Deadline for planning obligation
|
|
418
|
+
"""
|
|
419
|
+
typeOfPlanningApplication: TypeOfPlanningApplication | None = None
|
|
420
|
+
"""
|
|
421
|
+
The type of application or notice that is the subject of the appeal
|
|
422
|
+
"""
|
|
423
|
+
caseSubType: CaseSubType | None = None
|
|
424
|
+
"""
|
|
425
|
+
Sub-type categorization for generic/low-volume appeals
|
|
426
|
+
"""
|
|
427
|
+
caseWithdrawnDate: AwareDatetime | None = Field(
|
|
428
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
429
|
+
)
|
|
430
|
+
"""
|
|
431
|
+
The date the appeal was withdrawn by the appellant
|
|
432
|
+
"""
|
|
433
|
+
caseTransferredDate: AwareDatetime | None = Field(
|
|
434
|
+
..., examples=["2026-07-27T20:30:00.000Z"]
|
|
435
|
+
)
|
|
436
|
+
"""
|
|
437
|
+
The date the appeal was transferred to a new case of a different type
|
|
438
|
+
"""
|
|
439
|
+
enforcementNoticeReference: str | None = Field(None, examples=["myC45e-123"])
|
|
440
|
+
"""
|
|
441
|
+
The reference number of the enforcement notice
|
|
442
|
+
"""
|
|
443
|
+
applicationReference: str | None = Field(None, examples=["43010/APP/1/290572"])
|
|
444
|
+
"""
|
|
445
|
+
The unique identifier of the LPA or regulator application
|
|
446
|
+
"""
|
|
447
|
+
linkedCaseStatus: LinkedCaseStatus | None = None
|
|
448
|
+
"""
|
|
449
|
+
Indicates if the case is linked, and the type of relationship
|
|
450
|
+
"""
|
|
451
|
+
leadCaseReference: str | None = Field(None, examples=["6000001"])
|
|
452
|
+
"""
|
|
453
|
+
The reference of the lead case, if the case is a child case
|
|
454
|
+
"""
|
|
455
|
+
environmentalPermitSubtypes: EnvironmentalPermitSubtypes | None = None
|
|
456
|
+
"""
|
|
457
|
+
Case sub-division applying to Environmental Permitting caseSubType
|
|
458
|
+
"""
|
|
@@ -55,6 +55,11 @@ class CaseType(StrEnum):
|
|
|
55
55
|
Z = "Z"
|
|
56
56
|
ZA = "ZA"
|
|
57
57
|
ZP = "ZP"
|
|
58
|
+
TPO = "TPO"
|
|
59
|
+
TRN = "TRN"
|
|
60
|
+
HH = "HH"
|
|
61
|
+
HR = "HR"
|
|
62
|
+
ENV = "ENV"
|
|
58
63
|
|
|
59
64
|
|
|
60
65
|
class CaseProcedure(Enum):
|
|
@@ -141,6 +146,7 @@ class CaseDecisionOutcome(Enum):
|
|
|
141
146
|
planning_permission_granted = "planning_permission_granted"
|
|
142
147
|
quashed_on_legal_grounds = "quashed_on_legal_grounds"
|
|
143
148
|
notice_varied_and_upheld = "notice_varied_and_upheld"
|
|
149
|
+
notice_quashed = "notice_quashed"
|
|
144
150
|
NoneType_None = None
|
|
145
151
|
|
|
146
152
|
|
|
@@ -288,6 +294,13 @@ class TypeOfPlanningApplication(Enum):
|
|
|
288
294
|
lawful_development_certificate = "lawful-development-certificate"
|
|
289
295
|
discontinuance_notice = "discontinuance-notice"
|
|
290
296
|
permission_in_principle = "permission-in-principle"
|
|
297
|
+
tree_preservation_order = "tree-preservation-order"
|
|
298
|
+
tree_replacement_notice = "tree-replacement-notice"
|
|
299
|
+
high_hedge_appeal = "high-hedge-appeal"
|
|
300
|
+
hedgerows_appeal = "hedgerows-appeal"
|
|
301
|
+
community_infrastructure_levy = "community-infrastructure-levy"
|
|
302
|
+
planning_obligation = "planning-obligation"
|
|
303
|
+
environmental = "environmental"
|
|
291
304
|
NoneType_None = None
|
|
292
305
|
|
|
293
306
|
|