@planning-inspectorate/data-model 2.9.0 → 2.10.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 (27) hide show
  1. package/docs/appeal-s78.md +87 -6
  2. package/package.json +1 -1
  3. package/pins_data_model/models/model_appeal_document.py +1 -1
  4. package/pins_data_model/models/model_appeal_event.py +1 -1
  5. package/pins_data_model/models/model_appeal_event_estimate.py +1 -1
  6. package/pins_data_model/models/model_appeal_has.py +1 -1
  7. package/pins_data_model/models/model_appeal_representation.py +1 -1
  8. package/pins_data_model/models/model_appeal_s78.py +41 -5
  9. package/pins_data_model/models/model_dart_response.py +1 -1
  10. package/pins_data_model/models/model_entraid.py +1 -1
  11. package/pins_data_model/models/model_folder.py +1 -1
  12. package/pins_data_model/models/model_gettimesheets_response.py +1 -1
  13. package/pins_data_model/models/model_listed_building.py +1 -1
  14. package/pins_data_model/models/model_listed_buildings.py +1 -1
  15. package/pins_data_model/models/model_nsip_document.py +1 -1
  16. package/pins_data_model/models/model_nsip_exam_timetable.py +1 -1
  17. package/pins_data_model/models/model_nsip_invoice.py +1 -1
  18. package/pins_data_model/models/model_nsip_meeting.py +1 -1
  19. package/pins_data_model/models/model_nsip_project.py +1 -1
  20. package/pins_data_model/models/model_nsip_project_update.py +1 -1
  21. package/pins_data_model/models/model_nsip_representation.py +1 -1
  22. package/pins_data_model/models/model_nsip_subscription.py +1 -1
  23. package/pins_data_model/models/model_pins_inspector.py +1 -1
  24. package/pins_data_model/models/model_pins_lpa.py +1 -1
  25. package/pins_data_model/models/model_s51_advice.py +1 -1
  26. package/pins_data_model/models/model_service_user.py +1 -1
  27. package/schemas/appeal-s78.schema.json +20 -3
