Repository: NHSDigital/eps-prescription-tracker-ui
Pull request #670: New: [AEA-4797] - Prescription Information Banner
Author: login: kris-szlapa
Created: 2025-04-04T07:13:06Z | Merged: 2025-04-10T16:22:49Z

## Summary

🎫 [AEA-4797](https://nhsd-jira.digital.nhs.uk/browse/AEA-4797) Prescription Information Banner
🧪 Regression Tests: https://github.com/NHSDigital/electronic-prescription-service-api-regression-tests/pull/288

:sparkles: New Feature

### Details

This will give an overview of the prescription details and will be under the patient details. 


Diff:
diff --git a/package-lock.json b/package-lock.json
index b522ab2115..10e4178212 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -86,8 +86,6 @@
         },
         "node_modules/@asamuzakjp/css-color": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.1.tgz",
-            "integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -100,8 +98,6 @@
         },
         "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
             "version": "10.4.3",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-            "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
             "dev": true,
             "license": "ISC"
         },
@@ -453,8 +449,6 @@
         },
         "node_modules/@aws-amplify/ui": {
             "version": "6.10.1",
-            "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-6.10.1.tgz",
-            "integrity": "sha512-xvPm09U67TcGAKfYGs8i4CUIU22TxNsfZuPTltYrcm34zNJSUBNcovd5x1XALZxPkmqpWTfxAwr6yWx6d7Yycw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "csstype": "^3.1.1",
@@ -474,8 +468,6 @@
         },
         "node_modules/@aws-amplify/ui-react": {
             "version": "6.11.0",
-            "resolved": "https://registry.npmjs.org/@aws-amplify/ui-react/-/ui-react-6.11.0.tgz",
-            "integrity": "sha512-e8E6QNL/Y1UaSAi7eClQPqxA0879mNVbByGuRvFiLZFvKfyEcRCH2AG0+/xkungIGE19qI1cDBVTEoHu7EZ1hA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-amplify/ui": "6.10.1",
@@ -502,8 +494,6 @@
         },
         "node_modules/@aws-amplify/ui-react-core": {
             "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/@aws-amplify/ui-react-core/-/ui-react-core-3.4.1.tgz",
-            "integrity": "sha512-7HrssOXGjDhLzwBdI4OD7iKshpIJH5zMpaeUy0Ai95OiQsUe8NF19eI/zasRO4jpOD/i5hluAboVECAd6SVKHw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-amplify/ui": "6.10.1",
@@ -616,14 +606,10 @@
         },
         "node_modules/@aws-lambda-powertools/commons": {
             "version": "2.18.0",
-            "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-2.18.0.tgz",
-            "integrity": "sha512-B0TkjRymVeYMD2EnX64mGdnrm0sJczggYonWJoyVt/j7IzlbJnbYQX3aG9Ok5yvTrIx+iZdYPjZuH0xoyDLVAQ==",
             "license": "MIT-0"
         },
         "node_modules/@aws-lambda-powertools/logger": {
             "version": "2.18.0",
-            "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-2.18.0.tgz",
-            "integrity": "sha512-pcCh3GuEBQp6NEdCG/Ey48S6+2WmWNZpU6d8Sk7hUTtlBWPfynV9ppuZaLvq15/7ZN+ZYAbFiSHTUg47cN2P4g==",
             "license": "MIT-0",
             "dependencies": {
                 "@aws-lambda-powertools/commons": "^2.18.0",
@@ -644,8 +630,6 @@
         },
         "node_modules/@aws-lambda-powertools/parameters": {
             "version": "2.18.0",
-            "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/parameters/-/parameters-2.18.0.tgz",
-            "integrity": "sha512-DQG1EuEP5KstFbl+t/vwq1Ai3vlUZbH4pcMuCY19ne2NKBkNacm2n5wPcYyzIHhZ0kEb/yKWmxRICM6+ja9dVA==",
             "license": "MIT-0",
             "dependencies": {
                 "@aws-lambda-powertools/commons": "^2.18.0"
@@ -681,8 +665,6 @@
         },
         "node_modules/@aws-sdk/client-dynamodb": {
             "version": "3.786.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.786.0.tgz",
-            "integrity": "sha512-UNDZUhgGZMTidmqPfxW94Dkk3Qe4dKtV2lAq2zjvc4zTAXr4t220p8XI6JgwCuA7vo3UdGT/7LvR1A6+l5HuJA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
@@ -3755,8 +3737,6 @@
         },
         "node_modules/@aws-sdk/client-secrets-manager": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.782.0.tgz",
-            "integrity": "sha512-j2n8717Q7HeQgyXjdiUwuE0Pk80nOaDacWvEmmMr2w+DYXLvdXrOThbyy3jItt5XQw8mhaC8KZ4RfK6dqUlwGA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
@@ -3829,8 +3809,6 @@
         },
         "node_modules/@aws-sdk/client-sso": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.782.0.tgz",
-            "integrity": "sha512-5GlJBejo8wqMpSSEKb45WE82YxI2k73YuebjLH/eWDNQeE6VI5Bh9lA1YQ7xNkLLH8hIsb0pSfKVuwh0VEzVrg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
@@ -4873,8 +4851,6 @@
         },
         "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz",
-            "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/util-buffer-from": "^4.0.0",
@@ -5932,8 +5908,6 @@
         },
         "node_modules/@aws-sdk/credential-provider-ini": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.782.0.tgz",
-            "integrity": "sha512-wd4KdRy2YjLsE4Y7pz00470Iip06GlRHkG4dyLW7/hFMzEO2o7ixswCWp6J2VGZVAX64acknlv2Q0z02ebjmhw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/core": "3.775.0",
@@ -5956,8 +5930,6 @@
         },
         "node_modules/@aws-sdk/credential-provider-node": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.782.0.tgz",
-            "integrity": "sha512-HZiAF+TCEyKjju9dgysjiPIWgt/+VerGaeEp18mvKLNfgKz1d+/82A2USEpNKTze7v3cMFASx3CvL8yYyF7mJw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.775.0",
@@ -5994,8 +5966,6 @@
         },
         "node_modules/@aws-sdk/credential-provider-sso": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.782.0.tgz",
-            "integrity": "sha512-1y1ucxTtTIGDSNSNxriQY8msinilhe9gGvQpUDYW9gboyC7WQJPDw66imy258V6osdtdi+xoHzVCbCz3WhosMQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/client-sso": "3.782.0",
@@ -6013,8 +5983,6 @@
         },
         "node_modules/@aws-sdk/credential-provider-web-identity": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.782.0.tgz",
-            "integrity": "sha512-xCna0opVPaueEbJoclj5C6OpDNi0Gynj+4d7tnuXGgQhTHPyAz8ZyClkVqpi5qvHTgxROdUEDxWqEO5jqRHZHQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/core": "3.775.0",
@@ -6140,8 +6108,6 @@
         },
         "node_modules/@aws-sdk/lib-dynamodb": {
             "version": "3.786.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.786.0.tgz",
-            "integrity": "sha512-9VxMTUqX4FVbnmi1jxQ4GMzdsLe7Mx7Jj/TrCAj4jS33dvp/kGGAyieAcCG+9WH2heKCgaJxMsysWajoUKti5Q==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/core": "3.775.0",
@@ -6213,8 +6179,6 @@
         },
         "node_modules/@aws-sdk/middleware-user-agent": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.782.0.tgz",
-            "integrity": "sha512-i32H2R6IItX+bQ2p4+v2gGO2jA80jQoJO2m1xjU9rYWQW3+ErWy4I5YIuQHTBfb6hSdAHbaRfqPDgbv9J2rjEg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/core": "3.775.0",
@@ -6231,8 +6195,6 @@
         },
         "node_modules/@aws-sdk/nested-clients": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.782.0.tgz",
-            "integrity": "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
@@ -6280,8 +6242,6 @@
         },
         "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz",
-            "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/util-buffer-from": "^4.0.0",
@@ -6411,8 +6371,6 @@
         },
         "node_modules/@aws-sdk/token-providers": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.782.0.tgz",
-            "integrity": "sha512-4tPuk/3+THPrzKaXW4jE2R67UyGwHLFizZ47pcjJWbhb78IIJAy94vbeqEQ+veS84KF5TXcU7g5jGTXC0D70Wg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/nested-clients": "3.782.0",
@@ -6461,8 +6419,6 @@
         },
         "node_modules/@aws-sdk/util-dynamodb": {
             "version": "3.786.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.786.0.tgz",
-            "integrity": "sha512-/qlHy3x4RHZ7c20hzvpe+Kbc2VSlO7UHmWy8/Dd9P0wrPsCUJlEyAdwLpNCystET6aoKYNFdPWMqd6Rd2q03Tw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "tslib": "^2.6.2"
@@ -6476,8 +6432,6 @@
         },
         "node_modules/@aws-sdk/util-endpoints": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.782.0.tgz",
