@planning-inspectorate/data-model 2.50.0 → 2.51.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 (31) hide show
  1. package/docs/nsip-exam-timetable-defs-event.md +1 -0
  2. package/docs/nsip-exam-timetable.md +1 -0
  3. package/package.json +1 -1
  4. package/pins_data_model/gen_models.py +2 -1
  5. package/pins_data_model/models/model_address.py +2 -2
  6. package/pins_data_model/models/model_appeal_document.py +11 -11
  7. package/pins_data_model/models/model_appeal_event.py +4 -4
  8. package/pins_data_model/models/model_appeal_event_estimate.py +3 -3
  9. package/pins_data_model/models/model_appeal_has.py +111 -93
  10. package/pins_data_model/models/model_appeal_representation.py +12 -12
  11. package/pins_data_model/models/model_appeal_s78.py +246 -228
  12. package/pins_data_model/models/model_application_update.py +2 -2
  13. package/pins_data_model/models/model_applications_application.py +4 -4
  14. package/pins_data_model/models/model_applications_application_update.py +2 -2
  15. package/pins_data_model/models/model_applications_notify_email.py +2 -2
  16. package/pins_data_model/models/model_applications_representation.py +4 -4
  17. package/pins_data_model/models/model_dart_response.py +1 -1
  18. package/pins_data_model/models/model_folder.py +3 -3
  19. package/pins_data_model/models/model_nsip_document.py +12 -12
  20. package/pins_data_model/models/model_nsip_exam_timetable.py +3 -2
  21. package/pins_data_model/models/model_nsip_invoice.py +2 -2
  22. package/pins_data_model/models/model_nsip_project.py +19 -19
  23. package/pins_data_model/models/model_nsip_project_update.py +5 -5
  24. package/pins_data_model/models/model_nsip_representation.py +7 -7
  25. package/pins_data_model/models/model_nsip_subscription.py +6 -6
  26. package/pins_data_model/models/model_pins_inspector.py +5 -5
  27. package/pins_data_model/models/model_s51_advice.py +7 -7
  28. package/pins_data_model/models/model_service_user.py +2 -2
  29. package/requirements.txt +1 -1
  30. package/schemas/nsip-exam-timetable.schema.json +2 -1
  31. package/src/schemas.d.ts +2 -1
@@ -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(Enum):
12
+ class CaseStatus(StrEnum):
13
13
  """
14
14
  The processing status for the appeal
15
15
  """
@@ -33,7 +33,7 @@ class CaseStatus(Enum):
33
33
  awaiting_event = "awaiting_event"
34
34
 
35
35
 
36
- class CaseType(Enum):
36
+ class CaseType(StrEnum):
37
37
  """
38
38
  The internal code for an appeal type, e.g. D (Householder)
39
39
  """
@@ -175,7 +175,7 @@ class KnowsAllOwners(Enum):
175
175
  NoneType_None = None
176
176
 
177
177
 
178
- class NotificationMethodEnum(Enum):
178
+ class NotificationMethodEnum(StrEnum):
179
179
  notice = "notice"
180
180
  letter = "letter"
181
181
  advert = "advert"
@@ -190,7 +190,7 @@ class NeighbouringSiteAddress(BaseModel):
190
190
  """
191
191
  First line of address of the site
192
192
  """
193
- neighbouringSiteAddressLine2: str | None = None
193
+ neighbouringSiteAddressLine2: str | None
194
194
  """
195
195
  Second line of address of the site
196
196
  """
@@ -329,12 +329,12 @@ class AdvertDetail(BaseModel):
329
329
  model_config = ConfigDict(
330
330
  extra="allow",
331
331
  )
332
- advertType: AdvertType
333
- isAdvertInPosition: bool | None = None
332
+ advertType: AdvertType | None
333
+ isAdvertInPosition: bool | None
334
334
  """
335
335
  Is the advertisement in position?
336
336
  """
337
- isSiteOnHighwayLand: bool | None = None
337
+ isSiteOnHighwayLand: bool | None
338
338
  """
339
339
  Is the site on highway land?
340
340
  """
@@ -427,76 +427,7 @@ class DiscontinuanceNoticeServedReason(Enum):
427
427
  NoneType_None = None
428
428
 
429
429
 
430
- class AdvertDetail1(BaseModel):
431
- model_config = ConfigDict(
432
- extra="allow",
433
- )
434
- advertType: AdvertType
435
- isAdvertInPosition: bool | None = None
436
- """
437
- Is the advertisement in position?
438
- """
439
- isSiteOnHighwayLand: bool | None = None
440
- """
441
- Is the site on highway land?
442
- """
443
-
444
-
445
- class AppealGroundLetter2(Enum):
446
- a = "a"
447
- b = "b"
448
- c = "c"
449
- d = "d"
450
- e = "e"
451
- f = "f"
452
- g = "g"
453
- NoneType_None = None
454
-
455
-
456
- class EnforcementAppealGroundsDetail1(BaseModel):
457
- model_config = ConfigDict(
458
- extra="allow",
459
- )
460
- appealGroundLetter: AppealGroundLetter2 | None = None
461
- groundForAppealStartDate: AwareDatetime | None = Field(
462
- None, examples=["2023-07-27T20:30:00.000Z"]
463
- )
464
- groundFacts: str | None = None
465
- """
466
- Facts supporting the appeal ground
467
- """
468
-
469
-
470
- class AppealGroundLetter3(Enum):
471
- a = "a"
472
- b = "b"
473
- c = "c"
474
- d = "d"
475
- e = "e"
476
- f = "f"
477
- g = "g"
478
- h = "h"
479
- i = "i"
480
- j = "j"
481
- k = "k"
482
- NoneType_None = None
483
-
484
-
485
- class ApplicationElbAppealGroundsDetail1(BaseModel):
486
- model_config = ConfigDict(
487
- extra="allow",
488
- )
489
- appealGroundLetter: AppealGroundLetter3 | None = None
490
- groundForAppealStartDate: AwareDatetime | None = Field(
491
- None, examples=["2023-07-27T20:30:00.000Z"]
492
- )
493
- groundFacts: str | None = None
494
- """
495
- Facts supporting the appeal ground
496
- """
497
-
498
-
499
- class SignificantChangesAffectingApplication(Enum):
430
+ class Value(Enum):
500
431
  adopted_a_new_local_plan = "adopted-a-new-local-plan"
