Skip to content

Commit e6f27c5

Browse files
committed
CCM-12869: Populate example specification groups
1 parent 114d5bb commit e6f27c5

File tree

4 files changed

+176
-48
lines changed

4 files changed

+176
-48
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
import {
2+
EnvelopeId,
3+
SpecificaitonGroupId,
4+
Specification,
5+
SpecificationGroup,
6+
SpecificationId,
7+
} from "@nhsdigital/nhs-notify-schemas-supplier-config/src/domain/specification";
8+
import { Version } from "@nhsdigital/nhs-notify-schemas-supplier-config/src/domain/common";
9+
10+
const bauStandardC5: Specification = {
11+
id: SpecificationId("bau-standard-c5"),
12+
name: "BAU Standard Letter C5",
13+
status: "PUBLISHED",
14+
version: Version("1.0.0"),
15+
createdAt: new Date("2023-01-01T00:00:00Z"),
16+
updatedAt: new Date("2023-01-01T00:00:00Z"),
17+
specificationType: "LETTER_STANDARD",
18+
pack: {
19+
envelopeId: EnvelopeId("envelope-nhs-c5-economy"),
20+
},
21+
};
22+
23+
const bauStandardC4: Specification = {
24+
id: SpecificationId("bau-standard-c4"),
25+
name: "BAU Standard Letter C4",
26+
status: "PUBLISHED",
27+
version: Version("1.0.0"),
28+
createdAt: new Date("2023-01-01T00:00:00Z"),
29+
updatedAt: new Date("2023-01-01T00:00:00Z"),
30+
specificationType: "LETTER_STANDARD",
31+
pack: {
32+
envelopeId: EnvelopeId("envelope-nhs-c4-economy"),
33+
},
34+
};
35+
36+
const braille: Specification = {
37+
id: SpecificationId("braille"),
38+
name: "Braille Letter",
39+
status: "PUBLISHED",
40+
version: Version("1.0.0"),
41+
createdAt: new Date("2023-01-01T00:00:00Z"),
42+
updatedAt: new Date("2023-01-01T00:00:00Z"),
43+
specificationType: "LETTER_BRAILLE",
44+
};
45+
46+
const audio: Specification = {
47+
id: SpecificationId("audio"),
48+
name: "Audio Letter",
49+
status: "PUBLISHED",
50+
version: Version("1.0.0"),
51+
createdAt: new Date("2023-01-01T00:00:00Z"),
52+
updatedAt: new Date("2023-01-01T00:00:00Z"),
53+
specificationType: "LETTER_AUDIO",
54+
};
55+
56+
const sameDay: Specification = {
57+
id: SpecificationId("same-day"),
58+
name: "Same Day Letter",
59+
status: "PUBLISHED",
60+
version: Version("1.0.0"),
61+
createdAt: new Date("2023-01-01T00:00:00Z"),
62+
updatedAt: new Date("2023-01-01T00:00:00Z"),
63+
specificationType: "LETTER_SAME_DAY",
64+
pack: {
65+
envelopeId: EnvelopeId("envelope-nhs-c4-same-day"),
66+
},
67+
};
68+
69+
const digitrials1: Specification = {
70+
id: SpecificationId("digitrials1"),
71+
name: "Digitrials Letter Pack 1",
72+
status: "PUBLISHED",
73+
version: Version("1.0.0"),
74+
createdAt: new Date("2023-01-01T00:00:00Z"),
75+
updatedAt: new Date("2023-01-01T00:00:00Z"),
76+
specificationType: "LETTER_STANDARD",
77+
pack: {
78+
envelopeId: EnvelopeId("digitrials-envelope1-c5"),
79+
},
80+
};
81+
82+
const specifications = {
83+
bauStandardC5,
84+
bauStandardC4,
85+
braille,
86+
audio,
87+
sameDay,
88+
};
89+
90+
const specificationGroups: Record<string, SpecificationGroup> = {
91+
bauStandard: {
92+
id: SpecificaitonGroupId("bau-standard"),
93+
name: "BAU Standard Letter",
94+
description: "BAU Standard Letter",
95+
specificationIds: [bauStandardC5.id, bauStandardC4.id],
96+
specificationType: "LETTER_STANDARD",
97+
status: "PUBLISHED",
98+
},
99+
braille: {
100+
id: SpecificaitonGroupId("braille"),
101+
name: "Braille Letter",
102+
description: "Braille Letter",
103+
specificationIds: [braille.id],
104+
specificationType: "LETTER_BRAILLE",
105+
status: "PUBLISHED",
106+
},
107+
audio: {
108+
id: SpecificaitonGroupId("audio"),
109+
name: "Audio Letter",
110+
description: "Audio Letter",
111+
specificationIds: [audio.id],
112+
specificationType: "LETTER_AUDIO",
113+
status: "PUBLISHED",
114+
},
115+
sameDay: {
116+
id: SpecificaitonGroupId("same-day"),
117+
name: "Same Day Letter",
118+
description: "Same Day Letter",
119+
specificationIds: [sameDay.id],
120+
specificationType: "LETTER_SAME_DAY",
121+
status: "PUBLISHED",
122+
},
123+
digitrials1: {
124+
id: SpecificaitonGroupId("digitrials1"),
125+
name: "Digitrials Letter Pack 1",
126+
description: "Digitrials Letter Pack 1",
127+
specificationIds: [digitrials1.id],
128+
specificationType: "LETTER_STANDARD",
129+
status: "PUBLISHED",
130+
clientId: "digitrials",
131+
campaignIds: ["digitrials-campaign-1"],
132+
},
133+
};
134+
135+
console.log(JSON.stringify({ specifications, specificationGroups }, null, 2));

