@planning-inspectorate/data-model 2.50.0 → 2.51.1
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/commitlint.config.js +3 -8
- package/docs/address.md +1 -1
- package/docs/nsip-exam-timetable-defs-event.md +1 -0
- package/docs/nsip-exam-timetable.md +1 -0
- package/eslint.config.js +3 -20
- package/load-test/appeals/generate-appeals-messages.js +1 -1
- package/load-test/appeals/run-load-script.js +2 -2
- package/load-test/service-bus-client.js +1 -1
- package/package.json +5 -2
- package/pins_data_model/gen_models.py +2 -1
- package/pins_data_model/models/model_address.py +3 -3
- package/pins_data_model/models/model_appeal_document.py +11 -11
- package/pins_data_model/models/model_appeal_event.py +4 -4
- package/pins_data_model/models/model_appeal_event_estimate.py +3 -3
- package/pins_data_model/models/model_appeal_has.py +111 -93
- package/pins_data_model/models/model_appeal_representation.py +12 -12
- package/pins_data_model/models/model_appeal_s78.py +246 -228
- package/pins_data_model/models/model_application_update.py +2 -2
- package/pins_data_model/models/model_applications_application.py +4 -4
- package/pins_data_model/models/model_applications_application_update.py +2 -2
- package/pins_data_model/models/model_applications_notify_email.py +2 -2
- package/pins_data_model/models/model_applications_representation.py +4 -4
- package/pins_data_model/models/model_dart_response.py +1 -1
- package/pins_data_model/models/model_folder.py +3 -3
- package/pins_data_model/models/model_nsip_document.py +12 -12
- package/pins_data_model/models/model_nsip_exam_timetable.py +3 -2
- package/pins_data_model/models/model_nsip_invoice.py +2 -2
- package/pins_data_model/models/model_nsip_project.py +19 -19
- package/pins_data_model/models/model_nsip_project_update.py +5 -5
- package/pins_data_model/models/model_nsip_representation.py +7 -7
- package/pins_data_model/models/model_nsip_subscription.py +6 -6
- package/pins_data_model/models/model_pins_inspector.py +5 -5
- package/pins_data_model/models/model_s51_advice.py +7 -7
- package/pins_data_model/models/model_service_user.py +2 -2
- package/prettier.config.js +13 -0
- package/requirements.txt +1 -1
- package/schemas/address.schema.json +1 -1
- package/schemas/nsip-exam-timetable.schema.json +2 -1
- package/src/index.cjs +1 -1
- package/src/lib/gen-docs.js +1 -1
- package/src/lib/gen-enum-impl.test.js +1 -1
- package/src/lib/gen-enums.js +1 -1
- package/src/lib/gen-types.js +2 -2
- package/src/lib/load.js +1 -1
- package/src/schemas.d.ts +30 -2
- package/tests/appeals/appeal-event.test.js +2 -2
- package/tests/appeals/appeal-has.test.js +2 -2
- package/tests/appeals/appeal-s78.test.js +2 -2
- package/tests/appeals/commands/adverts-questionnaire.test.js +2 -2
- package/tests/appeals/commands/adverts-submission.test.js +2 -2
- package/tests/appeals/commands/appeal-representation-submission.test.js +2 -2
- package/tests/appeals/commands/cas-adverts-questionnaire.test.js +2 -2
- package/tests/appeals/commands/cas-adverts-submission.test.js +2 -2
- package/tests/appeals/commands/enforcement-listed-questionnaire.test.js +2 -2
- package/tests/appeals/commands/enforcement-listed-submission.test.js +2 -2
- package/tests/appeals/commands/enforcement-notice-submission.test.js +2 -2
- package/tests/appeals/commands/enforcement-questionnaire.test.js +2 -2
- package/tests/appeals/commands/has-questionnaire.test.js +2 -2
- package/tests/appeals/commands/has-submission.test.js +2 -2
- package/tests/appeals/commands/ldc-questionnaire.test.js +2 -2
- package/tests/appeals/commands/ldc-submission.test.js +2 -2
- package/tests/appeals/commands/s20-questionnaire.test.js +2 -2
- package/tests/appeals/commands/s78-questionnaire.test.js +2 -2
- package/tests/appeals/commands/s78-submission.test.js +2 -2
- package/tests/appeals/expedited-appeals.test.js +2 -2
- package/tests/schemas.test.js +1 -1
- package/.prettierrc +0 -19
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from enum import Enum
|
|
6
|
+
from enum import Enum, StrEnum
|
|
7
7
|
from uuid import UUID
|
|
8
8
|
|
|
9
9
|
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel, constr
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class CaseStatus(
|
|
12
|
+
class CaseStatus(StrEnum):
|
|
13
13
|
"""
|
|
14
14
|
The processing status for the appeal
|
|
15
15
|
"""
|
|
@@ -29,7 +29,7 @@ class CaseStatus(Enum):
|
|
|
29
29
|
awaiting_event = "awaiting_event"
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
class CaseType(
|
|
32
|
+
class CaseType(StrEnum):
|
|
33
33
|
"""
|
|
34
34
|
The internal code for an appeal type, e.g. D (Householder)
|
|
35
35
|
"""
|
|
@@ -134,7 +134,7 @@ class CaseDecisionOutcome(Enum):
|
|
|
134
134
|
NoneType_None = None
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
class ApplicationDecision(
|
|
137
|
+
class ApplicationDecision(StrEnum):
|
|
138
138
|
"""
|
|
139
139
|
The outcome of the original LPA decision
|
|
140
140
|
"""
|
|
@@ -177,7 +177,7 @@ class KnowsAllOwners(Enum):
|
|
|
177
177
|
NoneType_None = None
|
|
178
178
|
|
|
179
179
|
|
|
180
|
-
class NotificationMethodEnum(
|
|
180
|
+
class NotificationMethodEnum(StrEnum):
|
|
181
181
|
notice = "notice"
|
|
182
182
|
letter = "letter"
|
|
183
183
|
advert = "advert"
|
|
@@ -192,7 +192,7 @@ class NeighbouringSiteAddress(BaseModel):
|
|
|
192
192
|
"""
|
|
193
193
|
First line of address of the site
|
|
194
194
|
"""
|
|
195
|
-
neighbouringSiteAddressLine2: str | None
|
|
195
|
+
neighbouringSiteAddressLine2: str | None
|
|
196
196
|
"""
|
|
197
197
|
Second line of address of the site
|
|
198
198
|
"""
|
|
@@ -258,33 +258,18 @@ class AdvertDetail(BaseModel):
|
|
|
258
258
|
model_config = ConfigDict(
|
|
259
259
|
extra="allow",
|
|
260
260
|
)
|
|
261
|
-
advertType: AdvertType
|
|
262
|
-
isAdvertInPosition: bool | None
|
|
261
|
+
advertType: AdvertType | None
|
|
262
|
+
isAdvertInPosition: bool | None
|
|
263
263
|
"""
|
|
264
264
|
Is the advertisement in position?
|
|
265
265
|
"""
|
|
266
|
-
isSiteOnHighwayLand: bool | None
|
|
267
|
-
"""
|
|
268
|
-
Is the site on highway land?
|
|
269
|
-
"""
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
class AdvertDetail1(BaseModel):
|
|
273
|
-
model_config = ConfigDict(
|
|
274
|
-
extra="allow",
|
|
275
|
-
)
|
|
276
|
-
advertType: AdvertType
|
|
277
|
-
isAdvertInPosition: bool | None = None
|
|
278
|
-
"""
|
|
279
|
-
Is the advertisement in position?
|
|
280
|
-
"""
|
|
281
|
-
isSiteOnHighwayLand: bool | None = None
|
|
266
|
+
isSiteOnHighwayLand: bool | None
|
|
282
267
|
"""
|
|
283
268
|
Is the site on highway land?
|
|
284
269
|
"""
|
|
285
270
|
|
|
286
271
|
|
|
287
|
-
class
|
|
272
|
+
class Value(Enum):
|
|
288
273
|
adopted_a_new_local_plan = "adopted-a-new-local-plan"
|
|
289
274
|
national_policy_change = "national-policy-change"
|
|
290
275
|
court_judgement = "court-judgement"
|
|
@@ -293,12 +278,12 @@ class SignificantChangesAffectingApplication(Enum):
|
|
|
293
278
|
|
|
294
279
|
|
|
295
280
|
class SignificantChangesAffectingApplicationAppellantItem(BaseModel):
|
|
296
|
-
value:
|
|
281
|
+
value: Value | None
|
|
297
282
|
comment: str | None = None
|
|
298
283
|
|
|
299
284
|
|
|
300
285
|
class SignificantChangesAffectingApplicationLpaItem(BaseModel):
|
|
301
|
-
value:
|
|
286
|
+
value: Value | None
|
|
302
287
|
comment: str | None = None
|
|
303
288
|
|
|
304
289
|
|
|
@@ -332,7 +317,7 @@ class AppealHasCase1(BaseModel):
|
|
|
332
317
|
"""
|
|
333
318
|
The internal code for an appeal type, e.g. D (Householder)
|
|
334
319
|
"""
|
|
335
|
-
caseProcedure: CaseProcedure
|
|
320
|
+
caseProcedure: CaseProcedure | None
|
|
336
321
|
"""
|
|
337
322
|
The type of procedure for the appeal
|
|
338
323
|
"""
|
|
@@ -340,23 +325,23 @@ class AppealHasCase1(BaseModel):
|
|
|
340
325
|
"""
|
|
341
326
|
A unique identifier for the Local Planning Authority
|
|
342
327
|
"""
|
|
343
|
-
caseOfficerId: str | None
|
|
328
|
+
caseOfficerId: str | None
|
|
344
329
|
"""
|
|
345
330
|
Unique identifier for the case officer assigned to the case
|
|
346
331
|
"""
|
|
347
|
-
inspectorId: str | None
|
|
332
|
+
inspectorId: str | None
|
|
348
333
|
"""
|
|
349
334
|
Unique identifier for the inspector assigned to the case
|
|
350
335
|
"""
|
|
351
|
-
allocationLevel: AllocationLevel
|
|
336
|
+
allocationLevel: AllocationLevel | None
|
|
352
337
|
"""
|
|
353
338
|
A level used for allocation purposes
|
|
354
339
|
"""
|
|
355
|
-
allocationBand: AllocationBand
|
|
340
|
+
allocationBand: AllocationBand | None
|
|
356
341
|
"""
|
|
357
342
|
A band used for allocation purposes
|
|
358
343
|
"""
|
|
359
|
-
caseSpecialisms: list[str] = Field(
|
|
344
|
+
caseSpecialisms: list[str] | None = Field(
|
|
360
345
|
..., examples=[["Access", "Listed building and enforcement"], ["Schedule 1"]]
|
|
361
346
|
)
|
|
362
347
|
"""
|
|
@@ -386,15 +371,15 @@ class AppealHasCase1(BaseModel):
|
|
|
386
371
|
"""
|
|
387
372
|
The date the appeal was validated in the back-office
|
|
388
373
|
"""
|
|
389
|
-
caseValidationOutcome: CaseValidationOutcome
|
|
374
|
+
caseValidationOutcome: CaseValidationOutcome | None
|
|
390
375
|
"""
|
|
391
376
|
The outcome of the validation action
|
|
392
377
|
"""
|
|
393
|
-
caseValidationInvalidDetails: list[str]
|
|
378
|
+
caseValidationInvalidDetails: list[str] | None
|
|
394
379
|
"""
|
|
395
380
|
A list of reasons why the appeal is invalid
|
|
396
381
|
"""
|
|
397
|
-
caseValidationIncompleteDetails: list[str]
|
|
382
|
+
caseValidationIncompleteDetails: list[str] | None
|
|
398
383
|
"""
|
|
399
384
|
A list of reasons why the appeal is incomplete
|
|
400
385
|
"""
|
|
@@ -416,7 +401,7 @@ class AppealHasCase1(BaseModel):
|
|
|
416
401
|
"""
|
|
417
402
|
A date indicating when the case was published
|
|
418
403
|
"""
|
|
419
|
-
linkedCaseStatus: LinkedCaseStatus
|
|
404
|
+
linkedCaseStatus: LinkedCaseStatus | None
|
|
420
405
|
"""
|
|
421
406
|
Indicates if the case is linked, and the type of relationship
|
|
422
407
|
"""
|
|
@@ -448,7 +433,7 @@ class AppealHasCase1(BaseModel):
|
|
|
448
433
|
"""
|
|
449
434
|
The date indicating when the questionnaire review was completed and the questionnaire published
|
|
450
435
|
"""
|
|
451
|
-
lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome
|
|
436
|
+
lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome | None
|
|
452
437
|
"""
|
|
453
438
|
The outcome of the validation action
|
|
454
439
|
"""
|
|
@@ -458,7 +443,7 @@ class AppealHasCase1(BaseModel):
|
|
|
458
443
|
"""
|
|
459
444
|
The date the LPA response was validated
|
|
460
445
|
"""
|
|
461
|
-
lpaQuestionnaireValidationDetails: list[str]
|
|
446
|
+
lpaQuestionnaireValidationDetails: list[str] | None
|
|
462
447
|
"""
|
|
463
448
|
A list of reasons why the questionnaire is incomplete
|
|
464
449
|
"""
|
|
@@ -502,7 +487,7 @@ class AppealHasCase1(BaseModel):
|
|
|
502
487
|
"""
|
|
503
488
|
The date the appeal decision was published
|
|
504
489
|
"""
|
|
505
|
-
caseDecisionOutcome: CaseDecisionOutcome
|
|
490
|
+
caseDecisionOutcome: CaseDecisionOutcome | None
|
|
506
491
|
"""
|
|
507
492
|
The final outcome for the decision
|
|
508
493
|
"""
|
|
@@ -512,7 +497,7 @@ class AppealHasCase1(BaseModel):
|
|
|
512
497
|
"""
|
|
513
498
|
The date the appeal decision letter
|
|
514
499
|
"""
|
|
515
|
-
enforcementNotice: bool | None
|
|
500
|
+
enforcementNotice: bool | None
|
|
516
501
|
"""
|
|
517
502
|
Indicates if an enforcement notice is the reason for the appeal
|
|
518
503
|
"""
|
|
@@ -566,11 +551,11 @@ class AppealHasCase1(BaseModel):
|
|
|
566
551
|
"""
|
|
567
552
|
Postal code of the site address
|
|
568
553
|
"""
|
|
569
|
-
siteAccessDetails: list[str]
|
|
554
|
+
siteAccessDetails: list[str] | None
|
|
570
555
|
"""
|
|
571
556
|
Provided information on site accessibility
|
|
572
557
|
"""
|
|
573
|
-
siteSafetyDetails: list[str]
|
|
558
|
+
siteSafetyDetails: list[str] | None
|
|
574
559
|
"""
|
|
575
560
|
Provided information on site health and safety
|
|
576
561
|
"""
|
|
@@ -582,15 +567,15 @@ class AppealHasCase1(BaseModel):
|
|
|
582
567
|
"""
|
|
583
568
|
The floor space, in square meters
|
|
584
569
|
"""
|
|
585
|
-
isCorrectAppealType: bool | None
|
|
570
|
+
isCorrectAppealType: bool | None
|
|
586
571
|
"""
|
|
587
572
|
Indicates if the LPA considers the appeal type appropriate
|
|
588
573
|
"""
|
|
589
|
-
isGreenBelt: bool | None
|
|
574
|
+
isGreenBelt: bool | None
|
|
590
575
|
"""
|
|
591
576
|
Indicates if the site is in a green belt
|
|
592
577
|
"""
|
|
593
|
-
inConservationArea: bool | None
|
|
578
|
+
inConservationArea: bool | None
|
|
594
579
|
"""
|
|
595
580
|
Indicates if the site is in a conservation area
|
|
596
581
|
"""
|
|
@@ -692,33 +677,33 @@ class AppealHasCase1(BaseModel):
|
|
|
692
677
|
"""
|
|
693
678
|
The target date for case completion
|
|
694
679
|
"""
|
|
695
|
-
ownsAllLand: bool | None
|
|
680
|
+
ownsAllLand: bool | None
|
|
696
681
|
"""
|
|
697
682
|
Indicates if the appellant has complete ownership of the site
|
|
698
683
|
"""
|
|
699
|
-
ownsSomeLand: bool | None
|
|
684
|
+
ownsSomeLand: bool | None
|
|
700
685
|
"""
|
|
701
686
|
Indicates if the appellant has partial ownership of the site
|
|
702
687
|
"""
|
|
703
|
-
knowsOtherOwners: KnowsOtherOwners
|
|
688
|
+
knowsOtherOwners: KnowsOtherOwners | None
|
|
704
689
|
"""
|
|
705
690
|
Indicates if the appellant knows other owners of the site
|
|
706
691
|
"""
|
|
707
|
-
knowsAllOwners: KnowsAllOwners
|
|
692
|
+
knowsAllOwners: KnowsAllOwners | None
|
|
708
693
|
"""
|
|
709
694
|
Indicates if the appellant knows all owners of the site
|
|
710
695
|
"""
|
|
711
|
-
advertisedAppeal: bool | None
|
|
696
|
+
advertisedAppeal: bool | None
|
|
712
697
|
"""
|
|
713
698
|
Indicates if the appellant has advertised the appeal to the LPA decision
|
|
714
699
|
"""
|
|
715
|
-
notificationMethod: list[NotificationMethodEnum] = Field(
|
|
700
|
+
notificationMethod: list[NotificationMethodEnum] | None = Field(
|
|
716
701
|
..., examples=[["notice", "letter"], ["advert"]]
|
|
717
702
|
)
|
|
718
703
|
"""
|
|
719
704
|
The methods used to notify relevant parties
|
|
720
705
|
"""
|
|
721
|
-
ownersInformed: bool | None
|
|
706
|
+
ownersInformed: bool | None
|
|
722
707
|
"""
|
|
723
708
|
Indicates if the appellant has informed other owners of the site
|
|
724
709
|
"""
|
|
@@ -728,7 +713,7 @@ class AppealHasCase1(BaseModel):
|
|
|
728
713
|
"""
|
|
729
714
|
The original description of the development, as provided by the appellant
|
|
730
715
|
"""
|
|
731
|
-
changedDevelopmentDescription: bool | None
|
|
716
|
+
changedDevelopmentDescription: bool | None
|
|
732
717
|
"""
|
|
733
718
|
Indicates that the LPA has changed the development description
|
|
734
719
|
"""
|
|
@@ -739,11 +724,11 @@ class AppealHasCase1(BaseModel):
|
|
|
739
724
|
"""
|
|
740
725
|
New conditions details provided by the LPA
|
|
741
726
|
"""
|
|
742
|
-
nearbyCaseReferences: list[str]
|
|
727
|
+
nearbyCaseReferences: list[str] | None
|
|
743
728
|
"""
|
|
744
729
|
A list of related case references known to the appellant and the LPA
|
|
745
730
|
"""
|
|
746
|
-
neighbouringSiteAddresses: list[NeighbouringSiteAddress]
|
|
731
|
+
neighbouringSiteAddresses: list[NeighbouringSiteAddress] | None
|
|
747
732
|
"""
|
|
748
733
|
A list of neighbouring site addresses
|
|
749
734
|
"""
|
|
@@ -751,15 +736,15 @@ class AppealHasCase1(BaseModel):
|
|
|
751
736
|
"""
|
|
752
737
|
A general reason given for the need to visit any neighbours
|
|
753
738
|
"""
|
|
754
|
-
affectedListedBuildingNumbers: list[str]
|
|
739
|
+
affectedListedBuildingNumbers: list[str] | None
|
|
755
740
|
"""
|
|
756
741
|
A list of affected listed building IDs from Historic England
|
|
757
742
|
"""
|
|
758
|
-
appellantCostsAppliedFor: bool | None
|
|
743
|
+
appellantCostsAppliedFor: bool | None
|
|
759
744
|
"""
|
|
760
745
|
Indicates if the appellant has applied for costs
|
|
761
746
|
"""
|
|
762
|
-
lpaCostsAppliedFor: bool | None
|
|
747
|
+
lpaCostsAppliedFor: bool | None
|
|
763
748
|
"""
|
|
764
749
|
Indicates if the appellant has applied for costs
|
|
765
750
|
"""
|
|
@@ -812,6 +797,31 @@ class AppealHasCase1(BaseModel):
|
|
|
812
797
|
"""
|
|
813
798
|
|
|
814
799
|
|
|
800
|
+
class AdvertDetail1(BaseModel):
|
|
801
|
+
model_config = ConfigDict(
|
|
802
|
+
extra="allow",
|
|
803
|
+
)
|
|
804
|
+
advertType: AdvertType | None
|
|
805
|
+
isAdvertInPosition: bool | None
|
|
806
|
+
"""
|
|
807
|
+
Is the advertisement in position?
|
|
808
|
+
"""
|
|
809
|
+
isSiteOnHighwayLand: bool | None
|
|
810
|
+
"""
|
|
811
|
+
Is the site on highway land?
|
|
812
|
+
"""
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
class SignificantChangesAffectingApplicationAppellantItem1(BaseModel):
|
|
816
|
+
value: Value | None
|
|
817
|
+
comment: str | None = None
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
class SignificantChangesAffectingApplicationLpaItem1(BaseModel):
|
|
821
|
+
value: Value | None
|
|
822
|
+
comment: str | None = None
|
|
823
|
+
|
|
824
|
+
|
|
815
825
|
class AppealHasCase2(BaseModel):
|
|
816
826
|
"""
|
|
817
827
|
Group A - Schema defining the metadata for an appeal
|
|
@@ -842,7 +852,7 @@ class AppealHasCase2(BaseModel):
|
|
|
842
852
|
"""
|
|
843
853
|
The internal code for an appeal type, e.g. D (Householder)
|
|
844
854
|
"""
|
|
845
|
-
caseProcedure: CaseProcedure
|
|
855
|
+
caseProcedure: CaseProcedure | None
|
|
846
856
|
"""
|
|
847
857
|
The type of procedure for the appeal
|
|
848
858
|
"""
|
|
@@ -850,23 +860,23 @@ class AppealHasCase2(BaseModel):
|
|
|
850
860
|
"""
|
|
851
861
|
A unique identifier for the Local Planning Authority
|
|
852
862
|
"""
|
|
853
|
-
caseOfficerId: str | None
|
|
863
|
+
caseOfficerId: str | None
|
|
854
864
|
"""
|
|
855
865
|
Unique identifier for the case officer assigned to the case
|
|
856
866
|
"""
|
|
857
|
-
inspectorId: str | None
|
|
867
|
+
inspectorId: str | None
|
|
858
868
|
"""
|
|
859
869
|
Unique identifier for the inspector assigned to the case
|
|
860
870
|
"""
|
|
861
|
-
allocationLevel: AllocationLevel
|
|
871
|
+
allocationLevel: AllocationLevel | None
|
|
862
872
|
"""
|
|
863
873
|
A level used for allocation purposes
|
|
864
874
|
"""
|
|
865
|
-
allocationBand: AllocationBand
|
|
875
|
+
allocationBand: AllocationBand | None
|
|
866
876
|
"""
|
|
867
877
|
A band used for allocation purposes
|
|
868
878
|
"""
|
|
869
|
-
caseSpecialisms: list[str] = Field(
|
|
879
|
+
caseSpecialisms: list[str] | None = Field(
|
|
870
880
|
..., examples=[["Access", "Listed building and enforcement"], ["Schedule 1"]]
|
|
871
881
|
)
|
|
872
882
|
"""
|
|
@@ -896,15 +906,15 @@ class AppealHasCase2(BaseModel):
|
|
|
896
906
|
"""
|
|
897
907
|
The date the appeal was validated in the back-office
|
|
898
908
|
"""
|
|
899
|
-
caseValidationOutcome: CaseValidationOutcome
|
|
909
|
+
caseValidationOutcome: CaseValidationOutcome | None
|
|
900
910
|
"""
|
|
901
911
|
The outcome of the validation action
|
|
902
912
|
"""
|
|
903
|
-
caseValidationInvalidDetails: list[str]
|
|
913
|
+
caseValidationInvalidDetails: list[str] | None
|
|
904
914
|
"""
|
|
905
915
|
A list of reasons why the appeal is invalid
|
|
906
916
|
"""
|
|
907
|
-
caseValidationIncompleteDetails: list[str]
|
|
917
|
+
caseValidationIncompleteDetails: list[str] | None
|
|
908
918
|
"""
|
|
909
919
|
A list of reasons why the appeal is incomplete
|
|
910
920
|
"""
|
|
@@ -926,7 +936,7 @@ class AppealHasCase2(BaseModel):
|
|
|
926
936
|
"""
|
|
927
937
|
A date indicating when the case was published
|
|
928
938
|
"""
|
|
929
|
-
linkedCaseStatus: LinkedCaseStatus
|
|
939
|
+
linkedCaseStatus: LinkedCaseStatus | None
|
|
930
940
|
"""
|
|
931
941
|
Indicates if the case is linked, and the type of relationship
|
|
932
942
|
"""
|
|
@@ -958,7 +968,7 @@ class AppealHasCase2(BaseModel):
|
|
|
958
968
|
"""
|
|
959
969
|
The date indicating when the questionnaire review was completed and the questionnaire published
|
|
960
970
|
"""
|
|
961
|
-
lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome
|
|
971
|
+
lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome | None
|
|
962
972
|
"""
|
|
963
973
|
The outcome of the validation action
|
|
964
974
|
"""
|
|
@@ -968,7 +978,7 @@ class AppealHasCase2(BaseModel):
|
|
|
968
978
|
"""
|
|
969
979
|
The date the LPA response was validated
|
|
970
980
|
"""
|
|
971
|
-
lpaQuestionnaireValidationDetails: list[str]
|
|
981
|
+
lpaQuestionnaireValidationDetails: list[str] | None
|
|
972
982
|
"""
|
|
973
983
|
A list of reasons why the questionnaire is incomplete
|
|
974
984
|
"""
|
|
@@ -1012,7 +1022,7 @@ class AppealHasCase2(BaseModel):
|
|
|
1012
1022
|
"""
|
|
1013
1023
|
The date the appeal decision was published
|
|
1014
1024
|
"""
|
|
1015
|
-
caseDecisionOutcome: CaseDecisionOutcome
|
|
1025
|
+
caseDecisionOutcome: CaseDecisionOutcome | None
|
|
1016
1026
|
"""
|
|
1017
1027
|
The final outcome for the decision
|
|
1018
1028
|
"""
|
|
@@ -1022,7 +1032,7 @@ class AppealHasCase2(BaseModel):
|
|
|
1022
1032
|
"""
|
|
1023
1033
|
The date the appeal decision letter
|
|
1024
1034
|
"""
|
|
1025
|
-
enforcementNotice: bool | None
|
|
1035
|
+
enforcementNotice: bool | None
|
|
1026
1036
|
"""
|
|
1027
1037
|
Indicates if an enforcement notice is the reason for the appeal
|
|
1028
1038
|
"""
|
|
@@ -1076,11 +1086,11 @@ class AppealHasCase2(BaseModel):
|
|
|
1076
1086
|
"""
|
|
1077
1087
|
Postal code of the site address
|
|
1078
1088
|
"""
|
|
1079
|
-
siteAccessDetails: list[str]
|
|
1089
|
+
siteAccessDetails: list[str] | None
|
|
1080
1090
|
"""
|
|
1081
1091
|
Provided information on site accessibility
|
|
1082
1092
|
"""
|
|
1083
|
-
siteSafetyDetails: list[str]
|
|
1093
|
+
siteSafetyDetails: list[str] | None
|
|
1084
1094
|
"""
|
|
1085
1095
|
Provided information on site health and safety
|
|
1086
1096
|
"""
|
|
@@ -1092,15 +1102,15 @@ class AppealHasCase2(BaseModel):
|
|
|
1092
1102
|
"""
|
|
1093
1103
|
The floor space, in square meters
|
|
1094
1104
|
"""
|
|
1095
|
-
isCorrectAppealType: bool | None
|
|
1105
|
+
isCorrectAppealType: bool | None
|
|
1096
1106
|
"""
|
|
1097
1107
|
Indicates if the LPA considers the appeal type appropriate
|
|
1098
1108
|
"""
|
|
1099
|
-
isGreenBelt: bool | None
|
|
1109
|
+
isGreenBelt: bool | None
|
|
1100
1110
|
"""
|
|
1101
1111
|
Indicates if the site is in a green belt
|
|
1102
1112
|
"""
|
|
1103
|
-
inConservationArea: bool | None
|
|
1113
|
+
inConservationArea: bool | None
|
|
1104
1114
|
"""
|
|
1105
1115
|
Indicates if the site is in a conservation area
|
|
1106
1116
|
"""
|
|
@@ -1202,33 +1212,33 @@ class AppealHasCase2(BaseModel):
|
|
|
1202
1212
|
"""
|
|
1203
1213
|
The target date for case completion
|
|
1204
1214
|
"""
|
|
1205
|
-
ownsAllLand: bool | None
|
|
1215
|
+
ownsAllLand: bool | None
|
|
1206
1216
|
"""
|
|
1207
1217
|
Indicates if the appellant has complete ownership of the site
|
|
1208
1218
|
"""
|
|
1209
|
-
ownsSomeLand: bool | None
|
|
1219
|
+
ownsSomeLand: bool | None
|
|
1210
1220
|
"""
|
|
1211
1221
|
Indicates if the appellant has partial ownership of the site
|
|
1212
1222
|
"""
|
|
1213
|
-
knowsOtherOwners: KnowsOtherOwners
|
|
1223
|
+
knowsOtherOwners: KnowsOtherOwners | None
|
|
1214
1224
|
"""
|
|
1215
1225
|
Indicates if the appellant knows other owners of the site
|
|
1216
1226
|
"""
|
|
1217
|
-
knowsAllOwners: KnowsAllOwners
|
|
1227
|
+
knowsAllOwners: KnowsAllOwners | None
|
|
1218
1228
|
"""
|
|
1219
1229
|
Indicates if the appellant knows all owners of the site
|
|
1220
1230
|
"""
|
|
1221
|
-
advertisedAppeal: bool | None
|
|
1231
|
+
advertisedAppeal: bool | None
|
|
1222
1232
|
"""
|
|
1223
1233
|
Indicates if the appellant has advertised the appeal to the LPA decision
|
|
1224
1234
|
"""
|
|
1225
|
-
notificationMethod: list[NotificationMethodEnum] = Field(
|
|
1235
|
+
notificationMethod: list[NotificationMethodEnum] | None = Field(
|
|
1226
1236
|
..., examples=[["notice", "letter"], ["advert"]]
|
|
1227
1237
|
)
|
|
1228
1238
|
"""
|
|
1229
1239
|
The methods used to notify relevant parties
|
|
1230
1240
|
"""
|
|
1231
|
-
ownersInformed: bool | None
|
|
1241
|
+
ownersInformed: bool | None
|
|
1232
1242
|
"""
|
|
1233
1243
|
Indicates if the appellant has informed other owners of the site
|
|
1234
1244
|
"""
|
|
@@ -1238,7 +1248,7 @@ class AppealHasCase2(BaseModel):
|
|
|
1238
1248
|
"""
|
|
1239
1249
|
The original description of the development, as provided by the appellant
|
|
1240
1250
|
"""
|
|
1241
|
-
changedDevelopmentDescription: bool | None
|
|
1251
|
+
changedDevelopmentDescription: bool | None
|
|
1242
1252
|
"""
|
|
1243
1253
|
Indicates that the LPA has changed the development description
|
|
1244
1254
|
"""
|
|
@@ -1249,11 +1259,11 @@ class AppealHasCase2(BaseModel):
|
|
|
1249
1259
|
"""
|
|
1250
1260
|
New conditions details provided by the LPA
|
|
1251
1261
|
"""
|
|
1252
|
-
nearbyCaseReferences: list[str]
|
|
1262
|
+
nearbyCaseReferences: list[str] | None
|
|
1253
1263
|
"""
|
|
1254
1264
|
A list of related case references known to the appellant and the LPA
|
|
1255
1265
|
"""
|
|
1256
|
-
neighbouringSiteAddresses: list[NeighbouringSiteAddress]
|
|
1266
|
+
neighbouringSiteAddresses: list[NeighbouringSiteAddress] | None
|
|
1257
1267
|
"""
|
|
1258
1268
|
A list of neighbouring site addresses
|
|
1259
1269
|
"""
|
|
@@ -1261,15 +1271,15 @@ class AppealHasCase2(BaseModel):
|
|
|
1261
1271
|
"""
|
|
1262
1272
|
A general reason given for the need to visit any neighbours
|
|
1263
1273
|
"""
|
|
1264
|
-
affectedListedBuildingNumbers: list[str]
|
|
1274
|
+
affectedListedBuildingNumbers: list[str] | None
|
|
1265
1275
|
"""
|
|
1266
1276
|
A list of affected listed building IDs from Historic England
|
|
1267
1277
|
"""
|
|
1268
|
-
appellantCostsAppliedFor: bool | None
|
|
1278
|
+
appellantCostsAppliedFor: bool | None
|
|
1269
1279
|
"""
|
|
1270
1280
|
Indicates if the appellant has applied for costs
|
|
1271
1281
|
"""
|
|
1272
|
-
lpaCostsAppliedFor: bool | None
|
|
1282
|
+
lpaCostsAppliedFor: bool | None
|
|
1273
1283
|
"""
|
|
1274
1284
|
Indicates if the appellant has applied for costs
|
|
1275
1285
|
"""
|
|
@@ -1309,13 +1319,13 @@ class AppealHasCase2(BaseModel):
|
|
|
1309
1319
|
Reason for appeal as provided by the appellant
|
|
1310
1320
|
"""
|
|
1311
1321
|
significantChangesAffectingApplicationAppellant: (
|
|
1312
|
-
list[
|
|
1322
|
+
list[SignificantChangesAffectingApplicationAppellantItem1] | None
|
|
1313
1323
|
) = None
|
|
1314
1324
|
"""
|
|
1315
1325
|
Significant changes affecting the application as reported by the appellant
|
|
1316
1326
|
"""
|
|
1317
1327
|
significantChangesAffectingApplicationLpa: (
|
|
1318
|
-
list[
|
|
1328
|
+
list[SignificantChangesAffectingApplicationLpaItem1] | None
|
|
1319
1329
|
) = None
|
|
1320
1330
|
"""
|
|
1321
1331
|
Significant changes affecting the application as reported by the LPA
|
|
@@ -1327,3 +1337,11 @@ class AppealHasCase(RootModel[AppealHasCase1 | AppealHasCase2]):
|
|
|
1327
1337
|
"""
|
|
1328
1338
|
Group A - Schema defining the metadata for an appeal
|
|
1329
1339
|
"""
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
class SignificantChangesAffectingApplication(Enum):
|
|
1343
|
+
adopted_a_new_local_plan = "adopted-a-new-local-plan"
|
|
1344
|
+
national_policy_change = "national-policy-change"
|
|
1345
|
+
court_judgement = "court-judgement"
|
|
1346
|
+
other = "other"
|
|
1347
|
+
NoneType_None = None
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from enum import Enum
|
|
6
|
+
from enum import Enum, StrEnum
|
|
7
7
|
|
|
8
8
|
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel
|
|
9
9
|
|
|
@@ -25,7 +25,7 @@ class RepresentationStatus(Enum):
|
|
|
25
25
|
NoneType_None = None
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
class InvalidOrIncompleteDetailEnumEnum(
|
|
28
|
+
class InvalidOrIncompleteDetailEnumEnum(StrEnum):
|
|
29
29
|
Received_after_deadline = "Received after deadline"
|
|
30
30
|
Includes_personal_or_medical_information = (
|
|
31
31
|
"Includes personal or medical information"
|
|
@@ -84,43 +84,43 @@ class AppealRepresentation(BaseModel):
|
|
|
84
84
|
"""
|
|
85
85
|
External case identifier
|
|
86
86
|
"""
|
|
87
|
-
representationStatus: RepresentationStatus
|
|
87
|
+
representationStatus: RepresentationStatus | None
|
|
88
88
|
"""
|
|
89
89
|
Status of the representation
|
|
90
90
|
"""
|
|
91
|
-
originalRepresentation: str | None
|
|
91
|
+
originalRepresentation: str | None
|
|
92
92
|
"""
|
|
93
93
|
The original representation
|
|
94
94
|
"""
|
|
95
|
-
redacted: bool | None
|
|
95
|
+
redacted: bool | None
|
|
96
96
|
"""
|
|
97
97
|
Indicates if the representation is redacted
|
|
98
98
|
"""
|
|
99
|
-
redactedRepresentation: str | None
|
|
99
|
+
redactedRepresentation: str | None
|
|
100
100
|
"""
|
|
101
101
|
The redacted version of the representation
|
|
102
102
|
"""
|
|
103
|
-
redactedBy: str | None
|
|
103
|
+
redactedBy: str | None
|
|
104
104
|
"""
|
|
105
105
|
Unique identifier for the case team member that performed the redaction
|
|
106
106
|
"""
|
|
107
|
-
invalidOrIncompleteDetails: list[InvalidOrIncompleteDetail]
|
|
107
|
+
invalidOrIncompleteDetails: list[InvalidOrIncompleteDetail] | None
|
|
108
108
|
"""
|
|
109
109
|
A list of reasons why the representation has been marked as invalid or incomplete.
|
|
110
110
|
"""
|
|
111
|
-
otherInvalidOrIncompleteDetails: list[str]
|
|
111
|
+
otherInvalidOrIncompleteDetails: list[str] | None
|
|
112
112
|
"""
|
|
113
113
|
A list of free text reasons why the representation has been marked as invalid or incomplete
|
|
114
114
|
"""
|
|
115
|
-
source: Source
|
|
115
|
+
source: Source | None
|
|
116
116
|
"""
|
|
117
117
|
Source of the representation (citizen or LPA)
|
|
118
118
|
"""
|
|
119
|
-
serviceUserId: str | None
|
|
119
|
+
serviceUserId: str | None
|
|
120
120
|
"""
|
|
121
121
|
Service User Id of the person or organisation making the representation
|
|
122
122
|
"""
|
|
123
|
-
representationType: RepresentationType
|
|
123
|
+
representationType: RepresentationType | None
|
|
124
124
|
"""
|
|
125
125
|
The type of representation
|
|
126
126
|
"""
|