501
432
  national_policy_change = "national-policy-change"
502
433
  court_judgement = "court-judgement"
@@ -505,12 +436,12 @@ class SignificantChangesAffectingApplication(Enum):
505
436
 
506
437
 
507
438
  class SignificantChangesAffectingApplicationAppellantItem(BaseModel):
508
- value: SignificantChangesAffectingApplication
439
+ value: Value | None
509
440
  comment: str | None = None
510
441
 
511
442
 
512
443
  class SignificantChangesAffectingApplicationLpaItem(BaseModel):
513
- value: SignificantChangesAffectingApplication
444
+ value: Value | None
514
445
  comment: str | None = None
515
446
 
516
447
 
@@ -544,7 +475,7 @@ class AppealS78Case1(BaseModel):
544
475
  """
545
476
  The internal code for an appeal type, e.g. D (Householder)
546
477
  """
547
- caseProcedure: CaseProcedure
478
+ caseProcedure: CaseProcedure | None
548
479
  """
549
480
  The type of procedure for the appeal
550
481
  """
@@ -552,23 +483,23 @@ class AppealS78Case1(BaseModel):
552
483
  """
553
484
  A unique identifier for the Local Planning Authority
554
485
  """
555
- caseOfficerId: str | None = None
486
+ caseOfficerId: str | None
556
487
  """
557
488
  Unique identifier for the case officer assigned to the case
558
489
  """
559
- inspectorId: str | None = None
490
+ inspectorId: str | None
560
491
  """
561
492
  Unique identifier for the inspector assigned to the case
562
493
  """
563
- allocationLevel: AllocationLevel
494
+ allocationLevel: AllocationLevel | None
564
495
  """
565
496
  A level used for allocation purposes
566
497
  """
567
- allocationBand: AllocationBand
498
+ allocationBand: AllocationBand | None
568
499
  """
569
500
  A band used for allocation purposes
570
501
  """