-            "integrity": "sha512-/RJOAO7o7HI6lEa4ASbFFLHGU9iPK876BhsVfnl54MvApPVYWQ9sHO0anOUim2S5lQTwd/6ghuH3rFYSq/+rdw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.775.0",
@@ -6541,8 +6495,6 @@
         },
         "node_modules/@aws-sdk/util-user-agent-node": {
             "version": "3.782.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.782.0.tgz",
-            "integrity": "sha512-dMFkUBgh2Bxuw8fYZQoH/u3H4afQ12VSkzEi//qFiDTwbKYq+u+RYjc8GLDM6JSK1BShMu5AVR7HD4ap1TYUnA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/middleware-user-agent": "3.782.0",
@@ -8475,8 +8427,6 @@
         },
         "node_modules/@csstools/color-helpers": {
             "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
-            "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
             "dev": true,
             "funding": [
                 {
@@ -8495,8 +8445,6 @@
         },
         "node_modules/@csstools/css-calc": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz",
-            "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==",
             "dev": true,
             "funding": [
                 {
@@ -8519,8 +8467,6 @@
         },
         "node_modules/@csstools/css-color-parser": {
             "version": "3.0.8",
-            "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz",
-            "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==",
             "dev": true,
             "funding": [
                 {
@@ -8547,8 +8493,6 @@
         },
         "node_modules/@csstools/css-parser-algorithms": {
             "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
-            "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
             "dev": true,
             "funding": [
                 {
@@ -8570,8 +8514,6 @@
         },
         "node_modules/@csstools/css-tokenizer": {
             "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
-            "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
             "dev": true,
             "funding": [
                 {
@@ -8881,8 +8823,6 @@
         },
         "node_modules/@eslint/config-array": {
             "version": "0.20.0",
-            "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
-            "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@eslint/object-schema": "^2.1.6",
@@ -8895,8 +8835,6 @@
         },
         "node_modules/@eslint/config-array/node_modules/brace-expansion": {
             "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
             "license": "MIT",
             "dependencies": {
                 "balanced-match": "^1.0.0",
@@ -8905,8 +8843,6 @@
         },
         "node_modules/@eslint/config-array/node_modules/minimatch": {
             "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "license": "ISC",
             "dependencies": {
                 "brace-expansion": "^1.1.7"
@@ -8983,8 +8919,6 @@
         },
         "node_modules/@eslint/js": {
             "version": "9.24.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz",
-            "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==",
             "license": "MIT",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -8992,8 +8926,6 @@
         },
         "node_modules/@eslint/object-schema": {
             "version": "2.1.6",
-            "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
-            "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
             "license": "Apache-2.0",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -9186,21 +9118,7 @@
             }
         },
         "node_modules/@img/sharp-libvips-linux-x64": {
-            "version": "1.0.4",
-            "cpu": [
-                "x64"
-            ],
-            "license": "LGPL-3.0-or-later",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "funding": {
-                "url": "https://opencollective.com/libvips"
-            }
-        },
-        "node_modules/@img/sharp-libvips-linuxmusl-x64": {
-            "version": "1.0.4",
+            "version": "1.1.0",
             "cpu": [
                 "x64"
             ],
@@ -9214,27 +9132,7 @@
             }
         },
         "node_modules/@img/sharp-linux-x64": {
-            "version": "0.33.5",
-            "cpu": [
-                "x64"
-            ],
-            "license": "Apache-2.0",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/libvips"
-            },
-            "optionalDependencies": {
-                "@img/sharp-libvips-linux-x64": "1.0.4"
-            }
-        },
-        "node_modules/@img/sharp-linuxmusl-x64": {
-            "version": "0.33.5",
+            "version": "0.34.1",
             "cpu": [
                 "x64"
             ],
@@ -9250,7 +9148,7 @@
                 "url": "https://opencollective.com/libvips"
             },
             "optionalDependencies": {
-                "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+                "@img/sharp-libvips-linux-x64": "1.1.0"
             }
         },
         "node_modules/@inquirer/confirm": {
@@ -9912,79 +9810,11 @@
             }
         },
         "node_modules/@next/env": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.5.tgz",
-            "integrity": "sha512-uWkCf9C8wKTyQjqrNk+BA7eL3LOQdhL+xlmJUf2O85RM4lbzwBwot3Sqv2QGe/RGnc3zysIf1oJdtq9S00pkmQ==",
+            "version": "15.3.0",
             "license": "MIT"
         },
-        "node_modules/@next/swc-darwin-arm64": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.5.tgz",
-            "integrity": "sha512-4OimvVlFTbgzPdA0kh8A1ih6FN9pQkL4nPXGqemEYgk+e7eQhsst/p35siNNqA49eQA6bvKZ1ASsDtu9gtXuog==",
-            "cpu": [
-                "arm64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@next/swc-darwin-x64": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.5.tgz",
-            "integrity": "sha512-ohzRaE9YbGt1ctE0um+UGYIDkkOxHV44kEcHzLqQigoRLaiMtZzGrA11AJh2Lu0lv51XeiY1ZkUvkThjkVNBMA==",
-            "cpu": [
-                "x64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@next/swc-linux-arm64-gnu": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.5.tgz",
-            "integrity": "sha512-FMSdxSUt5bVXqqOoZCc/Seg4LQep9w/fXTazr/EkpXW2Eu4IFI9FD7zBDlID8TJIybmvKk7mhd9s+2XWxz4flA==",
-            "cpu": [
-                "arm64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@next/swc-linux-arm64-musl": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.5.tgz",
-            "integrity": "sha512-4ZNKmuEiW5hRKkGp2HWwZ+JrvK4DQLgf8YDaqtZyn7NYdl0cHfatvlnLFSWUayx9yFAUagIgRGRk8pFxS8Qniw==",
-            "cpu": [
-                "arm64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
         "node_modules/@next/swc-linux-x64-gnu": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.5.tgz",
-            "integrity": "sha512-bE6lHQ9GXIf3gCDE53u2pTl99RPZW5V1GLHSRMJ5l/oB/MT+cohu9uwnCK7QUph2xIOu2a6+27kL0REa/kqwZw==",
+            "version": "15.3.0",
             "cpu": [
                 "x64"
             ],
@@ -9997,54 +9827,6 @@
                 "node": ">= 10"
             }
         },
-        "node_modules/@next/swc-linux-x64-musl": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.5.tgz",
-            "integrity": "sha512-y7EeQuSkQbTAkCEQnJXm1asRUuGSWAchGJ3c+Qtxh8LVjXleZast8Mn/rL7tZOm7o35QeIpIcid6ufG7EVTTcA==",
-            "cpu": [
-                "x64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@next/swc-win32-arm64-msvc": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.5.tgz",
-            "integrity": "sha512-gQMz0yA8/dskZM2Xyiq2FRShxSrsJNha40Ob/M2n2+JGRrZ0JwTVjLdvtN6vCxuq4ByhOd4a9qEf60hApNR2gQ==",
-            "cpu": [
-                "arm64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "win32"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@next/swc-win32-x64-msvc": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.5.tgz",
-            "integrity": "sha512-tBDNVUcI7U03+3oMvJ11zrtVin5p0NctiuKmTGyaTIEAVj9Q77xukLXGXRnWxKRIIdFG4OTA2rUVGZDYOwgmAA==",
-            "cpu": [
-                "x64"
-            ],
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "win32"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
         "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
             "version": "5.1.1-v1",
             "license": "MIT",
@@ -12511,8 +12293,6 @@
         },
         "node_modules/@swc/core": {
             "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.18.tgz",
-            "integrity": "sha512-ORZxyCKKiqYt2iHdh1C7pfVR1GBjkuFOdwqZggQzaq0vt22DpGca+2JsUtkUoWQmWcct04v5+ScwgvsHuMObxA==",
             "dev": true,
             "hasInstallScript": true,
             "license": "Apache-2.0",
@@ -12548,118 +12328,8 @@
                 }
             }
         },
-        "node_modules/@swc/core-darwin-arm64": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.18.tgz",
-            "integrity": "sha512-K6AntdUlNMQg8aChqjeXwnVhK6d4WRZ9TgtLSTmdU0Ugll4an7QK49s9NrT7XQU91cEsVvzdr++p1bNImx0hJg==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-darwin-x64": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.18.tgz",
-            "integrity": "sha512-RCRvC6Q9M5BArTvj/IzUAAYGrgxYFbTTnAtf6UX7JFq2DAn+hEwYUjmC1m0gFso9HqFU0m5QZUGfZvVmACGWUw==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-linux-arm-gnueabihf": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.18.tgz",
-            "integrity": "sha512-wteAKf8YKb3jOnZFm3EzuIMzzCVXMuQOLHsz1IgEOc44/gdgNXKxaYTWAowZuej7t68tf/w0cRNMc7Le414v/g==",
-            "cpu": [
-                "arm"
-            ],
-            "dev": true,
-            "license": "Apache-2.0",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-linux-arm64-gnu": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.18.tgz",
-            "integrity": "sha512-hY6jJYZ6PKHSBo5OATswfyKsUgsWu9+4nDcN8liYIRRgz3E0G9wk0VUTP4cFPivBFeHWTTAGz687/Nf2aQEIpw==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-linux-arm64-musl": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.18.tgz",
-            "integrity": "sha512-slu0mlP2nucvQalttnapfpqpD/LlM9NHx9g3ofgsLzjObyMEBiX4ZysQ3y65U8Mjw71RNqtLd/ZmvxI6OmLdiQ==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
         "node_modules/@swc/core-linux-x64-gnu": {
             "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.18.tgz",
-            "integrity": "sha512-h9a/8PA25arMCQ9t8CE8rA1s0c77z4kCZZ7dUuUkD88yEXIrARMca1IKR7of+S3slfQrf1Zlq3Ac1Fb1HVJziQ==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-linux-x64-musl": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.18.tgz",
-            "integrity": "sha512-0sMDJj5qUGK9QEw4lrxLxkTP/4AoKciqNzXvqbk+J9XuXN2aIv4BsR1Y7z3GwAeMFGsba2lbHLOtJlDsaqIsiA==",
             "cpu": [
                 "x64"
             ],
@@ -12674,60 +12344,6 @@
                 "node": ">=10"
             }
         },
-        "node_modules/@swc/core-win32-arm64-msvc": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.18.tgz",
-            "integrity": "sha512-zGv9HnfgBcKyt54MJRWdwRNu9BuYkAFM7bx+tWtKhd37Ef7ZX20QLs9xXl5wWDXCbsOdRxXIZgXs6PEL+Pzmrw==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "win32"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-win32-ia32-msvc": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.18.tgz",
-            "integrity": "sha512-uBKj0S1lYv/E2ZhxHZOxSiQwoegYmzbPRpjq6eHBZDv97mu7W3K27/lsnPbvAfQ6b6rnv8BI+EsmJ7VLQBAHBQ==",
-            "cpu": [
-                "ia32"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "win32"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/@swc/core-win32-x64-msvc": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.18.tgz",
-            "integrity": "sha512-8USTRcdgeFMNBgvVXl8tz6n4+9s9m+zHsfDeBT4jPgwnq2bnLBlTUlwnPwzDxfg9nUJr6RFD4xeKfWyZZRosZg==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "Apache-2.0 AND MIT",
-            "optional": true,
-            "os": [
-                "win32"
-            ],
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
         "node_modules/@swc/counter": {
             "version": "0.1.3",
             "license": "Apache-2.0"
@@ -13291,8 +12907,6 @@
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz",
-            "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13321,8 +12935,6 @@
         },
         "node_modules/@typescript-eslint/parser": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz",
-            "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13346,8 +12958,6 @@
         },
         "node_modules/@typescript-eslint/scope-manager": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz",
-            "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13364,8 +12974,6 @@
         },
         "node_modules/@typescript-eslint/type-utils": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz",
-            "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13388,8 +12996,6 @@
         },
         "node_modules/@typescript-eslint/types": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz",
-            "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -13402,8 +13008,6 @@
         },
         "node_modules/@typescript-eslint/typescript-estree": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz",
-            "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13429,8 +13033,6 @@
         },
         "node_modules/@typescript-eslint/utils": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz",
-            "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13453,8 +13055,6 @@
         },
         "node_modules/@typescript-eslint/visitor-keys": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz",
