@planning-inspectorate/data-model 2.6.0 → 2.8.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 (40) hide show
  1. package/docs/appeal-document.md +8 -0
  2. package/package.json +1 -1
  3. package/pins_data_model/models/model_appeal_document.py +9 -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 +1 -1
  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-document.schema.json +8 -0
  28. package/schemas/commands/appeals-components/environmental-impact-assessment.schema.json +68 -0
  29. package/schemas/commands/appeals-components/infrastructure-levy.schema.json +40 -0
  30. package/schemas/commands/appeals-components/lpa-questionnaire-enforcement.schema.json +73 -0
  31. package/schemas/commands/appeals-components/lpa-questionnaire-s78.schema.json +1 -137
  32. package/schemas/commands/appeals-components/site-designations-protections.schema.json +50 -0
  33. package/schemas/commands/appellant-submission.schema.json +5 -0
  34. package/schemas/commands/lpa-questionnaire.schema.json +27 -2
  35. package/src/enums.cjs +8 -0
  36. package/src/enums.d.ts +8 -0
  37. package/src/enums.js +8 -0
  38. package/src/index.cjs +8 -0
  39. package/src/schemas.d.ts +142 -74
  40. package/tests/appeals/commands/enforcement-questionnaire.test.js +109 -0
@@ -0,0 +1,109 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert';
3
+ import Ajv from 'ajv';
4
+ import addFormats from 'ajv-formats';
5
+ import { loadAllSchemasSync } from '../../../src/index.js';
6
+
7
+ const schema = 'lpa-questionnaire.schema.json';
8
+
9
+ const document = {
10
+ documentId: 'deserunt sint aliqua adipisicing dolore',
11
+ filename: 'ut dolore',
12
+ originalFilename: 'Lorem amet fugiat adipisicing Excepteur',
13
+ size: -90476934,
14
+ mime: 'magna labore exercitation ut',
15
+ documentURI: 'ut reprehenderit',
16
+ dateCreated: '1933-04-03T03:24:38.0Z',
17
+ documentType: 'plansDrawings'
18
+ };
19
+
20
+ const exampleEnforcementQuestionnaireSchema = {
21
+ casedata: {
22
+ caseType: 'C',
23
+ caseReference: 'est ea elit in nulla',
24
+ lpaQuestionnaireSubmittedDate: null,
25
+ siteAccessDetails: ['velit adipisicing fugiat dolor ullamco'],
26
+ siteSafetyDetails: ['ut', 'dolore ut sint Duis', 'magna consequat quis laboris officia'],
27
+ nearbyCaseReferences: ['nulla', 'incididunt eu nostrud eiusmod', 'exercitation', 'Ut nostrud', 'eiusmod cillum eu'],
28
+ neighbouringSiteAddresses: null,
29
+ isCorrectAppealType: true,
30
+ affectedListedBuildingNumbers: null,
31
+ isGreenBelt: null,
32
+ inConservationArea: null,
33
+ newConditionDetails: null,
34
+ notificationMethod: ['irure', 'cillum tempor incididunt labore in'],
35
+ lpaCostsAppliedFor: true,
36
+ lpaStatement: 'ex laborum cupidatat',
37
+ changedListedBuildingNumbers: null,
38
+ affectsScheduledMonument: true,
39
+ hasProtectedSpecies: false,
40
+ isAonbNationalLandscape: true,
41
+ designatedSitesNames: ['quis nulla eu officia exercitation'],
42
+ hasTreePreservationOrder: null,
43
+ isGypsyOrTravellerSite: true,
44
+ isPublicRightOfWay: null,
45
+ eiaEnvironmentalImpactSchedule: 'schedule-2',
46
+ eiaDevelopmentDescription: 'production-processing-of-metals',
47
+ eiaSensitiveAreaDetails: null,
48
+ eiaColumnTwoThreshold: false,
49
+ eiaScreeningOpinion: false,
50
+ eiaRequiresEnvironmentalStatement: null,
51
+ eiaCompletedEnvironmentalStatement: true,
52
+ hasStatutoryConsultees: true,
53
+ consultedBodiesDetails: 'in in labore irure nostrud',
54
+ hasConsultationResponses: null,
55
+ hasEmergingPlan: null,
56
+ hasSupplementaryPlanningDocs: null,
57
+ hasInfrastructureLevy: true,
58
+ isInfrastructureLevyFormallyAdopted: false,
59
+ infrastructureLevyAdoptedDate: '1913-06-14T10:40:33.0Z',
60
+ infrastructureLevyExpectedDate: '1912-06-14T10:40:33.0Z',
61
+ lpaProcedurePreference: null,
62
+ lpaProcedurePreferenceDetails: 'in reprehenderit',
63
+ lpaProcedurePreferenceDuration: -34480053.16630782,
64
+ noticeRelatesToBuildingEngineeringMiningOther: null,
65
+ siteAreaSquareMetres: null,
66
+ hasAllegedBreachArea: null,
67
+ doesAllegedBreachCreateFloorSpace: null,
68
+ changeOfUseRefuseOrWaste: null,
69
+ changeOfUseMineralExtraction: null,
70
+ changeOfUseMineralStorage: null,
71
+ relatesToErectionOfBuildingOrBuildings: null,
72
+ relatesToBuildingWithAgriculturalPurpose: null,
73
+ relatesToBuildingSingleDwellingHouse: null,
74
+ affectedTrunkRoadName: null,
75
+ isSiteOnCrownLand: null,
76
+ article4AffectedDevelopmentRights: null
77
+ },
78
+ documents: [document]
79
+ };
80
+
81
+ describe('Enforcement questionnaire command schema', () => {
82
+ const schemas = loadAllSchemasSync();
83
+ const flatSchemas = Object.values(schemas).reduce((a, c) => ({ ...a, ...c }), {});
84
+ const ajv = new Ajv({ schemas: flatSchemas, allErrors: true });
85
+ addFormats(ajv);
86
+
87
+ it('should allow valid schema for Enforcement', () => {
88
+ const validationResult = ajv.validate(schema, exampleEnforcementQuestionnaireSchema);
89
+ assert.strictEqual(validationResult, true);
90
+ });
91
+
92
+ it('should reject missing caseReference', () => {
93
+ const test = structuredClone(exampleEnforcementQuestionnaireSchema);
94
+ delete test.casedata.caseReference;
95
+ const validationResult = ajv.validate(schema, test);
96
+ assert.strictEqual(validationResult, false);
97
+ assert.strictEqual(
98
+ ajv.errors.some((x) => x.message === "must have required property 'caseReference'"),
99
+ true
100
+ );
101
+ });
102
+
103
+ it('should allow additional props', () => {
104
+ const test = structuredClone(exampleEnforcementQuestionnaireSchema);
105
+ test.test = 1;
106
+ const validationResult = ajv.validate(schema, test);
107
+ assert.strictEqual(validationResult, true);
108
+ });
109
+ });