571
- caseSpecialisms: list[str] = Field(
502
+ caseSpecialisms: list[str] | None = Field(
572
503
  ..., examples=[["Access", "Listed building and enforcement"], ["Schedule 1"]]
573
504
  )
574
505
  """
@@ -598,15 +529,15 @@ class AppealS78Case1(BaseModel):
598
529
  """
599
530
  The date the appeal was validated in the back-office
600
531
  """
601
- caseValidationOutcome: CaseValidationOutcome
532
+ caseValidationOutcome: CaseValidationOutcome | None
602
533
  """
603
534
  The outcome of the validation action
604
535
  """
605
- caseValidationInvalidDetails: list[str]
536
+ caseValidationInvalidDetails: list[str] | None
606
537
  """
607
538
  A list of reasons why the appeal is invalid
608
539
  """
609
- caseValidationIncompleteDetails: list[str]
540
+ caseValidationIncompleteDetails: list[str] | None
610
541
  """
611
542
  A list of reasons why the appeal is incomplete
612
543
  """
@@ -628,7 +559,7 @@ class AppealS78Case1(BaseModel):
628
559
  """
629
560
  A date indicating when the case was published
630
561
  """
631
- linkedCaseStatus: LinkedCaseStatus
562
+ linkedCaseStatus: LinkedCaseStatus | None
632
563
  """
633
564
  Indicates if the case is linked, and the type of relationship
634
565
  """
@@ -660,7 +591,7 @@ class AppealS78Case1(BaseModel):
660
591
  """
661
592
  The date indicating when the questionnaire review was completed and the questionnaire published
662
593
  """
663
- lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome
594
+ lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome | None
664
595
  """
665
596
  The outcome of the validation action
666
597
  """
@@ -670,7 +601,7 @@ class AppealS78Case1(BaseModel):
670
601
  """
671
602
  The date the LPA response was validated
672
603
  """
673
- lpaQuestionnaireValidationDetails: list[str]
604
+ lpaQuestionnaireValidationDetails: list[str] | None
674
605
  """
675
606
  A list of reasons why the questionnaire is incomplete
676
607
  """
@@ -714,7 +645,7 @@ class AppealS78Case1(BaseModel):
714
645
  """
715
646
  The date the appeal decision was published
716
647
  """
717
- caseDecisionOutcome: CaseDecisionOutcome
648
+ caseDecisionOutcome: CaseDecisionOutcome | None
718
649
  """
719
650
  The final outcome for the decision
720
651
  """
@@ -724,7 +655,7 @@ class AppealS78Case1(BaseModel):
724
655
  """
725
656
  The date the appeal decision letter
726
657
  """
727
- enforcementNotice: bool | None = None
658
+ enforcementNotice: bool | None
728
659
  """
729
660
  Indicates if an enforcement notice is the reason for the appeal
730
661
  """
@@ -738,7 +669,7 @@ class AppealS78Case1(BaseModel):
738
669
  """
739
670
  The date of the original LPA application
740
671
  """
741
- applicationDecision: ApplicationDecision
672
+ applicationDecision: ApplicationDecision | None
742
673
  """
743
674
  The outcome of the original LPA decision
744
675
  """
@@ -780,11 +711,11 @@ class AppealS78Case1(BaseModel):
780
711
  """
781
712
  Postal code of the site address
782
713
  """
783
- siteAccessDetails: list[str]
714
+ siteAccessDetails: list[str] | None
784
715
  """
785
716
  Provided information on site accessibility
786
717
  """
787
- siteSafetyDetails: list[str]
718
+ siteSafetyDetails: list[str] | None
788
719
  """
789
720
  Provided information on site health and safety
790
721
  """
@@ -796,45 +727,45 @@ class AppealS78Case1(BaseModel):
796
727
  """
797
728
  The floor space, in square meters
798
729
  """
799
- isCorrectAppealType: bool | None = None
730
+ isCorrectAppealType: bool | None
800
731
  """
801
732
  Indicates if the LPA considers the appeal type appropriate
802
733
  """
803
- isGreenBelt: bool | None = None
734
+ isGreenBelt: bool | None
804
735
  """
805
736
  Indicates if the site is in a green belt
806
737
  """
807
- inConservationArea: bool | None = None
738
+ inConservationArea: bool | None
808
739
  """
809
740
  Indicates if the site is in a conservation area
810
741
  """
811
- ownsAllLand: bool | None = None
742
+ ownsAllLand: bool | None
812
743
  """
813
744
  Indicates if the appellant has complete ownership of the site
814
745
  """
815
- ownsSomeLand: bool | None = None
746
+ ownsSomeLand: bool | None
816
747
  """
817
748
  Indicates if the appellant has partial ownership of the site
818
749
  """
819
- knowsOtherOwners: KnowsOtherOwners
750
+ knowsOtherOwners: KnowsOtherOwners | None
820
751
  """
821
752
  Indicates if the appellant knows other owners of the site
822
753
  """
823
- knowsAllOwners: KnowsAllOwners
754
+ knowsAllOwners: KnowsAllOwners | None
824
755
  """
825
756
  Indicates if the appellant knows all owners of the site
826
757
  """
827
- advertisedAppeal: bool | None = None
758
+ advertisedAppeal: bool | None
828
759
  """
829
760
  Indicates if the appellant has advertised the appeal to the LPA decision
830
761
  """
831
- notificationMethod: list[NotificationMethodEnum] = Field(
762
+ notificationMethod: list[NotificationMethodEnum] | None = Field(
832
763
  ..., examples=[["notice", "letter"], ["advert"]]
833
764
  )
834
765
  """
835
766
  The methods used to notify relevant parties
836
767
  """
837
- ownersInformed: bool | None = None
768
+ ownersInformed: bool | None
838
769
  """
839
770
  Indicates if the appellant has informed other owners of the site
840
771
  """
@@ -844,7 +775,7 @@ class AppealS78Case1(BaseModel):
844
775
  """
845
776
  The original description of the development, as provided by the appellant
846
777
  """
847
- changedDevelopmentDescription: bool | None = None
778
+ changedDevelopmentDescription: bool | None
848
779
  """
849
780
  Indicates that the LPA has changed the development description
850
781
  """
@@ -862,23 +793,23 @@ class AppealS78Case1(BaseModel):
862
793
  """
863
794
  extra conditions details provided by the LPA
864
795
  """
865
- nearbyCaseReferences: list[str]
796
+ nearbyCaseReferences: list[str] | None
866
797
  """
867
798
  A list of related case references known to the appellant and the LPA
868
799
  """
869
- neighbouringSiteAddresses: list[NeighbouringSiteAddress]
800
+ neighbouringSiteAddresses: list[NeighbouringSiteAddress] | None
870
801
  """
871
802
  A list of neighbouring site addresses
872
803
  """
873
- reasonForNeighbourVisits: str | None = None
804
+ reasonForNeighbourVisits: str | None
874
805
  """
875
806
  A general reason given for the need to visit any neighbours
876
807
  """
877
- affectedListedBuildingNumbers: list[str]
808
+ affectedListedBuildingNumbers: list[str] | None
878
809
  """
879
810
  A list of affected listed building IDs from Historic England
880
811
  """
881
- changedListedBuildingNumbers: list[str]
812
+ changedListedBuildingNumbers: list[str] | None
882
813
  """
883
814
  A list of changed listed building IDs from Historic England
884
815
  """
@@ -890,115 +821,115 @@ class AppealS78Case1(BaseModel):
890
821
  """
891
822
  Are Historic England to be consulted?
892
823
  """
893
- appellantCostsAppliedFor: bool | None = None
824
+ appellantCostsAppliedFor: bool | None
894
825
  """
895
826
  Indicates if the appellant has applied for costs
896
827
  """
897
- lpaCostsAppliedFor: bool | None = None
828
+ lpaCostsAppliedFor: bool | None
898
829
  """
899
830
  Indicates if the appellant has applied for costs
900
831
  """
901
- agriculturalHolding: bool | None = None
832
+ agriculturalHolding: bool | None
902
833
  """
903
834
  Indicates if the site is an agricultural holding
904
835
  """
905
- tenantAgriculturalHolding: bool | None = None
836
+ tenantAgriculturalHolding: bool | None
906
837
  """
907
838
  Indicates if the site is a tenant agricultural holding
908
839
  """
909
- otherTenantsAgriculturalHolding: bool | None = None
840
+ otherTenantsAgriculturalHolding: bool | None
910
841
  """
911
842
  Indicates if the site is an agricultural holding with other tenants
912
843
  """
913
- informedTenantsAgriculturalHolding: bool | None = None
844
+ informedTenantsAgriculturalHolding: bool | None
914
845
  """
915
846
  If the site is an agricultural holding, indicates tenants are informed
916
847
  """
917
- appellantProcedurePreference: AppellantProcedurePreference
848
+ appellantProcedurePreference: AppellantProcedurePreference | None
918
849
  """
919
850
  The procedure preference indicated by the appellant
920
851
  """
921
- appellantProcedurePreferenceDetails: str | None = None
852
+ appellantProcedurePreferenceDetails: str | None
922
853
  """
923
854
  The procedure details preference indicated by the appellant
924
855
  """
925
- appellantProcedurePreferenceDuration: float | None = None
856
+ appellantProcedurePreferenceDuration: float | None
926
857
  """
927
858
  The duration of the procedure indicated by the appellant
928
859
  """
929
- appellantProcedurePreferenceWitnessCount: float | None = None
860
+ appellantProcedurePreferenceWitnessCount: float | None
930
861
  """
931
862
  The number of witnesses appellant has suggested for inquiries preference
932
863
  """
933
- statusPlanningObligation: str | None = None
864
+ statusPlanningObligation: str | None
934
865
  """
935
866
  The planning obligation information, if available
936
867
  """
937
- affectsScheduledMonument: bool | None = None
868
+ affectsScheduledMonument: bool | None
938
869
  """
939
870
  Indicates that a scheduled monument is affected
940
871
  """
941
- hasProtectedSpecies: bool | None = None
872
+ hasProtectedSpecies: bool | None
942
873
  """
943
874
  Indicates the existence of protected species
944
875
  """
945
- isAonbNationalLandscape: bool | None = None
876
+ isAonbNationalLandscape: bool | None
946
877
  """
947
878
  Indicates an area of outstanding beauty (National Landscape)
948
879
  """
949
- designatedSitesNames: list[str]
880
+ designatedSitesNames: list[str] | None
950
881
  """
951
882
  The designated site names
952
883
  """
953
- isGypsyOrTravellerSite: bool | None = None
884
+ isGypsyOrTravellerSite: bool | None
954
885
  """
955
886
  Indicates a traveller site
956
887
  """
957
- isPublicRightOfWay: bool | None = None
888
+ isPublicRightOfWay: bool | None
958
889
  """
959
890
  Indicates a PROW (public right of way)
960
891
  """
961
- eiaEnvironmentalImpactSchedule: EiaEnvironmentalImpactSchedule
892
+ eiaEnvironmentalImpactSchedule: EiaEnvironmentalImpactSchedule | None
962
893
  """
963
894
  The impact schedule from EIA
964
895
  """
965
- eiaDevelopmentDescription: EiaDevelopmentDescription
896
+ eiaDevelopmentDescription: EiaDevelopmentDescription | None
966
897
  """
967
898
  The development description from EIA
968
899
  """
969
- eiaSensitiveAreaDetails: str | None = None
900
+ eiaSensitiveAreaDetails: str | None
970
901
  """
971
902
  The sensitive area details from EIA
972
903
  """
973
- eiaColumnTwoThreshold: bool | None = None
904
+ eiaColumnTwoThreshold: bool | None
974
905
  """
975
906
  EIA specific threshold
976
907
  """
977
- eiaScreeningOpinion: bool | None = None
908
+ eiaScreeningOpinion: bool | None
978
909
  """
979
910
  EIA screening opinion
980
911
  """
981
- eiaRequiresEnvironmentalStatement: bool | None = None
912
+ eiaRequiresEnvironmentalStatement: bool | None
982
913
  """
983
914
  EIA environmental statement required
984
915
  """
985
- eiaCompletedEnvironmentalStatement: bool | None = None
916
+ eiaCompletedEnvironmentalStatement: bool | None
986
917
  """
987
918
  EIA completed environmental statement required
988
919
  """
989
- hasStatutoryConsultees: bool | None = None
920
+ hasStatutoryConsultees: bool | None
990
921
  """
991
922
  Indicates statutory consultees
992
923
  """
993
- consultedBodiesDetails: str | None = None
924
+ consultedBodiesDetails: str | None
994
925
  """
995
926
  The details of the bodies consulted
996
927
  """
997
- hasInfrastructureLevy: bool | None = None
928
+ hasInfrastructureLevy: bool | None
998
929
  """
999
930
  Indicates the existence of an infrastructure levy
1000
931
  """
1001
- isInfrastructureLevyFormallyAdopted: bool | None = None
932
+ isInfrastructureLevyFormallyAdopted: bool | None
1002
933
  """
1003
934
  Indicates if the infrastructure levy is formally adopted
1004
935
  """
@@ -1014,22 +945,22 @@ class AppealS78Case1(BaseModel):
1014
945
  """
1015
946
  The expected date of the infrastructure levy
1016
947
  """
1017
- lpaProcedurePreference: LpaProcedurePreference
948
+ lpaProcedurePreference: LpaProcedurePreference | None
1018
949
  """
1019
950
  The procedure preference indicated by the LPA
1020
951
  """
1021
- lpaProcedurePreferenceDetails: str | None = None
952
+ lpaProcedurePreferenceDetails: str | None
1022
953
  """
1023
954
  The procedure details preference indicated by the LPA
1024
955
  """
1025
- lpaProcedurePreferenceDuration: float | None = None
956
+ lpaProcedurePreferenceDuration: float | None
1026
957
  """
1027
958
  The duration of enquiry indicated by the LPA
1028
959
  """
1029
- caseworkReason: str | None = None
1030
- importantInformation: str | None = None
1031
- jurisdiction: str | None = None
1032
- redeterminedIndicator: str | None = None
960
+ caseworkReason: str | None
961
+ importantInformation: str | None
962
+ jurisdiction: str | None
963
+ redeterminedIndicator: str | None
1033
964
  dateCostsReportDespatched: AwareDatetime | None = Field(
1034
965
  ..., examples=["2023-07-27T20:30:00.000Z"]
1035
966
  )
@@ -1088,7 +1019,7 @@ class AppealS78Case1(BaseModel):
1088
1019
  """
1089
1020
  The date of the Case Management Conference (CMC)
1090
1021
  """
1091
- numberOfResidencesNetChange: float | None = None
1022
+ numberOfResidencesNetChange: float | None
1092
1023
  """
1093
1024
  The net gain in residences of the proposed development
1094
1025
  """
@@ -1098,10 +1029,10 @@ class AppealS78Case1(BaseModel):
1098
1029
  siteGridReferenceNorthing: constr(pattern=r"^\d{6,7}$") = Field(
1099
1030
  ..., examples=["400534"]
1100
1031
  )
1101
- siteViewableFromRoad: bool | None = None
1102
- siteWithinSSSI: bool | None = None
1103
- typeOfPlanningApplication: TypeOfPlanningApplication
1104
- developmentType: DevelopmentType
1032
+ siteViewableFromRoad: bool | None
1033
+ siteWithinSSSI: bool | None
1034
+ typeOfPlanningApplication: TypeOfPlanningApplication | None
1035
+ developmentType: DevelopmentType | None
1105
1036
  statementOfCommonGroundDueDate: AwareDatetime | None = Field(
1106
1037
  None, examples=["2023-07-27T20:30:00.000Z"]
1107
1038
  )
@@ -1277,6 +1208,85 @@ class AppealS78Case1(BaseModel):
1277
1208
  """
1278
1209
 
1279
1210
 
1211
+ class AdvertDetail1(BaseModel):
1212
+ model_config = ConfigDict(
1213
+ extra="allow",
1214
+ )
1215
+ advertType: AdvertType | None
1216
+ isAdvertInPosition: bool | None
1217
+ """
1218
+ Is the advertisement in position?
1219
+ """
1220
+ isSiteOnHighwayLand: bool | None
1221
+ """
1222
+ Is the site on highway land?
1223
+ """
1224
+
1225
+
1226
+ class AppealGroundLetter2(Enum):
1227
+ a = "a"
1228
+ b = "b"
1229
+ c = "c"
1230
+ d = "d"
1231
+ e = "e"
1232
+ f = "f"
1233
+ g = "g"
1234
+ NoneType_None = None
1235
+
1236
+
1237
+ class EnforcementAppealGroundsDetail1(BaseModel):
1238
+ model_config = ConfigDict(
1239
+ extra="allow",
1240
+ )
1241
+ appealGroundLetter: AppealGroundLetter2 | None = None
1242
+ groundForAppealStartDate: AwareDatetime | None = Field(
1243
+ None, examples=["2023-07-27T20:30:00.000Z"]
1244
+ )
1245
+ groundFacts: str | None = None
1246
+ """
1247
+ Facts supporting the appeal ground
1248
+ """
1249
+
1250
+
1251
+ class AppealGroundLetter3(Enum):
1252
+ a = "a"
1253
+ b = "b"
1254
+ c = "c"
1255
+ d = "d"
1256
+ e = "e"
1257
+ f = "f"
1258
+ g = "g"
1259
+ h = "h"
1260
+ i = "i"
1261
+ j = "j"
1262
+ k = "k"
1263
+ NoneType_None = None
1264
+
1265
+
1266
+ class ApplicationElbAppealGroundsDetail1(BaseModel):
1267
+ model_config = ConfigDict(
1268
+ extra="allow",
1269
+ )
1270
+ appealGroundLetter: AppealGroundLetter3 | None = None
1271
+ groundForAppealStartDate: AwareDatetime | None = Field(
1272
+ None, examples=["2023-07-27T20:30:00.000Z"]
1273
+ )
1274
+ groundFacts: str | None = None
1275
+ """
1276
+ Facts supporting the appeal ground
1277
+ """
1278
+
1279
+
1280
+ class SignificantChangesAffectingApplicationAppellantItem1(BaseModel):
1281
+ value: Value | None
1282
+ comment: str | None = None
1283
+
1284
+
1285
+ class SignificantChangesAffectingApplicationLpaItem1(BaseModel):
1286
+ value: Value | None
1287
+ comment: str | None = None
1288
+
1289
+
1280
1290
  class AppealS78Case2(BaseModel):
1281
1291
  """
1282
1292
  Group B - Schema defining the metadata for an appeal
@@ -1307,7 +1317,7 @@ class AppealS78Case2(BaseModel):
1307
1317
  """
1308
1318
  The internal code for an appeal type, e.g. D (Householder)
1309
1319
  """
1310
- caseProcedure: CaseProcedure
1320
+ caseProcedure: CaseProcedure | None
1311
1321
  """
1312
1322
  The type of procedure for the appeal
1313
1323
  """
@@ -1315,23 +1325,23 @@ class AppealS78Case2(BaseModel):
1315
1325
  """
1316
1326
  A unique identifier for the Local Planning Authority
1317
1327
  """
1318
- caseOfficerId: str | None = None
1328
+ caseOfficerId: str | None
1319
1329
  """
1320
1330
  Unique identifier for the case officer assigned to the case
1321
1331
  """
1322
- inspectorId: str | None = None
1332
+ inspectorId: str | None
1323
1333
  """
1324
1334
  Unique identifier for the inspector assigned to the case
1325
1335
  """
1326
- allocationLevel: AllocationLevel
1336
+ allocationLevel: AllocationLevel | None
1327
1337
  """
1328
1338
  A level used for allocation purposes
1329
1339
  """
1330
- allocationBand: AllocationBand
1340
+ allocationBand: AllocationBand | None
1331
1341
  """
1332
1342
  A band used for allocation purposes
1333
1343
  """
1334
- caseSpecialisms: list[str] = Field(
1344
+ caseSpecialisms: list[str] | None = Field(
1335
1345
  ..., examples=[["Access", "Listed building and enforcement"], ["Schedule 1"]]
1336
1346
  )
1337
1347
  """
@@ -1361,15 +1371,15 @@ class AppealS78Case2(BaseModel):
1361
1371
  """
1362
1372
  The date the appeal was validated in the back-office
1363
1373
  """
1364
- caseValidationOutcome: CaseValidationOutcome
1374
+ caseValidationOutcome: CaseValidationOutcome | None
1365
1375
  """
1366
1376
  The outcome of the validation action
1367
1377
  """
1368
- caseValidationInvalidDetails: list[str]
1378
+ caseValidationInvalidDetails: list[str] | None
1369
1379
  """
1370
1380
  A list of reasons why the appeal is invalid
1371
1381
  """
1372
- caseValidationIncompleteDetails: list[str]
1382
+ caseValidationIncompleteDetails: list[str] | None
1373
1383
  """
1374
1384
  A list of reasons why the appeal is incomplete
1375
1385
  """
@@ -1391,7 +1401,7 @@ class AppealS78Case2(BaseModel):
1391
1401
  """
1392
1402
  A date indicating when the case was published
1393
1403
  """
1394
- linkedCaseStatus: LinkedCaseStatus
1404
+ linkedCaseStatus: LinkedCaseStatus | None
1395
1405
  """
1396
1406
  Indicates if the case is linked, and the type of relationship
1397
1407
  """
@@ -1423,7 +1433,7 @@ class AppealS78Case2(BaseModel):
1423
1433
  """
1424
1434
  The date indicating when the questionnaire review was completed and the questionnaire published
1425
1435
  """
1426
- lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome
1436
+ lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome | None
1427
1437
  """
1428
1438
  The outcome of the validation action
1429
1439
  """
@@ -1433,7 +1443,7 @@ class AppealS78Case2(BaseModel):
1433
1443
  """
1434
1444
  The date the LPA response was validated
1435
1445
  """
1436
- lpaQuestionnaireValidationDetails: list[str]
1446
+ lpaQuestionnaireValidationDetails: list[str] | None
1437
1447
  """
1438
1448
  A list of reasons why the questionnaire is incomplete
1439
1449
  """
@@ -1477,7 +1487,7 @@ class AppealS78Case2(BaseModel):
1477
1487
  """
1478
1488
  The date the appeal decision was published
1479
1489
  """
1480
- caseDecisionOutcome: CaseDecisionOutcome
1490
+ caseDecisionOutcome: CaseDecisionOutcome | None
1481
1491
  """
1482
1492
  The final outcome for the decision
1483
1493
  """
@@ -1487,7 +1497,7 @@ class AppealS78Case2(BaseModel):
1487
1497
  """
1488
1498
  The date the appeal decision letter
1489
1499
  """
1490
- enforcementNotice: bool | None = None
1500
+ enforcementNotice: bool | None
1491
1501
  """
1492
1502
  Indicates if an enforcement notice is the reason for the appeal
1493
1503
  """
@@ -1501,7 +1511,7 @@ class AppealS78Case2(BaseModel):
1501
1511
  """
1502
1512
  The date of the original LPA application
1503
1513
  """
1504
- applicationDecision: ApplicationDecision
1514
+ applicationDecision: ApplicationDecision | None
1505
1515
  """
1506
1516
  The outcome of the original LPA decision
1507
1517
  """
@@ -1543,11 +1553,11 @@ class AppealS78Case2(BaseModel):
1543
1553
  """
1544
1554
  Postal code of the site address
1545
1555
  """
1546
- siteAccessDetails: list[str]
1556
+ siteAccessDetails: list[str] | None
1547
1557
  """
1548
1558
  Provided information on site accessibility
1549
1559
  """
1550
- siteSafetyDetails: list[str]
1560
+ siteSafetyDetails: list[str] | None
1551
1561
  """
1552
1562
  Provided information on site health and safety
1553
1563
  """
@@ -1559,45 +1569,45 @@ class AppealS78Case2(BaseModel):
1559
1569
  """
1560
1570
  The floor space, in square meters
1561
1571
  """
1562
- isCorrectAppealType: bool | None = None
1572
+ isCorrectAppealType: bool | None
1563
1573
  """
1564
1574
  Indicates if the LPA considers the appeal type appropriate
1565
1575
  """
1566
- isGreenBelt: bool | None = None
1576
+ isGreenBelt: bool | None
1567
1577
  """
1568
1578
  Indicates if the site is in a green belt
1569
1579
  """
1570
- inConservationArea: bool | None = None
1580
+ inConservationArea: bool | None
1571
1581
  """
1572
1582
  Indicates if the site is in a conservation area
1573
1583
  """
1574
- ownsAllLand: bool | None = None
1584
+ ownsAllLand: bool | None
1575
1585
  """
1576
1586
  Indicates if the appellant has complete ownership of the site
1577
1587
  """
1578
- ownsSomeLand: bool | None = None
1588
+ ownsSomeLand: bool | None
1579
1589
  """
1580
1590
  Indicates if the appellant has partial ownership of the site
1581
1591
  """
1582
- knowsOtherOwners: KnowsOtherOwners
1592
+ knowsOtherOwners: KnowsOtherOwners | None
1583
1593
  """
1584
1594
  Indicates if the appellant knows other owners of the site
1585
1595
  """
1586
- knowsAllOwners: KnowsAllOwners
1596
+ knowsAllOwners: KnowsAllOwners | None
1587
1597
  """
1588
1598
  Indicates if the appellant knows all owners of the site
1589
1599
  """
1590
- advertisedAppeal: bool | None = None
1600
+ advertisedAppeal: bool | None
1591
1601
  """
1592
1602
  Indicates if the appellant has advertised the appeal to the LPA decision
1593
1603
  """
1594
- notificationMethod: list[NotificationMethodEnum] = Field(
1604
+ notificationMethod: list[NotificationMethodEnum] | None = Field(
1595
1605
  ..., examples=[["notice", "letter"], ["advert"]]
1596
1606
  )
1597
1607
  """
1598
1608
  The methods used to notify relevant parties
1599
1609
  """
1600
- ownersInformed: bool | None = None
1610
+ ownersInformed: bool | None
1601
1611
  """
1602
1612
  Indicates if the appellant has informed other owners of the site
1603
1613
  """
@@ -1607,7 +1617,7 @@ class AppealS78Case2(BaseModel):
1607
1617
  """
1608
1618
  The original description of the development, as provided by the appellant
1609
1619
  """
1610
- changedDevelopmentDescription: bool | None = None
1620
+ changedDevelopmentDescription: bool | None
1611
1621
  """
1612
1622
  Indicates that the LPA has changed the development description
1613
1623
  """
@@ -1625,23 +1635,23 @@ class AppealS78Case2(BaseModel):
1625
1635
  """
1626
1636
  extra conditions details provided by the LPA
1627
1637
  """
1628
- nearbyCaseReferences: list[str]
1638
+ nearbyCaseReferences: list[str] | None
1629
1639
  """
1630
1640
  A list of related case references known to the appellant and the LPA
1631
1641
  """
1632
- neighbouringSiteAddresses: list[NeighbouringSiteAddress]
1642
+ neighbouringSiteAddresses: list[NeighbouringSiteAddress] | None
1633
1643
  """
1634
1644
  A list of neighbouring site addresses
1635
1645
  """
1636
- reasonForNeighbourVisits: str | None = None
1646
+ reasonForNeighbourVisits: str | None
1637
1647
  """
1638
1648
  A general reason given for the need to visit any neighbours
1639
1649
  """
1640
- affectedListedBuildingNumbers: list[str]
1650
+ affectedListedBuildingNumbers: list[str] | None
1641
1651
  """
1642
1652
  A list of affected listed building IDs from Historic England
1643
1653
  """
1644
- changedListedBuildingNumbers: list[str]
1654
+ changedListedBuildingNumbers: list[str] | None
1645
1655
  """
1646
1656
  A list of changed listed building IDs from Historic England
1647
1657
  """
@@ -1653,115 +1663,115 @@ class AppealS78Case2(BaseModel):
1653
1663
  """
1654
1664
  Are Historic England to be consulted?
1655
1665
  """
1656
- appellantCostsAppliedFor: bool | None = None
1666
+ appellantCostsAppliedFor: bool | None
1657
1667
  """
1658
1668
  Indicates if the appellant has applied for costs
1659
1669
  """
1660
- lpaCostsAppliedFor: bool | None = None
1670
+ lpaCostsAppliedFor: bool | None
1661
1671
  """
1662
1672
  Indicates if the appellant has applied for costs
1663
1673
  """
1664
- agriculturalHolding: bool | None = None
1674
+ agriculturalHolding: bool | None
1665
1675
  """
1666
1676
  Indicates if the site is an agricultural holding
1667
1677
  """
1668
- tenantAgriculturalHolding: bool | None = None
1678
+ tenantAgriculturalHolding: bool | None
1669
1679
  """
1670
1680
  Indicates if the site is a tenant agricultural holding
1671
1681
  """
1672
- otherTenantsAgriculturalHolding: bool | None = None
1682
+ otherTenantsAgriculturalHolding: bool | None
1673
1683
  """
1674
1684
  Indicates if the site is an agricultural holding with other tenants
1675
1685
  """
1676
- informedTenantsAgriculturalHolding: bool | None = None
1686
+ informedTenantsAgriculturalHolding: bool | None
1677
1687
  """
1678
1688
  If the site is an agricultural holding, indicates tenants are informed
1679
1689
  """
1680
- appellantProcedurePreference: AppellantProcedurePreference
1690
+ appellantProcedurePreference: AppellantProcedurePreference | None
1681
1691
  """
1682
1692
  The procedure preference indicated by the appellant
1683
1693
  """
1684
- appellantProcedurePreferenceDetails: str | None = None
1694
+ appellantProcedurePreferenceDetails: str | None
1685
1695
  """
1686
1696
  The procedure details preference indicated by the appellant
1687
1697
  """
1688
- appellantProcedurePreferenceDuration: float | None = None
1698
+ appellantProcedurePreferenceDuration: float | None
1689
1699
  """
1690
1700
  The duration of the procedure indicated by the appellant
1691
1701
  """
1692
- appellantProcedurePreferenceWitnessCount: float | None = None
1702
+ appellantProcedurePreferenceWitnessCount: float | None
1693
1703
  """
1694
1704
  The number of witnesses appellant has suggested for inquiries preference
1695
1705
  """
1696
- statusPlanningObligation: str | None = None
1706
+ statusPlanningObligation: str | None
1697
1707
  """
1698
1708
  The planning obligation information, if available
1699
1709
  """
1700
- affectsScheduledMonument: bool | None = None
1710
+ affectsScheduledMonument: bool | None
1701
1711
  """
1702
1712
  Indicates that a scheduled monument is affected
1703
1713
  """
1704
- hasProtectedSpecies: bool | None = None
1714
+ hasProtectedSpecies: bool | None
1705
1715
  """
1706
1716
  Indicates the existence of protected species
1707
1717
  """
1708
- isAonbNationalLandscape: bool | None = None
1718
+ isAonbNationalLandscape: bool | None
1709
1719
  """
1710
1720
  Indicates an area of outstanding beauty (National Landscape)
1711
1721
  """
1712
- designatedSitesNames: list[str]
1722
+ designatedSitesNames: list[str] | None
1713
1723
  """
1714
1724
  The designated site names
1715
1725
  """
1716
- isGypsyOrTravellerSite: bool | None = None
1726
+ isGypsyOrTravellerSite: bool | None
1717
1727
  """
1718
1728
  Indicates a traveller site
1719
1729
  """
1720
- isPublicRightOfWay: bool | None = None
1730
+ isPublicRightOfWay: bool | None
1721
1731
  """
1722
1732
  Indicates a PROW (public right of way)
1723
1733
  """
1724
- eiaEnvironmentalImpactSchedule: EiaEnvironmentalImpactSchedule
1734
+ eiaEnvironmentalImpactSchedule: EiaEnvironmentalImpactSchedule | None
1725
1735
  """
1726
1736
  The impact schedule from EIA
1727
1737
  """
1728
- eiaDevelopmentDescription: EiaDevelopmentDescription
1738
+ eiaDevelopmentDescription: EiaDevelopmentDescription | None
1729
1739
  """
1730
1740
  The development description from EIA
1731
1741
  """
1732
- eiaSensitiveAreaDetails: str | None = None
1742
+ eiaSensitiveAreaDetails: str | None
1733
1743
  """
1734
1744
  The sensitive area details from EIA
1735
1745
  """
1736
- eiaColumnTwoThreshold: bool | None = None
1746
+ eiaColumnTwoThreshold: bool | None
1737
1747
  """
1738
1748
  EIA specific threshold
1739
1749
  """
1740
- eiaScreeningOpinion: bool | None = None
1750
+ eiaScreeningOpinion: bool | None
1741
1751
  """
1742
1752
  EIA screening opinion
1743
1753
  """
1744
- eiaRequiresEnvironmentalStatement: bool | None = None
1754
+ eiaRequiresEnvironmentalStatement: bool | None
1745
1755
  """
1746
1756
  EIA environmental statement required
1747
1757
  """
1748
- eiaCompletedEnvironmentalStatement: bool | None = None
1758
+ eiaCompletedEnvironmentalStatement: bool | None
1749
1759
  """
1750
1760
  EIA completed environmental statement required
1751
1761
  """
1752
- hasStatutoryConsultees: bool | None = None
1762
+ hasStatutoryConsultees: bool | None
1753
1763
  """
1754
1764
  Indicates statutory consultees
1755
1765
  """
1756
- consultedBodiesDetails: str | None = None
1766
+ consultedBodiesDetails: str | None
1757
1767
  """
1758
1768
  The details of the bodies consulted
1759
1769
  """
1760
- hasInfrastructureLevy: bool | None = None
1770
+ hasInfrastructureLevy: bool | None
1761
1771
  """
1762
1772
  Indicates the existence of an infrastructure levy
1763
1773
  """
1764
- isInfrastructureLevyFormallyAdopted: bool | None = None
1774
+ isInfrastructureLevyFormallyAdopted: bool | None
1765
1775
  """
1766
1776
  Indicates if the infrastructure levy is formally adopted
1767
1777
  """
@@ -1777,22 +1787,22 @@ class AppealS78Case2(BaseModel):
1777
1787
  """
1778
1788
  The expected date of the infrastructure levy
1779
1789
  """
1780
- lpaProcedurePreference: LpaProcedurePreference
1790
+ lpaProcedurePreference: LpaProcedurePreference | None
1781
1791
  """
1782
1792
  The procedure preference indicated by the LPA
1783
1793
  """
1784
- lpaProcedurePreferenceDetails: str | None = None
1794
+ lpaProcedurePreferenceDetails: str | None
1785
1795
  """
1786
1796
  The procedure details preference indicated by the LPA
1787
1797
  """
1788
- lpaProcedurePreferenceDuration: float | None = None
1798
+ lpaProcedurePreferenceDuration: float | None
1789
1799
  """
1790
1800
  The duration of enquiry indicated by the LPA
1791
1801
  """
1792
- caseworkReason: str | None = None
1793
- importantInformation: str | None = None
1794
- jurisdiction: str | None = None
1795
- redeterminedIndicator: str | None = None
1802
+ caseworkReason: str | None
1803
+ importantInformation: str | None
1804
+ jurisdiction: str | None
1805
+ redeterminedIndicator: str | None
1796
1806
  dateCostsReportDespatched: AwareDatetime | None = Field(
1797
1807
  ..., examples=["2023-07-27T20:30:00.000Z"]
1798
1808
  )
@@ -1851,7 +1861,7 @@ class AppealS78Case2(BaseModel):
1851
1861
  """
1852
1862
  The date of the Case Management Conference (CMC)
1853
1863
  """
1854
- numberOfResidencesNetChange: float | None = None
1864
+ numberOfResidencesNetChange: float | None
1855
1865
  """
1856
1866
  The net gain in residences of the proposed development
1857
1867
  """
@@ -1861,10 +1871,10 @@ class AppealS78Case2(BaseModel):
1861
1871
  siteGridReferenceNorthing: constr(pattern=r"^\d{6,7}$") | None = Field(
1862
1872
  None, examples=["400534"]
1863
1873
  )
1864
- siteViewableFromRoad: bool | None = None
1865
- siteWithinSSSI: bool | None = None
1866
- typeOfPlanningApplication: TypeOfPlanningApplication
1867
- developmentType: DevelopmentType
1874
+ siteViewableFromRoad: bool | None
1875
+ siteWithinSSSI: bool | None
1876
+ typeOfPlanningApplication: TypeOfPlanningApplication | None
1877
+ developmentType: DevelopmentType | None
1868
1878
  statementOfCommonGroundDueDate: AwareDatetime | None = Field(
1869
1879
  None, examples=["2023-07-27T20:30:00.000Z"]
1870
1880
  )
@@ -2027,13 +2037,13 @@ class AppealS78Case2(BaseModel):
2027
2037
  Indicates if the screening opinion specifies that an EIA is required (Expedited Appeals)
2028
2038
  """
2029
2039
  significantChangesAffectingApplicationAppellant: (
2030
- list[SignificantChangesAffectingApplicationAppellantItem] | None
2040
+ list[SignificantChangesAffectingApplicationAppellantItem1] | None
2031
2041
  ) = None
2032
2042
  """
2033
2043
  Significant changes affecting the application as reported by the appellant (Expedited Appeals)
2034
2044
  """
2035
2045
  significantChangesAffectingApplicationLpa: (
2036
- list[SignificantChangesAffectingApplicationLpaItem] | None
2046
+ list[SignificantChangesAffectingApplicationLpaItem1] | None
2037
2047
  ) = None
2038
2048
  """
2039
2049
  Significant changes affecting the application as reported by the LPA (Expedited Appeals)
@@ -2045,3 +2055,11 @@ class AppealS78Case(RootModel[AppealS78Case1 | AppealS78Case2]):
2045
2055
  """
2046
2056
  Group B - Schema defining the metadata for an appeal
2047
2057
  """
2058
+
2059
+
2060
+ class SignificantChangesAffectingApplication(Enum):
2061
+ adopted_a_new_local_plan = "adopted-a-new-local-plan"
2062
+ national_policy_change = "national-policy-change"
2063
+ court_judgement = "court-judgement"
2064
+ other = "other"
2065
+ NoneType_None = None