-            "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -13471,8 +13071,6 @@
         },
         "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
             "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-            "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
             "dev": true,
             "license": "Apache-2.0",
             "engines": {
@@ -13633,8 +13231,6 @@
         },
         "node_modules/@xstate/react": {
             "version": "3.2.2",
-            "resolved": "https://registry.npmjs.org/@xstate/react/-/react-3.2.2.tgz",
-            "integrity": "sha512-feghXWLedyq8JeL13yda3XnHPZKwYDN5HPBLykpLeuNpr9178tQd2/3d0NrH6gSd0sG5mLuLeuD+ck830fgzLQ==",
             "license": "MIT",
             "dependencies": {
                 "use-isomorphic-layout-effect": "^1.1.2",
@@ -15306,8 +14902,6 @@
         },
         "node_modules/call-bound": {
             "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
-            "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
             "license": "MIT",
             "dependencies": {
                 "call-bind-apply-helpers": "^1.0.2",
@@ -15389,9 +14983,7 @@
             "link": true
         },
         "node_modules/cdk-nag": {
-            "version": "2.35.66",
-            "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.35.66.tgz",
-            "integrity": "sha512-Z2kAsyxTssospTi3dBU/psi3KaAwfkZEaAfaTeHc825JO3o7hkyJc+dbcPax99c6ckJUUzktf8n1XiSKlJd4qA==",
+            "version": "2.35.67",
             "license": "Apache-2.0",
             "peerDependencies": {
                 "aws-cdk-lib": "^2.156.0",
@@ -17418,8 +17010,6 @@
         },
         "node_modules/eslint": {
             "version": "9.24.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz",
-            "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==",
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
@@ -17733,8 +17323,6 @@
         },
         "node_modules/eslint-plugin-react": {
             "version": "7.37.5",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
-            "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
             "license": "MIT",
             "dependencies": {
                 "array-includes": "^3.1.8",
@@ -18759,8 +18347,6 @@
         },
         "node_modules/get-intrinsic": {
             "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-            "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
             "license": "MIT",
             "dependencies": {
                 "call-bind-apply-helpers": "^1.0.2",
@@ -22843,12 +22429,10 @@
             "license": "MIT"
         },
         "node_modules/next": {
-            "version": "15.2.5",
-            "resolved": "https://registry.npmjs.org/next/-/next-15.2.5.tgz",
-            "integrity": "sha512-LlqS8ljc7RWR3riUwxB5+14v7ULAa5EuLUyarD/sFgXPd6Hmmscg8DXcu9hDdh5atybrIDVBrFhjDpRIQo/4pQ==",
+            "version": "15.3.0",
             "license": "MIT",
             "dependencies": {
-                "@next/env": "15.2.5",
+                "@next/env": "15.3.0",
                 "@swc/counter": "0.1.3",
                 "@swc/helpers": "0.5.15",
                 "busboy": "1.6.0",
@@ -22863,15 +22447,15 @@
                 "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
             },
             "optionalDependencies": {
-                "@next/swc-darwin-arm64": "15.2.5",
-                "@next/swc-darwin-x64": "15.2.5",
-                "@next/swc-linux-arm64-gnu": "15.2.5",
-                "@next/swc-linux-arm64-musl": "15.2.5",
-                "@next/swc-linux-x64-gnu": "15.2.5",
-                "@next/swc-linux-x64-musl": "15.2.5",
-                "@next/swc-win32-arm64-msvc": "15.2.5",
-                "@next/swc-win32-x64-msvc": "15.2.5",
-                "sharp": "^0.33.5"
+                "@next/swc-darwin-arm64": "15.3.0",
+                "@next/swc-darwin-x64": "15.3.0",
+                "@next/swc-linux-arm64-gnu": "15.3.0",
+                "@next/swc-linux-arm64-musl": "15.3.0",
+                "@next/swc-linux-x64-gnu": "15.3.0",
+                "@next/swc-linux-x64-musl": "15.3.0",
+                "@next/swc-win32-arm64-msvc": "15.3.0",
+                "@next/swc-win32-x64-msvc": "15.3.0",
+                "sharp": "^0.34.1"
             },
             "peerDependencies": {
                 "@opentelemetry/api": "^1.1.0",
@@ -22946,8 +22530,6 @@
         },
         "node_modules/nock": {
             "version": "14.0.3",
-            "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.3.tgz",
-            "integrity": "sha512-sJ9RNmCuYBqXDmGZZHgZ1D1441MqFOU4T5aeLGVGEB4OWI/2LM0mZlkfBQzQKdOfJypL+2nPPBugXKjixBn4kQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -22961,8 +22543,6 @@
         },
         "node_modules/nock/node_modules/@mswjs/interceptors": {
             "version": "0.38.1",
-            "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.38.1.tgz",
-            "integrity": "sha512-JWLtvwpj2aCk2UvLlSQ12BFF/wBJJd0NhhYf7cz4k+tMhymmLn8ss3irznjWPvOsASV2raqb5EjTw+NRoeVDag==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -22980,8 +22560,6 @@
         },
         "node_modules/nock/node_modules/agent-base": {
             "version": "7.1.3",
-            "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
-            "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -22990,8 +22568,6 @@
         },
         "node_modules/nock/node_modules/cssstyle": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.0.tgz",
-            "integrity": "sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23004,8 +22580,6 @@
         },
         "node_modules/nock/node_modules/data-urls": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
-            "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23018,8 +22592,6 @@
         },
         "node_modules/nock/node_modules/html-encoding-sniffer": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
-            "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23031,8 +22603,6 @@
         },
         "node_modules/nock/node_modules/http-proxy-agent": {
             "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
-            "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23045,8 +22615,6 @@
         },
         "node_modules/nock/node_modules/https-proxy-agent": {
             "version": "7.0.6",
-            "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
-            "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23059,8 +22627,6 @@
         },
         "node_modules/nock/node_modules/jsdom": {
             "version": "26.0.0",
-            "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz",
-            "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23100,8 +22666,6 @@
         },
         "node_modules/nock/node_modules/tough-cookie": {
             "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
-            "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
             "dev": true,
             "license": "BSD-3-Clause",
             "dependencies": {
@@ -23113,8 +22677,6 @@
         },
         "node_modules/nock/node_modules/tr46": {
             "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz",
-            "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23126,8 +22688,6 @@
         },
         "node_modules/nock/node_modules/w3c-xmlserializer": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
-            "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23139,8 +22699,6 @@
         },
         "node_modules/nock/node_modules/whatwg-encoding": {
             "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
-            "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23152,8 +22710,6 @@
         },
         "node_modules/nock/node_modules/whatwg-mimetype": {
             "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
-            "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -23162,8 +22718,6 @@
         },
         "node_modules/nock/node_modules/whatwg-url": {
             "version": "14.2.0",
-            "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
-            "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -23176,8 +22730,6 @@
         },
         "node_modules/nock/node_modules/xml-name-validator": {
             "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
-            "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
             "dev": true,
             "license": "Apache-2.0",
             "engines": {
@@ -26175,8 +25727,6 @@
         },
         "node_modules/object.entries": {
             "version": "1.1.9",
-            "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
-            "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
             "license": "MIT",
             "dependencies": {
                 "call-bind": "^1.0.8",
@@ -28568,8 +28118,6 @@
         },
         "node_modules/react-hook-form": {
             "version": "7.55.0",
-            "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz",
-            "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==",
             "license": "MIT",
             "engines": {
                 "node": ">=18.0.0"
@@ -29272,8 +28820,6 @@
         },
         "node_modules/rrweb-cssom": {
             "version": "0.8.0",
-            "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
-            "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
             "dev": true,
             "license": "MIT"
         },
@@ -29993,14 +29539,14 @@
             "license": "ISC"
         },
         "node_modules/sharp": {
-            "version": "0.33.5",
+            "version": "0.34.1",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "optional": true,
             "dependencies": {
                 "color": "^4.2.3",
                 "detect-libc": "^2.0.3",
-                "semver": "^7.6.3"
+                "semver": "^7.7.1"
             },
             "engines": {
                 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
@@ -30009,25 +29555,26 @@
                 "url": "https://opencollective.com/libvips"
             },
             "optionalDependencies": {
-                "@img/sharp-darwin-arm64": "0.33.5",
-                "@img/sharp-darwin-x64": "0.33.5",
-                "@img/sharp-libvips-darwin-arm64": "1.0.4",
-                "@img/sharp-libvips-darwin-x64": "1.0.4",
-                "@img/sharp-libvips-linux-arm": "1.0.5",
-                "@img/sharp-libvips-linux-arm64": "1.0.4",
-                "@img/sharp-libvips-linux-s390x": "1.0.4",
-                "@img/sharp-libvips-linux-x64": "1.0.4",
-                "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
-                "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
-                "@img/sharp-linux-arm": "0.33.5",
-                "@img/sharp-linux-arm64": "0.33.5",
-                "@img/sharp-linux-s390x": "0.33.5",
-                "@img/sharp-linux-x64": "0.33.5",
-                "@img/sharp-linuxmusl-arm64": "0.33.5",
-                "@img/sharp-linuxmusl-x64": "0.33.5",
-                "@img/sharp-wasm32": "0.33.5",
-                "@img/sharp-win32-ia32": "0.33.5",
-                "@img/sharp-win32-x64": "0.33.5"
+                "@img/sharp-darwin-arm64": "0.34.1",
+                "@img/sharp-darwin-x64": "0.34.1",
+                "@img/sharp-libvips-darwin-arm64": "1.1.0",
+                "@img/sharp-libvips-darwin-x64": "1.1.0",
+                "@img/sharp-libvips-linux-arm": "1.1.0",
+                "@img/sharp-libvips-linux-arm64": "1.1.0",
+                "@img/sharp-libvips-linux-ppc64": "1.1.0",
+                "@img/sharp-libvips-linux-s390x": "1.1.0",
+                "@img/sharp-libvips-linux-x64": "1.1.0",
+                "@img/sharp-libvips-linuxmusl-arm64": "1.1.0",
+                "@img/sharp-libvips-linuxmusl-x64": "1.1.0",
+                "@img/sharp-linux-arm": "0.34.1",
+                "@img/sharp-linux-arm64": "0.34.1",
+                "@img/sharp-linux-s390x": "0.34.1",
+                "@img/sharp-linux-x64": "0.34.1",
+                "@img/sharp-linuxmusl-arm64": "0.34.1",
+                "@img/sharp-linuxmusl-x64": "0.34.1",
+                "@img/sharp-wasm32": "0.34.1",
+                "@img/sharp-win32-ia32": "0.34.1",
+                "@img/sharp-win32-x64": "0.34.1"
             }
         },
         "node_modules/sharp/node_modules/detect-libc": {
@@ -31549,8 +31096,6 @@
         },
         "node_modules/tldts": {
             "version": "6.1.85",
-            "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz",
-            "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -31562,8 +31107,6 @@
         },
         "node_modules/tldts-core": {
             "version": "6.1.85",
-            "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz",
-            "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==",
             "dev": true,
             "license": "MIT"
         },
@@ -31931,8 +31474,6 @@
         },
         "node_modules/typescript": {
             "version": "5.8.3",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
-            "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
             "license": "Apache-2.0",
             "bin": {
                 "tsc": "bin/tsc",
@@ -31944,8 +31485,6 @@
         },
         "node_modules/typescript-eslint": {
             "version": "8.29.1",
-            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.1.tgz",
-            "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -32214,8 +31753,6 @@
         },
         "node_modules/use-isomorphic-layout-effect": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz",
-            "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==",
             "license": "MIT",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -32248,8 +31785,6 @@
         },
         "node_modules/use-sync-external-store": {
             "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
-            "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
             "license": "MIT",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -33458,8 +32993,6 @@
         },
         "node_modules/xstate": {
             "version": "4.38.3",
-            "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.38.3.tgz",
-            "integrity": "sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==",
             "license": "MIT",
             "funding": {
                 "type": "opencollective",
diff --git a/packages/common/commonTypes/src/index.ts b/packages/common/commonTypes/src/index.ts
index 71ebb722de..45110e0453 100644
--- a/packages/common/commonTypes/src/index.ts
+++ b/packages/common/commonTypes/src/index.ts
@@ -9,6 +9,8 @@ import {
   SearchResponse
 } from "./prescriptionList"
 
+import {PrescriptionDetails} from "./prescriptionDetails"
+
 export {
   PatientDetails,
   PatientDetailsAddress,
@@ -17,5 +19,6 @@ export {
   TreatmentType,
   PrescriptionAPIResponse,
   PrescriptionSummary,
-  SearchResponse
+  SearchResponse,
+  PrescriptionDetails
 }
diff --git a/packages/common/commonTypes/src/prescriptionDetails.ts b/packages/common/commonTypes/src/prescriptionDetails.ts
new file mode 100644
index 0000000000..c712c4c026
--- /dev/null
+++ b/packages/common/commonTypes/src/prescriptionDetails.ts
@@ -0,0 +1,10 @@
+export interface PrescriptionDetails {
+  prescriptionId: string
+  issueDate: string
+  status: string
+  type: string
+  isERD?: boolean
+  instanceNumber?: number
+  maxRepeats?: number
+  daysSupply?: number
+}
diff --git a/packages/cpt-ui/__mocks__/MockPatientDetailsProvider.tsx b/packages/cpt-ui/__mocks__/MockPatientDetailsProvider.tsx
index 36043c537f..4f771a59c6 100644
--- a/packages/cpt-ui/__mocks__/MockPatientDetailsProvider.tsx
+++ b/packages/cpt-ui/__mocks__/MockPatientDetailsProvider.tsx
@@ -1,5 +1,3 @@
-import {jest} from "@jest/globals"
-
 import React, {ReactNode} from "react"
 import {PatientDetailsContext, PatientDetailsContextType} from "@/context/PatientDetailsProvider"
 
@@ -12,8 +10,13 @@ export const MockPatientDetailsProvider = ({
   children,
   patientDetails = undefined
 }: MockPatientDetailsProviderProps) => {
-  const setPatientDetails = jest.fn()
-  const clear = jest.fn()
+  const setPatientDetails: PatientDetailsContextType["setPatientDetails"] = (details) => {
+    window.__mockedPatientDetails = details
+  }
+
+  const clear: PatientDetailsContextType["clear"] = () => {
+    window.__mockedPatientDetails = undefined
+  }
 
   const value: PatientDetailsContextType = {
     patientDetails,
diff --git a/packages/cpt-ui/__mocks__/MockPrescriptionInformationProvider.tsx b/packages/cpt-ui/__mocks__/MockPrescriptionInformationProvider.tsx
new file mode 100644
index 0000000000..5f2bee53c7
--- /dev/null
+++ b/packages/cpt-ui/__mocks__/MockPrescriptionInformationProvider.tsx
@@ -0,0 +1,23 @@
+import React from "react"
+import {
+  PrescriptionInformationContext,
+  PrescriptionInformationContextType
+} from "@/context/PrescriptionInformationProvider"
+
+export const MockPrescriptionInformationProvider = ({children}: {children: React.ReactNode}) => {
+  const setPrescriptionInformation: PrescriptionInformationContextType["setPrescriptionInformation"] = (info) => {
+    window.__mockedPrescriptionInformation = info
+  }
+
+  const clear: PrescriptionInformationContextType["clear"] = () => {
+    window.__mockedPrescriptionInformation = undefined
+  }
+
+  return (
+    <PrescriptionInformationContext.Provider
+      value={{prescriptionInformation: undefined, setPrescriptionInformation, clear}}
+    >
+      {children}
+    </PrescriptionInformationContext.Provider>
+  )
+}
diff --git a/packages/cpt-ui/__tests__/PrescriptionDetailsPage.test.tsx b/packages/cpt-ui/__tests__/PrescriptionDetailsPage.test.tsx
new file mode 100644
index 0000000000..11230e8210
--- /dev/null
+++ b/packages/cpt-ui/__tests__/PrescriptionDetailsPage.test.tsx
@@ -0,0 +1,124 @@
+import React from "react"
+import {MemoryRouter, Route, Routes} from "react-router-dom"
+import {render, screen, waitFor} from "@testing-library/react"
+import "@testing-library/jest-dom"
+
+import PrescriptionDetailsPage from "@/pages/PrescriptionDetailsPage"
+import {MockPatientDetailsProvider} from "../__mocks__/MockPatientDetailsProvider"
+import {MockPrescriptionInformationProvider} from "../__mocks__/MockPrescriptionInformationProvider"
+
+import {PRESCRIPTION_DETAILS_PAGE_STRINGS} from "@/constants/ui-strings/PrescriptionDetailsPageStrings"
+
+function renderWithRoute(prescriptionId?: string) {
+  const initialRoute = `/site/prescription-details${prescriptionId ? `?prescriptionId=${prescriptionId}` : ""}`
+
+  return render(
+    <MockPatientDetailsProvider>
+      <MockPrescriptionInformationProvider>
+        <MemoryRouter initialEntries={[initialRoute]}>
+          <Routes>
+            <Route path="/site/prescription-details" element={<PrescriptionDetailsPage />} />
+          </Routes>
+        </MemoryRouter>
+      </MockPrescriptionInformationProvider>
+    </MockPatientDetailsProvider>
+  )
+}
+
+describe("PrescriptionDetailsPage", () => {
+  beforeEach(() => {
+    delete window.__mockedPatientDetails
+    delete window.__mockedPrescriptionInformation
+  })
+
+  it("displays loading message and spinner while fetching data", async () => {
+    renderWithRoute("EC5ACF-A83008-733FD3")
+
+    // Check that the loading message is rendered
+    const loadingHeading = screen.getByRole("heading", {
+      name: PRESCRIPTION_DETAILS_PAGE_STRINGS.LOADING_FULL_PRESCRIPTION
+    })
+    expect(loadingHeading).toBeInTheDocument()
+
+    // Check that the spinner is rendered
+    const spinner = screen.getByTestId("spinner")
+    expect(spinner).toBeInTheDocument()
+
+    // Wait for loading to finish and spinner to disappear
+    await waitFor(() => {
+      expect(screen.queryByTestId("spinner")).not.toBeInTheDocument()
+    })
+  })
+
+  it("renders the page with heading", () => {
+    renderWithRoute()
+    expect(screen.getByRole("heading", {name: "Prescription details"})).toBeInTheDocument()
+  })
+
+  it("sets context for acute prescription", async () => {
+    renderWithRoute("C0C757-A83008-C2D93O")
+
+    await waitFor(() => {
+      expect(window.__mockedPrescriptionInformation).toEqual({
+        prescriptionId: "C0C757-A83008-C2D93O",
+        issueDate: "18-Jan-2024",
+        status: "All items dispensed",
+        type: "Acute",
+        isERD: false,
+        instanceNumber: undefined,
+        maxRepeats: undefined,
+        daysSupply: undefined
+      })
+
+      expect(window.__mockedPatientDetails).toEqual({
+        nhsNumber: "5900009890",
+        prefix: "Mr",
+        suffix: "",
+        given: "William",
+        family: "Wolderton",
+        gender: "male",
+        dateOfBirth: "01-Nov-1988",
+        address: {
+          line1: "55 OAK STREET",
+          line2: "OAK LANE",
+          city: "Leeds",
+          postcode: "LS1 1XX"
+        }
+      })
+    })
+  })
+
+  it("sets context for eRD prescription", async () => {
+    renderWithRoute("EC5ACF-A83008-733FD3")
+
+    await waitFor(() => {
+      expect(window.__mockedPrescriptionInformation).toEqual({
+        prescriptionId: "EC5ACF-A83008-733FD3",
+        issueDate: "22-Jan-2025",
+        status: "All items dispensed",
+        type: "eRD",
+        isERD: true,
+        instanceNumber: 2,
+        maxRepeats: 6,
+        daysSupply: 28
+      })
+
+      expect(window.__mockedPatientDetails).toEqual({
+        nhsNumber: "5900009890",
+        prefix: "Ms",
+        suffix: "",
+        given: "Janet",
+        family: "Piper",
+        gender: null,
+        dateOfBirth: null,
+        address: null
+      })
+    })
+  })
+
+  it("does not set context if no prescriptionId is provided", () => {
+    renderWithRoute()
+    expect(window.__mockedPrescriptionInformation).toBeUndefined()
+    expect(window.__mockedPatientDetails).toBeUndefined()
+  })
+})
diff --git a/packages/cpt-ui/__tests__/PrescriptionInformationBanner.test.tsx b/packages/cpt-ui/__tests__/PrescriptionInformationBanner.test.tsx
new file mode 100644
index 0000000000..b027adcb04
--- /dev/null
+++ b/packages/cpt-ui/__tests__/PrescriptionInformationBanner.test.tsx
@@ -0,0 +1,101 @@
+import {jest} from "@jest/globals"
+import React from "react"
+import "@testing-library/jest-dom"
+import {render, screen, fireEvent} from "@testing-library/react"
+
+import PrescriptionInformationBanner from "@/components/PrescriptionInformationBanner"
+import {STRINGS} from "@/constants/ui-strings/PrescriptionInformationBannerStrings"
+import {PrescriptionInformationContext} from "@/context/PrescriptionInformationProvider"
+import {PrescriptionDetails} from "@cpt-ui-common/common-types"
+
+const renderWithContext = (prescriptionInformation: PrescriptionDetails | undefined) => {
+  return render(
+    <PrescriptionInformationContext.Provider
+      value={{
+        prescriptionInformation,
+        setPrescriptionInformation: jest.fn(),
+        clear: jest.fn()
+      }}
+    >
+      <PrescriptionInformationBanner />
+    </PrescriptionInformationContext.Provider>
+  )
+}
+
+describe("PrescriptionInformationBanner", () => {
+  beforeEach(() => {
+    jest.clearAllMocks()
+  })
+
+  it("does not render when prescription information is undefined", () => {
+    renderWithContext(undefined)
+    expect(screen.queryByTestId("prescription-information-banner")).not.toBeInTheDocument()
+  })
+
+  it("renders Acute prescription information correctly", () => {
+    const data: PrescriptionDetails = {
+      prescriptionId: "C0C757-A83008-C2D93O",
+      issueDate: "18-Jan-2024",
+      status: "All items dispensed",
+      type: "Acute"
+    }
+
+    renderWithContext(data)
+
+    const banner = screen.getByTestId("prescription-information-banner")
+    expect(banner).toBeInTheDocument()
+    expect(banner.querySelector("#prescription-id")).toHaveTextContent(`${STRINGS.PRESCRIPTION_ID}:`)
+    expect(banner.querySelector("#copyText")).toHaveTextContent(data.prescriptionId)
+    expect(banner.querySelector("#summary-issue-date")).toHaveTextContent(`${STRINGS.ISSUE_DATE}: ${data.issueDate}`)
+    expect(banner.querySelector("#summary-status")).toHaveTextContent(`${STRINGS.STATUS}: ${data.status}`)
+    expect(banner.querySelector("#summary-type")).toHaveTextContent(`${STRINGS.TYPE}: ${data.type}`)
+  })
+
+  it("renders eRD prescription information with repeat and days supply", () => {
+    const data: PrescriptionDetails = {
+      prescriptionId: "EC5ACF-A83008-733FD3",
+      issueDate: "22-Jan-2025",
+      status: "All items dispensed",
+      type: "eRD",
+      isERD: true,
+      instanceNumber: 2,
+      maxRepeats: 6,
+      daysSupply: 28
+    }
+
+    renderWithContext(data)
+
+    expect(screen.getByTestId("prescription-information-banner")).toBeInTheDocument()
+    expect(
+      screen.getByText(
+        `${STRINGS.TYPE}: ${data.type} ${data.instanceNumber} of ${data.maxRepeats}`
+      )
+    ).toBeInTheDocument()
+    expect(screen.getByText(`${STRINGS.DAYS_SUPPLY}: ${data.daysSupply} days`)).toBeInTheDocument()
+  })
+
+  it("copies the prescription ID to clipboard when copy button is clicked", async () => {
+    const data: PrescriptionDetails = {
+      prescriptionId: "COPYME123",
+      issueDate: "01-Apr-2024",
+      status: "Pending",
+      type: "Repeat"
+    }
+
+    const mockWriteText = jest.fn()
+    Object.assign(navigator, {
+      clipboard: {
+        writeText: mockWriteText
+      }
+    })
+
+    renderWithContext(data)
+
+    const copyButton = screen.getByRole("button", {
+      name: STRINGS.COPY_BUTTON_ARIA_LABEL
+    })
+    fireEvent.click(copyButton)
+
+    expect(mockWriteText).toHaveBeenCalledWith(data.prescriptionId)
+  })
+})
diff --git a/packages/cpt-ui/__tests__/PrescriptionInformationProvider.test.tsx b/packages/cpt-ui/__tests__/PrescriptionInformationProvider.test.tsx
new file mode 100644
index 0000000000..3e5338e46b
--- /dev/null
+++ b/packages/cpt-ui/__tests__/PrescriptionInformationProvider.test.tsx
@@ -0,0 +1,212 @@
+import React from "react"
+import {
+  render,
+  screen,
+  fireEvent,
+  waitFor
+} from "@testing-library/react"
+import {MemoryRouter, useNavigate, Link} from "react-router-dom"
+
+import {PrescriptionInformationProvider, usePrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+
+describe("PrescriptionInformationContext", () => {
+  it("throws an error when usePrescriptionInformation is used outside the provider", () => {
+    const Dummy = () => {
+      usePrescriptionInformation()
+      return <div>dummy</div>
+    }
+
+    expect(() => render(<Dummy />)).toThrow(
+      "usePrescriptionInformation must be used within a PrescriptionInformationProvider"
+    )
+  })
+
+  it("provides default context values", () => {
+    const Dummy = () => {
+      const {prescriptionInformation} = usePrescriptionInformation()
+      return (
+        <div data-testid="prescription-info">
+          {prescriptionInformation ? "exists" : "none"}
+        </div>
+      )
+    }
+
+    render(
+      <MemoryRouter>
+        <PrescriptionInformationProvider>
+          <Dummy />
+        </PrescriptionInformationProvider>
+      </MemoryRouter>
+    )
+
+    expect(screen.getByTestId("prescription-info").textContent).toBe("none")
+  })
+
+  it("setPrescriptionInformation updates the context", () => {
+    const Dummy = () => {
+      const {prescriptionInformation, setPrescriptionInformation} =
+        usePrescriptionInformation()
+
+      return (
+        <div>
+          <div data-testid="prescription-info">
+            {prescriptionInformation ? prescriptionInformation.prescriptionId : "none"}
+          </div>
+          <button
+            onClick={() =>
+              setPrescriptionInformation({
+                prescriptionId: "123",
+                issueDate: "2024-01-01",
+                status: "Pending",
+                type: "Acute"
+              })
+            }
+          >
+            Set Info
+          </button>
+        </div>
+      )
+    }
+
+    render(
+      <MemoryRouter>
+        <PrescriptionInformationProvider>
+          <Dummy />
+        </PrescriptionInformationProvider>
+      </MemoryRouter>
+    )
+
+    fireEvent.click(screen.getByText("Set Info"))
+    expect(screen.getByTestId("prescription-info").textContent).toBe("123")
+  })
+
+  it("clear resets prescriptionInformation", () => {
+    const Dummy = () => {
+      const {prescriptionInformation, setPrescriptionInformation, clear} =
+        usePrescriptionInformation()
+
+      return (
+        <div>
+          <div data-testid="prescription-info">
+            {prescriptionInformation ? prescriptionInformation.prescriptionId : "none"}
+          </div>
+          <button
+            onClick={() =>
+              setPrescriptionInformation({
+                prescriptionId: "456",
+                issueDate: "2024-02-02",
+                status: "Dispensed",
+                type: "Repeat"
+              })
+            }
+          >
+            Set Info
+          </button>
+          <button onClick={clear}>Clear</button>
+        </div>
+      )
+    }
+
+    render(
+      <MemoryRouter>
+        <PrescriptionInformationProvider>
+          <Dummy />
+        </PrescriptionInformationProvider>
+      </MemoryRouter>
+    )
+
+    fireEvent.click(screen.getByText("Set Info"))
+    expect(screen.getByTestId("prescription-info").textContent).toBe("456")
+
+    fireEvent.click(screen.getByText("Clear"))
+    expect(screen.getByTestId("prescription-info").textContent).toBe("none")
+  })
+
+  it("clears context when navigating to a disallowed path", async () => {
+    const Dummy = () => {
+      const navigate = useNavigate()
+      const {prescriptionInformation, setPrescriptionInformation} =
+        usePrescriptionInformation()
+
+      return (
+        <div>
+          <div data-testid="prescription-info">
+            {prescriptionInformation ? prescriptionInformation.prescriptionId : "none"}
+          </div>
+          <button
+            onClick={() =>
+              setPrescriptionInformation({
+                prescriptionId: "789",
+                issueDate: "2024-03-03",
+                status: "With Dispenser",
+                type: "eRD"
+              })
+            }
+          >
+            Set Info
+          </button>
+          <button onClick={() => navigate("/not-allowed")} data-testid="nav-away" />
+        </div>
+      )
+    }
+
+    render(
+      <MemoryRouter initialEntries={["/site/prescription-details"]}>
+        <PrescriptionInformationProvider>
+          <Dummy />
+        </PrescriptionInformationProvider>
+      </MemoryRouter>
+    )
+
+    fireEvent.click(screen.getByText("Set Info"))
+    expect(screen.getByTestId("prescription-info").textContent).toBe("789")
+
+    fireEvent.click(screen.getByTestId("nav-away"))
+
+    await waitFor(() => {
+      expect(screen.getByTestId("prescription-info").textContent).toBe("none")
+    })
+  })
+
+  it("does not clear context when remaining on an allowed path", () => {
+    const Dummy = () => {
+      const {prescriptionInformation, setPrescriptionInformation} =
+        usePrescriptionInformation()
+
+      return (
+        <div>
+          <div data-testid="prescription-info">
+            {prescriptionInformation ? prescriptionInformation.prescriptionId : "none"}
+          </div>
+          <button
+            onClick={() =>
+              setPrescriptionInformation({
+                prescriptionId: "999",
+                issueDate: "2024-04-04",
+                status: "Pending",
+                type: "Repeat"
+              })
+            }
+          >
+            Set Info
+          </button>
+          <Link data-testid="link-same-page" to="/site/prescription-details" />
+        </div>
+      )
+    }
+
+    render(
+      <MemoryRouter initialEntries={["/site/prescription-details"]}>
+        <PrescriptionInformationProvider>
+          <Dummy />
+        </PrescriptionInformationProvider>
+      </MemoryRouter>
+    )
+
+    fireEvent.click(screen.getByText("Set Info"))
+    expect(screen.getByTestId("prescription-info").textContent).toBe("999")
+
+    fireEvent.click(screen.getByTestId("link-same-page"))
+    expect(screen.getByTestId("prescription-info").textContent).toBe("999")
+  })
+})
diff --git a/packages/cpt-ui/global.d.ts b/packages/cpt-ui/global.d.ts
new file mode 100644
index 0000000000..6fb55ba398
--- /dev/null
+++ b/packages/cpt-ui/global.d.ts
@@ -0,0 +1,8 @@
+export {}
+
+declare global {
+  interface Window {
+    __mockedPatientDetails?: import("@/context/PatientDetailsProvider").PatientDetailsContextType["patientDetails"]
+    __mockedPrescriptionInformation?: import("@/context/PrescriptionInformationProvider").PrescriptionInformation | undefined // eslint-disable-line max-len
+  }
+}
diff --git a/packages/cpt-ui/src/App.tsx b/packages/cpt-ui/src/App.tsx
index 1a01a4ab09..ec08d281ce 100644
--- a/packages/cpt-ui/src/App.tsx
+++ b/packages/cpt-ui/src/App.tsx
@@ -2,6 +2,7 @@ import {Routes, Route} from "react-router-dom"
 import {AuthProvider} from "@/context/AuthProvider"
 import {AccessProvider} from "@/context/AccessProvider"
 import {PatientDetailsProvider} from "./context/PatientDetailsProvider"
+import {PrescriptionInformationProvider} from "./context/PrescriptionInformationProvider"
 import Layout from "@/Layout"
 
 import LoginPage from "@/pages/LoginPage"
@@ -13,6 +14,7 @@ import YourSelectedRolePage from "@/pages/YourSelectedRolePage"
 import NotFoundPage from "@/pages/NotFoundPage"
 import PrescriptionListPage from "@/pages/PrescriptionListPage"
 import PrescriptionNotFoundPage from "@/pages/PrescriptionNotFoundPage"
+import PrescriptionDetailsPage from "@/pages/PrescriptionDetailsPage"
 
 import {FRONTEND_PATHS} from "@/constants/environment"
 
@@ -22,45 +24,51 @@ export default function App() {
     <AuthProvider>
       <AccessProvider>
         <PatientDetailsProvider>
-          <Routes>
-            <Route path="/" element={<Layout />}>
-              <Route index element={<NotFoundPage />} />
-              <Route path='*' element={<NotFoundPage />} />
-              <Route path={FRONTEND_PATHS.LOGIN} element={<LoginPage />} />
-              <Route path={FRONTEND_PATHS.LOGOUT} element={<LogoutPage />} />
-              <Route path={FRONTEND_PATHS.SELECT_YOUR_ROLE} element={<SelectYourRolePage />} />
-              <Route path={FRONTEND_PATHS.YOUR_SELECTED_ROLE} element={<YourSelectedRolePage />} />
-              <Route path={FRONTEND_PATHS.CHANGE_YOUR_ROLE} element={<ChangeRolePage />} />
-              <Route
-                path={FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID}
-                element={<SearchPrescriptionPage />}
-              />
-              <Route
-                path={FRONTEND_PATHS.SEARCH_BY_NHS_NUMBER}
-                element={<SearchPrescriptionPage />}
-              />
-              <Route
-                path={FRONTEND_PATHS.SEARCH_BY_BASIC_DETAILS}
-                element={<SearchPrescriptionPage />}
-              />
-              <Route
-                path={FRONTEND_PATHS.PRESCRIPTION_LIST_CURRENT}
-                element={<PrescriptionListPage />}
-              />
-              <Route
-                path={FRONTEND_PATHS.PRESCRIPTION_LIST_FUTURE}
-                element={<PrescriptionListPage />}
-              />
-              <Route
-                path={FRONTEND_PATHS.PRESCRIPTION_LIST_PAST}
-                element={<PrescriptionListPage />}
-              />
-              <Route
-                path={FRONTEND_PATHS.PRESCRIPTION_NOT_FOUND}
-                element={<PrescriptionNotFoundPage />}
-              />
-            </Route>
-          </Routes>
+          <PrescriptionInformationProvider>
+            <Routes>
+              <Route path="/" element={<Layout />}>
+                <Route index element={<NotFoundPage />} />
+                <Route path='*' element={<NotFoundPage />} />
+                <Route path={FRONTEND_PATHS.LOGIN} element={<LoginPage />} />
+                <Route path={FRONTEND_PATHS.LOGOUT} element={<LogoutPage />} />
+                <Route path={FRONTEND_PATHS.SELECT_YOUR_ROLE} element={<SelectYourRolePage />} />
+                <Route path={FRONTEND_PATHS.YOUR_SELECTED_ROLE} element={<YourSelectedRolePage />} />
+                <Route path={FRONTEND_PATHS.CHANGE_YOUR_ROLE} element={<ChangeRolePage />} />
+                <Route
+                  path={FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID}
+                  element={<SearchPrescriptionPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.SEARCH_BY_NHS_NUMBER}
+                  element={<SearchPrescriptionPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.SEARCH_BY_BASIC_DETAILS}
+                  element={<SearchPrescriptionPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.PRESCRIPTION_LIST_CURRENT}
+                  element={<PrescriptionListPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.PRESCRIPTION_LIST_FUTURE}
+                  element={<PrescriptionListPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.PRESCRIPTION_LIST_PAST}
+                  element={<PrescriptionListPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.PRESCRIPTION_NOT_FOUND}
+                  element={<PrescriptionNotFoundPage />}
+                />
+                <Route
+                  path={FRONTEND_PATHS.PRESCRIPTION_DETAILS_PAGE}
+                  element={<PrescriptionDetailsPage />}
+                />
+              </Route>
+            </Routes>
+          </PrescriptionInformationProvider>
         </PatientDetailsProvider>
       </AccessProvider>
     </AuthProvider >
diff --git a/packages/cpt-ui/src/Layout.tsx b/packages/cpt-ui/src/Layout.tsx
index 9d2dd2ebda..ca5cda082a 100644
--- a/packages/cpt-ui/src/Layout.tsx
+++ b/packages/cpt-ui/src/Layout.tsx
@@ -3,12 +3,14 @@ import EpsHeader from "@/components/EpsHeader"
 import RBACBanner from "@/components/RBACBanner"
 import EpsFooter from "@/components/EpsFooter"
 import PatientDetailsBanner from "@/components/PatientDetailsBanner"
+import PrescriptionInformationBanner from "@/components/PrescriptionInformationBanner"
 
 export default function Layout() {
   return (
     <>
       <EpsHeader />
       <PatientDetailsBanner />
+      <PrescriptionInformationBanner />
       <Outlet />
       <RBACBanner />
       <EpsFooter />
diff --git a/packages/cpt-ui/src/components/EpsSpinner.tsx b/packages/cpt-ui/src/components/EpsSpinner.tsx
index 2c7b0cbb6a..4ceb858f26 100644
--- a/packages/cpt-ui/src/components/EpsSpinner.tsx
+++ b/packages/cpt-ui/src/components/EpsSpinner.tsx
@@ -23,6 +23,7 @@ function Spinner({
         justifyContent: "center"
       }}
       role="progressbar"
+      data-testid="spinner"
     >
       <div
         className="spinner-container"
diff --git a/packages/cpt-ui/src/components/PrescriptionInformationBanner.tsx b/packages/cpt-ui/src/components/PrescriptionInformationBanner.tsx
new file mode 100644
index 0000000000..1e2c3dc95d
--- /dev/null
+++ b/packages/cpt-ui/src/components/PrescriptionInformationBanner.tsx
@@ -0,0 +1,70 @@
+import React from "react"
+import {Button, Tag} from "nhsuk-react-components"
+import {usePrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+import {STRINGS} from "@/constants/ui-strings/PrescriptionInformationBannerStrings"
+
+const PrescriptionInformationBanner: React.FC = () => {
+  const {prescriptionInformation: prescription} = usePrescriptionInformation()
+
+  if (!prescription) return null
+
+  const copyToClipboard = () => {
+    navigator.clipboard.writeText(prescription.prescriptionId)
+  }
+
+  const renderType = () => {
+    if (prescription.isERD && prescription.instanceNumber !== undefined && prescription.maxRepeats !== undefined) {
+      return `${prescription.type} ${prescription.instanceNumber} of ${prescription.maxRepeats}`
+    }
+    return prescription.type
+  }
+
+  return (
+    <div className="prescription-information-banner" data-testid="prescription-information-banner">
+      <div className="prescription-information-banner-row">
+        <div className="patient-summary__block prescription-id-block" id="prescription-id">
+          <span className="patient-summary__info no-margin-bottom">
+            {STRINGS.PRESCRIPTION_ID}:<span id="copyText">{prescription.prescriptionId}</span>
+          </span>
+          <span className="patient-summary__info copy-button-wrapper">
+            <Button
+              id="copyButton"
+              aria-label={STRINGS.COPY_BUTTON_ARIA_LABEL}
+              className="nhsuk-button--reverse copy-button nhsuk-u-margin-1 nhsuk-u-margin-right-4"
+              onClick={copyToClipboard}
+              type="button"
+              secondary
+            >
+              {STRINGS.COPY_BUTTON_TEXT}
+            </Button>
+          </span>
+        </div>
+        <div className="patient-summary__block" id="summary-issue-date">
+          <span className="patient-summary__info">
+            {STRINGS.ISSUE_DATE}: {prescription.issueDate}
+          </span>
+        </div>
+        <div className="patient-summary__block" id="summary-status">
+          <span className="patient-summary__info">
+            {STRINGS.STATUS}: <Tag className="nhsuk-tag--green">{prescription.status}</Tag>
+          </span>
+        </div>
+        <div className="patient-summary__block" id="summary-type">
+          <span className="patient-summary__info">
+            {STRINGS.TYPE}: {renderType()}
+          </span>
+        </div>
+        {prescription.isERD && prescription.daysSupply !== undefined && (
+          <div className="patient-summary__block" id="summary-erd-days">
+            <span className="patient-summary__info">
+              {STRINGS.DAYS_SUPPLY}: {prescription.daysSupply} days
+            </span>
+          </div>
+        )}
+      </div>
+      <div id="patientview-sentinel" style={{height: "1px", backgroundColor: "transparent"}} />
+    </div>
+  )
+}
+
+export default PrescriptionInformationBanner
diff --git a/packages/cpt-ui/src/constants/environment.ts b/packages/cpt-ui/src/constants/environment.ts
index 9e7ac73f24..e812511a6e 100644
--- a/packages/cpt-ui/src/constants/environment.ts
+++ b/packages/cpt-ui/src/constants/environment.ts
@@ -58,16 +58,17 @@ export const FRONTEND_PATHS = {
   CHANGE_YOUR_ROLE: "/change-your-role",
   SEARCH_BY_PRESCRIPTION_ID: "/search-by-prescription-id",
   SEARCH_BY_NHS_NUMBER: "/search-by-nhs-number",
-  SEARCH_BY_BASIC_DETAILS: "/search-by-basic-details"
+  SEARCH_BY_BASIC_DETAILS: "/search-by-basic-details",
+  PRESCRIPTION_DETAILS_PAGE: "/prescription-details"
 }
 
 // This needs to be provided in backend requests as a header
 export const NHS_REQUEST_URID = "555254242106"
 
 // Type for environment
-export type MockAuthEnvironment = "dev" | "dev-pr" | "int" | "qa";
+export type MockAuthEnvironment = "dev" | "dev-pr" | "int" | "qa"
 
-export type Environment = MockAuthEnvironment | "prod" | "test";
+export type Environment = MockAuthEnvironment | "prod" | "test"
 
 // Mock Auth Configuration
 export const MOCK_AUTH_ALLOWED_ENVIRONMENTS: ReadonlyArray<MockAuthEnvironment> =
diff --git a/packages/cpt-ui/src/constants/ui-strings/PrescriptionDetailsPageStrings.ts b/packages/cpt-ui/src/constants/ui-strings/PrescriptionDetailsPageStrings.ts
new file mode 100644
index 0000000000..04f371b124
--- /dev/null
+++ b/packages/cpt-ui/src/constants/ui-strings/PrescriptionDetailsPageStrings.ts
@@ -0,0 +1,4 @@
+export const PRESCRIPTION_DETAILS_PAGE_STRINGS = {
+  PAGE_TITLE: "Prescription details",
+  LOADING_FULL_PRESCRIPTION: "Loading full prescription"
+}
diff --git a/packages/cpt-ui/src/constants/ui-strings/PrescriptionInformationBannerStrings.ts b/packages/cpt-ui/src/constants/ui-strings/PrescriptionInformationBannerStrings.ts
new file mode 100644
index 0000000000..e8a8237abd
--- /dev/null
+++ b/packages/cpt-ui/src/constants/ui-strings/PrescriptionInformationBannerStrings.ts
@@ -0,0 +1,9 @@
+export const STRINGS = {
+  PRESCRIPTION_ID: "Prescription ID",
+  COPY_BUTTON_ARIA_LABEL: "Copy this prescription ID to the clipboard",
+  COPY_BUTTON_TEXT: "Copy",
+  ISSUE_DATE: "Issue date",
+  STATUS: "Status",
+  TYPE: "Type",
+  DAYS_SUPPLY: "Days supply"
+}
diff --git a/packages/cpt-ui/src/context/PatientDetailsProvider.tsx b/packages/cpt-ui/src/context/PatientDetailsProvider.tsx
index 8542322b08..e55dac4c2f 100644
--- a/packages/cpt-ui/src/context/PatientDetailsProvider.tsx
+++ b/packages/cpt-ui/src/context/PatientDetailsProvider.tsx
@@ -12,16 +12,16 @@ import {normalizePath} from "@/helpers/utils"
 import {FRONTEND_PATHS} from "@/constants/environment"
 
 export type PatientDetailsContextType = {
-    patientDetails: PatientDetails | undefined
-    setPatientDetails: (value: PatientDetails) => void
-    clear: () => void
+  patientDetails: PatientDetails | undefined
+  setPatientDetails: (value: PatientDetails) => void
+  clear: () => void
 }
 
 export const PatientDetailsContext = createContext<PatientDetailsContextType | undefined>(
   undefined
 )
 
-export const PatientDetailsProvider = ({children}: { children: ReactNode }) => {
+export const PatientDetailsProvider = ({children}: {children: ReactNode}) => {
   const location = useLocation()
   const [patientDetails, setPatientDetails] = useState<PatientDetails | undefined>(undefined)
 
@@ -36,7 +36,8 @@ export const PatientDetailsProvider = ({children}: { children: ReactNode }) => {
     const patientDetailsAllowedPaths = [
       FRONTEND_PATHS.PRESCRIPTION_LIST_CURRENT,
       FRONTEND_PATHS.PRESCRIPTION_LIST_PAST,
-      FRONTEND_PATHS.PRESCRIPTION_LIST_FUTURE
+      FRONTEND_PATHS.PRESCRIPTION_LIST_FUTURE,
+      FRONTEND_PATHS.PRESCRIPTION_DETAILS_PAGE
     ]
 
     const path = normalizePath(location.pathname)
diff --git a/packages/cpt-ui/src/context/PrescriptionInformationProvider.tsx b/packages/cpt-ui/src/context/PrescriptionInformationProvider.tsx
new file mode 100644
index 0000000000..460ed08398
--- /dev/null
+++ b/packages/cpt-ui/src/context/PrescriptionInformationProvider.tsx
@@ -0,0 +1,62 @@
+import React, {
+  createContext,
+  useContext,
+  useState,
+  useEffect,
+  ReactNode
+} from "react"
+import {useLocation} from "react-router-dom"
+
+import {normalizePath} from "@/helpers/utils"
+import {FRONTEND_PATHS} from "@/constants/environment"
+import {PrescriptionDetails} from "@cpt-ui-common/common-types"
+
+export type PrescriptionInformationContextType = {
+  prescriptionInformation: PrescriptionDetails | undefined
+  setPrescriptionInformation: (value: PrescriptionDetails) => void
+  clear: () => void
+}
+
+export const PrescriptionInformationContext = createContext<PrescriptionInformationContextType | undefined>(undefined)
+
+export const PrescriptionInformationProvider = ({children}: {children: ReactNode}) => {
+  const location = useLocation()
+  const [prescriptionInformation, setPrescriptionInformation] = useState<PrescriptionDetails | undefined>(undefined)
+
+  const clear = () => {
+    console.log("Clearing prescription information context...")
+    setPrescriptionInformation(undefined)
+  }
+
+  useEffect(() => {
+    const prescriptionInfoAllowedPaths = [
+      FRONTEND_PATHS.PRESCRIPTION_DETAILS_PAGE
+    ]
+
+    const path = normalizePath(location.pathname)
+    if (!prescriptionInfoAllowedPaths.includes(path)) {
+      console.info("Clearing prescription information.")
+      clear()
+    }
+  }, [location.pathname])
+
+  return (
+    <PrescriptionInformationContext.Provider
+      value={{
+        prescriptionInformation,
+        setPrescriptionInformation,
+        clear
+      }}
+    >
+      {children}
+    </PrescriptionInformationContext.Provider>
+  )
+}
+
+export const usePrescriptionInformation = () => {
+  const context = useContext(PrescriptionInformationContext)
+  if (!context) {
+    throw new Error("usePrescriptionInformation must be used within a PrescriptionInformationProvider")
+  }
+  return context
+}
diff --git a/packages/cpt-ui/src/pages/PrescriptionDetailsPage.tsx b/packages/cpt-ui/src/pages/PrescriptionDetailsPage.tsx
new file mode 100644
index 0000000000..b0fd02977a
--- /dev/null
+++ b/packages/cpt-ui/src/pages/PrescriptionDetailsPage.tsx
@@ -0,0 +1,112 @@
+import React, {useEffect, useState} from "react"
+import {useSearchParams} from "react-router-dom"
+import {usePrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+import {usePatientDetails} from "@/context/PatientDetailsProvider"
+import {Container, Row, Col} from "nhsuk-react-components"
+import EpsSpinner from "@/components/EpsSpinner"
+import {PRESCRIPTION_DETAILS_PAGE_STRINGS} from "@/constants/ui-strings/PrescriptionDetailsPageStrings"
+
+export default function PrescriptionDetailsPage() {
+  const [searchParams] = useSearchParams()
+  const prescriptionId = searchParams.get("prescriptionId")
+  const {setPrescriptionInformation} = usePrescriptionInformation()
+  const {setPatientDetails} = usePatientDetails()
+
+  const [loading, setLoading] = useState(true)
+
+  useEffect(() => {
+    const loadData = async () => {
+      if (!prescriptionId) {
+        setLoading(false)
+        return
+      }
+
+      // Simulate data fetch delay
+      await new Promise((resolve) => setTimeout(resolve, 500))
+
+      if (prescriptionId === "C0C757-A83008-C2D93O") {
+        setPrescriptionInformation({
+          prescriptionId: prescriptionId,
+          issueDate: "18-Jan-2024",
+          status: "All items dispensed",
+          type: "Acute",
+          isERD: false,
+          instanceNumber: undefined,
+          maxRepeats: undefined,
+          daysSupply: undefined
+        })
+
+        setPatientDetails({
+          nhsNumber: "5900009890",
+          prefix: "Mr",
+          suffix: "",
+          given: "William",
+          family: "Wolderton",
+          gender: "male",
+          dateOfBirth: "01-Nov-1988",
+          address: {
+            line1: "55 OAK STREET",
+            line2: "OAK LANE",
+            city: "Leeds",
+            postcode: "LS1 1XX"
+          }
+        })
+      }
+
+      if (prescriptionId === "EC5ACF-A83008-733FD3") {
+        setPrescriptionInformation({
+          prescriptionId: prescriptionId,
+          issueDate: "22-Jan-2025",
+          status: "All items dispensed",
+          type: "eRD",
+          isERD: true,
+          instanceNumber: 2,
+          maxRepeats: 6,
+          daysSupply: 28
+        })
+
+        setPatientDetails({
+          nhsNumber: "5900009890",
+          prefix: "Ms",
+          suffix: "",
+          given: "Janet",
+          family: "Piper",
+          gender: null,
+          dateOfBirth: null,
+          address: null
+        })
+      }
+
+      setLoading(false)
+    }
+
+    loadData()
+  }, [prescriptionId, setPrescriptionInformation, setPatientDetails])
+
+  if (loading) {
+    return (
+      <main className="nhsuk-main-wrapper" id="prescription-details-page">
+        <Container>
+          <Row>
+            <Col width="full">
+              <h2>{PRESCRIPTION_DETAILS_PAGE_STRINGS.LOADING_FULL_PRESCRIPTION}</h2>
+              <EpsSpinner />
+            </Col>
+          </Row>
+        </Container>
+      </main>
+    )
+  }
+
+  return (
+    <main id="prescription-details-page" className="nhsuk-main-wrapper">
+      <Container>
+        <Row>
+          <Col width="full">
+            <h2 className="nhsuk-heading-l">{PRESCRIPTION_DETAILS_PAGE_STRINGS.PAGE_TITLE}</h2>
+          </Col>
+        </Row>
+      </Container>
+    </main>
+  )
+}
diff --git a/packages/cpt-ui/src/pages/PrescriptionListPage.tsx b/packages/cpt-ui/src/pages/PrescriptionListPage.tsx
index 96335b0969..c0a6abf2aa 100644
--- a/packages/cpt-ui/src/pages/PrescriptionListPage.tsx
+++ b/packages/cpt-ui/src/pages/PrescriptionListPage.tsx
@@ -195,8 +195,8 @@ export default function PrescriptionListPage() {
 
       setPrescriptionCount(
         searchResults.pastPrescriptions.length +
-          searchResults.futurePrescriptions.length +
-          searchResults.currentPrescriptions.length
+        searchResults.futurePrescriptions.length +
+        searchResults.currentPrescriptions.length
       )
 
       setTabData([
@@ -241,7 +241,7 @@ export default function PrescriptionListPage() {
 
       console.log("Response status", {status: response.status})
       if (response.status !== 200) {
-      // Throwing an error here will jump to the catch block.
+        // Throwing an error here will jump to the catch block.
         throw new Error(`Status Code: ${response.status}`)
       }
 
@@ -290,7 +290,7 @@ export default function PrescriptionListPage() {
 
       console.log("Response status", {status: response.status})
       if (response.status !== 200) {
-      // Throwing an error here will jump to the catch block.
+        // Throwing an error here will jump to the catch block.
         throw new Error(`Status Code: ${response.status}`)
       }
 
diff --git a/packages/cpt-ui/src/styles/main.scss b/packages/cpt-ui/src/styles/main.scss
index 35291980f4..83cbef19dc 100644
--- a/packages/cpt-ui/src/styles/main.scss
+++ b/packages/cpt-ui/src/styles/main.scss
@@ -7,5 +7,6 @@
 @use "./header";
 @use "./rbacBanner";
 @use "./patientDetailsBanner";
+@use "./prescriptionInformationBanner.scss";
 @use "./searchforaprescription";
 @use "./tabs";
diff --git a/packages/cpt-ui/src/styles/prescriptionInformationBanner.scss b/packages/cpt-ui/src/styles/prescriptionInformationBanner.scss
new file mode 100644
index 0000000000..fbd632818a
--- /dev/null
+++ b/packages/cpt-ui/src/styles/prescriptionInformationBanner.scss
@@ -0,0 +1,86 @@
+.prescription-information-banner {
+  color: #212b32;
+  background-color: #fff;
+  display: flex;
+  flex-direction: column;
+  padding: 16px 23px;
+  font-size: 16px;
+  -webkit-font-smoothing: antialiased;
+  line-height: 1.5;
+
+  @media (max-width: 640px) {
+    padding: 8px 16px;
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
+
+.prescription-information-banner-row {
+  display: flex;
+  flex-wrap: wrap;
+  flex-direction: row;
+  align-items: flex-end;
+  row-gap: 0.2rem;
+  width: 100%;
+  overflow-x: auto;
+}
+
+.patient-summary__block {
+  display: flex;
+  align-items: flex-end;
+  font-size: 16px;
+  white-space: nowrap;
+  margin-right: 24px;
+}
+
+.prescription-id-block {
+  margin-right: 42px;
+}
+
+.patient-summary__info {
+  display: flex;
+  align-items: center;
+  font-size: 16px;
+  line-height: 1.5;
+  margin-bottom: 0;
+  white-space: nowrap;
+  text-wrap: nowrap;
+  white-space-collapse: collapse;
+  box-sizing: border-box;
+  color: #212b32;
+}
+
+.copy-button-wrapper {
+  margin-left: 10px;
+}
+
+.copy-button {
+  background-color: #007f3b;
+  box-shadow: 0 4px 0 #004721;
+  color: #ffffff;
+  display: inline-block;
+  padding-top: 0;
+  padding-bottom: 0;
+  font-size: 0.875rem;
+  line-height: 1.71429;
+
+  @media (max-width: 640px) {
+    font-size: 0.75rem;
+    line-height: 1.6667;
+    padding-top: 0;
+    padding-bottom: 0;
+  }
+}
+.nhsuk-u-margin-1 {
+  margin: 4px !important;
+}
+
+#copyText {
+  margin-left: 0.25rem;
+  white-space: normal;
+  word-break: break-word;
+}
+
+#summary-status .nhsuk-tag {
+  margin-left: 0.25rem;
+}
diff --git a/packages/cpt-ui/tsconfig.json b/packages/cpt-ui/tsconfig.json
index 114b84bf32..c1c8c2dbaa 100644
--- a/packages/cpt-ui/tsconfig.json
+++ b/packages/cpt-ui/tsconfig.json
@@ -9,7 +9,8 @@
     "**/*.tsx",
     "vite-env.d.ts",
     "jest.config.ts",
-    "jest.setup.ts"
+    "jest.setup.ts",
+    "global.d.ts"
   ],
   "compilerOptions": {
     "baseUrl": ".",
diff --git a/scripts/run_regression_tests.py b/scripts/run_regression_tests.py
index bb8a4e377e..e77b796fd0 100644
--- a/scripts/run_regression_tests.py
+++ b/scripts/run_regression_tests.py
@@ -13,7 +13,7 @@
 from requests.auth import HTTPBasicAuth
 
 # This should be set to a known good version of regression test repo
-REGRESSION_TESTS_REPO_TAG = "v2.18.1"
+REGRESSION_TESTS_REPO_TAG = "v2.19.0"
 
 GITHUB_API_URL = "https://api.github.com/repos/NHSDigital/electronic-prescription-service-api-regression-tests/actions"
 GITHUB_RUN_URL = "https://github.com/NHSDigital/electronic-prescription-service-api-regression-tests/actions/runs"


Reviews:
user: login: wildjames
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T11:37:21Z
user: login: kris-szlapa
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-08T11:47:42Z
user: login: kris-szlapa
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-08T11:49:13Z
user: login: kris-szlapa
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-10T13:08:06Z
user: login: wildjames
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T14:50:35Z
user: login: kris-szlapa
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-10T15:03:55Z
user: login: wildjames
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T15:15:26Z
user: login: wildjames
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T15:37:12Z

Review comments:
diff_hunk: @@ -0,0 +1,97 @@
+import {jest} from "@jest/globals"
+import React from "react"
+import "@testing-library/jest-dom"
+import {render, screen, fireEvent} from "@testing-library/react"
+
+import PrescriptionInformationBanner from "@/components/PrescriptionInformationBanner"
+import {STRINGS} from "@/constants/ui-strings/PrescriptionInformationBannerStrings"
+import {PrescriptionInformationContext, PrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+
+const renderWithContext = (prescriptionInformation: PrescriptionInformation | undefined) => {
+  return render(
+    <PrescriptionInformationContext.Provider
+      value={{
+        prescriptionInformation,
+        setPrescriptionInformation: jest.fn(),
+        clear: jest.fn()
+      }}
+    >
+      <PrescriptionInformationBanner />
+    </PrescriptionInformationContext.Provider>
+  )
+}
+
+describe("PrescriptionInformationBanner", () => {
+  beforeEach(() => {
+    jest.clearAllMocks()
+  })
+
+  it("does not render when prescription information is undefined", () => {
+    renderWithContext(undefined)
+    expect(screen.queryByTestId("prescription-information-banner")).not.toBeInTheDocument()
+  })
+
+  it("renders Acute prescription information correctly", () => {
+    const data = {
+      id: "C0C757-A83008-C2D93O",
+      issueDate: "18-Jan-2024",
+      status: "All items dispensed",
+      type: "Acute"
+    } // as const or as any if needed
path: packages/cpt-ui/__tests__/PrescriptionInformationBanner.test.tsx
user: login: wildjames
body: unnecessary comment
created_at: 2025-04-08T11:08:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,10 @@
+export {}
+
+declare global {
+  interface Window {
+    __mockedPatientDetails?: import("@/context/PatientDetailsProvider")
+    .PatientDetailsContextType["patientDetails"]
path: packages/cpt-ui/global.d.ts
user: login: wildjames
body: formatting niggle, but tab these in so it's a bit clearer that they're children of the import
created_at: 2025-04-08T11:12:17Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,72 @@
+import React, {
+  createContext,
+  useContext,
+  useState,
+  useEffect,
+  ReactNode
+} from "react"
+import {useLocation} from "react-router-dom"
+
+import {normalizePath} from "@/helpers/utils"
+import {FRONTEND_PATHS} from "@/constants/environment"
+
+export interface PrescriptionInformation {
path: packages/cpt-ui/src/context/PrescriptionInformationProvider.tsx
user: login: wildjames
body: If this data is being fetched from the backend and stored directly, it's better to have a type defined in the `common-types` package, and use that. If there's any parsing or extraction that needs to be done, that should be done by the banner.
created_at: 2025-04-08T11:36:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,97 @@
+import {jest} from "@jest/globals"
+import React from "react"
+import "@testing-library/jest-dom"
+import {render, screen, fireEvent} from "@testing-library/react"
+
+import PrescriptionInformationBanner from "@/components/PrescriptionInformationBanner"
+import {STRINGS} from "@/constants/ui-strings/PrescriptionInformationBannerStrings"
+import {PrescriptionInformationContext, PrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+
+const renderWithContext = (prescriptionInformation: PrescriptionInformation | undefined) => {
+  return render(
+    <PrescriptionInformationContext.Provider
+      value={{
+        prescriptionInformation,
+        setPrescriptionInformation: jest.fn(),
+        clear: jest.fn()
+      }}
+    >
+      <PrescriptionInformationBanner />
+    </PrescriptionInformationContext.Provider>
+  )
+}
+
+describe("PrescriptionInformationBanner", () => {
+  beforeEach(() => {
+    jest.clearAllMocks()
+  })
+
+  it("does not render when prescription information is undefined", () => {
+    renderWithContext(undefined)
+    expect(screen.queryByTestId("prescription-information-banner")).not.toBeInTheDocument()
+  })
+
+  it("renders Acute prescription information correctly", () => {
+    const data = {
+      id: "C0C757-A83008-C2D93O",
+      issueDate: "18-Jan-2024",
+      status: "All items dispensed",
+      type: "Acute"
+    } // as const or as any if needed
path: packages/cpt-ui/__tests__/PrescriptionInformationBanner.test.tsx
user: login: kris-szlapa
body: The unnecessary comment has been removed.
created_at: 2025-04-08T11:47:42Z
author_association: NONE
diff_hunk: @@ -0,0 +1,10 @@
+export {}
+
+declare global {
+  interface Window {
+    __mockedPatientDetails?: import("@/context/PatientDetailsProvider")
+    .PatientDetailsContextType["patientDetails"]
path: packages/cpt-ui/global.d.ts
user: login: kris-szlapa
body: The max-len rule was disabled rather than adjusting the code indentation.
created_at: 2025-04-08T11:49:13Z
author_association: NONE
diff_hunk: @@ -0,0 +1,72 @@
+import React, {
+  createContext,
+  useContext,
+  useState,
+  useEffect,
+  ReactNode
+} from "react"
+import {useLocation} from "react-router-dom"
+
+import {normalizePath} from "@/helpers/utils"
+import {FRONTEND_PATHS} from "@/constants/environment"
+
+export interface PrescriptionInformation {
path: packages/cpt-ui/src/context/PrescriptionInformationProvider.tsx
user: login: kris-szlapa
body: The PrescriptionDetails types have been defined in the common-types packages.
created_at: 2025-04-10T13:08:05Z
author_association: NONE
diff_hunk: @@ -0,0 +1,68 @@
+import React from "react"
+import {usePrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+import {STRINGS} from "@/constants/ui-strings/PrescriptionInformationBannerStrings"
+
+const PrescriptionInformationBanner: React.FC = () => {
+  const {prescriptionInformation: prescription} = usePrescriptionInformation()
+
+  if (!prescription) return null
+
+  const copyToClipboard = () => {
+    navigator.clipboard.writeText(prescription.prescriptionId)
+  }
+
+  const renderType = () => {
+    if (prescription.isERD && prescription.instanceNumber !== undefined && prescription.maxRepeats !== undefined) {
+      return `${prescription.type} ${prescription.instanceNumber} of ${prescription.maxRepeats}`
+    }
+    return prescription.type
+  }
+
+  return (
path: packages/cpt-ui/src/components/PrescriptionInformationBanner.tsx
user: login: wildjames
body: These should use `nhsuk-react-components`

https://main--65aa76b29d00a047fe683b95.chromatic.com/?path=/docs/form-elements-button--docs

https://main--65aa76b29d00a047fe683b95.chromatic.com/?path=/docs/content-presentation-tag--docs
created_at: 2025-04-10T14:19:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,68 @@
+import React from "react"
+import {usePrescriptionInformation} from "@/context/PrescriptionInformationProvider"
+import {STRINGS} from "@/constants/ui-strings/PrescriptionInformationBannerStrings"
+
+const PrescriptionInformationBanner: React.FC = () => {
+  const {prescriptionInformation: prescription} = usePrescriptionInformation()
+
+  if (!prescription) return null
+
+  const copyToClipboard = () => {
+    navigator.clipboard.writeText(prescription.prescriptionId)
+  }
+
+  const renderType = () => {
+    if (prescription.isERD && prescription.instanceNumber !== undefined && prescription.maxRepeats !== undefined) {
+      return `${prescription.type} ${prescription.instanceNumber} of ${prescription.maxRepeats}`
+    }
+    return prescription.type
+  }
+
+  return (
path: packages/cpt-ui/src/components/PrescriptionInformationBanner.tsx
user: login: kris-szlapa
body: The nhsuk-react-components have been implemented.
created_at: 2025-04-10T15:03:54Z
author_association: NONE
diff_hunk: @@ -0,0 +1,8 @@
+export {}
+
+declare global {
path: packages/cpt-ui/global.d.ts
user: login: wildjames
body: If it's possible, this should be in the file `jest.setup.ts`, but check that it still works when placed in that file, I'm not 100% sure if it'll still work correctly
created_at: 2025-04-10T15:15:26Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-04T07:13:23Z
body: This branch is work on a ticket in the NHS Digital APM JIRA Project. Here's a handy link to the ticket:
# [](https://nhsd-jira.digital.nhs.uk/browse/)

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-04T07:13:35Z
body: Deployed URL: https://cpt-ui-pr-670.dev.eps.national.nhs.uk/site

author_association: CONTRIBUTOR
user: login: sonarqubecloud[bot]
created_at: 2025-04-10T16:00:08Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [3 New issues](https://sonarcloud.io/project/issues?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [96.6% Coverage on New Code](https://sonarcloud.io/component_measures?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=NHSDigital_eps-prescription-tracker-ui&pullRequest=670)


author_association: NONE