@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
  """
@@ -29,7 +29,7 @@ class CaseStatus(Enum):
29
29
  awaiting_event = "awaiting_event"
30
30
 
31
31
 
32
- class CaseType(Enum):
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(Enum):
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(Enum):
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 = 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 = None
261
+ advertType: AdvertType | None
262
+ isAdvertInPosition: bool | None
263
263
  """
264
264
  Is the advertisement in position?
265
265
  """
266
- isSiteOnHighwayLand: bool | None = 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 SignificantChangesAffectingApplication(Enum):
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: SignificantChangesAffectingApplication
281
+ value: Value | None
297
282
  comment: str | None = None
298
283
 
299
284
 
300
285
  class SignificantChangesAffectingApplicationLpaItem(BaseModel):
301
- value: SignificantChangesAffectingApplication
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 = 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 = 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 = 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 = None
570
+ isCorrectAppealType: bool | None
586
571
  """
587
572
  Indicates if the LPA considers the appeal type appropriate
588
573
  """
589
- isGreenBelt: bool | None = None
574
+ isGreenBelt: bool | None
590
575
  """
591
576
  Indicates if the site is in a green belt
592
577
  """
593
- inConservationArea: bool | None = 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 = 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 = 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 = 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 = 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 = 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 = None
743
+ appellantCostsAppliedFor: bool | None
759
744
  """
760
745
  Indicates if the appellant has applied for costs
761
746
  """
762
- lpaCostsAppliedFor: bool | None = 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 = 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 = 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 = 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 = None
1105
+ isCorrectAppealType: bool | None
1096
1106
  """
1097
1107
  Indicates if the LPA considers the appeal type appropriate
1098
1108
  """
1099
- isGreenBelt: bool | None = None
1109
+ isGreenBelt: bool | None
1100
1110
  """
1101
1111
  Indicates if the site is in a green belt
1102
1112
  """
1103
- inConservationArea: bool | None = 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 = 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 = 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 = 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 = 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 = 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 = None
1278
+ appellantCostsAppliedFor: bool | None
1269
1279
  """
1270
1280
  Indicates if the appellant has applied for costs
1271
1281
  """
1272
- lpaCostsAppliedFor: bool | None = 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[SignificantChangesAffectingApplicationAppellantItem] | None
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[SignificantChangesAffectingApplicationLpaItem] | None
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(Enum):
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 = None
91
+ originalRepresentation: str | None
92
92
  """
93
93
  The original representation
94
94
  """
95
- redacted: bool | None = None
95
+ redacted: bool | None
96
96
  """
97
97
  Indicates if the representation is redacted
98
98
  """
99
- redactedRepresentation: str | None = None
99
+ redactedRepresentation: str | None
100
100
  """
101
101
  The redacted version of the representation
102
102
  """
103
- redactedBy: str | None = 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 = 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
  """