From 7da490185d6400903c526053237152800dbaf207 Mon Sep 17 00:00:00 2001 From: Mike Houston Date: Wed, 3 Dec 2025 11:54:45 +0000 Subject: [PATCH] Add 'dataschemaversion' field to letter request schemas and update version to 1.1.5 --- package-lock.json | 2 +- packages/events/package.json | 2 +- .../schemas/examples/letter-request.prepared.json | 1 + .../events/src/events/__tests__/event-envelope.test.ts | 4 ++++ .../testData/letter-request-prepared-valid.json | 1 + ...er-request-prepared-with-invalid-major-version.json | 1 + .../letter-request-prepared-with-missing-fields.json | 1 + ...-request-prepared-with-partial-optional-fields.json | 1 + ...etter-request-prepared-without-optional-fields.json | 1 + packages/events/src/events/event-envelope.ts | 10 ++++++++++ 10 files changed, 22 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82b64e1..6aa0f57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11129,7 +11129,7 @@ }, "packages/events": { "name": "@nhsdigital/nhs-notify-event-schemas-letter-rendering", - "version": "1.1.4", + "version": "1.1.5", "dependencies": { "@asyncapi/bundler": "^0.6.4", "zod": "^4.1.11" diff --git a/packages/events/package.json b/packages/events/package.json index 8ec6d62..593e060 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -40,5 +40,5 @@ "test:unit": "jest", "prepare": "npm run build" }, - "version": "1.1.4" + "version": "1.1.5" } diff --git a/packages/events/schemas/examples/letter-request.prepared.json b/packages/events/schemas/examples/letter-request.prepared.json index b80da29..9ea0558 100644 --- a/packages/events/schemas/examples/letter-request.prepared.json +++ b/packages/events/schemas/examples/letter-request.prepared.json @@ -18,6 +18,7 @@ "dataschema": "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.PREPARED.1.0.0.schema.json", "dataschemaversion": "1.0.0", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", + "plane": "data", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, "severitytext": "INFO", diff --git a/packages/events/src/events/__tests__/event-envelope.test.ts b/packages/events/src/events/__tests__/event-envelope.test.ts index dda4cf4..65f7957 100644 --- a/packages/events/src/events/__tests__/event-envelope.test.ts +++ b/packages/events/src/events/__tests__/event-envelope.test.ts @@ -8,6 +8,7 @@ describe("EventEnvelope schema validation", () => { const baseValidEnvelope: Envelope = { dataschema: "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/order.read.1.0.0.schema.json", + dataschemaversion: "1.0.0", specversion: "1.0", id: "6f1c2a53-3d54-4a0a-9a0b-0e9ae2d4c111", source: "/data-plane/letter-rendering/ordering", @@ -260,6 +261,7 @@ describe("EventEnvelope schema validation", () => { type: "uk.nhs.notify.letter-rendering.letter.created.v1" as const, dataschema: "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter.created.1.0.0.schema.json", + dataschemaversion: "1.0.0", source: "/data-plane/letter-rendering/letters", time: "2025-10-01T10:15:30.000Z", data: { status: "CREATED" }, @@ -318,6 +320,7 @@ describe("EventEnvelope schema validation", () => { type: "uk.nhs.notify.letter-rendering.order.read.v1" as const, dataschema: "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/order.read.1.0.0.schema.json", + dataschemaversion: "1.0.0", source: "/data-plane/letter-rendering/ordering", subject: "order/769acdd4", time: "2025-10-01T10:15:30.000Z", @@ -365,6 +368,7 @@ describe("EventEnvelope schema validation", () => { type: "uk.nhs.notify.letter-rendering.order.read.v1" as const, dataschema: "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/order.read.1.0.0.schema.json", + dataschemaversion: "1.0.0", source: "/data-plane/letter-rendering/ordering", subject: "prefix/letter-rendering/order/769acdd4", time: "2025-10-01T10:15:30.000Z", diff --git a/packages/events/src/events/__tests__/testData/letter-request-prepared-valid.json b/packages/events/src/events/__tests__/testData/letter-request-prepared-valid.json index 30a6d6d..190359d 100644 --- a/packages/events/src/events/__tests__/testData/letter-request-prepared-valid.json +++ b/packages/events/src/events/__tests__/testData/letter-request-prepared-valid.json @@ -16,6 +16,7 @@ }, "datacontenttype": "application/json", "dataschema": "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.1.0.0.schema.json", + "dataschemaversion": "1.0.0", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "plane": "data", "recordedtime": "2025-08-28T08:45:00.000Z", diff --git a/packages/events/src/events/__tests__/testData/letter-request-prepared-with-invalid-major-version.json b/packages/events/src/events/__tests__/testData/letter-request-prepared-with-invalid-major-version.json index f0dce4f..717fe10 100644 --- a/packages/events/src/events/__tests__/testData/letter-request-prepared-with-invalid-major-version.json +++ b/packages/events/src/events/__tests__/testData/letter-request-prepared-with-invalid-major-version.json @@ -16,6 +16,7 @@ }, "datacontenttype": "application/json", "dataschema": "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.0.1.0.schema.json", + "dataschemaversion": "0.1.0", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "plane": "data", "recordedtime": "2025-08-28T08:45:00.000Z", diff --git a/packages/events/src/events/__tests__/testData/letter-request-prepared-with-missing-fields.json b/packages/events/src/events/__tests__/testData/letter-request-prepared-with-missing-fields.json index 5b03b0a..9f86204 100644 --- a/packages/events/src/events/__tests__/testData/letter-request-prepared-with-missing-fields.json +++ b/packages/events/src/events/__tests__/testData/letter-request-prepared-with-missing-fields.json @@ -15,6 +15,7 @@ }, "datacontenttype": "application/json", "dataschema": "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.1.0.0.schema.json", + "dataschemaversion": "1.0.0", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "plane": "data", "recordedtime": "2025-08-28T08:45:00.000Z", diff --git a/packages/events/src/events/__tests__/testData/letter-request-prepared-with-partial-optional-fields.json b/packages/events/src/events/__tests__/testData/letter-request-prepared-with-partial-optional-fields.json index 15cb6e2..871d74e 100644 --- a/packages/events/src/events/__tests__/testData/letter-request-prepared-with-partial-optional-fields.json +++ b/packages/events/src/events/__tests__/testData/letter-request-prepared-with-partial-optional-fields.json @@ -13,6 +13,7 @@ }, "datacontenttype": "application/json", "dataschema": "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.1.0.0.schema.json", + "dataschemaversion": "1.0.0", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "plane": "data", "recordedtime": "2025-08-28T08:45:00.000Z", diff --git a/packages/events/src/events/__tests__/testData/letter-request-prepared-without-optional-fields.json b/packages/events/src/events/__tests__/testData/letter-request-prepared-without-optional-fields.json index 6f6b83a..c4bb18c 100644 --- a/packages/events/src/events/__tests__/testData/letter-request-prepared-without-optional-fields.json +++ b/packages/events/src/events/__tests__/testData/letter-request-prepared-without-optional-fields.json @@ -11,6 +11,7 @@ }, "datacontenttype": "application/json", "dataschema": "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.1.0.0.schema.json", + "dataschemaversion": "1.0.0", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "plane": "data", "recordedtime": "2025-08-28T08:45:00.000Z", diff --git a/packages/events/src/events/event-envelope.ts b/packages/events/src/events/event-envelope.ts index a2bad26..9eedeb5 100644 --- a/packages/events/src/events/event-envelope.ts +++ b/packages/events/src/events/event-envelope.ts @@ -62,6 +62,16 @@ export function EventEnvelope( examples: schemaExamples, }), + dataschemaversion: z + .string() + .regex(/^1\.\d+\.\d+$/) + .meta({ + title: "Data Schema Version", + description: + "Version of the data schema in semver format (must match the version suffix in dataschema URI).", + examples: ["1.0.0"], + }), + source: z .string() .regex(/^\/data-plane\/(letter-rendering|digital-letters)(?:\/.*)?$/)