packages/events/src/domain/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ export const $Version = z
1010
.string()
1111
.regex(/^\d+\.\d+\.\d+$/)
1212
.brand("Version");
13-
export type Version = z.infer<typeof $Version>;
13+
export const Version = $Version.parse;

packages/events/src/domain/layout.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
import { z } from "zod";
1+
import {z} from "zod";
22
import {
33
$Version,
44
ConfigBase,
55
} from "@nhsdigital/nhs-notify-schemas-supplier-config/src/domain/common";
66
import idRef from "@nhsdigital/nhs-notify-schemas-supplier-config/src/helpers/id-ref";
7-
import { $Layout } from "@nhsdigital/nhs-notify-schemas-supplier-config/src/domain/layout";
87

9-
export const $SpecificationFeature = z.enum([
10-
"SAME_DAY",
11-
"BRAILLE",
12-
"AUDIO_CD",
13-
"MAILMARK",
8+
export const $SpecificationType = z.enum([
9+
"LETTER_STANDARD",
10+
"LETTER_BRAILLE",
11+
"LETTER_AUDIO",
12+
"LETTER_SAME_DAY",
1413
]);
14+
export const $SpecificationFeature = z.enum(["MAILMARK"]);
1515
export const $EnvelopeFeature = z.enum([
1616
"WHITEMAIL",
1717
"NHS_BRANDING",
1818
"NHS_BARCODE",
1919
]);
20+
const $SpecificationStatus = z.enum(["DRAFT", "PUBLISHED", "DISABLED"]);
2021

2122
export const $Envelope = ConfigBase("Envelope")
2223
.extend({
@@ -26,7 +27,7 @@ export const $Envelope = ConfigBase("Envelope")
2627
})
2728
.describe("Envelope");
2829
export type Envelope = z.infer<typeof $Envelope>;
29-
export type EnvelopeId = Envelope["id"];
30+
export const EnvelopeId = $Envelope.shape.id.parse;
3031

3132
export const $Insert = ConfigBase("Insert")
3233
.extend({
@@ -42,44 +43,55 @@ export type InsertId = Insert["id"];
4243
export const $Specification = ConfigBase("Specification")
4344
.extend({
4445
name: z.string(),
45-
status: z.enum(["DRAFT", "PUBLISHED", "DISABLED"]),
46+
status: $SpecificationStatus,
47+
specificationType: $SpecificationType,
4648
createdAt: z.date(),
4749
updatedAt: z.date(),
4850
version: $Version,
49-
layout: idRef($Layout),
5051
billing: z
5152
.object({
5253
basePrice: z.number(),
5354
unitPrice: z.number(),
5455
})
5556
.partial()
5657
.optional(),
57-
postage: z.object({
58-
tariff: z.string(),
59-
size: z.string(),
60-
deliverySLA: z.number(),
61-
maxSheets: z.number(),
62-
maxWeight: z.number().optional(),
63-
maxThickness: z.number().optional(),
64-
}),
65-
pack: z.object({
66-
envelope: idRef($Envelope),
67-
printColour: z.enum(["BLACK", "COLOUR"]),
68-
paperColour: z.string().optional(),
69-
insert: idRef($Insert).optional(),
70-
features: z.array($SpecificationFeature).optional(),
71-
additional: z.record(z.string(), z.string()).optional(),
72-
}),
58+
postage: z
59+
.object({
60+
tariff: z.string(),
61+
size: z.string(),
62+
deliverySLA: z.number(),
63+
maxSheets: z.number(),
64+
maxWeight: z.number().optional(),
65+
maxThickness: z.number().optional(),
66+
})
67+
.partial()
68+
.optional(),
69+
pack: z
70+
.object({
71+
envelopeId: idRef($Envelope),
72+
printColour: z.enum(["BLACK", "COLOUR"]),
73+
paperColour: z.string().optional(),
74+
insert: idRef($Insert).optional(),
75+
features: z.array($SpecificationFeature).optional(),
76+
additional: z.record(z.string(), z.string()).optional(),
77+
})
78+
.partial()
79+
.optional(),
7380
})
7481
.describe("Specification");
7582
export type Specification = z.infer<typeof $Specification>;
76-
export type SpecificationId = Specification["id"];
83+
export const SpecificationId = $Specification.shape.id.parse;
7784

7885
export const $SpecificationGroup = ConfigBase("SpecificationGroup")
7986
.extend({
8087
name: z.string(),
8188
description: z.string().optional(),
82-
specifications: z.array(idRef($Specification)).nonempty(),
89+
specificationType: $SpecificationType,
90+
status: $SpecificationStatus,
91+
clientId: z.string().optional(),
92+
campaignIds: z.array(z.string()).optional(),
93+
specificationIds: z.array(idRef($Specification)).nonempty(),
8394
})
8495
.describe("SpecificationGroup");
8596
export type SpecificationGroup = z.infer<typeof $SpecificationGroup>;
97+
export const SpecificaitonGroupId = $SpecificationGroup.shape.id.parse;

0 commit comments

Comments
 (0)