@planning-inspectorate/data-model 1.16.1 → 1.18.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 -2
- package/docs/appeal-has.md +764 -86
- package/docs/appeal-s78.md +55 -133
- package/package.json +1 -1
- package/pins_data_model/models/model_appeal_has.py +647 -8
- package/pins_data_model/models/model_appeal_s78.py +604 -10
- package/schemas/appeal-has.schema.json +161 -9
- package/schemas/appeal-s78.schema.json +81 -125
- package/schemas/commands/appeal-advert.submission.schema.json +23 -0
- package/schemas/commands/appeal-common-submission.schema.json +30 -8
- package/schemas/commands/appeal-has-submission.schema.json +0 -1
- package/schemas/commands/appeal-s78-submission.schema.json +0 -1
- package/schemas/commands/appellant-submission.schema.json +17 -6
- package/schemas/commands/lpa-questionnaire-has.schema.json +0 -1
- package/schemas/commands/lpa-questionnaire-s78.schema.json +0 -1
- package/schemas/commands/lpa-questionnaire.schema.json +14 -12
- package/src/lib/gen-docs.js +4 -2
- package/src/schemas.d.ts +284 -533
- package/tests/appeals/appeal-has.test.js +243 -0
- package/tests/appeals/appeal-s78.test.js +227 -0
- package/tests/appeals/commands/adverts-questionnaire.test.js +92 -0
- package/tests/appeals/commands/adverts-submission.test.js +188 -0
- package/tests/appeals/commands/has-questionnaire.test.js +3 -3
- package/tests/appeals/commands/has-submission.test.js +62 -1
- package/tests/appeals/commands/s78-questionnaire.test.js +8 -1
- package/tests/appeals/commands/s78-submission.test.js +60 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: appeal-s78.schema.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-09-09T11:38:22+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from uuid import UUID
|
|
9
9
|
|
|
10
|
-
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel
|
|
10
|
+
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel, constr
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class CaseStatus(Enum):
|
|
@@ -302,9 +302,9 @@ class DevelopmentType(Enum):
|
|
|
302
302
|
NoneType_None = None
|
|
303
303
|
|
|
304
304
|
|
|
305
|
-
class
|
|
305
|
+
class AppealS78Case1(BaseModel):
|
|
306
306
|
"""
|
|
307
|
-
Schema defining the metadata for an appeal
|
|
307
|
+
Group B - Schema defining the metadata for an appeal
|
|
308
308
|
"""
|
|
309
309
|
|
|
310
310
|
model_config = ConfigDict(
|
|
@@ -543,7 +543,7 @@ class AppealS78Case(BaseModel):
|
|
|
543
543
|
"""
|
|
544
544
|
The statutory deadline for submitting an appeal from the original LPA decision date
|
|
545
545
|
"""
|
|
546
|
-
siteAddressLine1: str = Field(
|
|
546
|
+
siteAddressLine1: str | None = Field(None, examples=["96 The Avenue"])
|
|
547
547
|
"""
|
|
548
548
|
First line of address for the appeal site
|
|
549
549
|
"""
|
|
@@ -551,15 +551,15 @@ class AppealS78Case(BaseModel):
|
|
|
551
551
|
"""
|
|
552
552
|
Second line of address for the appeal site
|
|
553
553
|
"""
|
|
554
|
-
siteAddressTown: str = Field(
|
|
554
|
+
siteAddressTown: str | None = Field(None, examples=["Maidstone"])
|
|
555
555
|
"""
|
|
556
556
|
Town / City of the site address
|
|
557
557
|
"""
|
|
558
|
-
siteAddressCounty: str | None = Field(
|
|
558
|
+
siteAddressCounty: str | None = Field(None, examples=["Kent"])
|
|
559
559
|
"""
|
|
560
560
|
County of the site address
|
|
561
561
|
"""
|
|
562
|
-
siteAddressPostcode: str = Field(
|
|
562
|
+
siteAddressPostcode: str | None = Field(None, examples=["MD21 5XY"])
|
|
563
563
|
"""
|
|
564
564
|
Postal code of the site address
|
|
565
565
|
"""
|
|
@@ -857,8 +857,595 @@ class AppealS78Case(BaseModel):
|
|
|
857
857
|
"""
|
|
858
858
|
The net gain in residences of the proposed development
|
|
859
859
|
"""
|
|
860
|
-
siteGridReferenceEasting:
|
|
861
|
-
|
|
860
|
+
siteGridReferenceEasting: constr(pattern=r"^\d{6}$") | None = Field(
|
|
861
|
+
..., examples=["357144"]
|
|
862
|
+
)
|
|
863
|
+
siteGridReferenceNorthing: constr(pattern=r"^\d{6}$") | None = Field(
|
|
864
|
+
..., examples=["400534"]
|
|
865
|
+
)
|
|
866
|
+
siteViewableFromRoad: bool | None = None
|
|
867
|
+
siteWithinSSSI: bool | None = None
|
|
868
|
+
typeOfPlanningApplication: TypeOfPlanningApplication
|
|
869
|
+
developmentType: DevelopmentType
|
|
870
|
+
statementOfCommonGroundDueDate: AwareDatetime | None = Field(
|
|
871
|
+
None, examples=["2023-07-27T20:30:00.000Z"]
|
|
872
|
+
)
|
|
873
|
+
planningObligationDueDate: AwareDatetime | None = Field(
|
|
874
|
+
None, examples=["2023-07-27T20:30:00.000Z"]
|
|
875
|
+
)
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
class NotificationMethodEnum1EnumEnum(Enum):
|
|
879
|
+
notice = "notice"
|
|
880
|
+
letter = "letter"
|
|
881
|
+
advert = "advert"
|
|
882
|
+
|
|
883
|
+
|
|
884
|
+
class NotificationMethodEnum1(RootModel[NotificationMethodEnum1EnumEnum | None]):
|
|
885
|
+
root: NotificationMethodEnum1EnumEnum | None = None
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
class AppealS78Case2(BaseModel):
|
|
889
|
+
"""
|
|
890
|
+
Group B - Schema defining the metadata for an appeal
|
|
891
|
+
"""
|
|
892
|
+
|
|
893
|
+
model_config = ConfigDict(
|
|
894
|
+
extra="allow",
|
|
895
|
+
)
|
|
896
|
+
caseId: int | None = Field(..., examples=[1200])
|
|
897
|
+
"""
|
|
898
|
+
Internal case identifier
|
|
899
|
+
"""
|
|
900
|
+
caseReference: str = Field(..., examples=["7002471"])
|
|
901
|
+
"""
|
|
902
|
+
External case identifier
|
|
903
|
+
"""
|
|
904
|
+
submissionId: UUID | None = Field(
|
|
905
|
+
None, examples=["7f45748c-2342-4b59-b934-ad6183e8d834"]
|
|
906
|
+
)
|
|
907
|
+
"""
|
|
908
|
+
Case submission id - link to draft submission created by appellant
|
|
909
|
+
"""
|
|
910
|
+
caseStatus: CaseStatus
|
|
911
|
+
"""
|
|
912
|
+
The processing status for the appeal
|
|
913
|
+
"""
|
|
914
|
+
caseType: CaseType
|
|
915
|
+
"""
|
|
916
|
+
The internal code for an appeal type, e.g. D (Householder)
|
|
917
|
+
"""
|
|
918
|
+
caseProcedure: CaseProcedure
|
|
919
|
+
"""
|
|
920
|
+
The type of procedure for the appeal
|
|
921
|
+
"""
|
|
922
|
+
lpaCode: str = Field(..., examples=["Q9999"])
|
|
923
|
+
"""
|
|
924
|
+
A unique identifier for the Local Planning Authority
|
|
925
|
+
"""
|
|
926
|
+
caseOfficerId: str | None = None
|
|
927
|
+
"""
|
|
928
|
+
Unique identifier for the case officer assigned to the case
|
|
929
|
+
"""
|
|
930
|
+
inspectorId: str | None = None
|
|
931
|
+
"""
|
|
932
|
+
Unique identifier for the inspector assigned to the case
|
|
933
|
+
"""
|
|
934
|
+
allocationLevel: AllocationLevel
|
|
935
|
+
"""
|
|
936
|
+
A level used for allocation purposes
|
|
937
|
+
"""
|
|
938
|
+
allocationBand: AllocationBand
|
|
939
|
+
"""
|
|
940
|
+
A band used for allocation purposes
|
|
941
|
+
"""
|
|
942
|
+
caseSpecialisms: list[str] = Field(
|
|
943
|
+
...,
|
|
944
|
+
examples=[
|
|
945
|
+
"Access",
|
|
946
|
+
"Listed building and enforcement",
|
|
947
|
+
"Roads and traffics",
|
|
948
|
+
"Natural heritage",
|
|
949
|
+
"Schedule 1",
|
|
950
|
+
],
|
|
951
|
+
)
|
|
952
|
+
"""
|
|
953
|
+
A list of specialisms for allocation purposes
|
|
954
|
+
"""
|
|
955
|
+
caseSubmittedDate: AwareDatetime = Field(..., examples=["2023-07-27T20:30:00.000Z"])
|
|
956
|
+
"""
|
|
957
|
+
The date the appeal was submitted by the appellant
|
|
958
|
+
"""
|
|
959
|
+
caseCreatedDate: AwareDatetime = Field(..., examples=["2023-07-27T20:30:00.000Z"])
|
|
960
|
+
"""
|
|
961
|
+
The date the appeal was received
|
|
962
|
+
"""
|
|
963
|
+
caseUpdatedDate: AwareDatetime = Field(..., examples=["2023-07-27T20:30:00.000Z"])
|
|
964
|
+
"""
|
|
965
|
+
The date the appeal was last updated in the back-office
|
|
966
|
+
"""
|
|
967
|
+
caseValidDate: AwareDatetime | None = Field(
|
|
968
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
969
|
+
)
|
|
970
|
+
"""
|
|
971
|
+
The date since when the appeal was considered valid
|
|
972
|
+
"""
|
|
973
|
+
caseValidationDate: AwareDatetime | None = Field(
|
|
974
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
975
|
+
)
|
|
976
|
+
"""
|
|
977
|
+
The date the appeal was validated in the back-office
|
|
978
|
+
"""
|
|
979
|
+
caseValidationOutcome: CaseValidationOutcome
|
|
980
|
+
"""
|
|
981
|
+
The outcome of the validation action
|
|
982
|
+
"""
|
|
983
|
+
caseValidationInvalidDetails: list[str]
|
|
984
|
+
"""
|
|
985
|
+
A list of reasons why the appeal is invalid
|
|
986
|
+
"""
|
|
987
|
+
caseValidationIncompleteDetails: list[str]
|
|
988
|
+
"""
|
|
989
|
+
A list of reasons why the appeal is incomplete
|
|
990
|
+
"""
|
|
991
|
+
caseExtensionDate: AwareDatetime | None = Field(
|
|
992
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
993
|
+
)
|
|
994
|
+
"""
|
|
995
|
+
When the validation outcome is incomplete, an extension may be granted to provide missing information
|
|
996
|
+
"""
|
|
997
|
+
caseStartedDate: AwareDatetime | None = Field(
|
|
998
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
999
|
+
)
|
|
1000
|
+
"""
|
|
1001
|
+
A date indicating when the case was started, resulting in the creation of a timetable
|
|
1002
|
+
"""
|
|
1003
|
+
casePublishedDate: AwareDatetime | None = Field(
|
|
1004
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1005
|
+
)
|
|
1006
|
+
"""
|
|
1007
|
+
A date indicating when the case was published
|
|
1008
|
+
"""
|
|
1009
|
+
linkedCaseStatus: LinkedCaseStatus
|
|
1010
|
+
"""
|
|
1011
|
+
Indicates if the case is linked, and the type of relationship
|
|
1012
|
+
"""
|
|
1013
|
+
leadCaseReference: str | None = Field(..., examples=["7002471"])
|
|
1014
|
+
"""
|
|
1015
|
+
The reference of the lead case, if the case is a child case
|
|
1016
|
+
"""
|
|
1017
|
+
lpaQuestionnaireDueDate: AwareDatetime | None = Field(
|
|
1018
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1019
|
+
)
|
|
1020
|
+
"""
|
|
1021
|
+
If the case is started and has a timetable, a deadline for the LPA to provide a response
|
|
1022
|
+
"""
|
|
1023
|
+
lpaQuestionnaireSubmittedDate: AwareDatetime | None = Field(
|
|
1024
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1025
|
+
)
|
|
1026
|
+
"""
|
|
1027
|
+
The date the LPA provided a response to the case
|
|
1028
|
+
"""
|
|
1029
|
+
lpaQuestionnaireCreatedDate: AwareDatetime | None = Field(
|
|
1030
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1031
|
+
)
|
|
1032
|
+
"""
|
|
1033
|
+
The date the LPA response was receeived
|
|
1034
|
+
"""
|
|
1035
|
+
lpaQuestionnairePublishedDate: AwareDatetime | None = Field(
|
|
1036
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1037
|
+
)
|
|
1038
|
+
"""
|
|
1039
|
+
The date indicating when the questionnaire review was completed and the questionnaire published
|
|
1040
|
+
"""
|
|
1041
|
+
lpaQuestionnaireValidationOutcome: LpaQuestionnaireValidationOutcome
|
|
1042
|
+
"""
|
|
1043
|
+
The outcome of the validation action
|
|
1044
|
+
"""
|
|
1045
|
+
lpaQuestionnaireValidationOutcomeDate: AwareDatetime | None = Field(
|
|
1046
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1047
|
+
)
|
|
1048
|
+
"""
|
|
1049
|
+
The date the LPA response was validated
|
|
1050
|
+
"""
|
|
1051
|
+
lpaQuestionnaireValidationDetails: list[str]
|
|
1052
|
+
"""
|
|
1053
|
+
A list of reasons why the questionnaire is incomplete
|
|
1054
|
+
"""
|
|
1055
|
+
lpaStatement: str | None = Field(
|
|
1056
|
+
..., examples=["We refused the application because of ..."]
|
|
1057
|
+
)
|
|
1058
|
+
"""
|
|
1059
|
+
A statement provided by the LPA
|
|
1060
|
+
"""
|
|
1061
|
+
caseWithdrawnDate: AwareDatetime | None = Field(
|
|
1062
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1063
|
+
)
|
|
1064
|
+
"""
|
|
1065
|
+
The date the appeal was withdrawn by the appellant
|
|
1066
|
+
"""
|
|
1067
|
+
caseTransferredDate: AwareDatetime | None = Field(
|
|
1068
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1069
|
+
)
|
|
1070
|
+
"""
|
|
1071
|
+
The date the appeal was transferred to a new case of a different type
|
|
1072
|
+
"""
|
|
1073
|
+
transferredCaseClosedDate: AwareDatetime | None = Field(
|
|
1074
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1075
|
+
)
|
|
1076
|
+
"""
|
|
1077
|
+
The date the appeal was closed and the appellant requested to resubmit
|
|
1078
|
+
"""
|
|
1079
|
+
caseDecisionOutcomeDate: AwareDatetime | None = Field(
|
|
1080
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1081
|
+
)
|
|
1082
|
+
"""
|
|
1083
|
+
The date of the appeal decision
|
|
1084
|
+
"""
|
|
1085
|
+
caseDecisionPublishedDate: AwareDatetime | None = Field(
|
|
1086
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1087
|
+
)
|
|
1088
|
+
"""
|
|
1089
|
+
The date the appeal decision was published
|
|
1090
|
+
"""
|
|
1091
|
+
caseDecisionOutcome: CaseDecisionOutcome
|
|
1092
|
+
"""
|
|
1093
|
+
The final outcome for the decision
|
|
1094
|
+
"""
|
|
1095
|
+
caseCompletedDate: AwareDatetime | None = Field(
|
|
1096
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1097
|
+
)
|
|
1098
|
+
"""
|
|
1099
|
+
The date the appeal decision letter
|
|
1100
|
+
"""
|
|
1101
|
+
enforcementNotice: bool | None = None
|
|
1102
|
+
"""
|
|
1103
|
+
Indicates if an enforcement notice is the reason for the appeal
|
|
1104
|
+
"""
|
|
1105
|
+
applicationReference: str = Field(..., examples=["43010/APP/1/290572"])
|
|
1106
|
+
"""
|
|
1107
|
+
The unique identifier of the LPA application
|
|
1108
|
+
"""
|
|
1109
|
+
applicationDate: AwareDatetime = Field(..., examples=["2023-07-27T20:30:00.000Z"])
|
|
1110
|
+
"""
|
|
1111
|
+
The date of the original LPA application
|
|
1112
|
+
"""
|
|
1113
|
+
applicationDecision: ApplicationDecision
|
|
1114
|
+
"""
|
|
1115
|
+
The outcome of the original LPA decision
|
|
1116
|
+
"""
|
|
1117
|
+
applicationDecisionDate: AwareDatetime | None = Field(
|
|
1118
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1119
|
+
)
|
|
1120
|
+
"""
|
|
1121
|
+
The date of the original LPA decision
|
|
1122
|
+
"""
|
|
1123
|
+
caseSubmissionDueDate: AwareDatetime | None = Field(
|
|
1124
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1125
|
+
)
|
|
1126
|
+
"""
|
|
1127
|
+
The statutory deadline for submitting an appeal from the original LPA decision date
|
|
1128
|
+
"""
|
|
1129
|
+
siteAddressLine1: str | None = Field(..., examples=["96 The Avenue"])
|
|
1130
|
+
"""
|
|
1131
|
+
First line of address for the appeal site
|
|
1132
|
+
"""
|
|
1133
|
+
siteAddressLine2: str | None = None
|
|
1134
|
+
"""
|
|
1135
|
+
Second line of address for the appeal site
|
|
1136
|
+
"""
|
|
1137
|
+
siteAddressTown: str | None = Field(..., examples=["Maidstone"])
|
|
1138
|
+
"""
|
|
1139
|
+
Town / City of the site address
|
|
1140
|
+
"""
|
|
1141
|
+
siteAddressCounty: str | None = Field(None, examples=["Kent"])
|
|
1142
|
+
"""
|
|
1143
|
+
County of the site address
|
|
1144
|
+
"""
|
|
1145
|
+
siteAddressPostcode: str | None = Field(..., examples=["MD21 5XY"])
|
|
1146
|
+
"""
|
|
1147
|
+
Postal code of the site address
|
|
1148
|
+
"""
|
|
1149
|
+
siteAccessDetails: list[str]
|
|
1150
|
+
"""
|
|
1151
|
+
Provided information on site accessibility
|
|
1152
|
+
"""
|
|
1153
|
+
siteSafetyDetails: list[str]
|
|
1154
|
+
"""
|
|
1155
|
+
Provided information on site health and safety
|
|
1156
|
+
"""
|
|
1157
|
+
siteAreaSquareMetres: float | None = Field(..., examples=[45.7])
|
|
1158
|
+
"""
|
|
1159
|
+
The site area, in square meters
|
|
1160
|
+
"""
|
|
1161
|
+
floorSpaceSquareMetres: float | None = Field(..., examples=[3.5])
|
|
1162
|
+
"""
|
|
1163
|
+
The floor space, in square meters
|
|
1164
|
+
"""
|
|
1165
|
+
isCorrectAppealType: bool | None = None
|
|
1166
|
+
"""
|
|
1167
|
+
Indicates if the LPA considers the appeal type appropriate
|
|
1168
|
+
"""
|
|
1169
|
+
isGreenBelt: bool | None = None
|
|
1170
|
+
"""
|
|
1171
|
+
Indicates if the site is in a green belt
|
|
1172
|
+
"""
|
|
1173
|
+
inConservationArea: bool | None = None
|
|
1174
|
+
"""
|
|
1175
|
+
Indicates if the site is in a conservation area
|
|
1176
|
+
"""
|
|
1177
|
+
ownsAllLand: bool | None = None
|
|
1178
|
+
"""
|
|
1179
|
+
Indicates if the appellant has complete ownership of the site
|
|
1180
|
+
"""
|
|
1181
|
+
ownsSomeLand: bool | None = None
|
|
1182
|
+
"""
|
|
1183
|
+
Indicates if the appellant has partial ownership of the site
|
|
1184
|
+
"""
|
|
1185
|
+
knowsOtherOwners: KnowsOtherOwners
|
|
1186
|
+
"""
|
|
1187
|
+
Indicates if the appellant knows other owners of the site
|
|
1188
|
+
"""
|
|
1189
|
+
knowsAllOwners: KnowsAllOwners
|
|
1190
|
+
"""
|
|
1191
|
+
Indicates if the appellant knows all owners of the site
|
|
1192
|
+
"""
|
|
1193
|
+
advertisedAppeal: bool | None = None
|
|
1194
|
+
"""
|
|
1195
|
+
Indicates if the appellant has advertised the appeal to the LPA decision
|
|
1196
|
+
"""
|
|
1197
|
+
notificationMethod: list[NotificationMethodEnum1]
|
|
1198
|
+
"""
|
|
1199
|
+
The methods used to notify relevant parties
|
|
1200
|
+
"""
|
|
1201
|
+
ownersInformed: bool | None = None
|
|
1202
|
+
"""
|
|
1203
|
+
Indicates if the appellant has informed other owners of the site
|
|
1204
|
+
"""
|
|
1205
|
+
originalDevelopmentDescription: str | None = Field(
|
|
1206
|
+
..., examples=["Replacement of an existing gate to access the property"]
|
|
1207
|
+
)
|
|
1208
|
+
"""
|
|
1209
|
+
The original description of the development, as provided by the appellant
|
|
1210
|
+
"""
|
|
1211
|
+
changedDevelopmentDescription: bool | None = None
|
|
1212
|
+
"""
|
|
1213
|
+
Indicates that the LPA has changed the development description
|
|
1214
|
+
"""
|
|
1215
|
+
newConditionDetails: str | None = Field(
|
|
1216
|
+
...,
|
|
1217
|
+
examples=["Since the original application, a number of things have changed..."],
|
|
1218
|
+
)
|
|
1219
|
+
"""
|
|
1220
|
+
New conditions details provided by the LPA
|
|
1221
|
+
"""
|
|
1222
|
+
nearbyCaseReferences: list[str]
|
|
1223
|
+
"""
|
|
1224
|
+
A list of related case references known to the appellant and the LPA
|
|
1225
|
+
"""
|
|
1226
|
+
neighbouringSiteAddresses: list[NeighbouringSiteAddress]
|
|
1227
|
+
"""
|
|
1228
|
+
A list of neighbouring site addresses
|
|
1229
|
+
"""
|
|
1230
|
+
reasonForNeighbourVisits: str | None = None
|
|
1231
|
+
"""
|
|
1232
|
+
A general reason given for the need to visit any neighbours
|
|
1233
|
+
"""
|
|
1234
|
+
affectedListedBuildingNumbers: list[str]
|
|
1235
|
+
"""
|
|
1236
|
+
A list of affected listed building IDs from Historic England
|
|
1237
|
+
"""
|
|
1238
|
+
changedListedBuildingNumbers: list[str]
|
|
1239
|
+
"""
|
|
1240
|
+
A list of changed listed building IDs from Historic England
|
|
1241
|
+
"""
|
|
1242
|
+
preserveGrantLoan: bool | None = None
|
|
1243
|
+
"""
|
|
1244
|
+
A grant or loan has been made to preserve the listed building
|
|
1245
|
+
"""
|
|
1246
|
+
consultHistoricEngland: bool | None = None
|
|
1247
|
+
"""
|
|
1248
|
+
Are Historic England to be consulted?
|
|
1249
|
+
"""
|
|
1250
|
+
appellantCostsAppliedFor: bool | None = None
|
|
1251
|
+
"""
|
|
1252
|
+
Indicates if the appellant has applied for costs
|
|
1253
|
+
"""
|
|
1254
|
+
lpaCostsAppliedFor: bool | None = None
|
|
1255
|
+
"""
|
|
1256
|
+
Indicates if the appellant has applied for costs
|
|
1257
|
+
"""
|
|
1258
|
+
agriculturalHolding: bool | None = None
|
|
1259
|
+
"""
|
|
1260
|
+
Indicates if the site is an agricultural holding
|
|
1261
|
+
"""
|
|
1262
|
+
tenantAgriculturalHolding: bool | None = None
|
|
1263
|
+
"""
|
|
1264
|
+
Indicates if the site is a tenant agricultural holding
|
|
1265
|
+
"""
|
|
1266
|
+
otherTenantsAgriculturalHolding: bool | None = None
|
|
1267
|
+
"""
|
|
1268
|
+
Indicates if the site is an agricultural holding with other tenants
|
|
1269
|
+
"""
|
|
1270
|
+
informedTenantsAgriculturalHolding: bool | None = None
|
|
1271
|
+
"""
|
|
1272
|
+
If the site is an agricultural holding, indicates tenants are informed
|
|
1273
|
+
"""
|
|
1274
|
+
appellantProcedurePreference: AppellantProcedurePreference
|
|
1275
|
+
"""
|
|
1276
|
+
The procedure preference indicated by the appellant
|
|
1277
|
+
"""
|
|
1278
|
+
appellantProcedurePreferenceDetails: str | None = None
|
|
1279
|
+
"""
|
|
1280
|
+
The procedure details preference indicated by the appellant
|
|
1281
|
+
"""
|
|
1282
|
+
appellantProcedurePreferenceDuration: float | None = None
|
|
1283
|
+
"""
|
|
1284
|
+
The duration of the procedure indicated by the appellant
|
|
1285
|
+
"""
|
|
1286
|
+
appellantProcedurePreferenceWitnessCount: float | None = None
|
|
1287
|
+
"""
|
|
1288
|
+
The number of witnesses appellant has suggested for inquiries preference
|
|
1289
|
+
"""
|
|
1290
|
+
statusPlanningObligation: str | None = None
|
|
1291
|
+
"""
|
|
1292
|
+
The planning obligation information, if available
|
|
1293
|
+
"""
|
|
1294
|
+
affectsScheduledMonument: bool | None = None
|
|
1295
|
+
"""
|
|
1296
|
+
Indicates that a scheduled monument is affected
|
|
1297
|
+
"""
|
|
1298
|
+
hasProtectedSpecies: bool | None = None
|
|
1299
|
+
"""
|
|
1300
|
+
Indicates the existence of protected species
|
|
1301
|
+
"""
|
|
1302
|
+
isAonbNationalLandscape: bool | None = None
|
|
1303
|
+
"""
|
|
1304
|
+
Indicates an area of outstanding beauty (National Landscape)
|
|
1305
|
+
"""
|
|
1306
|
+
designatedSitesNames: list[str]
|
|
1307
|
+
"""
|
|
1308
|
+
The designated site names
|
|
1309
|
+
"""
|
|
1310
|
+
isGypsyOrTravellerSite: bool | None = None
|
|
1311
|
+
"""
|
|
1312
|
+
Indicates a traveller site
|
|
1313
|
+
"""
|
|
1314
|
+
isPublicRightOfWay: bool | None = None
|
|
1315
|
+
"""
|
|
1316
|
+
Indicates a PROW (public right of way)
|
|
1317
|
+
"""
|
|
1318
|
+
eiaEnvironmentalImpactSchedule: EiaEnvironmentalImpactSchedule
|
|
1319
|
+
"""
|
|
1320
|
+
The impact schedule from EIA
|
|
1321
|
+
"""
|
|
1322
|
+
eiaDevelopmentDescription: EiaDevelopmentDescription
|
|
1323
|
+
"""
|
|
1324
|
+
The development description from EIA
|
|
1325
|
+
"""
|
|
1326
|
+
eiaSensitiveAreaDetails: str | None = None
|
|
1327
|
+
"""
|
|
1328
|
+
The sensitive area details from EIA
|
|
1329
|
+
"""
|
|
1330
|
+
eiaColumnTwoThreshold: bool | None = None
|
|
1331
|
+
"""
|
|
1332
|
+
EIA specific threshold
|
|
1333
|
+
"""
|
|
1334
|
+
eiaScreeningOpinion: bool | None = None
|
|
1335
|
+
"""
|
|
1336
|
+
EIA screening opinion
|
|
1337
|
+
"""
|
|
1338
|
+
eiaRequiresEnvironmentalStatement: bool | None = None
|
|
1339
|
+
"""
|
|
1340
|
+
EIA environmental statement required
|
|
1341
|
+
"""
|
|
1342
|
+
eiaCompletedEnvironmentalStatement: bool | None = None
|
|
1343
|
+
"""
|
|
1344
|
+
EIA completed environmental statement required
|
|
1345
|
+
"""
|
|
1346
|
+
hasStatutoryConsultees: bool | None = None
|
|
1347
|
+
"""
|
|
1348
|
+
Indicates statutory consultees
|
|
1349
|
+
"""
|
|
1350
|
+
consultedBodiesDetails: str | None = None
|
|
1351
|
+
"""
|
|
1352
|
+
The details of the bodies consulted
|
|
1353
|
+
"""
|
|
1354
|
+
hasInfrastructureLevy: bool | None = None
|
|
1355
|
+
"""
|
|
1356
|
+
Indicates the existence of an infrastructure levy
|
|
1357
|
+
"""
|
|
1358
|
+
isInfrastructureLevyFormallyAdopted: bool | None = None
|
|
1359
|
+
"""
|
|
1360
|
+
Indicates if the infrastructure levy is formally adopted
|
|
1361
|
+
"""
|
|
1362
|
+
infrastructureLevyAdoptedDate: AwareDatetime | None = Field(
|
|
1363
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1364
|
+
)
|
|
1365
|
+
"""
|
|
1366
|
+
The date of the infrastructure levy adoption
|
|
1367
|
+
"""
|
|
1368
|
+
infrastructureLevyExpectedDate: AwareDatetime | None = Field(
|
|
1369
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1370
|
+
)
|
|
1371
|
+
"""
|
|
1372
|
+
The expected date of the infrastructure levy
|
|
1373
|
+
"""
|
|
1374
|
+
lpaProcedurePreference: LpaProcedurePreference
|
|
1375
|
+
"""
|
|
1376
|
+
The procedure preference indicated by the LPA
|
|
1377
|
+
"""
|
|
1378
|
+
lpaProcedurePreferenceDetails: str | None = None
|
|
1379
|
+
"""
|
|
1380
|
+
The procedure details preference indicated by the LPA
|
|
1381
|
+
"""
|
|
1382
|
+
lpaProcedurePreferenceDuration: float | None = None
|
|
1383
|
+
"""
|
|
1384
|
+
The duration of enquiry indicated by the LPA
|
|
1385
|
+
"""
|
|
1386
|
+
caseworkReason: str | None = None
|
|
1387
|
+
importantInformation: str | None = None
|
|
1388
|
+
jurisdiction: str | None = None
|
|
1389
|
+
redeterminedIndicator: str | None = None
|
|
1390
|
+
dateCostsReportDespatched: AwareDatetime | None = Field(
|
|
1391
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1392
|
+
)
|
|
1393
|
+
"""
|
|
1394
|
+
The date of the cost report
|
|
1395
|
+
"""
|
|
1396
|
+
dateNotRecoveredOrDerecovered: AwareDatetime | None = Field(
|
|
1397
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1398
|
+
)
|
|
1399
|
+
dateRecovered: AwareDatetime | None = Field(
|
|
1400
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1401
|
+
)
|
|
1402
|
+
originalCaseDecisionDate: AwareDatetime | None = Field(
|
|
1403
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1404
|
+
)
|
|
1405
|
+
targetDate: AwareDatetime | None = Field(..., examples=["2023-07-27T20:30:00.000Z"])
|
|
1406
|
+
appellantCommentsSubmittedDate: AwareDatetime | None = Field(
|
|
1407
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1408
|
+
)
|
|
1409
|
+
appellantStatementSubmittedDate: AwareDatetime | None = Field(
|
|
1410
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1411
|
+
)
|
|
1412
|
+
appellantProofsSubmittedDate: AwareDatetime | None = Field(
|
|
1413
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1414
|
+
)
|
|
1415
|
+
finalCommentsDueDate: AwareDatetime | None = Field(
|
|
1416
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1417
|
+
)
|
|
1418
|
+
interestedPartyRepsDueDate: AwareDatetime | None = Field(
|
|
1419
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1420
|
+
)
|
|
1421
|
+
lpaCommentsSubmittedDate: AwareDatetime | None = Field(
|
|
1422
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1423
|
+
)
|
|
1424
|
+
lpaProofsSubmittedDate: AwareDatetime | None = Field(
|
|
1425
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1426
|
+
)
|
|
1427
|
+
lpaStatementSubmittedDate: AwareDatetime | None = Field(
|
|
1428
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1429
|
+
)
|
|
1430
|
+
proofsOfEvidenceDueDate: AwareDatetime | None = Field(
|
|
1431
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1432
|
+
)
|
|
1433
|
+
siteNoticesSentDate: AwareDatetime | None = Field(
|
|
1434
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1435
|
+
)
|
|
1436
|
+
statementDueDate: AwareDatetime | None = Field(
|
|
1437
|
+
..., examples=["2023-07-27T20:30:00.000Z"]
|
|
1438
|
+
)
|
|
1439
|
+
numberOfResidencesNetChange: float | None = None
|
|
1440
|
+
"""
|
|
1441
|
+
The net gain in residences of the proposed development
|
|
1442
|
+
"""
|
|
1443
|
+
siteGridReferenceEasting: constr(pattern=r"^\d{6}$") | None = Field(
|
|
1444
|
+
None, examples=["357144"]
|
|
1445
|
+
)
|
|
1446
|
+
siteGridReferenceNorthing: constr(pattern=r"^\d{6}$") | None = Field(
|
|
1447
|
+
None, examples=["400534"]
|
|
1448
|
+
)
|
|
862
1449
|
siteViewableFromRoad: bool | None = None
|
|
863
1450
|
siteWithinSSSI: bool | None = None
|
|
864
1451
|
typeOfPlanningApplication: TypeOfPlanningApplication
|
|
@@ -869,3 +1456,10 @@ class AppealS78Case(BaseModel):
|
|
|
869
1456
|
planningObligationDueDate: AwareDatetime | None = Field(
|
|
870
1457
|
None, examples=["2023-07-27T20:30:00.000Z"]
|
|
871
1458
|
)
|
|
1459
|
+
|
|
1460
|
+
|
|
1461
|
+
class AppealS78Case(RootModel[AppealS78Case1 | AppealS78Case2]):
|
|
1462
|
+
root: AppealS78Case1 | AppealS78Case2 = Field(..., title="Appeal S78 Case")
|
|
1463
|
+
"""
|
|
1464
|
+
Group B - Schema defining the metadata for an appeal
|
|
1465
|
+
"""
|