@@ -53,9 +53,9 @@ any of
53
53
  | [caseDecisionOutcome](#casedecisionoutcome) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-casedecisionoutcome.md "appeal-s78.schema.json#/properties/caseDecisionOutcome") |
54
54
  | [caseCompletedDate](#casecompleteddate) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-casecompleteddate.md "appeal-s78.schema.json#/properties/caseCompletedDate") |
55
55
  | [enforcementNotice](#enforcementnotice) | `boolean` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-enforcementnotice.md "appeal-s78.schema.json#/properties/enforcementNotice") |
56
- | [applicationReference](#applicationreference) | `string` | Required | cannot be null | [Appeal S78 Case](appeal-s78-properties-applicationreference.md "appeal-s78.schema.json#/properties/applicationReference") |
57
- | [applicationDate](#applicationdate) | `string` | Required | cannot be null | [Appeal S78 Case](appeal-s78-properties-applicationdate.md "appeal-s78.schema.json#/properties/applicationDate") |
58
- | [applicationDecision](#applicationdecision) | `string` | Required | cannot be null | [Appeal S78 Case](appeal-s78-properties-applicationdecision.md "appeal-s78.schema.json#/properties/applicationDecision") |
56
+ | [applicationReference](#applicationreference) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-applicationreference.md "appeal-s78.schema.json#/properties/applicationReference") |
57
+ | [applicationDate](#applicationdate) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-applicationdate.md "appeal-s78.schema.json#/properties/applicationDate") |
58
+ | [applicationDecision](#applicationdecision) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-applicationdecision.md "appeal-s78.schema.json#/properties/applicationDecision") |
59
59
  | [applicationDecisionDate](#applicationdecisiondate) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-applicationdecisiondate.md "appeal-s78.schema.json#/properties/applicationDecisionDate") |
60
60
  | [caseSubmissionDueDate](#casesubmissionduedate) | `string` | Required | can be null | [Appeal S78 Case](appeal-s78-properties-casesubmissionduedate.md "appeal-s78.schema.json#/properties/caseSubmissionDueDate") |
61
61
  | [siteAddressLine1](#siteaddressline1) | `string` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-siteaddressline1.md "appeal-s78.schema.json#/properties/siteAddressLine1") |
@@ -156,6 +156,9 @@ any of
156
156
  | [isSiteInAreaOfSpecialControlAdverts](#issiteinareaofspecialcontroladverts) | `boolean` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-issiteinareaofspecialcontroladverts.md "appeal-s78.schema.json#/properties/isSiteInAreaOfSpecialControlAdverts") |
157
157
  | [advertDetails](#advertdetails) | `array` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-advertdetails.md "appeal-s78.schema.json#/properties/advertDetails") |
158
158
  | [padsSapId](#padssapid) | `string` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-padssapid.md "appeal-s78.schema.json#/properties/padsSapId") |
159
+ | [enforcementNoticeReference](#enforcementnoticereference) | `string` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-enforcementnoticereference.md "appeal-s78.schema.json#/properties/enforcementNoticeReference") |
160
+ | [descriptionOfAllegedBreach](#descriptionofallegedbreach) | `string` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-descriptionofallegedbreach.md "appeal-s78.schema.json#/properties/descriptionOfAllegedBreach") |
161
+ | [dateAppellantContactedPins](#dateappellantcontactedpins) | `string` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-dateappellantcontactedpins.md "appeal-s78.schema.json#/properties/dateAppellantContactedPins") |
159
162
  | [ownerOccupancyStatus](#owneroccupancystatus) | `string` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-owneroccupancystatus.md "appeal-s78.schema.json#/properties/ownerOccupancyStatus") |
160
163
  | [occupancyConditionsMet](#occupancyconditionsmet) | `boolean` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-occupancyconditionsmet.md "appeal-s78.schema.json#/properties/occupancyConditionsMet") |
161
164
  | [enforcementAppealGroundsDetails](#enforcementappealgroundsdetails) | `array` | Optional | can be null | [Appeal S78 Case](appeal-s78-properties-enforcementappealgroundsdetails.md "appeal-s78.schema.json#/properties/enforcementAppealGroundsDetails") |
@@ -1398,7 +1401,7 @@ The unique identifier of the LPA application
1398
1401
 
1399
1402
  * Type: `string`
1400
1403
 
1401
- * cannot be null
1404
+ * can be null
1402
1405
 
1403
1406
  * defined in: [Appeal S78 Case](appeal-s78-properties-applicationreference.md "appeal-s78.schema.json#/properties/applicationReference")
1404
1407
 
@@ -1424,7 +1427,7 @@ The date of the original LPA application
1424
1427
 
1425
1428
  * Type: `string`
1426
1429
 
1427
- * cannot be null
1430
+ * can be null
1428
1431
 
1429
1432
  * defined in: [Appeal S78 Case](appeal-s78-properties-applicationdate.md "appeal-s78.schema.json#/properties/applicationDate")
1430
1433
 
@@ -1454,7 +1457,7 @@ The outcome of the original LPA decision
1454
1457
 
1455
1458
  * Type: `string`
1456
1459
 
1457
- * cannot be null
1460
+ * can be null
1458
1461
 
1459
1462
  * defined in: [Appeal S78 Case](appeal-s78-properties-applicationdecision.md "appeal-s78.schema.json#/properties/applicationDecision")
1460
1463
 
@@ -3776,6 +3779,84 @@ padsSapId for PADS inspectors
3776
3779
 
3777
3780
  `string`
3778
3781
 
3782
+ ## enforcementNoticeReference
3783
+
3784
+ The reference number of the enforcement notice
3785
+
3786
+ `enforcementNoticeReference`
3787
+
3788
+ * is optional
3789
+
3790
+ * Type: `string`
3791
+
3792
+ * can be null
3793
+
3794
+ * defined in: [Appeal S78 Case](appeal-s78-properties-enforcementnoticereference.md "appeal-s78.schema.json#/properties/enforcementNoticeReference")
3795
+
3796
+ ### enforcementNoticeReference Type
3797
+
3798
+ `string`
3799
+
3800
+ ### enforcementNoticeReference Examples
3801
+
3802
+ ```json
3803
+ "myC45e-123"
3804
+ ```
3805
+
3806
+ ## descriptionOfAllegedBreach
3807
+
3808
+ A description of the alleged breach
3809
+
3810
+ `descriptionOfAllegedBreach`
3811
+
3812
+ * is optional
3813
+
3814
+ * Type: `string`
3815
+
3816
+ * can be null
3817
+
3818
+ * defined in: [Appeal S78 Case](appeal-s78-properties-descriptionofallegedbreach.md "appeal-s78.schema.json#/properties/descriptionOfAllegedBreach")
3819
+
3820
+ ### descriptionOfAllegedBreach Type
3821
+
3822
+ `string`
3823
+
3824
+ ### descriptionOfAllegedBreach Examples
3825
+
3826
+ ```json
3827
+ "My breach description"
3828
+ ```
3829
+
3830
+ ## dateAppellantContactedPins
3831
+
3832
+ The date of the appellant contacted PINS prior to submitting an appeal
3833
+
3834
+ > Relevant if enforcement effective date already passed
3835
+
3836
+ `dateAppellantContactedPins`
3837
+
3838
+ * is optional
3839
+
3840
+ * Type: `string`
3841
+
3842
+ * can be null
3843
+
3844
+ * defined in: [Appeal S78 Case](appeal-s78-properties-dateappellantcontactedpins.md "appeal-s78.schema.json#/properties/dateAppellantContactedPins")
3845
+
3846
+ ### dateAppellantContactedPins Type
3847
+
3848
+ `string`
3849
+
3850
+ ### dateAppellantContactedPins Constraints
3851
+
3852
+ **date time**: the string must be a date time string, according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339 "check the specification")
3853
+
3854
+ ### dateAppellantContactedPins Examples
3855
+
3856
+ ```json
3857
+ "2025-12-26T10:00:00.000Z"
3858
+ ```
3859
+
3779
3860
  ## ownerOccupancyStatus
3780
3861
 
3781
3862
  The nature of the appellant's interest in the appeal site
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planning-inspectorate/data-model",
3
- "version": "2.9.0",
3
+ "version": "2.10.0",
4
4
  "description": "JSON Schemas for the Planning Inspectorate's Data Model",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-document.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:03+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-event.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-event-estimate.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-has.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-representation.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: appeal-s78.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -579,11 +579,13 @@ class AppealS78Case1(BaseModel):
579
579
  """
580
580
  Indicates if an enforcement notice is the reason for the appeal
581
581
  """
582
- applicationReference: str = Field(..., examples=["43010/APP/1/290572"])
582
+ applicationReference: str | None = Field(..., examples=["43010/APP/1/290572"])
583
583
  """
584
584
  The unique identifier of the LPA application
585
585
  """
586
- applicationDate: AwareDatetime = Field(..., examples=["2023-07-27T20:30:00.000Z"])
586
+ applicationDate: AwareDatetime | None = Field(
587
+ ..., examples=["2023-07-27T20:30:00.000Z"]
588
+ )
587
589
  """
588
590
  The date of the original LPA application
589
591
  """
@@ -962,6 +964,22 @@ class AppealS78Case1(BaseModel):
962
964
  """
963
965
  padsSapId for PADS inspectors
964
966
  """
967
+ enforcementNoticeReference: str | None = Field(None, examples=["myC45e-123"])
968
+ """
969
+ The reference number of the enforcement notice
970
+ """
971
+ descriptionOfAllegedBreach: str | None = Field(
972
+ None, examples=["My breach description"]
973
+ )
974
+ """
975
+ A description of the alleged breach
976
+ """
977
+ dateAppellantContactedPins: AwareDatetime | None = Field(
978
+ None, examples=["2025-12-26T10:00:00.000Z"]
979
+ )
980
+ """
981
+ The date of the appellant contacted PINS prior to submitting an appeal
982
+ """
965
983
  ownerOccupancyStatus: str | None = Field(
966
984
  None, examples=["Owner", "Tenant", "Mortgage lender"]
967
985
  )
@@ -1287,11 +1305,13 @@ class AppealS78Case2(BaseModel):
1287
1305
  """
1288
1306
  Indicates if an enforcement notice is the reason for the appeal
1289
1307
  """
1290
- applicationReference: str = Field(..., examples=["43010/APP/1/290572"])
1308
+ applicationReference: str | None = Field(..., examples=["43010/APP/1/290572"])
1291
1309
  """
1292
1310
  The unique identifier of the LPA application
1293
1311
  """
1294
- applicationDate: AwareDatetime = Field(..., examples=["2023-07-27T20:30:00.000Z"])
1312
+ applicationDate: AwareDatetime | None = Field(
1313
+ ..., examples=["2023-07-27T20:30:00.000Z"]
1314
+ )
1295
1315
  """
1296
1316
  The date of the original LPA application
1297
1317
  """
@@ -1670,6 +1690,22 @@ class AppealS78Case2(BaseModel):
1670
1690
  """
1671
1691
  padsSapId for PADS inspectors
1672
1692
  """
1693
+ enforcementNoticeReference: str | None = Field(None, examples=["myC45e-123"])
1694
+ """
1695
+ The reference number of the enforcement notice
1696
+ """
1697
+ descriptionOfAllegedBreach: str | None = Field(
1698
+ None, examples=["My breach description"]
1699
+ )
1700
+ """
1701
+ A description of the alleged breach
1702
+ """
1703
+ dateAppellantContactedPins: AwareDatetime | None = Field(
1704
+ None, examples=["2025-12-26T10:00:00.000Z"]
1705
+ )
1706
+ """
1707
+ The date of the appellant contacted PINS prior to submitting an appeal
1708
+ """
1673
1709
  ownerOccupancyStatus: str | None = Field(
1674
1710
  None, examples=["Owner", "Tenant", "Mortgage lender"]
1675
1711
  )
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: dart-response.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: entraid.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: folder.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: gettimesheets-response.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: listed-building.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: listed-buildings.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-document.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-exam-timetable.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-invoice.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-meeting.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-project.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-project-update.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-representation.schema.json
3
- # timestamp: 2026-01-12T14:59:51+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: nsip-subscription.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pins-inspector.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pins-lpa.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: s51-advice.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: service-user.schema.json
3
- # timestamp: 2026-01-12T14:59:50+00:00
3
+ # timestamp: 2026-01-15T10:15:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -464,20 +464,20 @@
464
464
  "$comment": "Also available on HAS cases"
465
465
  },
466
466
  "applicationReference": {
467
- "type": "string",
467
+ "type": ["string", "null"],
468
468
  "examples": ["43010/APP/1/290572"],
469
469
  "description": "The unique identifier of the LPA application",
470
470
  "$comment": "Also available on HAS cases"
471
471
  },
472
472
  "applicationDate": {
473
- "type": "string",
473
+ "type": ["string", "null"],
474
474
  "format": "date-time",
475
475
  "examples": ["2023-07-27T20:30:00.000Z"],
476
476
  "description": "The date of the original LPA application",
477
477
  "$comment": "Also available on HAS cases"
478
478
  },
479
479
  "applicationDecision": {
480
- "type": "string",
480
+ "type": ["string", "null"],
481
481
  "enum": ["granted", "refused", "not_received"],
482
482
  "description": "The outcome of the original LPA decision",
483
483
  "$comment": "Also available on HAS cases"
@@ -1107,6 +1107,23 @@
1107
1107
  "type": ["string", "null"],
1108
1108
  "description": "padsSapId for PADS inspectors"
1109
1109
  },
1110
+ "enforcementNoticeReference": {
1111
+ "type": ["string", "null"],
1112
+ "description": "The reference number of the enforcement notice",
1113
+ "examples": ["myC45e-123"]
1114
+ },
1115
+ "descriptionOfAllegedBreach": {
1116
+ "type": ["string", "null"],
1117
+ "description": "A description of the alleged breach",
1118
+ "examples": ["My breach description"]
1119
+ },
1120
+ "dateAppellantContactedPins": {
1121
+ "type": ["string", "null"],
1122
+ "format": "date-time",
1123
+ "examples": ["2025-12-26T10:00:00.000Z"],
1124
+ "description": "The date of the appellant contacted PINS prior to submitting an appeal",
1125
+ "$comment": "Relevant if enforcement effective date already passed"
1126
+ },
1110
1127
  "ownerOccupancyStatus": {
1111
1128
  "type": ["string", "null"],
1112
1129
  "description": "The nature of the appellant's interest in the appeal site",